From 65d488321f319c3dd13cf0d491b13682bae6f2cd Mon Sep 17 00:00:00 2001 From: JackDandy Date: Thu, 13 Nov 2014 17:07:10 +0000 Subject: [PATCH 01/43] Change footer stats to not add newlines when copy/pasting. Remove redundant references from Config / Help & Info. --- CHANGES.md | 4 ++ gui/slick/interfaces/default/config.tmpl | 10 +-- gui/slick/interfaces/default/inc_bottom.tmpl | 67 ++++++++++---------- 3 files changed, 41 insertions(+), 40 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 695b486b..cfe02e97 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ ### 0.x.x (2014-11-xx xx:xx:xx UTC) +* Change footer stats to not add newlines when copy/pasting from them +* Remove redundant references from Config / Help & Info + + ### 0.3.0 (2014-11-12 14:30:00 UTC) * Change logos, text etc. branding to SickGear diff --git a/gui/slick/interfaces/default/config.tmpl b/gui/slick/interfaces/default/config.tmpl index 75ca89ab..5fe80d18 100644 --- a/gui/slick/interfaces/default/config.tmpl +++ b/gui/slick/interfaces/default/config.tmpl @@ -39,11 +39,11 @@ #end if You are using BETA software - SR Config file:$sickbeard.CONFIG_FILE - SR Database file:$db.dbFilename() - SR Cache Dir:$sickbeard.CACHE_DIR - SR Arguments:$sickbeard.MY_ARGS - SR Web Root:$sickbeard.WEB_ROOT + Config file:$sickbeard.CONFIG_FILE + Database file:$db.dbFilename() + Cache Dir:$sickbeard.CACHE_DIR + Arguments:$sickbeard.MY_ARGS + Web Root:$sickbeard.WEB_ROOT Python Version:$sys.version[:120] Homepagehttps://github.com/SickGear/SickGear/wiki Sourcehttps://github.com/SickGear/SickGear/ diff --git a/gui/slick/interfaces/default/inc_bottom.tmpl b/gui/slick/interfaces/default/inc_bottom.tmpl index f6621060..8ec9cada 100644 --- a/gui/slick/interfaces/default/inc_bottom.tmpl +++ b/gui/slick/interfaces/default/inc_bottom.tmpl @@ -3,53 +3,50 @@ #from sickbeard import db, sbdatetime #from sickbeard.common import * - + - + From 02719ce23e5215f67ff97ffd1bc1635c7d7e22f8 Mon Sep 17 00:00:00 2001 From: Supremicus Date: Fri, 14 Nov 2014 07:52:54 +1000 Subject: [PATCH 02/43] Fix poster preview on small poster layout --- CHANGES.md | 1 + gui/slick/interfaces/default/home.tmpl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index cfe02e97..6423e01b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config / Help & Info +* Fix poster preview on small poster layout ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/interfaces/default/home.tmpl b/gui/slick/interfaces/default/home.tmpl index 17520e79..da6caebc 100644 --- a/gui/slick/interfaces/default/home.tmpl +++ b/gui/slick/interfaces/default/home.tmpl @@ -535,7 +535,7 @@ $myShowList.sort(lambda x, y: cmp(x.name, y.name)) #if $layout == 'small':
- + $curShow.indexerid $curShow.name From 4b34be35b596d6426ac81652805afbd7e0096928 Mon Sep 17 00:00:00 2001 From: Supremicus Date: Fri, 14 Nov 2014 15:53:24 +1000 Subject: [PATCH 03/43] Overhaul Config Anime. Overhaul Config Anime to be in line with General Configuration. --- CHANGES.md | 1 + .../interfaces/default/config_anime.tmpl | 164 +++++++++--------- 2 files changed, 87 insertions(+), 78 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6423e01b..169e927a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,7 @@ * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config / Help & Info * Fix poster preview on small poster layout +* Change overhaul Config Anime to be in line with General Configuration ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/interfaces/default/config_anime.tmpl b/gui/slick/interfaces/default/config_anime.tmpl index 17f56de5..bb8b600d 100644 --- a/gui/slick/interfaces/default/config_anime.tmpl +++ b/gui/slick/interfaces/default/config_anime.tmpl @@ -1,109 +1,117 @@ #import sickbeard #from sickbeard.helpers import anon_url -#set global $title="Config - Anime" -#set global $header="Anime" +#set global $title = 'Config - Anime' +#set global $header = 'Anime Configuration' -#set global $sbPath="../.." +#set global $sbPath = '../..' -#set global $topmenu="config"# -#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_top.tmpl") +#set global $topmenu = 'config' +#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl') - -
+ #if $varExists('header')

$header

#else

$title

#end if +
-
+
- - -
-
+ + +
+
+ +
AniDB -

AniDB

-

AniDB is non-profit database of anime information that is freely open to the public

-
+

AniDB

+

Keep track of your anime downloads with AniDB

+
-
-
- - -
- -
-
- - -
- -
- - -
-
- - -
+
+
+
- -
-
- -
+
+
+ +
+ +
+ +
+ +
+ +
+
+ + +
+
+ +
+ +
+

User Interface

+

Change how anime appears on the home page.

+
+ +
+
+ +
+ + +
+
+
-
-

Look and Feel

-
-
-
- - -
- -
-
-

+
- -#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_bottom.tmpl") +#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl') \ No newline at end of file From abd1c453fba0d3d9f77641b93b2aec6a6d02fbbe Mon Sep 17 00:00:00 2001 From: JackDandy Date: Fri, 14 Nov 2014 18:34:56 +0000 Subject: [PATCH 04/43] Remove output of source code line when warnings highlight libraries not used with IMDb. Add a new show to observe the output. Conflicts: CHANGES.md --- CHANGES.md | 1 + lib/imdb/parser/http/utils.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 169e927a..71af2bad 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ * Remove redundant references from Config / Help & Info * Fix poster preview on small poster layout * Change overhaul Config Anime to be in line with General Configuration +* Remove output of source code line when warnings highlight libraries not used with IMDb ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/lib/imdb/parser/http/utils.py b/lib/imdb/parser/http/utils.py index 8b4e17e3..031a4d3a 100644 --- a/lib/imdb/parser/http/utils.py +++ b/lib/imdb/parser/http/utils.py @@ -441,6 +441,12 @@ class DOMParserBase(object): self._useModule = useModule nrMods = len(useModule) _gotError = False + + # Force warnings.warn() to omit the source code line in the message + formatwarning_orig = warnings.formatwarning + warnings.formatwarning = lambda message, category, filename, lineno, line=None: \ + formatwarning_orig(message, category, filename, lineno, line='') + for idx, mod in enumerate(useModule): mod = mod.strip().lower() try: From 65b33a6fe7d2c90f863dcb4abd1bbca0a7d9dfd4 Mon Sep 17 00:00:00 2001 From: Supremicus Date: Sat, 15 Nov 2014 13:15:44 +1000 Subject: [PATCH 05/43] Add filtering of shows on Add Trending Shows page. Add dropdown on the Add Trending Shows page to display all shows, shows not in library, or shows in library. --- CHANGES.md | 1 + .../default/home_trendingShows.tmpl | 19 +++++++++++++++++-- sickbeard/webserve.py | 3 ++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 71af2bad..64721e77 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ * Fix poster preview on small poster layout * Change overhaul Config Anime to be in line with General Configuration * Remove output of source code line when warnings highlight libraries not used with IMDb +* Add dropdown on Add Trending Shows to display all shows, shows not in library, or shows in library ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/interfaces/default/home_trendingShows.tmpl b/gui/slick/interfaces/default/home_trendingShows.tmpl index 011f170f..5c4c6ef8 100644 --- a/gui/slick/interfaces/default/home_trendingShows.tmpl +++ b/gui/slick/interfaces/default/home_trendingShows.tmpl @@ -23,6 +23,7 @@ // initialise combos for dirty page refreshes \$('#showsort').val('original'); \$('#showsortdirection').val('asc'); + \$('#showfilter').val('*'); var \$container = [\$('#container')]; jQuery.each(\$container, function (j) { @@ -73,6 +74,11 @@ \$('#showsortdirection').on( 'change', function() { \$('#container').isotope({sortAscending: ('asc' == this.value)}); }); + + \$('#showfilter').on( 'change', function() { + var filterValue = this.value; + \$('#container').isotope({ filter: filterValue }); + }); }); //--> @@ -86,7 +92,16 @@ #if $trending_shows
- Sort By: + Show: + + + Sort By: +
+ - #if $use_provided_info: - Show retrieved from existing metadata: $provided_indexer_name +#if $use_provided_info + #set $provided_indexer_local = $provided_indexer + #set $provided_indexer_id_local = $provided_indexer_id + Show retrieved from existing metadata: $provided_indexer_name - #else: - +#else   - #for $indexer in $indexers - - #end for + #for $indexer in $indexers + + #end for   - +
* This will only affect the language of the retrieved metadata file contents and episode filenames.
This DOES NOT allow SickGear to download non-english TV episodes!


- #end if +#end if -
- +
+ -
- Pick the parent folder +
+ Pick the parent folder -
- #if $provided_show_dir: +
+#if $provided_show_dir Pre-chosen Destination Folder: $provided_show_dir

- #else - #include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_rootDirs.tmpl") - #end if -
-
- -
- Customize options -
- #include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_addShowOptions.tmpl") +#else + #include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_rootDirs.tmpl') +#end if
-
+
- #for $curNextDir in $other_shows: - - #end for - +
+ Customize options +
+#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_addShowOptions.tmpl') +
+
+ +#for $curNextDir in $other_shows + +#end for + -
+
-
- -#if $provided_show_dir: - +
+ +#if $provided_show_dir + #end if -
+
-#include $os.path.join($sickbeard.PROG_DIR,"gui/slick/interfaces/default/inc_bottom.tmpl") +#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl') From 1e69286c9f192f4487e1249457f4e388effe87c2 Mon Sep 17 00:00:00 2001 From: Prinz23 Date: Sat, 15 Nov 2014 17:02:16 +0100 Subject: [PATCH 11/43] Remove unneeded datetime convert from Coming Episodes page. Prevent usage of function .fromtimestamp that can throw exceptions on some platforms. Replace datetime calls with sbdatetime calls. --- CHANGES.md | 1 + gui/slick/interfaces/default/comingEpisodes.tmpl | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c29c6028..1c466f56 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ * Change Add Show on Add Trending Show Page to use the full Add New Show flow * Fix adding shows with titles that contain "&" on Add Trending Show page * Fix unset vars on Add New Shows Page used in the Add Existing Shows context +* Remove unneeded datetime convert from Coming Episodes page ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/interfaces/default/comingEpisodes.tmpl b/gui/slick/interfaces/default/comingEpisodes.tmpl index e278593b..a4645cf7 100644 --- a/gui/slick/interfaces/default/comingEpisodes.tmpl +++ b/gui/slick/interfaces/default/comingEpisodes.tmpl @@ -359,10 +359,10 @@ #set $too_late_header = True #elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date(): #if $cur_ep_airdate == $today.date(): -

$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime('%A').decode($sickbeard.SYS_ENCODING).capitalize() [Today]

+

$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() [Today]

#set $today_header = True #else: -

$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime('%A').decode($sickbeard.SYS_ENCODING).capitalize()

+

$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize()

#end if #end if #end if @@ -371,7 +371,7 @@ #if $cur_ep_airdate == $today.date() and not $today_header:
-

$datetime.date.fromordinal($cur_ep_airdate.toordinal).strftime('%A').decode($sickbeard.SYS_ENCODING).capitalize() [Today]

+

$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() [Today]

#set $today_header = True #end if #if $runtime: @@ -489,7 +489,7 @@ #for $day in $dates #set $tbl_day += 1 - + #set $day_has_show = False #for $cur_result in $sql_results: @@ -503,7 +503,7 @@ #if $airday == $day: #set $day_has_show = True - #set $airtime = $sbdatetime.sbdatetime.fromtimestamp($time.mktime($cur_result['localtime'].timetuple())).sbftime().decode($sickbeard.SYS_ENCODING) + #set $airtime = $sbdatetime.sbdatetime.sbftime($cur_result['localtime']).decode($sickbeard.SYS_ENCODING) #if $sickbeard.TRIM_ZERO: #set $airtime = re.sub(r'0(\d:\d\d)', r'\1', $airtime, 0, re.IGNORECASE | re.MULTILINE) #end if From b6d079fe4842b4d65d2370cfcd7b6f1dd048c18f Mon Sep 17 00:00:00 2001 From: JackDandy Date: Sun, 16 Nov 2014 02:19:15 +0000 Subject: [PATCH 12/43] Fix the log output of the limited backlog search for episodes missed. The log text backwardly reported processing was for missed episodes older than x days. It's for episodes missed during the last x days. --- CHANGES.md | 1 + sickbeard/searchBacklog.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 1c466f56..0429db5f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ * Fix adding shows with titles that contain "&" on Add Trending Show page * Fix unset vars on Add New Shows Page used in the Add Existing Shows context * Remove unneeded datetime convert from Coming Episodes page +* Fix the log output of the limited backlog search for episodes missed ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/sickbeard/searchBacklog.py b/sickbeard/searchBacklog.py index 0159deb0..66eb489b 100644 --- a/sickbeard/searchBacklog.py +++ b/sickbeard/searchBacklog.py @@ -85,7 +85,7 @@ class BacklogSearcher: fromDate = datetime.date.fromordinal(1) if not which_shows and not curDate - self._lastBacklog >= self.cycleTime: - logger.log(u"Running limited backlog on missed episodes " + str(sickbeard.BACKLOG_DAYS) + " day(s) and older only") + logger.log(u'Running limited backlog for episodes missed during the last %s day(s)' % str(sickbeard.BACKLOG_DAYS)) fromDate = datetime.date.today() - datetime.timedelta(days=sickbeard.BACKLOG_DAYS) self.amActive = True From 8b5ab27444bd59097b802149b01ff7ab1b8a4213 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Nov 2014 14:50:44 +0800 Subject: [PATCH 13/43] Remove unsupported t411 provider Removing unsupported french private tracker --- CHANGES.md | 1 + gui/slick/images/providers/t411.png | Bin 3270 -> 0 bytes sickbeard/__init__.py | 2 +- sickbeard/providers/__init__.py | 1 - sickbeard/providers/t411.py | 295 ---------------------------- 5 files changed, 2 insertions(+), 297 deletions(-) delete mode 100644 gui/slick/images/providers/t411.png delete mode 100644 sickbeard/providers/t411.py diff --git a/CHANGES.md b/CHANGES.md index 0429db5f..35e9c9f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,6 +13,7 @@ * Fix unset vars on Add New Shows Page used in the Add Existing Shows context * Remove unneeded datetime convert from Coming Episodes page * Fix the log output of the limited backlog search for episodes missed +* Remove unsupported t411 provider ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/images/providers/t411.png b/gui/slick/images/providers/t411.png deleted file mode 100644 index cffc3785ee5f8bf1e82f0c2dde3622688a4c0053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3270 zcmV;%3_0_OP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005;NkldKzY(YT@QcY1O5jUZOB8oT&m4brc z;#5?05tnKg2UnFkSS?6x7O@slQEZSrYOHP2-n5Cvnn!QUy+4OS{(%k-oYxmCS?`P17ov#FHTG4Q4Y9l3Cfaz?Q8g zzGXEE^9?a_Vja*;IXIrL-h7oSo^EM*M|E@r@+l&{2co*9#EV*qNKZFT-Jqeb)m2}3 zNe^^g2F7H7nXER{QCm9ioPOe{r9VQW!uEKa;rn+Pym*1#z55uxafPV)i*tweI*>JQR?>LgE}PvEj!$s|*Zj=iLXLMHQ-Kqv_1#ZVjg zk(_3HdWOV{Nw6ry4j&}8XBVo&iPz=CEab2V1Dn%DO>ffa^MImCZD4h^nwZI#*x%O+ ze{>2>g^8&TxD{xcAi2G`95!q&7s6`CFhTKe*4itC25$}J=HK`WRpS_{ -# URL: http://code.google.com/p/sickbeard/ -# -# This file is part of Sick Beard. -# -# Sick Beard is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Sick Beard is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Sick Beard. If not, see . - -import traceback -import time -import re -import datetime -import sickbeard -import generic -from lib import requests -from sickbeard.common import USER_AGENT, Quality, cpu_presets -from sickbeard import logger -from sickbeard import tvcache -from sickbeard import show_name_helpers -from sickbeard.bs4_parser import BS4Parser -from sickbeard import db - -class T411Provider(generic.TorrentProvider): - urls = {'base_url': 'http://www.t411.me/', - 'search': 'http://www.t411.me/torrents/search/?name=%s&cat=210&subcat=433&search=%s&submit=Recherche', - 'login_page': 'http://www.t411.me/users/login/', - 'download': 'http://www.t411.me/torrents/download/?id=%s', - } - - def __init__(self): - - generic.TorrentProvider.__init__(self, "T411") - - self.supportsBacklog = True - - self.enabled = False - self.username = None - self.password = None - self.ratio = None - - self.cache = T411Cache(self) - - self.url = self.urls['base_url'] - - self.last_login_check = None - - self.login_opener = None - - def isEnabled(self): - return self.enabled - - def imageName(self): - return 't411.png' - - def getQuality(self, item, anime=False): - - quality = Quality.sceneQuality(item[0], anime) - return quality - - def getLoginParams(self): - return { - 'login': self.username, - 'password': self.password, - 'remember': '1', - } - - def loginSuccess(self, output): - if "Ratio: 0: - for result in entries: - - try: - link = result.find('a', title=True) - torrentName = link['title'] - torrent_name = str(torrentName) - torrentId = result.find_all('td')[2].find_all('a')[0]['href'][1:].replace('torrents/nfo/?id=','') - torrent_download_url = (self.urls['download'] % torrentId).encode('utf8') - except (AttributeError, TypeError): - continue - - if not torrent_name or not torrent_download_url: - continue - - item = torrent_name, torrent_download_url - logger.log(u"Found result: " + torrent_name + " (" + torrent_download_url + ")", logger.DEBUG) - items[mode].append(item) - - else: - logger.log(u"The Data returned from " + self.name + " do not contains any torrent", - logger.WARNING) - continue - - except Exception, e: - logger.log(u"Failed parsing " + self.name + " Traceback: " + traceback.format_exc(), - logger.ERROR) - - results += items[mode] - - return results - - def _get_title_and_url(self, item): - - title, url = item - - if title: - title = u'' + title - title = title.replace(' ', '.') - - if url: - url = str(url).replace('&', '&') - - return title, url - - def findPropers(self, search_date=datetime.datetime.today()): - - results = [] - - myDB = db.DBConnection() - sqlResults = myDB.select( - 'SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.airdate FROM tv_episodes AS e' + - ' INNER JOIN tv_shows AS s ON (e.showid = s.indexer_id)' + - ' WHERE e.airdate >= ' + str(search_date.toordinal()) + - ' AND (e.status IN (' + ','.join([str(x) for x in Quality.DOWNLOADED]) + ')' + - ' OR (e.status IN (' + ','.join([str(x) for x in Quality.SNATCHED]) + ')))' - ) - - if not sqlResults: - return [] - - for sqlshow in sqlResults: - self.show = helpers.findCertainShow(sickbeard.showList, int(sqlshow["showid"])) - if self.show: - curEp = self.show.getEpisode(int(sqlshow["season"]), int(sqlshow["episode"])) - searchString = self._get_episode_search_strings(curEp, add_string='PROPER|REPACK') - - for item in self._doSearch(searchString[0]): - title, url = self._get_title_and_url(item) - results.append(classes.Proper(title, url, datetime.datetime.today(), self.show)) - - return results - - def seedRatio(self): - return self.ratio - - -class T411Cache(tvcache.TVCache): - def __init__(self, provider): - - tvcache.TVCache.__init__(self, provider) - - # Only poll T411 every 10 minutes max - self.minTime = 10 - - def _getDailyData(self): - search_params = {'RSS': ['']} - return self.provider._doSearch(search_params) - - -provider = T411Provider() From ff654aa894265a9c68163972d095898c5fe7f2ec Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Nov 2014 14:43:17 +0800 Subject: [PATCH 14/43] Remove obsolete Animezb provider Animezb provider no longer exists --- CHANGES.md | 1 + gui/slick/images/providers/animezb.png | Bin 3894 -> 0 bytes sickbeard/__init__.py | 2 +- sickbeard/providers/__init__.py | 1 - sickbeard/providers/animezb.py | 155 ------------------------- 5 files changed, 2 insertions(+), 157 deletions(-) delete mode 100644 gui/slick/images/providers/animezb.png delete mode 100644 sickbeard/providers/animezb.py diff --git a/CHANGES.md b/CHANGES.md index 35e9c9f4..68bfe3c2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ * Remove unneeded datetime convert from Coming Episodes page * Fix the log output of the limited backlog search for episodes missed * Remove unsupported t411 provider +* Remove obsolete Animezb provider ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/images/providers/animezb.png b/gui/slick/images/providers/animezb.png deleted file mode 100644 index 59412e688f3d37d423195545827cbccb3bc31889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3894 zcmV-656SR}P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000DGNklV@qTXoC5z4GmLsLQNR4#tKkGKVxM@X9~M_^7e&1= z|7_lfy$Pa+r%%o{gWew*(5E1+Y4s1;R!B*Eb2zI9^w(z^qUHZzAfG()Abd3}hZAA# zd#*oS&w~29I;iwRRjcb}Wf~*~6AvVA0)73gH@Xhwz3NhV0ccVC1@mdh^wd;31|Xp~ z>8iy8M#qdjdK63nn@I~mT)K58-Up)DXcL7X&lS;QVUbhrnbY{P-XL)9%wky zwEz7Cn7lDnGT92%C*GP@^#+8FO^;1afK;JW$fw}G%eUfR;O^2ZqyP9Id$ei)tNkFA zsypO9Fs!qEdLxJ&qu=lWsZtqPAoCgp6hO#1T|eCc%WIa+mahbDOuL}Y6v_&r) zQ@|ghi;E9mPBp5HjYd6~hZ3q1La;_&y>iv}Fn(ry)wm0G3~#fw3otGk!^S6&QlB!G zoDRiBMTJEt;j($N2pAkH)IbbJro{@}+e zeml@2?h*z$d^vnCtif`*!o6$)Z0BvwwhE}3tV`MW9c+w$XW_fwz`7+hA8km2?lYd9 zUpGM0r<*_9ydRV@rC7}cVHT-k0mz!^fHDAK%XrR%_26s$YTL*ePzn>gYBk`Lx+nz< zA{ZdOXkMK5a`vt386}H6i>i~;v0%XhKA*qSKMHEO>Qr;U=r;z9pTM%uQe|;M*4B)y zj5_$M&2RA@05!)}5Pt~5y>}9WZlGHj>;fYv64txG>`3!kyTP!}4(cs1Gd0;Wy?Z>M zDjwyavIl$-zwA#3;TB(t<6x>Ym6{5GV|3#Ir9s)GY=YoO&>XbEuf4-Ec%0i* z29d!1&%;5GyW>!Dfn>_a0C~z(t{j38e;3?44pO_+DV+ytjT(}(K#IZW*7ev+B&R>w zC>{^Y<$&qwpa7F^E{grX%)y~y4#)1tjAK{K@9g+*05XBOR#VvC -# URL: http://code.google.com/p/sickbeard/ -# -# This file is part of Sick Beard. -# -# Sick Beard is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Sick Beard is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Sick Beard. If not, see . - -import urllib -import datetime - -import sickbeard -import generic - -from sickbeard import classes, show_name_helpers, helpers - -from sickbeard import exceptions, logger -from sickbeard.common import * -from sickbeard import tvcache -from lib.dateutil.parser import parse as parseDate - - -class Animezb(generic.NZBProvider): - - def __init__(self): - - generic.NZBProvider.__init__(self, "Animezb") - - self.supportsBacklog = False - self.supportsAbsoluteNumbering = True - self.anime_only = True - - self.enabled = False - - self.cache = AnimezbCache(self) - - self.url = 'https://animezb.com/' - - def isEnabled(self): - return self.enabled - - def imageName(self): - return 'animezb.png' - - def _get_season_search_strings(self, ep_obj): - return [x for x in show_name_helpers.makeSceneSeasonSearchString(self.show, ep_obj)] - - def _get_episode_search_strings(self, ep_obj, add_string=''): - search_string = [] - for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): - ep_string = '+'.join( - [helpers.sanitizeSceneName(show_name).replace('.', '+'), str(ep_obj.scene_absolute_number).zfill(2)]) - search_string.append(ep_string) - return search_string - - def _doSearch(self, search_string, epcount=0, age=0): - if self.show and not self.show.is_anime: - logger.log(u"" + str(self.show.name) + " is not an anime skiping ...") - return [] - - params = { - "cat": "anime", - "q": search_string.encode('utf-8'), - "max": "100" - } - - search_url = self.url + "rss?" + urllib.urlencode(params) - - logger.log(u"Search url: " + search_url, logger.DEBUG) - - data = self.cache.getRSSFeed(search_url) - if not data: - return [] - - if 'entries' in data: - - items = data.entries - results = [] - - for curItem in items: - (title, url) = self._get_title_and_url(curItem) - - if title and url: - results.append(curItem) - else: - logger.log( - u"The data returned from the " + self.name + " is incomplete, this result is unusable", - logger.DEBUG) - - return results - - return [] - - def findPropers(self, date=None): - - results = [] - - for item in self._doSearch("v2 OR v3 OR v4 OR v5"): - - (title, url) = self._get_title_and_url(item) - - if item.has_key('published_parsed') and item['published_parsed']: - result_date = item.published_parsed - if result_date: - result_date = datetime.datetime(*result_date[0:6]) - else: - logger.log(u"Unable to figure out the date for entry " + title + ", skipping it") - continue - - if not date or result_date > date: - search_result = classes.Proper(title, url, result_date, self.show) - results.append(search_result) - - return results - - -class AnimezbCache(tvcache.TVCache): - - def __init__(self, provider): - - tvcache.TVCache.__init__(self, provider) - - # only poll Animezb every 20 minutes max - self.minTime = 20 - - def _getRSSData(self): - - params = { - "cat": "anime".encode('utf-8'), - "max": "100".encode('utf-8') - } - - rss_url = self.provider.url + 'rss?' + urllib.urlencode(params) - - logger.log(self.provider.name + u" cache update URL: " + rss_url, logger.DEBUG) - - data = self.getRSSFeed(rss_url) - - if data and 'entries' in data: - return data.entries - else: - return [] - - -provider = Animezb() From 8780d6a60190c744ba28a271bf5ea5b4e092b3c1 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Nov 2014 17:32:57 +0800 Subject: [PATCH 15/43] Add option to treat anime releases that lack a quality tag as HDTV instead of "unknown". --- CHANGES.md | 16 +++-- .../interfaces/default/config_anime.tmpl | 61 +++++++++++-------- sickbeard/__init__.py | 5 +- sickbeard/common.py | 7 +++ sickbeard/webserve.py | 3 +- 5 files changed, 59 insertions(+), 33 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 68bfe3c2..ad7e3bf0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,20 +1,24 @@ ### 0.x.x (2014-11-xx xx:xx:xx UTC) * Change footer stats to not add newlines when copy/pasting from them -* Remove redundant references from Config / Help & Info +* Remove redundant references from Config/Help & Info * Fix poster preview on small poster layout -* Change overhaul Config Anime to be in line with General Configuration +* Change overhaul Config/Anime to be in line with General Configuration * Remove output of source code line when warnings highlight libraries not used with IMDb * Add dropdown on Add Trending Shows to display all shows, shows not in library, or shows in library * Change Help and Info icon sprites to color and text of Arguments if unused * Change sharper looking heart image on the Add Show page -* Change Add Show on Add Trending Show Page to use the full Add New Show flow +* Change Add Show on Add Trending Show page to use the full Add New Show flow * Fix adding shows with titles that contain "&" on Add Trending Show page -* Fix unset vars on Add New Shows Page used in the Add Existing Shows context +* Fix unset vars on Add New Shows page used in the Add Existing Shows context * Remove unneeded datetime convert from Coming Episodes page * Fix the log output of the limited backlog search for episodes missed -* Remove unsupported t411 provider -* Remove obsolete Animezb provider +* Remove unsupported t411 search provider +* Remove obsolete Animezb search provider +* Add option to treat anime releases that lack a quality tag as HDTV instead of "unknown" + +[develop changelog] +* Change descriptions and layout on Config/Anime page ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/interfaces/default/config_anime.tmpl b/gui/slick/interfaces/default/config_anime.tmpl index bb8b600d..d3d8a437 100644 --- a/gui/slick/interfaces/default/config_anime.tmpl +++ b/gui/slick/interfaces/default/config_anime.tmpl @@ -2,7 +2,7 @@ #from sickbeard.helpers import anon_url #set global $title = 'Config - Anime' -#set global $header = 'Anime Configuration' +#set global $header = 'Anime' #set global $sbPath = '../..' @@ -25,16 +25,48 @@
+
+ +
+

