@@ -15,6 +15,7 @@ import (
1515 "github.com/vinser/flibgolite/pkg/config"
1616 "github.com/vinser/flibgolite/pkg/database"
1717 "github.com/vinser/flibgolite/pkg/genres"
18+ "github.com/vinser/flibgolite/pkg/hash"
1819 "github.com/vinser/flibgolite/pkg/model"
1920 "github.com/vinser/flibgolite/pkg/opds"
2021 "github.com/vinser/flibgolite/pkg/stock"
@@ -134,51 +135,49 @@ func reindexStock() {
134135
135136 db := database .NewDB (cfg .Database .DSN )
136137 defer db .Close ()
137- db .InitDB ()
138- stockLog .S .Println ("Book stock was inited. Tables were created in empty database" )
139-
140- genresTree := genres .NewGenresTree (cfg .Genres .TREE_FILE )
141-
142- databaseQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
143- defer close (databaseQueue )
144- databaseHandler := & database.Handler {
145- CFG : cfg ,
146- DB : db ,
147- LOG : stockLog ,
148- Queue : databaseQueue ,
138+ if ! db .IsReady () {
139+ db .InitDB ()
140+ stockLog .S .Println ("Book stock was inited. Tables were created in empty database" )
149141 }
150- databaseHandler .Stop = make (chan struct {})
151- defer close (databaseHandler .Stop )
152142
153- go databaseHandler .AddBooksToIndex ()
143+ genresTree := genres .NewGenresTree (cfg .Genres .TREE_FILE )
144+ hashes := hash .InitHashes (db .DB )
154145
146+ bookQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
147+ defer close (bookQueue )
155148 fileQueue := make (chan stock.File , cfg .Database .FILE_QUEUE_SIZE )
156149 defer close (fileQueue )
157150 stockHandler := & stock.Handler {
158- CFG : cfg ,
159- LOG : stockLog ,
160- DB : db ,
161- GT : genresTree ,
162- Queue : fileQueue ,
151+ CFG : cfg ,
152+ LOG : stockLog ,
153+ DB : db ,
154+ GT : genresTree ,
155+ BookQueue : bookQueue ,
156+ FileQueue : fileQueue ,
157+ Hashes : hashes ,
163158 }
159+ stockHandler .StopDB = make (chan struct {})
160+ defer close (stockHandler .StopDB )
161+ stockHandler .StopScan = make (chan struct {})
162+ defer close (stockHandler .StopScan )
163+
164164 stockHandler .InitStockFolders ()
165- stockHandler .Stop = make (chan struct {})
166- defer close (stockHandler .Stop )
165+ go stockHandler .AddBooksToIndex ()
167166 for i := 0 ; i < cfg .Database .MAX_SCAN_THREADS ; i ++ {
168- go stockHandler .ParseFB2Queue (databaseQueue )
167+ go stockHandler .ParseFB2Queue ()
169168 }
170169
171- defer func () { stockHandler .Stop <- struct {}{} }()
170+ defer func () { stockHandler .StopScan <- struct {}{} }()
172171 dir := cfg .Library .STOCK_DIR
173172 if len (cfg .Library .NEW_DIR ) > 0 {
174173 dir = cfg .Library .NEW_DIR
175174 }
176- stockHandler .ScanDir (dir , databaseQueue )
175+ stockHandler .ScanDir (dir )
177176
178- stockHandler .Stop <- struct {}{}
177+ stockHandler .StopScan <- struct {}{}
179178
180- databaseHandler . Stop <- struct {}{}
181- <- databaseHandler . Stop
179+ stockHandler . StopDB <- struct {}{}
180+ <- stockHandler . StopDB
182181
183182 stockLog .S .Println ("<<< Book stock reindex finished <<<<<<<<<<<<<<<<<<<<<<<<<<<" )
184183 stockLog .S .Println ("Time elapsed: " , time .Since (start ))
@@ -203,46 +202,42 @@ func run() {
203202 }
204203
205204 genresTree := genres .NewGenresTree (cfg .Genres .TREE_FILE )
205+ hashes := hash .InitHashes (db .DB )
206206
207- databaseQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
208- defer close (databaseQueue )
209- databaseHandler := & database.Handler {
210- CFG : cfg ,
211- DB : db ,
212- LOG : stockLog ,
213- Queue : databaseQueue ,
214- }
215- databaseHandler .Stop = make (chan struct {})
216- defer close (databaseHandler .Stop )
217-
218- go databaseHandler .AddBooksToIndex ()
219-
207+ bookQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
208+ defer close (bookQueue )
220209 fileQueue := make (chan stock.File , cfg .Database .FILE_QUEUE_SIZE )
221210 defer close (fileQueue )
222211 stockHandler := & stock.Handler {
223- CFG : cfg ,
224- LOG : stockLog ,
225- DB : db ,
226- GT : genresTree ,
227- Queue : fileQueue ,
212+ CFG : cfg ,
213+ LOG : stockLog ,
214+ DB : db ,
215+ GT : genresTree ,
216+ BookQueue : bookQueue ,
217+ FileQueue : fileQueue ,
218+ Hashes : hashes ,
228219 }
220+ stockHandler .StopDB = make (chan struct {})
221+ defer close (stockHandler .StopDB )
229222 stockHandler .InitStockFolders ()
230- stockHandler .Stop = make (chan struct {})
231- defer close (stockHandler .Stop )
223+ stockHandler .StopScan = make (chan struct {})
224+ defer close (stockHandler .StopScan )
225+
226+ go stockHandler .AddBooksToIndex ()
232227 for i := 0 ; i < cfg .Database .MAX_SCAN_THREADS ; i ++ {
233- go stockHandler .ParseFB2Queue (databaseQueue )
228+ go stockHandler .ParseFB2Queue ()
234229 }
235230 go func () {
236- defer func () { stockHandler .Stop <- struct {}{} }()
231+ defer func () { stockHandler .StopScan <- struct {}{} }()
237232 dir := cfg .Library .STOCK_DIR
238233 if len (cfg .Library .NEW_DIR ) > 0 {
239234 dir = cfg .Library .NEW_DIR
240235 }
241236 for {
242- stockHandler .ScanDir (dir , databaseQueue )
237+ stockHandler .ScanDir (dir )
243238 time .Sleep (time .Duration (cfg .Database .POLL_DELAY ) * time .Second )
244239 select {
245- case <- stockHandler .Stop :
240+ case <- stockHandler .StopScan :
246241 return
247242 default :
248243 continue
@@ -279,14 +274,14 @@ func run() {
279274 opdsHandler .LOG .S .Printf ("Shutdown started...\n " )
280275
281276 // Stop scanning for new acquisitions and wait for completion
282- stockHandler .Stop <- struct {}{}
283- <- stockHandler .Stop
277+ stockHandler .StopScan <- struct {}{}
278+ <- stockHandler .StopScan
284279 stockHandler .LOG .S .Printf ("New acquisitions scanning was stoped correctly\n " )
285280
286281 // Stop addind new acquisitions to index and wait for completion
287- databaseHandler . Stop <- struct {}{}
288- <- databaseHandler . Stop
289- databaseHandler .LOG .S .Printf ("New acquisitions adding was stoped correctly\n " )
282+ stockHandler . StopDB <- struct {}{}
283+ <- stockHandler . StopDB
284+ stockHandler .LOG .S .Printf ("New acquisitions adding was stoped correctly\n " )
290285
291286 // Shutdown OPDS server
292287 ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
0 commit comments