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"#--> <!--#set global $submenu="rss"#-->
<!--#include $webdir + "/inc_cmenu.tmpl"#--> <!--#include $webdir + "/inc_cmenu.tmpl"#-->
<h2>$T('configRSS')</h2> <h2><a href="../rss">$T('configRSS')</a></h2>
<div class="EntryBlock"> <!--#if $active_feed#-->
<form action="add_rss_feed" method="post">
<fieldset class="EntryFieldSet"> <!--#set $feed = $active_feed#-->
<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>
<div class="EntryBlock"> <div class="EntryBlock">
<form action="upd_rss_feed" method="post"> <form action="upd_rss_feed" method="post">
<fieldset class="EntryFieldSet"> <fieldset class="EntryFieldSet">
@ -212,6 +199,118 @@
</table> </table>
</div> </div>
</fieldset> </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"#--> <!--#include $webdir + "/inc_bottom.tmpl"#-->

460
interfaces/Plush/templates/config_rss.tmpl

@ -2,226 +2,322 @@
<!--#set global $help_uri="Configure+RSS+V2"#--> <!--#set global $help_uri="Configure+RSS+V2"#-->
<!--#include $webdir + "/config_inc_header.tmpl"#--> <!--#include $webdir + "/config_inc_header.tmpl"#-->
<form action="add_rss_feed" method="post"> <!--#if $active_feed#-->
<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">
<div class="EntryBlock"> <h2><a href="../rss">&laquo; $T('configRSS')</a></h2>
<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>
<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="text" size="105" name="uri" value="$rss[$feed]['uri']"/>
<input type="button" class="download_feed" value="$T('button-forceFeed')" rel="$T('Plush-confirm') "/> <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')"/>
&nbsp;&nbsp;&nbsp;&nbsp; <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')"> <!--#if $rss[$feed]['pick_cat']#-->
<option value="-100" <!--#if $rss[$feed]['priority'] == -100 then 'selected' else ''#-->>$T('default')</option> <select name="cat">
<option value="2" <!--#if $rss[$feed]['priority'] == 2 then 'selected' else ''#-->>$T('pr-force')</option> <optgroup label="$T('category')">
<option value="1" <!--#if $rss[$feed]['priority'] == 1 then 'selected' else ''#-->>$T('pr-high')</option> <!--#for $ct in $cat_list#-->
<option value="0" <!--#if $rss[$feed]['priority'] == 0 then 'selected' else ''#-->>$T('pr-normal')</option> <option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option>
<option value="-1" <!--#if $rss[$feed]['priority'] == -1 then 'selected' else ''#-->>$T('pr-low')</option> <!--#end for#-->
</optgroup></select> </optgroup>
<!--#if $rss[$feed]['pick_cat']#--> </select>
<select name="cat"><optgroup label="$T('category')"> <!--#end if#-->
<!--#for $ct in $cat_list#--> <select name="pp">
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then "selected" else ""#-->>$Tspec($ct)</option> <optgroup label="$T('pp')">
<!--#end for#--> <option value="" <!--#if $rss[$feed]['pp'] == "" then 'selected' else ''#-->>$T('default')</option>
</optgroup></select> <option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option>
<!--#end if#--> <option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option>
<select name="pp"><optgroup label="$T('pp')"> <option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option>
<option value="" <!--#if $rss[$feed]['pp'] == "" then 'selected' else ''#-->>$T('default')</option> <option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option>
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option> </optgroup>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option> </select>
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option> <!--#if $rss[$feed]['pick_script']#-->
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option> <select name="script">
</optgroup></select> <optgroup label="$T('script')">
<!--#if $rss[$feed]['pick_script']#--> <!--#for $sc in $script_list#-->
<select name="script"><optgroup label="$T('script')"> <option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option>
<!--#for $sc in $script_list#--> <!--#end for#-->
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option> </optgroup>
<!--#end for#--> </select>
</optgroup></select> <!--#end if#-->
<!--#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="hidden" name="feed" value="$feed"/> <input type="hidden" name="session" value="$session">
<input type="submit" value="$T('button-save')"/> <input type="submit" value="$T('button-save')"/>
<input type="button" value="$T('button-delFeed')" class="delete_feed" rel="$T('Plush-confirm') "/> <br />
</form> </form>
<hr/> <br/><br/>
<table class="clear"> <table class="rssTable">
<tr> <tr>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>$T('rss-order')</th> <th>$T('rss-order')</th>
<th>$T('rss-type')</th> <th>$T('rss-type')</th>
<th>$T('rss-filter')</th> <th>$T('rss-filter')</th>
<!--#if $rss[$feed]['pick_cat'] then "<th>"+$T('category')+"</th>" else ""#--> <!--#if $rss[$feed]['pick_cat']#--><th>$T('category')</th><!--#end if#-->
<th>$T('pp')</th> <th>Mode</th>
<!--#if $rss[$feed]['pick_script'] then "<th>"+$T('script')+"</th>" else ""#--> <!--#if $rss[$feed]['pick_script']#--><th>$T('script')</th><!--#end if#-->
<th></th> <th></th>
</tr> </tr>
<form action="upd_rss_filter" method="get"> <form action="upd_rss_filter" method="get">
<input type="hidden" name="session" value="$session">
<tr class="odd"> <tr class="odd">
<td></td>
<td></td> <td></td>
<td>
<td> <select name="filter_type">
<select name="filter_type"> <option value="A" selected /> $T('rss-accept')</option>
<option value="A" selected /> $T('rss-accept')</option> <option value="M" /> $T('rss-must')</option>
<option value="M" /> $T('rss-must')</option> <option value="R" /> $T('rss-reject')</option>
<option value="R" /> $T('rss-reject')</option> <option value="C" /> $T('rss-mustcat')</option>
<option value="C" /> $T('rss-mustcat')</option> </select>
</select> </td>
</td> <td><input type="text" size="60" name="filter_text" value=""></td>
<td><input type="text" size="60" name="filter_text" value=""></td> <!--#if $rss[$feed]['pick_cat']#-->
<td>
<!--#if $rss[$feed]['pick_cat']#-->
<td>
<select name="cat"> <select name="cat">
<!--#for $ct in $cat_list#--> <!--#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#--> <!--#end for#-->
</select> </select>
</td> </td>
<!--#end if#--> <!--#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> <!--#set $fnum = 0#-->
<select name="pp"> <!--#for $filter in $rss[$feed].filters#-->
<option value="" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('default')</option> <tr class="odd">
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected' else ''#-->>$T('pp-none')</option> <td>
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected' else ''#-->>$T('pp-repair')</option> <form action="del_rss_filter" method="post">
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected' else ''#-->>$T('pp-unpack')</option> <input type="hidden" value="$fnum" name="index">
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected' else ''#-->>$T('pp-delete')</option> <input type="hidden" value="$feed" name="feed">
</select> <input type="hidden" name="session" value="$session">
</td> <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']#--> <form action="upd_rss_filter" method="get">
<td> <td>
<select name="script"> <select name="filter_type">
<!--#for $sc in $script_list#--> <option value="A" <!--#if $filter[3] == "A" then "selected" else ""#--> /> $T('rss-accept')</option>
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then "selected" else ""#-->>$Tspec($sc)</option> <option value="M" <!--#if $filter[3] == "M" then "selected" else ""#--> /> $T('rss-must')</option>
<!--#end for#--> <option value="R" <!--#if $filter[3] == "R" then "selected" else ""#--> /> $T('rss-reject')</option>
</select> <option value="C" <!--#if $filter[3] == "C" then "selected" else ""#--> /> $T('rss-mustcat')</option>
</td> </select>
<!--#end if#--> </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"> <fieldset class="EntryFieldSet">
<input type="hidden" value="$rss[$feed]['filtercount']" name="index"/> <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="hidden" value="$feed" name="feed"/>
<input type="submit" value="$T('button-add')"/> <input type="hidden" name="session" value="$session">
</td> <input type="submit" value="$T('link-download')">
</form>
</td>
<td>$job[2]</td>
<td>$job[3]</td>
<td>$job[1]</td>
</tr> </tr>
</form> <!--#end for#-->
</table>
<!--#set $fnum = 0#--> </fieldset>
<!--#for $filter in $rss[$feed].filters#--> <br class="clear" /><br/>
<tr class="odd">
<td><form> <fieldset class="EntryFieldSet">
<input type="hidden" name="session" value="$session"> <legend>$T('rss-notMatched')</legend>
<select class="filter_order"> <table class="rssTable">
<!--#for $i in xrange($rss[$feed]['filtercount'])#--> <tr>
<option value="pos_rss_filter?feed=$feed&current=$fnum&new=$i" <!--#if int($i) == int($fnum) then "selected" else ""#-->>$i</option> <th>&nbsp;</th>
<!--#end for#--> <th>&nbsp;$T('rss-skip')&nbsp;</th>
</select> <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" value="$feed" name="feed"/>
</form></td> <input type="hidden" name="session" value="$session">
<input type="submit" value="$T('link-download')">
<form action="upd_rss_filter" method="get"> </form>
<input type="hidden" name="session" value="$session"> </td>
<td>$job[2]</td>
<td> <td>$job[3]</td>
<select name="filter_type"> <td>$job[1]</td>
<option value="A" <!--#if $filter[3] == "A" then "selected" else ""#--> /> $T('rss-accept')</option> </tr>
<option value="M" <!--#if $filter[3] == "M" then "selected" else ""#--> /> $T('rss-must')</option> <!--#end for#-->
<option value="R" <!--#if $filter[3] == "R" then "selected" else ""#--> /> $T('rss-reject')</option> </table>
<option value="C" <!--#if $filter[3] == "C" then "selected" else ""#--> /> $T('rss-mustcat')</option> </fieldset>
</select> <br class="clear" /><br/>
</td>
<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']#--> <!--#else#-->
<td> <div class="EntryBlock">
<select name="cat"> <form action="add_rss_feed" method="post">
<!--#for $ct in $cat_list#--> <fieldset class="EntryFieldSet">
<option value="$ct" <!--#if $ct == $filter[0] then "selected" else ""#-->>$Tspec($ct)</option> <legend><span class="config_sprite_container sprite_config_rss_add">&nbsp;</span> $T('newFeedURI')</legend>
<!--#end for#--> <input type="text" size="10" name="feed" value="$feed"/>&nbsp;
</select> <input type="text" size="104" name="uri" value=""/><br/><br/>
</td> <input type="hidden" name="session" value="$session">
<!--#end if#--> <input type="submit" value="$T('button-add')"/>
</fieldset>
</form>
</div>
<td> <br class="clear" />
<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']#--> <p>$T('explain-RSS')</p>
<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> <table class="rssTable">
<input type="hidden" name="index" value="$fnum"/> <tr>
<input type="hidden" name="feed" value="$feed"/> <th></th>
<input type="submit" value="$T('button-save')"/> <th>Enabled</th>
</form> <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>
<td><form action="upd_rss_feed" method="post">
<td> <input type="hidden" name="session" value="$session">
<form action="del_rss_filter" method="post"> <input type="hidden" value="$feed" name="feed">
<input type="hidden" name="session" value="$session"> <input type="hidden" value="1" name="table">
<input type="hidden" value="$fnum" name="index"/> <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 "" #-->/>
<input type="hidden" value="$feed" name="feed"/>
<input type="submit" value="$T('rss-delFilter')"/>
</form> </form>
</td> </td>
<td><strong><a href="?feed=$rss[$feed]['link']">$feed</a></strong></td>
<td>$rss[$feed]['uri']</td>
</tr> </tr>
<!--#set $fnum = $fnum+1#--> <!--#end for#-->
<!--#end for#--> </table>
</table>
</fieldset>
</div>
<!--#end for#--> <!--#end if#-->
<!--#include $webdir + "/config_inc_footer.tmpl"#--> <!--#include $webdir + "/config_inc_footer.tmpl"#-->

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

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

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

