Browse Source

Starting simple, removed non working pages for now

pull/51/merge
Ruud 14 years ago
parent
commit
aa24e3e249
  1. 2
      couchpotato/cli.py
  2. 6
      couchpotato/core/plugins/movie/main.py
  3. 17
      couchpotato/core/plugins/movie/static/list.js
  4. 1
      couchpotato/core/plugins/movie/static/movie.js
  5. 54
      couchpotato/core/plugins/searcher/main.py
  6. 1
      couchpotato/environment.py
  7. 61
      couchpotato/static/scripts/page/wanted.js
  8. 6
      couchpotato/templates/_desktop.html

2
couchpotato/cli.py

@ -74,7 +74,7 @@ def cmd_couchpotato(base_path, args):
logger.addHandler(hdlr) logger.addHandler(hdlr)
# To file # To file
hdlr2 = handlers.RotatingFileHandler(Env.get('log_path'), 'a', 5000000, 4) hdlr2 = handlers.RotatingFileHandler(Env.get('log_path'), 'a', 500000, 10)
hdlr2.setFormatter(formatter) hdlr2.setFormatter(formatter)
logger.addHandler(hdlr2) logger.addHandler(hdlr2)

6
couchpotato/core/plugins/movie/main.py

@ -38,7 +38,7 @@ class MoviePlugin(Plugin):
movies = [] movies = []
for movie in results: for movie in results:
temp = movie.to_dict(deep = { temp = movie.to_dict(deep = {
'releases': {'status': {}, 'quality': {}, 'files':{}}, 'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}},
'library': {'titles': {}, 'files':{}}, 'library': {'titles': {}, 'files':{}},
'files': {} 'files': {}
}) })
@ -68,7 +68,7 @@ class MoviePlugin(Plugin):
fireEventAsync('library.update', identifier = movie.library.identifier, default_title = default_title, force = True) fireEventAsync('library.update', identifier = movie.library.identifier, default_title = default_title, force = True)
fireEventAsync('searcher.single', movie.to_dict(deep = { fireEventAsync('searcher.single', movie.to_dict(deep = {
'profile': {'types': {'quality': {}}}, 'profile': {'types': {'quality': {}}},
'releases': {'status': {}, 'quality': {}}, 'releases': {'status': {}, 'quality': {}, 'files': {}, 'info': {}},
'library': {'titles': {}, 'files':{}}, 'library': {'titles': {}, 'files':{}},
'files': {} 'files': {}
})) }))
@ -119,7 +119,7 @@ class MoviePlugin(Plugin):
db.commit() db.commit()
movie_dict = m.to_dict(deep = { movie_dict = m.to_dict(deep = {
'releases': {'status': {}, 'quality': {}}, 'releases': {'status': {}, 'quality': {}, 'files': {}, 'info': {}},
'library': {'titles': {}} 'library': {'titles': {}}
}) })

17
couchpotato/core/plugins/movie/static/list.js

