diff options
Diffstat (limited to 'lib/books.py')
-rw-r--r-- | lib/books.py | 44 |
1 files changed, 13 insertions, 31 deletions
diff --git a/lib/books.py b/lib/books.py index 1c4b4a5..3244d13 100644 --- a/lib/books.py +++ b/lib/books.py @@ -9,20 +9,11 @@ from datetime import timedelta from flask import Flask from lib.tinytag import TinyTag -ABS_PATH = os.path.dirname(os.path.abspath(__file__)) -CACHE_PATH = os.path.join(ABS_PATH, '../', 'cache') -JSON_PATH = os.path.join(CACHE_PATH, 'audiobooks.json') - -# use Flask's config parser, configparser would be hacky -APP = Flask(__name__) -APP.config.from_pyfile(os.path.join(ABS_PATH, '../', 'app.cfg')) - class Books: - def __init__(self): - ''' - Book-related handlers (r/w cache) and track discovery - ''' - if os.path.exists(JSON_PATH): + def __init__(self, cache_path): + self.cache_path = cache_path + self.json_path = os.path.join(cache_path, 'audiobooks.json') + if os.path.exists(self.json_path): self._cache = self._read_cache() else: self._cache = {} @@ -56,24 +47,21 @@ class Books: ''' Dump contents of :books: to :json_path: ''' - if not os.path.exists(CACHE_PATH): - os.mkdir(CACHE_PATH) - with open(JSON_PATH, 'w') as cache: + if not os.path.exists(self.cache_path): + os.mkdir(self.cache_path) + with open(self.json_path, 'w') as cache: json.dump(self.books, cache, indent=4) def _read_cache(self): ''' Return dict of existing cache ''' - with open(JSON_PATH, 'r') as cache: + with open(self.json_path, 'r') as cache: data = json.load(cache) return data def _validate(self, v, b): - ''' - Returns :v: if :v: and v.isspace(), otherwise :b: - ''' if v and not v.isspace(): return v @@ -86,15 +74,12 @@ class Books: now = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S") print('%s %s' % (now, msg)) - def scan_books(self): + def scan_books(self, audiobook_path=None): ''' - Discover audiobooks under :root_path: and populate books object - - :cache: existing JSON cache, used to determine which content is new - (existing content is not re-hashed) + Discover audiobooks under :root_path: and populate books ''' ex = self._get_path_hash_dict() - dirs = self._get_dirs(APP.config['ROOT_PATH']) + dirs = self._get_dirs(audiobook_path) books = dict() for path in dirs: @@ -110,8 +95,7 @@ class Books: def _check_dir(self, path): ''' - Determine if :path: contains (supported) audio files; return populated - book dict or None + Determine if :path: contains (supported) audio files ''' ext = ['mp3'] # m4b seems to be unsupported by Apple is_book = False @@ -145,7 +129,7 @@ class Books: # previous conditions met, we've found at least one track is_book = True - self._log(f) + self._log(os.path.join(path, f)) # hash track (used as a key) and update folder hash file_hash = hashlib.md5() @@ -207,5 +191,3 @@ class Books: book['duration_str'] = duration_str.split('.')[0] return (folder_hash, book) - - return None |