コード例 #1
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def remove(self):
     if not self._query:
         for i in self.items:
             self.items.remove(i)
     if not self._query:
         if self.user_id == settings.USER_ID and self.name != '':
             Changelog.record(self.user, 'removelist', self.name)
     state.db.session.delete(self)
     state.db.session.commit()
コード例 #2
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def remove_items(self, items):
     from item.models import Item
     for item_id in items:
         i = Item.get(item_id)
         if i in self.items:
             self.items.remove(i)
         i.update()
     state.db.session.add(self)
     state.db.session.commit()
     if self.user_id == settings.USER_ID and self.name != '':
         Changelog.record(self.user, 'removelistitems', self.name, items)
     self.user.clear_smart_list_cache()
     self.user.clear_list_cache()
コード例 #3
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def edit(self, data):
     changed = {}
     for key in data:
         if key == 'id':
             continue
         if data[key] != self.data.get(key):
             self.data[key] = data[key]
             changed[key] = data[key]
     if changed:
         self.save()
         user = state.user()
         Changelog.record(user, 'editmeta', self.key, self.value, changed)
     return changed
コード例 #4
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def add_items(self, items):
     from item.models import Item
     for item_id in items:
         i = Item.get(item_id)
         if i:
             self.items.append(i)
             if self.user_id == settings.USER_ID:
                 i.queue_download()
             i.update()
     state.db.session.add(self)
     state.db.session.commit()
     if self.user_id == settings.USER_ID and self.name != '':
         Changelog.record(self.user, 'addlistitems', self.name, items)
     self.user.clear_smart_list_cache()
     self.user.clear_list_cache()
コード例 #5
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def create(cls, user_id, name, query=None):
     prefix = name
     n = 2
     while cls.get(user_id, name):
         name = '%s [%s]' % (prefix, n)
         n += 1
     l = cls(user_id=user_id, name=name)
     l._query = query
     l.type = 'smart' if l._query else 'static'
     l.index_ = cls.query.filter_by(user_id=user_id).count()
     state.db.session.add(l)
     state.db.session.commit()
     if user_id == settings.USER_ID:
         if not l._query and name != '':
             Changelog.record(state.user(), 'addlist', l.name)
     return l
コード例 #6
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def remove_file(self):
     for f in self.files.all():
         path = f.fullpath()
         if os.path.exists(path):
             os.unlink(path)
             remove_empty_folders(os.path.dirname(path))
         state.db.session.delete(f)
     user = state.user()
     if user in self.users:
         self.users.remove(user)
     for l in self.lists.filter_by(user_id=user.id):
         l.items.remove(self)
     state.db.session.commit()
     if not self.users:
         self.delete()
     else:
         self.update()
     Transfer.query.filter_by(item_id=self.id).delete()
     Changelog.record(user, 'removeitem', self.id)
コード例 #7
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def sortLists(data):
    """
        takes {
            ids
        }
    """
    n = 0
    logger.debug("sortLists %s", data)
    lists = []
    for id in data["ids"]:
        l = models.List.get(id)
        l.index_ = n
        n += 1
        if l.type == "static":
            lists.append(l.name)
        state.db.session.add(l)
    state.db.session.commit()
    if lists:
        Changelog.record(state.user(), "orderlists", lists)
    return {}
コード例 #8
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def update_meta(self, data):
     update = False
     record = {}
     for key in self.meta_keys:
         if key in data:
             if self.meta.get(key) != data[key]:
                 record[key] = data[key]
                 self.meta[key] = data[key]
                 update = True
     for key in list(self.meta):
         if key not in self.meta_keys:
             del self.meta[key]
             update = True
     if update:
         self.update()
         self.modified = datetime.utcnow()
         self.save()
         user = state.user()
         if record and user in self.users:
             Changelog.record(user, 'edititem', self.id, record)
コード例 #9
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def sortLists(data):
    '''
        takes {
            ids
        }
    '''
    n = 0
    logger.debug('sortLists %s', data)
    lists = []
    for id in data['ids']:
        l = models.List.get(id)
        l.index_ = n
        n += 1
        if l.type == 'static':
            lists.append(l.name)
        state.db.session.add(l)
    state.db.session.commit()
    if lists:
        Changelog.record(state.user(), 'orderlists', lists)
    return {}
コード例 #10
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def save_file(self, content):
     u = state.user()
     f = File.get(self.id)
     content_id = media.get_id(data=content)
     if content_id != self.id:
         logger.debug('INVALID CONTENT %s vs %s', self.id, content_id)
         return False
     if not f:
         path = 'Downloads/%s.%s' % (self.id, self.info['extension'])
         info = self.info.copy()
         for key in ('mediastate', 'coverRatio', 'previewRatio'):
             if key in info:
                 del info[key]
         f = File.get_or_create(self.id, info, path=path)
         path = self.get_path()
         if not os.path.exists(path):
             ox.makedirs(os.path.dirname(path))
             with open(path, 'wb') as fd:
                 fd.write(content)
             if u not in self.users:
                 self.add_user(u)
             t = Transfer.get_or_create(self.id)
             t.progress = 1
             t.save()
             self.added = datetime.utcnow()
             Changelog.record(u, 'additem', self.id, f.info)
             self.update()
             f.move()
             self.update_icons()
             self.save()
             trigger_event('transfer', {
                 'id': self.id, 'progress': 1
             })
             return True
     else:
         logger.debug('TRIED TO SAVE EXISTING FILE!!!')
         t = Transfer.get_or_create(self.id)
         t.progress = 1
         t.save()
         self.update()
     return False
