Skip to content

Commit 05c044c

Browse files
committed
Merge pull request #55 from jaedb/feature/publicspotify
Feature/publicspotify
2 parents 28ce9ed + 83d919b commit 05c044c

87 files changed

Lines changed: 41934 additions & 242 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/Concepts/
22
/dist/
3-
/mopidy_spotmop/static/
43
/node_modules/
54
/build/
65
*.orig

mopidy_spotmop/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from services.upgrade import upgrade
1010
from services.pusher import pusher
11+
from services.auth import auth
1112
from mopidy import config, ext
1213

1314
__version__ = '2.5.9'
@@ -69,6 +70,11 @@ def spotmop_client_factory(config, core):
6970
'config': config,
7071
'version': __version__
7172
}),
73+
('/auth', auth.AuthRequestHandler, {
74+
'core': core,
75+
'config': config,
76+
'version': __version__
77+
}),
7278
(r'/(.*)', tornado.web.StaticFileHandler, {
7379
"path": spotmoppath,
7480
"default_filename": "index.html"

mopidy_spotmop/services/auth/__init__.py

Whitespace-only changes.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import os
2+
import tornado.web
3+
import base64
4+
import urllib, urllib2, json
5+
6+
from tornado.escape import json_encode
7+
import subprocess
8+
9+
class AuthRequestHandler(tornado.web.RequestHandler):
10+
11+
def set_default_headers(self):
12+
self.set_header("Access-Control-Allow-Origin", "*")
13+
14+
def initialize(self, core, config, version):
15+
self.core = core
16+
self.config = config
17+
self.version = version
18+
19+
# check if we're able to upgrade, and what our current version is
20+
def get(self):
21+
22+
url = 'https://accounts.spotify.com/api/token'
23+
authorization = 'YTg3ZmI0ZGJlZDMwNDc1YjhjZWMzODUyM2RmZjUzZTI6ZDdjODlkMDc1M2VmNDA2OGJiYTE2NzhjNmNmMjZlZDY='
24+
25+
headers = {
26+
'Authorization' : 'Basic ' + authorization
27+
}
28+
data = {
29+
'grant_type' : 'client_credentials'
30+
}
31+
32+
data_encoded = urllib.urlencode( data )
33+
req = urllib2.Request(url, data_encoded, headers)
34+
35+
try:
36+
response = urllib2.urlopen(req, timeout=30).read()
37+
response_dict = json.loads(response)
38+
self.write(response_dict)
39+
return
40+
except urllib2.HTTPError as e:
41+
return e
42+
43+
44+
def spotmop_auth_factory(config, core):
45+
return [
46+
('/', AuthRequestHandler, {'core': core, 'config': config})
47+
]

mopidy_spotmop/static/app.js

Lines changed: 35824 additions & 0 deletions
Large diffs are not rendered by default.

mopidy_spotmop/static/app.min.js

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<div class="browse album-page">
2+
3+
<span class="menu-reveal-trigger" ng-click="showMenu()"><i class="fa fa-bars"></i></span>
4+
5+
<div class="asset-sidebar">
6+
7+
<div class="thumbnail album" ng-if="album.images.length > 0" ng-repeat="image in album.images | limitTo:1" style="background-image: url({{ image.url }});"></div>
8+
<div class="thumbnail album placeholder" ng-if="!album.images || album.images.length <= 0"></div>
9+
10+
<div class="artist-grid small">
11+
<a
12+
ng-repeat="artist in album.artists"
13+
class="artist"
14+
ui-sref="browse.artist.overview({ uri: artist.uri })">
15+
<thumbnail ng-if="artist.images" images="artist.images" size="small"></thumbnail>
16+
<div class="name-wrapper animate"><div class="name" ng-bind="artist.name"></div></div>
17+
</a>
18+
</div>
19+
20+
<div class="buttons">
21+
<a class="button primary" ng-click="playAlbum()"><i class="fa fa-play"></i>&nbsp; Play</a>
22+
<a class="button" ng-click="addToLibrary()" ng-if="spotifyAuthorized">Add to library</a>
23+
</div>
24+
25+
<div class="clear-left"></div>
26+
27+
<div class="info">
28+
<div class="info-item capitalize">
29+
<span ng-bind="album.tracks.total"></span> track<span ng-hide="album.tracks.items.length<=1">s</span>, <span ng-show="album.tracks.next">+</span><span ng-bind="totalTime()"></span> minutes
30+
</div>
31+
<div class="info-item capitalize">
32+
<span class="label">Released: </span>
33+
<span class="date" ng-bind="convertedDate()"></span>
34+
</div>
35+
<div class="info-item capitalize">
36+
Popularity:
37+
<span class="bar-track">
38+
<span class="bar" style="width: {{ album.popularity }}%;"></span>
39+
</span>
40+
&nbsp;
41+
</div>
42+
</div>
43+
44+
<div class="clear-left"></div>
45+
46+
</div>
47+
<div class="content scrolling-panel">
48+
<div class="inner">
49+
50+
<div class="intro">
51+
<div class="breadcrumbs">
52+
<span ng-if="linkingMode('browse.newalbum')">
53+
<a class="item" ui-sref="browse.new">New releases</a>
54+
<i class="fa fa-angle-right divider"></i>
55+
</span>
56+
<span ng-if="linkingMode('browse.artistalbum')">
57+
<a class="item" ui-sref="browse.artist.overview({ uri: artist.uri })" ng-bind="artist.name"></a>
58+
<i class="fa fa-angle-right divider"></i>
59+
</span>
60+
<span class="item">Album</span>
61+
</div>
62+
<h1 ng-bind="album.name"></h1>
63+
<h2 class="description">
64+
<span ng-repeat="artist in album.artists">
65+
<a ui-sref="browse.artist.overview({ uri: artist.uri })" ng-bind="artist.name"></a><span ng-if="!$last">, </span>
66+
</span>
67+
</h2>
68+
</div>
69+
70+
<div class="album-items tracklist" ng-controller="TracklistController" >
71+
72+
<track ng-repeat="track in tracklist.tracks track by $index"></track>
73+
74+
<div ng-hide="tracklist.tracks.length" class="no-items">
75+
No items
76+
</div>
77+
78+
</div>
79+
80+
</div>
81+
</div>
82+
83+
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<div class="biography">
2+
3+
<h4 class="section-title">Biography</h4>
4+
<div class="content" ng-bind="artist.biography.content"></div>
5+
6+
<div class="details">
7+
<p>
8+
Origin: <a href="{{ artist.biography.links.link.href }}" target="_blank" ng-bind="artist.biography.links.link.href" class="italic-text"></a>
9+
</p>
10+
<p>
11+
Published: <span ng-bind="artist.biography.published" class="italic-text"></span>
12+
</p>
13+
</div>
14+
15+
</div>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<div class="col" ng-class="{'w70': !mediumScreen(), 'w100': mediumScreen()}">
2+
3+
<h4 class="section-title">Top tracks</h4>
4+
5+
<div class="top-track-items tracklist" ng-controller="TracklistController">
6+
7+
<track ng-repeat="track in tracklist.tracks track by $index"></track>
8+
9+
<div ng-hide="tracklist.tracks.length" class="no-items">
10+
No items
11+
</div>
12+
13+
</div>
14+
</div>
15+
16+
<div class="col w25 pull-right" ng-hide="mediumScreen()">
17+
18+
<h4 class="section-title">Related Artists</h4>
19+
20+
<div class="artist-list related-artists">
21+
<a
22+
ng-repeat="artist in relatedArtists | limitTo:6 track by $index"
23+
class="artist"
24+
ui-sref="browse.artist.overview({ uri: artist.uri })">
25+
<span class="thumbnail animate" ng-repeat="image in artist.images | limitTo: 1 : artist.images.length-1" style="background-image: url({{ image.url }});" ng-if="artist.images.length > 0"></span>
26+
<span class="thumbnail animate" ng-if="artist.images.length <= 0"></span>
27+
<span class="name" ng-bind="artist.name"></span>
28+
</a>
29+
30+
<div ng-hide="relatedArtists.length" class="no-items">
31+
No items
32+
</div>
33+
</div>
34+
35+
</div>
36+
37+
<div class="clear-both"></div>
38+
39+
<h4 class="section-title">Albums</h4>
40+
41+
<div class="album-items square-panels">
42+
<div class="item-container" ng-repeat="album in albums.items track by $index">
43+
<a ui-sref="browse.artistalbum({ artisturi: artist.uri, uri: album.uri })" class="square-panel album">
44+
<div class="image-container" ng-repeat="image in album.images | filter:image.height=300 | limitTo:1">
45+
<div class="image animate" style="background-image: url({{ image.url }});"></div>
46+
</div>
47+
<div class="info smaller animate">
48+
<div class="name" ng-bind="album.name"></div>
49+
</div>
50+
</a>
51+
</div>
52+
</div>
53+
54+
<div class="clear-both"></div>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<h4 class="section-title">Related Artists</h4>
2+
3+
<div class="album-items square-panels">
4+
<div class="item-container" ng-repeat="artist in relatedArtists">
5+
<a ui-sref="browse.artist.overview({ uri: artist.uri })" class="square-panel album">
6+
<div class="image-container">
7+
<thumbnail images="artist.images"></thumbnail>
8+
</div>
9+
<div class="info smaller animate">
10+
<div class="name" ng-bind="artist.name"></div>
11+
</div>
12+
</a>
13+
</div>
14+
</div>
15+
16+
<div ng-hide="relatedArtists.length" class="no-items">
17+
No items
18+
</div>

0 commit comments

Comments
 (0)