store metadata per user. remove primaryid. only store isbn13
This commit is contained in:
parent
90648f9e65
commit
02e040d9f5
16 changed files with 245 additions and 192 deletions
|
|
@ -121,11 +121,14 @@ class Item(db.Model):
|
|||
#j['users'] = list(map(str, list(self.users)))
|
||||
|
||||
if self.info:
|
||||
j.update(self.info)
|
||||
for key in self.info:
|
||||
if (not keys or key in keys) and key not in self.meta_keys:
|
||||
j[key] = self.info[key]
|
||||
|
||||
if self.meta:
|
||||
j.update(self.meta)
|
||||
|
||||
for key in self.id_keys + ['primaryid']:
|
||||
for key in self.id_keys:
|
||||
if key not in self.meta and key in j:
|
||||
del j[key]
|
||||
if keys:
|
||||
|
|
@ -220,7 +223,7 @@ class Item(db.Model):
|
|||
for f in Find.query.filter_by(item_id=self.id).filter(Find.key.notin_(keys)):
|
||||
state.db.session.delete(f)
|
||||
|
||||
def update(self):
|
||||
def update(self, modified=None):
|
||||
for key in ('mediastate', 'coverRatio', 'previewRatio'):
|
||||
if key in self.meta:
|
||||
if key not in self.info:
|
||||
|
|
@ -233,17 +236,12 @@ class Item(db.Model):
|
|||
self.info['mediastate'] = 'transferring'
|
||||
else:
|
||||
self.info['mediastate'] = 'available' if settings.USER_ID in users else 'unavailable'
|
||||
if 'primaryid' in self.meta:
|
||||
# self.meta.update does not trigger db update!
|
||||
m = Metadata.load(*self.meta['primaryid'])
|
||||
for key in m:
|
||||
if key == 'id':
|
||||
continue
|
||||
self.meta[key] = m[key]
|
||||
self.modified = datetime.utcnow()
|
||||
if modified:
|
||||
self.modified = modified
|
||||
else:
|
||||
self.modified = datetime.utcnow()
|
||||
self.update_sort()
|
||||
self.update_find()
|
||||
#self.modified = datetime.utcnow()
|
||||
self.save()
|
||||
|
||||
def save(self):
|
||||
|
|
@ -260,14 +258,18 @@ class Item(db.Model):
|
|||
|
||||
meta_keys = (
|
||||
'author',
|
||||
'classification',
|
||||
'categories',
|
||||
'cover',
|
||||
'date',
|
||||
'description',
|
||||
'edition',
|
||||
'isbn',
|
||||
'language',
|
||||
'pages',
|
||||
'place',
|
||||
'publisher',
|
||||
'series',
|
||||
'tableofcontents',
|
||||
'title'
|
||||
)
|
||||
|
||||
|
|
@ -285,64 +287,17 @@ class Item(db.Model):
|
|||
del self.meta[key]
|
||||
update = True
|
||||
if update:
|
||||
self.update()
|
||||
if not modified:
|
||||
modified = datetime.utcnow()
|
||||
self.modified = modified
|
||||
self.update(modified)
|
||||
self.save()
|
||||
if 'cover' in record:
|
||||
self.update_icons()
|
||||
user = state.user()
|
||||
if record and user in self.users:
|
||||
Changelog.record_ts(user, modified, 'edititem', self.id, record)
|
||||
|
||||
def update_primaryid(self, key=None, id=None, scrape=True, modified=None):
|
||||
if key is None and id is None:
|
||||
if 'primaryid' not in self.meta:
|
||||
return
|
||||
else:
|
||||
key = self.meta['primaryid'][0]
|
||||
record = {}
|
||||
if id:
|
||||
if not key in self.meta or not key in self.meta[key]:
|
||||
self.meta[key] = list(set([id] + self.meta.get(key, [])))
|
||||
self.meta['primaryid'] = [key, id]
|
||||
record[key] = id
|
||||
else:
|
||||
if key in self.meta:
|
||||
del self.meta[key]
|
||||
if 'primaryid' in self.meta:
|
||||
del self.meta['primaryid']
|
||||
record[key] = ''
|
||||
for k in self.id_keys:
|
||||
if k != key:
|
||||
if k in self.meta:
|
||||
del self.meta[k]
|
||||
logger.debug('set primaryid %s %s', key, id)
|
||||
|
||||
# get metadata from external resources
|
||||
if scrape:
|
||||
self.scrape()
|
||||
self.update_icons()
|
||||
if not modified:
|
||||
modified = datetime.utcnow()
|
||||
self.modified = modified
|
||||
self.save()
|
||||
#if not scrape:
|
||||
# Scrape.get_or_create(self.id)
|
||||
for f in self.files.all():
|
||||
f.move()
|
||||
user = state.user()
|
||||
if user in self.users:
|
||||
Changelog.record_ts(user, modified, 'edititem', self.id, record)
|
||||
|
||||
def edit_metadata(self, data):
|
||||
def edit(self, data, modified=None):
|
||||
Scrape.query.filter_by(item_id=self.id).delete()
|
||||
if 'primaryid' in self.meta:
|
||||
logger.debug('m: %s', self.meta['primaryid'])
|
||||
m = Metadata.get_or_create(*self.meta['primaryid'])
|
||||
if m.edit(data):
|
||||
self.update()
|
||||
else:
|
||||
self.update_meta(data)
|
||||
self.update_meta(data, modified)
|
||||
for f in self.files.all():
|
||||
f.move()
|
||||
|
||||
|
|
@ -388,23 +343,19 @@ class Item(db.Model):
|
|||
for resolution in (128, 256, 512):
|
||||
del icons['%s:%s' % (key, resolution)]
|
||||
|
||||
def scrape(self):
|
||||
primaryid = self.meta.get('primaryid')
|
||||
logger.debug('scrape %s', primaryid)
|
||||
if primaryid:
|
||||
try:
|
||||
m = meta.lookup(*primaryid)
|
||||
except:
|
||||
logger.debug('meta.lookup %s failed:', primaryid, exc_info=True)
|
||||
m = None
|
||||
if m:
|
||||
m['primaryid'] = primaryid
|
||||
self.meta = m
|
||||
self.modified = datetime.utcnow()
|
||||
self.update()
|
||||
return True
|
||||
return False
|
||||
return True
|
||||
def load_metadata(self):
|
||||
'''
|
||||
load metadata from user_metadata or get via isbn?
|
||||
'''
|
||||
for key in self.meta_keys:
|
||||
if key not in self.meta and key in self.info:
|
||||
self.meta[key] = self.info[key]
|
||||
#FIXME get from user_meta
|
||||
if state.online:
|
||||
if 'isbn' in self.meta:
|
||||
data = meta.lookup('isbn', self.meta['isbn'])
|
||||
if data:
|
||||
self.meta.update(data)
|
||||
|
||||
def queue_download(self):
|
||||
u = state.user()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue