Browse Source

Integrate new RSS UI (Plush and Classic only).

tags/0.6.0
ShyPike 15 years ago
parent
commit
dc5328bf7f
  1. 137
      interfaces/Classic/templates/config_rss.tmpl
  2. 460
      interfaces/Plush/templates/config_rss.tmpl
  3. 2
      interfaces/Plush/templates/static/javascripts/config.js
  4. 18
      interfaces/Plush/templates/static/stylesheets/colorschemes/gold/gold.css
  5. 3
      interfaces/smpl/templates/config_rss.tmpl
  6. 1
      language/de-de.txt
  7. 1
      language/dk-da.txt
  8. 1
      language/fr-fr.txt
  9. 1
      language/nl-du.txt
  10. 1
      language/sv-se.txt
  11. 1
      language/us-en.txt
  12. 120
      sabnzbd/interface.py
  13. 104
      sabnzbd/rss.py

137
interfaces/Classic/templates/config_rss.tmpl

@ -6,24 +6,11 @@
<!--#set global $submenu="rss"#-->
<!--#include $webdir + "/inc_cmenu.tmpl"#-->
<h2>$T('configRSS')</h2>
<div class="EntryBlock">
<form action="add_rss_feed" method="post">
<fieldset class="EntryFieldSet">
<legend>$T('newFeedURI')</legend>
<input type="text" size="10" name="feed" value="$feed"/>&nbsp;
<input type="text" size="104" name="uri" value=""/><br/><br/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-add')"/>
</fieldset>
</form>
</div>
<p>$T('explain-RSS')</p>
<!--#for $feed in $rss#-->
<h3>$T('feedDefinition')</h3>
<h2><a href="../rss">$T('configRSS')</a></h2>
<!--#if $active_feed#-->
<!--#set $feed = $active_feed#-->
<div class="EntryBlock">
<form action="upd_rss_feed" method="post">
<fieldset class="EntryFieldSet">
@ -212,6 +199,118 @@
</table>
</div>
</fieldset>
<!--#end for#-->
<h3>$T('rss-matched')</h3>
<table id="catTable">
<tr>
<th>&nbsp;</th>
<th>&nbsp;$T('rss-skip')&nbsp;</th>
<th>&nbsp;$T('rss-filter')&nbsp;</th>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $matched#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="download" method="get">
<input type="hidden" name="url" value="$job[0]"/>
<input type="hidden" value="$feed" name="feed"/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('link-download')">
</form>
</td>
<td>$job[2]</td>
<td>$job[3]</td>
<td>$job[1]</td>
</tr>
<!--#end for#-->
</table>
<h3>$T('rss-notMatched')</h3>
<table id="catTable">
<tr>
<th>&nbsp;</th>
<th>&nbsp;$T('rss-skip')&nbsp;</th>
<th>&nbsp;$T('rss-filter')&nbsp;</th>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $unmatched#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="download" method="get">
<input type="hidden" name="url" value="$job[0]"/>
<input type="hidden" value="$feed" name="feed"/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('link-download')">
</form>
</td>
<td>$job[2]</td>
<td>$job[3]</td>
<td>$job[1]</td>
</tr>
<!--#end for#-->
</table>
<h3>$T('rss-done')</h3>
<table id="catTable">
<tr>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $downloaded#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td>$job</td>
</tr>
<!--#end for#-->
</table>
<!--#else#-->
<div class="EntryBlock">
<form action="add_rss_feed" method="post">
<fieldset class="EntryFieldSet">
<legend>$T('newFeedURI')</legend>
<input type="text" size="10" name="feed" value="$feed"/>&nbsp;
<input type="text" size="104" name="uri" value=""/><br/><br/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-add')"/>
</fieldset>
</form>
</div>
<p>$T('explain-RSS')</p>
<table id="catTable">
<tr>
<th></th>
<th>Enabled</th>
<th>$T('feed')</th>
<th>URL</th>
</tr>
<!--#set $odd = False#-->
<!--#for $feed in sorted($rss.keys(), cmp=lambda x,y: cmp(x.lower(), y.lower()))#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="del_rss_feed" method="get">
<input type="hidden" name="session" value="$session">
<input type="hidden" value="$feed" name="feed">
<input type="submit" value="$T('button-del')"></form>
</td>
<td><form action="upd_rss_feed" method="post">
<input type="hidden" name="session" value="$session">
<input type="hidden" value="$feed" name="feed">
<input type="hidden" value="1" name="table">
<input type="checkbox" onclick="this.form.action='toggle_rss_feed?session=$session'; this.form.submit(); return false;" name="enable" <!--#if $rss[$feed]['enable'] then "CHECKED" else "" #-->/>
</form>
</td>
<td><a href="?feed=$rss[$feed]['link']">$feed</a></td>
<td>$rss[$feed]['uri']</td>
</tr>
<!--#end for#-->
</table>
<!--#end if#-->
<!--#include $webdir + "/inc_bottom.tmpl"#-->

