@@ -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,56 @@ 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" )
138+ if ! db .IsReady () {
139+ db .InitDB ()
140+ stockLog .S .Println ("Book stock was inited. Tables were created in empty database" )
141+ }
139142
140143 genresTree := genres .NewGenresTree (cfg .Genres .TREE_FILE )
144+ hashes := hash .InitHashes (db .DB )
141145
142146 databaseQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
143147 defer close (databaseQueue )
144148 databaseHandler := & database.Handler {
145- CFG : cfg ,
146- DB : db ,
147- LOG : stockLog ,
148- Queue : databaseQueue ,
149+ CFG : cfg ,
150+ DB : db ,
151+ LOG : stockLog ,
152+ Queue : databaseQueue ,
153+ Hashes : hashes ,
149154 }
150- databaseHandler .Stop = make (chan struct {})
151- defer close (databaseHandler .Stop )
155+ databaseHandler .StopDB = make (chan struct {})
156+ defer close (databaseHandler .StopDB )
152157
153158 go databaseHandler .AddBooksToIndex ()
154159
155160 fileQueue := make (chan stock.File , cfg .Database .FILE_QUEUE_SIZE )
156161 defer close (fileQueue )
157162 stockHandler := & stock.Handler {
158- CFG : cfg ,
159- LOG : stockLog ,
160- DB : db ,
161- GT : genresTree ,
162- Queue : fileQueue ,
163+ CFG : cfg ,
164+ LOG : stockLog ,
165+ DB : db ,
166+ GT : genresTree ,
167+ Queue : fileQueue ,
168+ Hashes : hashes ,
163169 }
164170 stockHandler .InitStockFolders ()
165- stockHandler .Stop = make (chan struct {})
166- defer close (stockHandler .Stop )
171+ stockHandler .StopScan = make (chan struct {})
172+ defer close (stockHandler .StopScan )
167173 for i := 0 ; i < cfg .Database .MAX_SCAN_THREADS ; i ++ {
168174 go stockHandler .ParseFB2Queue (databaseQueue )
169175 }
170176
171- defer func () { stockHandler .Stop <- struct {}{} }()
177+ defer func () { stockHandler .StopScan <- struct {}{} }()
172178 dir := cfg .Library .STOCK_DIR
173179 if len (cfg .Library .NEW_DIR ) > 0 {
174180 dir = cfg .Library .NEW_DIR
175181 }
176182 stockHandler .ScanDir (dir , databaseQueue )
177183
178- stockHandler .Stop <- struct {}{}
184+ stockHandler .StopScan <- struct {}{}
179185
180- databaseHandler .Stop <- struct {}{}
181- <- databaseHandler .Stop
186+ databaseHandler .StopDB <- struct {}{}
187+ <- databaseHandler .StopDB
182188
183189 stockLog .S .Println ("<<< Book stock reindex finished <<<<<<<<<<<<<<<<<<<<<<<<<<<" )
184190 stockLog .S .Println ("Time elapsed: " , time .Since (start ))
@@ -203,37 +209,40 @@ func run() {
203209 }
204210
205211 genresTree := genres .NewGenresTree (cfg .Genres .TREE_FILE )
212+ hashes := hash .InitHashes (db .DB )
206213
207214 databaseQueue := make (chan model.Book , cfg .Database .BOOK_QUEUE_SIZE )
208215 defer close (databaseQueue )
209216 databaseHandler := & database.Handler {
210- CFG : cfg ,
211- DB : db ,
212- LOG : stockLog ,
213- Queue : databaseQueue ,
217+ CFG : cfg ,
218+ DB : db ,
219+ LOG : stockLog ,
220+ Queue : databaseQueue ,
221+ Hashes : hashes ,
214222 }
215- databaseHandler .Stop = make (chan struct {})
216- defer close (databaseHandler .Stop )
223+ databaseHandler .StopDB = make (chan struct {})
224+ defer close (databaseHandler .StopDB )
217225
218226 go databaseHandler .AddBooksToIndex ()
219227
220228 fileQueue := make (chan stock.File , cfg .Database .FILE_QUEUE_SIZE )
221229 defer close (fileQueue )
222230 stockHandler := & stock.Handler {
223- CFG : cfg ,
224- LOG : stockLog ,
225- DB : db ,
226- GT : genresTree ,
227- Queue : fileQueue ,
231+ CFG : cfg ,
232+ LOG : stockLog ,
233+ DB : db ,
234+ GT : genresTree ,
235+ Queue : fileQueue ,
236+ Hashes : hashes ,
228237 }
229238 stockHandler .InitStockFolders ()
230- stockHandler .Stop = make (chan struct {})
231- defer close (stockHandler .Stop )
239+ stockHandler .StopScan = make (chan struct {})
240+ defer close (stockHandler .StopScan )
232241 for i := 0 ; i < cfg .Database .MAX_SCAN_THREADS ; i ++ {
233242 go stockHandler .ParseFB2Queue (databaseQueue )
234243 }
235244 go func () {
236- defer func () { stockHandler .Stop <- struct {}{} }()
245+ defer func () { stockHandler .StopScan <- struct {}{} }()
237246 dir := cfg .Library .STOCK_DIR
238247 if len (cfg .Library .NEW_DIR ) > 0 {
239248 dir = cfg .Library .NEW_DIR
@@ -242,7 +251,7 @@ func run() {
242251 stockHandler .ScanDir (dir , databaseQueue )
243252 time .Sleep (time .Duration (cfg .Database .POLL_DELAY ) * time .Second )
244253 select {
245- case <- stockHandler .Stop :
254+ case <- stockHandler .StopScan :
246255 return
247256 default :
248257 continue
@@ -279,13 +288,13 @@ func run() {
279288 opdsHandler .LOG .S .Printf ("Shutdown started...\n " )
280289
281290 // Stop scanning for new acquisitions and wait for completion
282- stockHandler .Stop <- struct {}{}
283- <- stockHandler .Stop
291+ stockHandler .StopScan <- struct {}{}
292+ <- stockHandler .StopScan
284293 stockHandler .LOG .S .Printf ("New acquisitions scanning was stoped correctly\n " )
285294
286295 // Stop addind new acquisitions to index and wait for completion
287- databaseHandler .Stop <- struct {}{}
288- <- databaseHandler .Stop
296+ databaseHandler .StopDB <- struct {}{}
297+ <- databaseHandler .StopDB
289298 databaseHandler .LOG .S .Printf ("New acquisitions adding was stoped correctly\n " )
290299
291300 // Shutdown OPDS server
0 commit comments