feat: some tags function
This commit is contained in:
@ -74,7 +74,7 @@ class FileItem(BaseItem):
|
||||
self.send_client_message(constants.strings('file_missed', file=self.path))
|
||||
return False
|
||||
|
||||
self.version = 1 # 0 -> 1, notify the wrapper to save me when validate() is visited the first time
|
||||
self.version += 1 # 0 -> 1, notify the wrapper to save me when validate() is visited the first time
|
||||
self.ready = "yes"
|
||||
return True
|
||||
|
||||
|
@ -60,6 +60,16 @@ class BaseItem:
|
||||
def prepare(self):
|
||||
return True
|
||||
|
||||
def add_tag(self, tag):
|
||||
if tag not in self.tags:
|
||||
self.tags.append(tag)
|
||||
self.version += 1
|
||||
|
||||
def remove_tag(self, tag):
|
||||
if tag not in self.tags:
|
||||
self.tags.remove(tag)
|
||||
self.version += 1
|
||||
|
||||
def format_song_string(self, user):
|
||||
return self.id
|
||||
|
||||
|
@ -48,6 +48,17 @@ class MusicLibrary(dict):
|
||||
self[id] = item_builders[kwargs['type']](bot, **kwargs) # newly built item will not be saved immediately
|
||||
return self[id]
|
||||
|
||||
def get_items_by_tags(self, bot, tags):
|
||||
music_dicts = self.db.query_music_by_tags(tags)
|
||||
items = []
|
||||
for music_dict in music_dicts:
|
||||
id = music_dicts['id']
|
||||
type = music_dict['type']
|
||||
self[id] = item_loaders[type](bot, music_dict)
|
||||
items.append(self[id])
|
||||
|
||||
return items
|
||||
|
||||
def fetch(self, bot, id):
|
||||
music_dicts = self.db.query_music(id=id)
|
||||
if music_dicts:
|
||||
|
@ -19,7 +19,7 @@ class PlaylistItemWrapper:
|
||||
self.user = user
|
||||
self.type = type
|
||||
self.log = logging.getLogger("bot")
|
||||
self.version = 1
|
||||
self.version = 0
|
||||
|
||||
def item(self):
|
||||
return self.lib[self.id]
|
||||
@ -55,6 +55,18 @@ class PlaylistItemWrapper:
|
||||
def uri(self):
|
||||
return self.item().uri()
|
||||
|
||||
def add_tag(self, tag):
|
||||
self.item().add_tag(tag)
|
||||
if self.item().version > self.version:
|
||||
self.version = self.item().version
|
||||
self.lib.save(self.id)
|
||||
|
||||
def remove_tag(self, tag):
|
||||
self.item().remove_tag(tag)
|
||||
if self.item().version > self.version:
|
||||
self.version = self.item().version
|
||||
self.lib.save(self.id)
|
||||
|
||||
def is_ready(self):
|
||||
return self.item().is_ready()
|
||||
|
||||
@ -88,6 +100,13 @@ def get_item_wrapper_by_id(bot, id, user):
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_item_wrappers_by_tags(bot, tags, user):
|
||||
items = var.library.get_items_by_tags(bot, tags)
|
||||
ret = []
|
||||
for item in items:
|
||||
ret.append(PlaylistItemWrapper(var.library, item.id, item.type, user))
|
||||
return ret
|
||||
|
||||
def get_playlist(mode, _list=None, index=None):
|
||||
if _list and index is None:
|
||||
index = _list.current_index
|
||||
|
@ -111,7 +111,7 @@ class RadioItem(BaseItem):
|
||||
self.type = "radio"
|
||||
|
||||
def validate(self):
|
||||
self.version = 1 # 0 -> 1, notify the wrapper to save me when validate() is visited the first time
|
||||
self.version += 1 # 0 -> 1, notify the wrapper to save me when validate() is visited the first time
|
||||
return True
|
||||
|
||||
def is_ready(self):
|
||||
|
Reference in New Issue
Block a user