460
interfaces/Plush/templates/config_rss.tmpl

@ -2,226 +2,322 @@
<!--#set global $help_uri="Configure+RSS+V2"#-->
<!--#include $webdir + "/config_inc_header.tmpl"#-->
<form action="add_rss_feed" method="post">
<input type="hidden" name="session" value="$session">
<div class="EntryBlock">
<fieldset class="EntryFieldSet nowrap">
<legend><span class="config_sprite_container sprite_config_rss_add">&nbsp;</span> $T('newFeedURI')</legend>
<input type="text" size="10" name="feed" value="$feed"/>
<input type="text" size="60" name="uri"/>
<input type="submit" value="$T('button-add')"/>
</fieldset>
</form>
</div>
<br class="clear"/>
<small><p>$T('explain-RSS')</p></small>
<!--#for $feed in $rss#-->
<br class="clear"/>
<form action="upd_rss_feed" method="post">
<input type="hidden" name="session" value="$session">
<!--#if $active_feed#-->
<div class="EntryBlock">
<fieldset class="EntryFieldSet">
<legend class="server<!--#if $rss[$feed]['enable'] then 'Enabled' else 'Disabled'#-->"><input type="checkbox" name="enable" <!--#if $rss[$feed]['enable'] then "CHECKED" else "" #-->/>&nbsp;$feed</legend>
<h2><a href="../rss">&laquo; $T('configRSS')</a></h2>
<input type="text" size="105" name="uri" value="$rss[$feed]['uri']"/><br/><br/>
<!--#set $feed = $active_feed#-->
<div class="EntryBlock">
<form action="upd_rss_feed" method="post">
<fieldset class="EntryFieldSet">
<legend <!--#if $rss[$feed]['enable'] then 'class="feedEnabled"' else 'class="feedDisabled"'#-->><input type="checkbox" onclick="this.form.action='toggle_rss_feed?session=$session'; this.form.submit(); return false;" name="enable" <!--#if $rss[$feed]['enable'] then "CHECKED" else "" #-->/>
$T('feed') $feed</legend>
<input type="button" class="preview_feed" value="$T('button-preFeed')" rel="preview"/>
<input type="button" class="download_feed" value="$T('button-forceFeed')" rel="$T('Plush-confirm') "/>
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" size="105" name="uri" value="$rss[$feed]['uri']"/>
<input type="button" onclick="if (confirm('$T('confirm').replace("'","`") ')) { this.form.action='del_rss_feed?session=$session&'; this.form.submit(); return false;}" value="$T('button-delFeed')"/>
<input type="button" onclick="this.form.action='test_rss_feed?session=$session&'; this.form.submit(); return false;" value="$T('button-preFeed')"/>
<input type="button" onclick="this.form.action='download_rss_feed?session=$session&'; this.form.submit(); return false;" value="$T('button-forceFeed')"/>
<br/><br/>
<select name="priority"><optgroup label="$T('priority')">
<option value="-100" <!--#if $rss[$feed]['priority'] == -100 then 'selected' else ''#-->>$T('default')</option>
<option value="2" <!--#if $rss[$feed]['priority'] == 2 then 'selected' else ''#-->>$T('pr-force')</option>
<option value="1" <!--#if $rss[$feed]['priority'] == 1 then 'selected' else ''#-->>$T('pr-high')</option>
<option value="0" <!--#if $rss[$feed]['priority'] == 0 then 'selected' else ''#-->>$T('pr-normal')</option>
<option value="-1" <!--#if $rss[$feed]['priority'] == -1 then 'selected' else ''#-->>$T('pr-low')</option>
</optgroup></select>
<!--#if $rss[$feed]['pick_cat']#-->
<select name="cat"><optgroup label="$T('category')">
<!--#for $ct in $cat_list#-->
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</optgroup></select>
<!--#end if#-->
<select name="pp"><optgroup label="$T('pp')">
<option value="" <!--#if $rss[$feed]['pp'] == "" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</optgroup></select>
<!--#if $rss[$feed]['pick_script']#-->
<select name="script"><optgroup label="$T('script')">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</optgroup></select>
<!--#end if#-->
<!--#if $rss[$feed]['pick_cat']#-->
<select name="cat">
<optgroup label="$T('category')">
<!--#for $ct in $cat_list#-->
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="pp">
<optgroup label="$T('pp')">
<option value="" <!--#if $rss[$feed]['pp'] == "" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</optgroup>
</select>
<!--#if $rss[$feed]['pick_script']#-->
<select name="script">
<optgroup label="$T('script')">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="priority">
<optgroup label="$T('priority')">
<option value="-100" <!--#if $rss[$feed]['priority'] == -100 then 'selected' else ''#-->>$T('default')</option>
<option value="2" <!--#if $rss[$feed]['priority'] == 2 then 'selected' else ''#-->>$T('pr-force')</option>
<option value="1" <!--#if $rss[$feed]['priority'] == 1 then 'selected' else ''#-->>$T('pr-high')</option>
<option value="0" <!--#if $rss[$feed]['priority'] == 0 then 'selected' else ''#-->>$T('pr-normal')</option>
<option value="-1" <!--#if $rss[$feed]['priority'] == -1 then 'selected' else ''#-->>$T('pr-low')</option>
</optgroup>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="hidden" name="feed" value="$feed"/>
<input type="submit" value="$T('button-save')"/>
<input type="button" value="$T('button-delFeed')" class="delete_feed" rel="$T('Plush-confirm') "/>
<input type="hidden" name="feed" value="$feed"/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-save')"/>
<br />
</form>
<hr/>
<br/><br/>
<table class="clear">
<table class="rssTable">
<tr>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>$T('rss-order')</th>
<th>$T('rss-type')</th>
<th>$T('rss-filter')</th>
<!--#if $rss[$feed]['pick_cat'] then "<th>"+$T('category')+"</th>" else ""#-->
<th>$T('pp')</th>
<!--#if $rss[$feed]['pick_script'] then "<th>"+$T('script')+"</th>" else ""#-->
<!--#if $rss[$feed]['pick_cat']#--><th>$T('category')</th><!--#end if#-->
<th>Mode</th>
<!--#if $rss[$feed]['pick_script']#--><th>$T('script')</th><!--#end if#-->
<th></th>
</tr>
<form action="upd_rss_filter" method="get">
<input type="hidden" name="session" value="$session">
<tr class="odd">
<td></td>
<td>
<select name="filter_type">
<option value="A" selected /> $T('rss-accept')</option>
<option value="M" /> $T('rss-must')</option>
<option value="R" /> $T('rss-reject')</option>
<option value="C" /> $T('rss-mustcat')</option>
</select>
</td>
<td><input type="text" size="60" name="filter_text" value=""></td>
<!--#if $rss[$feed]['pick_cat']#-->
<td>
<td></td>
<td></td>
<td>
<select name="filter_type">
<option value="A" selected /> $T('rss-accept')</option>
<option value="M" /> $T('rss-must')</option>
<option value="R" /> $T('rss-reject')</option>
<option value="C" /> $T('rss-mustcat')</option>
</select>
</td>
<td><input type="text" size="60" name="filter_text" value=""></td>
<!--#if $rss[$feed]['pick_cat']#-->
<td>
<select name="cat">
<!--#for $ct in $cat_list#-->
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option>
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
</td>
<!--#end if#-->
<td>
<select name="pp">
<option value="" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</select>
</td>
<!--#if $rss[$feed]['pick_script']#-->
<td>
<select name="script">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<input type="hidden" value="$rss[$feed]['filtercount']" name="index">
<input type="hidden" value="$feed" name="feed">
<input type="hidden" name="session" value="$session">
<td><input type="submit" value="$T('button-save')"></td>
</tr>
</form>
<td>
<select name="pp">
<option value="" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</select>
</td>
<!--#set $fnum = 0#-->
<!--#for $filter in $rss[$feed].filters#-->
<tr class="odd">
<td>
<form action="del_rss_filter" method="post">
<input type="hidden" value="$fnum" name="index">
<input type="hidden" value="$feed" name="feed">
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('rss-delFilter')"></form>
</td>
<td><form><select onchange="location = this.options[this.selectedIndex].value;">
<!--#for $i in xrange($rss[$feed]['filtercount'])#-->
<option value="pos_rss_filter?session=$session&feed=$feed&current=$fnum&new=$i" <!--#if int($i) == int($fnum) then "selected" else ""#-->>$i</option>
<!--#end for#-->
</select>
<input type="hidden" value="$feed" name="feed">
</form></td>
<!--#if $rss[$feed]['pick_script']#-->
<td>
<select name="script">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<form action="upd_rss_filter" method="get">
<td>
<select name="filter_type">
<option value="A" <!--#if $filter[3] == "A" then "selected" else ""#--> /> $T('rss-accept')</option>
<option value="M" <!--#if $filter[3] == "M" then "selected" else ""#--> /> $T('rss-must')</option>
<option value="R" <!--#if $filter[3] == "R" then "selected" else ""#--> /> $T('rss-reject')</option>
<option value="C" <!--#if $filter[3] == "C" then "selected" else ""#--> /> $T('rss-mustcat')</option>
</select>
</td>
<td><input type="text" size="60" name="filter_text" value="$filter[4]"/></td>
<!--#if $rss[$feed]['pick_cat']#-->
<td>
<select name="cat">
<!--#for $ct in $cat_list#-->
<option value="$ct" <!--#if $ct == $filter[0] then "selected" else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<td>
<select name="pp">
<option value="" <!--#if $filter[1] == "0" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $filter[1] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $filter[1] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $filter[1] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $filter[1] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</select>
</td>
<!--#if $rss[$feed]['pick_script']#-->
<td>
<select name="script">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $filter[2] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<td>
<input type="hidden" name="index" value="$fnum"/>
<input type="hidden" name="feed" value="$feed"/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-save')"/>
</td>
</form>
</tr>
<!--#set $fnum = $fnum+1#-->
<!--#end for#-->
</table>
</div>
</fieldset>
<br class="clear" /><br/>
<td colspan="2">
<input type="hidden" value="$rss[$feed]['filtercount']" name="index"/>
<fieldset class="EntryFieldSet">
<legend>$T('rss-matched')</legend>
<table class="rssTable">
<tr>
<th>&nbsp;</th>
<th>&nbsp;$T('rss-skip')&nbsp;</th>
<th>&nbsp;$T('rss-filter')&nbsp;</th>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $matched#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="download" method="get">
<input type="hidden" name="url" value="$job[0]"/>
<input type="hidden" value="$feed" name="feed"/>
<input type="submit" value="$T('button-add')"/>
</td>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('link-download')">
</form>
</td>
<td>$job[2]</td>
<td>$job[3]</td>
<td>$job[1]</td>
</tr>
</form>
<!--#set $fnum = 0#-->
<!--#for $filter in $rss[$feed].filters#-->
<tr class="odd">
<!--#end for#-->
</table>
</fieldset>
<br class="clear" /><br/>
<td><form>
<input type="hidden" name="session" value="$session">
<select class="filter_order">
<!--#for $i in xrange($rss[$feed]['filtercount'])#-->
<option value="pos_rss_filter?feed=$feed&current=$fnum&new=$i" <!--#if int($i) == int($fnum) then "selected" else ""#-->>$i</option>
<!--#end for#-->
</select>
<fieldset class="EntryFieldSet">
<legend>$T('rss-notMatched')</legend>
<table class="rssTable">
<tr>
<th>&nbsp;</th>
<th>&nbsp;$T('rss-skip')&nbsp;</th>
<th>&nbsp;$T('rss-filter')&nbsp;</th>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $unmatched#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="download" method="get">
<input type="hidden" name="url" value="$job[0]"/>
<input type="hidden" value="$feed" name="feed"/>
</form></td>
<form action="upd_rss_filter" method="get">
<input type="hidden" name="session" value="$session">
<td>
<select name="filter_type">
<option value="A" <!--#if $filter[3] == "A" then "selected" else ""#--> /> $T('rss-accept')</option>
<option value="M" <!--#if $filter[3] == "M" then "selected" else ""#--> /> $T('rss-must')</option>
<option value="R" <!--#if $filter[3] == "R" then "selected" else ""#--> /> $T('rss-reject')</option>
<option value="C" <!--#if $filter[3] == "C" then "selected" else ""#--> /> $T('rss-mustcat')</option>
</select>
</td>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('link-download')">
</form>
</td>
<td>$job[2]</td>
<td>$job[3]</td>
<td>$job[1]</td>
</tr>
<!--#end for#-->
</table>
</fieldset>
<br class="clear" /><br/>
<td><input type="text" size="60" name="filter_text" value="$filter[4]"/></td>
<fieldset class="EntryFieldSet">
<legend>$T('rss-done')</legend>
<table class="rssTable">
<tr>
<th>Title</th>
</tr>
<!--#set $odd = False#-->
<!--#for $job in $downloaded#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td>$job</td>
</tr>
<!--#end for#-->
</table>
</fieldset>
<br class="clear" /><br/>
<!--#if $rss[$feed]['pick_cat']#-->
<td>
<select name="cat">
<!--#for $ct in $cat_list#-->
<option value="$ct" <!--#if $ct == $filter[0] then "selected" else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<!--#else#-->
<div class="EntryBlock">
<form action="add_rss_feed" method="post">
<fieldset class="EntryFieldSet">
<legend><span class="config_sprite_container sprite_config_rss_add">&nbsp;</span> $T('newFeedURI')</legend>
<input type="text" size="10" name="feed" value="$feed"/>&nbsp;
<input type="text" size="104" name="uri" value=""/><br/><br/>
<input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-add')"/>
</fieldset>
</form>
</div>
<td>
<select name="pp">
<option value="" <!--#if $filter[1] == "0" then 'selected' else ''#-->>$T('default')</option>
<option value="0" <!--#if $filter[1] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<option value="1" <!--#if $filter[1] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<option value="2" <!--#if $filter[1] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="3" <!--#if $filter[1] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
</select>
</td>
<br class="clear" />
<!--#if $rss[$feed]['pick_script']#-->
<td>
<select name="script">
<!--#for $sc in $script_list#-->
<option value="$sc" <!--#if $sc == $filter[2] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#end for#-->
</select>
</td>
<!--#end if#-->
<p>$T('explain-RSS')</p>
<td>
<input type="hidden" name="index" value="$fnum"/>
<input type="hidden" name="feed" value="$feed"/>
<input type="submit" value="$T('button-save')"/>
</form>
<table class="rssTable">
<tr>
<th></th>
<th>Enabled</th>
<th>$T('feed')</th>
<th>URL</th>
</tr>
<!--#set $odd = False#-->
<!--#for $feed in sorted($rss.keys(), cmp=lambda x,y: cmp(x.lower(), y.lower()))#-->
<!--#set $odd = not $odd#-->
<tr class="<!--#if $odd then "odd" else "even"#-->">
<td><form action="del_rss_feed" method="get">
<input type="hidden" name="session" value="$session">
<input type="hidden" value="$feed" name="feed">
<input type="submit" value="$T('button-del')"></form>
</td>
<td>
<form action="del_rss_filter" method="post">
<input type="hidden" name="session" value="$session">
<input type="hidden" value="$fnum" name="index"/>
<input type="hidden" value="$feed" name="feed"/>
<input type="submit" value="$T('rss-delFilter')"/>
<td><form action="upd_rss_feed" method="post">
<input type="hidden" name="session" value="$session">
<input type="hidden" value="$feed" name="feed">
<input type="hidden" value="1" name="table">
<input type="checkbox" onclick="this.form.action='toggle_rss_feed?session=$session'; this.form.submit(); return false;" name="enable" <!--#if $rss[$feed]['enable'] then "CHECKED" else "" #-->/>
</form>
</td>
</td>
<td><strong><a href="?feed=$rss[$feed]['link']">$feed</a></strong></td>
<td>$rss[$feed]['uri']</td>
</tr>
<!--#set $fnum = $fnum+1#-->
<!--#end for#-->
</table>
</fieldset>
</div>
<!--#end for#-->
</table>
<!--#end for#-->
<!--#end if#-->
<!--#include $webdir + "/config_inc_footer.tmpl"#-->

