Commit 1d5c929a authored by echel0n's avatar echel0n

Merge branch 'release/9.4.39'

parents 585c319c d49c03be
......@@ -35,15 +35,15 @@ module.exports = function (grunt) {
},
exec: {
// Translations
'crowdin_upload_sources': {cmd: 'crowdin-cli-py upload sources'},
'crowdin_upload_translations': {cmd: 'crowdin-cli-py upload translations'},
'crowdin_download_translations': {cmd: 'crowdin-cli-py download'},
'babel_extract': {cmd: 'python setup.py extract_messages'},
'babel_update': {cmd: 'python setup.py update_catalog'},
'babel_compile': {cmd: 'python setup.py compile_catalog'},
'crowdin_upload_sources': {cmd: 'venv\\Scripts\\crowdin-cli-py upload sources'},
'crowdin_upload_translations': {cmd: 'venv\\Scripts\\crowdin-cli-py upload translations'},
'crowdin_download_translations': {cmd: 'venv\\Scripts\\crowdin-cli-py download'},
'babel_extract': {cmd: 'venv\\Scripts\\python setup.py extract_messages'},
'babel_update': {cmd: 'venv\\Scripts\\python setup.py update_catalog'},
'babel_compile': {cmd: 'venv\\Scripts\\python setup.py compile_catalog'},
// PyPi Commands
'pypi_publish': {cmd: 'python setup.py sdist bdist_wheel upload clean'},
'pypi_publish': {cmd: 'venv\\Scripts\\python setup.py sdist bdist_wheel upload clean'},
// Git Commands
'git': {
......
# Changelog
- * 3421341 - 2018-11-17: Release v9.4.38
- * 0d6282b - 2018-11-18: Release v9.4.39
- * 4d3e19d - 2018-11-18: Refactored grunt python commands to use virtual environment.
- * c6c4b93 - 2018-11-18: Fixed issues with quality settings via API.
- * 4fff22e - 2018-11-18: Refactored misc API function names.
- * 8e81cad - 2018-11-18: Refactored code for API builder to display full URL.
- * eff3ee9 - 2018-11-17: Fixed freebsd init script, runs as sickrage user
- * 0aa52f3 - 2018-11-17: Release v9.4.38
- * ee79b9e - 2018-11-17: Release v9.4.37
- * 3c599a2 - 2018-11-17: Release v9.4.36
- * 07947fd - 2018-11-17: Fixed issues with grabbing redirect url for session POST method. Fixed login issue for FileList. Fixed issue with parsing torrents from Zooqle and YGGTorrent.
......
......@@ -42,7 +42,7 @@ pidfile="/var/run/sickrage/sickrage.pid"
command="/usr/local/bin/python2.7 ${sickrage_dir}/SiCKRAGE.py -q --datadir ${sickrage_datadir} --nolaunch"
start_cmd="/usr/sbin/daemon -P ${pidfile} -r -f $command"
start_cmd="/usr/sbin/daemon -p ${pidfile} -u ${sickrage_user} -r -f $command"
start_precmd="sickrage_prestart"
sickrage_prestart() {
......
......@@ -77,6 +77,13 @@ result_type_map = {
RESULT_DENIED: "denied",
}
best_quality_list = [
"sdtv", "sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl", "fullhdwebdl", "hdbluray", "fullhdbluray",
"udh4ktv", "uhd4kbluray", "udh4kwebdl", "udh8ktv", "uhd8kbluray", "udh8kwebdl"
]
any_quality_list = best_quality_list + ["unknown"]
# basically everything except RESULT_SUCCESS / success is bad
class ApiHandler(RequestHandler):
......@@ -495,11 +502,11 @@ def _responds(result_type, data=None, msg=""):
return {"result": result_type_map[result_type], "message": msg, "data": data}
def _get_status_Strings(s):
def _get_status_strings(s):
return statusStrings[s]
def _ordinal_to_dateTimeForm(ordinal):
def _ordinal_to_datetime_form(ordinal):
# workaround for episodes with no airdate
if int(ordinal) != 1:
date = datetime.datetime.now().date().fromordinal(ordinal)
......@@ -508,7 +515,7 @@ def _ordinal_to_dateTimeForm(ordinal):
return date.strftime(dateTimeFormat)
def _ordinal_to_dateForm(ordinal):
def _ordinal_to_date_form(ordinal):
if int(ordinal) != 1:
date = datetime.datetime.now().date().fromordinal(ordinal)
else:
......@@ -517,41 +524,76 @@ def _ordinal_to_dateForm(ordinal):
return date.strftime(dateFormat)
def _historyDate_to_dateTimeForm(timeString):
def _history_date_to_datetime_form(timeString):
date = datetime.datetime.strptime(timeString, History.date_format)
return date.strftime(dateTimeFormat)
def _mapQuality(showObj):
quality_map = _getQualityMap()
def _map_quality(showObj):
anyQualities = []
bestQualities = []
iqualityID, aqualityID = Quality.splitQuality(int(showObj))
if iqualityID:
for quality in iqualityID:
anyQualities.append(quality_map[quality])
if aqualityID:
for quality in aqualityID:
bestQualities.append(quality_map[quality])
for quality in iqualityID:
anyQualities.append(_get_quality_map()[quality])
for quality in aqualityID:
bestQualities.append(_get_quality_map()[quality])
return anyQualities, bestQualities
def _getQualityMap():
return {Quality.SDTV: 'sdtv',
Quality.SDDVD: 'sddvd',
Quality.HDTV: 'hdtv',
Quality.RAWHDTV: 'rawhdtv',
Quality.FULLHDTV: 'fullhdtv',
Quality.HDWEBDL: 'hdwebdl',
Quality.FULLHDWEBDL: 'fullhdwebdl',
Quality.HDBLURAY: 'hdbluray',
Quality.FULLHDBLURAY: 'fullhdbluray',
Quality.UNKNOWN: 'unknown'}
def _get_quality_map():
return {
Quality.SDTV: 'sdtv',
'sdtv': Quality.SDTV,
Quality.SDDVD: 'sddvd',
'sddvd': Quality.SDDVD,
Quality.HDTV: 'hdtv',
'hdtv': Quality.HDTV,
Quality.RAWHDTV: 'rawhdtv',
'rawhdtv': Quality.RAWHDTV,
Quality.FULLHDTV: 'fullhdtv',
'fullhdtv': Quality.FULLHDTV,
Quality.HDWEBDL: 'hdwebdl',
'hdwebdl': Quality.HDWEBDL,
Quality.FULLHDWEBDL: 'fullhdwebdl',
'fullhdwebdl': Quality.FULLHDWEBDL,
Quality.HDBLURAY: 'hdbluray',
'hdbluray': Quality.HDBLURAY,
Quality.FULLHDBLURAY: 'fullhdbluray',
'fullhdbluray': Quality.FULLHDBLURAY,
Quality.UHD_4K_TV: 'uhd4ktv',
'udh4ktv': Quality.UHD_4K_TV,
Quality.UHD_4K_BLURAY: '4kbluray',
'uhd4kbluray': Quality.UHD_4K_BLURAY,
def _getRootDirs():
Quality.UHD_4K_WEBDL: '4kwebdl',
'udh4kwebdl': Quality.UHD_4K_WEBDL,
Quality.UHD_8K_TV: 'uhd8ktv',
'udh8ktv': Quality.UHD_8K_TV,
Quality.UHD_8K_BLURAY: 'uhd8kbluray',
'uhd8kbluray': Quality.UHD_8K_BLURAY,
Quality.UHD_8K_WEBDL: 'udh8kwebdl',
"udh8kwebdl": Quality.UHD_8K_WEBDL,
Quality.UNKNOWN: 'unknown',
'unknown': Quality.UNKNOWN
}
def _get_root_dirs():
if sickrage.app.config.root_dirs == "":
return {}
......@@ -761,7 +803,7 @@ class CMD_Episode(ApiCall):
episode['airdate'] = 'Never'
status, quality = Quality.splitCompositeStatus(int(episode["status"]))
episode["status"] = _get_status_Strings(status)
episode["status"] = _get_status_strings(status)
episode["quality"] = get_quality_string(quality)
episode["file_size_human"] = pretty_filesize(episode["file_size"])
......@@ -868,7 +910,7 @@ class CMD_EpisodeSetStatus(ApiCall):
ep_list = showObj.get_all_episodes(season=self.s)
def _epResult(result_code, ep, msg=""):
return {'season': ep.season, 'episode': ep.episode, 'status': _get_status_Strings(ep.status),
return {'season': ep.season, 'episode': ep.episode, 'status': _get_status_strings(ep.status),
'result': result_type_map[result_code], 'message': msg}
ep_results = []
......@@ -1037,14 +1079,14 @@ class CMD_History(ApiCall):
for row in data:
status, quality = Quality.splitCompositeStatus(int(row["action"]))
status = _get_status_Strings(status)
status = _get_status_strings(status)
if self.type and not status.lower() == self.type:
continue
row["status"] = status
row["quality"] = get_quality_string(quality)
row["date"] = _historyDate_to_dateTimeForm(str(row["date"]))
row["date"] = _history_date_to_datetime_form(str(row["date"]))
del row["action"]
......@@ -1317,7 +1359,7 @@ class CMD_SiCKRAGEAddRootDir(ApiCall):
root_dirs_new = '|'.join(x for x in root_dirs_new)
sickrage.app.config.root_dirs = root_dirs_new
return _responds(RESULT_SUCCESS, _getRootDirs(), msg="Root directories updated")
return _responds(RESULT_SUCCESS, _get_root_dirs(), msg="Root directories updated")
class CMD_SiCKRAGECheckVersion(ApiCall):
......@@ -1360,7 +1402,7 @@ class CMD_SiCKRAGECheckScheduler(ApiCall):
sickrage.app.sys_encoding)
data = {"backlog_is_paused": int(backlogPaused), "backlog_is_running": int(backlogRunning),
"last_backlog": _ordinal_to_dateForm(last_backlog),
"last_backlog": _ordinal_to_date_form(last_backlog),
"next_backlog": nextBacklog}
return _responds(RESULT_SUCCESS, data)
......@@ -1379,7 +1421,7 @@ class CMD_SiCKRAGEDeleteRootDir(ApiCall):
def run(self):
""" Delete a root (parent) directory from SiCKRAGE """
if sickrage.app.config.root_dirs == "":
return _responds(RESULT_FAILURE, _getRootDirs(), msg="No root directories detected")
return _responds(RESULT_FAILURE, _get_root_dirs(), msg="No root directories detected")
newIndex = 0
root_dirs_new = []
......@@ -1407,7 +1449,7 @@ class CMD_SiCKRAGEDeleteRootDir(ApiCall):
sickrage.app.config.root_dirs = root_dirs_new
# what if the root dir was not found?
return _responds(RESULT_SUCCESS, _getRootDirs(), msg="Root directory deleted")
return _responds(RESULT_SUCCESS, _get_root_dirs(), msg="Root directory deleted")
class CMD_SiCKRAGEGetDefaults(ApiCall):
......@@ -1420,7 +1462,7 @@ class CMD_SiCKRAGEGetDefaults(ApiCall):
def run(self):
""" Get SiCKRAGE's user default configuration value """
anyQualities, bestQualities = _mapQuality(sickrage.app.config.quality_default)
anyQualities, bestQualities = _map_quality(sickrage.app.config.quality_default)
data = {"status": statusStrings[sickrage.app.config.status_default].lower(),
"flatten_folders": int(sickrage.app.config.flatten_folders_default), "initial": anyQualities,
......@@ -1454,7 +1496,7 @@ class CMD_SiCKRAGEGetRootDirs(ApiCall):
def run(self):
""" Get all root (parent) directories """
return _responds(RESULT_SUCCESS, _getRootDirs())
return _responds(RESULT_SUCCESS, _get_root_dirs())
class CMD_SiCKRAGEPauseDaily(ApiCall):
......@@ -1663,12 +1705,8 @@ class CMD_SiCKRAGESetDefaults(ApiCall):
def __init__(self, application, request, *args, **kwargs):
super(CMD_SiCKRAGESetDefaults, self).__init__(application, request, *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",
["sdtv", "sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl", "hdbluray", "fullhdbluray", "unknown"], *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",
["sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl", "hdbluray", "fullhdbluray"], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list", any_quality_list, *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list", best_quality_list, *args, **kwargs)
self.future_show_paused, args = self.check_params("future_show_paused", None, False, "bool", [], *args,
**kwargs)
self.flatten_folders, args = self.check_params("flatten_folders", None, False, "bool", [], *args, **kwargs)
......@@ -1678,26 +1716,15 @@ class CMD_SiCKRAGESetDefaults(ApiCall):
def run(self):
""" Set SiCKRAGE's user default configuration value """
quality_map = {'sdtv': Quality.SDTV,
'sddvd': Quality.SDDVD,
'hdtv': Quality.HDTV,
'rawhdtv': Quality.RAWHDTV,
'fullhdtv': Quality.FULLHDTV,
'hdwebdl': Quality.HDWEBDL,
'fullhdwebdl': Quality.FULLHDWEBDL,
'hdbluray': Quality.HDBLURAY,
'fullhdbluray': Quality.FULLHDBLURAY,
'unknown': Quality.UNKNOWN}
iqualityID = []
aqualityID = []
if isinstance(self.initial, collections.Iterable):
for quality in self.initial:
iqualityID.append(quality_map[quality])
iqualityID.append(_get_quality_map()[quality])
if isinstance(self.archive, collections.Iterable):
for quality in self.archive:
aqualityID.append(quality_map[quality])
aqualityID.append(_get_quality_map()[quality])
if iqualityID or aqualityID:
sickrage.app.config.quality_default = Quality.combineQualities(iqualityID, aqualityID)
......@@ -1796,7 +1823,7 @@ class CMD_Show(ApiCall):
showDict["genre"] = genreList
showDict["quality"] = get_quality_string(showObj.quality)
anyQualities, bestQualities = _mapQuality(showObj.quality)
anyQualities, bestQualities = _map_quality(showObj.quality)
showDict["quality_details"] = {"initial": anyQualities, "archive": bestQualities}
showDict["location"] = showObj.location
......@@ -1867,12 +1894,8 @@ class CMD_ShowAddExisting(ApiCall):
super(CMD_ShowAddExisting, self).__init__(application, request, *args, **kwargs)
self.indexerid, args = self.check_params("indexerid", None, True, "", [], *args, **kwargs)
self.location, args = self.check_params("location", None, True, "string", [], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",
["sdtv", "sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl", "hdbluray", "fullhdbluray", "unknown"], *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",
["sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl", "fullhdwebdl",
"hdbluray", "fullhdbluray"], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",any_quality_list, *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",best_quality_list, *args, **kwargs)
self.skip_downloaded, args = self.check_params("skip_downloaded", None, False, "int", [], *args, **kwargs)
self.flatten_folders, args = self.check_params("flatten_folders",
bool(sickrage.app.config.flatten_folders_default), False,
......@@ -1905,17 +1928,6 @@ class CMD_ShowAddExisting(ApiCall):
# set indexer so we can pass it along when adding show to SR
indexer = indexerResult['data']['results'][0]['indexer']
quality_map = {'sdtv': Quality.SDTV,
'sddvd': Quality.SDDVD,
'hdtv': Quality.HDTV,
'rawhdtv': Quality.RAWHDTV,
'fullhdtv': Quality.FULLHDTV,
'hdwebdl': Quality.HDWEBDL,
'fullhdwebdl': Quality.FULLHDWEBDL,
'hdbluray': Quality.HDBLURAY,
'fullhdbluray': Quality.FULLHDBLURAY,
'unknown': Quality.UNKNOWN}
# use default quality as a failsafe
newQuality = int(sickrage.app.config.quality_default)
iqualityID = []
......@@ -1923,10 +1935,10 @@ class CMD_ShowAddExisting(ApiCall):
if isinstance(self.initial, collections.Iterable):
for quality in self.initial:
iqualityID.append(quality_map[quality])
iqualityID.append(_get_quality_map()[quality])
if isinstance(self.archive, collections.Iterable):
for quality in self.archive:
aqualityID.append(quality_map[quality])
aqualityID.append(_get_quality_map()[quality])
if iqualityID or aqualityID:
newQuality = Quality.combineQualities(iqualityID, aqualityID)
......@@ -1970,12 +1982,8 @@ class CMD_ShowAddNew(ApiCall):
self.valid_languages = IndexerApi().indexer().languages
self.indexerid, args = self.check_params("indexerid", None, True, "int", [], *args, **kwargs)
self.location, args = self.check_params("location", None, False, "string", [], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",
["sdtv", "sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl", "hdbluray", "fullhdbluray", "unknown"], *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",
["sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl", "fullhdwebdl",
"hdbluray", "fullhdbluray"], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",any_quality_list, *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",best_quality_list, *args, **kwargs)
self.flatten_folders, args = self.check_params("flatten_folders",
bool(sickrage.app.config.flatten_folders_default), False,
"bool", [], *args, **kwargs)
......@@ -2013,17 +2021,6 @@ class CMD_ShowAddNew(ApiCall):
if not os.path.isdir(self.location):
return _responds(RESULT_FAILURE, msg="'" + self.location + "' is not a valid location")
quality_map = {'sdtv': Quality.SDTV,
'sddvd': Quality.SDDVD,
'hdtv': Quality.HDTV,
'rawhdtv': Quality.RAWHDTV,
'fullhdtv': Quality.FULLHDTV,
'hdwebdl': Quality.HDWEBDL,
'fullhdwebdl': Quality.FULLHDWEBDL,
'hdbluray': Quality.HDBLURAY,
'fullhdbluray': Quality.FULLHDBLURAY,
'unknown': Quality.UNKNOWN}
# use default quality as a failsafe
newQuality = int(sickrage.app.config.quality_default)
iqualityID = []
......@@ -2031,10 +2028,10 @@ class CMD_ShowAddNew(ApiCall):
if isinstance(self.initial, collections.Iterable):
for quality in self.initial:
iqualityID.append(quality_map[quality])
iqualityID.append(_get_quality_map()[quality])
if isinstance(self.archive, collections.Iterable):
for quality in self.archive:
aqualityID.append(quality_map[quality])
aqualityID.append(_get_quality_map()[quality])
if iqualityID or aqualityID:
newQuality = Quality.combineQualities(iqualityID, aqualityID)
......@@ -2208,7 +2205,7 @@ class CMD_ShowGetQuality(ApiCall):
if not showObj:
return _responds(RESULT_FAILURE, msg="Show not found")
anyQualities, bestQualities = _mapQuality(showObj.quality)
anyQualities, bestQualities = _map_quality(showObj.quality)
return _responds(RESULT_SUCCESS, {"initial": anyQualities, "archive": bestQualities})
......@@ -2434,7 +2431,7 @@ class CMD_ShowSeasons(ApiCall):
for row in sickrage.app.main_db.get_many('tv_episodes', self.indexerid):
status, quality = Quality.splitCompositeStatus(int(row["status"]))
row["status"] = _get_status_Strings(status)
row["status"] = _get_status_strings(status)
row["quality"] = get_quality_string(quality)
if try_int(row['airdate'], 1) > 693595: # 1900
......@@ -2468,7 +2465,7 @@ class CMD_ShowSeasons(ApiCall):
curEpisode = int(row["episode"])
del row["episode"]
status, quality = Quality.splitCompositeStatus(int(row["status"]))
row["status"] = _get_status_Strings(status)
row["status"] = _get_status_strings(status)
row["quality"] = get_quality_string(quality)
if try_int(row['airdate'], 1) > 693595: # 1900
dtEpisodeAirs = srdatetime.srDateTime(
......@@ -2502,13 +2499,8 @@ class CMD_ShowSetQuality(ApiCall):
super(CMD_ShowSetQuality, self).__init__(application, request, *args, **kwargs)
self.indexerid, args = self.check_params("indexerid", None, True, "int", [], *args, **kwargs)
# self.archive, args = self.check_params("archive", None, False, "list", _getQualityMap().values()[1:], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",
["sdtv", "sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl", "hdbluray", "fullhdbluray", "unknown"], *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",
["sddvd", "hdtv", "rawhdtv", "fullhdtv", "hdwebdl",
"fullhdwebdl",
"hdbluray", "fullhdbluray"], *args, **kwargs)
self.initial, args = self.check_params("initial", None, False, "list",any_quality_list, *args, **kwargs)
self.archive, args = self.check_params("archive", None, False, "list",best_quality_list, *args, **kwargs)
def run(self):
""" Set the quality setting of a show. If no quality is provided, the default user setting is used. """
......@@ -2516,17 +2508,6 @@ class CMD_ShowSetQuality(ApiCall):
if not showObj:
return _responds(RESULT_FAILURE, msg="Show not found")
quality_map = {'sdtv': Quality.SDTV,
'sddvd': Quality.SDDVD,
'hdtv': Quality.HDTV,
'rawhdtv': Quality.RAWHDTV,
'fullhdtv': Quality.FULLHDTV,
'hdwebdl': Quality.HDWEBDL,
'fullhdwebdl': Quality.FULLHDWEBDL,
'hdbluray': Quality.HDBLURAY,
'fullhdbluray': Quality.FULLHDBLURAY,
'unknown': Quality.UNKNOWN}
# use default quality as a failsafe
newQuality = int(sickrage.app.config.quality_default)
iqualityID = []
......@@ -2534,10 +2515,10 @@ class CMD_ShowSetQuality(ApiCall):
if isinstance(self.initial, collections.Iterable):
for quality in self.initial:
iqualityID.append(quality_map[quality])
iqualityID.append(_get_quality_map()[quality])
if isinstance(self.archive, collections.Iterable):
for quality in self.archive:
aqualityID.append(quality_map[quality])
aqualityID.append(_get_quality_map()[quality])
if iqualityID or aqualityID:
newQuality = Quality.combineQualities(iqualityID, aqualityID)
......
......@@ -88,8 +88,7 @@
<div class="col-md-12">
<h4>${_('Playground')}</h4>
<span>
${_('URL:')} <kbd id="command-${command_id}-base-url">${srWebRoot}
/api/${apikey}/?cmd=${command}</kbd>
${_('URL:')} <kbd id="command-${command_id}-base-url">${request.protocol}://${request.host}${srWebRoot}/api/${apikey}/?cmd=${command}</kbd>
</span>
</div>
</div>
......
......@@ -2,14 +2,14 @@ msgid ""
msgstr ""
"Project-Id-Version: sickragetv\n"
"Report-Msgid-Bugs-To: [email protected]\n"
"POT-Creation-Date: 2018-11-17 18:28-0800\n"
"PO-Revision-Date: 2018-11-18 02:28\n"
"POT-Creation-Date: 2018-11-18 10:29-0800\n"
"PO-Revision-Date: 2018-11-18 18:30\n"
"Last-Translator: echel0n <[email protected]>\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\n"
"Generated-By: Babel 2.6.0\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: sickragetv\n"
......@@ -392,34 +392,34 @@ msgid "Playground"
msgstr "ملعب للأطفال"
#: sickrage/core/webserver/views/api_builder.mako:91
#: sickrage/core/webserver/views/api_builder.mako:133
#: sickrage/core/webserver/views/api_builder.mako:132
#: sickrage/core/webserver/views/config/providers.mako:165
msgid "URL:"
msgstr "URL:"
#: sickrage/core/webserver/views/api_builder.mako:100
#: sickrage/core/webserver/views/api_builder.mako:99
msgid "Required parameters"
msgstr "المعلمات المطلوبة"
#: sickrage/core/webserver/views/api_builder.mako:109
#: sickrage/core/webserver/views/api_builder.mako:108
msgid "Optional parameters"
msgstr "معلمات اختيارية"
#: sickrage/core/webserver/views/api_builder.mako:123
#: sickrage/core/webserver/views/api_builder.mako:122
msgid "Call API"
msgstr "استدعاء API"
#: sickrage/core/webserver/views/api_builder.mako:131
#: sickrage/core/webserver/views/api_builder.mako:130
msgid "Response:"
msgstr "الرد:"
#: sickrage/core/webserver/views/api_builder.mako:137
#: sickrage/core/webserver/views/api_builder.mako:136
#: sickrage/core/webserver/views/manage/failed_downloads.mako:74
msgid "Clear"
msgstr "واضحة"
#: sickrage/core/webserver/views/api_builder.mako:168
#: sickrage/core/webserver/views/api_builder.mako:198
#: sickrage/core/webserver/views/api_builder.mako:167
#: sickrage/core/webserver/views/api_builder.mako:197
#: sickrage/core/webserver/views/includes/modals.mako:66
#: sickrage/core/webserver/views/includes/modals.mako:88
#: sickrage/core/webserver/views/manage/mass_edit.mako:149
......@@ -433,8 +433,8 @@ msgstr "واضحة"
msgid "Yes"
msgstr "نعم"
#: sickrage/core/webserver/views/api_builder.mako:170
#: sickrage/core/webserver/views/api_builder.mako:197
#: sickrage/core/webserver/views/api_builder.mako:169
#: sickrage/core/webserver/views/api_builder.mako:196
#: sickrage/core/webserver/views/includes/modals.mako:63
#: sickrage/core/webserver/views/includes/modals.mako:87
#: sickrage/core/webserver/views/manage/mass_edit.mako:150
......@@ -448,11 +448,11 @@ msgstr "نعم"
msgid "No"
msgstr "لا"
#: sickrage/core/webserver/views/api_builder.mako:217
#: sickrage/core/webserver/views/api_builder.mako:216
msgid "season"
msgstr "الموسم"
#: sickrage/core/webserver/views/api_builder.mako:223
#: sickrage/core/webserver/views/api_builder.mako:222
msgid "episode"
msgstr "الحلقة"
......@@ -4358,7 +4358,7 @@ msgstr "استخدام تخصيص عرض النطاق الترددي العال
msgid "Test Connection"
msgstr "اختبار الاتصال"
#: sickrage/core/webserver/api.py:975
#: sickrage/core/webserver/api.py:1017
#: sickrage/core/webserver/views/config/subtitles.mako:10
#: sickrage/core/webserver/views/config/subtitles.mako:26
#: sickrage/core/webserver/views/home/display_show.mako:712
......
......@@ -2,14 +2,14 @@ msgid ""
msgstr ""
"Project-Id-Version: sickragetv\n"
"Report-Msgid-Bugs-To: [email protected]\n"
"POT-Creation-Date: 2018-11-17 18:28-0800\n"
"PO-Revision-Date: 2018-11-18 02:28\n"
"POT-Creation-Date: 2018-11-18 10:29-0800\n"
"PO-Revision-Date: 2018-11-18 18:30\n"
"Last-Translator: echel0n <[email protected]>\n"
"Language-Team: Catalan\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\n"
"Generated-By: Babel 2.6.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: sickragetv\n"
......@@ -392,34 +392,34 @@ msgid "Playground"
msgstr "Parc infantil"
#: sickrage/core/webserver/views/api_builder.mako:91
#: sickrage/core/webserver/views/api_builder.mako:133
#: sickrage/core/webserver/views/api_builder.mako:132
#: sickrage/core/webserver/views/config/providers.mako:165
msgid "URL:"
msgstr "URL:"
#: sickrage/core/webserver/views/api_builder.mako:100
#: sickrage/core/webserver/views/api_builder.mako:99
msgid "Required parameters"
msgstr "Paràmetres necessaris"
#: sickrage/core/webserver/views/api_builder.mako:109
#: sickrage/core/webserver/views/api_builder.mako:108
msgid "Optional parameters"
msgstr "Paràmetres opcionals"
#: sickrage/core/webserver/views/api_builder.mako:123
#: sickrage/core/webserver/views/api_builder.mako:122
msgid "Call API"
msgstr "Crida d'API"
#: sickrage/core/webserver/views/api_builder.mako:131
#: sickrage/core/webserver/views/api_builder.mako:130
msgid "Response:"
msgstr "Resposta:"
#: sickrage/core/webserver/views/api_builder.mako:137
#: sickrage/core/webserver/views/api_builder.mako:136
#: sickrage/core/webserver/views/manage/failed_downloads.mako:74
msgid "Clear"
msgstr "Clar"
#: sickrage/core/webserver/views/api_builder.mako:168
#: sickrage/core/webserver/views/api_builder.mako:198
#: sickrage/core/webserver/views/api_builder.mako:167
#: sickrage/core/webserver/views/api_builder.mako:197
#: sickrage/core/webserver/views/includes/modals.mako:66
#: sickrage/core/webserver/views/includes/modals.mako:88
#: sickrage/core/webserver/views/manage/mass_edit.mako:149
......@@ -433,8 +433,8 @@ msgstr "Clar"
msgid "Yes"
msgstr "Sí"
#: sickrage/core/webserver/views/api_builder.mako:170
#: sickrage/core/webserver/views/api_builder.mako:197
#: sickrage/core/webserver/views/api_builder.mako:169
#: sickrage/core/webserver/views/api_builder.mako:196
#: sickrage/core/webserver/views/includes/modals.mako:63
#: sickrage/core/webserver/views/includes/modals.mako:87
#: sickrage/core/webserver/views/manage/mass_edit.mako:150
......@@ -448,11 +448,11 @@ msgstr "Sí"
msgid "No"
msgstr "No"
#: sickrage/core/webserver/views/api_builder.mako:217
#: sickrage/core/webserver/views/api_builder.mako:216
msgid "season"
msgstr "temporada"
#: sickrage/core/webserver/views/api_builder.mako:223
#: sickrage/core/webserver/views/api_builder.mako:222
msgid "episode"
msgstr "episodi"
......@@ -4358,7 +4358,7 @@ msgstr "Utilitzeu Alt amplada de banda assignació si prioritat és alt"
msgid "Test Connection"
msgstr "Connexió de prova"
#: sickrage/core/webserver/api.py:975
#: sickrage/core/webserver/api.py:1017
#: sickrage/core/webserver/views/config/subtitles.mako:10
#: sickrage/core/webserver/views/config/subtitles.mako:26
#: sickrage/core/webserver/views/home/display_show.mako:712
......
......@@ -2,14 +2,14 @@ msgid ""
msgstr ""
"Project-Id-Version: sickragetv\n"
"Report-Msgid-Bugs-To: [email protected]\n"
"POT-Creation-Date: 2018-11-17 18:28-0800\n"
"PO-Revision-Date: 2018-11-18 02:28\n"
"POT-Creation-Date: 2018-11-18 10:29-0800\n"
"PO-Revision-Date: 2018-11-18 18:30\n"
"Last-Translator: echel0n <[email protected]>\n"
"Language-Team: Czech\n"