From 75fd720b19b06fb531367db0c39de3a778014227 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 18 Jan 2016 17:32:42 +0530 Subject: [PATCH] import books from import folder, fixes #136 --- oml/item/scan.py | 33 +++++++++++++++++++++++++-------- oml/server.py | 1 + oml/tasks.py | 4 +++- oml/utils.py | 5 +++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/oml/item/scan.py b/oml/item/scan.py index 07f3bcd..c27a97b 100644 --- a/oml/item/scan.py +++ b/oml/item/scan.py @@ -10,7 +10,7 @@ import time import ox from changelog import Changelog -from item.models import File, Scrape +from item.models import File from user.models import List from utils import remove_empty_folders from websocket import trigger_event @@ -47,7 +47,7 @@ def remove_missing(): if not state.tasks.connected: return f.move() - remove_empty_folders(prefix) + remove_empty_folders(prefix, True) def add_file(id, f, prefix, from_=None): user = state.user() @@ -173,19 +173,24 @@ def run_import(options=None): with db.session(): id = media.get_id(f) file = File.get(id) + f_import = f if not file: - f_import = f f = f.replace(prefix, prefix_imported) ox.makedirs(os.path.dirname(f)) if options.get('mode') == 'move': - shutil.move(f_import, f) + try: + shutil.move(f_import, f) + except: + shutil.copy2(f_import, f) else: - shutil.copy(f_import, f) + shutil.copy2(f_import, f) file = add_file(id, f, prefix_books, f_import) file.move() added += 1 - if listname: - listitems.append(file.item.id) + elif options.get('mode') == 'move': + os.unlink(f_import) + if listname: + listitems.append(file.item.id) if time.time() - last > 5: last = time.time() state.activity = { @@ -214,4 +219,16 @@ def run_import(options=None): state.activity = {} remove_empty_folders(prefix_books) if options.get('mode') == 'move': - remove_empty_folders(prefix) + remove_empty_folders(prefix, True) + +def import_folder(): + import_path = settings.preferences['importPath'] + logger.debug('scan importPath %s', import_path) + if os.path.exists(import_path): + run_import({ + 'path': import_path, + 'mode': 'move' + }) + remove_empty_folders(import_path, True) + if state.main: + state.main.call_later(10*60, lambda: state.tasks.queue('scanimport')) diff --git a/oml/server.py b/oml/server.py index 4d362fa..4f80e9a 100644 --- a/oml/server.py +++ b/oml/server.py @@ -159,6 +159,7 @@ def run(): state.main.call_later(10, publish) else: nodes.publish_node() + state.main.call_later(10, lambda: state.tasks.queue('scanimport')) state.main.add_callback(publish) if not state.update: diff --git a/oml/tasks.py b/oml/tasks.py index e7fcd07..37d82c3 100644 --- a/oml/tasks.py +++ b/oml/tasks.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # vi:si:et:sw=4:sts=4:ts=4 - +import os from queue import Queue from threading import Thread @@ -36,6 +36,8 @@ class Tasks(Thread): export_list(data) elif action == 'scan': item.scan.run_scan() + elif action == 'scanimport': + item.scan.import_folder() elif action == 'peering': update_user_peering(*data) else: diff --git a/oml/utils.py b/oml/utils.py index b827e33..0144820 100644 --- a/oml/utils.py +++ b/oml/utils.py @@ -310,14 +310,15 @@ def update_dict(root, data): if hasattr(root, '_save'): root._save() -def remove_empty_folders(prefix): +def remove_empty_folders(prefix, keep_root=False): empty = [] for root, folders, files in os.walk(prefix): if len(files) == 1 and files[0] == '.DS_Store': os.unlink(os.path.join(root, files[0])) files = [] if not folders and not files: - empty.append(root) + if root != prefix or not keep_root: + empty.append(root) for folder in empty: remove_empty_tree(folder)