Compare commits

..

5 commits

Author SHA1 Message Date
j
56df24baad attempt to cleanup library 2019-01-12 23:11:33 +05:30
j
7a000bf199 join with timeout 2019-01-12 23:11:14 +05:30
j
07300f83f3 add lost items 2019-01-12 22:34:15 +05:30
j
0169f5bf57 use super 2019-01-12 22:34:02 +05:30
j
dcc5e859a5 style 2019-01-11 15:18:53 +05:30
6 changed files with 45 additions and 9 deletions

View file

@ -116,7 +116,7 @@ def drop_columns(table, columns):
}
create_table = get_create_table(table)
for column in columns:
create_table = re.sub('(%s .*?,)'%column, '', create_table)
create_table = re.sub('(%s .*?,)' % column, '', create_table)
create_table = create_table.replace('\n', '').replace(',', ',\n')
create_table = re.sub('\n *', '\n ', create_table).replace('( ', '(\n ')
sql = [

View file

@ -9,7 +9,7 @@ from sqlalchemy.sql.expression import text
from sqlalchemy import func
from oxtornado import actions
import utils #utils must be imported before websocket to avoid loop
import utils # utils must be imported before websocket to avoid loop
from websocket import trigger_event
import meta
from . import models

View file

@ -132,21 +132,57 @@ def run_scan():
prefix = get_prefix()
books = collect_books(prefix)
remove_missing(books)
ids = set()
added = 0
with db.session():
user = state.user()
for f in ox.sorted_strings(books):
if state.shutdown:
break
if os.path.exists(f):
id = media.get_id(f)
file = File.get(id)
if id in ids:
logger.debug('file exists in multiple locations %s', id)
if file:
f1 = file.fullpath()
f2 = os.path.join(prefix, f)
if f1 != f2 and os.path.exists(f1) and os.path.exists(f2):
logger.debug('"%s" vs "%s"', f1, f2)
else:
ids.add(id)
if not file:
file = add_file(id, f, prefix, f)
added += 1
elif user not in file.item.users:
item = file.item
item.add_user(user)
logger.debug('add %s to local user', id)
add_record('additem', item.id, file.info)
add_record('edititem', item.id, item.meta)
item.update()
added += 1
library_items = len(user.library.items)
if added:
trigger_event('change', {})
logger.debug('imported %s unknown books', added)
if len(ids) != len(books):
logger.debug('number of books %s vs number of ids %s', len(books), len(ids))
if library_items != len(books):
logger.debug('number of books %s vs number of items in library %s', len(books), library_items)
library_items = set([str(i) for i in user.library.items])
gone = library_items - ids
if gone:
logger.debug('cleaning up %s deleted records', len(gone))
for id in gone:
i = Item.get(id)
i.remove_file()
missing = ids - library_items
if missing:
logger.debug('%s items in library without a record', len(missing))
def change_path(old, new):
new_books = os.path.join(new, 'Books')

View file

@ -93,7 +93,7 @@ class Peer(object):
elif action == 'edititem':
itemid, meta = args
item = self.library.get(itemid, {})
if not 'meta' in item:
if 'meta' not in item:
item['meta'] = meta
else:
item['meta'].update(meta)
@ -111,7 +111,7 @@ class Peer(object):
name = args[0]
if len(args) > 1:
query = args[1]
if not name in self.info['lists']:
if name not in self.info['lists']:
self.info['lists'][name] = []
elif action == 'editlist':
name, new = args
@ -127,7 +127,7 @@ class Peer(object):
del self.info['lists'][name]
elif action == 'addlistitems':
name, ids = args
if not name in self.info['lists']:
if name not in self.info['lists']:
self.info['lists'][name] = []
self.info['lists'][name] = list(set(self.info['lists'][name]) | set(ids))
elif action == 'removelistitems':
@ -141,14 +141,14 @@ class Peer(object):
# fixme, just trigger peer update here
from user.models import User
peer = User.get_or_create(peerid)
if not 'username' in peer.info:
if 'username' not in peer.info:
peer.info['username'] = username
peer.update_name()
peer.save()
elif action == 'editpeer':
peerid, data = args
if len(peerid) == 16:
if not peerid in self.info['peers']:
if peerid not in self.info['peers']:
self.info['peers'][peerid] = {}
for key in ('username', 'contact'):
if key in data:

View file

@ -567,7 +567,7 @@ class Nodes(Thread):
node.join()
if self.local:
self.local.close()
return Thread.join(self)
return super().join(1)
def publish_node():
update_online()

View file

@ -21,7 +21,7 @@ class pdict(dict):
json.dump(self, fd, indent=4, sort_keys=True, ensure_ascii=False)
def get(self, key, default=None):
if default == None and self._defaults:
if default is None and self._defaults:
default = self._defaults.get(key)
return dict.get(self, key, default)