diff --git a/couchpotato/core/plugins/movie/static/movie.js b/couchpotato/core/plugins/movie/static/movie.js index d71eb64..23b8c0d 100644 --- a/couchpotato/core/plugins/movie/static/movie.js +++ b/couchpotato/core/plugins/movie/static/movie.js @@ -365,7 +365,8 @@ var ReleaseAction = new Class({ } catch(e){} new Element('div', { - 'class': 'item '+status.identifier + 'class': 'item '+status.identifier, + 'id': 'release_'+release.id }).adopt( new Element('span.name', {'text': self.get(release, 'name'), 'title': self.get(release, 'name')}), new Element('span.status', {'text': status.identifier, 'class': 'release_status '+status.identifier}), @@ -382,7 +383,8 @@ var ReleaseAction = new Class({ 'events': { 'click': function(e){ (e).preventDefault(); - self.download(release); + if(!this.hasClass('completed')) + self.download(release); } } }), @@ -414,9 +416,21 @@ var ReleaseAction = new Class({ download: function(release){ var self = this; + var release_el = self.release_container.getElement('#release_'+release.id), + icon = release_el.getElement('.download.icon'); + + icon.addClass('spinner'); + Api.request('release.download', { 'data': { 'id': release.id + }, + 'onComplete': function(json){ + icon.removeClass('spinner') + if(json.success) + icon.addClass('completed'); + else + icon.addClass('attention').set('title', 'Something went wrong when downloading, please check logs.'); } }); }, diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 10de054..ff2507e 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -146,16 +146,16 @@ class Release(Plugin): provider = fireEvent('provider.belongs_to', item['url'], provider = item.get('provider'), single = True) item['download'] = provider.download - fireEvent('searcher.download', data = item, movie = rel.movie.to_dict({ + success = fireEvent('searcher.download', data = item, movie = rel.movie.to_dict({ 'profile': {'types': {'quality': {}}}, 'releases': {'status': {}, 'quality': {}}, 'library': {'titles': {}, 'files':{}}, 'files': {} - }), manual = True) + }), manual = True, single = True) #db.close() return jsonified({ - 'success': True + 'success': success }) else: log.error('Couldn\'t find release with id: %s', id) diff --git a/couchpotato/static/images/icon.attention.png b/couchpotato/static/images/icon.attention.png new file mode 100644 index 0000000..9878676 Binary files /dev/null and b/couchpotato/static/images/icon.attention.png differ diff --git a/couchpotato/static/images/icon.spinner.gif b/couchpotato/static/images/icon.spinner.gif new file mode 100644 index 0000000..4abd886 Binary files /dev/null and b/couchpotato/static/images/icon.spinner.gif differ diff --git a/couchpotato/static/style/main.css b/couchpotato/static/style/main.css index f5630f3..17ca8bf 100644 --- a/couchpotato/static/style/main.css +++ b/couchpotato/static/style/main.css @@ -147,7 +147,7 @@ body > .spinner, .mask{ .icon.delete { background-image: url('../images/icon.delete.png'); } .icon.download { background-image: url('../images/icon.download.png'); } .icon.edit { background-image: url('../images/icon.edit.png'); } -.icon.check { background-image: url('../images/icon.check.png'); } +.icon.completed { background-image: url('../images/icon.check.png'); } .icon.folder { background-image: url('../images/icon.folder.png'); } .icon.imdb { background-image: url('../images/icon.imdb.png'); } .icon.refresh { background-image: url('../images/icon.refresh.png'); } @@ -155,6 +155,8 @@ body > .spinner, .mask{ .icon.files { background-image: url('../images/icon.files.png'); } .icon.info { background-image: url('../images/icon.info.png'); } .icon.trailer { background-image: url('../images/icon.trailer.png'); } +.icon.spinner { background-image: url('../images/icon.spinner.gif'); } +.icon.attention { background-image: url('../images/icon.attention.png'); } /*** Navigation ***/ .header {