@ -3,7 +3,7 @@ var MovieList = new Class({
Implements: [Options], Implements: [Options],
options: { options: {
navigation: true navigation: false
}, },
movies: [], movies: [],
@ -23,6 +23,7 @@ var MovieList = new Class({
self.el.empty(); self.el.empty();
// Create the alphabet nav // Create the alphabet nav
if(self.options.navigation)
self.createNavigation(); self.createNavigation();
Object.each(self.movies, function(info){ Object.each(self.movies, function(info){
@ -32,16 +33,18 @@ var MovieList = new Class({
$(m).inject(self.el); $(m).inject(self.el);
m.fireEvent('injected'); m.fireEvent('injected');
if(self.options.navigation){
var first_char = m.getTitle().substr(0, 1); var first_char = m.getTitle().substr(0, 1);
self.activateLetter(first_char); self.activateLetter(first_char);
}
}); });
self.el.addEvents({ self.el.addEvents({
'mouseenter:relay(.movie)': function(e, el){ 'mouseenter:relay(.movie)': function(e, el){
el.addClass('hover') el.addClass('hover');
}, },
'mouseleave:relay(.movie)': function(e, el){ 'mouseleave:relay(.movie)': function(e, el){
el.removeClass('hover') el.removeClass('hover');
} }
}); });
}, },
@ -64,13 +67,13 @@ var MovieList = new Class({
self.letters[c] = new Element('li', { self.letters[c] = new Element('li', {
'text': c, 'text': c,
'class': 'letter_'+c 'class': 'letter_'+c
}).inject(self.alpha) }).inject(self.alpha);
}); });
}, },
activateLetter: function(letter){ activateLetter: function(letter){
this.letters[letter].addClass('active') this.letters[letter].addClass('active');
}, },
update: function(){ update: function(){
@ -80,7 +83,7 @@ var MovieList = new Class({
}, },
getMovies: function(){ getMovies: function(){
var self = this var self = this;
Api.request('movie.list', { Api.request('movie.list', {
'data': { 'data': {
@ -90,7 +93,7 @@ var MovieList = new Class({
self.store(json.movies); self.store(json.movies);
self.create(); self.create();
} }
}) });
}, },
store: function(movies){ store: function(movies){

1
couchpotato/core/plugins/movie/static/movie.js

@ -206,6 +206,7 @@ var ReleaseAction = new Class({
).inject(self.movie, 'top'); ).inject(self.movie, 'top');
Array.each(self.movie.data.releases, function(release){ Array.each(self.movie.data.releases, function(release){
p(release);
new Element('div', { new Element('div', {
'text': release.title 'text': release.title
}).inject(self.release_container) }).inject(self.release_container)

54
couchpotato/core/plugins/searcher/main.py

@ -1,9 +1,10 @@
from couchpotato import get_session from couchpotato import get_session
from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.encoding import simplifyString from couchpotato.core.helpers.encoding import simplifyString
from couchpotato.core.helpers.variable import md5
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from couchpotato.core.settings.model import Movie, Release from couchpotato.core.settings.model import Movie, Release, ReleaseInfo
from couchpotato.environment import Env from couchpotato.environment import Env
import re import re
@ -39,15 +40,20 @@ class Searcher(Plugin):
def single(self, movie): def single(self, movie):
downloaded_status = fireEvent('status.get', 'downloaded', single = True)
available_status = fireEvent('status.get', 'available', single = True)
snatched_status = fireEvent('status.get', 'snatched', single = True)
successful = False successful = False
for type in movie['profile']['types']: for type in movie['profile']['types']:
print type
has_better_quality = 0 has_better_quality = 0
default_title = movie['library']['titles'][0]['title'] default_title = movie['library']['titles'][0]['title']
# See if beter quality is available # See if beter quality is available
for release in movie['releases']: for release in movie['releases']:
if release['quality']['order'] <= type['quality']['order']: if release['quality']['order'] <= type['quality']['order'] and release['status_id'] is not available_status.get('id'):
has_better_quality += 1 has_better_quality += 1
# Don't search for quality lower then already available. # Don't search for quality lower then already available.
@ -57,25 +63,51 @@ class Searcher(Plugin):
results = fireEvent('provider.yarr.search', movie, type['quality'], merge = True) results = fireEvent('provider.yarr.search', movie, type['quality'], merge = True)
sorted_results = sorted(results, key = lambda k: k['score'], reverse = True) sorted_results = sorted(results, key = lambda k: k['score'], reverse = True)
# Add them to this movie releases list
for nzb in sorted_results: for nzb in sorted_results:
successful = fireEvent('download', data = nzb, movie = movie, single = True)
if successful:
log.info('Downloading of %s successful.' % nzb.get('name'))
# Add release item, should be updated later when renaming
snatched_status = fireEvent('status.get', 'snatched', single = True)
db = get_session() db = get_session()
rls = db.query(Release).filter_by(identifier = md5(nzb['url'])).first()
if not rls:
rls = Release( rls = Release(
identifier = '%s.%s' % (movie['library']['identifier'], type['quality']['identifier']), identifier = md5(nzb['url']),
movie_id = movie.get('id'), movie_id = movie.get('id'),
quality_id = type.get('quality_id'), quality_id = type.get('quality_id'),
status_id = snatched_status.get('id') status_id = available_status.get('id')
) )
db.add(rls) db.add(rls)
db.commit() db.commit()
for info in nzb:
rls_info = ReleaseInfo(
identifier = info,
value = nzb[info]
)
rls.info.append(rls_info)
db.commit()
for nzb in sorted_results:
successful = fireEvent('download', data = nzb, movie = movie, single = True)
if successful:
log.info('Downloading of %s successful.' % nzb.get('name'))
# Mark release as snatched
db = get_session()
rls = db.query(Release).filter_by(identifier = md5(nzb['url'])).first()
rls.status_id = snatched_status.get('id')
db.commit()
# Mark movie snatched if quality is finish-checked
if type['finish']:
mvie = db.query(Movie).filter_by(id = movie['id']).first()
mvie.status_id = snatched_status.get('id')
db.commit()
return True return True
return False
else: else:
log.info('Better quality (%s) already available or snatched for %s' % (type['quality']['label'], default_title)) log.info('Better quality (%s) already available or snatched for %s' % (type['quality']['label'], default_title))
break break

1
couchpotato/environment.py

@ -19,6 +19,7 @@ class Env:
_data_dir = "" _data_dir = ""
_cache_dir = "" _cache_dir = ""
_db_path = "" _db_path = ""
_log_path = ""
@staticmethod @staticmethod
def doDebug(): def doDebug():

61
couchpotato/static/scripts/page/wanted.js

@ -9,27 +9,33 @@ Page.Wanted = new Class({
var self = this; var self = this;
if(!self.list){ if(!self.list){
self.list = new MovieList({
// Wanted movies
self.wanted = new MovieList({
'status': 'active', 'status': 'active',
'actions': Wanted.Action 'actions': WantedActions
}); });
$(self.list).inject(self.el); $(self.wanted).inject(self.el);
App.addEvent('library.update', self.wanted.update.bind(self.wanted));
App.addEvent('library.update', self.list.update.bind(self.list)) // Snatched movies
self.snatched = new MovieList({
'status': 'snatched',
'actions': SnatchedActions
});
$(self.snatched).inject(self.el);
App.addEvent('library.update', self.snatched.update.bind(self.snatched));
} }
} }
}); });
var Wanted = { var WantedActions = {
'Action': {
'IMBD': IMDBAction 'IMBD': IMDBAction
//,'releases': ReleaseAction //,'releases': ReleaseAction
}
}
Wanted.Action.Edit = new Class({ ,'Edit': new Class({
Extends: MovieAction, Extends: MovieAction,
@ -75,7 +81,7 @@ Wanted.Action.Edit = new Class({
Array.each(self.movie.data.library.titles, function(alt){ Array.each(self.movie.data.library.titles, function(alt){
new Element('option', { new Element('option', {
'text': alt.title 'text': alt.title
}).inject(self.title_select) }).inject(self.title_select);
}); });
Object.each(Quality.profiles, function(profile){ Object.each(Quality.profiles, function(profile){
@ -103,17 +109,17 @@ Wanted.Action.Edit = new Class({
'useSpinner': true, 'useSpinner': true,
'spinnerTarget': $(self.movie), 'spinnerTarget': $(self.movie),
'onComplete': function(){ 'onComplete': function(){
self.movie.quality.set('text', self.profile_select.getSelected()[0].get('text')) self.movie.quality.set('text', self.profile_select.getSelected()[0].get('text'));
self.movie.title.set('text', self.title_select.getSelected()[0].get('text')) self.movie.title.set('text', self.title_select.getSelected()[0].get('text'));
} }
}); });
self.movie.slide('out'); self.movie.slide('out');
} }
}) })
Wanted.Action.Refresh = new Class({ ,'Refresh': new Class({
Extends: MovieAction, Extends: MovieAction,
@ -137,12 +143,12 @@ Wanted.Action.Refresh = new Class({
'data': { 'data': {
'id': self.movie.get('id') 'id': self.movie.get('id')
} }
}) });
} }
}) })
Wanted.Action.Delete = new Class({ ,'Delete': new Class({
Extends: MovieAction, Extends: MovieAction,
@ -185,7 +191,7 @@ Wanted.Action.Delete = new Class({
'click': self.del.bind(self) 'click': self.del.bind(self)
} }
}) })
).inject(self.movie, 'top') ).inject(self.movie, 'top');
} }
self.movie.slide('in'); self.movie.slide('in');
@ -200,14 +206,14 @@ Wanted.Action.Delete = new Class({
}, },
del: function(e){ del: function(e){
(e).stop() (e).stop();
var self = this; var self = this;
var movie = $(self.movie); var movie = $(self.movie);
self.chain( self.chain(
function(){ function(){
$(movie).mask().addClass('loading') $(movie).mask().addClass('loading');
self.callChain(); self.callChain();
}, },
function(){ function(){
@ -220,10 +226,10 @@ Wanted.Action.Delete = new Class({
'onComplete': function(){ 'onComplete': function(){
movie.destroy(); movie.destroy();
} }
}) });
movie.tween('height', 0) movie.tween('height', 0);
} }
}) });
} }
); );
@ -231,4 +237,11 @@ Wanted.Action.Delete = new Class({
} }
}) })
};
var SnatchedActions = {
'IMBD': IMDBAction
,'Releases': ReleaseAction
,'Delete': WantedActions.Delete
};

6
couchpotato/templates/_desktop.html

@ -31,10 +31,10 @@
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page.js') }}"></script> <script type="text/javascript" src="{{ url_for('.static', filename='scripts/page.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/wanted.js') }}"></script> <script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/wanted.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/settings.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/log.js') }}"></script> <script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/log.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/soon.js') }}"></script> <script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/settings.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/manage.js') }}"></script> <!--<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/soon.js') }}"></script>
<script type="text/javascript" src="{{ url_for('.static', filename='scripts/page/manage.js') }}"></script>-->
<link href="{{ url_for('.static', filename='images/favicon.ico') }}" rel="icon" type="image/x-icon" /> <link href="{{ url_for('.static', filename='images/favicon.ico') }}" rel="icon" type="image/x-icon" />
<link rel="apple-touch-icon" href="{{ url_for('.static', filename='images/homescreen.png') }}" /> <link rel="apple-touch-icon" href="{{ url_for('.static', filename='images/homescreen.png') }}" />

Loading…
Cancel
Save