Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions data/interfaces/default/config_postProcessing.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,32 @@
<span class="component-desc">Do not use if you use a post-process script like sabToSickbeard on the same <i>TV Download Dir</i>.</span>
</label>
</div>

<div class="field-pair" #if $sickbeard.USE_PVRS == False then "style=\"display:none\"" else ""#>
<label class="nocheck clearfix" for="pvr_post_download_actionr">
<span class="component-title">PVR Cleanup</span>
<select name="pvr_post_download_action" id="pvr_post_download_action" class="input-large" >
#set $pvr_post_download_action_text = {PVR_DO_NOTHING: "Do Nothing ", PVR_CANCEL_RECORDING: "Cancel Pending Recording ", PVR_DELETE_RECORDING: "Delete Existing Recording "}
#for $curAction in (PVR_DO_NOTHING, PVR_CANCEL_RECORDING, PVR_DELETE_RECORDING):
#if $sickbeard.PVR_POST_DOWNLOAD_ACTION == $curAction:
#set $pvr_post_download_action = "selected=\"selected\""
#else
#set $pvr_post_download_action = ""
#end if
<option value="$curAction" $pvr_post_download_action>$pvr_post_download_action_text[$curAction]</option>
#end for
</select>
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc">What function should be performed on PVRs after a file is downloaded?</span>
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc"><b>NOTE:</b> This will allow you to unschedule and/or delete recordings from your pvr if the same episode has been downloaded via nzb/torrent.</span>
</label>

</div>

<div class="clearfix"></div>
<input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
Expand Down
15 changes: 13 additions & 2 deletions data/interfaces/default/config_providers.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<p>At least one provider is required but two are recommended.</p>

#if not $sickbeard.USE_NZBS or not $sickbeard.USE_TORRENTS:
<blockquote style="margin: 20px 0;">NZB/Torrent providers can be toggled in <b><a href="$sbRoot/config/search">Search Settings</a></b></blockquote>
<blockquote style="margin: 20px 0;">NZB/Torrent/PVR providers can be toggled in <b><a href="$sbRoot/config/search">Search Settings</a></b></blockquote>
#else:
<br/>
#end if
Expand Down Expand Up @@ -86,12 +86,14 @@
<span class="component-title jumbo">Configure Provider:</span>
<span class="component-desc">
#set $provider_config_list = []
#for $cur_provider in ("btn", "hdbits", "omgwtfnzbs", "tvtorrents", "torrentleech"):
#for $cur_provider in ("btn", "hdbits", "omgwtfnzbs", "tvtorrents", "torrentleech", "nextpvr"):
#set $cur_provider_obj = $sickbeard.providers.getProviderClass($cur_provider)
#if $cur_provider_obj.providerType == $GenericProvider.NZB and not $sickbeard.USE_NZBS:
#continue
#elif $cur_provider_obj.providerType == $GenericProvider.TORRENT and not $sickbeard.USE_TORRENTS:
#continue
#elif $cur_provider_obj.providerType == $GenericProvider.PVR and not $sickbeard.USE_PVRS:
#continue
#end if
$provider_config_list.append($cur_provider_obj)
#end for
Expand Down Expand Up @@ -189,6 +191,15 @@
</label>
</div>
</div><!-- /btnDiv //-->

<div class="providerDiv" id="nextpvrDiv">
<div class="field-pair">
<label class="clearfix">
<span class="component-title">NextPVR Url</span>
<input class="component-desc" type="text" name="nextpvr_url" value="$sickbeard.NEXTPVR_URL" size="40" />
</label>
</div>
</div><!-- /nextpvrDiv //-->

<!-- end div for editing providers -->

Expand Down
81 changes: 81 additions & 0 deletions data/interfaces/default/config_search.tmpl
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#import sickbeard
#from sickbeard.common import PVR_HD_CHANNEL_GREATER_THAN, PVR_HD_CHANNEL_LESS_THAN, PVR_HD_CHANNEL_FIXED_LIST
#set global $title="Config - Search Settings"
#set global $header="Search Settings"

Expand Down Expand Up @@ -289,6 +290,86 @@

</fieldset>
</div><!-- /component-group3 //-->

