Skip to content

Commit 27d6a7b

Browse files
committed
Upgrade detection on connection, and then flush caches
1 parent 760a9bf commit 27d6a7b

6 files changed

Lines changed: 49 additions & 24 deletions

File tree

mopidy_spotmop/__init__.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from services.pusher import pusher
1111
from mopidy import config, ext
1212

13-
__version__ = '2.5.6'
13+
__version__ = '2.5.7'
1414
__ext_name__ = 'spotmop'
1515
__verbosemode__ = False
1616

@@ -51,16 +51,26 @@ def spotmop_client_factory(config, core):
5151
# PUSHER: TODO: need to fire this up from within the PusherHandler class... somehow
5252
pusherport = str(config['spotmop']['pusherport'])
5353
application = tornado.web.Application([
54-
('/pusher', pusher.PusherHandler),
54+
('/pusher', pusher.PusherHandler, {
55+
'version': __version__
56+
}),
5557
])
5658
application.listen(pusherport)
5759
logger.info( 'Pusher server running on []:'+ str(pusherport) )
5860

5961
return [
60-
('/upgrade', upgrade.UpgradeRequestHandler, {'core': core, 'config': config, 'version': __version__ }),
61-
('/pusher/([^/]+)', pusher.PusherRequestHandler, {'core': core, 'config': config, 'version': __version__ }),
62+
('/upgrade', upgrade.UpgradeRequestHandler, {
63+
'core': core,
64+
'config': config,
65+
'version': __version__
66+
}),
67+
('/pusher/([^/]+)', pusher.PusherRequestHandler, {
68+
'core': core,
69+
'config': config,
70+
'version': __version__
71+
}),
6272
(r'/(.*)', tornado.web.StaticFileHandler, {
63-
"path": spotmoppath,
64-
"default_filename": "index.html"
65-
}),
73+
"path": spotmoppath,
74+
"default_filename": "index.html"
75+
}),
6676
]

mopidy_spotmop/services/pusher/pusher.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,19 @@ class PusherHandler(tornado.websocket.WebSocketHandler):
1212

1313
def check_origin(self, origin):
1414
return True
15+
16+
def initialize(self, version):
17+
self.version = version
1518

1619
def open(self):
17-
created = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
18-
self.id = str(uuid.uuid4())
20+
created = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
21+
self.id = str(uuid.uuid4().hex)
1922
self.details = {"id": self.id, "ip": self.request.remote_ip, "name": "User", "created": created}
2023
clients[self.id] = { 'details': self.details, 'connection': self}
2124

2225
# send a message to the client with it's assigned details
23-
connectedMessage = '{"pusher": "true", "startup": "true", "details": '+ json_encode(self.details) +'}'
24-
self.write_message( connectedMessage )
26+
connectedMessage = '{"pusher": "true", "startup": "true", "details": '+ json_encode(self.details) +', "version": "'+self.version+'"}'
27+
logger.info( connectedMessage )
2528
logger.debug( 'New Spotmop Pusher connection: '+ self.id )
2629

2730
def on_message(self, message):
@@ -53,24 +56,29 @@ def initialize(self, core, config, version):
5356
def get(self, action):
5457

5558
if action == 'me':
56-
id = self.get_argument('id','')
57-
name = self.get_argument('name','')
59+
id = self.get_argument('id','id')
60+
name = self.get_argument('name','name')
5861

5962
# save the payload name to the client list
60-
clients[id]['details']['name'] = name
61-
62-
# return the updated client details
63-
self.write( '{"status":"ok"}' )
63+
if id in clients:
64+
clients[id]['details']['name'] = name
65+
self.write( '{"status":"ok"}' )
66+
else:
67+
self.write( '{"status":"error","message":"Client does not exist"}' )
6468

6569
elif action == 'connections':
6670
clientDetailsList = []
6771
for client in clients.itervalues():
6872
clientDetailsList.append(client['details'])
6973
self.write(json_encode(clientDetailsList))
7074

71-
def spotmop_pusher_factory(config, core):
75+
def spotmop_pusher_factory(config, core, version):
7276
return [
73-
('/', PusherRequestHandler, {'core': core, 'config': config})
77+
('/', PusherRequestHandler, {
78+
'core': core,
79+
'config': config,
80+
'version': version
81+
})
7482
]
7583

7684

mopidy_spotmop/services/upgrade/upgrade.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ def initialize(self, core, config, version):
2020

2121
# check if we're able to upgrade, and what our current version is
2222
def get(self):
23-
self.write(json_encode({'root': self.isroot, 'currentVersion': self.version, 'latestVersion': '2.5.7'}))
23+
self.write(json_encode({'root': self.isroot, 'currentVersion': self.version}))
2424

2525
def post(self):
2626
if not self.isroot:
2727
status = 'error'
2828
message = 'Mopidy needs to run as root user to perform upgrades'
2929
else:
3030
try:
31-
subprocess.check_call(["pip", "install", "--upgrade", "mopidy-spotmop"])
31+
subprocess.check_call(["pip", "install", "--upgrade", "Mopidy-Spotmop"])
3232
status = 'success'
3333
message = 'Upgrade succesful'
3434
except subprocess.CalledProcessError:

src/app/common/tracklist/tltrack.template.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<i class="fa fa-square-o" ng-show="!track.selected"></i>
66
</div>
77

8-
<div class="col w30 title"><span ng-bind="track.track.name"></span><i class="fa fa-folder-open local-track" ng-if="!track.track.album.uri"></i></div>
8+
<div class="col w30 title"><span ng-bind="track.track.name"></span><span class="flag grey" ng-if="!track.track.album.uri">Local</span></div>
99

1010
<div class="col w30 artist">
1111
<span ng-repeat="artist in track.track.artists">

src/app/services/dialog/template.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div class="dialog">
22
<div class="background"></div>
3-
<span class="button close-dialog destructive" ng-click="closeDialog()" ng-hide="closeDisabled">
3+
<span class="button close-dialog destructive" singleclick="closeDialog()" ng-hide="closeDisabled">
44
<img src="assets/icons/close-white.svg" class="opacity-hover" />
55
</span>
66
<div class="content">

src/app/services/pusher/service.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
angular.module('spotmop.services.pusher', [
44
])
55

6-
.factory("PusherService", function($rootScope, $http, $q, $localStorage, SettingsService){
6+
.factory("PusherService", function($rootScope, $http, $q, $localStorage, $cacheFactory, SettingsService, NotifyService){
77

88
// make sure we have a local storage container
99
if( typeof( $localStorage.pusher ) === 'undefined' )
@@ -48,6 +48,13 @@ angular.module('spotmop.services.pusher', [
4848
SettingsService.setSetting('pusherid', data.details.id);
4949
SettingsService.setSetting('pusherip', data.details.ip);
5050

51+
// detect if the core has been updated
52+
if( SettingsService.getSetting('spotmopversion', 0) != data.version ){
53+
NotifyService.notify('New version detected, clearing caches...');
54+
$cacheFactory.get('$http').removeAll();
55+
SettingsService.setSetting('spotmopversion', data.version);
56+
}
57+
5158
// notify server of our actual username
5259
var name = SettingsService.getSetting('pushername', null)
5360
if( name )

0 commit comments

Comments
 (0)