mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
API to get FTS indexing progress
This commit is contained in:
parent
0199dd15ba
commit
afcaac89c6
@ -431,24 +431,37 @@ class Cache:
|
|||||||
self.fts_queue_thread = None
|
self.fts_queue_thread = None
|
||||||
self.fts_job_queue = Queue()
|
self.fts_job_queue = Queue()
|
||||||
self.backend.initialize_fts(weakref.ref(self))
|
self.backend.initialize_fts(weakref.ref(self))
|
||||||
|
if self.is_fts_enabled():
|
||||||
|
self.start_fts_pool()
|
||||||
|
|
||||||
|
def start_fts_pool(self):
|
||||||
|
from threading import Thread
|
||||||
|
self.fts_queue_thread = Thread(name='FTSQueue', target=Cache.dispatch_fts_jobs, args=(self.fts_job_queue, weakref.ref(self)), daemon=True)
|
||||||
|
self.fts_queue_thread.start()
|
||||||
|
self.backend.fts.pool.initialize()
|
||||||
|
self.backend.fts.pool.initialized.wait()
|
||||||
self.queue_next_fts_job()
|
self.queue_next_fts_job()
|
||||||
|
|
||||||
@read_api
|
@read_api
|
||||||
def is_fts_enabled(self):
|
def is_fts_enabled(self):
|
||||||
return self.backend.fts_enabled
|
return self.backend.fts_enabled
|
||||||
|
|
||||||
|
@read_api
|
||||||
|
def fts_indexing_progress(self):
|
||||||
|
if not self.is_fts_enabled():
|
||||||
|
return 0, 0
|
||||||
|
num_to_scan = self.backend.fts.number_dirtied()
|
||||||
|
if not num_to_scan:
|
||||||
|
return 0, 1
|
||||||
|
return num_to_scan, (self.backend.get('SELECT COUNT(*) FROM main.data')[0][0] or 0)
|
||||||
|
|
||||||
@write_api
|
@write_api
|
||||||
def enable_fts(self, enabled=True, start_pool=True, mark_all_dirty=False):
|
def enable_fts(self, enabled=True, start_pool=True, mark_all_dirty=False):
|
||||||
fts = self.backend.enable_fts(weakref.ref(self) if enabled else None)
|
fts = self.backend.enable_fts(weakref.ref(self) if enabled else None)
|
||||||
if fts and start_pool: # used in the tests
|
if fts and start_pool: # used in the tests
|
||||||
from threading import Thread
|
|
||||||
if mark_all_dirty:
|
if mark_all_dirty:
|
||||||
fts.dirty_existing()
|
fts.dirty_existing()
|
||||||
self.fts_queue_thread = Thread(name='FTSQueue', target=Cache.dispatch_fts_jobs, args=(self.fts_job_queue, weakref.ref(self)), daemon=True)
|
self.start_fts_pool()
|
||||||
self.fts_queue_thread.start()
|
|
||||||
fts.pool.initialize()
|
|
||||||
fts.pool.initialized.wait()
|
|
||||||
self.queue_next_fts_job()
|
|
||||||
if not fts and self.fts_queue_thread:
|
if not fts and self.fts_queue_thread:
|
||||||
self.fts_job_queue.put(None)
|
self.fts_job_queue.put(None)
|
||||||
self.fts_queue_thread = None
|
self.fts_queue_thread = None
|
||||||
|
@ -57,6 +57,10 @@ class FTS:
|
|||||||
SELECT book, format FROM main.data;
|
SELECT book, format FROM main.data;
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
def number_dirtied(self):
|
||||||
|
conn = self.get_connection()
|
||||||
|
return conn.get('''SELECT COUNT(*) from fts_db.dirtied_formats''')[0][0]
|
||||||
|
|
||||||
def all_currently_dirty(self):
|
def all_currently_dirty(self):
|
||||||
conn = self.get_connection()
|
conn = self.get_connection()
|
||||||
return conn.get('''SELECT book, format from fts_db.dirtied_formats''', all=True)
|
return conn.get('''SELECT book, format from fts_db.dirtied_formats''', all=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user