diff --git a/oml/item/models.py b/oml/item/models.py index d1c89ed..dd37266 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -115,12 +115,13 @@ class Item(db.Model): cls.remove_many(remove) def add_user(self, user): + from user.models import list_items if not user in self.users: self.users.append(user) l = user.library if not self in l.items: - l.items.append(self) - state.db.session.add(l) + q = list_items.insert({'item_id': self.id, 'list_id': l.id}) + state.db.session.execute(q) def json(self, keys=None): j = {} @@ -507,10 +508,11 @@ class Item(db.Model): def queue_download(self): u = state.user() if not u in self.users: - state.downloads.transfers[self.id] = { - 'added': datetime.utcnow(), - 'progress': 0 - } + if not self.id in state.downloads.transfers: + state.downloads.transfers[self.id] = { + 'added': datetime.utcnow(), + 'progress': 0 + } logger.debug('queue %s for download', self.id) self.add_user(u) @@ -781,37 +783,6 @@ class File(db.Model): state.db.session.add(self) state.db.session.commit() - -class Transfer(db.Model): - __tablename__ = 'transfer' - - item_id = sa.Column(sa.String(32), sa.ForeignKey('item.id'), primary_key=True) - item = sa.orm.relationship('Item', backref=sa.orm.backref('transfer', lazy='dynamic')) - - added = sa.Column(sa.DateTime()) - progress = sa.Column(sa.Float()) - - def __repr__(self): - return '='.join(map(str, [self.item_id, self.progress])) - - @classmethod - def get(cls, item_id): - return cls.query.filter_by(item_id=item_id).first() - - @classmethod - def get_or_create(cls, item_id): - t = cls.get(item_id) - if not t: - t = cls(item_id=item_id) - t.added = datetime.utcnow() - t.progress = 0 - t.save() - return t - - def save(self): - state.db.session.add(self) - state.db.session.commit() - def remove_unused_names(): used = list(set( get_sort_name(a) diff --git a/oml/library.py b/oml/library.py index 3372254..176bb56 100644 --- a/oml/library.py +++ b/oml/library.py @@ -336,7 +336,9 @@ def cleanup_lists(): import user.models with db.session(): for l in user.models.List.query.all(): - if not l.user.peered and not l.user.id == settings.USER_ID: + if not l.user: + l.remove() + elif not l.user.peered and not l.user.id == settings.USER_ID: l.remove() peers = [u.id for u in user.models.User.query.filter_by(peered=True)] + [settings.USER_ID] diff --git a/oml/settings.py b/oml/settings.py index eed31f5..ccdd8e7 100644 --- a/oml/settings.py +++ b/oml/settings.py @@ -100,4 +100,4 @@ USER_AGENT = 'OpenMediaLibrary/%s' % VERSION DEBUG_HTTP = server.get('debug_http', False) -DB_VERSION = 11 +DB_VERSION = 12 diff --git a/oml/setup.py b/oml/setup.py index c476452..13a3adf 100644 --- a/oml/setup.py +++ b/oml/setup.py @@ -64,13 +64,6 @@ CREATE TABLE person ( numberofnames INTEGER, PRIMARY KEY (name) ); -CREATE TABLE transfer ( - item_id VARCHAR(32) NOT NULL, - added DATETIME, - progress FLOAT, - PRIMARY KEY (item_id), - FOREIGN KEY(item_id) REFERENCES item (id) -); CREATE TABLE find ( id INTEGER NOT NULL, item_id VARCHAR(32), @@ -434,7 +427,6 @@ def update_database(): item.models.Find, item.models.Item, item.models.Sort, - item.models.Transfer, item.models.user_items, item.person.Person, user.models.List, diff --git a/oml/update.py b/oml/update.py index 7005fdd..8406b19 100644 --- a/oml/update.py +++ b/oml/update.py @@ -344,6 +344,8 @@ class Update(Thread): db_version = migrate_10() if db_version < 11: db_version = migrate_11() + if db_version < 12: + db_version = migrate_12() settings.server['db_version'] = settings.DB_VERSION def run(self): @@ -519,7 +521,6 @@ def migrate_10(): def migrate_11(): with db.session() as session: from user.models import User, Metadata, List - from item.models import Transfer from changelog import Changelog import utils for u in User.query.filter_by(peered=True): @@ -546,18 +547,26 @@ def migrate_11(): Changelog.query.filter_by(user_id=u.id).delete() Metadata.query.filter_by(user_id=u.id).delete() session.commit() - import state - import downloads - state.online = False - state.downloads = downloads.Downloads() - for t in Transfer.query: - if t.added: - state.downloads.transfers[t.item_id] = { - 'added': t.added, - 'progress': t.progress - } - state.db.session.add(t) - state.db.session.commit() - state.downloads.transfers.commit() - state.downloads = None + if db.table_exists('transfer'): + import state + import downloads + state.online = False + state.downloads = downloads.Downloads() + r = state.db.session.execute('SELECT item_id, added, progress FROM transfer') + for t in r: + item_id, added, progress = t + if added: + state.downloads.transfers[item_id] = { + 'added': added, + 'progress': progress + } + state.db.session.commit() + state.downloads.transfers.commit() + state.downloads = None return 11 + +def migrate_12(): + db.run_sql([ + 'DROP TABLE IF EXISTS transfer' + ]), + return 12