Misc

+

User interface and general configuration.

+
+ +
+
+ +
+ +
+ +
+ + +
+
+
AniDB

AniDB

-

Keep track of your anime downloads with AniDB

+

Manage anime releases with AniDB.

@@ -43,7 +75,7 @@ Enable -

use data from AniDB

+

fetch data for scene exceptions (alternative release names) and available 'release groups' per show

@@ -82,27 +114,6 @@
-
- -
-

User Interface

-

Change how anime appears on the home page.

-
- -
-
- -
- - -
-


diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 94e62a66..75170f5c 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -346,6 +346,7 @@ ANIDB_PASSWORD = None ANIDB_USE_MYLIST = False ADBA_CONNECTION = None ANIME_SPLIT_HOME = False +ANIME_TREAT_AS_HDTV = False USE_SYNOINDEX = False @@ -504,7 +505,7 @@ def initialize(consoleLogging=True): USE_FAILED_DOWNLOADS, DELETE_FAILED, ANON_REDIRECT, LOCALHOST_IP, TMDB_API_KEY, DEBUG, PROXY_SETTING, PROXY_INDEXERS, \ AUTOPOSTPROCESSER_FREQUENCY, DEFAULT_AUTOPOSTPROCESSER_FREQUENCY, MIN_AUTOPOSTPROCESSER_FREQUENCY, \ ANIME_DEFAULT, NAMING_ANIME, ANIMESUPPORT, USE_ANIDB, ANIDB_USERNAME, ANIDB_PASSWORD, ANIDB_USE_MYLIST, \ - ANIME_SPLIT_HOME, SCENE_DEFAULT, BACKLOG_DAYS + ANIME_SPLIT_HOME, SCENE_DEFAULT, BACKLOG_DAYS, ANIME_TREAT_AS_HDTV if __INITIALIZED__: return False @@ -928,6 +929,7 @@ def initialize(consoleLogging=True): ANIDB_USE_MYLIST = bool(check_setting_int(CFG, 'ANIDB', 'anidb_use_mylist', 0)) ANIME_SPLIT_HOME = bool(check_setting_int(CFG, 'ANIME', 'anime_split_home', 0)) + ANIME_TREAT_AS_HDTV = bool(check_setting_int(CFG, 'ANIME', 'anime_treat_as_hdtv', 0)) METADATA_XBMC = check_setting_str(CFG, 'General', 'metadata_xbmc', '0|0|0|0|0|0|0|0|0|0') METADATA_XBMC_12PLUS = check_setting_str(CFG, 'General', 'metadata_xbmc_12plus', '0|0|0|0|0|0|0|0|0|0') @@ -1794,6 +1796,7 @@ def save_config(): new_config['ANIME'] = {} new_config['ANIME']['anime_split_home'] = int(ANIME_SPLIT_HOME) + new_config['ANIME']['anime_treat_as_hdtv'] = int(ANIME_TREAT_AS_HDTV) new_config.write() diff --git a/sickbeard/common.py b/sickbeard/common.py index 56d8c1c9..d51866cb 100644 --- a/sickbeard/common.py +++ b/sickbeard/common.py @@ -22,6 +22,9 @@ import platform import re import uuid +import logger +import sickbeard + INSTANCE_ID = str(uuid.uuid1()) USER_AGENT = ('SickGear/(' + platform.system() + '; ' + platform.release() + '; ' + INSTANCE_ID + ')') @@ -202,6 +205,10 @@ class Quality: return Quality.HDBLURAY elif blueRayOptions and fullHD and not hdOptions: return Quality.FULLHDBLURAY + elif sickbeard.ANIME_TREAT_AS_HDTV: + logger.log(u'Treating file: ' + name + ' with "unknown" quality as HDTV per user settings', + logger.DEBUG) + return Quality.HDTV else: return Quality.UNKNOWN diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 426ceee3..6dce5737 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -2642,7 +2642,7 @@ class ConfigAnime(MainHandler): def saveAnime(self, use_anidb=None, anidb_username=None, anidb_password=None, anidb_use_mylist=None, - split_home=None): + split_home=None, anime_treat_as_hdtv=None): results = [] @@ -2651,6 +2651,7 @@ class ConfigAnime(MainHandler): sickbeard.ANIDB_PASSWORD = anidb_password sickbeard.ANIDB_USE_MYLIST = config.checkbox_to_value(anidb_use_mylist) sickbeard.ANIME_SPLIT_HOME = config.checkbox_to_value(split_home) + sickbeard.ANIME_TREAT_AS_HDTV = config.checkbox_to_value(anime_treat_as_hdtv) sickbeard.save_config() From d59940686145f8a84b8bb3f982f6befb772862cd Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 16 Nov 2014 22:06:26 +0800 Subject: [PATCH 16/43] Remove old version checking code that no longer applies to SickGear's release system --- CHANGES.md | 1 + googlecode_upload.py | 250 ------------------------------------ sickbeard/versionChecker.py | 162 +---------------------- 3 files changed, 3 insertions(+), 410 deletions(-) delete mode 100644 googlecode_upload.py diff --git a/CHANGES.md b/CHANGES.md index ad7e3bf0..416db44c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ * Remove unsupported t411 search provider * Remove obsolete Animezb search provider * Add option to treat anime releases that lack a quality tag as HDTV instead of "unknown" +* Remove old version checking code that no longer applies to SickGear's release system [develop changelog] * Change descriptions and layout on Config/Anime page diff --git a/googlecode_upload.py b/googlecode_upload.py deleted file mode 100644 index 1b934925..00000000 --- a/googlecode_upload.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env python2 -# -# Copyright 2006, 2007 Google Inc. All Rights Reserved. -# Author: danderson@google.com (David Anderson) -# -# Script for uploading files to a Google Code project. -# -# This is intended to be both a useful script for people who want to -# streamline project uploads and a reference implementation for -# uploading files to Google Code projects. -# -# To upload a file to Google Code, you need to provide a path to the -# file on your local machine, a small summary of what the file is, a -# project name, and a valid account that is a member or owner of that -# project. You can optionally provide a list of labels that apply to -# the file. The file will be uploaded under the same name that it has -# in your local filesystem (that is, the "basename" or last path -# component). Run the script with '--help' to get the exact syntax -# and available options. -# -# Note that the upload script requests that you enter your -# googlecode.com password. This is NOT your Gmail account password! -# This is the password you use on googlecode.com for committing to -# Subversion and uploading files. You can find your password by going -# to http://code.google.com/hosting/settings when logged in with your -# Gmail account. If you have already committed to your project's -# Subversion repository, the script will automatically retrieve your -# credentials from there (unless disabled, see the output of '--help' -# for details). -# -# If you are looking at this script as a reference for implementing -# your own Google Code file uploader, then you should take a look at -# the upload() function, which is the meat of the uploader. You -# basically need to build a multipart/form-data POST request with the -# right fields and send it to https://PROJECT.googlecode.com/files . -# Authenticate the request using HTTP Basic authentication, as is -# shown below. -# -# Licensed under the terms of the Apache Software License 2.0: -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Questions, comments, feature requests and patches are most welcome. -# Please direct all of these to the Google Code users group: -# http://groups.google.com/group/google-code-hosting - -"""Google Code file uploader script. -""" - -__author__ = 'danderson@google.com (David Anderson)' - -import httplib -import os.path -import optparse -import getpass -import base64 -import sys - - -def upload(file, project_name, user_name, password, summary, labels=None): - """Upload a file to a Google Code project's file server. - - Args: - file: The local path to the file. - project_name: The name of your project on Google Code. - user_name: Your Google account name. - password: The googlecode.com password for your account. - Note that this is NOT your global Google Account password! - summary: A small description for the file. - labels: an optional list of label strings with which to tag the file. - - Returns: a tuple: - http_status: 201 if the upload succeeded, something else if an - error occured. - http_reason: The human-readable string associated with http_status - file_url: If the upload succeeded, the URL of the file on Google - Code, None otherwise. - """ - # The login is the user part of user@gmail.com. If the login provided - # is in the full user@domain form, strip it down. - if user_name.endswith('@gmail.com'): - user_name = user_name[:user_name.index('@gmail.com')] - - form_fields = [('summary', summary)] - if labels is not None: - form_fields.extend([('label', l.strip()) for l in labels]) - - content_type, body = encode_upload_request(form_fields, file) - - upload_host = '%s.googlecode.com' % project_name - upload_uri = '/files' - auth_token = base64.b64encode('%s:%s'% (user_name, password)) - headers = { - 'Authorization': 'Basic %s' % auth_token, - 'User-Agent': 'Googlecode.com uploader v0.9.4', - 'Content-Type': content_type, - } - - server = httplib.HTTPSConnection(upload_host) - server.request('POST', upload_uri, body, headers) - resp = server.getresponse() - server.close() - - if resp.status == 201: - location = resp.getheader('Location', None) - else: - location = None - return resp.status, resp.reason, location - - -def encode_upload_request(fields, file_path): - """Encode the given fields and file into a multipart form body. - - fields is a sequence of (name, value) pairs. file is the path of - the file to upload. The file will be uploaded to Google Code with - the same file name. - - Returns: (content_type, body) ready for httplib.HTTP instance - """ - BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla' - CRLF = '\r\n' - - body = [] - - # Add the metadata about the upload first - for key, value in fields: - body.extend( - ['--' + BOUNDARY, - 'Content-Disposition: form-data; name="%s"' % key, - '', - value, - ]) - - # Now add the file itself - file_name = os.path.basename(file_path) - f = open(file_path, 'rb') - file_content = f.read() - f.close() - - body.extend( - ['--' + BOUNDARY, - 'Content-Disposition: form-data; name="filename"; filename="%s"' - % file_name, - # The upload server determines the mime-type, no need to set it. - 'Content-Type: application/octet-stream', - '', - file_content, - ]) - - # Finalize the form body - body.extend(['--' + BOUNDARY + '--', '']) - - return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body) - - -def upload_find_auth(file_path, project_name, summary, labels=None, - user_name=None, password=None, tries=3): - """Find credentials and upload a file to a Google Code project's file server. - - file_path, project_name, summary, and labels are passed as-is to upload. - - Args: - file_path: The local path to the file. - project_name: The name of your project on Google Code. - summary: A small description for the file. - labels: an optional list of label strings with which to tag the file. - config_dir: Path to Subversion configuration directory, 'none', or None. - user_name: Your Google account name. - tries: How many attempts to make. - """ - - while tries > 0: - if user_name is None: - # Read username if not specified or loaded from svn config, or on - # subsequent tries. - sys.stdout.write('Please enter your googlecode.com username: ') - sys.stdout.flush() - user_name = sys.stdin.readline().rstrip() - if password is None: - # Read password if not loaded from svn config, or on subsequent tries. - print 'Please enter your googlecode.com password.' - print '** Note that this is NOT your Gmail account password! **' - print 'It is the password you use to access Subversion repositories,' - print 'and can be found here: http://code.google.com/hosting/settings' - password = getpass.getpass() - - status, reason, url = upload(file_path, project_name, user_name, password, - summary, labels) - # Returns 403 Forbidden instead of 401 Unauthorized for bad - # credentials as of 2007-07-17. - if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]: - # Rest for another try. - user_name = password = None - tries = tries - 1 - else: - # We're done. - break - - return status, reason, url - - -def main(): - parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY ' - '-p PROJECT [options] FILE') - parser.add_option('-s', '--summary', dest='summary', - help='Short description of the file') - parser.add_option('-p', '--project', dest='project', - help='Google Code project name') - parser.add_option('-u', '--user', dest='user', - help='Your Google Code username') - parser.add_option('-w', '--password', dest='password', - help='Your Google Code password') - parser.add_option('-l', '--labels', dest='labels', - help='An optional list of comma-separated labels to attach ' - 'to the file') - - options, args = parser.parse_args() - - if not options.summary: - parser.error('File summary is missing.') - elif not options.project: - parser.error('Project name is missing.') - elif len(args) < 1: - parser.error('File to upload not provided.') - elif len(args) > 1: - parser.error('Only one file may be specified.') - - file_path = args[0] - - if options.labels: - labels = options.labels.split(',') - else: - labels = None - -def upload_file(file, project, summary, labels, username, password): - - status, reason, url = upload_find_auth(file, project, - summary, labels, - username, password) - if url: - print 'The file was uploaded successfully.' - print 'URL: %s' % url - return 0 - else: - print 'An error occurred. Your file was not uploaded.' - print 'Google Code upload server said: %s (%s)' % (reason, status) - return 1 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py index dfab40b2..4c6d5a32 100644 --- a/sickbeard/versionChecker.py +++ b/sickbeard/versionChecker.py @@ -44,9 +44,7 @@ class CheckVersion(): def __init__(self): self.install_type = self.find_install_type() - if self.install_type == 'win': - self.updater = WindowsUpdateManager() - elif self.install_type == 'git': + if self.install_type == 'git': self.updater = GitUpdateManager() elif self.install_type == 'source': self.updater = SourceUpdateManager() @@ -71,15 +69,11 @@ class CheckVersion(): Determines how this copy of sr was installed. returns: type of installation. Possible values are: - 'win': any compiled windows build 'git': running from source using git 'source': running from source without git """ - # check if we're a windows build - if sickbeard.BRANCH.startswith('build '): - install_type = 'win' - elif os.path.isdir(ek.ek(os.path.join, sickbeard.PROG_DIR, u'.git')): + if os.path.isdir(ek.ek(os.path.join, sickbeard.PROG_DIR, u'.git')): install_type = 'git' else: install_type = 'source' @@ -139,158 +133,6 @@ class UpdateManager(): return sickbeard.WEB_ROOT + "/home/update/?pid=" + str(sickbeard.PID) -class WindowsUpdateManager(UpdateManager): - def __init__(self): - self.github_repo_user = self.get_github_repo_user() - self.github_repo = self.get_github_repo() - - self.branch = sickbeard.BRANCH - if sickbeard.BRANCH == '': - self.branch = self._find_installed_branch() - - self._cur_version = None - self._cur_commit_hash = None - self._newest_version = None - - self.gc_url = 'http://code.google.com/p/sickbeard/downloads/list' - self.version_url = 'https://raw.github.com/' + self.github_repo_user + '/' + self.github_repo + '/' + self.branch + '/updates.txt' - - def _find_installed_version(self): - version = '' - - try: - version = sickbeard.BRANCH - return int(version[6:]) - except ValueError: - logger.log(u"Unknown SickGear Windows binary release: " + version, logger.ERROR) - return None - - def _find_installed_branch(self): - return 'windows_binaries' - - def _find_newest_version(self, whole_link=False): - """ - Checks git for the newest Windows binary build. Returns either the - build number or the entire build URL depending on whole_link's value. - - whole_link: If True, returns the entire URL to the release. If False, it returns - only the build number. default: False - """ - - regex = ".*SickGear\-win32\-alpha\-build(\d+)(?:\.\d+)?\.zip" - - version_url_data = helpers.getURL(self.version_url) - if not version_url_data: - return - - for curLine in version_url_data.splitlines(): - logger.log(u"checking line " + curLine, logger.DEBUG) - match = re.match(regex, curLine) - if match: - logger.log(u"found a match", logger.DEBUG) - if whole_link: - return curLine.strip() - else: - return int(match.group(1)) - - def need_update(self): - if self.branch != self._find_installed_branch(): - logger.log(u"Branch checkout: " + self._find_installed_branch() + "->" + self.branch, logger.DEBUG) - return True - - self._cur_version = self._find_installed_version() - self._newest_version = self._find_newest_version() - - logger.log(u"newest version: " + repr(self._newest_version), logger.DEBUG) - if self._newest_version and self._newest_version > self._cur_version: - return True - - return False - - def set_newest_text(self): - - sickbeard.NEWEST_VERSION_STRING = None - - if not self._cur_version: - newest_text = "Unknown SickGear Windows binary version. Not updating with original version." - else: - newest_text = 'There is a newer version available (build ' + str( - self._newest_version) + ')' - newest_text += "— Update Now" - - sickbeard.NEWEST_VERSION_STRING = newest_text - - def update(self): - - zip_download_url = self._find_newest_version(True) - logger.log(u"new_link: " + repr(zip_download_url), logger.DEBUG) - - if not zip_download_url: - logger.log(u"Unable to find a new version link on google code, not updating") - return False - - try: - # prepare the update dir - sr_update_dir = ek.ek(os.path.join, sickbeard.PROG_DIR, u'sr-update') - - if os.path.isdir(sr_update_dir): - logger.log(u"Clearing out update folder " + sr_update_dir + " before extracting") - shutil.rmtree(sr_update_dir) - - logger.log(u"Creating update folder " + sr_update_dir + " before extracting") - os.makedirs(sr_update_dir) - - # retrieve file - logger.log(u"Downloading update from " + zip_download_url) - zip_download_path = os.path.join(sr_update_dir, u'sr-update.zip') - urllib.urlretrieve(zip_download_url, zip_download_path) - - if not ek.ek(os.path.isfile, zip_download_path): - logger.log(u"Unable to retrieve new version from " + zip_download_url + ", can't update", logger.ERROR) - return False - - if not ek.ek(zipfile.is_zipfile, zip_download_path): - logger.log(u"Retrieved version from " + zip_download_url + " is corrupt, can't update", logger.ERROR) - return False - - # extract to sr-update dir - logger.log(u"Unzipping from " + str(zip_download_path) + " to " + sr_update_dir) - update_zip = zipfile.ZipFile(zip_download_path, 'r') - update_zip.extractall(sr_update_dir) - update_zip.close() - - # delete the zip - logger.log(u"Deleting zip file from " + str(zip_download_path)) - os.remove(zip_download_path) - - # find update dir name - update_dir_contents = [x for x in os.listdir(sr_update_dir) if - os.path.isdir(os.path.join(sr_update_dir, x))] - - if len(update_dir_contents) != 1: - logger.log(u"Invalid update data, update failed. Maybe try deleting your sr-update folder?", - logger.ERROR) - return False - - content_dir = os.path.join(sr_update_dir, update_dir_contents[0]) - old_update_path = os.path.join(content_dir, u'updater.exe') - new_update_path = os.path.join(sickbeard.PROG_DIR, u'updater.exe') - logger.log(u"Copying new update.exe file from " + old_update_path + " to " + new_update_path) - shutil.move(old_update_path, new_update_path) - - # Notify update successful - notifiers.notify_git_update(sickbeard.NEWEST_VERSION_STRING) - - except Exception, e: - logger.log(u"Error while trying to update: " + ex(e), logger.ERROR) - return False - - return True - - def list_remote_branches(self): - return ['windows_binaries'] - - class GitUpdateManager(UpdateManager): def __init__(self): self._git_path = self._find_working_git() From b52b8556eeb08e471415479046b0ead7a0bd43a3 Mon Sep 17 00:00:00 2001 From: Supremicus Date: Tue, 18 Nov 2014 23:34:36 +1000 Subject: [PATCH 17/43] Fix pnotify notifications going full page --- CHANGES.md | 1 + gui/slick/interfaces/default/inc_top.tmpl | 11 ----------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 416db44c..91df129a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ * Remove obsolete Animezb search provider * Add option to treat anime releases that lack a quality tag as HDTV instead of "unknown" * Remove old version checking code that no longer applies to SickGear's release system +* Fix pnotify notifications going full page [develop changelog] * Change descriptions and layout on Config/Anime page diff --git a/gui/slick/interfaces/default/inc_top.tmpl b/gui/slick/interfaces/default/inc_top.tmpl index 86bdccd3..2aa8550b 100644 --- a/gui/slick/interfaces/default/inc_top.tmpl +++ b/gui/slick/interfaces/default/inc_top.tmpl @@ -42,17 +42,6 @@ - - - From be9277679287934751ad13567dbdf1906514512e Mon Sep 17 00:00:00 2001 From: Supremicus Date: Mon, 17 Nov 2014 10:17:37 +1000 Subject: [PATCH 18/43] Overhaul Config Post Processing. Change overhaul Config Post Processing to be in line with General Configuration. Change rearrange post processing items into sections for easier use. Fix CSS overriding link colors on config pages. --- CHANGES.md | 3 + gui/slick/css/dark.css | 1 - gui/slick/css/light.css | 10 +- gui/slick/css/style.css | 3 + .../default/config_postProcessing.tmpl | 1967 +++++++++-------- 5 files changed, 1005 insertions(+), 979 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2cadd78e..b09fe48c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,9 @@ * Add option to treat anime releases that lack a quality tag as HDTV instead of "unknown" * Remove old version checking code that no longer applies to SickGear's release system * Fix pnotify notifications going full page +* Change overhaul Config Post Processing to be in line with General Configuration +* Change rearrange post processing items into sections for easier use +* Fix CSS overriding link colors on config pages [develop changelog] * Change descriptions and layout on Config/Anime page diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css index 5b3636fc..87dc9c4f 100644 --- a/gui/slick/css/dark.css +++ b/gui/slick/css/dark.css @@ -211,7 +211,6 @@ inc_top.tmpl .ui-widget-content a:hover { color: #09A2FF; - text-decoration: none; } .ui-widget-header { diff --git a/gui/slick/css/light.css b/gui/slick/css/light.css index e09067f5..eeb03dfb 100644 --- a/gui/slick/css/light.css +++ b/gui/slick/css/light.css @@ -199,7 +199,15 @@ inc_top.tmpl background: #dcdcdc url("../css/lib/images/ui-bg_highlight-soft_75_dcdcdc_1x100.png") 50% top repeat-x; } -.ui-widget-header { +.ui-widget-content a { + color: rgb(42, 100, 150); +} + +.ui-widget-content a:hover { + color: #09A2FF; +} + +.ui-widget-header { background: #ffffff url("../css/lib/images/ui-bg_flat_0_ffffff_40x100.png") 50% 50% repeat-x; } diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css index 5f902144..81ba3f02 100644 --- a/gui/slick/css/style.css +++ b/gui/slick/css/style.css @@ -3006,6 +3006,9 @@ span.token-input-delete-token { margin: 0 1px; } +.ui-widget-content a { + text-decoration: none; +} .red-text {color:#d33} .clear-left {clear:left} .nextline-block {display:block} diff --git a/gui/slick/interfaces/default/config_postProcessing.tmpl b/gui/slick/interfaces/default/config_postProcessing.tmpl index c9199aa4..3743ae1c 100644 --- a/gui/slick/interfaces/default/config_postProcessing.tmpl +++ b/gui/slick/interfaces/default/config_postProcessing.tmpl @@ -1,1044 +1,1057 @@ #import os.path #import sickbeard #from sickbeard.common import * +#from sickbeard.helpers import anon_url #from sickbeard import config #from sickbeard import metadata #from sickbeard.metadata.generic import GenericMetadata #from sickbeard import naming -#set global $title = "Config - Post Processing" -#set global $header = "Post Processing" +#set global $title = 'Config - Post Processing' +#set global $header = 'Post Processing' -#set global $sbPath="../.." +#set global $sbPath = '../..' -#set global $topmenu="config"# -#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_top.tmpl") +#set global $topmenu = 'config' +#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl') -
+ #if $varExists('header')

