From 79e5f6687b64f31354da1056fd4261bb5b8965b7 Mon Sep 17 00:00:00 2001
From: Kfir Hadas <sharkykh@gmail.com>
Date: Sun, 7 May 2017 02:51:58 +0300
Subject: [PATCH] Add option to show/hide snatched episodes in Schedule (#3720)

* Add option to show/hide snatched episodes in Schedule

* Hide "Snatched" key if unused
---
 gui/slick/views/schedule.mako | 22 ++++++++++++++++++----
 sickbeard/__init__.py         |  5 ++++-
 sickbeard/webserve.py         |  7 +++++++
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 0762b2264..c69d68ca2 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -8,7 +8,7 @@
     from sickbeard.helpers import anon_url
     from sickbeard import sbdatetime
     from sickbeard.common import Quality
-    
+
     SNATCHED = Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST  # type = list
 %>
 <%block name="scripts">
@@ -24,7 +24,9 @@
                 % if 'calendar' != layout:
                     <b>${_('Key')}:</b>
                     <span class="listing-key listing-overdue">${_('Missed')}</span>
-                    <span class="listing-key listing-snatched">${_('Snatched')}</span>
+                    % if sickbeard.COMING_EPS_DISPLAY_SNATCHED:
+                        <span class="listing-key listing-snatched">${_('Snatched')}</span>
+                    % endif
                     <span class="listing-key listing-current">${_('Today')}</span>
                     <span class="listing-key listing-default">${_('Soon')}</span>
                     <span class="listing-key listing-toofar">${_('Later')}</span>
@@ -66,7 +68,16 @@
                     </select>
                     &nbsp;
                 </label>
-
+                % if layout != 'calendar':
+                <label>
+                    <span>${_('View Snatched')}:</span>
+                    <select name="viewsnatched" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;" title="View snatched">
+                        <option value="${srRoot}/toggleScheduleDisplaySnatched" ${('', 'selected="selected"')[not bool(sickbeard.COMING_EPS_DISPLAY_SNATCHED)]}>${_('Hidden')}</option>
+                        <option value="${srRoot}/toggleScheduleDisplaySnatched" ${('', 'selected="selected"')[bool(sickbeard.COMING_EPS_DISPLAY_SNATCHED)]}>${_('Shown')}</option>
+                    </select>
+                    &nbsp;
+                </label>
+                % endif
                 <label>
                     <span>${_('Layout')}:</span>
                     <select name="layout" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;" title="Layout">
@@ -116,6 +127,9 @@
                                     if int(cur_result[b'paused']) and not sickbeard.COMING_EPS_DISPLAY_PAUSED:
                                         continue
 
+                                    if snatched_status and not sickbeard.COMING_EPS_DISPLAY_SNATCHED:
+                                        continue
+
                                     cur_ep_airdate = cur_result[b'localtime'].date()
                                     cur_ep_enddate = cur_result[b'localtime']
                                     if run_time:
@@ -303,7 +317,7 @@
                     if int(cur_result[b'paused']) and not sickbeard.COMING_EPS_DISPLAY_PAUSED:
                         continue
 
-                    if cur_result[b'location'] and snatched_status:
+                    if snatched_status and (cur_result[b'location'] or not sickbeard.COMING_EPS_DISPLAY_SNATCHED):
                         continue
 
                     run_time = cur_result[b'runtime']
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index f3f16ad79..dfcc891a5 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -583,6 +583,7 @@ HISTORY_LAYOUT = None
 HISTORY_LIMIT = 0
 DISPLAY_SHOW_SPECIALS = False
 COMING_EPS_LAYOUT = None
+COMING_EPS_DISPLAY_SNATCHED = False
 COMING_EPS_DISPLAY_PAUSED = False
 COMING_EPS_SORT = None
 COMING_EPS_MISSED_RANGE = None
@@ -705,7 +706,7 @@ def initialize(consoleLogging=True):  # pylint: disable=too-many-locals, too-man
             USE_EMAIL, EMAIL_HOST, EMAIL_PORT, EMAIL_TLS, EMAIL_USER, EMAIL_PASSWORD, EMAIL_FROM, EMAIL_NOTIFY_ONSNATCH, EMAIL_NOTIFY_ONDOWNLOAD, EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD, EMAIL_LIST, EMAIL_SUBJECT, \
             USE_LISTVIEW, METADATA_KODI, METADATA_KODI_12PLUS, METADATA_MEDIABROWSER, METADATA_PS3, metadata_provider_dict, \
             NEWZBIN, NEWZBIN_USERNAME, NEWZBIN_PASSWORD, GIT_PATH, MOVE_ASSOCIATED_FILES, DELETE_NON_ASSOCIATED_FILES, SYNC_FILES, POSTPONE_IF_SYNC_FILES, dailySearchScheduler, NFO_RENAME, \
-            GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \
+            GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_DISPLAY_SNATCHED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \
             POSTER_SORTBY, POSTER_SORTDIR, HISTORY_LIMIT, CREATE_MISSING_SHOW_DIRS, ADD_SHOWS_WO_DIR, USE_FREE_SPACE_CHECK, \
             METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, TRACKERS_LIST, IGNORED_SUBS_LIST, REQUIRE_WORDS, CALENDAR_UNPROTECTED, CALENDAR_ICONS, NO_RESTART, \
             USE_SUBTITLES, SUBTITLES_INCLUDE_SPECIALS, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, SUBTITLES_MULTI, SUBTITLES_KEEP_ONLY_WANTED, EMBEDDED_SUBTITLES_ALL, SUBTITLES_EXTRA_SCRIPTS, SUBTITLES_PERFECT_MATCH, subtitlesFinderScheduler, \
@@ -1370,6 +1371,7 @@ def initialize(consoleLogging=True):  # pylint: disable=too-many-locals, too-man
         DISPLAY_SHOW_SPECIALS = check_setting_bool(CFG, 'GUI', 'display_show_specials', True)
         COMING_EPS_LAYOUT = check_setting_str(CFG, 'GUI', 'coming_eps_layout', 'banner')
         COMING_EPS_DISPLAY_PAUSED = check_setting_bool(CFG, 'GUI', 'coming_eps_display_paused')
+        COMING_EPS_DISPLAY_SNATCHED = check_setting_bool(CFG, 'GUI', 'coming_eps_display_snatched')
         COMING_EPS_SORT = check_setting_str(CFG, 'GUI', 'coming_eps_sort', 'date')
         COMING_EPS_MISSED_RANGE = check_setting_int(CFG, 'GUI', 'coming_eps_missed_range', 7, min_val=0, max_val=42810, fallback_def=False)
         FUZZY_DATING = check_setting_bool(CFG, 'GUI', 'fuzzy_dating')
@@ -2337,6 +2339,7 @@ def save_config():  # pylint: disable=too-many-statements, too-many-branches
             'display_show_specials': int(DISPLAY_SHOW_SPECIALS),
             'coming_eps_layout': COMING_EPS_LAYOUT,
             'coming_eps_display_paused': int(COMING_EPS_DISPLAY_PAUSED),
+            'coming_eps_display_snatched': int(COMING_EPS_DISPLAY_SNATCHED),
             'coming_eps_sort': COMING_EPS_SORT,
             'coming_eps_missed_range': config.min_max(COMING_EPS_MISSED_RANGE, 7, 0, 42810),
             'fuzzy_dating': int(FUZZY_DATING),
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index 544567b71..407c8ed66 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -474,6 +474,13 @@ class WebRoot(WebHandler):
 
         return self.redirect("/schedule/")
 
+
+    def toggleScheduleDisplaySnatched(self):
+
+        sickbeard.COMING_EPS_DISPLAY_SNATCHED = not sickbeard.COMING_EPS_DISPLAY_SNATCHED
+
+        return self.redirect("/schedule/")
+
     def setScheduleSort(self, sort):
         if sort not in ('date', 'network', 'show') or sickbeard.COMING_EPS_LAYOUT == 'calendar':
             sort = 'date'
-- 
GitLab