REFACTOR: ITEM REVOLUTION #91
This commit is contained in:
99
media/url_from_playlist.py
Normal file
99
media/url_from_playlist.py
Normal file
@ -0,0 +1,99 @@
|
||||
import youtube_dl
|
||||
import constants
|
||||
import media
|
||||
import variables as var
|
||||
from media.url import URLItem
|
||||
from media.playlist import PlaylistItemWrapper
|
||||
|
||||
def get_playlist_info(bot, url, start_index=0, user=""):
|
||||
items = []
|
||||
ydl_opts = {
|
||||
'extract_flat': 'in_playlist'
|
||||
}
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
attempts = var.config.getint('bot', 'download_attempts', fallback=2)
|
||||
for i in range(attempts):
|
||||
try:
|
||||
info = ydl.extract_info(url, download=False)
|
||||
# # if url is not a playlist but a video
|
||||
# if 'entries' not in info and 'webpage_url' in info:
|
||||
# music = {'type': 'url',
|
||||
# 'title': info['title'],
|
||||
# 'url': info['webpage_url'],
|
||||
# 'user': user,
|
||||
# 'ready': 'validation'}
|
||||
# items.append(music)
|
||||
# return items
|
||||
|
||||
playlist_title = info['title']
|
||||
for j in range(start_index, min(len(info['entries']),
|
||||
start_index + var.config.getint('bot', 'max_track_playlist'))):
|
||||
# Unknow String if No title into the json
|
||||
title = info['entries'][j]['title'] if 'title' in info['entries'][j] else "Unknown Title"
|
||||
# Add youtube url if the url in the json isn't a full url
|
||||
item_url = info['entries'][j]['url'] if info['entries'][j]['url'][0:4] == 'http' \
|
||||
else "https://www.youtube.com/watch?v=" + info['entries'][j]['url']
|
||||
|
||||
music = PlaylistItemWrapper(
|
||||
URLFromPlaylistItem(
|
||||
bot,
|
||||
item_url,
|
||||
title,
|
||||
url,
|
||||
playlist_title
|
||||
), user)
|
||||
|
||||
items.append(music)
|
||||
except:
|
||||
pass
|
||||
|
||||
return items
|
||||
|
||||
class URLFromPlaylistItem(URLItem):
|
||||
def __init__(self, bot, url, title, playlist_url, playlist_title, from_dict=None):
|
||||
if from_dict is None:
|
||||
super().__init__(bot, url)
|
||||
self.title = title
|
||||
self.playlist_url = playlist_url
|
||||
self.playlist_title = playlist_title
|
||||
else:
|
||||
super().__init__(bot, "", from_dict)
|
||||
self.playlist_title = from_dict['playlist_title']
|
||||
self.playlist_url = from_dict['playlist_url']
|
||||
|
||||
self.type = "url_from_playlist"
|
||||
|
||||
def to_dict(self):
|
||||
dict = super().to_dict()
|
||||
dict['playlist_url'] = self.playlist_url
|
||||
dict['playlist_title'] = self.playlist_title
|
||||
|
||||
return dict
|
||||
|
||||
def format_debug_string(self):
|
||||
return "[url] {title} ({url}) from playlist {playlist}".format(
|
||||
title=self.title,
|
||||
url=self.url,
|
||||
playlist=self.playlist_title
|
||||
)
|
||||
|
||||
def format_song_string(self, user):
|
||||
return constants.strings("url_from_playlist_item",
|
||||
title=self.title,
|
||||
url=self.url,
|
||||
playlist_url=self.playlist_url,
|
||||
playlist=self.playlist_title,
|
||||
user=user)
|
||||
|
||||
def format_current_playing(self, user):
|
||||
display = constants.strings("now_playing", item=self.format_song_string(user))
|
||||
|
||||
if self.thumbnail:
|
||||
thumbnail_html = '<img width="80" src="data:image/jpge;base64,' + \
|
||||
self.thumbnail + '"/>'
|
||||
display += "<br />" + thumbnail_html
|
||||
|
||||
return display
|
||||
|
||||
def display_type(self):
|
||||
return constants.strings("url_from_playlist")
|
Reference in New Issue
Block a user