mirror of
https://github.com/SickGear/SickGear.git
synced 2025-01-05 17:43:37 +00:00
Merge pull request #1053 from JackDandy/feature/ChangeWebApi
Change overhaul and add API functions
This commit is contained in:
commit
e2428b56e6
11 changed files with 2665 additions and 548 deletions
97
CHANGES.md
97
CHANGES.md
|
@ -1,4 +1,99 @@
|
|||
### 0.14.0 (2018-02-01 02:30:00 UTC)
|
||||
### 0.15.0 (2018-xx-xx xx:xx:xx UTC)
|
||||
|
||||
* Change overhaul and add API functions
|
||||
* Change API version... start with 10
|
||||
* Change set application response header to 'SickGear' + add API version
|
||||
* Change return timezone (of network) in API
|
||||
* Add indexer to calls
|
||||
* Add SickGear Command tip for old SickBeard commands
|
||||
* Add warning old sickbeard API calls only support tvdb shows
|
||||
* Add "tvdbid" fallback only for sickbeard calls
|
||||
* Add listcommands
|
||||
* Add list of all commands (old + new) in listcommand page at the beginning
|
||||
* Change hide 'listcommands' command from commands list, since it needs the API builder CSS + is html not json
|
||||
* Add missing help in webapi
|
||||
* Add episode info: absolute_number, scene_season, scene_episode, scene_absolute_number
|
||||
* Add fork to SB command
|
||||
* Add sg
|
||||
* Add sg.activatescenenumbering
|
||||
* Add sg.addrootdir
|
||||
* Add sg.checkscheduler
|
||||
* Add sg.deleterootdir
|
||||
* Add sg.episode
|
||||
* Add sg.episode.search
|
||||
* Add sg.episode.setstatus
|
||||
* Add sg.episode.subtitlesearch
|
||||
* Add sg.exceptions
|
||||
* Add sg.forcesearch
|
||||
* Add sg.future
|
||||
* Add sg.getdefaults
|
||||
* Add sg.getindexericon
|
||||
* Add sg.getindexers to list all indexers
|
||||
* Add sg.getmessages
|
||||
* Add sg.getnetworkicon
|
||||
* Add sg.getrootdirs
|
||||
* Add sg.getqualities
|
||||
* Add sg.getqualitystrings
|
||||
* Add sg.history
|
||||
* Add sg.history.clear
|
||||
* Add sg.history.trim
|
||||
* Add sg.listtraktaccounts
|
||||
* Add sg.listignorewords
|
||||
* Add sg.listrequiedwords
|
||||
* Add sg.logs
|
||||
* Add sg.pausebacklog
|
||||
* Add sg.postprocess
|
||||
* Add sg.ping
|
||||
* Add sg.restart
|
||||
* Add sg.searchqueue
|
||||
* Add sg.searchtv to search all indexers
|
||||
* Add sg.setexceptions
|
||||
* Add sg.setignorewords
|
||||
* Add sg.setrequiredwords
|
||||
* Add sg.setscenenumber
|
||||
* Add sg.show
|
||||
* Add sg.show.addexisting
|
||||
* Add sg.show.addnew
|
||||
* Add sg.show.cache
|
||||
* Add sg.show.delete
|
||||
* Add sg.show.getbanner
|
||||
* Add sg.show.getfanart
|
||||
* Add sg.show.getposter
|
||||
* Add sg.show.getquality
|
||||
* Add sg.show.listfanart
|
||||
* Add sg.show.ratefanart
|
||||
* Add sg.show.seasonlist
|
||||
* Add sg.show.seasons
|
||||
* Add sg.show.setquality
|
||||
* Add sg.show.stats
|
||||
* Add sg.show.refresh
|
||||
* Add sg.show.pause
|
||||
* Add sg.show.update
|
||||
* Add sg.shows
|
||||
* Add sg.shows.browsetrakt
|
||||
* Add sg.shows.forceupdate
|
||||
* Add sg.shows.queue
|
||||
* Add sg.shows.stats
|
||||
* Change sickbeard to sickgear
|
||||
* Change sickbeard_call to property
|
||||
* Change sg.episode.setstatus allow setting of quality
|
||||
* Change sg.history, history command output
|
||||
* Change sg.searchtv to list of indexers
|
||||
* Add uhd4kweb to qualities
|
||||
* Add upgrade_once to add existing shows
|
||||
* Add upgrade_once to add new show
|
||||
* Add upgrade_once to show quality settings (get/set)
|
||||
* Add 'ids' to Show + Shows
|
||||
* Add ids to coming eps + get tvdb id from ids
|
||||
* Add 'status_str' to coming eps
|
||||
* Add 'local_datetime' to comming eps + runtime
|
||||
* Add X-Filename response header to getbanner, getposter
|
||||
* Add X-Fanartname response header for sg.show.getfanart
|
||||
|
||||
[develop changelog]
|
||||
|
||||
|
||||
### 0.14.0 (2018-02-01 02:30:00 UTC)
|
||||
|
||||
* Change improve core scheduler logic
|
||||
* Change improve media process to parse anime format 'Show Name 123 - 001 - Ep 1 name'
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>API Builder</title>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="$sbRoot/css/style.css?v=$sbPID">
|
||||
<link rel="stylesheet" type="text/css" href="$sbRoot/css/light.css?v=$sbPID">
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
<!--
|
||||
sbRoot = "$sbRoot";
|
||||
//-->
|
||||
|
@ -18,6 +20,8 @@ sbRoot = "$sbRoot";
|
|||
#apibuilder select option { padding: 1px 6px; line-height: 1.2em; }
|
||||
#apibuilder .disabled { color: #ccc; }
|
||||
#apibuilder .action { background-color: #efefef; }
|
||||
.parareq {display: block; color: red; font-weight: bolder; font-size: 80%;}
|
||||
.paraopt {display: block; color: gray; font-size: 80%;}
|
||||
-->
|
||||
</style>
|
||||
|
||||
|
@ -27,54 +31,201 @@ var disable_empty_list=true;
|
|||
|
||||
addListGroup("api", "Command");
|
||||
|
||||
addOption("Command", "SickBeard", "?cmd=sb", 1); //make default
|
||||
addOption("Command", "SickGear", "?cmd=sg", 1); //make default
|
||||
addOption("Command", "SickBeard", "?cmd=sb");
|
||||
addOption("Command", "List Commands", "?cmd=listcommands");
|
||||
addList("Command", "SickBeard.AddRootDir", "?cmd=sb.addrootdir", "sb.addrootdir", "", "", "action");
|
||||
addList("Command", "SickGear.AddRootDir", "?cmd=sg.addrootdir", "sb.addrootdir", "", "", "action");
|
||||
addOption("Command", "SickBeard.CheckScheduler", "?cmd=sb.checkscheduler", "", "", "action");
|
||||
addOption("Command", "SickGear.CheckScheduler", "?cmd=sg.checkscheduler", "", "", "action");
|
||||
addList("Command", "SickBeard.DeleteRootDir", "?cmd=sb.deleterootdir", "sb.deleterootdir", "", "", "action");
|
||||
addList("Command", "SickGear.DeleteRootDir", "?cmd=sg.deleterootdir", "sb.deleterootdir", "", "", "action");
|
||||
addOption("Command", "SickBeard.ForceSearch", "?cmd=sb.forcesearch", "", "", "action");
|
||||
addList("Command", "SickGear.ForceSearch", "?cmd=sg.forcesearch", "sg.forcesearch", "", "action");
|
||||
addOption("Command", "SickGear.SearchQueue", "?cmd=sg.searchqueue", "", "", "action");
|
||||
addOption("Command", "SickBeard.GetDefaults", "?cmd=sb.getdefaults", "", "", "action");
|
||||
addOption("Command", "SickGear.GetDefaults", "?cmd=sg.getdefaults", "", "", "action");
|
||||
addOption("Command", "SickBeard.GetMessages", "?cmd=sb.getmessages", "", "", "action");
|
||||
addOption("Command", "SickGear.GetMessages", "?cmd=sg.getmessages", "", "", "action");
|
||||
addOption("Command", "SickGear.GetQualities", "?cmd=sg.getqualities", "", "", "action");
|
||||
addOption("Command", "SickGear.GetQualityStrings", "?cmd=sg.getqualitystrings", "", "", "action");
|
||||
addList("Command", "SickGear.GetIndexers", "?cmd=sg.getindexers", "listindexers", "", "action");
|
||||
addList("Command", "SickGear.GetIndexerIcon", "?cmd=sg.getindexericon", "getindexericon", "", "action");
|
||||
addList("Command", "SickGear.GetNetworkIcon", "?cmd=sg.getnetworkicon", "getnetworkicon", "", "action");
|
||||
addOption("Command", "SickBeard.GetRootDirs", "?cmd=sb.getrootdirs", "", "", "action");
|
||||
addOption("Command", "SickGar.GetRootDirs", "?cmd=sg.getrootdirs", "", "", "action");
|
||||
addList("Command", "SickBeard.PauseBacklog", "?cmd=sb.pausebacklog", "sb.pausebacklog", "", "", "action");
|
||||
addList("Command", "SickGear.PauseBacklog", "?cmd=sg.pausebacklog", "sb.pausebacklog", "", "", "action");
|
||||
addOption("Command", "SickBeard.Ping", "?cmd=sb.ping", "", "", "action");
|
||||
addOption("Command", "SickGear.Ping", "?cmd=sg.ping", "", "", "action");
|
||||
addOption("Command", "SickBeard.Restart", "?cmd=sb.restart", "", "", "action");
|
||||
addOption("Command", "SickGear.Restart", "?cmd=sg.restart", "", "", "action");
|
||||
addList("Command", "SickBeard.SearchTVDB", "?cmd=sb.searchtvdb", "sb.searchtvdb", "", "", "action");
|
||||
addList("Command", "SickGear.SearchTV", "?cmd=sg.searchtv", "sg.searchtv", "", "", "action");
|
||||
addList("Command", "SickBeard.SetDefaults", "?cmd=sb.setdefaults", "sb.setdefaults", "", "", "action");
|
||||
addOption("Command", "SickBeard.Shutdown", "?cmd=sb.shutdown", "", "", "action");
|
||||
addList("Command", "SickGear.ListIgnoreWords", "?cmd=sg.listignorewords", "listignorewords", "", "action");
|
||||
addList("Command", "SickGear.SetIgnoreWords", "?cmd=sg.setignorewords", "setwords", "", "action");
|
||||
addList("Command", "SickGear.ListRequiredWords", "?cmd=sg.listrequiredwords", "listrequiredwords", "", "action");
|
||||
addList("Command", "SickGear.SetRequiredWords", "?cmd=sg.setrequiredwords", "setwords", "", "action");
|
||||
addList("Command", "Coming Episodes", "?cmd=future", "future");
|
||||
addList("Command", "SickGear - Coming Episodes", "?cmd=sg.future", "future");
|
||||
addList("Command", "Episode", "?cmd=episode", "episode");
|
||||
addList("Command", "SickGear.Episode", "?cmd=sg.episode", "sg.episode");
|
||||
addList("Command", "Episode.Search", "?cmd=episode.search", "episode.search", "", "", "action");
|
||||
addList("Command", "SickGear.Episode.Search", "?cmd=sg.episode.search", "sg.episode.search", "", "", "action");
|
||||
addList("Command", "Episode.SetStatus", "?cmd=episode.setstatus", "episode.setstatus", "", "", "action");
|
||||
addList("Command", "SickGear.Episode.SetStatus", "?cmd=sg.episode.setstatus", "sg.episode.setstatus", "", "", "action");
|
||||
addList("Command", "Scene Exceptions", "?cmd=exceptions", "exceptions");
|
||||
addList("Command", "SickGear Scene Exceptions", "?cmd=sg.exceptions", "sg.exceptions");
|
||||
addList("Command", "Set Scene Exceptions", "?cmd=sg.setexceptions", "changeexceptions", "", "action");
|
||||
addList("Command", "Set Scene Number", "?cmd=sg.setscenenumber", "setscenenumber", "", "action");
|
||||
addList("Command", "Activate Scene Numbering", "?cmd=sg.activatescenenumbering", "activatescenenumber", "", "action");
|
||||
addList("Command", "History", "?cmd=history", "history");
|
||||
addList("Command", "SickGear History", "?cmd=sg.history", "history");
|
||||
addOption("Command", "History.Clear", "?cmd=history.clear", "", "", "action");
|
||||
addOption("Command", "SickGear.History.Clear", "?cmd=sg.history.clear", "", "", "action");
|
||||
addOption("Command", "History.Trim", "?cmd=history.trim", "", "", "action");
|
||||
addOption("Command", "SickGear.History.Trim", "?cmd=sg.history.trim", "", "", "action");
|
||||
addList("Command", "PostProcess", "?cmd=postprocess", "postprocess", "", "","action");
|
||||
addList("Command", "SickGear PostProcess", "?cmd=sg.postprocess", "postprocess", "", "","action");
|
||||
|
||||
addList("Command", "Logs", "?cmd=logs", "logs");
|
||||
addList("Command", "SickGear Logs", "?cmd=sg.logs", "logs");
|
||||
addList("Command", "Show", "?cmd=show", "indexerid");
|
||||
addList("Command", "SickGear.Show", "?cmd=sg.show", "sg.indexerid");
|
||||
addList("Command", "Show.AddExisting", "?cmd=show.addexisting", "show.addexisting", "", "", "action");
|
||||
addList("Command", "SickGear.Show.AddExisting", "?cmd=sg.show.addexisting", "sg.show.addexisting", "", "", "action");
|
||||
addList("Command", "Show.AddNew", "?cmd=show.addnew", "show.addnew", "", "", "action");
|
||||
addList("Command", "SickGear.Show.AddNew", "?cmd=sg.show.addnew", "sg.show.addnew", "", "", "action");
|
||||
addList("Command", "Show.Cache", "?cmd=show.cache", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Cache", "?cmd=sg.show.cache", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.Delete", "?cmd=show.delete", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Delete", "?cmd=sg.show.delete", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.GetBanner", "?cmd=show.getbanner", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.GetBanner", "?cmd=sg.show.getbanner", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.ListFanart", "?cmd=sg.show.listfanart", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.GetFanart", "?cmd=sg.show.getfanart", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.GetPoster", "?cmd=show.getposter", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.GetPoster", "?cmd=sg.show.getposter", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.GetQuality", "?cmd=show.getquality", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.GetQuality", "?cmd=sg.show.getquality", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.Pause", "?cmd=show.pause", "show.pause", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Pause", "?cmd=sg.show.pause", "sg.show.pause", "", "", "action");
|
||||
addList("Command", "Show.Refresh", "?cmd=show.refresh", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Refresh", "?cmd=sg.show.refresh", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.SeasonList", "?cmd=show.seasonlist", "show.seasonlist", "", "", "action");
|
||||
addList("Command", "SickGear.Show.SeasonList", "?cmd=sg.show.seasonlist", "sg.show.seasonlist", "", "", "action");
|
||||
addList("Command", "Show.Seasons", "?cmd=show.seasons", "seasons", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Seasons", "?cmd=sg.show.seasons", "sg.seasons", "", "", "action");
|
||||
addList("Command", "Show.SetQuality", "?cmd=show.setquality", "show.setquality", "", "", "action");
|
||||
addList("Command", "SickGear.Show.SetQuality", "?cmd=sg.show.setquality", "sg.show.setquality", "", "", "action");
|
||||
addList("Command", "Show.Stats", "?cmd=show.stats", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Stats", "?cmd=sg.show.stats", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Show.Update", "?cmd=show.update", "indexerid", "", "", "action");
|
||||
addList("Command", "SickGear.Show.Update", "?cmd=sg.show.update", "sg.indexerid", "", "", "action");
|
||||
addList("Command", "Shows", "?cmd=shows", "shows");
|
||||
addList("Command", "SickGear.Shows", "?cmd=sg.shows", "shows");
|
||||
addList("Command", "SickGear.Shows.BrowseTrakt", "?cmd=sg.shows.browsetrakt", "sg.shows.browsetrakt");
|
||||
addOption("Command", "Shows.ListTraktAccounts", "?cmd=sg.listtraktaccounts", "", "", "action");
|
||||
addOption("Command", "Shows.Stats", "?cmd=shows.stats", "", "", "action");
|
||||
addOption("Command", "SickGear.Shows.Stats", "?cmd=sg.shows.stats", "", "", "action");
|
||||
addOption("Command", "SickGear.Shows.ForceUpdate", "?cmd=sg.shows.forceupdate", "", "", "action");
|
||||
addOption("Command", "SickGear.Shows.Queue", "?cmd=sg.shows.queue", "", "", "action");
|
||||
|
||||
addOption("sg.shows.browsetrakt", "Anticipated", "&type=anticipated");
|
||||
addOption("sg.shows.browsetrakt", "New Shows", "&type=newshows");
|
||||
addOption("sg.shows.browsetrakt", "New Seasons", "&type=newseasons");
|
||||
addOption("sg.shows.browsetrakt", "Popular", "&type=popular");
|
||||
addOption("sg.shows.browsetrakt", "Trending", "&type=trending");
|
||||
addList("sg.shows.browsetrakt", "Recommended", "&type=recommended", "sg.traktaccounts");
|
||||
addList("sg.shows.browsetrakt", "Watchlist", "&type=watchlist", "sg.traktaccounts");
|
||||
|
||||
#from sickbeard import TRAKT_ACCOUNTS
|
||||
#for $a in $TRAKT_ACCOUNTS
|
||||
addOption("sg.traktaccounts", "$TRAKT_ACCOUNTS[$a].name", "&account_id=$a");
|
||||
#end for
|
||||
|
||||
addOption("sg.forcesearch", "Recent Search", "&searchtype=recent", 1);
|
||||
addOption("sg.forcesearch", "Backlog Search", "&searchtype=backlog");
|
||||
addOption("sg.forcesearch", "Proper Search", "&searchtype=proper");
|
||||
|
||||
addOption("listindexers", "Optional Param", "", 1);
|
||||
addOption("listindexers", "Searchable only", "&searchable-only=1");
|
||||
|
||||
addOption("getnetworkicon", "CBS", "&network=cbs");
|
||||
addOption("getnetworkicon", "NBC", "&network=nbc");
|
||||
addOption("getnetworkicon", "Youtube", "&network=youtube");
|
||||
addOption("getnetworkicon", "The CW", "&network=the%20cw");
|
||||
addOption("getnetworkicon", "Crime & Investigation Network", "&network=crime%20%26%20investigation%20network");
|
||||
|
||||
#for $i in $indexers
|
||||
addList("getindexericon", "$indexers[$i]", "&indexer=$i", "");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("activatescenenumber", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer", "scenenumber-active");
|
||||
#end for
|
||||
addOption("scenenumber-active", "Activate", "&activate=1");
|
||||
addOption("scenenumber-active", "Deactivate", "&activate=0");
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("setscenenumber", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer", "setscene-fseason");
|
||||
#end for
|
||||
|
||||
addOption("listignorewords", "Optional Param", "", 1);
|
||||
#for $curShow in $sortedShowList:
|
||||
addOption("listignorewords", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer");
|
||||
#end for
|
||||
|
||||
addList("setwords", "Optional Param", "", "addwords");
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("setwords", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer", "addwords");
|
||||
#end for
|
||||
|
||||
addList("addwords", "Optional Param", "", "removewords");
|
||||
addList("addwords", "ignore1", "&add=ignore1", "removewords");
|
||||
addList("addwords", "ignore2, ignore3", "&add=ignore2|ignore3", "removewords");
|
||||
|
||||
addList("removewords", "Optional Param", "", "useregex");
|
||||
addList("removewords", "ignore1", "&remove=ignore1", "useregex");
|
||||
addList("removewords", "ignore2", "&remove=ignore2", "useregex");
|
||||
addList("removewords", "ignore2, ignore3", "&remove=ignore2|ignore3", "useregex");
|
||||
|
||||
addOption("useregex", "Optional Param", "", 1);
|
||||
addOption("useregex", "as Regex", "®ex=1");
|
||||
addOption("useregex", "as Words", "®ex=0");
|
||||
|
||||
addOption("listrequiredwords", "Optional Param", "", 1);
|
||||
#for $curShow in $sortedShowList:
|
||||
addOption("listrequiredwords", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer");
|
||||
#end for
|
||||
|
||||
addList("setscene-fseason", "forSeason", "", "setscene-fepisode", 1);
|
||||
addList("setscene-fepisode", "forEpisode", "", "setscene-fabsolute", 1);
|
||||
addList("setscene-fabsolute", "forAbsolute", "", "setscene-season");
|
||||
addList("setscene-season", "sceneSeason", "", "setscene-episode", 1);
|
||||
addList("setscene-episode", "sceneEpisode", "", "setscene-absolute", 1);
|
||||
addList("setscene-absolute", "sceneAbsolute", "", "");
|
||||
|
||||
#for $c in range(1, 11):
|
||||
addList("setscene-fseason", "$c", "&forSeason=$c", "setscene-fepisode");
|
||||
addList("setscene-fepisode", "$c", "&forEpisode=$c", "setscene-fabsolute");
|
||||
addList("setscene-fabsolute", "$c", "&forAbsolute=$c", "setscene-season");
|
||||
addList("setscene-season", "$c", "&sceneSeason=$c", "setscene-episode");
|
||||
addList("setscene-episode", "$c", "&sceneEpisode=$c", "setscene-absolute");
|
||||
addList("setscene-absolute", "$c", "&sceneAbsolute=$c", "");
|
||||
#end for
|
||||
|
||||
// addOption("indexerid", "Optional Param", "", 1);
|
||||
#for $curShow in $sortedShowList:
|
||||
addOption("indexerid", "$curShow.name", "&indexerid=$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addOption("sg.indexerid", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
addOption("logs", "Optional Param", "", 1);
|
||||
addOption("logs", "Debug", "&min_level=debug");
|
||||
addOption("logs", "Info", "&min_level=info");
|
||||
|
@ -109,20 +260,26 @@ addOption("shows", "Show Only Not Paused", "&paused=0");
|
|||
addOption("shows", "Sort by Show Name", "&sort=name");
|
||||
addOption("shows", "Sort by TVDB ID", "&sort=id");
|
||||
|
||||
addList("show.addexisting", "C:\\temp\\show1", "&location=C:\\temp\\show1", "show.addexisting-indexerid");
|
||||
addList("show.addexisting", "D:\\Temp\\show2", "&location=D:\\Temp\\show2", "show.addexisting-indexerid");
|
||||
addList("show.addexisting", "S:\\TV\\Ancient Aliens", "&location=S:\\TV\\Ancient Aliens", "show.addexisting-indexerid");
|
||||
addList("show.addexisting", "S:\\TV\\Chuck", "&location=S:\\TV\\Chuck", "show.addexisting-indexerid");
|
||||
addList("sg.show.addexisting", "101501 (Ancient Aliens)", "&indexer=1&indexerid=101501", "show.addexisting-loc");
|
||||
addList("sg.show.addexisting", "80348 (Chuck)", "&indexer=1&indexerid=80348", "show.addexisting-loc");
|
||||
|
||||
addList("show.addexisting-indexerid", "101501 (Ancient Aliens)", "&indexerid=101501", "show.addexisting-opt");
|
||||
addList("show.addexisting-indexerid", "80348 (Chuck)", "&indexerid=80348", "show.addexisting-opt");
|
||||
addList("show.addexisting", "101501 (Ancient Aliens)", "&tvdbid=101501", "show.addexisting-loc");
|
||||
addList("show.addexisting", "80348 (Chuck)", "&tvdbid=80348", "show.addexisting-loc");
|
||||
|
||||
addList("show.addexisting-loc", "C:\\temp\\show1", "&location=C:\\temp\\show1", "show.addexisting-opt");
|
||||
addList("show.addexisting-loc", "D:\\Temp\\show2", "&location=D:\\Temp\\show2", "show.addexisting-opt");
|
||||
addList("show.addexisting-loc", "S:\\TV\\Ancient Aliens", "&location=S:\\TV\\Ancient Aliens", "show.addexisting-opt");
|
||||
addList("show.addexisting-loc", "S:\\TV\\Chuck", "&location=S:\\TV\\Chuck", "show.addexisting-opt");
|
||||
|
||||
addOption("show.addexisting-opt", "Optional Param", "", 1);
|
||||
addList("show.addexisting-opt", "No Season Folder", "&season_folder=0", "quality");
|
||||
addList("show.addexisting-opt", "Use Season Folder", "&season_folder=1", "quality");
|
||||
|
||||
addList("show.addnew", "101501 (Ancient Aliens)", "&indexerid=101501", "show.addnew-loc");
|
||||
addList("show.addnew", "80348 (Chuck)", "&indexerid=80348", "show.addnew-loc");
|
||||
addList("show.addnew", "101501 (Ancient Aliens)", "&tvdbid=101501", "show.addnew-loc");
|
||||
addList("show.addnew", "80348 (Chuck)", "&tvdbid=80348", "show.addnew-loc");
|
||||
|
||||
addList("sg.show.addnew", "101501 (Ancient Aliens)", "&indexer=1&indexerid=101501", "show.addnew-loc");
|
||||
addList("sg.show.addnew", "80348 (Chuck)", "&indexer=1&indexerid=80348", "show.addnew-loc");
|
||||
|
||||
addOption("show.addnew-loc", "Optional Param", "", 1);
|
||||
addList("show.addnew-loc", "C:\\Temp", "&location=C:\\temp", "show.addnew-status");
|
||||
|
@ -141,52 +298,56 @@ addList("show.addnew-opt", "No Season Folder", "&season_folder=0", "quality");
|
|||
addList("show.addnew-opt", "Use Season Folder", "&season_folder=1", "quality");
|
||||
|
||||
addOptGroup("sb.searchtvdb", "Search by Name");
|
||||
addList("sb.searchtvdb", "Lost", "&name=Lost", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "office", "&name=office", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "OffiCE", "&name=OffiCE", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "Leno", "&name=leno", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "Top Gear", "&name=Top Gear", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "Lost", "&name=Lost", "");
|
||||
addList("sb.searchtvdb", "office", "&name=office", "");
|
||||
addList("sb.searchtvdb", "OffiCE", "&name=OffiCE", "");
|
||||
addList("sb.searchtvdb", "Leno", "&name=leno", "");
|
||||
addList("sb.searchtvdb", "Top Gear", "&name=Top Gear", "");
|
||||
endOptGroup("sb.searchtvdb");
|
||||
addOptGroup("sb.searchtvdb", "Search by indexerid");
|
||||
addList("sb.searchtvdb", "73739", "&indexerid=73739", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "74608", "&indexerid=74608", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "199051", "&indexerid=199051", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "123456 (invalid show)", "&indexerid=123456", "sb.searchtvdb-lang");
|
||||
addList("sb.searchtvdb", "73739", "&indexerid=73739", "");
|
||||
addList("sb.searchtvdb", "74608", "&indexerid=74608", "");
|
||||
addList("sb.searchtvdb", "199051", "&indexerid=199051", "");
|
||||
addList("sb.searchtvdb", "123456 (invalid show)", "&indexerid=123456", "");
|
||||
endOptGroup("sb.searchtvdb");
|
||||
|
||||
addOption("sb.searchtvdb-lang", "Optional Param", "", 1);
|
||||
addOption("sb.searchtvdb-lang", "Chinese", "&lang=zh"); // 27
|
||||
addOption("sb.searchtvdb-lang", "Croatian", "&lang=hr"); // 31
|
||||
addOption("sb.searchtvdb-lang", "Czech", "&lang=cs"); // 28
|
||||
addOption("sb.searchtvdb-lang", "Danish", "&lang=da"); // 10
|
||||
addOption("sb.searchtvdb-lang", "Dutch", "&lang=nl"); // 13
|
||||
addOption("sb.searchtvdb-lang", "English", "&lang=en"); // 7
|
||||
addOption("sb.searchtvdb-lang", "Finnish", "&lang=fi"); // 11 -- Suomeksi
|
||||
addOption("sb.searchtvdb-lang", "French", "&lang=fr"); // 17
|
||||
addOption("sb.searchtvdb-lang", "German", "&lang=de"); // 14
|
||||
addOption("sb.searchtvdb-lang", "Greek", "&lang=el"); // 20
|
||||
addOption("sb.searchtvdb-lang", "Hebrew", "&lang=he"); // 24
|
||||
addOption("sb.searchtvdb-lang", "Hungarian", "&lang=hu"); // 19 -- Magyar
|
||||
addOption("sb.searchtvdb-lang", "Italian", "&lang=it"); // 15
|
||||
addOption("sb.searchtvdb-lang", "Japanese", "&lang=ja"); // 25
|
||||
addOption("sb.searchtvdb-lang", "Korean", "&lang=ko"); // 32
|
||||
addOption("sb.searchtvdb-lang", "Norwegian", "&lang=no"); // 9
|
||||
addOption("sb.searchtvdb-lang", "Polish", "&lang=pl"); // 18
|
||||
addOption("sb.searchtvdb-lang", "Portuguese", "&lang=pt");// 26
|
||||
addOption("sb.searchtvdb-lang", "Russian", "&lang=ru"); // 22
|
||||
addOption("sb.searchtvdb-lang", "Slovenian", "&lang=sl"); // 30
|
||||
addOption("sb.searchtvdb-lang", "Spanish", "&lang=es"); // 16
|
||||
addOption("sb.searchtvdb-lang", "Swedish", "&lang=sv"); // 8
|
||||
addOption("sb.searchtvdb-lang", "Turkish", "&lang=tr"); // 21
|
||||
addOptGroup("sg.searchtv", "Search by Name");
|
||||
addList("sg.searchtv", "Lost", "&name=Lost", "indexertosearch");
|
||||
addList("sg.searchtv", "office", "&name=office", "indexertosearch");
|
||||
addList("sg.searchtv", "OffiCE", "&name=OffiCE", "indexertosearch");
|
||||
addList("sg.searchtv", "Leno", "&name=leno", "indexertosearch");
|
||||
addList("sg.searchtv", "Top Gear", "&name=Top Gear", "indexertosearch");
|
||||
endOptGroup("sg.searchtv");
|
||||
addOptGroup("sg.searchtv", "Search by indexerid");
|
||||
addList("sg.searchtv", "73739", "&indexerid=73739", "indexertosearch");
|
||||
addList("sg.searchtv", "74608", "&indexerid=74608", "indexertosearch");
|
||||
addList("sg.searchtv", "199051", "&indexerid=199051", "indexertosearch");
|
||||
addList("sg.searchtv", "123456 (invalid show)", "&indexerid=123456", "indexertosearch");
|
||||
endOptGroup("sg.searchtv");
|
||||
|
||||
addOption("indexertosearch", "Optional Param", "", 1);
|
||||
addOption("indexertosearch", "All Indexers", "&indexers=-1");
|
||||
|
||||
#for $i in $searchindexers
|
||||
addOption("indexertosearch", "$searchindexers[$i]", "&indexers=$i");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("seasons", "$curShow.name", "&indexerid=$curShow.indexerid", "seasons-$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.seasons", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "seasons-$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("show.seasonlist", "$curShow.name", "&indexerid=$curShow.indexerid", "show.seasonlist-sort");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.show.seasonlist", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "show.seasonlist-sort");
|
||||
#end for
|
||||
|
||||
addOption("show.seasonlist-sort", "Optional Param", "", 1);
|
||||
addOption("show.seasonlist-sort", "Sort by Ascending", "&sort=asc");
|
||||
|
||||
|
@ -194,6 +355,10 @@ addOption("show.seasonlist-sort", "Sort by Ascending", "&sort=asc");
|
|||
addList("show.setquality", "$curShow.name", "&indexerid=$curShow.indexerid", "quality");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.show.setquality", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "quality");
|
||||
#end for
|
||||
|
||||
//build out generic quality options
|
||||
addOptGroup("quality", "Quality Templates");
|
||||
addOption("quality", "SD", "&initial=sdtv|sddvd");
|
||||
|
@ -243,6 +408,10 @@ addOption("seasons-$curShow", "$curShowSeason.season", "&season=$curShowSeason.s
|
|||
#end for
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.episode", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "episode-$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("episode", "$curShow.name", "&indexerid=$curShow.indexerid", "episode-$curShow.indexerid");
|
||||
#end for
|
||||
|
@ -250,10 +419,15 @@ addList("episode", "$curShow.name", "&indexerid=$curShow.indexerid", "episode-$c
|
|||
// build out each show's season+episode list for episode cmd
|
||||
#for $curShow in $episodeSQLResults:
|
||||
#for $curShowSeason in $episodeSQLResults[$curShow]:
|
||||
addList("episode-$curShow", "$curShowSeason.season x $curShowSeason.episode", "&season=$curShowSeason.season&episode=$curShowSeason.episode", "episode-$curShow-full");
|
||||
addList("episode-$curShow", "$curShowSeason.season x $curShowSeason.episode", "&season=$curShowSeason.season&episode=$curShowSeason.episode", "episode-full");
|
||||
#end for
|
||||
addOption("episode-$curShow-full", "Optional Param", "", 1);
|
||||
addOption("episode-$curShow-full", "Show Full Path", "&full_path=1");
|
||||
#end for
|
||||
addOption("episode-full", "Optional Param", "", 1);
|
||||
addOption("episode-full", "Show Full Path", "&full_path=1");
|
||||
|
||||
// build out tvshow list for sg.episode.search
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.episode.search", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "episode.search-$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
// build out tvshow list for episode.search
|
||||
|
@ -268,6 +442,31 @@ addOption("episode.search-$curShow", "$curShowSeason.season x $curShowSeason.epi
|
|||
#end for
|
||||
#end for
|
||||
|
||||
// build out tvshow list for sg.episode.setstatus
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.episode.setstatus", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "sg.episode.setstatus-$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $episodeSQLResults:
|
||||
#for $curShowSeason in $episodeSQLResults[$curShow]:
|
||||
addList("sg.episode.setstatus-$curShow", "$curShowSeason.season x $curShowSeason.episode", "&season=$curShowSeason.season&episode=$curShowSeason.episode", "sg.episode-status");
|
||||
#end for
|
||||
#end for
|
||||
|
||||
addList("sg.episode-status", "Wanted", "&status=wanted", "sg.episode.quality");
|
||||
addList("sg.episode-status", "Skipped", "&status=skipped", "sg.episode.quality");
|
||||
addList("sg.episode-status", "Archived", "&status=archived", "sg.episode.quality");
|
||||
addList("sg.episode-status", "Ignored", "&status=ignored", "sg.episode.quality");
|
||||
addList("sg.episode-status", "Snatched", "&status=snatched", "sg.episode.quality");
|
||||
addList("sg.episode-status", "Downloaded", "&status=downloaded", "sg.episode.quality");
|
||||
|
||||
#from sickbeard.webapi import quality_map
|
||||
|
||||
addOption("sg.episode.quality", "Opt Param", 1);
|
||||
#for $q in $quality_map:
|
||||
addOption("sg.episode.quality", "$q", "&quality=$q");
|
||||
#end for
|
||||
|
||||
// build out tvshow list for episode.setstatus
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("episode.setstatus", "$curShow.name", "&indexerid=$curShow.indexerid", "episode.setstatus-$curShow.indexerid");
|
||||
|
@ -276,13 +475,13 @@ addList("episode.setstatus", "$curShow.name", "&indexerid=$curShow.indexerid", "
|
|||
// build out each show's season+episode list for episode.setstatus cmd
|
||||
#for $curShow in $episodeSQLResults:
|
||||
#for $curShowSeason in $episodeSQLResults[$curShow]:
|
||||
addList("episode.setstatus-$curShow", "$curShowSeason.season x $curShowSeason.episode", "&season=$curShowSeason.season&episode=$curShowSeason.episode", "episode-status-$curShow");
|
||||
addList("episode.setstatus-$curShow", "$curShowSeason.season x $curShowSeason.episode", "&season=$curShowSeason.season&episode=$curShowSeason.episode", "episode-status");
|
||||
#end for
|
||||
addOption("episode-status-$curShow", "Wanted", "&status=wanted");
|
||||
addOption("episode-status-$curShow", "Skipped", "&status=skipped");
|
||||
addOption("episode-status-$curShow", "Archived", "&status=archived");
|
||||
addOption("episode-status-$curShow", "Ignored", "&status=ignored");
|
||||
#end for
|
||||
addOption("episode-status", "Wanted", "&status=wanted");
|
||||
addOption("episode-status", "Skipped", "&status=skipped");
|
||||
addOption("episode-status", "Archived", "&status=archived");
|
||||
addOption("episode-status", "Ignored", "&status=ignored");
|
||||
|
||||
addOption("future", "Optional Param", "", 1);
|
||||
addList("future", "Sort by Date", "&sort=date", "future-type");
|
||||
|
@ -324,6 +523,28 @@ addOption("exceptions", "Optional Param", "", 1);
|
|||
addOption("exceptions", "$curShow.name", "&indexerid=$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
addOption("sg.exceptions", "Optional Param", "", 1);
|
||||
#for $curShow in $sortedShowList:
|
||||
addOption("sg.exceptions", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid");
|
||||
#end for
|
||||
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("changeexceptions", "$curShow.name", "&indexerid=$curShow.indexerid&indexer=$curShow.indexer", "exceptionforseason");
|
||||
#end for
|
||||
|
||||
addList("exceptionforseason", "All Seasons", "&forseason=-1", "addexceptions");
|
||||
#for $c in range(1, 11):
|
||||
addList("exceptionforseason", "All Seasons", "&forseason=$c", "addexceptions");
|
||||
#end for
|
||||
|
||||
addList("addexceptions", "Optional Param", "", "removeexceptions");
|
||||
addList("addexceptions", "Test Name 1", "&add=Test Name 1", "removeexceptions");
|
||||
addList("addexceptions", "Test Name 1, Name 2", "&add=Test Name 1|Name 2", "removeexceptions");
|
||||
|
||||
addOption("removeexceptions", "Optional Param", "", 1);
|
||||
addOption("removeexceptions", "Test Name 1", "&remove=Test Name 1");
|
||||
addOption("removeexceptions", "Test Name 1, Name 2", "&remove=Test Name 1|Name 2");
|
||||
|
||||
addOption("sb.pausebacklog", "Optional Param", "", 1);
|
||||
addOption("sb.pausebacklog", "Pause", "&pause=1");
|
||||
addOption("sb.pausebacklog", "Unpause", "&pause=0");
|
||||
|
@ -343,6 +564,9 @@ addOption("sb.deleterootdir", "S:\\Invalid_Location", "&location=S:\\Invalid_Loc
|
|||
#for $curShow in $sortedShowList:
|
||||
addList("show.pause", "$curShow.name", "&indexerid=$curShow.indexerid", "show.pause-opt");
|
||||
#end for
|
||||
#for $curShow in $sortedShowList:
|
||||
addList("sg.show.pause", "$curShow.name", "&indexer=$curShow.indexer&indexerid=$curShow.indexerid", "show.pause-opt");
|
||||
#end for
|
||||
addOption("show.pause-opt", "Optional Param", "", 1);
|
||||
addOption("show.pause-opt", "Unpause", "&pause=0");
|
||||
addOption("show.pause-opt", "Pause", "&pause=1");
|
||||
|
@ -350,7 +574,7 @@ addOption("show.pause-opt", "Pause", "&pause=1");
|
|||
</script>
|
||||
</head>
|
||||
|
||||
<body onload="initListGroup('api', document.apibuilder.firstlevel, document.apibuilder.secondlevel, document.apibuilder.thirdlevel, document.apibuilder.forthlevel, document.apibuilder.fifthlevel, document.apibuilder.sixthlevel, document.apibuilder.seventhlevel)">
|
||||
<body style="padding-top: 0 !important;" onload="initListGroup('api', document.apibuilder.firstlevel, document.apibuilder.secondlevel, document.apibuilder.thirdlevel, document.apibuilder.forthlevel, document.apibuilder.fifthlevel, document.apibuilder.sixthlevel, document.apibuilder.seventhlevel, document.apibuilder.eigthlevel)">
|
||||
|
||||
<form name="apibuilder" id="apibuilder" action="">
|
||||
<table align="center">
|
||||
|
@ -372,9 +596,10 @@ addOption("show.pause-opt", "Pause", "&pause=1");
|
|||
<select name="fifthlevel"><option></option></select>
|
||||
<select name="sixthlevel"><option></option></select>
|
||||
<select name="seventhlevel"><option></option></select>
|
||||
<select name="eigthlevel"><option></option></select>
|
||||
<div style="float: left; ">
|
||||
<input class="btn" type="button" value="Reset" onclick="resetListGroup('api',1)" />
|
||||
<input class="btn" type="button" value="Go" onclick="goListGroup(this.form['apikey'].value, this.form['seventhlevel'].value, this.form['sixthlevel'].value, this.form['fifthlevel'].value, this.form['forthlevel'].value, this.form['thirdlevel'].value, this.form['secondlevel'].value, this.form['firstlevel'].value)" />
|
||||
<input class="btn" type="button" value="Go" onclick="goListGroup(this.form['apikey'].value, this.form['eigthlevel'].value, this.form['seventhlevel'].value, this.form['sixthlevel'].value, this.form['fifthlevel'].value, this.form['forthlevel'].value, this.form['thirdlevel'].value, this.form['secondlevel'].value, this.form['firstlevel'].value)" />
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -481,7 +481,7 @@
|
|||
<span class="component-title">API enable</span>
|
||||
<span class="component-desc">
|
||||
<input type="checkbox" name="use_api" class="enabler" id="use_api"#echo ('', $checked)[$sg_var('USE_API')]#>
|
||||
<p>permit the use of the SickGear (SickBeard) API</p>
|
||||
<p>permit the use of the SickGear (and Legacy SickBeard) API</p>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -490,6 +490,7 @@
|
|||
<label for="api_key">
|
||||
<span class="component-title">API key</span>
|
||||
<span class="component-desc">
|
||||
<p>The legacy SickBeard API is limited to shows from thetvdb.com.<br>Use the SickGear API endpoint for full access</p>
|
||||
<input type="text" name="api_key" id="api_key" value="$sg_str('API_KEY')" class="form-control input-sm input300" readonly="readonly">
|
||||
<input class="btn btn-inline" type="button" id="generate_new_apikey" value="Generate">
|
||||
<div class="clear-left"><p>used to give 3rd party programs limited access to SickGear</p></div>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
var _disable_empty_list=false;
|
||||
var _hide_empty_list=false;
|
||||
|
||||
function goListGroup(apikey, L7, L6, L5, L4, L3, L2, L1){
|
||||
function goListGroup(apikey, L8, L7, L6, L5, L4, L3, L2, L1){
|
||||
var GlobalOptions = "";
|
||||
$('.global').each(function(){
|
||||
var checked = $(this).prop('checked');
|
||||
|
@ -26,7 +26,7 @@ function goListGroup(apikey, L7, L6, L5, L4, L3, L2, L1){
|
|||
});
|
||||
|
||||
// handle the show.getposter / show.getbanner differently as they return an image and not json
|
||||
if (L1 == "?cmd=show.getposter" || L1 == "?cmd=show.getbanner") {
|
||||
if (L1 == "?cmd=sg.getnetworkicon" || L1 == "?cmd=sg.show.getposter" || L1 == "?cmd=sg.show.getbanner" || L1 == "?cmd=show.getposter" || L1 == "?cmd=show.getbanner" || L1 == "?cmd=sg.getindexericon") {
|
||||
var imgcache = sbRoot + "/api/" + apikey + "/" + L1 + L2 + GlobalOptions;
|
||||
var html = imgcache + '<br/><br/><img src="' + sbRoot + '/images/loading16.gif" id="imgcache">';
|
||||
$('#apiResponse').html(html);
|
||||
|
@ -36,14 +36,24 @@ function goListGroup(apikey, L7, L6, L5, L4, L3, L2, L1){
|
|||
cache: false,
|
||||
dataType: "html",
|
||||
success: function (img) {
|
||||
$('#imgcache').attr('src', imgcache);
|
||||
$('#imgcache').attr('src', imgcache + "&random=" + Math.random() * 100000000000000000000);
|
||||
}
|
||||
})
|
||||
}
|
||||
else if (L1 == "?cmd=listcommands")
|
||||
{
|
||||
var html = $.ajax({
|
||||
url: sbRoot + "/api/" + apikey + "/" + L1 + L2 + L3 + L4 + L5 + L6 + L7 + L8 + GlobalOptions,
|
||||
async: false,
|
||||
dataType: "html",
|
||||
}).responseText;
|
||||
|
||||
$('#apiResponse').html(html);
|
||||
}
|
||||
else {
|
||||
var html = sbRoot + "/api/" + apikey + "/" + L1 + L2 + L3 + L4 + L5 + L6 + L7 + GlobalOptions + "<br/><pre>";
|
||||
var html = sbRoot + "/api/" + apikey + "/" + L1 + L2 + L3 + L4 + L5 + L6 + L7 + L8 + GlobalOptions + "<br/><pre>";
|
||||
html += $.ajax({
|
||||
url: sbRoot + "/api/" + apikey + "/" + L1 + L2 + L3 + L4 + L5 + L6 + L7 + GlobalOptions,
|
||||
url: sbRoot + "/api/" + apikey + "/" + L1 + L2 + L3 + L4 + L5 + L6 + L7 + L8 + GlobalOptions,
|
||||
async: false,
|
||||
dataType: "html",
|
||||
}).responseText;
|
||||
|
@ -167,7 +177,7 @@ function cs_addL(dis,link,label,css) { this.items[this.items.length]=new cs_link
|
|||
function cs_addG(label,css) { this.items[this.items.length]=new cs_groupOBJ(label,css); }
|
||||
function cs_endG() { this.items[this.items.length]=new cs_groupOBJ2(); }
|
||||
|
||||
function cs_showMsg(msg) { window.status=msg; }
|
||||
function cs_showMsg(msg) { console.error(msg); window.status=msg; }
|
||||
function cs_badContent(n) { cs_goodContent=false; cs_showMsg("["+n+"] Not Found."); }
|
||||
|
||||
function _setCookie(name, value) {
|
||||
|
@ -636,6 +646,6 @@ function selectOptions(n,opts,mode) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// ------
|
||||
|
|
|
@ -125,6 +125,11 @@ class indexerApi(object):
|
|||
def indexers(self):
|
||||
return dict((int(x['id']), x['name']) for x in indexerConfig.values() if not x['mapped_only'])
|
||||
|
||||
@property
|
||||
def search_indexers(self):
|
||||
return dict((int(x['id']), x['name']) for x in indexerConfig.values() if not x['mapped_only'] and
|
||||
x.get('active') and not x.get('defunct'))
|
||||
|
||||
@property
|
||||
def all_indexers(self):
|
||||
"""
|
||||
|
|
|
@ -295,31 +295,35 @@ def load_network_dict(load=True):
|
|||
|
||||
|
||||
# get timezone of a network or return default timezone
|
||||
def get_network_timezone(network):
|
||||
def get_network_timezone(network, return_name=False):
|
||||
if network is None:
|
||||
return sb_timezone
|
||||
|
||||
timezone = None
|
||||
timezone_name = None
|
||||
|
||||
try:
|
||||
if zoneinfo.ZONEFILENAME is not None:
|
||||
if not network_dict:
|
||||
load_network_dict()
|
||||
try:
|
||||
timezone = tz.gettz(network_dupes.get(network) or network_dict.get(network.replace(' ', '').lower()),
|
||||
zoneinfo_priority=True)
|
||||
except:
|
||||
timezone_name = network_dupes.get(network) or network_dict.get(network.replace(' ', '').lower())
|
||||
timezone = tz.gettz(timezone_name, zoneinfo_priority=True)
|
||||
except (StandardError, Exception):
|
||||
pass
|
||||
|
||||
if timezone is None:
|
||||
cc = re.search(r'\(([a-z]+)\)$', network, flags=re.I)
|
||||
try:
|
||||
timezone = tz.gettz(country_timezones.get(cc.group(1).upper()), zoneinfo_priority=True)
|
||||
except:
|
||||
timezone_name = country_timezones.get(cc.group(1).upper())
|
||||
timezone = tz.gettz(timezone_name, zoneinfo_priority=True)
|
||||
except (StandardError, Exception):
|
||||
pass
|
||||
except:
|
||||
except (StandardError, Exception):
|
||||
pass
|
||||
|
||||
if return_name:
|
||||
return timezone if isinstance(timezone, datetime.tzinfo) else sb_timezone, timezone_name
|
||||
return timezone if isinstance(timezone, datetime.tzinfo) else sb_timezone
|
||||
|
||||
|
||||
|
|
|
@ -113,10 +113,10 @@ class sbdatetime(datetime.datetime):
|
|||
'july', 'august', 'september', 'october', 'november', 'december'])
|
||||
|
||||
@static_or_instance
|
||||
def convert_to_setting(self, dt=None):
|
||||
def convert_to_setting(self, dt=None, force_local=False):
|
||||
obj = (dt, self)[self is not None]
|
||||
try:
|
||||
if 'local' == sickbeard.TIMEZONE_DISPLAY:
|
||||
if force_local or 'local' == sickbeard.TIMEZONE_DISPLAY:
|
||||
return obj.astimezone(sb_timezone)
|
||||
except (StandardError, Exception):
|
||||
pass
|
||||
|
|
|
@ -694,3 +694,66 @@ def fix_xem_numbering(indexer_id, indexer):
|
|||
if 0 < len(cl):
|
||||
my_db = db.DBConnection()
|
||||
my_db.mass_action(cl)
|
||||
|
||||
|
||||
def set_scene_numbering_helper(indexerid, indexer, forSeason=None, forEpisode=None, forAbsolute=None,
|
||||
sceneSeason=None, sceneEpisode=None, sceneAbsolute=None):
|
||||
# sanitize:
|
||||
indexerid = None if indexerid in [None, 'null', ''] else int(indexerid)
|
||||
indexer = None if indexer in [None, 'null', ''] else int(indexer)
|
||||
|
||||
show_obj = sickbeard.helpers.find_show_by_id(sickbeard.showList, {indexer: indexerid}, no_mapped_ids=True)
|
||||
|
||||
if not show_obj:
|
||||
result = {'success': False}
|
||||
return result
|
||||
|
||||
if not show_obj.is_anime:
|
||||
for_season = None if forSeason in [None, 'null', ''] else int(forSeason)
|
||||
for_episode = None if forEpisode in [None, 'null', ''] else int(forEpisode)
|
||||
scene_season = None if sceneSeason in [None, 'null', ''] else int(sceneSeason)
|
||||
scene_episode = None if sceneEpisode in [None, 'null', ''] else int(sceneEpisode)
|
||||
action_log = u'Set episode scene numbering to %sx%s for episode %sx%s of "%s"' \
|
||||
% (scene_season, scene_episode, for_season, for_episode, show_obj.name)
|
||||
ep_args = {'show': indexerid, 'season': for_season, 'episode': for_episode}
|
||||
scene_args = {'indexer_id': indexerid, 'indexer': indexer, 'season': for_season, 'episode': for_episode,
|
||||
'sceneSeason': scene_season, 'sceneEpisode': scene_episode}
|
||||
result = {'forSeason': for_season, 'forEpisode': for_episode, 'sceneSeason': None, 'sceneEpisode': None}
|
||||
else:
|
||||
for_absolute = None if forAbsolute in [None, 'null', ''] else int(forAbsolute)
|
||||
scene_absolute = None if sceneAbsolute in [None, 'null', ''] else int(sceneAbsolute)
|
||||
action_log = u'Set absolute scene numbering to %s for episode %s of "%s"' \
|
||||
% (scene_absolute, for_absolute, show_obj.name)
|
||||
ep_args = {'show': indexerid, 'absolute': for_absolute}
|
||||
scene_args = {'indexer_id': indexerid, 'indexer': indexer, 'absolute_number': for_absolute,
|
||||
'sceneAbsolute': scene_absolute}
|
||||
result = {'forAbsolute': for_absolute, 'sceneAbsolute': None}
|
||||
|
||||
if ep_args.get('absolute'):
|
||||
ep_obj = show_obj.getEpisode(absolute_number=int(ep_args['absolute']))
|
||||
elif None is not ep_args['season'] and None is not ep_args['episode']:
|
||||
ep_obj = show_obj.getEpisode(int(ep_args['season']), int(ep_args['episode']))
|
||||
else:
|
||||
ep_obj = 'Invalid paramaters'
|
||||
|
||||
if ep_obj is None:
|
||||
ep_obj = "Episode couldn't be retrieved"
|
||||
|
||||
result['success'] = not isinstance(ep_obj, str)
|
||||
if result['success']:
|
||||
logger.log(action_log, logger.DEBUG)
|
||||
set_scene_numbering(**scene_args)
|
||||
show_obj.flushEpisodes()
|
||||
else:
|
||||
result['errorMessage'] = ep_obj
|
||||
|
||||
if not show_obj.is_anime:
|
||||
scene_numbering = get_scene_numbering(indexerid, indexer, for_season, for_episode)
|
||||
if scene_numbering:
|
||||
(result['sceneSeason'], result['sceneEpisode']) = scene_numbering
|
||||
else:
|
||||
scene_numbering = get_scene_absolute_numbering(indexerid, indexer, for_absolute)
|
||||
if scene_numbering:
|
||||
result['sceneAbsolute'] = scene_numbering
|
||||
|
||||
return result
|
|
@ -177,10 +177,10 @@ class ShowQueue(generic_queue.GenericQueue):
|
|||
|
||||
def addShow(self, indexer, indexer_id, showDir, default_status=None, quality=None, flatten_folders=None,
|
||||
lang='en', subtitles=None, anime=None, scene=None, paused=None, blacklist=None, whitelist=None,
|
||||
wanted_begin=None, wanted_latest=None, tag=None, new_show=False, show_name=None):
|
||||
wanted_begin=None, wanted_latest=None, tag=None, new_show=False, show_name=None, upgrade_once=False):
|
||||
queueItemObj = QueueItemAdd(indexer, indexer_id, showDir, default_status, quality, flatten_folders, lang,
|
||||
subtitles, anime, scene, paused, blacklist, whitelist,
|
||||
wanted_begin, wanted_latest, tag, new_show=new_show, show_name=show_name)
|
||||
wanted_begin, wanted_latest, tag, new_show=new_show, show_name=show_name, upgrade_once=upgrade_once)
|
||||
|
||||
self.add_item(queueItemObj)
|
||||
|
||||
|
@ -238,7 +238,7 @@ class ShowQueueItem(generic_queue.QueueItem):
|
|||
class QueueItemAdd(ShowQueueItem):
|
||||
def __init__(self, indexer, indexer_id, showDir, default_status, quality, flatten_folders, lang, subtitles, anime,
|
||||
scene, paused, blacklist, whitelist, default_wanted_begin, default_wanted_latest, tag,
|
||||
scheduled_update=False, new_show=False, show_name=None):
|
||||
scheduled_update=False, new_show=False, show_name=None, upgrade_once=False):
|
||||
|
||||
self.indexer = indexer
|
||||
self.indexer_id = indexer_id
|
||||
|
@ -247,6 +247,7 @@ class QueueItemAdd(ShowQueueItem):
|
|||
self.default_wanted_begin = default_wanted_begin
|
||||
self.default_wanted_latest = default_wanted_latest
|
||||
self.quality = quality
|
||||
self.upgrade_once = upgrade_once
|
||||
self.flatten_folders = flatten_folders
|
||||
self.lang = lang
|
||||
self.subtitles = subtitles
|
||||
|
@ -341,6 +342,7 @@ class QueueItemAdd(ShowQueueItem):
|
|||
self.show.location = self.showDir
|
||||
self.show.subtitles = self.subtitles if None is not self.subtitles else sickbeard.SUBTITLES_DEFAULT
|
||||
self.show.quality = self.quality if self.quality else sickbeard.QUALITY_DEFAULT
|
||||
self.show.archive_firstmatch = self.upgrade_once
|
||||
self.show.flatten_folders = self.flatten_folders if None is not self.flatten_folders else sickbeard.FLATTEN_FOLDERS_DEFAULT
|
||||
self.show.anime = self.anime if None is not self.anime else sickbeard.ANIME_DEFAULT
|
||||
self.show.scene = self.scene if None is not self.scene else sickbeard.SCENE_DEFAULT
|
||||
|
|
2536
sickbeard/webapi.py
2536
sickbeard/webapi.py
File diff suppressed because it is too large
Load diff
|
@ -51,7 +51,7 @@ from sickbeard.helpers import has_image_ext, remove_article, starify
|
|||
from sickbeard.indexers.indexer_config import INDEXER_TVDB, INDEXER_TVRAGE, INDEXER_TRAKT
|
||||
from sickbeard.scene_numbering import get_scene_numbering, set_scene_numbering, get_scene_numbering_for_show, \
|
||||
get_xem_numbering_for_show, get_scene_absolute_numbering_for_show, get_xem_absolute_numbering_for_show, \
|
||||
get_scene_absolute_numbering
|
||||
get_scene_absolute_numbering, set_scene_numbering_helper
|
||||
from sickbeard.name_cache import buildNameCache
|
||||
from sickbeard.browser import foldersAtPath
|
||||
from sickbeard.blackandwhitelist import BlackAndWhiteList, short_group_names
|
||||
|
@ -145,6 +145,13 @@ class BaseHandler(RequestHandler):
|
|||
return self.get_secure_cookie('sickgear-session-%s' % helpers.md5_for_text(sickbeard.WEB_PORT))
|
||||
return True
|
||||
|
||||
def getImage(self, image):
|
||||
if ek.ek(os.path.isfile, image):
|
||||
mime_type, encoding = MimeTypes().guess_type(image)
|
||||
self.set_header('Content-Type', mime_type)
|
||||
with ek.ek(open, image, 'rb') as img:
|
||||
return img.read()
|
||||
|
||||
def showPoster(self, show=None, which=None, api=None):
|
||||
# Redirect initial poster/banner thumb to default images
|
||||
if 'poster' == which[0:6]:
|
||||
|
@ -175,9 +182,14 @@ class BaseHandler(RequestHandler):
|
|||
static_image_path = image_file_name
|
||||
|
||||
if api:
|
||||
used_file = ek.ek(os.path.basename, static_image_path)
|
||||
if static_image_path.startswith('/images'):
|
||||
used_file = 'default'
|
||||
static_image_path = ek.ek(os.path.join, sickbeard.PROG_DIR, 'gui', 'slick', static_image_path[1:])
|
||||
mime_type, encoding = MimeTypes().guess_type(static_image_path)
|
||||
self.set_header('Content-Type', mime_type)
|
||||
with open(static_image_path, 'rb') as img:
|
||||
self.set_header('X-Filename', used_file)
|
||||
with ek.ek(open, static_image_path, 'rb') as img:
|
||||
return img.read()
|
||||
else:
|
||||
static_image_path = os.path.normpath(static_image_path.replace(sickbeard.CACHE_DIR, '/cache'))
|
||||
|
@ -2458,50 +2470,8 @@ class Home(MainHandler):
|
|||
def setSceneNumbering(self, show, indexer, forSeason=None, forEpisode=None, forAbsolute=None, sceneSeason=None,
|
||||
sceneEpisode=None, sceneAbsolute=None):
|
||||
|
||||
# sanitize:
|
||||
show = None if show in [None, 'null', ''] else int(show)
|
||||
indexer = None if indexer in [None, 'null', ''] else int(indexer)
|
||||
|
||||
show_obj = sickbeard.helpers.findCertainShow(sickbeard.showList, show)
|
||||
|
||||
if not show_obj.is_anime:
|
||||
for_season = None if forSeason in [None, 'null', ''] else int(forSeason)
|
||||
for_episode = None if forEpisode in [None, 'null', ''] else int(forEpisode)
|
||||
scene_season = None if sceneSeason in [None, 'null', ''] else int(sceneSeason)
|
||||
scene_episode = None if sceneEpisode in [None, 'null', ''] else int(sceneEpisode)
|
||||
action_log = u'Set episode scene numbering to %sx%s for episode %sx%s of "%s"'\
|
||||
% (scene_season, scene_episode, for_season, for_episode, show_obj.name)
|
||||
ep_args = {'show': show, 'season': for_season, 'episode': for_episode}
|
||||
scene_args = {'indexer_id': show, 'indexer': indexer, 'season': for_season, 'episode': for_episode,
|
||||
'sceneSeason': scene_season, 'sceneEpisode': scene_episode}
|
||||
result = {'forSeason': for_season, 'forEpisode': for_episode, 'sceneSeason': None, 'sceneEpisode': None}
|
||||
else:
|
||||
for_absolute = None if forAbsolute in [None, 'null', ''] else int(forAbsolute)
|
||||
scene_absolute = None if sceneAbsolute in [None, 'null', ''] else int(sceneAbsolute)
|
||||
action_log = u'Set absolute scene numbering to %s for episode %s of "%s"'\
|
||||
% (scene_absolute, for_absolute, show_obj.name)
|
||||
ep_args = {'show': show, 'absolute': for_absolute}
|
||||
scene_args = {'indexer_id': show, 'indexer': indexer, 'absolute_number': for_absolute,
|
||||
'sceneAbsolute': scene_absolute}
|
||||
result = {'forAbsolute': for_absolute, 'sceneAbsolute': None}
|
||||
|
||||
ep_obj = self._getEpisode(**ep_args)
|
||||
result['success'] = not isinstance(ep_obj, str)
|
||||
if result['success']:
|
||||
logger.log(action_log, logger.DEBUG)
|
||||
set_scene_numbering(**scene_args)
|
||||
show_obj.flushEpisodes()
|
||||
else:
|
||||
result['errorMessage'] = ep_obj
|
||||
|
||||
if not show_obj.is_anime:
|
||||
scene_numbering = get_scene_numbering(show, indexer, for_season, for_episode)
|
||||
if scene_numbering:
|
||||
(result['sceneSeason'], result['sceneEpisode']) = scene_numbering
|
||||
else:
|
||||
scene_numbering = get_scene_absolute_numbering(show, indexer, for_absolute)
|
||||
if scene_numbering:
|
||||
result['sceneAbsolute'] = scene_numbering
|
||||
result = set_scene_numbering_helper(show, indexer, forSeason, forEpisode, forAbsolute, sceneSeason,
|
||||
sceneEpisode, sceneAbsolute)
|
||||
|
||||
return json.dumps(result)
|
||||
|
||||
|
@ -2730,7 +2700,7 @@ class NewHomeAddShows(Home):
|
|||
re.sub(r'([,.!][^,.!]*?)$', '...',
|
||||
re.sub(r'([.!?])(?=\w)', r'\1 ',
|
||||
self.encode_html((show.get('overview', '') or '')[:250:].strip()))),
|
||||
self._get_UWRatio(term, show['seriesname'], show.get('aliases', [])), None, None,
|
||||
self.get_UWRatio(term, show['seriesname'], show.get('aliases', [])), None, None,
|
||||
self._make_search_image_url(iid, show)
|
||||
] for show in shows.itervalues()] for iid, shows in results.iteritems()))
|
||||
|
||||
|
@ -2791,7 +2761,8 @@ class NewHomeAddShows(Home):
|
|||
('%s.jpg' % show['id'], show['id'])
|
||||
return img_url
|
||||
|
||||
def _get_UWRatio(self, search_term, showname, aliases):
|
||||
@classmethod
|
||||
def get_UWRatio(cls, search_term, showname, aliases):
|
||||
s = fuzz.UWRatio(search_term, showname)
|
||||
# check aliases and give them a little lower score
|
||||
for a in aliases:
|
||||
|
@ -3452,15 +3423,9 @@ class NewHomeAddShows(Home):
|
|||
|
||||
return self.redirect('/home/addShows/%s' % ('trakt_trending', sickbeard.TRAKT_MRU)[any(sickbeard.TRAKT_MRU)])
|
||||
|
||||
def browse_trakt(self, url_path, browse_title, *args, **kwargs):
|
||||
|
||||
browse_type = 'Trakt'
|
||||
@staticmethod
|
||||
def get_trakt_data(url_path, *args, **kwargs):
|
||||
normalised, filtered = ([], [])
|
||||
|
||||
if not sickbeard.USE_TRAKT and ('recommended' in kwargs.get('mode', '') or 'watchlist' in kwargs.get('mode', '')):
|
||||
error_msg = 'To browse personal recommendations, enable Trakt.tv in Config/Notifications/Social'
|
||||
return self.browse_shows(browse_type, browse_title, filtered, error_msg=error_msg, show_header=1, **kwargs)
|
||||
|
||||
error_msg = None
|
||||
try:
|
||||
account = kwargs.get('send_oauth', None)
|
||||
|
@ -3488,7 +3453,7 @@ class NewHomeAddShows(Home):
|
|||
|
||||
if not normalised:
|
||||
error_msg = 'No items in watchlist. Use the "Add to watchlist" button at the Trakt website'
|
||||
return self.browse_shows(browse_type, browse_title, filtered, error_msg=error_msg, show_header=1, **kwargs)
|
||||
raise Exception(error_msg)
|
||||
|
||||
oldest_dt = 9999999
|
||||
newest_dt = 0
|
||||
|
@ -3496,8 +3461,8 @@ class NewHomeAddShows(Home):
|
|||
newest = None
|
||||
for item in normalised:
|
||||
ignore = '''
|
||||
((bbc|channel\s*?5.*?|itv)\s*?(drama|documentaries))|bbc\s*?(comedy|music)|music\s*?specials|tedtalks
|
||||
'''
|
||||
((bbc|channel\s*?5.*?|itv)\s*?(drama|documentaries))|bbc\s*?(comedy|music)|music\s*?specials|tedtalks
|
||||
'''
|
||||
if re.search(ignore, item['show']['title'].strip(), re.I | re.X):
|
||||
continue
|
||||
try:
|
||||
|
@ -3523,25 +3488,54 @@ class NewHomeAddShows(Home):
|
|||
when_past=dt_ordinal < datetime.datetime.now().toordinal(), # air time not yet available 16.11.2015
|
||||
episode_number='' if 'episode' not in item else item['episode']['number'] or 1,
|
||||
episode_overview=('' if 'episode' not in item else
|
||||
self.encode_html(item['episode']['overview'][:250:].strip()) or ''),
|
||||
item['episode']['overview'].strip() or ''),
|
||||
episode_season='' if 'episode' not in item else item['episode']['season'] or 1,
|
||||
genres=('' if 'genres' not in item['show'] else
|
||||
', '.join(['%s' % v for v in item['show']['genres']])),
|
||||
ids=item['show']['ids'],
|
||||
images=images,
|
||||
overview=('' if 'overview' not in item['show'] or None is item['show']['overview'] else
|
||||
self.encode_html(item['show']['overview'][:250:].strip())),
|
||||
item['show']['overview'].strip()),
|
||||
rating=0 < item['show'].get('rating', 0) and
|
||||
('%.2f' % (item['show'].get('rating') * 10)).replace('.00', '') or 0,
|
||||
title=item['show']['title'].strip(),
|
||||
url_src_db='https://trakt.tv/shows/%s' % item['show']['ids']['slug'],
|
||||
url_tvdb=('', '%s%s' % (sickbeard.indexerApi(INDEXER_TVDB).config['show_url'],
|
||||
item['show']['ids']['tvdb']))[isinstance(item['show']['ids']['tvdb'], (int, long))
|
||||
and 0 < item['show']['ids']['tvdb']],
|
||||
item['show']['ids']['tvdb']))[
|
||||
isinstance(item['show']['ids']['tvdb'], (int, long))
|
||||
and 0 < item['show']['ids']['tvdb']],
|
||||
votes='0' if 'votes' not in item['show'] else item['show']['votes']))
|
||||
except:
|
||||
except (StandardError, Exception):
|
||||
pass
|
||||
|
||||
if 'web_ui' in kwargs:
|
||||
return filtered, oldest, newest, error_msg
|
||||
|
||||
return filtered, oldest, newest
|
||||
|
||||
def browse_trakt(self, url_path, browse_title, *args, **kwargs):
|
||||
|
||||
browse_type = 'Trakt'
|
||||
normalised, filtered = ([], [])
|
||||
|
||||
if not sickbeard.USE_TRAKT and ('recommended' in kwargs.get('mode', '') or 'watchlist' in kwargs.get('mode', '')):
|
||||
error_msg = 'To browse personal recommendations, enable Trakt.tv in Config/Notifications/Social'
|
||||
return self.browse_shows(browse_type, browse_title, filtered, error_msg=error_msg, show_header=1, **kwargs)
|
||||
|
||||
try:
|
||||
filtered, oldest, newest, error_msg = self.get_trakt_data(url_path, web_ui=True)
|
||||
except (StandardError, Exception):
|
||||
error_msg = 'No items in watchlist. Use the "Add to watchlist" button at the Trakt website'
|
||||
return self.browse_shows(browse_type, browse_title, filtered, error_msg=error_msg, show_header=1, **kwargs)
|
||||
|
||||
for item in filtered:
|
||||
key = 'episode_overview'
|
||||
if item[key]:
|
||||
item[key] = self.encode_html(item[key][:250:].strip())
|
||||
key = 'overview'
|
||||
if item[key]:
|
||||
item[key] = self.encode_html(item[key][:250:].strip())
|
||||
|
||||
kwargs.update(dict(oldest=oldest, newest=newest, error_msg=error_msg))
|
||||
|
||||
if 'recommended' not in kwargs.get('mode', '') and 'watchlist' not in kwargs.get('mode', ''):
|
||||
|
@ -6233,6 +6227,8 @@ class ApiBuilder(MainHandler):
|
|||
|
||||
t.seasonSQLResults = seasonSQLResults
|
||||
t.episodeSQLResults = episodeSQLResults
|
||||
t.indexers = sickbeard.indexerApi().all_indexers
|
||||
t.searchindexers = sickbeard.indexerApi().search_indexers
|
||||
|
||||
if len(sickbeard.API_KEY) == 32:
|
||||
t.apikey = sickbeard.API_KEY
|
||||
|
|
Loading…
Reference in a new issue