feat: optimized autoplay with Lartz
This commit is contained in:
84
database.py
84
database.py
@ -217,27 +217,15 @@ class MusicDatabase:
|
||||
"WHERE %s" % condition_str, filler).fetchall()
|
||||
conn.close()
|
||||
|
||||
if len(results) > 0:
|
||||
music_dicts = []
|
||||
for result in results:
|
||||
music_dict = json.loads(result[3])
|
||||
music_dict['type'] = result[1]
|
||||
music_dict['title'] = result[2]
|
||||
music_dict['tags'] = result[4].strip(",").split(",")
|
||||
music_dict['id'] = result[0]
|
||||
music_dicts.append(music_dict)
|
||||
|
||||
return music_dicts
|
||||
else:
|
||||
return None
|
||||
return self._result_to_dict(results)
|
||||
|
||||
def query_music_by_keywords(self, keywords):
|
||||
condition = []
|
||||
filler = []
|
||||
|
||||
for keyword in keywords:
|
||||
condition.append('title LIKE ?')
|
||||
filler.append("%{:s}%".format(keyword))
|
||||
condition.append('LOWER(title) LIKE ?')
|
||||
filler.append("%{:s}%".format(keyword.lower()))
|
||||
|
||||
|
||||
condition_str = " AND ".join(condition)
|
||||
@ -248,30 +236,15 @@ class MusicDatabase:
|
||||
"WHERE %s" % condition_str, filler).fetchall()
|
||||
conn.close()
|
||||
|
||||
if len(results) > 0:
|
||||
music_dicts = []
|
||||
for result in results:
|
||||
music_dict = json.loads(result[3])
|
||||
music_dict['type'] = result[1]
|
||||
music_dict['title'] = result[2]
|
||||
music_dict['id'] = result[0]
|
||||
music_dict['tags'] = result[4].strip(",").split(",")
|
||||
if not music_dict['tags'][0]:
|
||||
music_dict['tags'] = []
|
||||
|
||||
music_dicts.append(music_dict)
|
||||
|
||||
return music_dicts
|
||||
else:
|
||||
return None
|
||||
return self._result_to_dict(results)
|
||||
|
||||
def query_music_by_tags(self, tags):
|
||||
condition = []
|
||||
filler = []
|
||||
|
||||
for tag in tags:
|
||||
condition.append('tags LIKE ?')
|
||||
filler.append("%{:s},%".format(tag))
|
||||
condition.append('LOWER(tags) LIKE ?')
|
||||
filler.append("%{:s},%".format(tag.lower()))
|
||||
|
||||
|
||||
condition_str = " AND ".join(condition)
|
||||
@ -282,22 +255,7 @@ class MusicDatabase:
|
||||
"WHERE %s" % condition_str, filler).fetchall()
|
||||
conn.close()
|
||||
|
||||
if len(results) > 0:
|
||||
music_dicts = []
|
||||
for result in results:
|
||||
music_dict = json.loads(result[3])
|
||||
music_dict['type'] = result[1]
|
||||
music_dict['title'] = result[2]
|
||||
music_dict['id'] = result[0]
|
||||
music_dict['tags'] = result[4].strip(",").split(",")
|
||||
if not music_dict['tags'][0]:
|
||||
music_dict['tags'] = []
|
||||
|
||||
music_dicts.append(music_dict)
|
||||
|
||||
return music_dicts
|
||||
else:
|
||||
return None
|
||||
return self._result_to_dict(results)
|
||||
|
||||
def query_tags_by_id(self, id):
|
||||
conn = sqlite3.connect(self.db_path)
|
||||
@ -313,6 +271,34 @@ class MusicDatabase:
|
||||
else:
|
||||
return None
|
||||
|
||||
def query_random_music(self, count):
|
||||
conn = sqlite3.connect(self.db_path)
|
||||
cursor = conn.cursor()
|
||||
results = cursor.execute("SELECT id, type, title, metadata, tags FROM music "
|
||||
"WHERE id IN (SELECT id FROM music ORDER BY RANDOM() LIMIT ?)", (count,)).fetchall()
|
||||
conn.close()
|
||||
|
||||
return self._result_to_dict(results)
|
||||
|
||||
|
||||
def _result_to_dict(self, results):
|
||||
if len(results) > 0:
|
||||
music_dicts = []
|
||||
for result in results:
|
||||
music_dict = json.loads(result[3])
|
||||
music_dict['type'] = result[1]
|
||||
music_dict['title'] = result[2]
|
||||
music_dict['id'] = result[0]
|
||||
music_dict['tags'] = result[4].strip(",").split(",")
|
||||
if not music_dict['tags'][0]:
|
||||
music_dict['tags'] = []
|
||||
|
||||
music_dicts.append(music_dict)
|
||||
|
||||
return music_dicts
|
||||
else:
|
||||
return None
|
||||
|
||||
def delete_music(self, **kwargs):
|
||||
condition = []
|
||||
filler = []
|
||||
|
Reference in New Issue
Block a user