<div id="core-component-group4" class="component-group clearfix">

<div class="component-group-desc">
<h3>PVR Search</h3>
<p>Settings that dictate how Sick Beard handles PVR search results.</p>
</div>

<fieldset class="component-group-list">

<div class="field-pair">
<input type="checkbox" name="use_pvrs" class="enabler" id="use_pvrs" #if $sickbeard.USE_PVRS == True then "checked=\"checked\"" else ""# />
<label class="clearfix" for="use_pvrs">
<span class="component-title">Search PVRs</span>
<span class="component-desc">Should Sick Beard search via PVR providers?</span>
</label>
</div>

<div id="content_use_pvrs">
<div class="field-pair">
<label class="nocheck clearfix" for="pvr_hd_channel_method">
<span class="component-title">HD Channel Method</span>
<span class="component-desc">
<select name="pvr_hd_channel_method" id="pvr_hd_channel_method" class="input-medium" >
#set $pvr_hd_channel_method_text = {PVR_HD_CHANNEL_GREATER_THAN: "Greater Than", PVR_HD_CHANNEL_LESS_THAN: "Less Than", PVR_HD_CHANNEL_FIXED_LIST: "List"}
#for $curAction in (PVR_HD_CHANNEL_GREATER_THAN, PVR_HD_CHANNEL_LESS_THAN, PVR_HD_CHANNEL_FIXED_LIST):
#if $sickbeard.PVR_HD_CHANNEL_METHOD == $curAction:
#set $pvr_hd_channel_method = "selected=\"selected\""
#else
#set $pvr_hd_channel_method = ""
#end if
<option value="$curAction" $pvr_hd_channel_method>$pvr_hd_channel_method_text[$curAction]</option>
#end for
</select>
</span>
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc">How should sickbeard determine HD channels?</span>
</label>
</label>
</div>

<div class="field-pair" name="channel_cutoff_settings" id="channel_cutoff_settings">
<label class="nocheck clearfix">
<span class="component-title">Channel</span>
<input type="text" name="pvr_hd_channel_cutoff" id="pvr_hd_channel_cutoff" value="$sickbeard.PVR_HD_CHANNEL_CUTOFF" size="6" />
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc">The channel number where HD channels start/stop</span>
</label>
</div>

<div class="field-pair" name="channel_list_settings" id="channel_list_settings">
<label class="nocheck clearfix">
<span class="component-title">HD Channel List</span>
<input type="text" name="pvr_hd_channel_list" id="pvr_hd_channel_list" value="$sickbeard.PVR_HD_CHANNEL_LIST" size="35" />
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc">A comma separated list of HD channels</span>
</label>
</div>

<div class="field-pair" name="pvr_max_scheduling_days" id="pvr_max_scheduling_days">
<label class="nocheck clearfix">
<span class="component-title">Scheduling Limit</span>
<input type="text" name="pvr_max_scheduling_days" id="pvr_max_scheduling_days" value="$sickbeard.PVR_MAX_SCHEDULING_DAYS" size="6" />
</label>
<label class="nocheck clearfix">
<span class="component-title">&nbsp;</span>
<span class="component-desc">Maximum days in advance that a recording should be scheduled</span>
</label>
</div>

</div><!-- /content_use_pvrs //-->

</fieldset>
</div><!-- /component-group4 //-->

<div class="component-group-save">
<input type="submit" class="btn config_submitter" value="Save Changes" />
Expand Down
18 changes: 18 additions & 0 deletions data/js/configSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,23 @@ $(document).ready(function(){
});

toggle_torrent_title();


$.fn.pvr_hd_channel_method_handler = function() {

var selectedHdChannelMethod = $('#pvr_hd_channel_method :selected').val();

if (selectedHdChannelMethod == 2) {
$('#channel_list_settings').show();
$('#channel_cutoff_settings').hide();
} else {
$('#channel_list_settings').hide();
$('#channel_cutoff_settings').show();
}

};

$('#pvr_hd_channel_method').change($(this).pvr_hd_channel_method_handler);
$(this).pvr_hd_channel_method_handler();

});
79 changes: 23 additions & 56 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,25 @@
Sick Beard
Sick Beard PVR
=====

