Fetching of metadata has been moved to the API

This commit is contained in:
Peder Bergebakken Sundt 2018-03-05 23:10:46 +01:00
parent c2d3c0b433
commit 073a7c6d29
2 changed files with 8 additions and 39 deletions

View File

@ -2,7 +2,7 @@ import random, os, time, shutil, sys
from threading import Timer from threading import Timer
import remi.gui as gui import remi.gui as gui
from remi import App from remi import App
from .utils import Namespace, call_as_thread, get_youtube_metadata, seconds_to_timestamp from .utils import Namespace, call_as_thread, seconds_to_timestamp
from . import api from . import api
from .colors import * from .colors import *
@ -124,7 +124,8 @@ class RemiApp(App):
self.input.field.set_enabled(False) self.input.field.set_enabled(False)
self.input.submit.set_enabled(False) self.input.submit.set_enabled(False)
try: try:
data = get_youtube_metadata(value) #data = get_youtube_metadata(value)
data = None
finally: finally:
self.input.field.set_enabled(True) self.input.field.set_enabled(True)
self.input.submit.set_enabled(True) self.input.submit.set_enabled(True)
@ -195,8 +196,8 @@ class RemiApp(App):
if "data" in playlist_item: if "data" in playlist_item:
if "title" in playlist_item["data"]: if "title" in playlist_item["data"]:
name = playlist_item["data"]["title"] name = playlist_item["data"]["title"]
if "length" in playlist_item["data"]: if "duration" in playlist_item["data"]:
length = playlist_item["data"]["length"] length = seconds_to_timestamp(playlist_item["data"]["duration"])
if playlist_item.get("current", False): if playlist_item.get("current", False):
self.playback.previous.set_enabled(i != 0) self.playback.previous.set_enabled(i != 0)
@ -224,6 +225,9 @@ class RemiApp(App):
row_widget.set_on_click_listener(self.on_table_row_click, playlist_item) row_widget.set_on_click_listener(self.on_table_row_click, playlist_item)
for index, (key, item_widget) in enumerate(zip(row_widget._render_children_list, for index, (key, item_widget) in enumerate(zip(row_widget._render_children_list,
map(row_widget.get_child, row_widget._render_children_list))): map(row_widget.get_child, row_widget._render_children_list))):
if index == 1 and "failed" in playlist_item.get("data", {}):
item_widget.style["width"] = "1.1em"
item_widget.style["color"] = COLOR_RED
if index >= 3: if index >= 3:
item_widget.style["width"] = "1.1em" item_widget.style["width"] = "1.1em"
item_widget.style["color"] = COLOR_TEAL item_widget.style["color"] = COLOR_TEAL

View File

@ -2,44 +2,9 @@ from functools import wraps
from urllib.parse import urlsplit, urlunsplit, parse_qs, urlencode from urllib.parse import urlsplit, urlunsplit, parse_qs, urlencode
import threading import threading
import youtube_dl import youtube_dl
from youtube_dl.utils import DownloadError
class Namespace(object): pass class Namespace(object): pass
def filter_query_params(url, allowed=[]):
split_url = urlsplit(url)
qs = parse_qs(split_url.query)
print(qs)
for key in list(qs.keys()):
if key not in allowed:
del qs[key]
return urlunsplit((
split_url.scheme,
split_url.netloc,
split_url.path,
urlencode(qs, doseq=True),
split_url.fragment,
))
def get_youtube_metadata(url, ydl = youtube_dl.YoutubeDL()):
if urlsplit(url).netloc.lower() in ("www.youtube.com", "youtube.com", "youtub.be"):
#Stop it from doing the whole playlist
url = filter_query_params(url, allowed=["v"])
try:
resp = ydl.extract_info(url, download=False)
except DownloadError:
return None
#print resp.keys()
title = resp.get('title')
length = resp.get('duration')
#print( title, "%i:%.2i" % (length//60, length%60))
return {"title":title, "length":seconds_to_timestamp(length)}
def seconds_to_timestamp(s): def seconds_to_timestamp(s):
return "%i:%.2i" % (s//60, s%60) return "%i:%.2i" % (s//60, s%60)