コード例 #11
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def update_peering(self, peered, username=None):
     was_peering = self.peered
     if peered:
         logging.debug('update_peering, pending: %s queued: %s',
                       self.pending, self.queued)
         self.queued = self.pending != 'sent'
         self.pending = ''
         if username:
             self.info['username'] = username
         self.update_name()
         # FIXME: need to set peered to False to not trigger changelog event
         # before other side receives acceptPeering request
         self.peered = False
         self.save()
         if not was_peering:
             Changelog.record(state.user(), 'addpeer', self.id,
                              self.nickname)
         self.peered = True
         self.save()
     else:
         self.pending = ''
         self.peered = False
         self.queued = False
         self.update_name()
         self.save()
         List.query.filter_by(user_id=self.id).delete()
         for i in self.items:
             i.users.remove(self)
             if not i.users:
                 i.delete()
         Changelog.query.filter_by(user_id=self.id).delete()
         if self.id in settings.ui['showFolder']:
             del settings.ui['showFolder'][self.id]
         self.clear_list_cache()
         self.save()
         if was_peering:
             Changelog.record(state.user(), 'removepeer', self.id)
     self.save()
コード例 #12
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def editList(data):
    '''
        takes {
            id
            name
            query
        }
    '''
    logger.debug('editList %s', data)
    l = models.List.get_or_create(data['id'])
    name = l.name
    if 'name' in data:
        l.name = data['name']
    if 'query' in data and l.type != 'smart':
        raise Exception('query only for smart lists')
    if 'query' in data and l.type == 'smart':
        validate_query(data['query'])
        l._query = data['query']
    if l.type == 'static' and name != l.name:
        Changelog.record(state.user(), 'editlist', name, {'name': l.name})
    l.save()
    l.user.clear_smart_list_cache()
    return l.json()
コード例 #13
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def editList(data):
    """
        takes {
            id
            name
            query
        }
    """
    logger.debug("editList %s", data)
    l = models.List.get_or_create(data["id"])
    name = l.name
    if "name" in data:
        l.name = data["name"]
    if "query" in data and l.type != "smart":
        raise Exception("query only for smart lists")
    if "query" in data and l.type == "smart":
        validate_query(data["query"])
        l._query = data["query"]
    if l.type == "static" and name != l.name:
        Changelog.record(state.user(), "editlist", name, {"name": l.name})
    l.save()
    l.user.clear_smart_list_cache()
    return l.json()
コード例 #14
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
    def update_primaryid(self, key=None, id=None, scrape=True):
        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()
        self.modified = datetime.utcnow()
        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(user, 'edititem', self.id, record)
コード例 #15
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def add_file(id, f, prefix, from_=None):
    user = state.user()
    path = f[len(prefix) :]
    data = media.metadata(f, from_)
    file = File.get_or_create(id, data, path)
    item = file.item
    if "primaryid" in file.info:
        del file.info["primaryid"]
        state.db.session.add(file)
    if "primaryid" in item.info:
        item.meta["primaryid"] = item.info.pop("primaryid")
        state.db.session.add(item)
    item.add_user(user)
    Changelog.record(user, "additem", item.id, file.info)
    item.added = datetime.utcnow()
    if state.online:
        item.scrape()
    # Changelog.record(user, 'edititem', item.id, dict([item.meta['primaryid']]))
    Changelog.record(user, "edititem", item.id, item.meta)
    item.update_icons()
    item.modified = datetime.utcnow()
    item.update()
    # Scrape.get_or_create(item.id)
    return file
コード例 #16
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def add_file(id, f, prefix, from_=None):
    user = state.user()
    path = f[len(prefix):]
    data = media.metadata(f, from_)
    file = File.get_or_create(id, data, path)
    item = file.item
    if 'primaryid' in file.info:
        del file.info['primaryid']
        state.db.session.add(file)
    if 'primaryid' in item.info:
        item.meta['primaryid'] = item.info.pop('primaryid')
        state.db.session.add(item)
    item.add_user(user)
    Changelog.record(user, 'additem', item.id, file.info)
    item.added = datetime.utcnow()
    if state.online:
        item.scrape()
    #Changelog.record(user, 'edititem', item.id, dict([item.meta['primaryid']]))
    Changelog.record(user, 'edititem', item.id, item.meta)
    item.update_icons()
    item.modified = datetime.utcnow()
    item.update()
    #Scrape.get_or_create(item.id)
    return file
コード例 #17
0
ファイル: models.py プロジェクト: h4ck3rm1k3/openmedialibrary
 def reset(self):
     user = state.user()
     Changelog.record(user, 'resetmeta', self.key, self.value)
     state.db.session.delete(self)
     state.db.session.commit()
     self.update_items()