@ -1289,6 +1289,20 @@ fieldset.EntryFieldSet {
width:120px; 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 { #schedulingTable td, #switchesTable td {
padding:3px 3px 5px; padding:3px 3px 5px;
} }
@ -1361,11 +1375,13 @@ legend .config_sprite_container {
} }
#config_content legend.latestWarnings, #config_content legend.latestWarnings,
#config_content legend.serverDisabled { background-color:#8B0000; }
#config_content legend.lastEmail, #config_content legend.lastEmail,
#config_content legend.serverBackup { background-color:#00008B; } #config_content legend.serverBackup { background-color:#00008B; }
#config_content legend.serverOptional { background-color:#009090; } #config_content legend.serverOptional { background-color:#009090; }
#config_content legend.serverEnabled { background-color:#006400; } #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 */ /* sprite-config.png */

3
interfaces/smpl/templates/config_rss.tmpl

@ -14,6 +14,9 @@ MochiKit.DOM.addLoadEvent(location = "../../#config-rss");
</fieldset> </fieldset>
</div> </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> <p>$T('explain-RSS')</p>
<!--#for $feed in $rss#--> <!--#for $feed in $rss#-->

1
language/de-de.txt

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

1
language/dk-da.txt

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

1
language/fr-fr.txt

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

1
language/nl-du.txt

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