$header

#else

$title

#end if +
-
+
-
+ -
- - -
+
+ -
-

Post-Processing

-

Settings that dictate how SickGear should process completed downloads.

-
+
+
-
-
- - - - -
- -
- - -
-
- - - -
+
+

Post-Processing

+

Settings that dictate how SickGear should process completed downloads.

+
+ +
- - - +
-
- - -
- -
- - -
+
+ +
-
- - -
+
+ +
-
- - -
+
+ +
-
- - - -
+
+ +
-
- - - - -
+
+ +
-
- - -
+
-
- - - -
- -
- - - -
- -
-
- - - -
+
+
-
+
-
+
+

File Handling

+

Optional settings for the way post-processing handles files

+
- -
+
-
+
+ +
-
-

Episode Naming

-

How SickGear will name and sort your episodes.

-
+
+ +
-
+
+ +
-
- -
+
+ +
-
-
- -
+
+ +
-
$day.strftime('%A').decode($sickbeard.SYS_ENCODING).capitalize()
$sbdatetime.sbdatetime.sbfdate($day, '%A').decode($sickbeard.SYS_ENCODING).capitalize()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MeaningPatternResult
Use lower case if you want lower case names (eg. %sn, %e.n, %q_n etc)
Show Name:%SNShow Name
 %S.NShow.Name
 %S_NShow_Name
Season Number:%S2
 %0S02
XEM Season Number:%XMS2
 %0XMS02
Episode Number:%E3
 %0E03
XEM Episode Number:%XME3
 %0XME03
Episode Name:%ENEpisode Name
 %E.NEpisode.Name
 %E_NEpisode_Name
Quality:%QN720p BluRay
 %Q.N720p.BluRay
 %Q_N720p_BluRay
Release Name:%RNShow.Name.S02E03.HDTV.XviD-RLSGROUP
Release Group:%RGRLSGROUP
Release Type:%RTPROPER
-
-
-
- -
- -
+
+ +
-
-

Single-EP Sample:

-
-   -
-
-
+
-
-

Multi-EP sample:

-
-   -
-
-
+ + -
- - - -
+
-
- - -
+
+

Failed Downloads

+

SickGear will attempt to download another release if downloads are reported as failed

+
-
-
- -
+
-
-
- -
+
+ +
- -
- -
-

Sample:

-
-   -
-
-
+
+
+
+
-
+
-
- - -
+ +
-
-
- -
+
-
-
- -
+
- -
- -
-

Sample:

-
-   -
-
-
+
+

Episode Naming

+

How SickGear will name and sort your episodes.

+
-
+
- -
- - -
+
+ +
-
-
- -
+
+
+ +
-
-
- -
+ +
- -
+
+ +
-
- -
+
+

Single-Episode sample:

+
+   +
+
+
-
-

Single-EP Anime Sample:

-
-   -
-
-
+
+

Multi-Episode sample:

+
+   +
+
+
-
-

Multi-EP Anime sample:

-
-   -
-
-
+
+ +
-
- - - -
+
+ +
-
- - - -
+
+
+ +
-
- - - -
+
+
+ +
-
+ +
-
-
+
+

Air-By-Date sample:

+
+   +
+
+
-
- + + +
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+ +
+

Sports sample:

+
+   +
+
+
+ +
+ + +
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+ +
+ +
+ +
+

Single-Episode Anime sample:

+
+   +
+
+
+ +
+

Multi-Episode Anime sample:

+
+   +
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + +
-
-

Metadata

-

The data associated to the data. These are files associated to a TV show in the form of images and text that, when supported, will enhance the viewing experience.

-
+
+

Metadata

+

The data associated to the data. These are files associated to a TV show in the form of images and text that, when supported, will enhance the viewing experience.

+
-
-
- - Toggle the metadata options that you wish to be created. Multiple targets may be used. -
+
+
+ + Toggle the metadata options that you wish to be created. Multiple targets may be used. +
#for ($cur_name, $cur_generator) in $m_dict.items(): #set $cur_metadata_inst = $sickbeard.metadata_provider_dict[$cur_generator.name] @@ -1079,11 +1092,11 @@ #end for

