Skip to content

Commit

Permalink
Minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
vn-ki committed Dec 13, 2017
1 parent eedde53 commit 8a55803
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 60 deletions.
2 changes: 1 addition & 1 deletion mps_youtube/mpris.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ def setproperty(self, name, val):
'mpris:length' : dbus.Int64(length * 10**6, variant_level=1),
'mpris:artUrl' : dbus.String(arturl, variant_level=1),
'xesam:title' : dbus.String(title, variant_level=1),
'xesam:artist' : dbus.Array(artist),
'xesam:artist' : dbus.Array(artist, 's', 1),
'xesam:album' : dbus.String(album, variant_level=1) }

if newval != oldval:
Expand Down
62 changes: 3 additions & 59 deletions mps_youtube/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import time
import shlex
from urllib.error import HTTPError, URLError
import urllib

from . import g, screen, c, streams, history, content, paths, config, util

Expand Down Expand Up @@ -375,24 +374,22 @@ def _get_input_file():
def _launch_player(song, songdata, cmd):
""" Launch player application. """

#song.title

util.dbg("playing %s", song.title)
util.dbg("calling %s", " ".join(cmd))

# Fix UnicodeEncodeError when title has characters
# not supported by encoding
cmd = [util.xenc(i) for i in cmd]

metadata = _get_metadata(song.title)
metadata = util._get_metadata(song.title)

if metadata == None :
arturl = "https://i.ytimg.com/vi/%s/default.jpg" % song.ytid
metadata = (song.ytid, song.title, song.length, arturl, [''], '')
else :
arturl = metadata['album_art_url']
temp = (song.ytid, metadata['track_title'], song.length, arturl, [metadata['artist']], metadata['album'])
metadata = temp
metadata = (song.ytid, metadata['track_title'], song.length, arturl, [metadata['artist']], metadata['album'])

input_file = None
if ("mplayer" in config.PLAYER.get) or ("mpv" in config.PLAYER.get):
input_file = _get_input_file()
Expand Down Expand Up @@ -633,56 +630,3 @@ def _make_status_line(elapsed_s, prefix, songlength=0, volume=None):
status_line += " [%s]" % ("=" * (progress - 1) +
">").ljust(prog_bar_size, ' ')
return prefix + status_line + vol_suffix

def _get_metadata(song_title) :
''' Get metadata from a song title '''
t = re.sub("[\(\[].*?[\)\]]", "", song_title.lower())
t = t.split('-')

if len(t) != 2 : #If len is not 2, no way of properly knowing title for sure
t = t[0]
t = t.split(':')
if len(t) != 2 : #Ugly, but to be safe in case all these chars exist, Will improve
t = t[0]
t = t.split('|')
if len(t) != 2 :
return None

t[0] = re.sub("(ft |ft.|feat |feat.).*.", "", t[0])
t[1] = re.sub("(ft |ft.|feat |feat.).*.", "", t[1])

t[0] = t[0].strip()
t[1] = t[1].strip()

metadata = _get_metadata_from_lastfm(t[0], t[1])

if metadata != None :
return metadata

metadata = _get_metadata_from_lastfm(t[1], t[0])
return metadata

def _get_metadata_from_lastfm(artist, track) :
''' Try to get metadata with a given artist and track '''
url = 'http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=12dec50313f885d407cf8132697b8712&'
url += urllib.parse.urlencode({"artist" : artist}) + '&'
url += urllib.parse.urlencode({"track" : track}) + '&'
url += '&format=json'

resp = urllib.request.urlopen(url)

metadata = dict()

data = json.loads(resp.read())

if 'track' != list(data.keys())[0] :
return None
try :
metadata['track_title'] = data['track']['name']
metadata['artist'] = data['track']['artist']['name']
metadata['album'] = data['track']['album']['title']
metadata['album_art_url'] = data['track']['album']['image'][-1]['#text']
except :
return None

return metadata
55 changes: 55 additions & 0 deletions mps_youtube/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import subprocess
import collections
import unicodedata
import urllib
import json
from datetime import datetime, timezone

import pafy
Expand Down Expand Up @@ -472,3 +474,56 @@ def _get_mplayer_version(exename):
dbg("%sFailed to detect mplayer version%s", c.r, c.w)

return ver

def _get_metadata(song_title) :
''' Get metadata from a song title '''
t = re.sub("[\(\[].*?[\)\]]", "", song_title.lower())
t = t.split('-')

if len(t) != 2 : #If len is not 2, no way of properly knowing title for sure
t = t[0]
t = t.split(':')
if len(t) != 2 : #Ugly, but to be safe in case all these chars exist, Will improve
t = t[0]
t = t.split('|')
if len(t) != 2 :
return None

t[0] = re.sub("(ft |ft.|feat |feat.).*.", "", t[0])
t[1] = re.sub("(ft |ft.|feat |feat.).*.", "", t[1])

t[0] = t[0].strip()
t[1] = t[1].strip()

metadata = _get_metadata_from_lastfm(t[0], t[1])

if metadata != None :
return metadata

metadata = _get_metadata_from_lastfm(t[1], t[0])
return metadata

def _get_metadata_from_lastfm(artist, track) :
''' Try to get metadata with a given artist and track '''
url = 'http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=12dec50313f885d407cf8132697b8712&'
url += urllib.parse.urlencode({"artist" : artist}) + '&'
url += urllib.parse.urlencode({"track" : track}) + '&'
url += '&format=json'

resp = urllib.request.urlopen(url)

metadata = dict()

data = json.loads(resp.read())

if 'track' != list(data.keys())[0] :
return None
try :
metadata['track_title'] = data['track']['name']
metadata['artist'] = data['track']['artist']['name']
metadata['album'] = data['track']['album']['title']
metadata['album_art_url'] = data['track']['album']['image'][-1]['#text']
except :
return None

return metadata

0 comments on commit 8a55803

Please sign in to comment.