repeat function and better code

For #11 and #12
This commit is contained in:
azlux 2018-06-18 23:58:07 +02:00
parent acc18b299b
commit b30f0d868b
3 changed files with 65 additions and 51 deletions

View File

@ -69,7 +69,7 @@ def index():
if request.method == 'POST': if request.method == 'POST':
print(request.form) print(request.form)
if 'add_file' in request.form and ".." not in request.form['add_file']: if 'add_file' in request.form and ".." not in request.form['add_file']:
item = ('file', request.form['add_file'], datetime.now().timestamp()) item = ('file', request.form['add_file'], 'Web')
var.playlist.append(item) var.playlist.append(item)
elif ('add_folder' in request.form and ".." not in request.form['add_folder']) or ('add_folder_recursively' in request.form and ".." not in request.form['add_folder_recursively']): elif ('add_folder' in request.form and ".." not in request.form['add_folder']) or ('add_folder_recursively' in request.form and ".." not in request.form['add_folder_recursively']):
@ -86,15 +86,15 @@ def index():
files = music_library.get_files_recursively(folder) files = music_library.get_files_recursively(folder)
else: else:
files = music_library.get_files(folder) files = music_library.get_files(folder)
files = list(map(lambda file: ('file', os.path.join(folder, file), datetime.now().timestamp()), files)) files = list(map(lambda file: ('file', os.path.join(folder, file), 'Web'), files))
print('Adding to playlist: ', files) print('Adding to playlist: ', files)
var.playlist.extend(files) var.playlist.extend(files)
elif 'add_url' in request.form: elif 'add_url' in request.form:
var.playlist.append(['url', request.form['add_url']]) var.playlist.append(['url', request.form['add_url'], "Web"])
elif 'add_radio' in request.form: elif 'add_radio' in request.form:
var.playlist.append(['radio', request.form['add_radio']]) var.playlist.append(['radio', request.form['add_radio'], "Web"])
elif 'delete_music' in request.form: elif 'delete_music' in request.form:
for item in var.playlist: for item in var.playlist:
@ -107,32 +107,32 @@ def index():
random.shuffle(var.playlist) random.shuffle(var.playlist)
if var.current_music: if var.current_music:
source = var.current_music[0] source = var.current_music['type']
# format for current_music below: # format for current_music below:
# (sourcetype, title, url or None) # (sourcetype, title, url or None)
if source == "radio": if source == "radio":
current_music = ( current_music = (
"[radio]", "[radio]",
media.get_radio_title(var.current_music[1]), media.get_radio_title(var.current_music['path']),
var.current_music[2] var.current_music['title']
) )
elif source == "url": elif source == "url":
current_music = ( current_music = (
"[url]", "[url]",
var.current_music[2], var.current_music['title'],
var.current_music[1] var.current_music['path']
) )
elif source == "file": elif source == "file":
current_music = ( current_music = (
"[file]", "[file]",
var.current_music[2], var.current_music['title'],
None None
) )
else: else:
current_music = ( current_music = (
"(??)[" + var.current_music[0] + "]", "(??)[" + var.current_music['type'] + "]",
var.current_music[1], var.current_music['path'],
var.current_music[2], var.current_music['title'],
) )
else: else:
current_music = None current_music = None

View File