1
language/sv-se.txt

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

1
language/us-en.txt

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

120
sabnzbd/interface.py

@ -111,6 +111,8 @@ def queueRaiser(root, kwargs):
def dcRaiser(root, kwargs): def dcRaiser(root, kwargs):
return Raiser(root, _dc=kwargs.get('_dc')) return Raiser(root, _dc=kwargs.get('_dc'))
def rssRaiser(root, kwargs):
return Raiser(root, feed=kwargs.get('feed'))
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def IsNone(value): def IsNone(value):
@ -1432,6 +1434,10 @@ class ConfigRss(object):
self.__root = root self.__root = root
self.__web_dir = web_dir self.__web_dir = web_dir
self.__prim = prim 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 @cherrypy.expose
def index(self, **kwargs): def index(self, **kwargs):
@ -1456,9 +1462,26 @@ class ConfigRss(object):
rss[feed]['pick_cat'] = pick_cat rss[feed]['pick_cat'] = pick_cat
rss[feed]['pick_script'] = pick_script 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 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 # Find a unique new Feed name
unum = 1 unum = 1
while 'Feed'+str(unum) in feeds: while 'Feed'+str(unum) in feeds:
@ -1483,20 +1506,23 @@ class ConfigRss(object):
cfg.set_dict(kwargs) cfg.set_dict(kwargs)
config.save_config() config.save_config()
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
def toggle_rss_feed(self, **kwargs): def toggle_rss_feed(self, **kwargs):
msg = check_session(kwargs) msg = check_session(kwargs)
if msg: return msg if msg: return msg
try: try:
cfg = config.get_rss()[kwargs.get('feed')] item = config.get_rss()[kwargs.get('feed')]
except KeyError: except KeyError:
cfg = None item = None
if cfg: if cfg:
cfg.enable.set(not cfg.enable()) item.enable.set(not item.enable())
config.save_config() 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 @cherrypy.expose
def add_rss_feed(self, **kwargs): def add_rss_feed(self, **kwargs):
@ -1524,7 +1550,7 @@ class ConfigRss(object):
try: try:
cfg = config.get_rss()[kwargs.get('feed')] cfg = config.get_rss()[kwargs.get('feed')]
except KeyError: except KeyError:
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
pp = kwargs.get('pp') pp = kwargs.get('pp')
if IsNone(pp): 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'), \ cfg.filters.update(int(kwargs.get('index', 0)), (cat, pp, script, kwargs.get('filter_type'), \
platform_encode(kwargs.get('filter_text')))) platform_encode(kwargs.get('filter_text'))))
config.save_config() config.save_config()
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
def pos_rss_filter(self, **kwargs): def pos_rss_filter(self, **kwargs):
@ -1547,12 +1573,12 @@ class ConfigRss(object):
try: try:
cfg = config.get_rss()[feed] cfg = config.get_rss()[feed]
except KeyError: except KeyError:
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
if current != new: if current != new:
cfg.filters.move(int(current), int(new)) cfg.filters.move(int(current), int(new))
config.save_config() config.save_config()
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
def del_rss_feed(self, *args, **kwargs): def del_rss_feed(self, *args, **kwargs):
@ -1570,11 +1596,11 @@ class ConfigRss(object):
try: try:
cfg = config.get_rss()[kwargs.get('feed')] cfg = config.get_rss()[kwargs.get('feed')]
except KeyError: except KeyError:
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
cfg.filters.delete(int(kwargs.get('index', 0))) cfg.filters.delete(int(kwargs.get('index', 0)))
config.save_config() config.save_config()
raise dcRaiser(self.__root, kwargs) raise rssRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
def download_rss_feed(self, *args, **kwargs): def download_rss_feed(self, *args, **kwargs):
@ -1582,12 +1608,11 @@ class ConfigRss(object):
if msg: return msg if msg: return msg
if 'feed' in kwargs: if 'feed' in kwargs:
feed = kwargs['feed'] feed = kwargs['feed']
msg = sabnzbd.rss.run_feed(feed, download=True, force=True) self.__refresh_readout = feed
if msg: self.__refresh_download = True
return badParameterResponse(msg) self.__refresh_force = True
else: self.__refresh_ignore = False
return ShowRssLog(feed, False) raise rssRaiser(self.__root, kwargs)
raise dcRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
def test_rss_feed(self, *args, **kwargs): def test_rss_feed(self, *args, **kwargs):
@ -1595,12 +1620,11 @@ class ConfigRss(object):
if msg: return msg if msg: return msg
if 'feed' in kwargs: if 'feed' in kwargs:
feed = kwargs['feed'] feed = kwargs['feed']
msg = sabnzbd.rss.run_feed(feed, download=False, ignoreFirst=True) self.__refresh_readout = feed
if msg: self.__refresh_download = False
return badParameterResponse(msg) self.__refresh_force = False
else: self.__refresh_ignore = True
return ShowRssLog(feed, True) raise rssRaiser(self.__root, kwargs)
raise dcRaiser(self.__root, kwargs)
@cherrypy.expose @cherrypy.expose
@ -1620,7 +1644,29 @@ class ConfigRss(object):
sabnzbd.add_url(id, pp, script, cat, priority, nzbname) sabnzbd.add_url(id, pp, script, cat, priority, nzbname)
# Need to pass the title instead # Need to pass the title instead
sabnzbd.rss.flag_downloaded(feed, id) 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) (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): def ShowRssLog(feed, all):
"""Return a html page listing an RSS log and a 'back' button """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 global __RSS
if __RSS: __RSS.delete(feed) 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 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): def show_result(feed):
global __RSS global __RSS
@ -72,6 +72,10 @@ def flag_downloaded(feed, id):
global __RSS global __RSS
if __RSS: __RSS.flag_downloaded(feed, id) 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(): def run_method():
global __RSS global __RSS
if __RSS: if __RSS:
@ -170,7 +174,7 @@ class RSSQueue(object):
self.shutdown = True self.shutdown = True
@synchronized(LOCK) @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 """ """ Run the query for one URI and apply filters """
self.shutdown = False self.shutdown = False
@ -181,8 +185,8 @@ class RSSQueue(object):
item = self.jobs[fd][lk] item = self.jobs[fd][lk]
if item.get('status', ' ')[0] == 'D' and \ if item.get('status', ' ')[0] == 'D' and \
item.get('title', '').lower() == title: item.get('title', '').lower() == title:
return True return fd
return False return ''
if not feed: if not feed:
@ -225,9 +229,9 @@ class RSSQueue(object):
regcount = len(regexes) regcount = len(regexes)
# Set first if this is the very first scan of this URI # Set first if this is the very first scan of this URI
first = feed not in self.jobs if feed not in self.jobs:
if first:
self.jobs[feed] = {} self.jobs[feed] = {}
first = not bool(self.jobs[feed])
jobs = self.jobs[feed] jobs = self.jobs[feed]
@ -241,44 +245,52 @@ class RSSQueue(object):
uri += '&dl=1' uri += '&dl=1'
# Read the RSS feed # Read the RSS feed
logging.debug("Running feedparser on %s", uri) if readout:
d = feedparser.parse(uri.replace('feed://', 'http://')) logging.debug("Running feedparser on %s", uri)
logging.debug("Done parsing %s", uri) d = feedparser.parse(uri.replace('feed://', 'http://'))
if not d: logging.debug("Done parsing %s", uri)
logging.info(Ta('warn-failRSS@1'), uri) if not d:
return T('warn-failRSS@1') % uri 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: entries = d.get('entries')
logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception'])) if 'bozo_exception' in d and not entries:
return T('warn-failRSS@2') % (uri, str(d['bozo_exception'])) logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception']))
if not entries: return T('warn-failRSS@2') % (uri, str(d['bozo_exception']))
logging.info('RSS Feed was empty: %s', uri) if not entries:
return '' logging.info('RSS Feed was empty: %s', uri)
return ''
else:
entries = jobs.keys()
order = 0 order = 0
# Filter out valid new links # Filter out valid new links
for entry in entries: for entry in entries:
if self.shutdown: return if self.shutdown: return
try: if readout:
link, category = _get_link(uri, entry) try:
except (AttributeError, IndexError): link, category = _get_link(uri, entry)
link = None except (AttributeError, IndexError):
category = '' link = None
logging.error('Incompatible feed %s', uri) category = ''
logging.info("Traceback: ", exc_info = True) logging.error('Incompatible feed %s', uri)
return 'Incompatible feed' logging.info("Traceback: ", exc_info = True)
category = latin1(category) 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: if link:
# Make sure there are no spaces in the URL # Make sure there are no spaces in the URL
link = link.replace(' ','') link = link.replace(' ','')
# Make sure only latin-1 encodable characters occur
atitle = latin1(entry.title)
title = unicoder(atitle)
newlinks.append(link) newlinks.append(link)
myCat = defCat myCat = defCat
@ -306,10 +318,12 @@ class RSSQueue(object):
elif not (notdefault(reCats[n]) or category): elif not (notdefault(reCats[n]) or category):
myScript = defScript myScript = defScript
if cfg.no_dupes() and dup_title(title): if cfg.no_dupes():
logging.debug("Rejected as duplicate") dup = dup_title(title)
n = -1 if dup:
break logging.debug("Rejected as duplicate")
n = dup
break
if category and reTypes[n]=='C': if category and reTypes[n]=='C':
found = re.search(regexes[n], category) found = re.search(regexes[n], category)
@ -341,12 +355,12 @@ class RSSQueue(object):
star = first star = first
if result: if result:
_HandleLink(jobs, link, title, 'G', myCat, myPP, myScript, _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: if act:
new_downloads.append(title) new_downloads.append(title)
else: else:
_HandleLink(jobs, link, title, 'B', myCat, myPP, myScript, _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 order += 1
# Send email if wanted and not "forced" # Send email if wanted and not "forced"
@ -374,6 +388,7 @@ class RSSQueue(object):
return '' return ''
def run(self): def run(self):
""" Run all the URI's and filters """ """ Run all the URI's and filters """
# Protect against second scheduler call before current # Protect against second scheduler call before current
@ -428,6 +443,15 @@ class RSSQueue(object):
lst[link]['status'] = 'D' lst[link]['status'] = 'D'
@synchronized(LOCK) @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): def clear_feed(self, feed):
# Remove any previous references to this feed name, and start fresh # Remove any previous references to this feed name, and start fresh
if feed in self.jobs: if feed in self.jobs:

Loading…
Cancel
Save