2
interfaces/Plush/templates/static/javascripts/config.js

@ -151,6 +151,7 @@ jQuery(document).ready(function($){
break;
case 'RSS':
/*
$(':checkbox').click(function(event){ // toggle feed
$(event.target).parents('form:first').attr('action','toggle_rss_feed').submit();
return false;
@ -191,6 +192,7 @@ jQuery(document).ready(function($){
window.onbeforeunload = null;
window.location = $(event.target).val()+'&session='+apikey;
});
*/
break;
case 'Email':

18
interfaces/Plush/templates/static/stylesheets/colorschemes/gold/gold.css

@ -1289,6 +1289,20 @@ fieldset.EntryFieldSet {
width:120px;
}
.rssTable { border-spacing: 1px; }
.rssTable th,
.rssTable td {
padding:3px 3px 5px;
}
.rssTable th {
background-color:#555;
color:#FFF;
font-weight:bold;
}
.rssTable td {
background-color:#DDD;
}
#schedulingTable td, #switchesTable td {
padding:3px 3px 5px;
}
@ -1361,11 +1375,13 @@ legend .config_sprite_container {
}
#config_content legend.latestWarnings,
#config_content legend.serverDisabled { background-color:#8B0000; }
#config_content legend.lastEmail,
#config_content legend.serverBackup { background-color:#00008B; }
#config_content legend.serverOptional { background-color:#009090; }
#config_content legend.serverEnabled { background-color:#006400; }
#config_content legend.serverDisabled { background-color:#8B0000; }
#config_content legend.feedEnabled { background-color:#006400; }
#config_content legend.feedDisabled { background-color:#8B0000; }
/* sprite-config.png */

3
interfaces/smpl/templates/config_rss.tmpl

@ -14,6 +14,9 @@ MochiKit.DOM.addLoadEvent(location = "../../#config-rss");
</fieldset>
</div>
<p><b>WARNING: Currently, RSS feeds are not supported in this skin.<br/>
Please use Plush or Classic
</b></p>
<p>$T('explain-RSS')</p>
<!--#for $feed in $rss#-->

1
language/de-de.txt

@ -476,6 +476,7 @@ button-forceFeed Download erzwingen
rss-order Reihenfolge
rss-type Typ
rss-filter Filter
rss-skip Skip
rss-accept Akzeptieren
rss-reject Verwerfen
rss-must Benötigt

1
language/dk-da.txt

@ -406,6 +406,7 @@ button-forceFeed Gennemtving download
rss-order Sortering
rss-type Type
rss-filter Filter
rss-skip Skip
rss-accept Acceptere
rss-reject Afvise
rss-must Krav

1
language/fr-fr.txt

@ -426,6 +426,7 @@ button-forceFeed Forcer t
rss-order Trier
rss-type Type
rss-filter Filtre
rss-skip Skip
rss-accept Accepter
rss-reject Rejeter
rss-must Obligatoire

1
language/nl-du.txt

@ -395,6 +395,7 @@ button-forceFeed Forceer download
rss-order Volgorde
rss-type Type
rss-filter Filter
rss-skip Overslaan
rss-accept Accepteren
rss-reject Verwerpen
rss-must Verplicht

1
language/sv-se.txt

@ -409,6 +409,7 @@ button-forceFeed Tvinga nedladdning
rss-order Ordning
rss-type Typ
rss-filter Filter
rss-skip Skip
rss-accept Acceptera
rss-reject Avvisa
rss-must Kräver

1
language/us-en.txt

@ -426,6 +426,7 @@ button-forceFeed Force Download
rss-order Order
rss-type Type
rss-filter Filter
rss-skip Skip
rss-accept Accept
rss-reject Reject
rss-must Requires

120
sabnzbd/interface.py

@ -111,6 +111,8 @@ def queueRaiser(root, kwargs):
def dcRaiser(root, kwargs):
return Raiser(root, _dc=kwargs.get('_dc'))
def rssRaiser(root, kwargs):
return Raiser(root, feed=kwargs.get('feed'))
#------------------------------------------------------------------------------
def IsNone(value):
@ -1432,6 +1434,10 @@ class ConfigRss(object):
self.__root = root
self.__web_dir = web_dir
self.__prim = prim
self.__refresh_readout = None # Set to URL when new readout is needed
self.__refresh_download = False
self.__refresh_force = False
self.__refresh_ignore = False
@cherrypy.expose
def index(self, **kwargs):
@ -1456,9 +1462,26 @@ class ConfigRss(object):
rss[feed]['pick_cat'] = pick_cat
rss[feed]['pick_script'] = pick_script
rss[feed]['link'] = urllib.quote_plus(feed)
active_feed = kwargs.get('feed', '')
conf['active_feed'] = active_feed
conf['rss'] = rss
if active_feed:
readout = bool(self.__refresh_readout)
logging.debug('RSS READOUT = %s', readout)
if not readout:
self.__refresh_download = False
self.__refresh_force = False
self.__refresh_ignore = False
sabnzbd.rss.run_feed(active_feed, download=self.__refresh_download, force=self.__refresh_force, \
ignoreFirst=self.__refresh_ignore, readout=readout)
self.__refresh_readout = None
conf['downloaded'], conf['matched'], conf['unmatched'] = GetRssLog(active_feed)
# Find a unique new Feed name
unum = 1
while 'Feed'+str(unum) in feeds:
@ -1483,20 +1506,23 @@ class ConfigRss(object):
cfg.set_dict(kwargs)
config.save_config()
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def toggle_rss_feed(self, **kwargs):
msg = check_session(kwargs)
if msg: return msg
try:
cfg = config.get_rss()[kwargs.get('feed')]
item = config.get_rss()[kwargs.get('feed')]
except KeyError:
cfg = None
item = None
if cfg:
cfg.enable.set(not cfg.enable())
item.enable.set(not item.enable())
config.save_config()
raise dcRaiser(self.__root, kwargs)
if kwargs.get('table'):
raise dcRaiser(self.__root, kwargs)
else:
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def add_rss_feed(self, **kwargs):
@ -1524,7 +1550,7 @@ class ConfigRss(object):
try:
cfg = config.get_rss()[kwargs.get('feed')]
except KeyError:
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
pp = kwargs.get('pp')
if IsNone(pp): pp = ''
@ -1534,7 +1560,7 @@ class ConfigRss(object):
cfg.filters.update(int(kwargs.get('index', 0)), (cat, pp, script, kwargs.get('filter_type'), \
platform_encode(kwargs.get('filter_text'))))
config.save_config()
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def pos_rss_filter(self, **kwargs):
@ -1547,12 +1573,12 @@ class ConfigRss(object):
try:
cfg = config.get_rss()[feed]
except KeyError:
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
if current != new:
cfg.filters.move(int(current), int(new))
config.save_config()
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def del_rss_feed(self, *args, **kwargs):
@ -1570,11 +1596,11 @@ class ConfigRss(object):
try:
cfg = config.get_rss()[kwargs.get('feed')]
except KeyError:
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
cfg.filters.delete(int(kwargs.get('index', 0)))
config.save_config()
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def download_rss_feed(self, *args, **kwargs):
@ -1582,12 +1608,11 @@ class ConfigRss(object):
if msg: return msg
if 'feed' in kwargs:
feed = kwargs['feed']
msg = sabnzbd.rss.run_feed(feed, download=True, force=True)
if msg:
return badParameterResponse(msg)
else:
return ShowRssLog(feed, False)
raise dcRaiser(self.__root, kwargs)
self.__refresh_readout = feed
self.__refresh_download = True
self.__refresh_force = True
self.__refresh_ignore = False
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def test_rss_feed(self, *args, **kwargs):
@ -1595,12 +1620,11 @@ class ConfigRss(object):
if msg: return msg
if 'feed' in kwargs:
feed = kwargs['feed']
msg = sabnzbd.rss.run_feed(feed, download=False, ignoreFirst=True)
if msg:
return badParameterResponse(msg)
else:
return ShowRssLog(feed, True)
raise dcRaiser(self.__root, kwargs)
self.__refresh_readout = feed
self.__refresh_download = False
self.__refresh_force = False
self.__refresh_ignore = True
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
@ -1620,7 +1644,29 @@ class ConfigRss(object):
sabnzbd.add_url(id, pp, script, cat, priority, nzbname)
# Need to pass the title instead
sabnzbd.rss.flag_downloaded(feed, id)
raise dcRaiser(self.__root, kwargs)
raise rssRaiser(self.__root, kwargs)
@cherrypy.expose
def download(self, **kwargs):
msg = check_session(kwargs)
if msg: return msg
feed = kwargs.get('feed')
url = kwargs.get('url')
att = sabnzbd.rss.lookup_url(feed, url)
if att:
pp = att.get('pp')
cat = att.get('cat')
script = att.get('script')
prio = att.get('prio')
nzbname = att.get('nzbname')
if url and url.isdigit():
sabnzbd.add_msgid(url, pp, script, cat, prio, nzbname)
elif id:
sabnzbd.add_url(url, pp, script, cat, prio, nzbname)
# Need to pass the title instead
sabnzbd.rss.flag_downloaded(feed, url)
raise rssRaiser(self.__root, kwargs)
#------------------------------------------------------------------------------
@ -2238,6 +2284,32 @@ def _make_link(qfeed, job):
(cfg.api_key() ,qfeed, name, cat, pp, script, prio, nzbname, T('link-download'), title, star, rule)
def GetRssLog(feed):
def make_item(job):
url = job.get('url', '')
title = job.get('title', '')
if url.isdigit():
title = '<a href="https://www.newzbin.com/browse/post/%s/" target="_blank">%s</a>' % (url, title)
else:
title = xml_name(title)
return url, \
title, \
'*' * int(job.get('status', '').endswith('*')), \
job.get('rule', 0)
jobs = sabnzbd.rss.show_result(feed)
names = jobs.keys()
# Sort in the order the jobs came from the feed
names.sort(lambda x, y: jobs[x].get('order', 0) - jobs[y].get('order', 0))
done = [xml_name(jobs[job]['title']) for job in names if jobs[job]['status'][0] == 'D']
good = [make_item(jobs[job]) for job in names if jobs[job]['status'][0] == 'G']
bad = [make_item(jobs[job]) for job in names if jobs[job]['status'][0] == 'B']
return done, good, bad
def ShowRssLog(feed, all):
"""Return a html page listing an RSS log and a 'back' button
"""

104
sabnzbd/rss.py

@ -60,9 +60,9 @@ def del_feed(feed):
global __RSS
if __RSS: __RSS.delete(feed)
def run_feed(feed, download, ignoreFirst=False, force=False):
def run_feed(feed, download, ignoreFirst=False, force=False, readout=True):
global __RSS
if __RSS: return __RSS.run_feed(feed, download, ignoreFirst, force=force)
if __RSS: return __RSS.run_feed(feed, download, ignoreFirst, force=force, readout=readout)
def show_result(feed):
global __RSS
@ -72,6 +72,10 @@ def flag_downloaded(feed, id):
global __RSS
if __RSS: __RSS.flag_downloaded(feed, id)
def lookup_url(feed, id):
global __RSS
if __RSS: return __RSS.lookup_url(feed, id)
def run_method():
global __RSS
if __RSS:
@ -170,7 +174,7 @@ class RSSQueue(object):
self.shutdown = True
@synchronized(LOCK)
def run_feed(self, feed=None, download=False, ignoreFirst=False, force=False):
def run_feed(self, feed=None, download=False, ignoreFirst=False, force=False, readout=True):
""" Run the query for one URI and apply filters """
self.shutdown = False
@ -181,8 +185,8 @@ class RSSQueue(object):
item = self.jobs[fd][lk]
if item.get('status', ' ')[0] == 'D' and \
item.get('title', '').lower() == title:
return True
return False
return fd
return ''
if not feed:
@ -225,9 +229,9 @@ class RSSQueue(object):
regcount = len(regexes)
# Set first if this is the very first scan of this URI
first = feed not in self.jobs
if first:
if feed not in self.jobs:
self.jobs[feed] = {}
first = not bool(self.jobs[feed])
jobs = self.jobs[feed]
@ -241,44 +245,52 @@ class RSSQueue(object):
uri += '&dl=1'
# Read the RSS feed
logging.debug("Running feedparser on %s", uri)
d = feedparser.parse(uri.replace('feed://', 'http://'))
logging.debug("Done parsing %s", uri)
if not d:
logging.info(Ta('warn-failRSS@1'), uri)
return T('warn-failRSS@1') % uri
entries = d.get('entries')
if 'bozo_exception' in d and not entries:
logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception']))
return T('warn-failRSS@2') % (uri, str(d['bozo_exception']))
if not entries:
logging.info('RSS Feed was empty: %s', uri)
return ''
if readout:
logging.debug("Running feedparser on %s", uri)
d = feedparser.parse(uri.replace('feed://', 'http://'))
logging.debug("Done parsing %s", uri)
if not d:
logging.info(Ta('warn-failRSS@1'), uri)
return T('warn-failRSS@1') % uri
entries = d.get('entries')
if 'bozo_exception' in d and not entries:
logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception']))
return T('warn-failRSS@2') % (uri, str(d['bozo_exception']))
if not entries:
logging.info('RSS Feed was empty: %s', uri)
return ''
else:
entries = jobs.keys()
order = 0
# Filter out valid new links
for entry in entries:
if self.shutdown: return
try:
link, category = _get_link(uri, entry)
except (AttributeError, IndexError):
link = None
category = ''
logging.error('Incompatible feed %s', uri)
logging.info("Traceback: ", exc_info = True)
return 'Incompatible feed'
category = latin1(category)
if readout:
try:
link, category = _get_link(uri, entry)
except (AttributeError, IndexError):
link = None
category = ''
logging.error('Incompatible feed %s', uri)
logging.info("Traceback: ", exc_info = True)
return 'Incompatible feed'
category = latin1(category)
# Make sure only latin-1 encodable characters occur
atitle = latin1(entry.title)
title = unicoder(atitle)
else:
link = entry
category = jobs[link].get('cat', '')
atitle = latin1(jobs[link].get('title', ''))
title = unicoder(atitle)
if link:
# Make sure there are no spaces in the URL
link = link.replace(' ','')
# Make sure only latin-1 encodable characters occur
atitle = latin1(entry.title)
title = unicoder(atitle)
newlinks.append(link)
myCat = defCat
@ -306,10 +318,12 @@ class RSSQueue(object):
elif not (notdefault(reCats[n]) or category):
myScript = defScript
if cfg.no_dupes() and dup_title(title):
logging.debug("Rejected as duplicate")
n = -1
break
if cfg.no_dupes():
dup = dup_title(title)
if dup:
logging.debug("Rejected as duplicate")
n = dup
break
if category and reTypes[n]=='C':
found = re.search(regexes[n], category)
@ -341,12 +355,12 @@ class RSSQueue(object):
star = first
if result:
_HandleLink(jobs, link, title, 'G', myCat, myPP, myScript,
act, star, order, priority=defPriority, rule=n)
act, star, order, priority=defPriority, rule=str(n))
if act:
new_downloads.append(title)
else:
_HandleLink(jobs, link, title, 'B', myCat, myPP, myScript,
False, star, order, priority=defPriority, rule=n)
False, star, order, priority=defPriority, rule=str(n))
order += 1
# Send email if wanted and not "forced"
@ -374,6 +388,7 @@ class RSSQueue(object):
return ''
def run(self):
""" Run all the URI's and filters """
# Protect against second scheduler call before current
@ -428,6 +443,15 @@ class RSSQueue(object):
lst[link]['status'] = 'D'
@synchronized(LOCK)
def lookup_url(self, feed, url):
if url and feed in self.jobs:
lst = self.jobs[feed]
for link in lst:
if lst[link].get('url') == url:
return lst[link]
return None
@synchronized(LOCK)
def clear_feed(self, feed):
# Remove any previous references to this feed name, and start fresh
if feed in self.jobs:

Loading…
Cancel
Save