*Sick Beard is currently an alpha release. There may be severe bugs in it and at any given time it may not work at all.*

Sick Beard is a PVR for newsgroup users (with limited torrent support). It watches for new episodes of your favorite shows and when they are posted it downloads them, sorts and renames them, and optionally generates metadata for them. It currently supports several torrent and usenet sites and retrieves show information from theTVDB.com and TVRage.com.

Features include:

* automatically retrieves new episode torrent or nzb files
* can scan your existing library and then download any old seasons or episodes you're missing
* can watch for better versions and upgrade your existing episodes (to from TV DVD/BluRay for example)
* XBMC library updates, poster/fanart downloads, and NFO/TBN generation
* configurable episode renaming
* sends NZBs directly to SABnzbd, prioritizes and categorizes them properly
* available for any platform, uses simple HTTP interface
* can notify XBMC, Growl, or Twitter when new episodes are downloaded
* specials and double episode support


Sick Beard makes use of the following projects:

* [cherrypy][cherrypy]
* [Cheetah][cheetah]
* [simplejson][simplejson]
* [tvdb_api][tvdb_api]
* [ConfigObj][configobj]
* [SABnzbd+][sabnzbd]
* [jQuery][jquery]
* [Python GNTP][pythongntp]
* [SocksiPy][socks]
* [python-dateutil][dateutil]
* [jsonrpclib][jsonrpclib]

## Dependencies

To run Sick Beard from source you will need Python 2.5+ and Cheetah 2.1.0+.
The [binary releases][githubdownloads] are standalone. Build 503 and older can be found on the now defunct [legacy releases][googledownloads].

## Bugs

If you find a bug please report it or it'll never get fixed. Verify that it hasn't [already been submitted][googleissues] and then [log a new bug][googlenewissue]. Be sure to provide as much information as possible.

[cherrypy]: http://www.cherrypy.org
[cheetah]: http://www.cheetahtemplate.org/
[simplejson]: http://code.google.com/p/simplejson/
[tvdb_api]: http://github.com/dbr/tvdb_api
[configobj]: http://www.voidspace.org.uk/python/configobj.html
[sabnzbd]: http://www.sabnzbd.org/
[jquery]: http://jquery.com
[pythongntp]: http://github.com/kfdm/gntp
[socks]: http://code.google.com/p/socksipy-branch/
[dateutil]: http://labix.org/python-dateutil
[googledownloads]: http://code.google.com/p/sickbeard/downloads/list
[googleissues]: http://code.google.com/p/sickbeard/issues/list
[googlenewissue]: http://code.google.com/p/sickbeard/issues/entry
[jsonrpclib]: https://github.com/joshmarshall/jsonrpclib
[githubdownloads]: https://github.com/midgetspy/Sick-Beard/releases
This fork of the Sick Beard project adds in support for pvr recording software. Currently the only software supported is [NextPVR][nextPVR], although in theory others could be added.

I find it useful for recording shows that might not be available via NZB or Torrent files or if you'd prefer not to use those methods but still want Sick Beard to manage all of your TV shows.

Please see the original [Sick Beard][sickbeard] documentation for initial setup. If you already have a configured and running Sick Beard instance, you should be able to grab this source, copy your config.ini and sickbeard.db files into this project and start it up.


## Configuration

In order to configure the new functionality, you need to set options in 3 places in the Config menu -

* **Search Settings** - Check the **Search PVRs** box and choose how HD channels will be determined along with how many days in advance recordings will be scheduled. Recommended setting is about 2 or 3 days. Save your choices.

* **Search Providers** - Ensure that the PVR you want to use is checked in the **Priorities** section. You also need to configure any options listed in **Configure Built-In Providers** for the selected pvr. For NextPVR it is just the url where it is running.

* **Post Processing** - Choose what you would like to happen if a show is both recorded and downloaded. Your options are to do nothing and leave the recording, unschedule the recording if it has not yet recorded, or delete the recording if it already has recorded.

Any post processing such as commercial removal, video compression, renaming etc is currently left up to the PVR software. Although, once that is complete, you can use the autoProcessTV script to import into Sick Beard.


[nextPVR]: http://nextpvr.com/
[sickbeard]: http://sickbeard.com/
Loading