- +
-
-
- + + +
All non-absolute folder locations are relative to $sickbeard.DATA_DIR
@@ -1096,8 +1109,8 @@ -#include $os.path.join($sickbeard.PROG_DIR,"gui/slick/interfaces/default/inc_bottom.tmpl") +#include $os.path.join($sickbeard.PROG_DIR,'gui/slick/interfaces/default/inc_bottom.tmpl') From 9d37bd538fb396f4747692bb12bdd5bc5075228b Mon Sep 17 00:00:00 2001 From: JackDandy Date: Wed, 19 Nov 2014 17:20:03 +0000 Subject: [PATCH 19/43] Change more overhaul to Config Post Processing. Change texts and descriptions throughout. Fix info icons in "Naming Legends". Change naming sample lines to be more available. Add failed downloads Sabnzbd setup guide. Fix "Anime name pattern" custom javascript validation. --- CHANGES.md | 9 +- gui/slick/css/dark.css | 842 ++++++----- gui/slick/css/light.css | 832 ++++++----- gui/slick/css/style.css | 86 +- .../default/config_postProcessing.tmpl | 1288 +++++++++-------- gui/slick/js/configPostProcessing.js | 18 +- 6 files changed, 1595 insertions(+), 1480 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b09fe48c..fd9cdcbf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ * Remove redundant references from Config/Help & Info * Fix poster preview on small poster layout * Change overhaul Config/Anime to be in line with General Configuration +* Change descriptions and layout on Config/Anime page * Remove output of source code line when warnings highlight libraries not used with IMDb * Add dropdown on Add Trending Shows to display all shows, shows not in library, or shows in library * Change Help and Info icon sprites to color and text of Arguments if unused @@ -19,11 +20,15 @@ * Remove old version checking code that no longer applies to SickGear's release system * Fix pnotify notifications going full page * Change overhaul Config Post Processing to be in line with General Configuration -* Change rearrange post processing items into sections for easier use +* Change rearrange Config Post Processing items into sections for easier use * Fix CSS overriding link colors on config pages +* Change Config Post Processing texts and descriptions throughout +* Fix Config Post Processing info icons in "Naming Legends" +* Change Config Post Processing naming sample lines to be more available +* Add Config Post Processing failed downloads Sabnzbd setup guide +* Fix Config Post Processing "Anime name pattern" custom javascript validation [develop changelog] -* Change descriptions and layout on Config/Anime page ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css index 87dc9c4f..d60712dd 100644 --- a/gui/slick/css/dark.css +++ b/gui/slick/css/dark.css @@ -4,139 +4,139 @@ fonts /* Open Sans */ /* Regular */ @font-face { - font-family: 'Open Sans'; - - src: url('fonts/OpenSans-Regular-webfont.eot'); - src: url('fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('fonts/OpenSans-Regular-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: normal; + font-family: 'Open Sans'; + + src: url('fonts/OpenSans-Regular-webfont.eot'); + src: url('fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Regular-webfont.woff') format('woff'), + url('fonts/OpenSans-Regular-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: normal; } /* Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Italic-webfont.eot'); - src: url('fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Italic-webfont.woff') format('woff'), - url('fonts/OpenSans-Italic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Italic-webfont.eot'); + src: url('fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Italic-webfont.woff') format('woff'), + url('fonts/OpenSans-Italic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: italic; } /* Light */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Light-webfont.eot'); - src: url('fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Light-webfont.woff') format('woff'), - url('fonts/OpenSans-Light-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); - font-weight: 200; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Light-webfont.eot'); + src: url('fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Light-webfont.woff') format('woff'), + url('fonts/OpenSans-Light-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); + font-weight: 200; + font-style: normal; } /* Light Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-LightItalic-webfont.eot'); - src: url('fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-LightItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); - font-weight: 200; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-LightItalic-webfont.eot'); + src: url('fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-LightItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); + font-weight: 200; + font-style: italic; } /* Semibold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Semibold-webfont.eot'); - src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), - url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); - font-weight: 600; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Semibold-webfont.eot'); + src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), + url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); + font-weight: 600; + font-style: normal; } /* Semibold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); - font-weight: 600; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); + font-weight: 600; + font-style: italic; } /* Bold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Semibold-webfont.eot'); - src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), - url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Semibold-webfont.eot'); + src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), + url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: normal; } /* Bold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: italic; } /* Extra Bold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Bold-webfont.eot'); - src: url('fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Bold-webfont.woff') format('woff'), - url('fonts/OpenSans-Bold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); - font-weight: 900; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Bold-webfont.eot'); + src: url('fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Bold-webfont.woff') format('woff'), + url('fonts/OpenSans-Bold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); + font-weight: 900; + font-style: normal; } /* Extra Bold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-BoldItalic-webfont.eot'); - src: url('fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); - font-weight: 900; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-BoldItalic-webfont.eot'); + src: url('fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); + font-weight: 900; + font-style: italic; } /* Droid Sans */ @font-face { - font-family: 'droid_sans_mono'; - src: url('fonts/droidsansmono-webfont.eot'); - src: url('fonts/droidsansmono-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/droidsansmono-webfont.woff') format('woff'), - url('fonts/droidsansmono-webfont.ttf') format('truetype'), - url('fonts/droidsansmono-webfont.svg#droid_sans_monoregular') format('svg'); - font-weight: normal; - font-style: normal; + font-family: 'droid_sans_mono'; + src: url('fonts/droidsansmono-webfont.eot'); + src: url('fonts/droidsansmono-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/droidsansmono-webfont.woff') format('woff'), + url('fonts/droidsansmono-webfont.ttf') format('truetype'), + url('fonts/droidsansmono-webfont.svg#droid_sans_monoregular') format('svg'); + font-weight: normal; + font-style: normal; } @@ -206,11 +206,11 @@ inc_top.tmpl } .ui-widget-content a { - color: #fff; + color: #2D8FBF; } .ui-widget-content a:hover { - color: #09A2FF; + color: #09A2FF; } .ui-widget-header { @@ -292,32 +292,32 @@ inc_top.tmpl } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #140F06; - text-decoration: none; + color: #140F06; + text-decoration: none; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { - color: #fff; - text-decoration: none; + color: #fff; + text-decoration: none; } .ui-dialog .ui-dialog-titlebar-close { - background: #333; + background: #333; } .ui-tabs { - padding: 0px; - background: none; - border-width: 0px; + padding: 0px; + background: none; + border-width: 0px; } .ui-tabs .ui-tabs-nav { - padding-left: 0px; - background: transparent; - border-width: 0px 0px 0px 0px; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; + padding-left: 0px; + background: transparent; + border-width: 0px 0px 0px 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; } .ui-tabs .ui-tabs-panel { @@ -326,8 +326,8 @@ inc_top.tmpl } .ui-tabs .ui-tabs-nav li.ui-tabs-active { - border-top-left-radius: 5px; - border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; } .ui-tabs-nav > :not(.ui-tabs-active){ @@ -337,12 +337,12 @@ inc_top.tmpl } #content { - width: 95%; - min-width: 875px; - padding: 15px; - margin-left: auto; - margin-right: auto; - clear: both; + width: 95%; + min-width: 875px; + padding: 15px; + margin-left: auto; + margin-right: auto; + clear: both; } #SubMenu { @@ -362,7 +362,7 @@ inc_top.tmpl } [class^="menu-icon-"], [class*=" menu-icon-"] { - background: url("../images/menu/menu-icons-white.png"); + background: url("../images/menu/menu-icons-white.png"); height: 16px; width: 16px; display: inline-block; @@ -464,7 +464,7 @@ inc_top.tmpl } [class^="submenu-icon-"], [class*=" submenu-icon-"] { - background: url("../images/menu/menu-icons-white.png"); + background: url("../images/menu/menu-icons-white.png"); height: 16px; width: 16px; } @@ -516,24 +516,24 @@ home.tmpl ========================================================================== */ .imgbanner .banner { - border: 1px solid #111; - overflow: hidden; - height: 66px; - overflow: hidden; - border-radius: 8px; - vertical-align: top; - width: 360px; + border: 1px solid #111; + overflow: hidden; + height: 66px; + overflow: hidden; + border-radius: 8px; + vertical-align: top; + width: 360px; display: block; margin-left: auto; margin-right: auto; } .imgsmallposter .small { - height: 66px; - overflow: hidden; - border-radius: 3px; - vertical-align: middle; - width: 45px; + height: 66px; + overflow: hidden; + border-radius: 3px; + vertical-align: middle; + width: 45px; border: 1px solid #111; margin-right: 5px; } @@ -548,7 +548,7 @@ home.tmpl } .ui-progressbar .ui-progressbar-value { - box-sizing: content-box !important; + box-sizing: content-box !important; } .progressbarText { @@ -609,7 +609,7 @@ home.tmpl } .show { - margin: 12px; + margin: 12px; width: 188px; height: 352px; background-color: #333; @@ -620,7 +620,7 @@ home.tmpl .show-image { overflow: hidden; height: 273px; - width: 186px; + width: 186px; border-top-left-radius: 5px; border-top-right-radius: 5px; } @@ -631,23 +631,23 @@ home.tmpl } .show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; } .show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; } .show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 0px; + border-top-right-radius: 0px; } .show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 0px; + border-top-left-radius: 0px; } .show .ui-widget-content { - border-top: 1px solid #111; + border-top: 1px solid #111; border-bottom: 1px solid #111; border-left: 0px; border-right: 0px; @@ -755,7 +755,7 @@ home.tmpl #sort-by { display: inline; list-style-type: none; - padding: 0; + padding: 0; margin-left: 5px; } @@ -770,13 +770,13 @@ home.tmpl } td.tvShow a { - color: #fff; - text-decoration: none; + color: #fff; + text-decoration: none; } td.tvShow a:hover { - cursor: pointer; - color: #09A2FF; + cursor: pointer; + color: #09A2FF; } /* ======================================================================= @@ -795,8 +795,8 @@ home_addShows.tmpl } div.button { - display: table-cell; - vertical-align: middle; + display: table-cell; + vertical-align: middle; padding-left: 10px; } @@ -843,8 +843,8 @@ div.buttontext p { home_newShow.tmpl ========================================================================== */ #addShowForm, #recommendedShowsForm { - margin-left: auto; - margin-right: auto; + margin-left: auto; + margin-right: auto; } #newShowPortal { @@ -863,7 +863,7 @@ home_newShow.tmpl } #searchResults input[type="radio"] { - vertical-align: -2px; + vertical-align: -2px; } /* ======================================================================= @@ -875,10 +875,10 @@ home_addExistingShow.tmpl } ul#rootDirStaticList { - width: 90%; - margin-right: auto; - margin-left: auto; - text-align: left; + width: 90%; + margin-right: auto; + margin-left: auto; + text-align: left; } ul#rootDirStaticList li { @@ -890,12 +890,12 @@ ul#rootDirStaticList li { } ul#rootDirStaticList li label { - margin-top: 5px; + margin-top: 5px; margin-bottom: 5px; } ul#rootDirStaticList li input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } /* ======================================================================= @@ -903,7 +903,7 @@ home_trendingShows.tmpl ========================================================================== */ .traktShowTitleIcons { - float: right; + float: right; padding-right: 4px; padding-bottom: 4px; } @@ -918,7 +918,7 @@ home_trendingShows.tmpl } .traktContainer p, .traktContainer i { - white-space: nowrap; + white-space: nowrap; font-size: 12px; overflow: hidden; /* text-shadow: 1px 1px 0px #000;*/ @@ -927,7 +927,7 @@ home_trendingShows.tmpl } .traktContainer { - margin: 12px; + margin: 12px; width: 188px; background-color: #333; border: 1px solid #111; @@ -937,7 +937,7 @@ home_trendingShows.tmpl .trakt-image { overflow: hidden; height: 273px; - width: 186px; + width: 186px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom: 1px solid #111; @@ -952,7 +952,7 @@ home_postprocess.tmpl width: 800px; padding-top: 10px; margin-right: auto; - margin-left: auto; + margin-left: auto; } @@ -961,19 +961,19 @@ displayShow.tmpl ========================================================================== */ #posterCol { - float: left; + float: left; margin-right: 10px; margin-bottom: 20px; } #showCol { - overflow: hidden; + overflow: hidden; margin-bottom: 20px; } .navShow { - display: inline; - cursor: pointer; + display: inline; + cursor: pointer; } #prevShow, @@ -984,12 +984,12 @@ displayShow.tmpl } h1.title { - padding-bottom: 12px; - margin-bottom: 15px; - line-height: 30px; - text-align: left; - text-rendering: optimizelegibility; - border-bottom: 1px solid #555; + padding-bottom: 12px; + margin-bottom: 15px; + line-height: 30px; + text-align: left; + text-rendering: optimizelegibility; + border-bottom: 1px solid #555; } .displayspecials { @@ -1015,40 +1015,40 @@ span.imdbstars { } span.imdbstars, span.imdbstars > * { - height: 12px; - background: url(../images/rating.png) 0 -12px repeat-x; - width: 120px; - display: inline-block; + height: 12px; + background: url(../images/rating.png) 0 -12px repeat-x; + width: 120px; + display: inline-block; vertical-align: top; } span.imdbstars > * { - background-position: 0 0; - max-width:120px; + background-position: 0 0; + max-width:120px; } ul.tags { - list-style-type: none; + list-style-type: none; position: relative; top: -5px; margin-left: -40px; } ul.tags li { - margin-right: 4px; + margin-right: 4px; margin-bottom: 5px; - padding: 3px 4px 3px 25px; + padding: 3px 4px 3px 25px; background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F; - border-radius: 3px; + border-radius: 3px; border: 1px solid #111; - color: #FFF; - font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; + color: #FFF; + font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; text-shadow: 0px 1px rgba(0, 0, 0, 0.8); - float: left; + float: left; } ul.tags li a{ - color: #FFF; + color: #FFF; } .tvshowImg { @@ -1086,12 +1086,12 @@ ul.tags li a{ } #checkboxControls label { - white-space: nowrap; - display: inline-block; + white-space: nowrap; + display: inline-block; } #checkboxControls input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } .unaired { @@ -1114,27 +1114,27 @@ ul.tags li a{ } span.unaired { - color: #584b20; + color: #584b20; border: 1px solid #584b20; } span.skipped { - color: #1d5068; + color: #1d5068; border: 1px solid #1d5068; } span.good { - color: #295730; + color: #295730; border: 1px solid #295730; } span.qual { - color: #765100; + color: #765100; border: 1px solid #765100; } span.wanted { - color: #890000; + color: #890000; border: 1px solid #890000; } span.snatched { - color: #652164; + color: #652164; border: 1px solid #652164; } @@ -1144,22 +1144,22 @@ span.good b, span.qual b, span.wanted b, span.snatched b { - color: #000000; + color: #000000; font-weight: 800; } .plotInfo { - cursor: help; - float: right; - position: relative; - top: 2px; + cursor: help; + float: right; + position: relative; + top: 2px; } .plotInfoNone { - cursor: help; - float: right; - position: relative; - top: 2px; + cursor: help; + float: right; + position: relative; + top: 2px; opacity: 0.4; } @@ -1212,7 +1212,7 @@ td.col-checkbox { th.col-checkbox input[type="checkbox"], td.col-checkbox input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } th.col-metadata, @@ -1270,16 +1270,16 @@ td.col-search { } .input-scene { - height: 20px; - line-height: 1.5; - border-radius: 3px; + height: 20px; + line-height: 1.5; + border-radius: 3px; } #editShow { - width: 700px; - padding-top: 10px; - margin-right: auto; - margin-left: auto; + width: 700px; + padding-top: 10px; + margin-right: auto; + margin-left: auto; } /* ======================================================================= @@ -1292,10 +1292,10 @@ comingEpisodes.tmpl .listing-key { - padding: 5px; - font-size: 13px; - font-weight: bold; - border-radius: 5px; + padding: 5px; + font-size: 13px; + font-weight: bold; + border-radius: 5px; } .listing-default { @@ -1315,22 +1315,22 @@ comingEpisodes.tmpl } span.listing-default { - color: #826f30; + color: #826f30; border: 1px solid #826f30; } span.listing-current { - color: #295730; + color: #295730; border: 1px solid #295730; } span.listing-overdue { - color: #890000; + color: #890000; border: 1px solid #890000; } span.listing-toofar { - color: #1d5068; + color: #1d5068; border: 1px solid #1d5068; } @@ -1347,13 +1347,13 @@ h2.day, h2.network { } .tvshowDiv { - display: block; - clear: both; - border: 1px solid #ccc; - margin: auto; - padding: 0px; - text-align: left; - width: 750px; + display: block; + clear: both; + border: 1px solid #ccc; + margin: auto; + padding: 0px; + text-align: left; + width: 750px; border-radius: 5px; background: #fff; cursor: default; @@ -1362,7 +1362,7 @@ h2.day, h2.network { } .tvshowDiv a:hover { - color: #09A2FF; + color: #09A2FF; } .tvshowDiv a, .tvshowDiv a:link, .tvshowDiv a:visited, .tvshowDiv a:hover { @@ -1371,54 +1371,54 @@ h2.day, h2.network { } .tvshowTitle a { - color: #000000; - float: left; - line-height: 1.4em; - font-size: 1.4em; - text-shadow: -1px -1px 0 #FFF); + color: #000000; + float: left; + line-height: 1.4em; + font-size: 1.4em; + text-shadow: -1px -1px 0 #FFF); } .tvshowTitleIcons { - float: right; - padding: 3px 5px; + float: right; + padding: 3px 5px; } .tvshowDiv td { - padding: 5px 10px; + padding: 5px 10px; } .tvshowDiv td.next_episode { - width: 100%; - height: 90%; - border-bottom: 1px solid #ccc; - vertical-align: top; - color: #000; + width: 100%; + height: 90%; + border-bottom: 1px solid #ccc; + vertical-align: top; + color: #000; } .bannerThumb { - vertical-align: top; - height: auto; - width: 748px; + vertical-align: top; + height: auto; + width: 748px; border-bottom: 1px solid #ccc; } .posterThumb { - vertical-align: top; - height: auto; - width: 180px; + vertical-align: top; + height: auto; + width: 180px; border-right: 1px solid #ccc; } .ep_listing { - width: auto; - border: 1px solid #ccc; - margin-bottom: 10px; - padding: 10px; + width: auto; + border: 1px solid #ccc; + margin-bottom: 10px; + padding: 10px; } .ep_summary { - margin-left: 5px; - font-style: italic; + margin-left: 5px; + font-style: italic; } .ep_summaryTrigger { @@ -1436,21 +1436,21 @@ h2.day, h2.network { } #showListTable td.tvShow a:hover { - cursor: pointer; - color: #09A2FF; + cursor: pointer; + color: #09A2FF; } table.cal-odd { - background-color: #333; + background-color: #333; } table.cal-even { - background-color: #3d3d3d; + background-color: #3d3d3d; } .calendarShow .text .airtime { - color:#fff + color:#fff } .calendarShow .text .episode-title { - color:#aaa + color:#aaa } /* ======================================================================= @@ -1473,8 +1473,8 @@ config*.tmpl } .component-item { - border-bottom: 1px dotted #666; - min-height: 200px; + border-bottom: 1px dotted #666; + min-height: 200px; } .component-group-desc{ @@ -1524,16 +1524,16 @@ select .selected { } .testNotification { - padding: 5px; - margin-bottom: 10px; - line-height: 20px; - border: 1px dotted #CCC; + padding: 5px; + margin-bottom: 10px; + line-height: 20px; + border: 1px dotted #CCC; } #providerOrderList { - width: 250px; - padding-left: 20px; - list-style-type: none; + width: 250px; + padding-left: 20px; + list-style-type: none; } #provider_order_list, @@ -1558,14 +1558,14 @@ select .selected { } #config .tip_scale label span.component-title { - width: 85px !important; - font-size: 12px !important; - margin-top: 2px !important; + width: 85px !important; + font-size: 12px !important; + margin-top: 2px !important; } #config .tip_scale label span.component-desc { - margin-left: 120px !important; - width: 220px !important; + margin-left: 120px !important; + width: 220px !important; } .infoTableHeader, @@ -1607,10 +1607,14 @@ select .selected { config_postProcessing.tmpl ========================================================================== */ +#config .episode-sample { + background-color: rgb(34, 34, 34); + border-color: rgb(17, 17, 17); +} + #config div.example { - padding: 10px; background-color: #333333; - border: 1px solid #111; + border-color: #111; } .Key { @@ -1652,19 +1656,7 @@ config_postProcessing.tmpl config_notifications.tmpl ========================================================================== */ -div.metadata_options_wrapper { - float: left; - width: 190px; -} - -div.metadata_example_wrapper { - float: right; - width: 325px; -} - div.metadata_options { - padding: 7px; - overflow: auto; background: #333; color: #fff; border: 1px solid #111; @@ -1673,34 +1665,22 @@ div.metadata_options { div.metadata_options label:hover { color: #fff; background-color: #15528F; - cursor: pointer; } div.metadata_options label { - display: block; - padding-left: 7px; - line-height: 20px; color: #fff; } div.metadata_example { - padding: 8px; + border: 1px solid rgb(61, 61, 61); } div.metadata_example label { - display: block; - line-height: 21px; color: #fff; - cursor: pointer; } div.metadataDiv .disabled { - color: #ccc; -} - -.notifier-icon { - float: left; - margin: 6px 4px 0px 0px; + color: #888; } .warning { @@ -1859,23 +1839,23 @@ option.flag { } #Anime { - clear: both; - overflow-x: hidden; - overflow-y: hidden; - font-size: 14px; + clear: both; + overflow-x: hidden; + overflow-y: hidden; + font-size: 14px; } #Anime div.component-group-desc { - float: left; - width: 165px; + float: left; + width: 165px; } #Anime div.component-group-desc p { - margin-bottom: 0.4em; - margin-left: 0; - margin-right: 0; - margin-top: 0.4em; - width: 95%; + margin-bottom: 0.4em; + margin-left: 0; + margin-right: 0; + margin-top: 0.4em; + width: 95%; } div.blackwhitelist{ @@ -1884,15 +1864,15 @@ div.blackwhitelist{ } div.blackwhitelist input { - margin: 5px 5px; + margin: 5px 5px; } div.blackwhitelist.pool select{ - width: 300px; + width: 300px; } div.blackwhitelist.pool { - margin:5px; + margin:5px; } div.blackwhitelist.white select, div.blackwhitelist.black select { @@ -1931,8 +1911,8 @@ html * { input[type="radio"] { - margin: 2px 0px 0px; - line-height: normal; + margin: 2px 0px 0px; + line-height: normal; } input, textarea, select, .uneditable-input { @@ -1941,20 +1921,20 @@ input, textarea, select, .uneditable-input { } .container-fluid { - margin-left: 10px; + margin-left: 10px; margin-right: 10px; } .navbar-brand { - padding: 0px; + padding: 0px; } /* navbar styling */ .navbar-default { - background-color: #15528F; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F'); - background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F)); - background: -moz-linear-gradient(top, #297AB8, #15528F); + background-color: #15528F; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F'); + background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F)); + background: -moz-linear-gradient(top, #297AB8, #15528F); border-color: #3e3f3a; } @@ -2069,30 +2049,30 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #fff; - text-decoration: none; - background-color: #15528F; + color: #fff; + text-decoration: none; + background-color: #15528F; } .dropdown-menu > li > a { - padding: 4px 36px 4px 20px; + padding: 4px 36px 4px 20px; color: #fff; } .dropdown-menu { - background-color: #333; - border: 1px solid rgba(0, 0, 0, 0.15); - box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); + background-color: #333; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); } .form-control { - color: #000000; + color: #000000; } .form-control-inline { - min-width: 0; - width: auto; - display: inline; + min-width: 0; + width: auto; + display: inline; } .btn { @@ -2130,8 +2110,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { filter: progid:dximagetransform.microsoft.gradient(enabled=false); *zoom: 1; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:hover, @@ -2161,10 +2141,10 @@ fieldset[disabled] .navbar-default .btn-link:focus { *background-color: #2672B6; background-position: 0 -150px; -webkit-transition: background-position 0.0s linear; - -moz-transition: background-position 0.0s linear; - -ms-transition: background-position 0.0s linear; - -o-transition: background-position 0.0s linear; - transition: background-position 0.0s linear; + -moz-transition: background-position 0.0s linear; + -ms-transition: background-position 0.0s linear; + -o-transition: background-position 0.0s linear; + transition: background-position 0.0s linear; } .btn:focus { @@ -2182,8 +2162,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { color: #fff; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled, @@ -2194,8 +2174,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } .btn-large { @@ -2203,8 +2183,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { font-size: 15px; line-height: normal; -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; } .btn-large [class^="icon-"] { @@ -2433,10 +2413,10 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } @media(min-width:768px){ @@ -2453,13 +2433,13 @@ fieldset[disabled] .navbar-default .btn-link:focus { } label { - font-weight: normal; + font-weight: normal; } pre { - color: #fff; - background-color: #3d3d3d; - border-color: #111; + color: #fff; + background-color: #3d3d3d; + border-color: #111; } .alert { @@ -2472,14 +2452,14 @@ input sizing (for config pages) ========================================================================== */ #config select { - min-width: 0; - width: auto; - display: inline; + min-width: 0; + width: auto; + display: inline; margin-top: -4px; } .btn-inline { - margin-top: -3px; + margin-top: -3px; } .input75 { @@ -2838,133 +2818,133 @@ token-input.css ========================================================================== */ ul.token-input-list { - overflow: hidden; - height: auto !important; - height: 1%; - width: 273px; - border: 1px solid #ccc; - cursor: text; - font-size: 10px; - font-family: Verdana; - z-index: 999; - margin: 0; - padding: 0 0 1px 0; - background-color: #fff; - list-style-type: none; + overflow: hidden; + height: auto !important; + height: 1%; + width: 273px; + border: 1px solid #ccc; + cursor: text; + font-size: 10px; + font-family: Verdana; + z-index: 999; + margin: 0; + padding: 0 0 1px 0; + background-color: #fff; + list-style-type: none; /* clear: left; */ - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } ul.token-input-list li { - list-style-type: none; + list-style-type: none; } ul.token-input-list li input { - border: 0; - padding: 3px 4px; - background-color: white; + border: 0; + padding: 3px 4px; + background-color: white; /* -webkit-appearance: caret; */ } li.token-input-token { - overflow: hidden; - height: auto !important; - height: 1%; - margin: 3px; - padding: 3px 5px 0 5px; - background-color: #d0efa0; - color: #000; - font-weight: bold; - cursor: default; - display: block; + overflow: hidden; + height: auto !important; + height: 1%; + margin: 3px; + padding: 3px 5px 0 5px; + background-color: #d0efa0; + color: #000; + font-weight: bold; + cursor: default; + display: block; } li.token-input-token img { - padding-top: 7px; - padding-right: 4px; - float: left; + padding-top: 7px; + padding-right: 4px; + float: left; } li.token-input-token input { - padding-top: 2px !important; - padding-right: 4px !important; - float: left; + padding-top: 2px !important; + padding-right: 4px !important; + float: left; } li.token-input-token p { - float: left; - padding: 0; - margin: 0; - line-height: 2.0 !important; + float: left; + padding: 0; + margin: 0; + line-height: 2.0 !important; } li.token-input-token span { - float: right; - color: #777; - cursor: pointer; + float: right; + color: #777; + cursor: pointer; } li.token-input-selected-token { - background-color: #08844e; - color: #fff; + background-color: #08844e; + color: #fff; } li.token-input-selected-token span { - color: #bbb; + color: #bbb; } li.token-input-input-token input { - margin: 3px 3px 3px 3px !important; + margin: 3px 3px 3px 3px !important; } div.token-input-dropdown { - background-color: #fff; - color: #000; - border-left-color: #ccc; - border-right-color: #ccc; - border-bottom-color: #ccc; + background-color: #fff; + color: #000; + border-left-color: #ccc; + border-right-color: #ccc; + border-bottom-color: #ccc; } div.token-input-dropdown p { - margin: 0; - padding: 3px; - font-weight: bold; - color: #777; + margin: 0; + padding: 3px; + font-weight: bold; + color: #777; } div.token-input-dropdown ul { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } div.token-input-dropdown ul li { - background-color: #fff; - padding: 3px; - list-style-type: none; + background-color: #fff; + padding: 3px; + list-style-type: none; } div.token-input-dropdown ul li.token-input-dropdown-item { - background-color: #fafafa; + background-color: #fafafa; } div.token-input-dropdown ul li.token-input-dropdown-item2 { - background-color: #fff; + background-color: #fff; } div.token-input-dropdown ul li em { - font-weight: bold; - font-style: normal; + font-weight: bold; + font-style: normal; } div.token-input-dropdown ul li.token-input-selected-dropdown-item { - background-color: #6196c2; + background-color: #6196c2; } span.token-input-delete-token { - margin: 0 1px; + margin: 0 1px; } /* ======================================================================= @@ -2991,7 +2971,7 @@ jquery.confirm.css top: 50%; margin: -130px 0 0 -230px; border: 1px solid #111; - box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); + box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); } #confirmBox h1, @@ -3000,18 +2980,18 @@ jquery.confirm.css } #confirmBox h1 { - background-color: #15528F; + background-color: #15528F; border-bottom: 1px solid #111; color: #fff; - margin: 0; - font-size: 22px; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + margin: 0; + font-size: 22px; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); } #confirmBox p { padding-top: 20px; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); } #confirmButtons { diff --git a/gui/slick/css/light.css b/gui/slick/css/light.css index eeb03dfb..288c80cc 100644 --- a/gui/slick/css/light.css +++ b/gui/slick/css/light.css @@ -4,139 +4,139 @@ fonts /* Open Sans */ /* Regular */ @font-face { - font-family: 'Open Sans'; - - src: url('fonts/OpenSans-Regular-webfont.eot'); - src: url('fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('fonts/OpenSans-Regular-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: normal; + font-family: 'Open Sans'; + + src: url('fonts/OpenSans-Regular-webfont.eot'); + src: url('fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Regular-webfont.woff') format('woff'), + url('fonts/OpenSans-Regular-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: normal; } /* Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Italic-webfont.eot'); - src: url('fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Italic-webfont.woff') format('woff'), - url('fonts/OpenSans-Italic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); - font-weight: normal; - font-weight: 400; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Italic-webfont.eot'); + src: url('fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Italic-webfont.woff') format('woff'), + url('fonts/OpenSans-Italic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: italic; } /* Light */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Light-webfont.eot'); - src: url('fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Light-webfont.woff') format('woff'), - url('fonts/OpenSans-Light-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); - font-weight: 200; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Light-webfont.eot'); + src: url('fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Light-webfont.woff') format('woff'), + url('fonts/OpenSans-Light-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); + font-weight: 200; + font-style: normal; } /* Light Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-LightItalic-webfont.eot'); - src: url('fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-LightItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); - font-weight: 200; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-LightItalic-webfont.eot'); + src: url('fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-LightItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); + font-weight: 200; + font-style: italic; } /* Semibold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Semibold-webfont.eot'); - src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), - url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); - font-weight: 600; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Semibold-webfont.eot'); + src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), + url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); + font-weight: 600; + font-style: normal; } /* Semibold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); - font-weight: 600; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); + font-weight: 600; + font-style: italic; } /* Bold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Semibold-webfont.eot'); - src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), - url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Semibold-webfont.eot'); + src: url('fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Semibold-webfont.woff') format('woff'), + url('fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: normal; } /* Bold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); - src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); - font-weight: bold; - font-weight: 700; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot'); + src: url('fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: italic; } /* Extra Bold */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Bold-webfont.eot'); - src: url('fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-Bold-webfont.woff') format('woff'), - url('fonts/OpenSans-Bold-webfont.ttf') format('truetype'), - url('fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); - font-weight: 900; - font-style: normal; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Bold-webfont.eot'); + src: url('fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-Bold-webfont.woff') format('woff'), + url('fonts/OpenSans-Bold-webfont.ttf') format('truetype'), + url('fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); + font-weight: 900; + font-style: normal; } /* Extra Bold Italic */ @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-BoldItalic-webfont.eot'); - src: url('fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), - url('fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), - url('fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); - font-weight: 900; - font-style: italic; + font-family: 'Open Sans'; + src: url('fonts/OpenSans-BoldItalic-webfont.eot'); + src: url('fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), + url('fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), + url('fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); + font-weight: 900; + font-style: italic; } /* Droid Sans */ @font-face { - font-family: 'droid_sans_mono'; - src: url('fonts/droidsansmono-webfont.eot'); - src: url('fonts/droidsansmono-webfont.eot?#iefix') format('embedded-opentype'), - url('fonts/droidsansmono-webfont.woff') format('woff'), - url('fonts/droidsansmono-webfont.ttf') format('truetype'), - url('fonts/droidsansmono-webfont.svg#droid_sans_monoregular') format('svg'); - font-weight: normal; - font-style: normal; + font-family: 'droid_sans_mono'; + src: url('fonts/droidsansmono-webfont.eot'); + src: url('fonts/droidsansmono-webfont.eot?#iefix') format('embedded-opentype'), + url('fonts/droidsansmono-webfont.woff') format('woff'), + url('fonts/droidsansmono-webfont.ttf') format('truetype'), + url('fonts/droidsansmono-webfont.svg#droid_sans_monoregular') format('svg'); + font-weight: normal; + font-style: normal; } @@ -285,27 +285,27 @@ inc_top.tmpl } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #140F06; - text-decoration: none; + color: #140F06; + text-decoration: none; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { - color: #222; - text-decoration: none; + color: #222; + text-decoration: none; } .ui-tabs { - padding: 0px; - background: none; - border-width: 0px; + padding: 0px; + background: none; + border-width: 0px; } .ui-tabs .ui-tabs-nav { - padding-left: 0px; - background: transparent; - border-width: 0px 0px 0px 0px; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; + padding-left: 0px; + background: transparent; + border-width: 0px 0px 0px 0px; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; } .ui-tabs .ui-tabs-panel { @@ -314,8 +314,8 @@ inc_top.tmpl } .ui-tabs .ui-tabs-nav li.ui-tabs-active { - border-top-left-radius: 5px; - border-top-right-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; } .ui-tabs-nav > :not(.ui-tabs-active){ @@ -324,12 +324,12 @@ inc_top.tmpl } #content { - width: 95%; - min-width: 875px; - padding: 15px; - margin-left: auto; - margin-right: auto; - clear: both; + width: 95%; + min-width: 875px; + padding: 15px; + margin-left: auto; + margin-right: auto; + clear: both; } #SubMenu { @@ -349,7 +349,7 @@ inc_top.tmpl } [class^="menu-icon-"], [class*=" menu-icon-"] { - background: url("../images/menu/menu-icons-black.png"); + background: url("../images/menu/menu-icons-black.png"); height: 16px; width: 16px; display: inline-block; @@ -451,7 +451,7 @@ inc_top.tmpl } [class^="submenu-icon-"], [class*=" submenu-icon-"] { - background: url("../images/menu/menu-icons-black.png"); + background: url("../images/menu/menu-icons-black.png"); height: 16px; width: 16px; } @@ -503,24 +503,24 @@ home.tmpl ========================================================================== */ .imgbanner .banner { - border: 1px solid #ccc; - overflow: hidden; - height: 66px; - overflow: hidden; - border-radius: 8px; - vertical-align: top; - width: 360px; + border: 1px solid #ccc; + overflow: hidden; + height: 66px; + overflow: hidden; + border-radius: 8px; + vertical-align: top; + width: 360px; display: block; margin-left: auto; margin-right: auto; } .imgsmallposter .small { - height: 66px; - overflow: hidden; - border-radius: 3px; - vertical-align: middle; - width: 45px; + height: 66px; + overflow: hidden; + border-radius: 3px; + vertical-align: middle; + width: 45px; border: 1px solid #ccc; margin-right: 5px; } @@ -535,7 +535,7 @@ home.tmpl } .ui-progressbar .ui-progressbar-value { - box-sizing: content-box !important; + box-sizing: content-box !important; } .progressbarText { @@ -596,7 +596,7 @@ home.tmpl } .show { - margin: 12px; + margin: 12px; width: 188px; height: 352px; background-color: #DFDACF; @@ -607,7 +607,7 @@ home.tmpl .show-image { overflow: hidden; height: 273px; - width: 186px; + width: 186px; border-top-left-radius: 5px; border-top-right-radius: 5px; } @@ -618,23 +618,23 @@ home.tmpl } .show .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; } .show .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; } .show .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 0px; + border-top-right-radius: 0px; } .show .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 0px; + border-top-left-radius: 0px; } .show .ui-widget-content { - border-top: 1px solid #111; + border-top: 1px solid #111; border-bottom: 1px solid #111; border-left: 0px; border-right: 0px; @@ -742,7 +742,7 @@ home.tmpl #sort-by { display: inline; list-style-type: none; - padding: 0; + padding: 0; margin-left: 5px; } @@ -757,13 +757,13 @@ home.tmpl } td.tvShow a { - color: #000; - text-decoration: none; + color: #000; + text-decoration: none; } td.tvShow a:hover { - cursor: pointer; - color: #428BCA; + cursor: pointer; + color: #428BCA; } /* ======================================================================= @@ -782,8 +782,8 @@ home_addShows.tmpl } div.button { - display: table-cell; - vertical-align: middle; + display: table-cell; + vertical-align: middle; padding-left: 10px; } @@ -830,8 +830,8 @@ div.buttontext p { home_newShow.tmpl ========================================================================== */ #addShowForm, #recommendedShowsForm { - margin-left: auto; - margin-right: auto; + margin-left: auto; + margin-right: auto; } #newShowPortal { @@ -850,7 +850,7 @@ home_newShow.tmpl } #searchResults input[type="radio"] { - vertical-align: -2px; + vertical-align: -2px; } /* ======================================================================= @@ -862,10 +862,10 @@ home_addExistingShow.tmpl } ul#rootDirStaticList { - width: 90%; - margin-right: auto; - margin-left: auto; - text-align: left; + width: 90%; + margin-right: auto; + margin-left: auto; + text-align: left; } ul#rootDirStaticList li { @@ -877,12 +877,12 @@ ul#rootDirStaticList li { } ul#rootDirStaticList li label { - margin-top: 5px; + margin-top: 5px; margin-bottom: 5px; } ul#rootDirStaticList li input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } /* ======================================================================= @@ -890,7 +890,7 @@ home_trendingShows.tmpl ========================================================================== */ .traktShowTitleIcons { - float: right; + float: right; padding-right: 4px; padding-bottom: 4px; } @@ -905,7 +905,7 @@ home_trendingShows.tmpl } .traktContainer p, .traktContainer i { - white-space: nowrap; + white-space: nowrap; font-size: 12px; overflow: hidden; /* text-shadow: 1px 1px 0px #000;*/ @@ -914,7 +914,7 @@ home_trendingShows.tmpl } .traktContainer { - margin: 12px; + margin: 12px; width: 188px; background-color: #DFDACF; border: 1px solid #111; @@ -924,7 +924,7 @@ home_trendingShows.tmpl .trakt-image { overflow: hidden; height: 273px; - width: 186px; + width: 186px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom: 1px solid #111; @@ -939,7 +939,7 @@ home_postprocess.tmpl width: 800px; padding-top: 10px; margin-right: auto; - margin-left: auto; + margin-left: auto; } @@ -948,19 +948,19 @@ displayShow.tmpl ========================================================================== */ #posterCol { - float: left; + float: left; margin-right: 10px; margin-bottom: 20px; } #showCol { - overflow: hidden; + overflow: hidden; margin-bottom: 20px; } .navShow { - display: inline; - cursor: pointer; + display: inline; + cursor: pointer; } #prevShow, @@ -973,12 +973,12 @@ displayShow.tmpl } h1.title { - padding-bottom: 12px; - margin-bottom: 15px; - line-height: 30px; - text-align: left; - text-rendering: optimizelegibility; - border-bottom: 1px solid #888; + padding-bottom: 12px; + margin-bottom: 15px; + line-height: 30px; + text-align: left; + text-rendering: optimizelegibility; + border-bottom: 1px solid #888; } .displayspecials { @@ -1004,40 +1004,40 @@ span.imdbstars { } span.imdbstars, span.imdbstars > * { - height: 12px; - background: url(../images/rating.png) 0 -12px repeat-x; - width: 120px; - display: inline-block; + height: 12px; + background: url(../images/rating.png) 0 -12px repeat-x; + width: 120px; + display: inline-block; vertical-align: top; } span.imdbstars > * { - background-position: 0 0; - max-width:120px; + background-position: 0 0; + max-width:120px; } ul.tags { - list-style-type: none; + list-style-type: none; position: relative; top: -5px; margin-left: -40px; } ul.tags li { - margin-right: 4px; + margin-right: 4px; margin-bottom: 5px; - padding: 3px 4px 3px 25px; + padding: 3px 4px 3px 25px; background: url(../images/tag.png) no-repeat scroll 5px 4px #555; - border-radius: 3px; + border-radius: 3px; border: 1px solid #111; - color: #FFF; - font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; + color: #FFF; + font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; text-shadow: 0px 1px rgba(0, 0, 0, 0.8); - float: left; + float: left; } ul.tags li a{ - color: #FFF; + color: #FFF; } .tvshowImg { @@ -1075,12 +1075,12 @@ ul.tags li a{ } #checkboxControls label { - white-space: nowrap; - display: inline-block; + white-space: nowrap; + display: inline-block; } #checkboxControls input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } .unaired { @@ -1103,27 +1103,27 @@ ul.tags li a{ } span.unaired { - color: #584b20; + color: #584b20; border: 1px solid #584b20; } span.skipped { - color: #1d5068; + color: #1d5068; border: 1px solid #1d5068; } span.good { - color: #295730; + color: #295730; border: 1px solid #295730; } span.qual { - color: #765100; + color: #765100; border: 1px solid #765100; } span.wanted { - color: #890000; + color: #890000; border: 1px solid #890000; } span.snatched { - color: #652164; + color: #652164; border: 1px solid #652164; } @@ -1133,22 +1133,22 @@ span.good b, span.qual b, span.wanted b, span.snatched b { - color: #000000; + color: #000000; font-weight: 800; } .plotInfo { - cursor: help; - float: right; - position: relative; - top: 2px; + cursor: help; + float: right; + position: relative; + top: 2px; } .plotInfoNone { - cursor: help; - float: right; - position: relative; - top: 2px; + cursor: help; + float: right; + position: relative; + top: 2px; opacity: 0.4; } @@ -1201,7 +1201,7 @@ td.col-checkbox { th.col-checkbox input[type="checkbox"], td.col-checkbox input[type="checkbox"] { - vertical-align: -2px; + vertical-align: -2px; } th.col-metadata, @@ -1259,16 +1259,16 @@ td.col-search { } .input-scene { - height: 20px; - line-height: 1.5; - border-radius: 3px; + height: 20px; + line-height: 1.5; + border-radius: 3px; } #editShow { - width: 700px; - padding-top: 10px; - margin-right: auto; - margin-left: auto; + width: 700px; + padding-top: 10px; + margin-right: auto; + margin-left: auto; } /* ======================================================================= @@ -1284,10 +1284,10 @@ comingEpisodes.tmpl } .listing-key { - padding: 5px; - font-size: 13px; - font-weight: bold; - border-radius: 5px; + padding: 5px; + font-size: 13px; + font-weight: bold; + border-radius: 5px; } .listing-default { @@ -1307,22 +1307,22 @@ comingEpisodes.tmpl } span.listing-default { - color: #826f30; + color: #826f30; border: 1px solid #826f30; } span.listing-current { - color: #295730; + color: #295730; border: 1px solid #295730; } span.listing-overdue { - color: #890000; + color: #890000; border: 1px solid #890000; } span.listing-toofar { - color: #1d5068; + color: #1d5068; border: 1px solid #1d5068; } @@ -1339,13 +1339,13 @@ h2.day, h2.network { } .tvshowDiv { - display: block; - clear: both; - border: 1px solid #ccc; - margin: auto; - padding: 0px; - text-align: left; - width: 750px; + display: block; + clear: both; + border: 1px solid #ccc; + margin: auto; + padding: 0px; + text-align: left; + width: 750px; border-radius: 5px; background: #fff; cursor: default; @@ -1353,7 +1353,7 @@ h2.day, h2.network { } .tvshowDiv a:hover { - color: #428BCA; + color: #428BCA; } .tvshowDiv a, .tvshowDiv a:link, .tvshowDiv a:visited, .tvshowDiv a:hover { @@ -1362,54 +1362,54 @@ h2.day, h2.network { } .tvshowTitle a { - color: #000000; - float: left; - line-height: 1.4em; - font-size: 1.4em; - text-shadow: -1px -1px 0 #FFF); + color: #000000; + float: left; + line-height: 1.4em; + font-size: 1.4em; + text-shadow: -1px -1px 0 #FFF); } .tvshowTitleIcons { - float: right; - padding: 3px 5px; + float: right; + padding: 3px 5px; } .tvshowDiv td { - padding: 5px 10px; + padding: 5px 10px; } .tvshowDiv td.next_episode { - width: 100%; - height: 90%; - border-bottom: 1px solid #ccc; - vertical-align: top; - color: #000; + width: 100%; + height: 90%; + border-bottom: 1px solid #ccc; + vertical-align: top; + color: #000; } .bannerThumb { - vertical-align: top; - height: auto; - width: 748px; + vertical-align: top; + height: auto; + width: 748px; border-bottom: 1px solid #ccc; } .posterThumb { - vertical-align: top; - height: auto; - width: 180px; + vertical-align: top; + height: auto; + width: 180px; border-right: 1px solid #ccc; } .ep_listing { - width: auto; - border: 1px solid #ccc; - margin-bottom: 10px; - padding: 10px; + width: auto; + border: 1px solid #ccc; + margin-bottom: 10px; + padding: 10px; } .ep_summary { - margin-left: 5px; - font-style: italic; + margin-left: 5px; + font-style: italic; } .ep_summaryTrigger { @@ -1423,16 +1423,16 @@ h2.day, h2.network { } table.cal-odd { - background-color: #ddd; + background-color: #ddd; } table.cal-even { - background-color: #d2d2d2; + background-color: #d2d2d2; } .calendarShow .text .airtime { - color:#000 + color:#000 } .calendarShow .text .episode-title { - color:#888 + color:#888 } /* ======================================================================= @@ -1455,8 +1455,8 @@ config*.tmpl } .component-item { - border-bottom: 1px dotted #666; - min-height: 200px; + border-bottom: 1px dotted #666; + min-height: 200px; } .component-group-desc{ @@ -1506,16 +1506,16 @@ select .selected { } .testNotification { - padding: 5px; - margin-bottom: 10px; - line-height: 20px; - border: 1px dotted #CCC; + padding: 5px; + margin-bottom: 10px; + line-height: 20px; + border: 1px dotted #CCC; } #providerOrderList { - width: 250px; - padding-left: 20px; - list-style-type: none; + width: 250px; + padding-left: 20px; + list-style-type: none; } #provider_order_list, @@ -1538,14 +1538,14 @@ select .selected { } #config .tip_scale label span.component-title { - width: 85px !important; - font-size: 12px !important; - margin-top: 2px !important; + width: 85px !important; + font-size: 12px !important; + margin-top: 2px !important; } #config .tip_scale label span.component-desc { - margin-left: 120px !important; - width: 220px !important; + margin-left: 120px !important; + width: 220px !important; } .infoTableHeader, @@ -1587,8 +1587,14 @@ select .selected { config_postProcessing.tmpl ========================================================================== */ +#config .episode-sample { + background-color: rgb(255, 255, 255); + border-color: rgb(204, 204, 204); +} + #config div.example { - padding: 10px; background-color: #efefef; + background-color: #efefef; + border-color: rgb(204, 204, 204); } .Key { @@ -1630,19 +1636,7 @@ config_postProcessing.tmpl config_notifications.tmpl ========================================================================== */ -div.metadata_options_wrapper { - float: left; - width: 190px; -} - -div.metadata_example_wrapper { - float: right; - width: 325px; -} - div.metadata_options { - padding: 7px; - overflow: auto; background: #f5f1e4; border: 1px solid #ccc; } @@ -1650,34 +1644,22 @@ div.metadata_options { div.metadata_options label:hover { color: #fff; background-color: #57442b; - cursor: pointer; } div.metadata_options label { - display: block; - padding-left: 7px; - line-height: 20px; color: #036; } div.metadata_example { - padding: 8px; + border: 1px solid rgb(247, 247, 247); } div.metadata_example label { - display: block; - line-height: 21px; color: #000; - cursor: pointer; } div.metadataDiv .disabled { - color: #ccc; -} - -.notifier-icon { - float: left; - margin: 6px 4px 0px 0px; + color: #aaa; } .warning { @@ -1840,23 +1822,23 @@ option.flag { } #Anime { - clear: both; - overflow-x: hidden; - overflow-y: hidden; - font-size: 14px; + clear: both; + overflow-x: hidden; + overflow-y: hidden; + font-size: 14px; } #Anime div.component-group-desc { - float: left; - width: 165px; + float: left; + width: 165px; } #Anime div.component-group-desc p { - margin-bottom: 0.4em; - margin-left: 0; - margin-right: 0; - margin-top: 0.4em; - width: 95%; + margin-bottom: 0.4em; + margin-left: 0; + margin-right: 0; + margin-top: 0.4em; + width: 95%; } div.blackwhitelist{ @@ -1865,15 +1847,15 @@ div.blackwhitelist{ } div.blackwhitelist input { - margin: 5px 5px; + margin: 5px 5px; } div.blackwhitelist.pool select{ - width: 300px; + width: 300px; } div.blackwhitelist.pool { - margin:5px; + margin:5px; } div.blackwhitelist.white select, div.blackwhitelist.black select { @@ -1910,8 +1892,8 @@ html * { } input[type="radio"] { - margin: 2px 0px 0px; - line-height: normal; + margin: 2px 0px 0px; + line-height: normal; } input, textarea, select, .uneditable-input { @@ -1920,20 +1902,20 @@ input, textarea, select, .uneditable-input { } .container-fluid { - margin-left: 10px; + margin-left: 10px; margin-right: 10px; } .navbar-brand { - padding: 0px; + padding: 0px; } /* navbar styling */ .navbar-default { - background-color: #333333; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#333333'); - background: -webkit-gradient(linear, left top, left bottom, from(#555), to(#333)); - background: -moz-linear-gradient(top, #555, #333); + background-color: #333333; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#333333'); + background: -webkit-gradient(linear, left top, left bottom, from(#555), to(#333)); + background: -moz-linear-gradient(top, #555, #333); border-color: #3e3f3a; } @@ -2048,29 +2030,29 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #fff; - text-decoration: none; - background-color: #333; + color: #fff; + text-decoration: none; + background-color: #333; } .dropdown-menu > li > a { - padding: 4px 36px 4px 20px; + padding: 4px 36px 4px 20px; } .dropdown-menu { - background-color: #F5F1E4; - border: 1px solid rgba(0, 0, 0, 0.15); - box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); + background-color: #F5F1E4; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176); } .form-control { - color: #000000; + color: #000000; } .form-control-inline { - min-width: 0; - width: auto; - display: inline; + min-width: 0; + width: auto; + display: inline; } .btn { @@ -2108,8 +2090,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { filter: progid:dximagetransform.microsoft.gradient(enabled=false); *zoom: 1; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:hover, @@ -2137,10 +2119,10 @@ fieldset[disabled] .navbar-default .btn-link:focus { *background-color: #d9d9d9; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -ms-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; } .btn:focus { @@ -2156,8 +2138,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { background-image: none; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled, @@ -2168,8 +2150,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } .btn-large { @@ -2177,8 +2159,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { font-size: 15px; line-height: normal; -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; } .btn-large [class^="icon-"] { @@ -2407,10 +2389,10 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } @media(min-width:768px){ @@ -2427,13 +2409,13 @@ fieldset[disabled] .navbar-default .btn-link:focus { } label { - font-weight: normal; + font-weight: normal; } pre { - color: #000; - background-color: #F5F5F5; - border-color: #ccc; + color: #000; + background-color: #F5F5F5; + border-color: #ccc; } .alert { @@ -2446,14 +2428,14 @@ input sizing (for config pages) ========================================================================== */ #config select { - min-width: 0; - width: auto; - display: inline; + min-width: 0; + width: auto; + display: inline; margin-top: -4px; } .btn-inline { - margin-top: -3px; + margin-top: -3px; } .input75 { @@ -2780,133 +2762,133 @@ token-input.css ========================================================================== */ ul.token-input-list { - overflow: hidden; - height: auto !important; - height: 1%; - width: 273px; - border: 1px solid #ccc; - cursor: text; - font-size: 10px; - font-family: Verdana; - z-index: 999; - margin: 0; - padding: 0 0 1px 0; - background-color: #fff; - list-style-type: none; + overflow: hidden; + height: auto !important; + height: 1%; + width: 273px; + border: 1px solid #ccc; + cursor: text; + font-size: 10px; + font-family: Verdana; + z-index: 999; + margin: 0; + padding: 0 0 1px 0; + background-color: #fff; + list-style-type: none; /* clear: left; */ - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; } ul.token-input-list li { - list-style-type: none; + list-style-type: none; } ul.token-input-list li input { - border: 0; - padding: 3px 4px; - background-color: white; + border: 0; + padding: 3px 4px; + background-color: white; /* -webkit-appearance: caret; */ } li.token-input-token { - overflow: hidden; - height: auto !important; - height: 1%; - margin: 3px; - padding: 3px 5px 0 5px; - background-color: #d0efa0; - color: #000; - font-weight: bold; - cursor: default; - display: block; + overflow: hidden; + height: auto !important; + height: 1%; + margin: 3px; + padding: 3px 5px 0 5px; + background-color: #d0efa0; + color: #000; + font-weight: bold; + cursor: default; + display: block; } li.token-input-token img { - padding-top: 7px; - padding-right: 4px; - float: left; + padding-top: 7px; + padding-right: 4px; + float: left; } li.token-input-token input { - padding-top: 2px !important; - padding-right: 4px !important; - float: left; + padding-top: 2px !important; + padding-right: 4px !important; + float: left; } li.token-input-token p { - float: left; - padding: 0; - margin: 0; - line-height: 2.0 !important; + float: left; + padding: 0; + margin: 0; + line-height: 2.0 !important; } li.token-input-token span { - float: right; - color: #777; - cursor: pointer; + float: right; + color: #777; + cursor: pointer; } li.token-input-selected-token { - background-color: #08844e; - color: #fff; + background-color: #08844e; + color: #fff; } li.token-input-selected-token span { - color: #bbb; + color: #bbb; } li.token-input-input-token input { - margin: 3px 3px 3px 3px !important; + margin: 3px 3px 3px 3px !important; } div.token-input-dropdown { - background-color: #fff; - color: #000; - border-left-color: #ccc; - border-right-color: #ccc; - border-bottom-color: #ccc; + background-color: #fff; + color: #000; + border-left-color: #ccc; + border-right-color: #ccc; + border-bottom-color: #ccc; } div.token-input-dropdown p { - margin: 0; - padding: 3px; - font-weight: bold; - color: #777; + margin: 0; + padding: 3px; + font-weight: bold; + color: #777; } div.token-input-dropdown ul { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } div.token-input-dropdown ul li { - background-color: #fff; - padding: 3px; - list-style-type: none; + background-color: #fff; + padding: 3px; + list-style-type: none; } div.token-input-dropdown ul li.token-input-dropdown-item { - background-color: #fafafa; + background-color: #fafafa; } div.token-input-dropdown ul li.token-input-dropdown-item2 { - background-color: #fff; + background-color: #fff; } div.token-input-dropdown ul li em { - font-weight: bold; - font-style: normal; + font-weight: bold; + font-style: normal; } div.token-input-dropdown ul li.token-input-selected-dropdown-item { - background-color: #6196c2; + background-color: #6196c2; } span.token-input-delete-token { - margin: 0 1px; + margin: 0 1px; } /* ======================================================================= @@ -2933,7 +2915,7 @@ jquery.confirm.css top: 50%; margin: -130px 0 0 -230px; border: 1px solid #111; - box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); + box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175); } #confirmBox h1, @@ -2942,18 +2924,18 @@ jquery.confirm.css } #confirmBox h1 { - background-color: #333; + background-color: #333; border-bottom: 1px solid #111; color: #fff; - margin: 0; - font-size: 22px; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + margin: 0; + font-size: 22px; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); } #confirmBox p { padding-top: 20px; - color: #000; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.75); + color: #000; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.75); } #confirmButtons { diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css index 81ba3f02..f15cf1d0 100644 --- a/gui/slick/css/style.css +++ b/gui/slick/css/style.css @@ -199,6 +199,10 @@ inc_top.tmpl background: #dcdcdc url("../css/lib/images/ui-bg_highlight-soft_75_dcdcdc_1x100.png") 50% top repeat-x; } +.ui-widget-content a { + text-decoration: none; +} + .ui-widget-header { background: #ffffff url("../css/lib/images/ui-bg_flat_0_ffffff_40x100.png") 50% 50% repeat-x; } @@ -1660,8 +1664,21 @@ select .selected { config_postProcessing.tmpl ========================================================================== */ +#config .episode-sample { + width: 240px; + margin-right: 10px; + border: 1px solid; +} + +#config .episode-sample h3 { + margin: 10px; + font-size: 18px; + line-height: 24px; +} + #config div.example { - padding: 10px; background-color: #efefef; + padding: 10px; + border: 1px solid; } .Key { @@ -1709,43 +1726,47 @@ div.metadata_options_wrapper { } div.metadata_example_wrapper { - float: right; - width: 325px; + margin-left: 220px; +} + +div.metadata_options_wrapper h4, +div.metadata_example_wrapper h4 { + margin: 0 0 10px; } div.metadata_options { - padding: 7px; overflow: auto; background: #f5f1e4; border: 1px solid #ccc; } div.metadata_options label:hover { - color: #fff; - background-color: #57442b; cursor: pointer; } div.metadata_options label { - display: block; - padding-left: 7px; - line-height: 20px; color: #036; } -div.metadata_example { - padding: 8px; +div.metadata_example label { + cursor: pointer; + font-weight: 600; } +div.metadata_options label, div.metadata_example label { - display: block; line-height: 21px; - color: #000; - cursor: pointer; + display: block; + padding: 3px; + margin: 0px; +} +div.metadata_options input { + margin-right: 3px; + vertical-align: baseline; } div.metadataDiv .disabled { - color: #ccc; + font-weight: normal; } .notifier-icon { @@ -1753,11 +1774,6 @@ div.metadataDiv .disabled { margin: 6px 4px 0px 0px; } -.warning { - border-color: #F89406; - background: url("../images/warning16.png") no-repeat right 5px center #fff; -} - /* ======================================================================= manage*.tmpl ========================================================================== */ @@ -3006,13 +3022,31 @@ span.token-input-delete-token { margin: 0 1px; } -.ui-widget-content a { - text-decoration: none; -} +.boldest {font-weight: 900} .red-text {color:#d33} .clear-left {clear:left} +.float-left {float:left} .nextline-block {display:block} +#failed-guide, +#failed-guide .title, +#failed-guide li {margin:0; padding:0} +#failed-guide .title {list-style-type: none} +#failed-guide li {margin-left:15px} + +.icon-info-sign { + display: block; + width: 16px; + height: 16px; + margin: 2px 5px; + float: left; +} + +.pp .component-group-list.right, +.pp .field-pair.right { + margin: 0 0 0 250px; +} + .trakt-image { display: block; width: 100%; @@ -3120,10 +3154,10 @@ pnotify.css ========================================================================== */ .ui-pnotify-sticker { - margin-top: -12px; + margin-top: -12px; } .ui-pnotify-closer { - margin-top: -12px; - margin-right: -10px; + margin-top: -12px; + margin-right: -10px; } \ No newline at end of file diff --git a/gui/slick/interfaces/default/config_postProcessing.tmpl b/gui/slick/interfaces/default/config_postProcessing.tmpl index 3743ae1c..56ce2bca 100644 --- a/gui/slick/interfaces/default/config_postProcessing.tmpl +++ b/gui/slick/interfaces/default/config_postProcessing.tmpl @@ -23,8 +23,10 @@ #else

