if not parameter:
bot.send_msg(constants.strings("current_mode", mode=var.playlist.mode), text)
return
- if not parameter in ["one-shot", "repeat", "random"]:
+ if not parameter in ["one-shot", "repeat", "random", "autoplay"]:
bot.send_msg(constants.strings('unknown_mode', mode=parameter), text)
else:
var.db.set('playlist', 'playback_mode', parameter)
conn.commit()
conn.close()
+ def query_all_ids(self):
+ conn = sqlite3.connect(self.db_path)
+ cursor = conn.cursor()
+ results = cursor.execute("SELECT id FROM music").fetchall()
+ conn.close()
+ return list(map(lambda i: i[0], results))
+
def query_music(self, **kwargs):
condition = []
filler = []
import random
import threading
import logging
+import random
import variables as var
from media.file import FileItem
return RepeatPlaylist()
elif mode == "random":
return RandomPlaylist()
+ elif mode == "autoplay":
+ return AutoPlaylist()
else:
if mode == "one-shot":
return OneshotPlaylist().from_list(_list, index)
return RepeatPlaylist().from_list(_list, index)
elif mode == "random":
return RandomPlaylist().from_list(_list, index)
+ elif mode == "autoplay":
+ return AutoPlaylist().from_list(_list, index)
raise
-class BasePlayList(list):
+class BasePlaylist(list):
def __init__(self):
super().__init__()
self.current_index = -1
self.validating_thread_lock.release()
-class OneshotPlaylist(BasePlayList):
+class OneshotPlaylist(BasePlaylist):
def __init__(self):
super().__init__()
self.mode = "one-shot"
super().__delitem__(0)
-class RepeatPlaylist(BasePlayList):
+class RepeatPlaylist(BasePlaylist):
def __init__(self):
super().__init__()
self.mode = "repeat"
return self[self.next_index()]
-class RandomPlaylist(BasePlayList):
+class RandomPlaylist(BasePlaylist):
def __init__(self):
super().__init__()
self.mode = "random"
self.current_index = 0
return self[0]
+
+class AutoPlaylist(BasePlaylist):
+ def __init__(self):
+ super().__init__()
+ self.mode = "autoplay"
+
+ def refresh(self):
+ _list = []
+ ids = var.music_db.query_all_ids()
+ for _ in range(20):
+ _list.append(get_item_wrapper_by_id(var.bot, ids[random.randint(0, len(ids)-1)], 'AutoPlay'))
+ self.from_list(_list, -1)
+
+ # def from_list(self, _list, current_index):
+ # self.version += 1
+ # self.refresh()
+ # return self
+
+ def next(self):
+ if len(self) == 0:
+ return False
+
+ self.version += 1
+
+ if self.current_index < len(self) - 1:
+ self.current_index += 1
+ return self[self.current_index]
+ else:
+ self.refresh()
+ self.current_index = 0
+ return self[0]
import media.file
import media.radio
import media.system
-from media.playlist import BasePlayList
+from media.playlist import BasePlaylist
from media.library import MusicLibrary
else:
playback_mode = var.config.get('bot', 'playback_mode', fallback="one-shot")
- if playback_mode in ["one-shot", "repeat", "random"]:
+ if playback_mode in ["one-shot", "repeat", "random", "autoplay"]:
var.playlist = media.playlist.get_playlist(playback_mode)
else:
raise KeyError("Unknown playback mode '%s'" % playback_mode)