@ -28,7 +28,7 @@ class MumbleBot:
self.volume = var.config.getfloat('bot', 'volume') self.volume = var.config.getfloat('bot', 'volume')
self.channel = args.channel self.channel = args.channel
var.current_music = None var.current_music = {}
FORMAT = '%(asctime)s: %(message)s' FORMAT = '%(asctime)s: %(message)s'
if args.quiet: if args.quiet:
@ -38,18 +38,20 @@ class MumbleBot:
###### ######
## Format of the Playlist : ## Format of the Playlist :
## [("<type>","<path>")] ## [("<type>","<path/url>")]
## [("<radio>","<luna>"), ("<youtube>","<url>")]
## types : file, radio, url ## types : file, radio, url
###### ######
###### ######
## Format of the current_music variable ## Format of the current_music variable
# var.current_music = { "type" : str,
# "path" : str,
# "title" : str,
# "user" : str }
# len(var.current_music) = 4 # len(var.current_music) = 4
# var.current_music[0] = <Type> # var.current_music["type"] = <Type>
# var.current_music[1] = <url> if url of radio # var.current_music["path"] = <url> if youtube/radio, <path> if file
# var.current_music[2] = <title> # var.current_music["title"] = <title>
# var.current_music[3] = <path> if url or file
var.playlist = [] var.playlist = []
@ -113,6 +115,7 @@ class MumbleBot:
def message_received(self, text): def message_received(self, text):
message = text.message.strip() message = text.message.strip()
user = self.mumble.users[text.actor]['name']
if message[0] == '!': if message[0] == '!':
message = message[1:].split(' ', 1) message = message[1:].split(' ', 1)
if len(message) > 0: if len(message) > 0:
@ -123,7 +126,7 @@ class MumbleBot:
else: else:
return return
logging.info(command + ' - ' + parameter + ' by ' + self.mumble.users[text.actor]['name']) logging.info(command + ' - ' + parameter + ' by ' + user)
if command == var.config.get('command', 'play_file') and parameter: if command == var.config.get('command', 'play_file') and parameter:
music_folder = var.config.get('bot', 'music_folder') music_folder = var.config.get('bot', 'music_folder')
@ -132,14 +135,14 @@ class MumbleBot:
if path.startswith(music_folder): if path.startswith(music_folder):
if os.path.isfile(path): if os.path.isfile(path):
filename = path.replace(music_folder, '') filename = path.replace(music_folder, '')
var.playlist.append(["file", filename]) var.playlist.append(["file", filename, user])
else: else:
# try to do a partial match # try to do a partial match
matches = [file for file in util.get_recursive_filelist_sorted(music_folder) if parameter.lower() in file.lower()] matches = [file for file in util.get_recursive_filelist_sorted(music_folder) if parameter.lower() in file.lower()]
if len(matches) == 0: if len(matches) == 0:
self.mumble.users[text.actor].send_message(var.config.get('strings', 'no_file')) self.mumble.users[text.actor].send_message(var.config.get('strings', 'no_file'))
elif len(matches) == 1: elif len(matches) == 1:
var.playlist.append(["file", matches[0]]) var.playlist.append(["file", matches[0], user])
else: else:
msg = var.config.get('strings', 'multiple_matches') + '<br />' msg = var.config.get('strings', 'multiple_matches') + '<br />'
msg += '<br />'.join(matches) msg += '<br />'.join(matches)
@ -148,12 +151,12 @@ class MumbleBot:
self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_file')) self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_file'))
elif command == var.config.get('command', 'play_url') and parameter: elif command == var.config.get('command', 'play_url') and parameter:
var.playlist.append(["url", parameter]) var.playlist.append(["url", parameter, user])
elif command == var.config.get('command', 'play_radio') and parameter: elif command == var.config.get('command', 'play_radio') and parameter:
if var.config.has_option('radio', parameter): if var.config.has_option('radio', parameter):
parameter = var.config.get('radio', parameter) parameter = var.config.get('radio', parameter)
var.playlist.append(["radio", parameter]) var.playlist.append(["radio", parameter, user])
elif command == var.config.get('command', 'help'): elif command == var.config.get('command', 'help'):
self.send_msg_channel(var.config.get('strings', 'help')) self.send_msg_channel(var.config.get('strings', 'help'))
@ -186,24 +189,29 @@ class MumbleBot:
elif command == var.config.get('command', 'current_music'): elif command == var.config.get('command', 'current_music'):
if var.current_music: if var.current_music:
source = var.current_music[0] source = var.current_music["type"]
if source == "radio": if source == "radio":
reply = "[radio] {title} sur {url}".format( reply = "[radio] {title} on {url} by {user}".format(
title=media.get_radio_title(var.current_music[1]), title=media.get_radio_title(var.current_music["path"]),
url=var.current_music[2] url=var.current_music["title"],
user=var.current_music["user"]
) )
elif source == "url": elif source == "url":
reply = "[url] {title} (<a href=\"{url}\">{url}</a>)".format( reply = "[url] {title} (<a href=\"{url}\">{url}</a>) by {user}".format(
title=var.current_music[2], title=var.current_music["title"],
url=var.current_music[1] url=var.current_music["path"],
user=var.current_music["user"]
) )
elif source == "file": elif source == "file":
reply = "[file] {title}".format(title=var.current_music[2]) reply = "[file] {title} by {user}".format(
title=var.current_music["title"],
user=var.current_music["user"])
else: else:
reply = "(?)[{}] {} {}".format( reply = "(?)[{}] {} {} by {}".format(
var.current_music[0], var.current_music["type"],
var.current_music[1], var.current_music["path"],
var.current_music[2], var.current_music["title"],
var.current_music["user"]
) )
else: else:
reply = var.config.get('strings', 'not_playing') reply = var.config.get('strings', 'not_playing')
@ -212,7 +220,10 @@ class MumbleBot:
elif command == var.config.get('command', 'next'): elif command == var.config.get('command', 'next'):
if var.playlist: if var.playlist:
var.current_music = [var.playlist[0][0], var.playlist[0][1], None, None] var.current_music = {'type': var.playlist[0][0],
'path': var.playlist[0][1],
'title': None,
'user': var.playlist[0][2]}
var.playlist.pop(0) var.playlist.pop(0)
self.launch_next() self.launch_next()
else: else:
@ -237,6 +248,10 @@ class MumbleBot:
msg += '({}) {}<br />'.format(type, path) msg += '({}) {}<br />'.format(type, path)
self.send_msg_channel(msg) self.send_msg_channel(msg)
elif command == var.config.get('command', 'repeat'):
var.playlist.append([var.current_music["type"], var.current_music["path"], var.current_music["user"]])
else: else:
self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_command')) self.mumble.users[text.actor].send_message(var.config.get('strings', 'bad_command'))
@ -261,13 +276,13 @@ class MumbleBot:
def launch_next(self): def launch_next(self):
path = "" path = ""
title = "" title = ""
if var.current_music[0] == "url": if var.current_music["type"] == "url":
url = media.get_url(var.current_music[1]) url = media.get_url(var.current_music["path"])
if not url: if not url:
return return
media.clear_tmp_folder(var.config.get('bot', 'tmp_folder'), var.config.getint('bot', 'tmp_folder_max_size')) media.clear_tmp_folder(var.config.get('bot', 'tmp_folder'), var.config.getint('bot', 'tmp_folder_max_size'))
path, title = self.download_music(url) path, title = self.download_music(url)
var.current_music[1] = url var.current_music["path"] = url
path_thumbnail = var.config.get('bot', 'tmp_folder') + hashlib.md5(url.encode()).hexdigest() + '.jpg' path_thumbnail = var.config.get('bot', 'tmp_folder') + hashlib.md5(url.encode()).hexdigest() + '.jpg'
thumbnail_html = "" thumbnail_html = ""
@ -282,15 +297,15 @@ class MumbleBot:
logging.debug(thumbnail_html) logging.debug(thumbnail_html)
self.send_msg_channel(var.config.get('strings', 'now_playing') % (title, thumbnail_html)) self.send_msg_channel(var.config.get('strings', 'now_playing') % (title, thumbnail_html))
elif var.current_music[0] == "file": elif var.current_music["type"] == "file":
path = var.config.get('bot', 'music_folder') + var.current_music[1] path = var.config.get('bot', 'music_folder') + var.current_music["path"]
title = var.current_music[1] title = var.current_music["path"]
elif var.current_music[0] == "radio": elif var.current_music["type"] == "radio":
url = media.get_url(var.current_music[1]) url = media.get_url(var.current_music["path"])
if not url: if not url:
return return
var.current_music[1] = url var.current_music["path"] = url
path = url path = url
title = media.get_radio_server_description(url) title = media.get_radio_server_description(url)
@ -301,8 +316,7 @@ class MumbleBot:
command = ["ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i', path, '-ac', '1', '-f', 's16le', '-ar', '48000', '-'] command = ["ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i', path, '-ac', '1', '-f', 's16le', '-ar', '48000', '-']
self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480) self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480)
var.current_music[2] = title var.current_music["title"] = title
var.current_music[3] = path
def download_music(self, url): def download_music(self, url):
url_hash = hashlib.md5(url.encode()).hexdigest() url_hash = hashlib.md5(url.encode()).hexdigest()
@ -348,7 +362,7 @@ class MumbleBot:
if self.thread is None or not raw_music: if self.thread is None or not raw_music:
if len(var.playlist) != 0: if len(var.playlist) != 0:
var.current_music = [var.playlist[0][0], var.playlist[0][1], None, None] var.current_music = {'type': var.playlist[0][0], 'path': var.playlist[0][1], 'user': var.playlist[0][2]}
var.playlist.pop(0) var.playlist.pop(0)
self.launch_next() self.launch_next()
else: else:

View File

@ -1,4 +1,4 @@
current_music = ("", "") current_music = None
playlist = [] playlist = []
user = "" user = ""
music_folder = "" music_folder = ""