$title

#end if +#set $checked = 'checked="checked"' +#set $selected = 'selected="selected"' -
+
@@ -41,19 +43,20 @@

Post-Processing

-

Settings that dictate how SickGear should process completed downloads.

+

SickGear options to process completed downloads.

@@ -117,8 +119,9 @@
-

Additional scripts separated by |
- note: scripts are called after SickGear's own post-processing

+

scripts are called after SickGear's built-in post processing. +  note: use | to separate additional extra scripts +

@@ -133,7 +136,7 @@

File Handling

-

Optional settings for the way post-processing handles files

+

More file processing controls.

@@ -142,9 +145,8 @@
@@ -153,8 +155,8 @@ @@ -164,7 +166,7 @@ @@ -174,7 +176,7 @@ @@ -184,7 +186,7 @@ @@ -194,7 +196,7 @@
@@ -604,11 +607,16 @@ $myShowList.sort(lambda x, y: cmp(x.name, y.name)) -#if None is not $curShow.status and re.search(r'(?i)(?:new|returning)\s*series', $curShow.status) - Continuing -#else: - $curShow.status + +#set $display_status = $curShow.status +#if None is not $display_status + #if re.search(r'(?i)(?:new|returning)\s*series', $curShow.status) + #set $display_status = 'Continuing' + #else if re.search(r'(?i)(?:nded)', $curShow.status) + #set $display_status = 'Ended' + #end if #end if + $display_status diff --git a/lib/tvrage_api/tvrage_api.py b/lib/tvrage_api/tvrage_api.py index 31a431d2..70c87970 100644 --- a/lib/tvrage_api/tvrage_api.py +++ b/lib/tvrage_api/tvrage_api.py @@ -604,7 +604,7 @@ class TVRage: self.config['params_epInfo']['sid'] = sid epsEt = self._getetsrc(self.config['url_epInfo'], self.config['params_epInfo']) - if 'episode' not in epsEt: + if 'episodelist' not in epsEt and 'season' not in epsEt['episodelist']: return False seasons = epsEt['episodelist']['season'] From 4f5e1f01ad3d62611ac86c45beb47e6b38eaa62e Mon Sep 17 00:00:00 2001 From: JackDandy Date: Fri, 21 Nov 2014 09:50:12 +0000 Subject: [PATCH 31/43] Fix glitch above rating stars on Display Show page. And the alignment of items on that line. Conflicts: CHANGES.md --- CHANGES.md | 1 + gui/slick/css/dark.css | 22 ------------- gui/slick/css/light.css | 22 ------------- gui/slick/css/style.css | 32 ++++++++++++------- gui/slick/interfaces/default/displayShow.tmpl | 10 +++--- 5 files changed, 27 insertions(+), 60 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e7cccf31..2e972c8a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -36,6 +36,7 @@ * Fix a handler when EpisodeData is not available in TVDB and TVRage APIs * Add TVRage "Canceled/Ended" as "Ended" status to sort on Simple Layout of Show List page * Fix qtips on Display Show and Config Post Processing +* Fix glitch above rating stars on Display Show page [develop changelog] * Fix typo for commit "ShowData handler" i.e. SHA-1:3eec217 diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css index d60712dd..40ffbc0e 100644 --- a/gui/slick/css/dark.css +++ b/gui/slick/css/dark.css @@ -960,12 +960,6 @@ home_postprocess.tmpl displayShow.tmpl ========================================================================== */ -#posterCol { - float: left; - margin-right: 10px; - margin-bottom: 20px; -} - #showCol { overflow: hidden; margin-bottom: 20px; @@ -1007,24 +1001,8 @@ h1.title { top: -3px; } -span.imdbstars { - display: inline-block; - vertical-align: top; - cursor: help; - margin-top: 4px; -} - span.imdbstars, span.imdbstars > * { - height: 12px; background: url(../images/rating.png) 0 -12px repeat-x; - width: 120px; - display: inline-block; - vertical-align: top; -} - -span.imdbstars > * { - background-position: 0 0; - max-width:120px; } ul.tags { diff --git a/gui/slick/css/light.css b/gui/slick/css/light.css index 288c80cc..1bcefbb2 100644 --- a/gui/slick/css/light.css +++ b/gui/slick/css/light.css @@ -947,12 +947,6 @@ home_postprocess.tmpl displayShow.tmpl ========================================================================== */ -#posterCol { - float: left; - margin-right: 10px; - margin-bottom: 20px; -} - #showCol { overflow: hidden; margin-bottom: 20px; @@ -996,24 +990,8 @@ h1.title { top: -3px; } -span.imdbstars { - display: inline-block; - vertical-align: top; - cursor: help; - margin-top: 4px; -} - span.imdbstars, span.imdbstars > * { - height: 12px; background: url(../images/rating.png) 0 -12px repeat-x; - width: 120px; - display: inline-block; - vertical-align: top; -} - -span.imdbstars > * { - background-position: 0 0; - max-width:120px; } ul.tags { diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css index f15cf1d0..28283201 100644 --- a/gui/slick/css/style.css +++ b/gui/slick/css/style.css @@ -971,8 +971,7 @@ displayShow.tmpl #posterCol { float: left; - margin-right: 10px; - margin-bottom: 20px; + margin: 3px 10px 20px 0; } #showCol { @@ -1019,23 +1018,34 @@ h1.title { } span.imdbstars { - display: inline-block; - vertical-align: top; + display: inline-block; + margin: 0 3px 0 0; + vertical-align: baseline; cursor: help; - margin-top: 4px; } - +span.imdbstars > * { + background-position: 0 0 !important; + max-width:120px; +} span.imdbstars, span.imdbstars > * { height: 12px; - background: url(../images/rating.png) 0 -12px repeat-x; width: 120px; display: inline-block; - vertical-align: top; + font-size:10px } -span.imdbstars > * { - background-position: 0 0; - max-width:120px; +#showinfo .flag { + margin: 0 3px 0 0; + vertical-align: baseline; +} + +#showinfo .imdb-info { + margin: 0 3px 0 0; +} + +#showinfo a.service { + margin: 0 3px 0 0; + font-size: 16px; } ul.tags { diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl index 022966e4..44e70645 100644 --- a/gui/slick/interfaces/default/displayShow.tmpl +++ b/gui/slick/interfaces/default/displayShow.tmpl @@ -163,17 +163,17 @@ #else #if 'country_codes' in $show.imdb_info: #for $country in $show.imdb_info['country_codes'].split('|') - + #end for #end if #if 'year' in $show.imdb_info: - ($show.imdb_info['year']) - $show.imdb_info['runtimes'] minutes - + ($show.imdb_info['year']) - $show.imdb_info['runtimes'] minutes #end if - [imdb] + [imdb] #end if - $sickbeard.indexerApi($show.indexer).name + $sickbeard.indexerApi($show.indexer).name #if $xem_numbering or $xem_absolute_numbering: - [xem] + [xem] #end if
From 5c6ca57474c1db92364a5d4552ea179be22873ab Mon Sep 17 00:00:00 2001 From: JackDandy Date: Fri, 21 Nov 2014 18:40:00 +0000 Subject: [PATCH 32/43] Change overhaul Config/Search Providers plus fix a couple of config links. Change Config/Search Providers texts and descriptions. Fix display when no providers are visible on Config/Search Providers. Fix failing "Search Settings" link that is shown on Config/Search Providers when Torrents Search is not enabled under that Config/Search Settings/Torrent Search tab. Fix failing "Providers" link on Config/Search Settings/Episode Search tab. Change case of labels in General Config/Interface/Timezone. Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab. --- CHANGES.md | 7 + gui/slick/css/dark.css | 40 +- gui/slick/css/light.css | 43 +- gui/slick/css/style.css | 79 +- .../interfaces/default/config_general.tmpl | 4 +- .../interfaces/default/config_providers.tmpl | 1422 +++++++++-------- .../interfaces/default/config_search.tmpl | 2 +- gui/slick/js/config.js | 32 +- gui/slick/js/configProviders.js | 336 ++-- 9 files changed, 1001 insertions(+), 964 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2e972c8a..7a289c4c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -37,6 +37,13 @@ * Add TVRage "Canceled/Ended" as "Ended" status to sort on Simple Layout of Show List page * Fix qtips on Display Show and Config Post Processing * Fix glitch above rating stars on Display Show page +* Change overhaul Config/Search Providers +* Change Config/Search Providers texts and descriptions +* Fix display when no providers are visible on Config/Search Providers +* Fix failing "Search Settings" link that is shown on Config/Search Providers when Torrents Search is not enabled +* Fix failing "Providers" link on Config/Search Settings/Episode Search +* Change case of labels in General Config/Interface/Timezone +* Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab [develop changelog] * Fix typo for commit "ShowData handler" i.e. SHA-1:3eec217 diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css index 40ffbc0e..d72fb0cf 100644 --- a/gui/slick/css/dark.css +++ b/gui/slick/css/dark.css @@ -1455,17 +1455,11 @@ config*.tmpl min-height: 200px; } -.component-group-desc{ - float: left; - width: 250px; -} - .component-group-desc h3{ margin-top: 5px; } .component-group-desc p { - width: 90%; margin: 10px 0; color: #ddd; } @@ -1523,18 +1517,10 @@ select .selected { #provider_order_list li, #service_order_list li { - padding: 5px; - margin: 5px 0; - font-size: 14px; background: #333 !important; color: #fff; } -#provider_order_list input, -#service_order_list input { - margin: 0px 2px; -} - #config .tip_scale label span.component-title { width: 85px !important; font-size: 12px !important; @@ -2054,19 +2040,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .btn { - display: inline-block; - *display: inline; - padding: 4px 10px 4px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 12px; - line-height: 16px; - *line-height: 20px; color: #fff; - text-align: center; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); - vertical-align: middle; - cursor: pointer; background-color: #2672B6; *background-color: #2672B6; background-image: -ms-linear-gradient(top, #297AB8, #15528F); @@ -2075,18 +2050,12 @@ fieldset[disabled] .navbar-default .btn-link:focus { background-image: -o-linear-gradient(top, #297AB8, #15528F); background-image: linear-gradient(top, #297AB8, #15528F); background-image: -moz-linear-gradient(top, #297AB8, #15528F); - background-repeat: repeat-x; border: 1px solid #111; - *border: 0; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-color: #111 #111 #111; border-bottom-color: #111; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0); filter: progid:dximagetransform.microsoft.gradient(enabled=false); - *zoom: 1; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05); @@ -2428,6 +2397,15 @@ pre { /* ======================================================================= input sizing (for config pages) ========================================================================== */ +#editAProvider optgroup { + color: #eee; + background-color: rgb(51, 51, 51); +} + +#editAProvider optgroup option { + color: #222; + background-color: #fff; +} #config select { min-width: 0; diff --git a/gui/slick/css/light.css b/gui/slick/css/light.css index 1bcefbb2..a110113c 100644 --- a/gui/slick/css/light.css +++ b/gui/slick/css/light.css @@ -1437,17 +1437,12 @@ config*.tmpl min-height: 200px; } -.component-group-desc{ - float: left; - width: 250px; -} .component-group-desc h3{ margin-top: 5px; } .component-group-desc p { - width: 90%; margin: 10px 0; color: #666; } @@ -1503,18 +1498,6 @@ select .selected { list-style-type: none; } -#provider_order_list li, -#service_order_list li { - padding: 5px; - margin: 5px 0; - font-size: 14px; -} - -#provider_order_list input, -#service_order_list input { - margin: 0px 2px; -} - #config .tip_scale label span.component-title { width: 85px !important; font-size: 12px !important; @@ -2034,19 +2017,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .btn { - display: inline-block; - *display: inline; - padding: 4px 10px 4px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 12px; - line-height: 16px; - *line-height: 20px; color: #333333; - text-align: center; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; background-color: #f5f5f5; *background-color: #e6e6e6; background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); @@ -2055,18 +2027,12 @@ fieldset[disabled] .navbar-default .btn-link:focus { background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(top, #ffffff, #e6e6e6); background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-repeat: repeat-x; border: 1px solid #cccccc; - *border: 0; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-color: #e6e6e6 #e6e6e6 #bfbfbf; border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); filter: progid:dximagetransform.microsoft.gradient(enabled=false); - *zoom: 1; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); @@ -2404,6 +2370,15 @@ pre { /* ======================================================================= input sizing (for config pages) ========================================================================== */ +#editAProvider optgroup { + color: #eee; + background-color: #888; +} + +#editAProvider optgroup option { + color: #222; + background-color: #fff; +} #config select { min-width: 0; diff --git a/gui/slick/css/style.css b/gui/slick/css/style.css index 28283201..5a3870a8 100644 --- a/gui/slick/css/style.css +++ b/gui/slick/css/style.css @@ -1526,6 +1526,7 @@ config*.tmpl .component-group-desc{ float: left; width: 250px; + padding-right: 10px; } .component-group-desc h3{ @@ -1533,7 +1534,6 @@ config*.tmpl } .component-group-desc p { - width: 90%; margin: 10px 0; color: #666; } @@ -1544,7 +1544,7 @@ config*.tmpl #config div.field-pair select, #config div.field-pair input { - margin-right: 6px; + margin-right: 15px; } #config div.field-pair input { @@ -1572,7 +1572,7 @@ config*.tmpl } #config label.space-right { - margin-right:10px + margin-right:20px } #config .metadataDiv { display: none; @@ -1612,16 +1612,56 @@ select .selected { list-style-type: none; } -#provider_order_list li, +#config.search_providers #core-component-group1 #provider_key h4 { + display: inline-block; + float: left; + margin: 0; +} + +#config.search_providers #core-component-group1 #provider_key p { + margin: 0 0 20px 30px; +} + +#config.search_providers #core-component-group1 .component-group-desc, +#config.search_providers #provider_order_list, +#config.search_providers #core-component-group1 #provider_key { + width: 300px +} + +#config.search_providers #provider_order_list { + padding: 0; + float: left +} + +#config.search_providers #provider_order_list, +#config.search_providers #core-component-group1 .btn { + margin: 0 auto +} + +#config.search_providers #core-component-group1 .btn { + display: block +} + +#config.search_providers #core-component-group1 #provider_key { + float: right; + margin-bottom:25px +} + +#provider_order_list li, #service_order_list li { padding: 5px; - margin: 5px 0; + margin: 0 0 5px; font-size: 14px; } #provider_order_list input, #service_order_list input { - margin: 0px 2px; + margin: 0 5px 0 2px; + vertical-align: middle; +} + +#provider_order_list a.imgLink { + margin-right: 3px } #config .tip_scale label span.component-title { @@ -2178,34 +2218,15 @@ fieldset[disabled] .navbar-default .btn-link:focus { font-size: 12px; line-height: 16px; *line-height: 20px; - color: #333333; text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(top, #ffffff, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-repeat: repeat-x; - border: 1px solid #cccccc; *border: 0; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-bottom-color: #b3b3b3; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:hover, @@ -3062,7 +3083,7 @@ span.token-input-delete-token { width: 100%; height: 100%; z-index: 0; - background-image: url(/images/poster-dark.jpg) + background-image: url(../images/poster-dark.jpg) } /* ======================================================================= jquery.confirm.css @@ -3074,7 +3095,7 @@ jquery.confirm.css position: fixed; top: 0; left: 0; - background: url('../images/bg.gif'); + background: url(../images/bg.gif); background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5); background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5); z-index: 100000; @@ -3102,13 +3123,13 @@ jquery.confirm.css color: #fff; margin: 0; font-size: 22px; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75); } #confirmBox p { padding-top: 20px; color: #000; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.75); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); } #confirmButtons { diff --git a/gui/slick/interfaces/default/config_general.tmpl b/gui/slick/interfaces/default/config_general.tmpl index 708fbfd2..756d4d03 100644 --- a/gui/slick/interfaces/default/config_general.tmpl +++ b/gui/slick/interfaces/default/config_general.tmpl @@ -282,10 +282,10 @@ Timezone:

display dates and times in either your timezone or the shows network timezone

diff --git a/gui/slick/interfaces/default/config_providers.tmpl b/gui/slick/interfaces/default/config_providers.tmpl index f97624e2..7eaccdf6 100644 --- a/gui/slick/interfaces/default/config_providers.tmpl +++ b/gui/slick/interfaces/default/config_providers.tmpl @@ -6,710 +6,766 @@ #set global $title="Config - Providers" #set global $header="Search Providers" -#set global $sbPath="../.." +#set global $sbPath = '../..' -#set global $topmenu="config"# +#set global $topmenu = 'config' #import os.path -#include $os.path.join($sickbeard.PROG_DIR, "gui/slick/interfaces/default/inc_top.tmpl") +#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl') #if $varExists('header') -

$header

+

$header

#else -

$title

+

$title

#end if + +#set $html_selected = ' selected="selected"' +#set $html_checked = 'checked="checked" ' + -#if $sickbeard.USE_NZBS + +#set $methods_notused = [] +#if not $sickbeard.USE_NZBS + $methods_notused.append('Newznab') +#end if +#if not $sickbeard.USE_TORRENTS + $methods_notused.append('Torrent') +#end if + +#if $sickbeard.USE_NZBS or $sickbeard.USE_TORRENTS #end if +
+
+ + + +
+ + + + +
+
+
+

Provider Priorities

+

Check off and drag the providers into the order you want them to be used.

+

At least one provider is required but two are recommended.

+ +#if $methods_notused +
<%= '/'.join(x for x in methods_notused) %> providers can be enabled in Search Settings
+#else +
+#end if +
+ + +
    +#for $curProvider in $sickbeard.providers.sortedProviderList() + #if $curProvider.providerType == $GenericProvider.NZB and not $sickbeard.USE_NZBS + #continue + #elif $curProvider.providerType == $GenericProvider.TORRENT and not $sickbeard.USE_TORRENTS + #continue + #end if + #set $curName = $curProvider.getID() +
  • + /> + $curProvider.name + $curProvider.name +<%= '*' if not curProvider.supportsBacklog else '' %> +<%= '**' if 'EZRSS' == curProvider.name else '' %> + +
  • +#end for +
+ + +
+

*

Provider does not support backlog searches at this time

+#if $sickbeard.USE_TORRENTS +

**

Provider supports limited backlog searches, some episodes/qualities may not be available

+#end if + ##

!

Provider is NOT WORKING

+
+ + "/> +
+
+ +
+
+
+ +
+ + + +
+ +
+

Provider Options

+

Configure individual provider settings here.

+
+ +
+
+ +
+ + + +#for $curNewznabProvider in [$curProvider for $curProvider in $sickbeard.newznabProviderList] +
+ #if $curNewznabProvider.default and $curNewznabProvider.needs_auth +
+ +
+ +
+ +
+ #end if + + #if $hasattr($curNewznabProvider, 'enable_daily'): +
+ +
+ #end if + + #if $hasattr($curNewznabProvider, 'enable_backlog'): +
+ +
+ #end if + + #if $hasattr($curNewznabProvider, 'search_mode'): +
+ Season search mode + + + +

when searching for complete seasons, search for packs or collect single episodes

+
+
+ #end if + + #if $hasattr($curNewznabProvider, 'search_fallback'): +
+ +
+ #end if +
+#end for + +#for $curNzbProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.NZB and $curProvider not in $sickbeard.newznabProviderList]: +
+ #if $hasattr($curNzbProvider, 'username'): +
+ +
+ #end if + + #if $hasattr($curNzbProvider, 'api_key'): +
+ +
+ #end if + + + #if $hasattr($curNzbProvider, 'enable_daily'): +
+ +
+ #end if + + #if $hasattr($curNzbProvider, 'enable_backlog'): +
+ +
+ #end if + + #if $hasattr($curNzbProvider, 'search_fallback'): +
+ +
+ #end if + + #if $hasattr($curNzbProvider, 'search_mode'): +
+ + + +
+ #end if + +
+#end for + +#for $curTorrentProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.TORRENT]: +
+ #if $hasattr($curTorrentProvider, 'api_key'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'digest'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'hash'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'username'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'password'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'passkey'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'ratio'): +
+ + +
+ #end if + + #if $hasattr($curTorrentProvider, 'minseed'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'minleech'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'proxy'): +
+ +
+ + #if $hasattr($curTorrentProvider.proxy, 'url'): +
+ +
+ #end if + #end if + + #if $hasattr($curTorrentProvider, 'confirmed'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'freeleech'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'enable_daily'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'enable_backlog'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'search_fallback'): +
+ +
+ #end if + + #if $hasattr($curTorrentProvider, 'search_mode'): +
+ + + +
+ #end if + + #if $hasattr($curTorrentProvider, 'options'): +
+ +
+ Advanced options +
+ +
+
+ +
+
+ +
+
+
+ #end if + +
+#end for + +#if $provider_config_list +
+#end if +
+
+ + + +#if $sickbeard.USE_NZBS + +
+ +
+

Configure Custom
Newznab Providers

+

Add and setup or remove custom newznab providers.

+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+#end if + + + #if $sickbeard.USE_TORRENTS - + +
+ +
+

Configure Custom Torrent Providers

+

Add or remove custom RSS providers.

+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
#end if -
-
- +

-
- - -
+
-
-

Provider Priorities

-

Check off and drag the providers into the order you want them to be used.

-

At least one provider is required but two are recommended.

- - #if not $sickbeard.USE_NZBS or not $sickbeard.USE_TORRENTS: -
NZB/Torrent providers can be toggled in Search Settings
- #else: -
- #end if - -
-

*

Provider does not support backlog searches at this time.

-

**

Provider supports limited backlog searches, all episodes/qualities may not be available.

-

!

Provider is NOT WORKING.

-
-
- -
-
    - #for $curProvider in $sickbeard.providers.sortedProviderList(): - #if $curProvider.providerType == $GenericProvider.NZB and not $sickbeard.USE_NZBS: - #continue - #elif $curProvider.providerType == $GenericProvider.TORRENT and not $sickbeard.USE_TORRENTS: - #continue - #end if - #set $curName = $curProvider.getID() -
  • - - $curProvider.name - $curProvider.name - #if not $curProvider.supportsBacklog then "*" else ""# - #if $curProvider.name == "EZRSS" then "**" else ""# - -
  • - #end for -
- "/> -

-
-
- -
- -
-

Provider Options

-

Configure individual provider settings here.

-

Check with provider's website on how to obtain an API key if needed.

-
- -
-
- -
- - - - #for $curNewznabProvider in [$curProvider for $curProvider in $sickbeard.newznabProviderList]: -
- #if $curNewznabProvider.default and $curNewznabProvider.needs_auth -
- -
-
- -
- #end if - - #if $hasattr($curNewznabProvider, 'enable_daily'): -
- -
- #end if - - #if $hasattr($curNewznabProvider, 'enable_backlog'): -
- -
- #end if - - #if $hasattr($curNewznabProvider, 'search_fallback'): -
- -
- #end if - - #if $hasattr($curNewznabProvider, 'search_mode'): -
- - - -
- #end if - -
- #end for - - #for $curNzbProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.NZB and $curProvider not in $sickbeard.newznabProviderList]: -
- #if $hasattr($curNzbProvider, 'username'): -
- -
- #end if - - #if $hasattr($curNzbProvider, 'api_key'): -
- -
- #end if - - - #if $hasattr($curNzbProvider, 'enable_daily'): -
- -
- #end if - - #if $hasattr($curNzbProvider, 'enable_backlog'): -
- -
- #end if - - #if $hasattr($curNzbProvider, 'search_fallback'): -
- -
- #end if - - #if $hasattr($curNzbProvider, 'search_mode'): -
- - - -
- #end if - -
- #end for - - #for $curTorrentProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.TORRENT]: -
- #if $hasattr($curTorrentProvider, 'api_key'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'digest'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'hash'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'username'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'password'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'passkey'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'ratio'): -
- - -
- #end if - - #if $hasattr($curTorrentProvider, 'minseed'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'minleech'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'proxy'): -
- -
- - #if $hasattr($curTorrentProvider.proxy, 'url'): -
- -
- #end if - #end if - - #if $hasattr($curTorrentProvider, 'confirmed'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'freeleech'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'enable_daily'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'enable_backlog'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'search_fallback'): -
- -
- #end if - - #if $hasattr($curTorrentProvider, 'search_mode'): -
- - - -
- #end if - - #if $hasattr($curTorrentProvider, 'options'): -
- -
- Advanced options -
- -
-
- -
-
- -
-
-
- #end if - -
- #end for - - - - -
- -
-
- - #if $sickbeard.USE_NZBS -
- -
-

Configure Custom
Newznab Providers

-

Add and setup or remove custom Newznab providers.

-
- -
-
- -
- -
-
- -
-
- -
-
- - -
- -
- - - -
- -
- -
- -
- -
-
- #end if - - #if $sickbeard.USE_TORRENTS: - -
- -
-

Configure Custom Torrent Providers

-

Add and setup or remove custom RSS providers.

-
- -
-
- -
- -
-
- -
-
- -
-
- - -
- -
- -
- -
-
-
- #end if - -

- -
- - -
+ +
-#include $os.path.join($sickbeard.PROG_DIR,"gui/slick/interfaces/default/inc_bottom.tmpl") +#include $os.path.join($sickbeard.PROG_DIR,'gui/slick/interfaces/default/inc_bottom.tmpl') diff --git a/gui/slick/interfaces/default/config_search.tmpl b/gui/slick/interfaces/default/config_search.tmpl index c1115ea4..96fa4c25 100755 --- a/gui/slick/interfaces/default/config_search.tmpl +++ b/gui/slick/interfaces/default/config_search.tmpl @@ -38,7 +38,7 @@

Episode Search

-

How to manage searching with providers.

+

How to manage searching with providers.

diff --git a/gui/slick/js/config.js b/gui/slick/js/config.js index 813095e9..e908b0f8 100644 --- a/gui/slick/js/config.js +++ b/gui/slick/js/config.js @@ -1,27 +1,27 @@ $(document).ready(function(){ - $(".enabler").each(function(){ + $('.enabler').each(function(){ if (!$(this).prop('checked')) - $('#content_'+$(this).attr('id')).hide(); + $('#content_' + $(this).attr('id')).hide(); }); - $(".enabler").click(function() { + $('.enabler').click(function(){ if ($(this).prop('checked')) - $('#content_'+$(this).attr('id')).fadeIn("fast", "linear"); + $('#content_' + $(this).attr('id')).fadeIn('fast', 'linear'); else - $('#content_'+$(this).attr('id')).fadeOut("fast", "linear"); + $('#content_' + $(this).attr('id')).fadeOut('fast', 'linear'); }); - $(".viewIf").click(function() { + $('.viewIf').click(function(){ if ($(this).prop('checked')) { - $('.hide_if_'+$(this).attr('id')).css('display','none'); - $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + $('.hide_if_' + $(this).attr('id')).css('display','none'); + $('.show_if_' + $(this).attr('id')).fadeIn('fast', 'linear'); } else { - $('.show_if_'+$(this).attr('id')).css('display','none'); - $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear"); + $('.show_if_' + $(this).attr('id')).css('display','none'); + $('.hide_if_' + $(this).attr('id')).fadeIn('fast', 'linear'); } }); - $(".datePresets").click(function() { + $('.datePresets').click(function(){ var def = $('#date_presets').val() if ($(this).prop('checked') && '%x' == def) { def = '%a, %b %d, %Y' @@ -46,7 +46,7 @@ $(document).ready(function(){ $('#configForm').ajaxForm({ beforeSubmit: function(){ $('.config_submitter').each(function(){ - $(this).attr("disabled", "disabled"); + $(this).attr('disabled', 'disabled'); $(this).after(' Saving...'); $(this).hide(); }); @@ -58,7 +58,7 @@ $(document).ready(function(){ $('#api_key').click(function(){ $('#api_key').select() }); $("#generate_new_apikey").click(function(){ - $.get(sbRoot + '/config/general/generateKey', + $.get(sbRoot + '/config/general/generateKey', function(data){ if (data.error != undefined) { alert(data.error); @@ -68,8 +68,8 @@ $(document).ready(function(){ }); }); - $('#branchCheckout').click(function () { - url = sbRoot+'/home/branchCheckout?branch='+$("#branchVersion").val(); + $('#branchCheckout').click(function(){ + url = sbRoot + '/home/branchCheckout?branch=' + $('#branchVersion').val(); window.location.href = url; }); @@ -77,7 +77,7 @@ $(document).ready(function(){ function config_success(){ $('.config_submitter').each(function(){ - $(this).removeAttr("disabled"); + $(this).removeAttr('disabled'); $(this).next().remove(); $(this).show(); }); diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js index 279ab952..1a6cfe21 100644 --- a/gui/slick/js/configProviders.js +++ b/gui/slick/js/configProviders.js @@ -20,39 +20,39 @@ $(document).ready(function(){ * @return no return data. Function updateNewznabCaps() is run at callback */ $.fn.getCategories = function (isDefault, selectedProvider) { - - var name = selectedProvider[0]; - var url = selectedProvider[1]; - var key = selectedProvider[2]; - - if (!name) - return; - - if (!url) - return; - - if (!key) - return; - - var params = {url: url, name: name, key: key}; - var returnData; - - $.getJSON(sbRoot + '/config/providers/getNewznabCategories', params, + + var name = selectedProvider[0]; + var url = selectedProvider[1]; + var key = selectedProvider[2]; + + if (!name) + return; + + if (!url) + return; + + if (!key) + return; + + var params = {url: url, name: name, key: key}; + var returnData; + + $.getJSON(sbRoot + '/config/providers/getNewznabCategories', params, function(data){ updateNewznabCaps( data, selectedProvider ); console.debug(data.tv_categories); }); } - + $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) { - url = $.trim(url); - if (!url) - return; - - if (!/^https?:\/\//i.test(url)) - url = "http://" + url; - + url = $.trim(url); + if (!url) + return; + + if (!/^https?:\/\//i.test(url)) + url = 'http://' + url; + if (url.match('/$') == null) url = url + '/'; @@ -64,12 +64,12 @@ $(document).ready(function(){ $(this).populateNewznabSection(); } - if ($('#provider_order_list > #'+id).length == 0 && showProvider != false) { + if ($('#provider_order_list > #' + id).length == 0 && showProvider != false) { var toAdd = '
  • ' + name + ' ' + name + '
  • ' $('#provider_order_list').append(toAdd); - $('#provider_order_list').sortable("refresh"); + $('#provider_order_list').sortable('refresh'); } $(this).makeNewznabProviderString(); @@ -84,12 +84,12 @@ $(document).ready(function(){ $('#editATorrentRssProvider').addOption(id, name); $(this).populateTorrentRssSection(); - if ($('#provider_order_list > #'+id).length == 0) { + if ($('#provider_order_list > #' + id).length == 0) { var toAdd = '
  • ' + name + ' ' + name + '
  • ' $('#provider_order_list').append(toAdd); - $('#provider_order_list').sortable("refresh"); + $('#provider_order_list').sortable('refresh'); } $(this).makeTorrentRssProviderString(); @@ -113,7 +113,7 @@ $(document).ready(function(){ $('#editANewznabProvider').removeOption(id); delete newznabProviders[id]; $(this).populateNewznabSection(); - $('li').remove('#'+id); + $('li').remove('#' + id); $(this).makeNewznabProviderString(); } @@ -129,7 +129,7 @@ $(document).ready(function(){ $('#editATorrentRssProvider').removeOption(id); delete torrentRssProviders[id]; $(this).populateTorrentRssSection(); - $('li').remove('#'+id); + $('li').remove('#' + id); $(this).makeTorrentRssProviderString(); } @@ -144,115 +144,115 @@ $(document).ready(function(){ $('#newznab_update_div').hide(); $('#newznab_cat').attr('disabled','disabled'); $('#newznab_cap').attr('disabled','disabled'); - - $("#newznab_cat option").each(function() { - $(this).remove(); - return; + + $('#newznab_cat option').each(function() { + $(this).remove(); + return; }); - - $("#newznab_cap option").each(function() { - $(this).remove(); - return; + + $('#newznab_cap option').each(function() { + $(this).remove(); + return; }); - + } else { var data = newznabProviders[selectedProvider][1]; var isDefault = newznabProviders[selectedProvider][0]; $('#newznab_add_div').hide(); $('#newznab_update_div').show(); - $('#newznab_cat').removeAttr("disabled"); - $('#newznab_cap').removeAttr("disabled"); + $('#newznab_cat').removeAttr('disabled'); + $('#newznab_cap').removeAttr('disabled'); } $('#newznab_name').val(data[0]); $('#newznab_url').val(data[1]); $('#newznab_key').val(data[2]); - + //Check if not already array if (typeof data[3] === 'string') { - rrcat = data[3].split(",") - } - else { - rrcat = data[3]; + rrcat = data[3].split(',') } - + else { + rrcat = data[3]; + } + // Update the category select box (on the right) var newCatOptions = []; if (rrcat) { - rrcat.forEach(function (cat) { - newCatOptions.push({text : cat, value : cat}); + rrcat.forEach(function (cat) { + newCatOptions.push({text : cat, value : cat}); }); - $("#newznab_cat").replaceOptions(newCatOptions); + $('#newznab_cat').replaceOptions(newCatOptions); }; - + if (selectedProvider == 'addNewznab') { - $('#newznab_name').removeAttr("disabled"); - $('#newznab_url').removeAttr("disabled"); + $('#newznab_name').removeAttr('disabled'); + $('#newznab_url').removeAttr('disabled'); } else { - $('#newznab_name').attr("disabled", "disabled"); + $('#newznab_name').attr('disabled', 'disabled'); if (isDefault) { - $('#newznab_url').attr("disabled", "disabled"); - $('#newznab_delete').attr("disabled", "disabled"); + $('#newznab_url').attr('disabled', 'disabled'); + $('#newznab_delete').attr('disabled', 'disabled'); } else { - $('#newznab_url').removeAttr("disabled"); - $('#newznab_delete').removeAttr("disabled"); - + $('#newznab_url').removeAttr('disabled'); + $('#newznab_delete').removeAttr('disabled'); + //Get Categories Capabilities if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) { - $(this).getCategories(isDefault, data); + $(this).getCategories(isDefault, data); } else { - updateNewznabCaps( null, data ); + updateNewznabCaps( null, data ); } } } } ifExists = function(loopThroughArray, searchFor) { - var found = false; - - loopThroughArray.forEach(function(rootObject) { - if (rootObject.name == searchFor) { - found = true; - } - console.log(rootObject.name + " while searching for: "+ searchFor); - }); - return found; + var found = false; + + loopThroughArray.forEach(function(rootObject) { + if (rootObject.name == searchFor) { + found = true; + } + console.log(rootObject.name + ' while searching for: ' + searchFor); + }); + return found; }; - + /** - * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name + * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name * and category capabilities. Return * @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities. * @param {Array} selectedProvider * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result. */ updateNewznabCaps = function( newzNabCaps, selectedProvider ) { - - if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) { - $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); - } - - //Loop through the array and if currently selected newznab provider name matches one in the array, use it to + + if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) { + $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); + } + + //Loop through the array and if currently selected newznab provider name matches one in the array, use it to //update the capabilities select box (on the left). if (selectedProvider[0]) { - $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) { - - if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) { - var newCapOptions = []; - newzNabCap.categories.forEach(function(category_set) { - if (category_set.id && category_set.name) { - newCapOptions.push({value : category_set.id, text : category_set.name + "(" + category_set.id + ")"}); - }; - }); - $("#newznab_cap").replaceOptions(newCapOptions); - } + $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) { + + if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) { + var newCapOptions = []; + newzNabCap.categories.forEach(function(category_set) { + if (category_set.id && category_set.name) { + newCapOptions.push({value : category_set.id, text : category_set.name + '(' + category_set.id + ')'}); + }; + }); + $('#newznab_cap').replaceOptions(newCapOptions); + } }); }; } - + $.fn.makeNewznabProviderString = function() { var provStrings = new Array(); @@ -284,14 +284,14 @@ $(document).ready(function(){ $('#torrentrss_cookies').val(data[2]); if (selectedProvider == 'addTorrentRss') { - $('#torrentrss_name').removeAttr("disabled"); - $('#torrentrss_url').removeAttr("disabled"); - $('#torrentrss_cookies').removeAttr("disabled"); + $('#torrentrss_name').removeAttr('disabled'); + $('#torrentrss_url').removeAttr('disabled'); + $('#torrentrss_cookies').removeAttr('disabled'); } else { - $('#torrentrss_name').attr("disabled", "disabled"); - $('#torrentrss_url').removeAttr("disabled"); - $('#torrentrss_cookies').removeAttr("disabled"); - $('#torrentrss_delete').removeAttr("disabled"); + $('#torrentrss_name').attr('disabled', 'disabled'); + $('#torrentrss_url').removeAttr('disabled'); + $('#torrentrss_cookies').removeAttr('disabled'); + $('#torrentrss_delete').removeAttr('disabled'); } } @@ -309,26 +309,26 @@ $(document).ready(function(){ $.fn.refreshProviderList = function() { - var idArr = $("#provider_order_list").sortable('toArray'); + var idArr = $('#provider_order_list').sortable('toArray'); var finalArr = new Array(); $.each(idArr, function(key, val) { - var checked = + $('#enable_'+val).prop('checked') ? '1' : '0'; + var checked = + $('#enable_' + val).prop('checked') ? '1' : '0'; finalArr.push(val + ':' + checked); }); - $("#provider_order").val(finalArr.join(' ')); + $('#provider_order').val(finalArr.join(' ')); } var newznabProviders = new Array(); var torrentRssProviders = new Array(); - + $(this).on('change', '.newznab_key', function(){ var provider_id = $(this).attr('id'); provider_id = provider_id.substring(0, provider_id.length-'_hash'.length); - var url = $('#'+provider_id+'_url').val(); - var cat = $('#'+provider_id+'_cat').val(); + var url = $('#' + provider_id + '_url').val(); + var cat = $('#' + provider_id + '_cat').val(); var key = $(this).val(); $(this).updateProvider(provider_id, url, key, cat); @@ -339,16 +339,16 @@ $(document).ready(function(){ var selectedProvider = $('#editANewznabProvider :selected').val(); - if (selectedProvider == "addNewznab") + if (selectedProvider == 'addNewznab') return; - + var url = $('#newznab_url').val(); var key = $('#newznab_key').val(); var cat = $('#newznab_cat option').map(function(i, opt) { - return $(opt).text(); - }).toArray().join(','); - + return $(opt).text(); + }).toArray().join(','); + $(this).updateProvider(selectedProvider, url, key, cat); }); @@ -357,7 +357,7 @@ $(document).ready(function(){ var selectedProvider = $('#editATorrentRssProvider :selected').val(); - if (selectedProvider == "addTorrentRss") + if (selectedProvider == 'addTorrentRss') return; var url = $('#torrentrss_url').val(); @@ -385,46 +385,46 @@ $(document).ready(function(){ $(this).on('click', '#newznab_cat_update', function(){ console.debug('Clicked Button'); - + //Maybe check if there is anything selected? - $("#newznab_cat option").each(function() { - $(this).remove(); - return; + $('#newznab_cat option').each(function() { + $(this).remove(); + return; }); - + var newOptions = []; - - // When the update botton is clicked, loop through the capabilities list + + // When the update botton is clicked, loop through the capabilities list // and copy the selected category id's to the category list on the right. - $("#newznab_cap option").each(function(){ + $('#newznab_cap option').each(function(){ if($(this).attr('selected') == 'selected') { - var selected_cat = $(this).val(); - console.debug(selected_cat); - newOptions.push({text: selected_cat, value: selected_cat}) + var selected_cat = $(this).val(); + console.debug(selected_cat); + newOptions.push({text: selected_cat, value: selected_cat}) }; }); - - $("#newznab_cat").replaceOptions(newOptions); - - var selectedProvider = $('#editANewznabProvider :selected').val(); - if (selectedProvider == "addNewznab") - return; - - var url = $('#newznab_url').val(); - var key = $('#newznab_key').val(); - var cat = $('#newznab_cat option').map(function(i, opt) { - return $(opt).text(); - }).toArray().join(','); - - $("#newznab_cat option:not([value])").remove(); - + $('#newznab_cat').replaceOptions(newOptions); + + var selectedProvider = $('#editANewznabProvider :selected').val(); + if (selectedProvider == 'addNewznab') + return; + + var url = $('#newznab_url').val(); + var key = $('#newznab_key').val(); + + var cat = $('#newznab_cat option').map(function(i, opt) { + return $(opt).text(); + }).toArray().join(','); + + $('#newznab_cat option:not([value])').remove(); + $(this).updateProvider(selectedProvider, url, key, cat); }); - - + + $('#newznab_add').click(function(){ var selectedProvider = $('#editANewznabProvider :selected').val(); @@ -433,19 +433,19 @@ $(document).ready(function(){ var url = $.trim($('#newznab_url').val()); var key = $.trim($('#newznab_key').val()); //var cat = $.trim($('#newznab_cat').val()); - + var cat = $.trim($('#newznab_cat option').map(function(i, opt) { - return $(opt).text();}).toArray().join(',')); - - + return $(opt).text();}).toArray().join(',')); + + if (!name) - return; + return; if (!url) - return; + return; if (!key) - return; + return; var params = {name: name}; @@ -496,12 +496,12 @@ $(document).ready(function(){ }); - $(this).on('change', "[class='providerDiv_tip'] input", function(){ - $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone()); - $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone()); + $(this).on('change', '[class="providerDiv_tip"] input', function(){ + $('div .providerDiv ' + '[name=' + $(this).attr('name') + ']').replaceWith($(this).clone()); + $('div .providerDiv ' + '[newznab_name=' + $(this).attr('id') + ']').replaceWith($(this).clone()); }); - $(this).on('change', "[class='providerDiv_tip'] select", function(){ + $(this).on('change', '[class="providerDiv_tip"] select', function(){ $(this).find('option').each( function() { if ($(this).is(':selected')) { @@ -511,34 +511,34 @@ $(document).ready(function(){ } }); - $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone())}); + $('div .providerDiv ' + '[name=' + $(this).attr('name') + ']').empty().replaceWith($(this).clone())}); $(this).on('change', '.enabler', function(){ if ($(this).is(':checked')) { - $('.content_'+$(this).attr('id')).each( function() { + $('.content_' + $(this).attr('id')).each( function() { $(this).show() }) } else { - $('.content_'+$(this).attr('id')).each( function() { + $('.content_' + $(this).attr('id')).each( function() { $(this).hide() }) } }); - $(".enabler").each(function(){ + $('.enabler').each(function(){ if (!$(this).is(':checked')) { - $('.content_'+$(this).attr('id')).hide(); + $('.content_' + $(this).attr('id')).hide(); } else { - $('.content_'+$(this).attr('id')).show(); + $('.content_' + $(this).attr('id')).show(); } }); $.fn.makeTorrentOptionString = function(provider_id) { - var seed_ratio = $('.providerDiv_tip #'+provider_id+'_seed_ratio').prop('value'); - var seed_time = $('.providerDiv_tip #'+provider_id+'_seed_time').prop('value'); - var process_met = $('.providerDiv_tip #'+provider_id+'_process_method').prop('value'); - var option_string = $('.providerDiv_tip #'+provider_id+'_option_string'); + var seed_ratio = $('.providerDiv_tip #' + provider_id + '_seed_ratio').prop('value'); + var seed_time = $('.providerDiv_tip #' + provider_id + '_seed_time').prop('value'); + var process_met = $('.providerDiv_tip #' + provider_id + '_process_method').prop('value'); + var option_string = $('.providerDiv_tip #' + provider_id + '_option_string'); option_string.val([seed_ratio, seed_time, process_met].join('|')) @@ -548,11 +548,11 @@ $(document).ready(function(){ var provider_id = $(this).attr('id').split('_')[0]; - $(this).makeTorrentOptionString(provider_id); + $(this).makeTorrentOptionString(provider_id); }); - - + + $.fn.replaceOptions = function(options) { var self, $option; @@ -560,8 +560,8 @@ $(document).ready(function(){ self = this; $.each(options, function(index, option) { - $option = $("") - .attr("value", option.value) + $option = $('') + .attr('value', option.value) .text(option.text); self.append($option); }); @@ -569,18 +569,18 @@ $(document).ready(function(){ // initialization stuff - + $.fn.newznabProvidersCapabilities = []; $(this).showHideProviders(); - $("#provider_order_list").sortable({ + $('#provider_order_list').sortable({ placeholder: 'ui-state-highlight', update: function (event, ui) { $(this).refreshProviderList(); } }); - $("#provider_order_list").disableSelection(); + $('#provider_order_list').disableSelection(); }); \ No newline at end of file From bf14d08d9a891377f952ba8eb1d4076253938fe9 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 22 Nov 2014 10:53:58 +0800 Subject: [PATCH 33/43] Update changelog for 0.4.0 release --- CHANGES.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7a289c4c..970c81c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.x.x (2014-11-xx xx:xx:xx UTC) +### 0.4.0 (2014-11-22 02:52:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -45,10 +45,6 @@ * Change case of labels in General Config/Interface/Timezone * Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab -[develop changelog] -* Fix typo for commit "ShowData handler" i.e. SHA-1:3eec217 -* Fix adding show from TVRage API - ### 0.3.1 (2014-11-19 16:40:00 UTC) From d735d81ed58124d8a54132c5ba2c8dd492fc4599 Mon Sep 17 00:00:00 2001 From: JackDandy Date: Sat, 22 Nov 2014 23:30:09 +0000 Subject: [PATCH 34/43] Fix typo on General Config/Misc. --- CHANGES.md | 1 + gui/slick/interfaces/default/config_general.tmpl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 970c81c9..2186fa0c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -44,6 +44,7 @@ * Fix failing "Providers" link on Config/Search Settings/Episode Search * Change case of labels in General Config/Interface/Timezone * Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab +* Fix typo on General Config/Misc ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/interfaces/default/config_general.tmpl b/gui/slick/interfaces/default/config_general.tmpl index 756d4d03..1b2cd342 100644 --- a/gui/slick/interfaces/default/config_general.tmpl +++ b/gui/slick/interfaces/default/config_general.tmpl @@ -68,7 +68,7 @@ Update shows on startup -

    with information such as next air dates, show ended, etc. Disable for a faster startup as show info is sheduled to update in the background anyway

    +

    with information such as next air dates, show ended, etc. Disable for a faster startup as show info is scheduled to update in the background anyway

    From 67c3352eee224865e8051b1093453d867bb0f11b Mon Sep 17 00:00:00 2001 From: JackDandy Date: Sun, 23 Nov 2014 03:27:00 +0000 Subject: [PATCH 35/43] Fix Add Trending Shows "Not In library" now filters tvrage added shows. Add a hover over text "In library" on Add Trending Shows to display tv database show was added from. --- CHANGES.md | 5 +++-- .../interfaces/default/home_trendingShows.tmpl | 8 ++++---- sickbeard/webserve.py | 15 ++++++++++++--- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2186fa0c..9994c084 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-22 02:52:00 UTC) +### 0.4.0 (2014-11-23 03:27:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -45,7 +45,8 @@ * Change case of labels in General Config/Interface/Timezone * Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab * Fix typo on General Config/Misc - +* Fix Add Trending Shows "Not In library" now filters tvrage added shows +* Add a hover over text "In library" on Add Trending Shows to display tv database show was added from ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/interfaces/default/home_trendingShows.tmpl b/gui/slick/interfaces/default/home_trendingShows.tmpl index 41997405..032ee11f 100644 --- a/gui/slick/interfaces/default/home_trendingShows.tmpl +++ b/gui/slick/interfaces/default/home_trendingShows.tmpl @@ -131,7 +131,7 @@ #set $image = re.sub(r'(.*)(\..*?)$', r'\1-300\2', $cur_show['images']['poster'], 0, re.IGNORECASE | re.MULTILINE) -
    +
    @@ -146,11 +146,11 @@ $cur_show['ratings']['votes'] votes
    -#if 'ExistsInLibrary' in $cur_show['tvdb_id']: -

    In library

    +#if ':' in $cur_show['show_id']: +

    In library

    #else #set $encoded_show_title = urllib.quote($cur_show['title'].encode("utf-8")) - Add Show + Add Show #end if
    diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 6dce5737..bba1be70 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -2993,9 +2993,18 @@ class NewHomeAddShows(MainHandler): t.trending_inlibrary = 0 if None is not t.trending_shows: for item in t.trending_shows: - if helpers.findCertainShow(sickbeard.showList, int(item['tvdb_id'])): - t.trending_inlibrary += 1 - item['tvdb_id'] = u'ExistsInLibrary' + tvdbs = ['tvdb_id', 'tvrage_id'] + for index, tvdb in enumerate(tvdbs): + try: + item[u'show_id'] = item[tvdb] + tvshow = helpers.findCertainShow(sickbeard.showList, int(item[tvdb])) + except: + continue + # check tvshow indexer is not using the same id from another indexer + if tvshow and (index + 1) == tvshow.indexer: + item[u'show_id'] = u'%s:%s' % (tvshow.indexer, item[tvdb]) + t.trending_inlibrary += 1 + break return _munge(t) From 7930cbcd8046aa0fbb02920031f6ea31a2efd3b1 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 23 Nov 2014 20:45:50 +0000 Subject: [PATCH 36/43] Fix reduces time API endpoint Shows takes to return results. Fix indexer mapper caching. Fix tvrage API garbage collection. --- CHANGES.md | 5 +++-- lib/tvrage_api/tvrage_api.py | 11 ++++------- sickbeard/helpers.py | 17 +++++++++++------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9994c084..2e2d839f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-23 03:27:00 UTC) +### 0.4.0 (2014-11-23 08:44:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -43,10 +43,11 @@ * Fix failing "Search Settings" link that is shown on Config/Search Providers when Torrents Search is not enabled * Fix failing "Providers" link on Config/Search Settings/Episode Search * Change case of labels in General Config/Interface/Timezone -* Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab +* Split enabled from not enabled providers in the Configure Provider drop down on the Providers Options tab * Fix typo on General Config/Misc * Fix Add Trending Shows "Not In library" now filters tvrage added shows * Add a hover over text "In library" on Add Trending Shows to display tv database show was added from +* Fix reduces time API endpoint Shows takes to return results ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/lib/tvrage_api/tvrage_api.py b/lib/tvrage_api/tvrage_api.py index 70c87970..95a49811 100644 --- a/lib/tvrage_api/tvrage_api.py +++ b/lib/tvrage_api/tvrage_api.py @@ -97,15 +97,12 @@ class ShowContainer(dict): #keep only the 100th latest results if time.time() - self._lastgc > 20: - tbd = self._stack[:-100] - i = 0 - for o in tbd: + for o in self._stack[:-100]: del self[o] - del self._stack[i] - i += 1 + + self._stack = self._stack[-100:] - _lastgc = time.time() - del tbd + self._lastgc = time.time() super(ShowContainer, self).__setitem__(key, value) diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 92de6d6b..9439fe85 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -667,9 +667,9 @@ def get_all_episodes_from_absolute_number(show, absolute_numbers, indexer_id=Non def sanitizeSceneName(name, ezrss=False): """ Takes a show name and returns the "scenified" version of it. - + ezrss: If true the scenified version will follow EZRSS's cracksmoker rules as best as possible - + Returns: A string containing the scene version of the show name given. """ @@ -900,7 +900,7 @@ def md5_for_file(filename, block_size=2 ** 16): def get_lan_ip(): """ - Simple function to get LAN localhost_ip + Simple function to get LAN localhost_ip http://stackoverflow.com/questions/11735821/python-get-localhost-ip """ @@ -970,7 +970,7 @@ By Pedro Jose Pereira Vieito (@pvieito) * The keys should be unique for each device To add a new encryption_version: - 1) Code your new encryption_version + 1) Code your new encryption_version 2) Update the last encryption_version available in webserve.py 3) Remember to maintain old encryption versions and key generators for retrocompatibility """ @@ -1164,8 +1164,13 @@ def mapIndexersToShow(showObj): # for each mapped entry for curResult in sqlResults: - logger.log(u"Found indexer mapping in cache for show: " + showObj.name, logger.DEBUG) - mapped[int(curResult['mindexer'])] = int(curResult['mindexer_id']) + nlist = [i for i in curResult if None is not i] + # Check if its mapped with both tvdb and tvrage. + if 4 <= len(nlist): + logger.log(u"Found indexer mapping in cache for show: " + showObj.name, logger.DEBUG) + mapped[int(curResult['mindexer'])] = int(curResult['mindexer_id']) + break + else: sql_l = [] for indexer in sickbeard.indexerApi().indexers: From 9ff267bd7669314c60f852e5075b02b96414e185 Mon Sep 17 00:00:00 2001 From: Prinz23 Date: Mon, 24 Nov 2014 00:55:00 +0000 Subject: [PATCH 37/43] Fix Coming Eps Page to include shows +/- 1 day for time zone corrections. More detail... Episodes airing in a different time zone to the users own can be missing on the Coming Episodes Page. For today, the current day next week, and the last day in the missing episode range; these 3 days (+/- 1 day) can be missing episodes from the display if they air on a different day in their time zone compared to the users current day. All episodes in the banner layout for today may display as red or green background even if not aired/missing yet because of their airing time. The background colour of the first episode of today in banner view would be shown for all episodes today in this view, since the variable for the episode ending which determines the background colour was only set for the first episode after the today's day header. Technical detail... Fix banner view: cur_ep_enddate wasn't set for every episode. Remove duplicates from SQL result. --- CHANGES.md | 3 ++- gui/slick/interfaces/default/comingEpisodes.tmpl | 1 + sickbeard/webserve.py | 11 +++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2e2d839f..c04b3b96 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-23 08:44:00 UTC) +### 0.4.0 (2014-11-24 00:55:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -48,6 +48,7 @@ * Fix Add Trending Shows "Not In library" now filters tvrage added shows * Add a hover over text "In library" on Add Trending Shows to display tv database show was added from * Fix reduces time API endpoint Shows takes to return results +* Fix Coming Eps Page to include shows +/- 1 day for time zone corrections ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/interfaces/default/comingEpisodes.tmpl b/gui/slick/interfaces/default/comingEpisodes.tmpl index a4645cf7..1a5299bc 100644 --- a/gui/slick/interfaces/default/comingEpisodes.tmpl +++ b/gui/slick/interfaces/default/comingEpisodes.tmpl @@ -375,6 +375,7 @@ #set $today_header = True #end if #if $runtime: + #set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime) #if $cur_ep_enddate < $today: #set $show_div = 'ep_listing listing-overdue' #elif $cur_ep_airdate >= $next_week.date(): diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index bba1be70..09a69e72 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -351,11 +351,12 @@ class MainHandler(RequestHandler): def comingEpisodes(self, layout="None"): - today1 = datetime.date.today() + today1 = datetime.date.today() - datetime.timedelta(days=1) today = today1.toordinal() + tommorrow = (datetime.date.today() + datetime.timedelta(days=1)) next_week1 = (datetime.date.today() + datetime.timedelta(days=7)) - next_week = next_week1.toordinal() - recently = (datetime.date.today() - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + next_week = (next_week1 + datetime.timedelta(days=1)).toordinal() + recently = (today1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() done_show_list = [] qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED] @@ -378,9 +379,11 @@ class MainHandler(RequestHandler): more_sql_results = myDB.select( "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND tv_shows.indexer_id = tv_episodes.showid AND airdate < ? AND airdate >= ? AND tv_episodes.status = ? AND tv_episodes.status NOT IN (" + ','.join( - ['?'] * len(qualList)) + ")", [today, recently, WANTED] + qualList) + ['?'] * len(qualList)) + ")", [tommorrow, recently, WANTED] + qualList) sql_results += more_sql_results + sql_results = list(set(sql_results)) + # sort by localtime sorts = { 'date': (lambda x, y: cmp(x["localtime"], y["localtime"])), From fb70e80461c12a3bdc7488acbfbe3141c003a0ae Mon Sep 17 00:00:00 2001 From: Prinz23 Date: Mon, 24 Nov 2014 13:05:29 +0100 Subject: [PATCH 38/43] Fix items shown for the current week on Coming Episodes/Calendar Layout. Other data: past and after next week isn't shown in this view. Fix wrong sql operator being used. Fix: convert tomorrow toordinal(). Change bring webapi inline to these changes. --- sickbeard/webapi.py | 47 +++++++++++++++++++++++++++---------------- sickbeard/webserve.py | 28 +++++++++++++++----------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index 1ee07e60..c2ddce29 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -725,17 +725,22 @@ class CMD_ComingEpisodes(ApiCall): def run(self): """ display the coming episodes """ - today = datetime.date.today().toordinal() - next_week = (datetime.date.today() + datetime.timedelta(days=7)).toordinal() - recently = (datetime.date.today() - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + today1 = datetime.date.today() + today = today1.toordinal() + yesterday1 = today1 - datetime.timedelta(days=1) + yesterday = yesterday1.toordinal() + tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal() + next_week1 = (datetime.date.today() + datetime.timedelta(days=7)) + next_week = (next_week1 + datetime.timedelta(days=1)).toordinal() + recently = (yesterday1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() done_show_list = [] qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED] - myDB = db.DBConnection(row_type="dict") + myDB = db.DBConnection() sql_results = myDB.select( - "SELECT airdate, airs, episode, name AS 'ep_name', description AS 'ep_plot', network, season, showid AS 'indexerid', show_name, tv_shows.quality AS quality, tv_shows.status AS 'show_status', tv_shows.paused AS 'paused' FROM tv_episodes, tv_shows WHERE season != 0 AND airdate >= ? AND airdate < ? AND tv_shows.indexer_id = tv_episodes.showid AND tv_episodes.status NOT IN (" + ','.join( - ['?'] * len(qualList)) + ")", [today, next_week] + qualList) + "SELECT airdate, airs, episode, name AS 'ep_name', description AS 'ep_plot', network, season, showid AS 'indexerid', show_name, tv_shows.quality AS quality, tv_shows.status AS 'show_status', tv_shows.paused AS 'paused' FROM tv_episodes, tv_shows WHERE season != 0 AND airdate >= ? AND airdate <= ? AND tv_shows.indexer_id = tv_episodes.showid AND tv_episodes.status NOT IN (" + ','.join( + ['?'] * len(qualList)) + ")", [yesterday, next_week] + qualList) for cur_result in sql_results: done_show_list.append(int(cur_result["indexerid"])) @@ -748,17 +753,26 @@ class CMD_ComingEpisodes(ApiCall): sql_results += more_sql_results more_sql_results = myDB.select( - "SELECT airdate, airs, episode, name AS 'ep_name', description AS 'ep_plot', network, season, showid AS 'indexerid', show_name, tv_shows.quality AS quality, tv_shows.status AS 'show_status', tv_shows.paused AS 'paused' FROM tv_episodes, tv_shows WHERE season != 0 AND tv_shows.indexer_id = tv_episodes.showid AND airdate < ? AND airdate >= ? AND tv_episodes.status = ? AND tv_episodes.status NOT IN (" + ','.join( - ['?'] * len(qualList)) + ")", [today, recently, WANTED] + qualList) + "SELECT airdate, airs, episode, name AS 'ep_name', description AS 'ep_plot', network, season, showid AS 'indexerid', show_name, tv_shows.quality AS quality, tv_shows.status AS 'show_status', tv_shows.paused AS 'paused' FROM tv_episodes, tv_shows WHERE season != 0 AND tv_shows.indexer_id = tv_episodes.showid AND airdate <= ? AND airdate >= ? AND tv_episodes.status = ? AND tv_episodes.status NOT IN (" + ','.join( + ['?'] * len(qualList)) + ")", [tomorrow, recently, WANTED] + qualList) sql_results += more_sql_results + sql_results = list(set(sql_results)) + + # make a dict out of the sql results + sql_results = [dict(row) for row in sql_results] + # sort by air date sorts = { - 'date': (lambda x, y: cmp(int(x["airdate"]), int(y["airdate"]))), - 'show': (lambda a, b: cmp(a["show_name"], b["show_name"])), - 'network': (lambda a, b: cmp(a["network"], b["network"])), + 'date': (lambda x, y: cmp(x["parsed_datetime"], y["parsed_datetime"])), + 'show': (lambda a, b: cmp((a["show_name"], a["parsed_datetime"]), (b["show_name"], b["parsed_datetime"]))), + 'network': (lambda a, b: cmp((a["network"], a["parsed_datetime"]), (b["network"], b["parsed_datetime"]))), } + # add localtime to the dict + for index, item in enumerate(sql_results): + sql_results[index]['parsed_datetime'] = network_timezones.parse_date_time(item['airdate'], item['airs'], item['network']) + sql_results.sort(sorts[self.sort]) finalEpResults = {} @@ -777,9 +791,7 @@ class CMD_ComingEpisodes(ApiCall): if ep["paused"] and not self.paused: continue - ep['airs'] = str(ep['airs']).replace('am', ' AM').replace('pm', ' PM').replace(' ', ' ') - dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(network_timezones.parse_date_time(int(ep['airdate']), ep['airs'], ep['network'])) - ep['airdate'] = dtEpisodeAirs.toordinal() + ep['airdate'] = int(ep["airdate"]) status = "soon" if ep["airdate"] < today: @@ -801,12 +813,13 @@ class CMD_ComingEpisodes(ApiCall): ep["quality"] = _get_quality_string(ep["quality"]) # clean up tvdb horrible airs field - ep['airs'] = sbdatetime.sbdatetime.sbftime(dtEpisodeAirs, t_preset=timeFormat).lstrip('0').replace(' 0', ' ') + ep['airs'] = str(ep['airs']).replace('am', ' AM').replace('pm', ' PM').replace(' ', ' ') # start day of the week on 1 (monday) - ep['weekday'] = 1 + datetime.date.fromordinal(dtEpisodeAirs.toordinal()).weekday() + ep['weekday'] = 1 + datetime.date.fromordinal(ep['airdate']).weekday() # Add tvdbid for backward compability ep["tvdbid"] = ep['indexerid'] - ep['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat) + ep['airdate'] = sbdatetime.sbdatetime.sbfdate(datetime.date.fromordinal(ep['airdate']), d_preset=dateFormat) + ep['parsed_datetime'] = sbdatetime.sbdatetime.sbfdatetime(ep['parsed_datetime'], d_preset=dateFormat, t_preset='%H:%M %z') # TODO: check if this obsolete if not status in finalEpResults: diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 09a69e72..eeb2582e 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -353,33 +353,37 @@ class MainHandler(RequestHandler): today1 = datetime.date.today() - datetime.timedelta(days=1) today = today1.toordinal() - tommorrow = (datetime.date.today() + datetime.timedelta(days=1)) + tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal() next_week1 = (datetime.date.today() + datetime.timedelta(days=7)) next_week = (next_week1 + datetime.timedelta(days=1)).toordinal() - recently = (today1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + if not (layout and layout in ('calendar')) and not (sickbeard.COMING_EPS_LAYOUT and sickbeard.COMING_EPS_LAYOUT in ('calendar')): + recently = (today1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + else: + recently = today done_show_list = [] qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED] myDB = db.DBConnection() sql_results = myDB.select( - "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND airdate >= ? AND airdate < ? AND tv_shows.indexer_id = tv_episodes.showid AND tv_episodes.status NOT IN (" + ','.join( + "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND airdate >= ? AND airdate <= ? AND tv_shows.indexer_id = tv_episodes.showid AND tv_episodes.status NOT IN (" + ','.join( ['?'] * len(qualList)) + ")", [today, next_week] + qualList) for cur_result in sql_results: done_show_list.append(int(cur_result["showid"])) - more_sql_results = myDB.select( - "SELECT *, tv_shows.status as show_status FROM tv_episodes outer_eps, tv_shows WHERE season != 0 AND showid NOT IN (" + ','.join( - ['?'] * len( - done_show_list)) + ") AND tv_shows.indexer_id = outer_eps.showid AND airdate = (SELECT airdate FROM tv_episodes inner_eps WHERE inner_eps.season != 0 AND inner_eps.showid = outer_eps.showid AND inner_eps.airdate >= ? ORDER BY inner_eps.airdate ASC LIMIT 1) AND outer_eps.status NOT IN (" + ','.join( - ['?'] * len(Quality.DOWNLOADED + Quality.SNATCHED)) + ")", - done_show_list + [next_week] + Quality.DOWNLOADED + Quality.SNATCHED) - sql_results += more_sql_results + if not (layout and layout in ('calendar')) and not (sickbeard.COMING_EPS_LAYOUT and sickbeard.COMING_EPS_LAYOUT in ('calendar')): + more_sql_results = myDB.select( + "SELECT *, tv_shows.status as show_status FROM tv_episodes outer_eps, tv_shows WHERE season != 0 AND showid NOT IN (" + ','.join( + ['?'] * len( + done_show_list)) + ") AND tv_shows.indexer_id = outer_eps.showid AND airdate = (SELECT airdate FROM tv_episodes inner_eps WHERE inner_eps.season != 0 AND inner_eps.showid = outer_eps.showid AND inner_eps.airdate >= ? ORDER BY inner_eps.airdate ASC LIMIT 1) AND outer_eps.status NOT IN (" + ','.join( + ['?'] * len(Quality.DOWNLOADED + Quality.SNATCHED)) + ")", + done_show_list + [next_week] + Quality.DOWNLOADED + Quality.SNATCHED) + sql_results += more_sql_results more_sql_results = myDB.select( - "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND tv_shows.indexer_id = tv_episodes.showid AND airdate < ? AND airdate >= ? AND tv_episodes.status = ? AND tv_episodes.status NOT IN (" + ','.join( - ['?'] * len(qualList)) + ")", [tommorrow, recently, WANTED] + qualList) + "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND tv_shows.indexer_id = tv_episodes.showid AND airdate <= ? AND airdate >= ? AND tv_episodes.status = ? AND tv_episodes.status NOT IN (" + ','.join( + ['?'] * len(qualList)) + ")", [tomorrow, recently, WANTED] + qualList) sql_results += more_sql_results sql_results = list(set(sql_results)) From 2808e8edf4b76324f9e98531f26f6d7fb2f8a989 Mon Sep 17 00:00:00 2001 From: JackDandy Date: Tue, 25 Nov 2014 22:12:00 +0000 Subject: [PATCH 39/43] Add multi dimension sorting and clarify some variable naming. --- sickbeard/webapi.py | 40 ++++++++++++++++++++++++++----------- sickbeard/webserve.py | 46 ++++++++++++++++++++++++++++++------------- 2 files changed, 60 insertions(+), 26 deletions(-) diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index c2ddce29..df1220c6 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -725,14 +725,14 @@ class CMD_ComingEpisodes(ApiCall): def run(self): """ display the coming episodes """ - today1 = datetime.date.today() - today = today1.toordinal() - yesterday1 = today1 - datetime.timedelta(days=1) - yesterday = yesterday1.toordinal() + today_dt = datetime.date.today() + today = today_dt.toordinal() + yesterday_dt = today_dt - datetime.timedelta(days=1) + yesterday = yesterday_dt.toordinal() tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal() - next_week1 = (datetime.date.today() + datetime.timedelta(days=7)) - next_week = (next_week1 + datetime.timedelta(days=1)).toordinal() - recently = (yesterday1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + next_week_dt = (datetime.date.today() + datetime.timedelta(days=7)) + next_week = (next_week_dt + datetime.timedelta(days=1)).toordinal() + recently = (yesterday_dt - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() done_show_list = [] qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED] @@ -762,14 +762,30 @@ class CMD_ComingEpisodes(ApiCall): # make a dict out of the sql results sql_results = [dict(row) for row in sql_results] - # sort by air date + # multi dimension sort sorts = { - 'date': (lambda x, y: cmp(x["parsed_datetime"], y["parsed_datetime"])), - 'show': (lambda a, b: cmp((a["show_name"], a["parsed_datetime"]), (b["show_name"], b["parsed_datetime"]))), - 'network': (lambda a, b: cmp((a["network"], a["parsed_datetime"]), (b["network"], b["parsed_datetime"]))), + 'date': (lambda a, b: cmp( + (a['parsed_datetime'], + (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['season'], a['episode']), + (b['parsed_datetime'], + (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['season'], b['episode']))), + 'show': (lambda a, b: cmp( + ((a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['parsed_datetime'], a['season'], a['episode']), + ((b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['parsed_datetime'], b['season'], b['episode']))), + 'network': (lambda a, b: cmp( + (a['network'], a['parsed_datetime'], + (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['season'], a['episode']), + (b['network'], b['parsed_datetime'], + (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['season'], b['episode']))) } - # add localtime to the dict + # add parsed_datetime to the dict for index, item in enumerate(sql_results): sql_results[index]['parsed_datetime'] = network_timezones.parse_date_time(item['airdate'], item['airs'], item['network']) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index eeb2582e..308fc18f 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -350,16 +350,18 @@ class MainHandler(RequestHandler): redirect("/comingEpisodes/") def comingEpisodes(self, layout="None"): - - today1 = datetime.date.today() - datetime.timedelta(days=1) - today = today1.toordinal() + """ display the coming episodes """ + today_dt = datetime.date.today() + #today = today_dt.toordinal() + yesterday_dt = today_dt - datetime.timedelta(days=1) + yesterday = yesterday_dt.toordinal() tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal() - next_week1 = (datetime.date.today() + datetime.timedelta(days=7)) - next_week = (next_week1 + datetime.timedelta(days=1)).toordinal() + next_week_dt = (datetime.date.today() + datetime.timedelta(days=7)) + next_week = (next_week_dt + datetime.timedelta(days=1)).toordinal() if not (layout and layout in ('calendar')) and not (sickbeard.COMING_EPS_LAYOUT and sickbeard.COMING_EPS_LAYOUT in ('calendar')): - recently = (today1 - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() + recently = (yesterday_dt - datetime.timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal() else: - recently = today + recently = yesterday done_show_list = [] qualList = Quality.DOWNLOADED + Quality.SNATCHED + [ARCHIVED, IGNORED] @@ -367,7 +369,7 @@ class MainHandler(RequestHandler): myDB = db.DBConnection() sql_results = myDB.select( "SELECT *, tv_shows.status as show_status FROM tv_episodes, tv_shows WHERE season != 0 AND airdate >= ? AND airdate <= ? AND tv_shows.indexer_id = tv_episodes.showid AND tv_episodes.status NOT IN (" + ','.join( - ['?'] * len(qualList)) + ")", [today, next_week] + qualList) + ['?'] * len(qualList)) + ")", [yesterday, next_week] + qualList) for cur_result in sql_results: done_show_list.append(int(cur_result["showid"])) @@ -388,11 +390,27 @@ class MainHandler(RequestHandler): sql_results = list(set(sql_results)) - # sort by localtime + # multi dimension sort sorts = { - 'date': (lambda x, y: cmp(x["localtime"], y["localtime"])), - 'show': (lambda a, b: cmp((a["show_name"], a["localtime"]), (b["show_name"], b["localtime"]))), - 'network': (lambda a, b: cmp((a["network"], a["localtime"]), (b["network"], b["localtime"]))), + 'date': (lambda a, b: cmp( + (a['localtime'], + (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['season'], a['episode']), + (b['localtime'], + (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['season'], b['episode']))), + 'show': (lambda a, b: cmp( + ((a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['localtime'], a['season'], a['episode']), + ((b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['localtime'], b['season'], b['episode']))), + 'network': (lambda a, b: cmp( + (a['network'], a['localtime'], + (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + a['season'], a['episode']), + (b['network'], b['localtime'], + (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + b['season'], b['episode']))) } # make a dict out of the sql results @@ -425,8 +443,8 @@ class MainHandler(RequestHandler): paused_item, ] - t.next_week = datetime.datetime.combine(next_week1, datetime.time(tzinfo=network_timezones.sb_timezone)) - t.today = datetime.datetime.now().replace(tzinfo=network_timezones.sb_timezone) + t.next_week = datetime.datetime.combine(next_week_dt, datetime.time(tzinfo=network_timezones.sb_timezone)) + t.today = datetime.datetime.now(network_timezones.sb_timezone) t.sql_results = sql_results # Allow local overriding of layout parameter From 765fe798fddfbcd8e06fb7f340423a560daf57ce Mon Sep 17 00:00:00 2001 From: Supremicus Date: Wed, 26 Nov 2014 10:56:35 +0000 Subject: [PATCH 40/43] Fix season jumping dropdown menu for shows with over 15 seasons on Display Show. --- CHANGES.md | 3 ++- gui/slick/interfaces/default/displayShow.tmpl | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c04b3b96..9f6f594e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-24 00:55:00 UTC) +### 0.4.0 (2014-11-26 13:30:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -49,6 +49,7 @@ * Add a hover over text "In library" on Add Trending Shows to display tv database show was added from * Fix reduces time API endpoint Shows takes to return results * Fix Coming Eps Page to include shows +/- 1 day for time zone corrections +* Fix season jumping dropdown menu for shows with over 15 seasons on Display Show ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl index 44e70645..38a40221 100644 --- a/gui/slick/interfaces/default/displayShow.tmpl +++ b/gui/slick/interfaces/default/displayShow.tmpl @@ -349,7 +349,7 @@ #end if #if int($epResult["season"]) != $curSeason: - +

    #if int($epResult["season"]) == 0 then "Specials" else "Season " + str($epResult["season"])#

    From 3cac799877d8b480ecf696cbf6674108042eaead Mon Sep 17 00:00:00 2001 From: JackDandy Date: Thu, 27 Nov 2014 03:30:00 +0000 Subject: [PATCH 41/43] Fix article sorting for Coming Eps, Manage, Show List, and Trending Shows. Increase article sorting strictness with a central helper function. --- CHANGES.md | 3 ++- gui/slick/interfaces/default/comingEpisodes.tmpl | 2 +- gui/slick/interfaces/default/home.tmpl | 4 ++-- .../interfaces/default/home_trendingShows.tmpl | 2 +- gui/slick/interfaces/default/manage.tmpl | 2 +- sickbeard/helpers.py | 3 +++ sickbeard/webapi.py | 13 +++++++------ sickbeard/webserve.py | 13 +++++++------ 8 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9f6f594e..c167f46c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-26 13:30:00 UTC) +### 0.4.0 (2014-11-27 03:30:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -50,6 +50,7 @@ * Fix reduces time API endpoint Shows takes to return results * Fix Coming Eps Page to include shows +/- 1 day for time zone corrections * Fix season jumping dropdown menu for shows with over 15 seasons on Display Show +* Fix article sorting for Coming Eps, Manage, Show List, and Trending Shows ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/gui/slick/interfaces/default/comingEpisodes.tmpl b/gui/slick/interfaces/default/comingEpisodes.tmpl index 1a5299bc..9e012219 100644 --- a/gui/slick/interfaces/default/comingEpisodes.tmpl +++ b/gui/slick/interfaces/default/comingEpisodes.tmpl @@ -82,7 +82,7 @@ if (0 == s.indexOf('Loading...')) return s.replace('Loading...', '000') #if not $sickbeard.SORT_ARTICLE: - return (s || '').replace(/^(The|A|An)\s/i, '') + return (s || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1') #else: return (s || '') #end if diff --git a/gui/slick/interfaces/default/home.tmpl b/gui/slick/interfaces/default/home.tmpl index e18ec11a..e9b988f0 100644 --- a/gui/slick/interfaces/default/home.tmpl +++ b/gui/slick/interfaces/default/home.tmpl @@ -58,7 +58,7 @@ return s.replace('Loading...','000'); else #if not $sickbeard.SORT_ARTICLE: - return (s || '').replace(/^(The|A|An)\s/i,''); + return (s || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1'); #else: return (s || ''); #end if @@ -162,7 +162,7 @@ name: function( itemElem ) { var name = \$( itemElem ).attr('data-name'); #if not $sickbeard.SORT_ARTICLE: - return (name || '').replace(/^(The|A|An)\s/i,''); + return (name || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1'); #else: return (name || ''); #end if diff --git a/gui/slick/interfaces/default/home_trendingShows.tmpl b/gui/slick/interfaces/default/home_trendingShows.tmpl index 032ee11f..6bc04d26 100644 --- a/gui/slick/interfaces/default/home_trendingShows.tmpl +++ b/gui/slick/interfaces/default/home_trendingShows.tmpl @@ -36,7 +36,7 @@ name: function( itemElem ) { var name = \$( itemElem ).attr('data-name') || ''; #if not $sickbeard.SORT_ARTICLE: - name = name.replace(/^(The|A|An)\s/i, ''); + name = name.replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1'); #end if return name.toLowerCase(); }, diff --git a/gui/slick/interfaces/default/manage.tmpl b/gui/slick/interfaces/default/manage.tmpl index 3a240f21..6202e551 100644 --- a/gui/slick/interfaces/default/manage.tmpl +++ b/gui/slick/interfaces/default/manage.tmpl @@ -18,7 +18,7 @@ }, format: function(s) { #if not $sickbeard.SORT_ARTICLE: - return (s || '').replace(/^(The|A|An)\s/i,''); + return (s || '').replace(/^(?:(?:A(?!\s+to)n?)|The)\s(\w)/i, '$1'); #else: return (s || ''); #end if diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 9439fe85..1be5b37e 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -1428,3 +1428,6 @@ def get_size(start_path='.'): total_size += ek.ek(os.path.getsize, fp) return total_size + +def remove_article(text=''): + return re.sub(r'(?i)/^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text) \ No newline at end of file diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index df1220c6..46496d0f 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -37,6 +37,7 @@ from sickbeard import processTV from sickbeard import network_timezones, sbdatetime from sickbeard.exceptions import ex from sickbeard.common import SNATCHED, SNATCHED_PROPER, DOWNLOADED, SKIPPED, UNAIRED, IGNORED, ARCHIVED, WANTED, UNKNOWN +from sickbeard.helpers import remove_article from common import Quality, qualityPresetStrings, statusStrings try: @@ -766,22 +767,22 @@ class CMD_ComingEpisodes(ApiCall): sorts = { 'date': (lambda a, b: cmp( (a['parsed_datetime'], - (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + (a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['season'], a['episode']), (b['parsed_datetime'], - (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + (b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['season'], b['episode']))), 'show': (lambda a, b: cmp( - ((a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + ((a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['parsed_datetime'], a['season'], a['episode']), - ((b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + ((b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['parsed_datetime'], b['season'], b['episode']))), 'network': (lambda a, b: cmp( (a['network'], a['parsed_datetime'], - (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + (a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['season'], a['episode']), (b['network'], b['parsed_datetime'], - (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + (b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['season'], b['episode']))) } diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 308fc18f..dda6dcb2 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -52,6 +52,7 @@ from sickbeard.common import Quality, Overview, statusStrings, qualityPresetStri from sickbeard.common import SNATCHED, UNAIRED, IGNORED, ARCHIVED, WANTED, FAILED from sickbeard.common import SD, HD720p, HD1080p from sickbeard.exceptions import ex +from sickbeard.helpers import remove_article from sickbeard.scene_exceptions import get_scene_exceptions from sickbeard.scene_numbering import get_scene_numbering, set_scene_numbering, get_scene_numbering_for_show, \ get_xem_numbering_for_show, get_scene_absolute_numbering_for_show, get_xem_absolute_numbering_for_show, \ @@ -394,22 +395,22 @@ class MainHandler(RequestHandler): sorts = { 'date': (lambda a, b: cmp( (a['localtime'], - (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + (a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['season'], a['episode']), (b['localtime'], - (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + (b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['season'], b['episode']))), 'show': (lambda a, b: cmp( - ((a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + ((a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['localtime'], a['season'], a['episode']), - ((b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + ((b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['localtime'], b['season'], b['episode']))), 'network': (lambda a, b: cmp( (a['network'], a['localtime'], - (a['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', a['show_name']))[not sickbeard.SORT_ARTICLE], + (a['show_name'], remove_article(a['show_name']))[not sickbeard.SORT_ARTICLE], a['season'], a['episode']), (b['network'], b['localtime'], - (b['show_name'], re.sub(r'(?i)^(The|A|An)\s', '', b['show_name']))[not sickbeard.SORT_ARTICLE], + (b['show_name'], remove_article(b['show_name']))[not sickbeard.SORT_ARTICLE], b['season'], b['episode']))) } From f72229c591b5019db21c7723e0f7d566b8314508 Mon Sep 17 00:00:00 2001 From: JackDandy Date: Thu, 4 Dec 2014 10:28:29 +0000 Subject: [PATCH 42/43] Fix article sorting for Display Show, and API pages. --- CHANGES.md | 2 +- sickbeard/webapi.py | 10 +--------- sickbeard/webserve.py | 10 +--------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c167f46c..f03a1a29 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -50,7 +50,7 @@ * Fix reduces time API endpoint Shows takes to return results * Fix Coming Eps Page to include shows +/- 1 day for time zone corrections * Fix season jumping dropdown menu for shows with over 15 seasons on Display Show -* Fix article sorting for Coming Eps, Manage, Show List, and Trending Shows +* Fix article sorting for Coming Eps, Manage, Show List, Display Show, API, and Trending Shows pages ### 0.3.1 (2014-11-19 16:40:00 UTC) diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index 46496d0f..0051d23c 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -126,15 +126,7 @@ class Api(webserve.MainHandler): t = webserve.PageTemplate(headers=self.request.headers, file="apiBuilder.tmpl") def titler(x): - if not x or sickbeard.SORT_ARTICLE: - return x - if x.lower().startswith('a '): - x = x[2:] - elif x.lower().startswith('an '): - x = x[3:] - elif x.lower().startswith('the '): - x = x[4:] - return x + return (remove_article(x), x)[not x or sickbeard.SORT_ARTICLE] t.sortedShowList = sorted(sickbeard.showList, lambda x, y: cmp(titler(x.name), titler(y.name))) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index dda6dcb2..b72c57cc 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -3759,15 +3759,7 @@ class Home(MainHandler): epCounts[curEpCat] += 1 def titler(x): - if not x or sickbeard.SORT_ARTICLE: - return x - if x.lower().startswith('a '): - x = x[2:] - if x.lower().startswith('an '): - x = x[3:] - elif x.lower().startswith('the '): - x = x[4:] - return x + return (remove_article(x), x)[not x or sickbeard.SORT_ARTICLE] if sickbeard.ANIME_SPLIT_HOME: shows = [] From bee6637cbc3a3f3650f833852316c07369114a02 Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 4 Dec 2014 18:51:53 +0800 Subject: [PATCH 43/43] Fix release date for 0.4.0 --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index f03a1a29..79b28bc5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -### 0.4.0 (2014-11-27 03:30:00 UTC) +### 0.4.0 (2014-12-04 10:50:00 UTC) * Change footer stats to not add newlines when copy/pasting from them * Remove redundant references from Config/Help & Info @@ -52,6 +52,7 @@ * Fix season jumping dropdown menu for shows with over 15 seasons on Display Show * Fix article sorting for Coming Eps, Manage, Show List, Display Show, API, and Trending Shows pages + ### 0.3.1 (2014-11-19 16:40:00 UTC) * Fix failing travis test