Copy disabled (too large)
Download .txt
Showing preview only (13,334K chars total). Download the full file to get everything.
Repository: SiCKRAGE/SiCKRAGE
Branch: master
Commit: 6cf2428dc146
Files: 571
Total size: 12.3 MB
Directory structure:
gitextract_ei3lbocf/
├── .changelogrc
├── .dockerignore
├── .eslintrc
├── .gitattributes
├── .gitignore
├── .gitlab-ci.yml
├── CHANGELOG.md
├── COPYING.txt
├── Dockerfile
├── MANIFEST.in
├── README.txt
├── SiCKRAGE.py
├── build_protos.bat
├── changelog-template.md
├── checksum-generator.py
├── checksum-validator.py
├── crowdin.yaml
├── docker-compose.yml
├── manifests/
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── service.yaml
├── package.json
├── protos/
│ ├── announcement_v1.proto
│ ├── network_timezone_v1.proto
│ ├── search_provider_url_v1.proto
│ ├── server_certificate_v1.proto
│ └── updates_v1.proto
├── readme.md
├── renovate.json
├── requirements-dev.txt
├── requirements.txt
├── runscripts/
│ ├── init.debian
│ ├── init.fedora
│ ├── init.freebsd
│ ├── init.gentoo
│ ├── init.solaris11
│ ├── init.systemd
│ ├── init.ubuntu
│ └── init.upstart
├── setup.cfg
├── setup.py
├── sickrage/
│ ├── __init__.py
│ ├── autoProcessTV/
│ │ ├── __init__.py
│ │ ├── autoProcessTV.cfg.sample
│ │ ├── autoProcessTV.py
│ │ ├── hellaToSiCKRAGE.py
│ │ ├── mediaToSiCKRAGE.py
│ │ └── sabToSiCKRAGE.py
│ ├── checksums.md5
│ ├── clients/
│ │ ├── __init__.py
│ │ ├── nzb/
│ │ │ ├── __init__.py
│ │ │ ├── download_station.py
│ │ │ ├── nzbget.py
│ │ │ └── sabnzbd.py
│ │ └── torrent/
│ │ ├── __init__.py
│ │ ├── deluge.py
│ │ ├── deluged.py
│ │ ├── download_station.py
│ │ ├── mlnet.py
│ │ ├── putio.py
│ │ ├── qbittorrent.py
│ │ ├── rtorrent.py
│ │ ├── transmission.py
│ │ └── utorrent.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── amqp/
│ │ │ ├── __init__.py
│ │ │ ├── consumer.py
│ │ │ └── protos/
│ │ │ ├── announcement_v1_pb2.py
│ │ │ ├── network_timezone_v1_pb2.py
│ │ │ ├── search_provider_url_v1_pb2.py
│ │ │ ├── server_certificate_v1_pb2.py
│ │ │ └── updates_v1_pb2.py
│ │ ├── announcements.py
│ │ ├── api/
│ │ │ ├── __init__.py
│ │ │ └── exceptions.py
│ │ ├── auth/
│ │ │ └── __init__.py
│ │ ├── auto_backup.py
│ │ ├── blackandwhitelist.py
│ │ ├── caches/
│ │ │ ├── __init__.py
│ │ │ ├── image_cache.py
│ │ │ ├── name_cache.py
│ │ │ └── tv_cache.py
│ │ ├── classes.py
│ │ ├── common.py
│ │ ├── config/
│ │ │ ├── __init__.py
│ │ │ └── helpers.py
│ │ ├── databases/
│ │ │ ├── __init__.py
│ │ │ ├── cache/
│ │ │ │ ├── __init__.py
│ │ │ │ └── migrations/
│ │ │ │ ├── env.py
│ │ │ │ ├── script.py.mako
│ │ │ │ └── versions/
│ │ │ │ ├── 001_Add_Initial_Tables.py
│ │ │ │ ├── 002_Remove_ID_Column_From_LastSearch_Table.py
│ │ │ │ ├── 003_Rename_IndexerID_To_SeriesID_On_Provider_Table.py
│ │ │ │ ├── 004_Add_OAuth2Token_Table.py
│ │ │ │ ├── 005_Add_Announcements_Table.py
│ │ │ │ ├── 006_Add_Session_State_Column_To_OAuth2Token_Table.py
│ │ │ │ ├── 007_Add_Token_Type_Column_To_OAuth2Token_Table.py
│ │ │ │ ├── 008_Drop_QuickSearch_Tables.py
│ │ │ │ ├── 009_Add_SeriesProviderID_Column_To_Providers_Table.py
│ │ │ │ ├── 010_Remove_OAuth2Token_Table.py
│ │ │ │ └── 011_Bump_Version.py
│ │ │ ├── config/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── migrations/
│ │ │ │ │ ├── env.py
│ │ │ │ │ ├── script.py.mako
│ │ │ │ │ └── versions/
│ │ │ │ │ ├── 001_Add_Initial_Tables.py
│ │ │ │ │ ├── 002_Remove_Web_Host_Column.py
│ │ │ │ │ ├── 003_Remove_Search_Providers_Newznab_Key_Column.py
│ │ │ │ │ ├── 004_Add_SSO_API_Key_Column_To_General_Table.py
│ │ │ │ │ ├── 005_Convert_Default_Series_Provider_Language_Code_To_ISO6393_In_General_Table.py
│ │ │ │ │ ├── 006_Bump_Version.py
│ │ │ │ │ ├── 007_Convert_NMA_Priority_Column_To_Integer.py
│ │ │ │ │ ├── 008_Add_Update_Video_Metadata_Column_To_General_Table.py
│ │ │ │ │ └── 009_Add_AutoBackup_Columns_To_General_Table.py
│ │ │ │ └── schemas.py
│ │ │ └── main/
│ │ │ ├── __init__.py
│ │ │ ├── migrations/
│ │ │ │ ├── env.py
│ │ │ │ ├── script.py.mako
│ │ │ │ └── versions/
│ │ │ │ ├── 001_Add_Initial_Tables.py
│ │ │ │ ├── 002_Add_Last_Backlog_Search_Column_To_TVShow_Table.py
│ │ │ │ ├── 003_Add_Last_Proper_Search_Column_To_TVShow_Table.py
│ │ │ │ ├── 004_Rename_Columns_On_TVShow_Table.py
│ │ │ │ ├── 005_Rename_Columns_On_IMDbInfo_Table.py
│ │ │ │ ├── 006_Rename_Columns_On_TVEpisode_Table.py
│ │ │ │ ├── 007_Convert_Airdate_Column_To_Date_Type_On_TVEpisode_Table.py
│ │ │ │ ├── 008_Convert_Date_Column_To_DateTime_Type_On_FailedSnatchHistory_Table.py
│ │ │ │ ├── 009_Convert_Date_Column_To_DateTime_Type_On_History_Table.py
│ │ │ │ ├── 010_Add_Release_Group_Column_To_History_Table.py
│ │ │ │ ├── 011_Add_Scene_Exceptions_Column_To_TVShow_Table.py
│ │ │ │ ├── 012_Add_Search_Format_Column_To_TVShow_Table.py
│ │ │ │ ├── 013_Add_Scene_Column_To_TVShow_Table.py
│ │ │ │ ├── 014_Add_Last_XEM_Refresh_Column_To_TVShows_Table.py
│ │ │ │ ├── 015_Add_XEM_Numbering_To_TVEpisodes_Table.py
│ │ │ │ ├── 016_Merge_Scene_Numbering_Table_With_TVEpisodes_Table.py
│ │ │ │ ├── 017_Convert_SearchFormat_Column_To_Enum_Type_On_TVShow_Table.py
│ │ │ │ ├── 018_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVEpisode_Table.py
│ │ │ │ ├── 019_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVShow_Table.py
│ │ │ │ ├── 020_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_ImdbInfo_Table.py
│ │ │ │ ├── 021_Upgrade_To_SiCKRAGE_v10.py
│ │ │ │ ├── 022_Convert_Language_Codes_To_ISO6393_On_TVShow_Table.py
│ │ │ │ └── 023_Bump_Version.py
│ │ │ └── schemas.py
│ │ ├── enums.py
│ │ ├── exceptions/
│ │ │ └── __init__.py
│ │ ├── google_drive.py
│ │ ├── helpers/
│ │ │ ├── __init__.py
│ │ │ ├── anidb.py
│ │ │ ├── browser.py
│ │ │ ├── encryption.py
│ │ │ ├── metadata.py
│ │ │ ├── show_names.py
│ │ │ └── srdatetime.py
│ │ ├── imdb_popular.py
│ │ ├── logger/
│ │ │ └── __init__.py
│ │ ├── media/
│ │ │ ├── __init__.py
│ │ │ ├── banner.py
│ │ │ ├── fanart.py
│ │ │ ├── network.py
│ │ │ ├── poster.py
│ │ │ └── util.py
│ │ ├── nameparser/
│ │ │ ├── __init__.py
│ │ │ ├── regexes.py
│ │ │ └── validator.py
│ │ ├── nzbSplitter.py
│ │ ├── process_tv.py
│ │ ├── processors/
│ │ │ ├── __init__.py
│ │ │ ├── auto_postprocessor.py
│ │ │ ├── failed_processor.py
│ │ │ └── post_processor.py
│ │ ├── queues/
│ │ │ ├── __init__.py
│ │ │ ├── postprocessor.py
│ │ │ ├── search.py
│ │ │ └── show.py
│ │ ├── scene_numbering.py
│ │ ├── search.py
│ │ ├── searchers/
│ │ │ ├── __init__.py
│ │ │ ├── backlog_searcher.py
│ │ │ ├── daily_searcher.py
│ │ │ ├── failed_snatch_searcher.py
│ │ │ ├── proper_searcher.py
│ │ │ ├── subtitle_searcher.py
│ │ │ └── trakt_searcher.py
│ │ ├── traktapi.py
│ │ ├── tv/
│ │ │ ├── __init__.py
│ │ │ ├── episode/
│ │ │ │ ├── __init__.py
│ │ │ │ └── helpers.py
│ │ │ └── show/
│ │ │ ├── __init__.py
│ │ │ ├── coming_episodes.py
│ │ │ ├── helpers.py
│ │ │ └── history.py
│ │ ├── ui.py
│ │ ├── updaters/
│ │ │ ├── __init__.py
│ │ │ ├── rsscache_updater.py
│ │ │ ├── show_updater.py
│ │ │ └── tz_updater.py
│ │ ├── upnp.py
│ │ ├── version_updater.py
│ │ ├── webserver/
│ │ │ ├── __init__.py
│ │ │ ├── handlers/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── account.py
│ │ │ │ ├── announcements.py
│ │ │ │ ├── api/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── schemas.py
│ │ │ │ │ ├── v1/
│ │ │ │ │ │ └── __init__.py
│ │ │ │ │ └── v2/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── episode/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── file_browser/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── history/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── postprocess/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── schedule/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ ├── series/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── schemas.py
│ │ │ │ │ └── series_provider/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── schemas.py
│ │ │ │ ├── base.py
│ │ │ │ ├── calendar.py
│ │ │ │ ├── changelog.py
│ │ │ │ ├── config/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── anime.py
│ │ │ │ │ ├── backup_restore.py
│ │ │ │ │ ├── general.py
│ │ │ │ │ ├── notifications.py
│ │ │ │ │ ├── postprocessing.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── quality_settings.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ └── subtitles.py
│ │ │ │ ├── google_drive.py
│ │ │ │ ├── history.py
│ │ │ │ ├── home/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── add_shows.py
│ │ │ │ │ └── postprocess.py
│ │ │ │ ├── login.py
│ │ │ │ ├── logout.py
│ │ │ │ ├── logs.py
│ │ │ │ ├── manage/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── queues.py
│ │ │ │ ├── not_found.py
│ │ │ │ ├── root.py
│ │ │ │ └── web_file_browser.py
│ │ │ ├── helpers.py
│ │ │ └── views/
│ │ │ ├── announcements.mako
│ │ │ ├── api_builder.mako
│ │ │ ├── config/
│ │ │ │ ├── anime.mako
│ │ │ │ ├── backup_restore.mako
│ │ │ │ ├── general.mako
│ │ │ │ ├── index.mako
│ │ │ │ ├── notifications.mako
│ │ │ │ ├── postprocessing.mako
│ │ │ │ ├── providers.mako
│ │ │ │ ├── quality_settings.mako
│ │ │ │ ├── search.mako
│ │ │ │ └── subtitles.mako
│ │ │ ├── errors/
│ │ │ │ └── 500.mako
│ │ │ ├── generic_message.mako
│ │ │ ├── history.mako
│ │ │ ├── home/
│ │ │ │ ├── add_existing_shows.mako
│ │ │ │ ├── add_shows.mako
│ │ │ │ ├── display_show.mako
│ │ │ │ ├── edit_show.mako
│ │ │ │ ├── imdb_shows.mako
│ │ │ │ ├── index.mako
│ │ │ │ ├── mass_add_table.mako
│ │ │ │ ├── new_show.mako
│ │ │ │ ├── postprocess.mako
│ │ │ │ ├── provider_status.mako
│ │ │ │ ├── restart.mako
│ │ │ │ ├── server_status.mako
│ │ │ │ ├── test_renaming.mako
│ │ │ │ └── trakt_shows.mako
│ │ │ ├── includes/
│ │ │ │ ├── add_show_options.mako
│ │ │ │ ├── blackwhitelist.mako
│ │ │ │ ├── modals.mako
│ │ │ │ ├── quality_chooser.mako
│ │ │ │ ├── quality_defaults.mako
│ │ │ │ └── root_dirs.mako
│ │ │ ├── layouts/
│ │ │ │ ├── config.mako
│ │ │ │ └── main.mako
│ │ │ ├── login.mako
│ │ │ ├── login_failed.mako
│ │ │ ├── logs/
│ │ │ │ ├── errors.mako
│ │ │ │ └── view.mako
│ │ │ ├── manage/
│ │ │ │ ├── backlog_overview.mako
│ │ │ │ ├── episode_statuses.mako
│ │ │ │ ├── failed_downloads.mako
│ │ │ │ ├── mass_edit.mako
│ │ │ │ ├── mass_update.mako
│ │ │ │ ├── queues.mako
│ │ │ │ ├── subtitles_missed.mako
│ │ │ │ └── torrents.mako
│ │ │ └── schedule.mako
│ │ ├── websession/
│ │ │ └── __init__.py
│ │ └── websocket/
│ │ └── __init__.py
│ ├── libs/
│ │ ├── __init__.py
│ │ ├── adba/
│ │ │ ├── __init__.py
│ │ │ ├── aniDBAbstracter.py
│ │ │ ├── aniDBcommands.py
│ │ │ ├── aniDBerrors.py
│ │ │ ├── aniDBfileInfo.py
│ │ │ ├── aniDBlink.py
│ │ │ ├── aniDBmaper.py
│ │ │ ├── aniDBresponses.py
│ │ │ └── aniDBtvDBmaper.py
│ │ ├── fanart/
│ │ │ ├── __init__.py
│ │ │ ├── errors.py
│ │ │ ├── immutable.py
│ │ │ ├── items.py
│ │ │ ├── movie.py
│ │ │ ├── music.py
│ │ │ └── tv.py
│ │ ├── rtorrentlib/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── err.py
│ │ │ ├── file.py
│ │ │ ├── group.py
│ │ │ ├── lib/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bencode.py
│ │ │ │ ├── torrentparser.py
│ │ │ │ └── xmlrpc/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── basic_auth.py
│ │ │ │ ├── http.py
│ │ │ │ ├── requests_transport.py
│ │ │ │ └── scgi.py
│ │ │ ├── peer.py
│ │ │ ├── rpc/
│ │ │ │ └── __init__.py
│ │ │ ├── torrent.py
│ │ │ └── tracker.py
│ │ ├── trakt/
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── core/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── context_collection.py
│ │ │ │ ├── context_stack.py
│ │ │ │ ├── emitter.py
│ │ │ │ ├── errors.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── helpers.py
│ │ │ │ ├── http.py
│ │ │ │ ├── keylock.py
│ │ │ │ ├── pagination.py
│ │ │ │ └── request.py
│ │ │ ├── helpers.py
│ │ │ ├── hooks.py
│ │ │ ├── interfaces/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── auth.py
│ │ │ │ ├── base/
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── calendars.py
│ │ │ │ ├── movies/
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── oauth/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── device.py
│ │ │ │ │ └── pin.py
│ │ │ │ ├── recommendations.py
│ │ │ │ ├── scrobble.py
│ │ │ │ ├── search.py
│ │ │ │ ├── shows/
│ │ │ │ │ └── __init__.py
│ │ │ │ ├── sync/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── collection.py
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── mixins.py
│ │ │ │ │ ├── history.py
│ │ │ │ │ ├── playback.py
│ │ │ │ │ ├── ratings.py
│ │ │ │ │ ├── watched.py
│ │ │ │ │ └── watchlist.py
│ │ │ │ └── users/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── lists/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── list_.py
│ │ │ │ └── settings.py
│ │ │ ├── mapper/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── comment.py
│ │ │ │ ├── core/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── list.py
│ │ │ │ ├── list_item.py
│ │ │ │ ├── search.py
│ │ │ │ ├── summary.py
│ │ │ │ └── sync.py
│ │ │ ├── objects/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── comment.py
│ │ │ │ ├── core/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── helpers.py
│ │ │ │ ├── episode.py
│ │ │ │ ├── list/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ └── custom.py
│ │ │ │ ├── media.py
│ │ │ │ ├── movie.py
│ │ │ │ ├── person.py
│ │ │ │ ├── rating.py
│ │ │ │ ├── season.py
│ │ │ │ ├── show.py
│ │ │ │ └── video.py
│ │ │ ├── sphinxext.py
│ │ │ └── version.py
│ │ └── upnpclient/
│ │ ├── __init__.py
│ │ ├── const.py
│ │ ├── errors.py
│ │ ├── marshal.py
│ │ ├── soap.py
│ │ ├── ssdp.py
│ │ ├── upnp.py
│ │ └── util.py
│ ├── locale/
│ │ ├── af_ZA/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ar_SA/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ca_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── cs_CZ/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── da_DK/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── de_DE/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── el_GR/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── en_US/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── es_ES/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── fi_FI/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── fr_FR/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── he_IL/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── hu_HU/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── it_IT/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ja_JP/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ko_KR/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── messages.pot
│ │ ├── nl_NL/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── no_NO/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── pl_PL/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── pt_BR/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── pt_PT/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ro_RO/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── ru_RU/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── sr_SP/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── sv_SE/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── tr_TR/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── uk_UA/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── vi_VN/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ ├── zh_CN/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── messages.mo
│ │ │ └── messages.po
│ │ └── zh_TW/
│ │ └── LC_MESSAGES/
│ │ ├── messages.mo
│ │ └── messages.po
│ ├── metadata_providers/
│ │ ├── __init__.py
│ │ ├── kodi.py
│ │ ├── kodi_12plus.py
│ │ ├── mede8er.py
│ │ ├── mediabrowser.py
│ │ ├── ps3.py
│ │ ├── tivo.py
│ │ └── wdtv.py
│ ├── notification_providers/
│ │ ├── __init__.py
│ │ ├── alexa.py
│ │ ├── boxcar2.py
│ │ ├── discord.py
│ │ ├── emailnotify.py
│ │ ├── emby.py
│ │ ├── freemobile.py
│ │ ├── growl.py
│ │ ├── join.py
│ │ ├── kodi.py
│ │ ├── libnotify.py
│ │ ├── nma.py
│ │ ├── nmj.py
│ │ ├── nmjv2.py
│ │ ├── plex.py
│ │ ├── prowl.py
│ │ ├── pushalot.py
│ │ ├── pushbullet.py
│ │ ├── pushover.py
│ │ ├── pytivo.py
│ │ ├── slack.py
│ │ ├── synoindex.py
│ │ ├── synology.py
│ │ ├── telegram.py
│ │ ├── trakt.py
│ │ ├── tweet.py
│ │ └── twilio_notifer.py
│ ├── search_providers/
│ │ ├── __init__.py
│ │ ├── nzb/
│ │ │ ├── __init__.py
│ │ │ ├── anizb.py
│ │ │ └── binsearch.py
│ │ └── torrent/
│ │ ├── 1337x.py
│ │ ├── __init__.py
│ │ ├── abnormal.py
│ │ ├── alpharatio.py
│ │ ├── bitcannon.py
│ │ ├── btn.py
│ │ ├── danishbits.py
│ │ ├── filelist.py
│ │ ├── gktorrent.py
│ │ ├── hd4free.py
│ │ ├── hdbits.py
│ │ ├── hdspace.py
│ │ ├── hdtorrents.py
│ │ ├── hounddawgs.py
│ │ ├── immortalseed.py
│ │ ├── iptorrents.py
│ │ ├── kat.py
│ │ ├── limetorrents.py
│ │ ├── magnetdl.py
│ │ ├── morethantv.py
│ │ ├── ncore.py
│ │ ├── nebulance.py
│ │ ├── newpct.py
│ │ ├── norbits.py
│ │ ├── nyaatorrents.py
│ │ ├── pretome.py
│ │ ├── scenetime.py
│ │ ├── shazbat.py
│ │ ├── speedcd.py
│ │ ├── thepiratebay.py
│ │ ├── tokyotoshokan.py
│ │ ├── torrentbytes.py
│ │ ├── torrentday.py
│ │ ├── torrentleech.py
│ │ ├── torrentproject.py
│ │ ├── torrentz.py
│ │ ├── tvchaosuk.py
│ │ ├── xthor.py
│ │ └── yggtorrent.py
│ ├── series_providers/
│ │ ├── __init__.py
│ │ ├── cache.py
│ │ ├── exceptions.py
│ │ ├── helpers.py
│ │ └── thetvdb.py
│ ├── subtitles/
│ │ ├── __init__.py
│ │ ├── converters/
│ │ │ ├── __init__.py
│ │ │ └── subscene.py
│ │ ├── providers/
│ │ │ ├── __init__.py
│ │ │ ├── itasa.py
│ │ │ ├── subscene.py
│ │ │ ├── utils.py
│ │ │ └── wizdom.py
│ │ └── refiners/
│ │ ├── __init__.py
│ │ ├── release.py
│ │ └── tv_episode.py
│ └── version.txt
├── src/
│ ├── app.js
│ ├── js/
│ │ └── core.js
│ └── scss/
│ └── core.scss
├── tests/
│ ├── __init__.py
│ └── test_web.py
├── tox.ini
└── webpack.config.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .changelogrc
================================================
{
"app_name": "",
"logo": "https://sickrage.ca/img/logo-stacked.png",
"intro": "",
"branch" : "",
"repo_url": "",
"version_name" : "",
"file": "CHANGELOG.md",
"template": "changelog-template.md",
"sections": [
{
"title": "Bug Fixes",
"grep": "^Fix"
},
{
"title": "Features",
"grep": "^Feat"
},
{
"title": "Documentation",
"grep": "^Docs"
},
{
"title": "Breaking changes",
"grep": "BREAKING"
},
{
"title": "Refactor",
"grep": "^Refactor"
},
{
"title": "Style",
"grep": "^Style"
},
{
"title": "Test",
"grep": "^Test"
},
{
"title": "Chore",
"grep": "^Chore"
},
{
"title": "Branchs merged",
"grep": "^Merge branch"
},
{
"title" : "Pull requests merged",
"grep": "^Merge pull request"
}
]
}
================================================
FILE: .dockerignore
================================================
.git
.gitlab
.gitignore
.gitattributes
.eslintc
**/__pycache__
**/*.py[cod]
src
tests
runscripts
node_modules
dist
manifests
CHANGELOG.md
readme.md
README.txt
crowdin.yaml
MANIFEST.in
package.json
package-lock.json
pre-commit-hook.sh
setup.cfg
setup.py
webpack.config.js
================================================
FILE: .eslintrc
================================================
{
"env": {
"browser": true,
"es6": true,
"node": true,
"jquery": true
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": false
}
},
"parser": "babel-eslint",
"plugins": [],
"extends": "eslint:recommended",
"rules": {
"no-console": "off",
"no-unused-vars": "off"
}
}
================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto
#
# The above will handle all files NOT found below
#
#
## These files are text and should be normalized (Convert crlf => lf)
#
# git config
.gitattributes text
.gitignore text
# Documentation
*.md text
CHANGES text
# Startup script
init.* text
# Various
*.ini text
*.txt text
*.less text
*.h text
*.in text
# Python Source files
*.pxd text
*.py text
*.py3 text
*.pyw text
*.pyx text
# Mako template
*.mako text
# Web file
*.htm text
*.html text
*.css text
*.js text
*.xml text
#
## These files are binary and should be left untouched
#
# Python Binary files
*.db binary
*.p binary
*.pkl binary
*.pyc binary
*.pyd binary
*.pyo binary
# These files are binary and should be left untouched
# (binary is a macro for -text -diff)
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.swf binary
*.gz binary
*.zip binary
*.7z binary
*.ttf binary
*.svg binary
*.woff binary
*.eot binary
*.rar binary
*.dll binary
*.lib
================================================
FILE: .gitignore
================================================
# SR AniDB Files #
######################
/Session.cfg
/sickrage/libs/adba/anime-list.xml
/sickrage/libs/adba/animetitles.xml
# SR GitLab Files #
######################
/.gitlab/
# SR Travis-CI Files #
######################
/.travis.yml
/.travis/
# SR User Related #
######################
*.db*
*.torrent
*.magnet
config.ini
swagger.json
privatekey.pem
autoProcessTV.cfg
/.imdbpie_cache/
/server.crt
/server.key
/sickrage/unrar/
# SR Test Related #
######################
/tests/data/
/.tox/
report.xml
# Compiled Source #
######################
*.py[cod]
# IDE Specific #
######################
*.bak
*.tmp
*.wpr
*.project
*.pydevproject
*.cproject
*.tmproj
*.tmproject
*.sw?
*.ipr
.pypirc
Session.vim
sickrage.egg-info
/.idea
/.ropeproject/*
/.settings/*
/build/
pre-commit-hook.sh
/venv/
/.vagrant/
Vagrantfile
# OS Generated Files #
######################
desktop.ini
ehthumbs.db
Thumbs.db
.Spotlight-V100
/.Trashes
/.directory
/.DS_Store
# Build Files #
######################
.yarn-cache
package-lock.json
/bower_components/
/node_modules/
/src/spritesmith-generated/
/dist/
/sickrage/core/webserver/static/js/core.js.map
/cargo/
================================================
FILE: .gitlab-ci.yml
================================================
stages:
# - review_webpack
# - review_docker
# - review_deploy
# - test
- build
# - sentry
- deploy
- publish
#review:webpack:
# stage: review_webpack
# image:
# name: nikolaik/python-nodejs:python3.7-nodejs10-alpine
# variables:
# NODE_ENV: "development"
# script:
# - apk add --no-cache git gcc libffi-dev python3-dev musl-dev openssl-dev
# - npm install
# - npm run build
# only:
# - merge_requests@SiCKRAGE/sickrage
# cache:
# key: ${CI_COMMIT_REF_SLUG}
# paths:
# - sickrage/core/webserver/static/
#
#review:docker:
# stage: review_docker
# dependencies:
# - review:webpack
# image:
# name: docker:latest
# entrypoint: ["/bin/sh", "-c"]
# variables:
# DOCKER_DRIVER: overlay2
# DOCKER_HOST: tcp://localhost:2375
# DOCKER_TLS_CERTDIR: ""
# services:
# - docker:dind
# script:
# - docker login -u "${CI_REGISTRY_USER}" -p "${CI_JOB_TOKEN}" "${CI_REGISTRY}"
# - docker build --network host -t "${CI_REGISTRY_IMAGE}:latest" .
# - docker tag "${CI_REGISTRY_IMAGE}:latest" "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
# - test ! -z "${CI_COMMIT_TAG}" && docker push "${CI_REGISTRY_IMAGE}:latest"
# - docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
# only:
# - merge_requests@SiCKRAGE/sickrage
# cache:
# key: ${CI_COMMIT_REF_SLUG}
#
#review:deploy:
# stage: review_deploy
# dependencies:
# - review:docker
# image:
# name: lachlanevenson/k8s-kubectl:latest
# entrypoint: ["/bin/sh", "-c"]
# script:
# - kubectl create secret docker-registry gitlab-registry --namespace ${KUBE_NAMESPACE} --docker-server=${CI_REGISTRY} --docker-username=${CI_REGISTRY_USER} --docker-password=${CI_JOB_TOKEN} --docker-email=$GITLAB_USER_EMAIL --dry-run -o json | kubectl apply --namespace ${KUBE_NAMESPACE} -f -
# - sed -i "s~__CI_REGISTRY_IMAGE__~${CI_REGISTRY_IMAGE}~" manifests/deployment.yaml
# - sed -i "s/__VERSION__/${CI_COMMIT_REF_NAME}/" manifests/deployment.yaml manifests/ingress.yaml manifests/service.yaml
# - sed -i "s/__CI_COMMIT_REF_SLUG__/${CI_COMMIT_REF_SLUG}/" manifests/deployment.yaml manifests/ingress.yaml manifests/service.yaml
# - sed -i "s/__CI_ENVIRONMENT_SLUG__/${CI_ENVIRONMENT_SLUG}/" manifests/deployment.yaml manifests/ingress.yaml manifests/service.yaml
# - sed -i "s/__KUBE_NAMESPACE__/${KUBE_NAMESPACE}/" manifests/deployment.yaml manifests/ingress.yaml manifests/service.yaml
# - |
# if kubectl apply -f manifests/deployment.yaml | grep -q unchanged; then
# echo "=> Patching deployment to force image update."
# kubectl patch -f manifests/deployment.yaml -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"ci-last-updated\":\"$(date +'%s')\"}}}}}"
# else
# echo "=> Deployment apply has changed the object, no need to force image update."
# fi
# - kubectl apply -f manifests/service.yaml || true
# - kubectl apply -f manifests/ingress.yaml
# - kubectl rollout status -f manifests/deployment.yaml
# environment:
# name: review/$CI_COMMIT_REF_NAME
# url: https://review.sickrage.ca/$CI_COMMIT_REF_SLUG
# on_stop: review:stop
# only:
# - merge_requests@SiCKRAGE/sickrage
#
#review:stop:
# stage: review_deploy
# image:
# name: lachlanevenson/k8s-kubectl:latest
# entrypoint: ["/bin/sh", "-c"]
# script:
## - wget -O /usr/bin/reg https://github.com/genuinetools/reg/releases/download/v0.13.0/reg-linux-amd64
## - chmod +x /usr/bin/reg
## - reg -r ${CI_REGISTRY} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} rm ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}
# - kubectl delete ing -l ref=${CI_ENVIRONMENT_SLUG}
# - kubectl delete all -l ref=${CI_ENVIRONMENT_SLUG}
# variables:
# GIT_STRATEGY: none
# when: manual
# environment:
# name: review/$CI_COMMIT_REF_NAME
# action: stop
# only:
# - merge_requests@SiCKRAGE/sickrage
#.test_template: &test
# stage: test
# retry: 1
# image:
# name: python:$PYTHON_VERSION
# variables:
# ASYNC_TEST_TIMEOUT: 60
# script:
# - pip install tox
# - tox -e $TOX_ENV
# artifacts:
# when: always
# reports:
# junit: report.xml
# paths:
# - report.xml
# expire_in: 1 week
# except:
# refs:
# - tags
# - triggers
# variables:
# - $CI_COMMIT_BRANCH == "master"
# - $CI_COMMIT_BRANCH == "i10n_develop"
# - $CI_COMMIT_MESSAGE =~ /\[TASK\] Pre-Releasing/
# - $CI_COMMIT_MESSAGE =~ /\[TASK\] Bump/
#
#test_py36:
# <<: *test
# variables:
# TOX_ENV: "py36"
# PYTHON_VERSION: "3.6"
#
#test_py37:
# <<: *test
# variables:
# TOX_ENV: "py37"
# PYTHON_VERSION: "3.7"
#
#test_py38:
# <<: *test
# variables:
# TOX_ENV: "py38"
# PYTHON_VERSION: "3.8"
#
#test_py39:
# <<: *test
# variables:
# TOX_ENV: "py39"
# PYTHON_VERSION: "3.9"
#
#test_py310:
# <<: *test
# variables:
# TOX_ENV: "py310"
# PYTHON_VERSION: "3.10"
build_master:
stage: build
image:
name: nikolaik/python-nodejs:python3.10-nodejs14-alpine
variables:
NODE_ENV: "development"
CARGO_HOME: "$CI_PROJECT_DIR/cargo"
script:
- export PATH="$CARGO_HOME/bin:$PATH"
- apk add --no-cache git gcc libffi-dev python3-dev musl-dev openssl-dev curl unzip
- curl https://sh.rustup.rs -sSf | sh -s -- -y
- git config --global user.email $(git --no-pager show -s --format='%ae' HEAD)
- git config --global user.name $(git --no-pager show -s --format='%an' HEAD)
- pip install -U pip
- pip install bumpversion
- pip install -r requirements-dev.txt
- bumpversion --allow-dirty release package.json sickrage/version.txt sickrage/__init__.py
- RELEASE_VERSION=$(awk -F '"' '/^__version__/ {print $2}' sickrage/__init__.py)
- npx auto-changelog -v $RELEASE_VERSION --hide-credit --package --commit-limit false --ignore-commit-pattern \[TASK\].*
- npm install
- npm run build
- python checksum-generator.py
- git checkout -b release/$RELEASE_VERSION
- git fetch --all
- git add --all
- git commit -m "[TASK] Releasing v$RELEASE_VERSION"
- git checkout master
- git fetch --all
- git merge release/$RELEASE_VERSION
- git tag -a $RELEASE_VERSION -m "Release v$RELEASE_VERSION master"
- git push https://$GITLAB_CI_USER:$GITLAB_CI_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:master --follow-tags
- git checkout develop
- git merge --ff-only release/$RELEASE_VERSION
- bumpversion --allow-dirty patch package.json sickrage/version.txt sickrage/__init__.py
- RELEASE_VERSION=$(awk -F '"' '/^__version__/ {print $2}' sickrage/__init__.py)
- python checksum-generator.py
- git add --all
- git commit -m "[TASK] Bump develop branch to v$RELEASE_VERSION"
- git push https://$GITLAB_CI_USER:$GITLAB_CI_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:develop --follow-tags
when: manual
only:
- /^[0-9.]+dev[0-9]+$/@SiCKRAGE/sickrage
except:
refs:
- branches
- triggers
variables:
- $CI_COMMIT_MESSAGE =~ /\[TASK\] Releasing/
build_develop:
stage: build
retry: 2
image:
name: nikolaik/python-nodejs:python3.10-nodejs14-alpine
variables:
NODE_ENV: "development"
CARGO_HOME: "$CI_PROJECT_DIR/cargo"
script:
- export PATH="$CARGO_HOME/bin:$PATH"
- apk add --no-cache git gcc libffi-dev python3-dev musl-dev openssl-dev curl
- curl https://sh.rustup.rs -sSf | sh -s -- -y
- npm install
- pip install -U pip
- pip install bumpversion
- pip install -r requirements-dev.txt
- bumpversion --allow-dirty dev package.json sickrage/version.txt sickrage/__init__.py
- RELEASE_VERSION=$(awk -F '"' '/^__version__/ {print $2}' sickrage/__init__.py)
- npx auto-changelog -v $RELEASE_VERSION --hide-credit --unreleased --package --commit-limit false --ignore-commit-pattern \[TASK\].*
- npm run build
- python checksum-generator.py
- python setup.py extract_messages
- python setup.py init_catalog -l en_US
- python setup.py compile_catalog
- git config --global user.email $(git --no-pager show -s --format='%ae' HEAD)
- git config --global user.name $(git --no-pager show -s --format='%an' HEAD)
- git add --all
- git commit -m "[TASK] Pre-Releasing v$RELEASE_VERSION"
- git tag -a $RELEASE_VERSION -m "Pre-release v$RELEASE_VERSION"
- git push https://$GITLAB_CI_USER:$GITLAB_CI_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:$CI_COMMIT_REF_NAME --follow-tags
only:
- develop@SiCKRAGE/sickrage
except:
refs:
- tags
- triggers
variables:
- $CI_COMMIT_MESSAGE =~ /\[TASK\] Pre-Releasing/
- $CI_COMMIT_MESSAGE =~ /\[TASK\] Bump/
#sentry:
# stage: sentry
# retry: 2
# image:
# name: getsentry/sentry-cli
# entrypoint: [ "" ]
# script:
# - apk add --no-cache git
# - export SENTRY_URL=$SENTRY_URL
# - export SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
# - export SENTRY_ORG=$SENTRY_ORG
# - export SENTRY_PROJECT=$SENTRY_PROJECT
# - RELEASE_VERSION=$(awk -F '"' '/^__version__/ {print $2}' sickrage/__init__.py)
# - RELEASE_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_REF_NAME | grep origin | sed 's/.*origin\///')
# - sentry-cli releases new --project $SENTRY_PROJECT $RELEASE_VERSION
# - sentry-cli releases set-commits --auto $RELEASE_VERSION
# - sentry-cli releases finalize $RELEASE_VERSION
## - sentry-cli releases deploys $RELEASE_VERSION new -e $RELEASE_BRANCH
# only:
# - /^[0-9.]+$/@SiCKRAGE/sickrage
# - /^[0-9.]+dev[0-9]+$/@SiCKRAGE/sickrage
# except:
# - branches
# - triggers
publish:
stage: publish
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG
only:
- tags
pypi:
stage: deploy
retry: 2
image: python:3.8-alpine3.12
variables:
CARGO_HOME: "$CI_PROJECT_DIR/cargo"
script:
- export PATH="$CARGO_HOME/bin:$PATH"
- apk add --no-cache py-pip gcc libffi-dev python3-dev musl-dev openssl-dev curl
- curl https://sh.rustup.rs -sSf | sh -s -- -y
- pip install -U pip
- pip install -U twine
- sed -i "s/^__install_type__ = [\"']\(.*\)[\"']/__install_type__ = \"pip\"/" sickrage/__init__.py
- python setup.py sdist bdist_wheel
- twine upload dist/*
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
- /^[0-9.]+dev[0-9]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
docker_master:
stage: deploy
trigger:
project: sickrage/sickrage-docker
branch: master
strategy: depend
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
docker_develop:
stage: deploy
trigger:
project: sickrage/sickrage-docker
branch: develop
strategy: depend
only:
- /^[0-9.]+dev[0-9]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
synology_master_dsm6:
stage: deploy
trigger:
project: sickrage/sickrage-synology
branch: master-dsm6
strategy: depend
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
synology_master_dsm7:
stage: deploy
trigger:
project: sickrage/sickrage-synology
branch: master-dsm7
strategy: depend
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
synology_develop_dsm6:
stage: deploy
trigger:
project: sickrage/sickrage-synology
branch: develop-dsm6
strategy: depend
only:
- /^[0-9.]+dev[0-9]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
readynas_master:
stage: deploy
variables:
UPSTREAM_COMMIT_TAG: $CI_COMMIT_TAG
UPSTREAM_PROJECT_NAME: $CI_PROJECT_NAME
UPSTREAM_COMMIT_TAG_MESSAGE: $CI_COMMIT_TAG_MESSAGE
UPSTREAM_PROJECT_ID: $CI_PROJECT_ID
trigger:
project: sickrage/sickrage-readynas
branch: master
strategy: depend
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
qnap_master:
stage: deploy
variables:
UPSTREAM_COMMIT_TAG: $CI_COMMIT_TAG
UPSTREAM_PROJECT_NAME: $CI_PROJECT_NAME
UPSTREAM_COMMIT_TAG_MESSAGE: $CI_COMMIT_TAG_MESSAGE
UPSTREAM_PROJECT_ID: $CI_PROJECT_ID
trigger:
project: sickrage/sickrage-qnap
branch: master
strategy: depend
only:
- /^[0-9.]+$/@SiCKRAGE/sickrage
except:
- branches
- triggers
================================================
FILE: CHANGELOG.md
================================================
### Changelog
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [10.0.71](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.70...10.0.71)
- added 1337x torrent provider [`0f9f562`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0f9f562fe5760e2a0283a2c26c887748251ca8ea)
- removed misc non-working public torrent providers [`35b38ca`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/35b38ca556f92e6013b868e9015efef3aa38dd34)
- disable tests till fixed [`a7dbfce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a7dbfce40ac32cedabb7ef63041836f9ff9cc71a)
- disable sentry in gitlab ci/cd script [`d7b1b2c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d7b1b2c3ad0fd4c9a73c597c52f9f9420952218c)
- set language for tox test env [`815b4d9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/815b4d9e4bdd3255ee2df0cf092fdb1df35db0cb)
- misc updates to plex notification client [`e9a18e7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e9a18e773d76d6ebd3c6ad9c1993ab84163a5cf3)
- disable tests till fixed [`fe2433b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fe2433b73834aac8c0bf4ca4e49c9065fc8a0c54)
#### [10.0.70](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.69...10.0.70)
> 26 September 2022
- added auto-backup feature for app data [`8689eda`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8689eda39d43af14194dcde37210b0d919893079)
- fixed issue with sabnzbd priority checkbox in ui [`97c25ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/97c25bac573cbce637d4144d82efb115668d9689)
- fixed gettext error "Cannot load translation" [`c668cd7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c668cd75a3a40a49a5e2af016c996d9ef293ffb0)
#### [10.0.69](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.68...10.0.69)
> 27 June 2022
- replaced bencode3 requirement with bencode.py [`7fcb140`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7fcb140b07f430744e2d0d455e468f242568062a)
- update renovate.json [`650ccb0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/650ccb0a31a29b21d8bc16b79f174f7680f62df0)
#### [10.0.68](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.67...10.0.68)
> 26 June 2022
- fix sentry stage in CI script [`86c0a9c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/86c0a9cddd729f29eab2d7d6fa5bae5192acb2ed)
- fix sentry stage in CI script [`56d8fcb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/56d8fcb5fe83952509e83fbc01be05f6555db714)
#### [10.0.67](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.66...10.0.67)
> 26 June 2022
- Added renovate.json file [`#42`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/42)
- bumped cryptography dependency [`bd7d884`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bd7d8843af773035acd069b7fc9a76c1b715539a)
- fix startup issue [`73ae82c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/73ae82c4facfa63ef17ca7ce8fa74e10287a388c)
- sync master <-> develop branches [`d463203`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d4632034cb443c5578fe0535e3dd933b15928c55)
- bumped cryptography dependency [`095ccb7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/095ccb7367deca2e0950ecb94a441467590f4848)
- bumped cryptography dependency [`7afab55`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7afab55c8372344c8ead4580565ce4521edff2a7)
- sync master <-> develop branches [`f772e7d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f772e7d24692af52ebf742cc41cf4c41ea151675)
- sync master <-> develop branches [`807f96e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/807f96e3366daa7e7c0435aa8cf36a94f910d856)
#### [10.0.66](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.65...10.0.66)
> 19 June 2022
- New Crowdin updates [`#40`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/40)
- New translations messages.pot (Portuguese, Brazilian) [`f9db8ad`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f9db8ad9791b3bf63a539861dfe337c253629dab)
- New translations messages.pot (Danish) [`3db9bfb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3db9bfbc71ecb619c06df031054faeb14ab93d5e)
- New translations messages.pot (French) [`ddf3baa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ddf3baa529d038b1a475b713c9e8dcf43f43d535)
- New translations messages.pot (Dutch) [`a468f8a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a468f8a37d10c51f6f7fe9a1c245b353c5ccf952)
- New translations messages.pot (Norwegian) [`9743232`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/974323271cc753a59cea90cb0cb3c1bed217d2e4)
- New translations messages.pot (German) [`a0a36df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a0a36df2a2032e43df37d134a4adc55b618f2129)
- New translations messages.pot (Italian) [`76681eb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/76681eb4a51bc5d68bd7be8da5f5b499f4d00d33)
- New translations messages.pot (Vietnamese) [`7b1551a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b1551acdbbb2432b27d983bb27a441751cda9f8)
- New translations messages.pot (Portuguese) [`ed400bf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ed400bf0bb1851cc474cb656bbe764977eb3a804)
- New translations messages.pot (Romanian) [`f8cec42`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f8cec42303f1e5244dbaf147da1eb29eb70f0e8e)
- New translations messages.pot (Catalan) [`02410d1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/02410d1986bf8b8a5f08d336ac92e4b0d18737bc)
- New translations messages.pot (Finnish) [`d66da43`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d66da43dc60e56b358dce8ad49307a8d8593f71a)
- New translations messages.pot (Polish) [`dcac221`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dcac221a4e23871136e6f08c7a4f5e061d161278)
- New translations messages.pot (Hungarian) [`fe95752`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fe95752e4f1dd607934b1a92d01db21384060211)
- New translations messages.pot (Czech) [`ff25e51`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ff25e51981895982e7b4af6fdbb9b4dc3d15dbd7)
- New translations messages.pot (Greek) [`f664d91`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f664d912335bf4e930ca598f5cc1ded4255915e9)
- New translations messages.pot (Hebrew) [`ba03c87`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ba03c87fd5188b80e25dc530b239667e44448ed1)
- New translations messages.pot (Russian) [`1c4c0ed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1c4c0ed4902f0e7c272067a5221afdd401694ee8)
- New translations messages.pot (Ukrainian) [`aaa9093`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aaa9093e8ebfd67be8699c27df346edb0fc9332b)
- New translations messages.pot (Japanese) [`0401d35`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0401d355eeb8ec7304ba8fd535043847ec1231d7)
- Update source file messages.pot [`c882d05`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c882d053aaaae824db073890c4b754f9405267d2)
- Update source file messages.pot [`80de3aa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/80de3aabf8c56cf54c097ad9f0936cf35bae5cf4)
#### [10.0.65](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.64...10.0.65)
> 18 June 2022
- Fixed UnboundLocalError: local variable 'e' referenced before assignment [`15e551e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/15e551ec1d177b666d4cd4c10b0eecd0181b29d5)
- Fixed UnboundLocalError: local variable 'e' referenced before assignment [`6cb1fed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6cb1fed3efed5dcf3cbbc2c5938ae2ca300ddc00)
#### [10.0.64](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.63...10.0.64)
> 17 June 2022
- moved loading of core module to outside try/except block for init app settings [`82955e5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/82955e589d8ba99cf419ff498e4f893fa556e2ec)
- moved loading of core module to outside try/except block for init app settings [`b9e97aa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9e97aa1afa3bcd3146eabf6e4a1657dd3ba7c87)
- added missing dev depend mako to requirements-dev.txt [`1bff2fb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1bff2fbe57edd679cec068caca5066662556108d)
#### [10.0.63](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.62...10.0.63)
> 2 June 2022
- refactored log level of rarbg provider to debug for rarbg api returned errors [`619e864`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/619e8648e4329e3eacad102bcc9e9801e3ebde40)
#### [10.0.62](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.61...10.0.62)
> 9 May 2022
#### [10.0.61](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.60...10.0.61)
> 8 May 2022
- fixed issues with blank URLs being sent to get_image function when populating show/season/episode images [`bda6105`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bda61054c9b8ac46cf036413d83fd4769dfa6ae3)
#### [10.0.60](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.59...10.0.60)
> 8 May 2022
- added in missing mimetype mkv [`956a357`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/956a357160f4377e8ea2b0f86331394c322b71e4)
#### [10.0.59](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.58...10.0.59)
> 6 May 2022
- resolved gettext and fstring issues [`182a6c0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/182a6c0ae9b368a57c566965e6d65d1339786378)
- updated english translations [`2f4b447`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f4b447824dfcb2dfa0e8edd429f1cba9cf6e184)
- added retries for rarbg search provider [`dc46165`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dc4616541ba350e8f3848cc3cbc9250eb8be2d22)
#### [10.0.58](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.57...10.0.58)
> 26 March 2022
- added python version constraints for importlib-metadata in requirements.txt [`df671c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/df671c986d78ff7555acf5836736c754df971c10)
#### [10.0.57](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.56...10.0.57)
> 22 March 2022
#### [10.0.56](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.55...10.0.56)
> 20 March 2022
#### [10.0.55](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.54...10.0.55)
> 20 March 2022
- Bumped babelfish requirement [`2dfe7dd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2dfe7dd41721812859e68b36a9c17c745b517655)
- Bumped lxml [`a750b74`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a750b748c96df323c23d4d04b6741c68ca2bfbfa)
#### [10.0.54](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.53...10.0.54)
> 17 March 2022
- Bumped PyYaml [`81c2da3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/81c2da37b21bd2c4775171394009440a0235f83c)
#### [10.0.53](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.52...10.0.53)
> 16 March 2022
- Bumped beautifulsoup4 [`6de06e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6de06e82382da5d455fa30e1e61033229ffca631)
#### [10.0.52](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.51...10.0.52)
> 6 March 2022
- bumped protobufs to 3.19.4 [`539c633`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/539c633fb04997507130867f79b0d4048cf7561d)
#### [10.0.51](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.50...10.0.51)
> 5 March 2022
#### [10.0.50](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.49...10.0.50)
> 23 January 2022
#### [10.0.49](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.48...10.0.49)
> 22 January 2022
#### [10.0.48](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.47...10.0.48)
> 22 January 2022
#### [10.0.47](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.46...10.0.47)
> 1 January 2022
- Refactored video files to be mime typed by built-in module mimetypes, no longer requires end-user to specify allowed video file extensions [`9f0903d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9f0903deafba49880b6003bacf8fc3f579070ea0)
#### [10.0.46](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.45...10.0.46)
> 2 November 2021
#### [10.0.45](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.44...10.0.45)
> 4 October 2021
- fixed issue with show language now displaying correcting in edit show view [`8a33201`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8a3320101005be49a83e9203a306180e91a128af)
#### [10.0.44](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.43...10.0.44)
> 4 October 2021
#### [10.0.43](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.42...10.0.43)
> 3 October 2021
#### [10.0.42](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.41...10.0.42)
> 3 October 2021
- fixed "Invalid image type series for series provider" [`2825d75`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2825d75d88b44a5afada143d7c18821c386f710d)
#### [10.0.41](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.40...10.0.41)
> 3 October 2021
- cleaned up oauth2 offline token migration code [`f0db748`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f0db74855dc5c3f6e466aee2dc0aa4b5fb4f4a91)
- cleaned up oauth2 offline token migration code [`2f2a708`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f2a7080e171b0852124a96758968de2b05dd812)
- skip search cache results if series provider id is none [`45ef300`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/45ef300f168a1942b2efb61941d13482956e1f53)
- updated package.json [`d42b20d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d42b20d0d49422ac82d70df1d3f4f6d70ecf83b7)
#### [10.0.40](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.39...10.0.40)
> 2 October 2021
- removed import of pycountry, not needed [`9fac4ea`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9fac4ea0e6e2680a9519cf48231f75aeb5c71951)
#### [10.0.39](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.38...10.0.39)
> 2 October 2021
#### [10.0.38](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.37...10.0.38)
> 6 September 2021
#### [10.0.37](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.36...10.0.37)
> 3 September 2021
- Fixed cache database migration issues related to oauth2 and announcements tables [`d239c77`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d239c773feb2eb41459451f1aaba95caf66816eb)
#### [10.0.36](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.35...10.0.36)
> 28 August 2021
#### [10.0.35](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.34...10.0.35)
> 27 August 2021
#### [10.0.34](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.33...10.0.34)
> 27 August 2021
#### [10.0.33](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.32...10.0.33)
> 24 August 2021
#### [10.0.32](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.31...10.0.32)
> 10 August 2021
- fixed issue with network timezones and search provider urls not being updated on first use of app [`ca8aaef`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ca8aaefdd124fd4dc76e596c89ef8c8325ae3504)
- fixed issue with network timezones and search provider urls not being updated on first use of app [`c1ec8ce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c1ec8ce1757759c8622548a3f2c0970d81ee4053)
#### [10.0.31](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.30...10.0.31)
> 9 August 2021
- renamed newznab `key` param to `api_key` [`a5a271b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a5a271b8e523fef61e5d07d9840b5921910e28d1)
#### [10.0.30](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.29...10.0.30)
> 7 August 2021
- fixed amqp bug that caused a restart loop when updating ssl server cert/key [`827fac1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/827fac18e2d7b71334207c4c3387fa8fcfdc9b44)
#### [10.0.29](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.28...10.0.29)
> 6 August 2021
#### [10.0.28](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.27...10.0.28)
> 5 August 2021
- web ssl certificate/key locations and filenames are now hard-coded [`60d6bc3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/60d6bc367c9f94e75ad9bb3ec5ccec3ddaa8da85)
#### [10.0.27](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.26...10.0.27)
> 5 August 2021
- Fixed issues with checksum checks [`0bc9b08`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0bc9b0819fb72b8b0701107f3f36ec10746c1490)
- Fixed issues with checksum checks [`8d8d12e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8d8d12e37c5dff3f0d5d5fc7bb5fb4c05b18e881)
#### [10.0.26](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.25...10.0.26)
> 3 August 2021
- Refactored a core log entry from info to debug [`f7feab5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f7feab5c1ddd23d11ec411f75c90a307262db544)
#### [10.0.25](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.24...10.0.25)
> 3 August 2021
- Fixed ValueError sickrage.core.searchers.backlog_searcher in _get_wanted [`1633328`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1633328e43dede0070c144748f5b2dafa10eeffd)
#### [10.0.24](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.23...10.0.24)
> 2 August 2021
#### [10.0.23](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.22...10.0.23)
> 1 August 2021
- Refactored web handlers to return data and call tornado finish on resp from run_async method [`a7bffda`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a7bffda58098baab6b9392bef05ff92fbe43690c)
- Refactored web handlers to return data and call tornado finish on resp from run_async method [`7635d83`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7635d83894ecdaa8b72f5f3e3918e24eff8aa37e)
- Refactored web handlers to return data and call tornado finish on resp from run_async method [`98396dc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/98396dc7f97b2b355fee8e9271b418a65a74f370)
#### [10.0.22](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.21...10.0.22)
> 1 August 2021
- Moved websocket queue check function to webserver class [`18042f3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/18042f35c632962689f8854d24c09422ceaf666c)
#### [10.0.21](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.20...10.0.21)
> 1 August 2021
#### [10.0.20](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.19...10.0.20)
> 31 July 2021
#### [10.0.19](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.18...10.0.19)
> 30 July 2021
#### [10.0.18](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.17...10.0.18)
> 29 July 2021
#### [10.0.17](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.16...10.0.17)
> 29 July 2021
#### [10.0.16](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.15...10.0.16)
> 29 July 2021
#### [10.0.15](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.14...10.0.15)
> 28 July 2021
#### [10.0.14](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.13...10.0.14)
> 28 July 2021
- Refactored app updating for source [`9d7a3f8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9d7a3f8bf832152bdfed6eb10f71c7d18d5f7c10)
#### [10.0.13](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.12...10.0.13)
> 28 July 2021
#### [10.0.12](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.11...10.0.12)
> 28 July 2021
- Refactored episode slug to sXXeXX [`993479f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/993479fd84e3c97cc172efaf5dd5cfa395dbce3a)
- Misc fixes for series api v2 [`a86cc48`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a86cc485efd6072954a658f9741bdbfff90414c8)
- Refactored multi-project pipeline strategy to depend for CI script [`776e1f6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/776e1f6e7c5dec268956e8da162982185c60e807)
- Fixed `bad substitution` error in gitlab CI script [`bd8c393`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bd8c3932237246fef5007687fc4158ded90b840e)
- Refactored gitlab CI script [`6df07cc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6df07ccfd97c99da3746509c705a67471a327d13)
- Fixed git origin URL [`5d50c4f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5d50c4fa53a2e639190e8df358c8a5780b237c56)
#### [10.0.11](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.10...10.0.11)
> 11 March 2021
- Fixed issue with show refresh tasks getting stuck due to missing dependant task being cleared prematurely [`4ddbd58`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4ddbd581468c98eed8157c4fdd23fe33a9f50b4b)
- Refactred "Malformed air date" warnings to debug messages during loading data from series providers for episodes [`cb5551d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cb5551dc037d330b3dd796babb025dcc9691bc3d)
#### [10.0.10](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.9...10.0.10)
> 21 February 2021
- Fixed issues with mass episode status editing [`3e21025`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3e21025960645f480f6b366f9fd6d6603c874e44)
- Fixed issues with mass editing show search format and default episode status [`34e22ae`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/34e22ae4b3738a45eec384df72936e740bd55fcf)
#### [10.0.9](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.8...10.0.9)
> 8 February 2021
- Performed webpack [`03897ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/03897baf59f8bbf2f73449905b5c1de93be821d7)
- Fixed "Multiple rows were found for one_or_none()" exception when getting json object of episode object [`5761806`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5761806f6896148c6250c236faa489ba847258fc)
- Fixed issue with deploy of PyPi image [`18c3cbf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/18c3cbf43db10e234c3d544c0854abf614dd3ef2)
- Updated CI to use python 3.9 [`58ab668`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/58ab668fb584cc95a7534c83f3faa33be1e2308a)
#### [10.0.8](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.7...10.0.8)
> 26 January 2021
- Removed ability to set web host from settings in UI, constrained to only setting from cli. [`c17dc55`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c17dc551de4d6df4f4b20b96fb3d94bba086966e)
- Removed IRC from main layout [`87a989d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/87a989dc9f05308ea9fd6c23aad53d0249219624)
- Fixed issue with provider options not appearing in settings [`256e1df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/256e1df2636a8810cfa85120ce323f5967a7e4da)
- Replaced get_lan_ip with get_internal_ip [`fa55c2c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fa55c2c97f156755ece800e46632bb7feb36977b)
- Fixed `invalid literal for int() with base 10` when attempting to mass edit default episode statuses [`a7dd0d7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a7dd0d7d8999ca6554a33dc5d4b3a3b0c4ca2033)
#### [10.0.7](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.6...10.0.7)
> 15 January 2021
#### [10.0.6](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.5...10.0.6)
> 14 January 2021
- Fixed issue with launching browser after app starts up via scheduler [`f554180`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f5541800645d5b78fb4723a9a194269fde283378)
#### [10.0.5](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.4...10.0.5)
> 14 January 2021
- Minor changes to CI script [`b9dd99c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9dd99c21200368d4a1a11eb663cd1de5beeb044)
#### [10.0.4](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.3...10.0.4)
> 14 January 2021
- Fixed issue with searching for new shows [`4d571f8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d571f8636feb1269705fc829721ac1fc7ef5860)
- Implemented abstract class in web base handler [`e9812be`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e9812be71593a35b0987e30ec7135f51b98afcae)
- Fixed issues with cascade database deletions [`4e8421c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4e8421c376baedd4c2e751b435916e1e71fa85de)
- Decreased noise of saving config during auth methods [`5322d50`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5322d507dd26c57d7ccb701241ec7380d56adcc0)
- Refactored CI script to update changelog in separate stage [`18f98b0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/18f98b04ac7ca43867752c5c6b1a2ccce72c783d)
- Fixed CI script and merge issues between develop and master branches [`149d52e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/149d52ee513080b794396b5e065db71ad17dff90)
- Moved changelog creation to happen in release branch [`506bac0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/506bac022497ac9c0d1c28f24dea5df2796931b4)
- Fixed unterminated string in CI script [`4ab3dbd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4ab3dbd401afe04015c95eb27eae503b892dd9b1)
#### [10.0.3](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.2...10.0.3)
> 12 January 2021
- Database code for migrating py2 codernitydb files is now depreciated and removed [`88b4cdf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/88b4cdff8eb95937bcbd013bc182245e9b3445ad)
- Further work done to subtitle refiners [`a25c7df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a25c7df114ba831972aae9d5d9d58aa91dd3d258)
- When updating sub_id, mark config database dirty before saving [`db592df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/db592df88a08ec26eeb1242190928ae5647d729d)
- Misc cleanup [`b162bac`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b162bac49b5a12a99fbdfd4ae28d280dfadf81d1)
- Removed left over code from testing [`619a0b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/619a0b2e60101c818e7e69a2debcdc9ed229a94f)
- During config file migration to config database, initial user is granted superuser permissions now [`c484e5e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c484e5e387cf77c288c56525084c2aa564f1ed5e)
#### [10.0.2](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.1...10.0.2)
> 11 January 2021
- Fixed issue with multi-episode naming [`dad674a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dad674ace8c9b04bffa042ea2ef289c37c10f1b3)
- Fixed issue with failed snatched episodes [`f5f44bc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f5f44bc47fd6105ed28f07a99322b3da1d00a207)
- Fixed issue with sorting poster view by name [`6c5adf0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6c5adf0d402ce514df99c012536241730806f5c1)
#### [10.0.1](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/10.0.0...10.0.1)
> 11 January 2021
- Fixed issue with database upgrades, refactored database initialization to happen after migrations and upgrades are performed [`bcd24c3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bcd24c38683de82c3fbf733c3a99ce3761a28cff)
### [10.0.0](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.223...10.0.0)
> 11 January 2021
- Config settings are now stored and encrypted into a sqlite database [`acd1757`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/acd175780cb5d948eb3fba7ceb6092e9c8c8b33a)
- Refactored config and how it handles database sessions [`574f983`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/574f983270aae904224d550e22145c3bd4f26c8e)
- Fixed issue with migration of config.ini to config.db [`3b56918`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3b56918a61555212757a10b91573e3934f4e7b38)
- Refactored to re-initialize database after alembic upgrades [`a314767`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a31476725d342adb03c1a0d9e469a8c6ec5a7b80)
- Fixed issue with setting default quality options for new/existing shows [`439c6f9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/439c6f94c4d1f2eed57f1bcdd55faa65374b4a6f)
- Fixed issue with migration of config.ini to config.db [`f05bd79`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f05bd79b921e1fcbde971822cadb81c400d2e8fd)
- Fixed issue with default auth method being chosen during config migration [`fedbe48`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fedbe48c2880aedd89d6c9d91c94e29ca1864061)
- Fixed issue with configuration migration [`5780cfa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5780cfa0b59bfd7269e6b01b55817ec709818a24)
- Refactored task action_id property to action [`c51340c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c51340c69b6b3c878b729f02bcb22c86fbb2c314)
- Refactored web server write_error function to log issues using error handler [`4edc0d8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4edc0d8364e6c2218a3045029387f0426796b815)
- Refactored web handler for getting manual search statuses [`4f211c0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4f211c0875a3cba76ec7bba9cf996916cc34ae5a)
- Reverted previous changes [`f423954`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f423954f9e008864ef234b21ecffccc6c2e08df2)
- Refactored requirements to be installed one-by-one during version updates [`4c33752`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4c3375252f088c40e7053434b006c4fe7918f5a7)
- Fixed issue with quicksearch and episodes [`770cddb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/770cddb5d03d7cfc2100166f431cf3bfe05514ec)
- Fixed issue with testing torrent and nzb search clients [`ae57c6d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae57c6d9e8f92d8ef355ba7c6866f4d51cd4cfe2)
- Fixed issue with episode status manage view [`9922419`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/992241900c499c5c30a20623399f6a225e3a90c2)
- Fixed stage names for CI script [`b416eaa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b416eaa15d7914c5c05cfba8b86e4f90f0d1fc9c)
- Fixed issue with provider cache and series provider id enum's [`063405b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/063405bde90ba81435a29da297b9fac1bc932d44)
- Fixed issue with CI script [`7822c90`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7822c90d6ad6d89d07c05a0de707c205a8dcf657)
- Fixed issues with mapped series provider id's to series id's [`1c3481f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1c3481ff31dede64a8b1d542bc245d368d0eb7ac)
- Fixed issue with adding new show using custom quality settings [`d206d05`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d206d05746c2a60de77c3d3f9df6cc5650fc684a)
- Fixed issue with switching home page layout [`0303d22`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0303d22c3c47949765d6f550c4d3b19fbd0654e6)
- Fixed issue with schedule view and sorting [`81493a9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/81493a9f21d296f0e92f8071dc134c5b4e174d8e)
- Fixed issue with manage backlog overview page and overview classes [`73f1042`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/73f1042db9e5d083e61945625c245241973d161e)
- Fixed issues with adding shows from IMDb [`b3215de`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b3215debb23a1789f340a2613e7c6c486b91e2ac)
- Fixed issues with switch-over from sqlalchemy-migrate to alembic migration engine [`f7ad701`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f7ad70160e47e0a9e2a70a50920533066828d44f)
- Fixed issues with incorrect separator being used for subtitle services enabled and subtitle extra scripts [`a5350d0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a5350d0fee90c58ef4c7b594c27f9f86e2b4dc5d)
- Fixed issue with specials not being retrieved from series providers [`7b3ae92`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b3ae9233630ab11d5d12d99bc8c2528d8b2b113)
- Fixed issue with main home view and not selecting a layout choice after looking at layout choices causing a redirect to undefined [`b656661`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b65666128645106afc41e122ef5e273f42c3c093)
- Fixed incorrect passed startup command for web host setting [`2922632`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/292263287e5024faed12a1dd9957e3a67213081b)
- Fixed issue with migration of config.ini to config.db [`471da17`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/471da170f18995c7fb3d0affc98cf91cafd28c5a)
- Commented out the removal of sub_id for this present moment till further code corrections are made [`4d14a72`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d14a72e392e0989194e2858f39cdaf1103be24a)
- Performed webpack [`ac6cce3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ac6cce38cd0d6cb40b8e228b1d4899d4555021f5)
- Fixed issue with indexer caching [`992f519`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/992f51990a88f6c1764ca1b959da815e68999fc6)
- Fixed issue with searching series providers for series id by term during name parsing [`b84a57f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b84a57f1b58031503216c3bf631b6d28bd2d82b4)
- Fixed issue with being able to view debug logs [`474763e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/474763eb624ca164c94cdfb3478c2c4173d2bf3a)
- Prevent null value when adding last_xem_refresh via alembic [`e738401`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e73840191a6ac0b770284da204371817eeb047ad)
- Fixed issue with updating commit tag [`835d447`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/835d4473f62dbd95ab2670e34cbe159c87b8e72d)
- Fixed issue with forcing backlog for specific shows and passing of the series provider ID [`5f4ad57`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5f4ad5752d4192d2ddc6bcca70e179fd6c21ebfb)
- Bumped version in setup.cfg to 10.0.0.dev1 [`f4dc007`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f4dc0078adddbff6d97e5e54cd32a27b894c0a83)
- Bumped version is package.json to 10.0.0.dev1 [`606c40b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/606c40b3a5fb0dcf0388ac900ab60fc80232d393)
- Major version bump to v10.0.0 [`3131c33`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3131c33aa2067f4af610b796ff33ef5db17a7ba6)
- Fixed "has no property 'showi'" [`d0c9652`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d0c9652a6e2ca40a4661801c9b7e8a5ea348dda8)
- Fixed issue #525 - removal of shows not taking due to database commit not being executed [`d615ca6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d615ca6cfa27353c8d0c99037cfcc452a85b4fa1)
- Updated requirements.txt [`143d3b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/143d3b27e86c0a4ca981a221084f4b285e8a0b3e)
- Fixed issues with installation of requirements.txt during version updates [`cb0e3ee`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cb0e3ee825ddaea5fa3f230899d2363d1d5e2d04)
#### [9.4.223](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.222...9.4.223)
> 7 September 2020
#### [9.4.222](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.221...9.4.222)
> 31 August 2020
- Fixed issue with scene_season being non-integer [`eb54e81`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eb54e81cd1b2c3c3a715ec9d20ee4d07e50892c7)
- Updated requirements.txt [`735f900`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/735f9005bcf3fe90c342e53f7ac55cd124aa4b8f)
#### [9.4.221](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.220...9.4.221)
> 19 August 2020
- Fixed issue shutting down scheduler causing an exception which broke restart sequence [`afc00d1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/afc00d10f9641ecd158b9be1ae8b05a6e26628ea)
#### [9.4.220](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.219...9.4.220)
> 19 August 2020
- Fixed issue with duplicate scene absolute numbering, old code removed. [`0c0c07d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0c0c07d3b1bad4977201aa6fe07adb008c19e479)
- Fixed issue with provider cookie verifications [`78f9f15`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/78f9f158f01345a189962e496c8a76aa67a3ea4b)
- Fixed issues with provider results containing both an airdate and season/episode in them being matched as standard to be matched as scene_date_format instead [`2d2906e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2d2906efb5be13b8c3f1cdfaa794262c28807142)
#### [9.4.219](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.218...9.4.219)
> 12 August 2020
- Commented out automatic requirements installation at app startup, needs more work. [`fa085ad`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fa085ad180c6aa5486389fa89b42bb947e1e61bd)
- Refactored requirements.txt to be conditional on python version [`4658183`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/46581833a7611e398c8fae326b0bf18ebdd471c4)
- Downgraded feedparser to v5.2.1 in requirements.txt [`35029d3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/35029d32c2c7965157ad6caaf84aa5ea08219abd)
- Refactored requirements install to use --no-deps, all depends are located in requirements.txt [`69276c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/69276c9c13aaacef3aa6dbf1078dffda5fa0302c)
- Refactored database restores to use bulk inserts for data, performance fix. [`46496c6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/46496c6e35b617bd91eede4de163e82ee110d0d4)
- Misc cleanup of gitlab ci/cd script [`90b3a67`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/90b3a6721ba7147075b93ea576ca3f2197310e60)
#### [9.4.218](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.217...9.4.218)
> 9 August 2020
- Fixed issue with v16 database migration using multiple where clauses [`135dea3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/135dea3c4cb176fefb891a8d5023731753c6810a)
#### [9.4.217](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.216...9.4.217)
> 9 August 2020
- Fixed typo in database migration script [`b821ed0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b821ed0df6f59c1cf978a0a7fdd5e829620d3c5d)
#### [9.4.216](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.215...9.4.216)
> 9 August 2020
- Refactored database backup/restore code [`96cdca4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/96cdca42ae73a78ad4274918cd935b93e1995e36)
- Misc code improvements for Plex notifier [`6c346a8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6c346a8cbedbe44e0985e3b83b7f25d30d570661)
- Misc code improvements for Plex notifier [`09466b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/09466b1abe83cae8e45d0652194808684cff3845)
- Misc corrections [`28e7ba8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/28e7ba8264e898c59ae5e4ec6ece17c5608231ea)
#### [9.4.215](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.214...9.4.215)
> 2 August 2020
#### [9.4.214](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.213...9.4.214)
> 1 August 2020
- Fixed issues with md5 checksum hasher to be compatible with python 3.5+ [`dca0752`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dca075283e27b836146de68a5da5f91d0664a421)
- Fixed issue with episodes being prematurely saved to database [`230e4a1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/230e4a11b46145fc881186a3ed574b2437d67350)
- Fixed path issue with cleanup function for startup [`64456b5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/64456b54aaa6ab4afca20a9448586545e1f0af7d)
- Refactored Dockerfile [`d546ce0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d546ce01a9b7509bfe381f5a3adc29f3d9008fe8)
- Fixed issue when episode location is null and attempting to load from .nfo file [`a37348c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a37348c6abe356742f1e50a647ed90ae1fcdca93)
- Fixed issue with removal of unwanted files and pathlib [`ce4fe00`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ce4fe0087ee88d752b3362950fc5b62f2630fe0c)
- Disabled cleanup *temp* [`083c97d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/083c97d2b7ff22344f62ea9136191b2e86195f2e)
#### [9.4.213](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.212...9.4.213)
> 29 July 2020
- Refactored server status to show task status value string [`3d28569`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3d2856923182324aee438ddeb164f56e40976dd6)
#### [9.4.212](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.211...9.4.212)
> 28 July 2020
- Fixed #484 - Mass Update Error caused by incorrectly handling show search formats as a checkbox value when it should be a integer [`#484`](https://git.sickrage.ca/SiCKRAGE/sickrage/issues/484)
- Refreshed package.json [`933467a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/933467a2eeb1a2dab6979884e2a83faedf7fb16d)
- Refactored exception handling for search providers [`0ab3a37`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0ab3a3777c4210ebba5c2e10baabcbc4caf89015)
- Refactored web handlers to run in executor in the background, this will improve performance of UI tasks that may be blocking [`6e639c3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6e639c3b07bc3a50703364a87d4aab5434f1e7ce)
- Refactored mako templates to be looked up and stored into template dict attached to tornado app settings [`60ac65d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/60ac65d283639628a9a2ebb45f246ee4b78e3f97)
- Refactored queue system and how it handles tasks [`4c39a2d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4c39a2d4baa6cf2577e9c1387f87ee182d9661b0)
- Refactored add_episodes_to_trakt_watch_list method [`1b9ce09`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1b9ce09f3aead661c1503712836518d21f0e0f45)
- Wrapped all apscheduler tasks in try/finally clause to control running state correctly [`fccfa0e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fccfa0ef96269fab2c94a586018b5dee53854b17)
- Refactored web server to run on a separate thread instead of the main thread [`502207a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/502207ad80a332f7a98aef894c91c40b924239d6)
- Refactored fifo list to collections deque in search queue class [`c237843`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c2378437376729f0d96accc9ee80d4ec0e659827)
- Refactored scheduled jobs to be async and execute on ioloop in their own thread [`64ecdbe`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/64ecdbeb0e988d7a6aae6a17ad539d0a8181cae8)
- Refactored usage of IOLoop by removing const io_loop from core and using IOLoop.current() calls instead [`6046334`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6046334370568652a611ef7b62cbfb8820b632b3)
- Delete item after queue worker function finishes [`5174141`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/51741412824d200b0a40944eaeefcdc565a87743)
- Fixed multi-thread issue with quicksearch [`a34c39d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a34c39d3eff469e3b29ed0a868c368f305ca523d)
- Misc exception handling fixes for indexers [`971e8e2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/971e8e28a6ce41bc12622af0be05dd17bcce8aa4)
- Feature added to view logs in realtime from log view [`0865b23`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0865b2326717524730f3c9ebec145684c019f7b0)
- Chore - Upgraded javascript modules for building core web functions [`9869925`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9869925269cf8f09830f89dd4b99e21e02dc40e5)
- Refactored queue system to process one queue item at a time [`2a47a79`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2a47a795a371afb3b120b20fcfa74645086b1cc3)
- Refactored `settings->general->advanced->git settings` buttons [`af28199`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/af28199b61d4e59f4ec216386f13242d0f633061)
- Pinned rarfile lib to v3.1 and refactored code for testing unrar compatibility [`1809d6b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1809d6b8872fa4002c8905e0730fd4b1ea8c4508)
- Refactored deluge and transmission web session handling [`71cc101`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/71cc1012434f475c89bf021341c24f09607d5093)
- Refactored how requirements.txt is installed/upgraded, added code to upgrade PIP [`3d65769`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3d657699824b79c86d303951b4f76b38c9cf8d4c)
- Refactored app_id to server_id [`a928edb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a928edb06b436ca9495f75ae65a467aeb10f3624)
- Optimized config.py imports [`6b08659`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6b08659cae1a43f2e1c85b7e0364be4df36d9308)
- Refactored web server to start right after config is loaded [`dff5d2f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dff5d2ff8a302a6f20d13afe699ac787c9289759)
- Refactored queue system to use while loop instead of apscheduler [`3173352`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/31733525322481ef3dd04adae0566e1e0cb6511b)
- Reverted changes to gitlab ci/cd script [`abfc264`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/abfc264e75bd010231604d7d07fc802ad161b82c)
- Refactored gitlab ci/cd script [`438808f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/438808f40c0ca3f7f8bc080ff47602ffa73fc248)
- Refactored qbittorrent client web session handling [`db74410`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/db7441024f16979bd5f04efc6a53c38479c49715)
- Fixed issue with linking/unlinking sickrage account to sickrage api [`f62ed72`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f62ed7227db3bf5673e4856e0280a8b93154aaf1)
- Refactored link/unlink sickrage account to sickrage api button to hide/show based on sickrage api enable/disable toggle [`5cc3a68`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5cc3a68987096468deadfeb9912171812b963c40)
- Fixed issue with post-processing [`8758c4a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8758c4a4cb150c2b53255f4956bfd8e52caef3fb)
- Refactored putio client web session handling [`2f5c9d5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f5c9d560fd7953ca16a8344328ecaec67e83195)
- Refactored rss cache updater to fire task in ioloop executor [`5c616de`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5c616de51cf41f10667f5b7ee8e32c6068a4ac73)
- Refactored how testing auth for clients is handled [`1fc9071`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1fc907129e282b50ef9db5514708b17c27ad88e4)
- Fixed issues with app shutdown and restarts [`1325174`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1325174caa77fcc0443b24cec7223301029dd128)
- Fixed issue with task priorities and enum [`e49df65`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e49df65d510814533b83e886f2365beaf35dd1f3)
- Refactored check to see if sickrage account is linked to sickrage api [`458b9f8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/458b9f8019829aa4d7fad9b8d3d05891a27b126f)
- Fixed issue `Cannot read property 'addEventListener' of null` [`1463221`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1463221f811de8e991f27865be96bf7e7b652e8a)
- Refactored how recent shows are stored [`1dd1b7f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1dd1b7f6edf7f46395fcdf79b922140e2fee9cd2)
- Updated requirements.txt [`2e62168`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2e6216825cc0e9e3b332ba02a5bd8f8ebf64ea96)
- Refactored mvgroup regex to enforce `series` needing to proceed after show name and before season number [`0a7e81a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0a7e81ad6ed66bef0c3a964357b5e8b758602b37)
- Refactored download station client web session handling [`1c5c3aa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1c5c3aa2ba9f0c4cc3c0dc1af3964645ce7e6df6)
- Fixed issue with search clients and urls [`d31d933`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d31d933766868119a6dfca5000b1ff81dc72fe2b)
- Refactored web username and password to be required to save settings when enabling local auth [`2275ec6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2275ec6e49af3442952eaab08725ded67e446f76)
- Refactored how scheduled jobs are forced to run [`fbcb4b0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fbcb4b0a8ad145d4b409a964dc240154f93fdd69)
- Fixed issue with retrieving scene exception names [`dd24e5a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dd24e5a126ccaed30a5d96b6acf728f3e539e9f0)
- Misc fixes [`ab3323b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ab3323b4e1b7c2b12a6e28b99e5bcbffefac2b22)
- Refactored error logging of failed queue tasks to include task name instead of just queue name [`509aeae`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/509aeaee86ad8fd59022f6801e8319dfa6f3405c)
- Fixed multi-thread issue with quicksearch [`148e067`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/148e0671a11a7b422155bbfa924d939eb25779ca)
- Refactored popup window only for when enabling sickrage api and not when disabling it [`90ea945`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/90ea9457e7444706d5958a52f8fdcb0afd1cccfc)
- Refactored mlnet client web session handling [`afd84ce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/afd84cea45231e53f43414897a91b7afe5828ca3)
- Refactored sickrage account <> sickrage api handler to logout existing auth tokens before creating new ones [`939eeb1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/939eeb16f620bf11e7eaa879ee17112300459afc)
- Refactored gitlab ci/cd to push only annotated tags with commits [`c5737a5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c5737a557dab2aadc6843194fefef4d28a397008)
- Refactored how web session class performs retries on connection errors [`c1352ac`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c1352ac639de15067e482e141ea07fef367c398f)
- Refactored show season poster and banner image download functions to be more descriptive when failing to find a download [`2f47c45`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f47c458e4cfd0986f9a246cdf70a9e882b4d81d)
- Misc formatting fix for backlog searches [`210e722`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/210e7227ee61b5198c9d20218fac3788aa7c0e52)
- Fixed comparisons in scan_subtitle_languages [`32723c5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/32723c58c843b91c0acd99a636e31ac8307bca60)
- Fixed error message from hachoir package on import [`b8c55a6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b8c55a645136b2cd295d770364ccb637a313598c)
- Refactored queue system shutdown method [`fe042f9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fe042f9b11272ddfb39879b0a59de59503bed3d8)
- Refactored display show view, merged right and left legend columns into one column [`18b7d47`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/18b7d471d3c05961f0df9a8a5e3a83949dc78677)
- Fixed shutdown sequence [`016f7e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/016f7e883558f3e259aa3f0e8ba45f9e932e03a0)
- Fixed a few typos in template_name's [`7fd4431`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7fd4431e80e657be897252449b2da2cd6636d149)
- Replaced variable in gitlab-cicd script [`8f31e82`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8f31e82ac3f0b1f320ee5764c2523717aca04fe0)
- Refactored ip whitelist helper [`1a87117`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1a8711755744893e4b7c61afe8c2c53f7a2c19ae)
- Fixed `Unsupported header value None` when attempting to link sickrage account to sickrage api [`4e9d343`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4e9d3435d14257151bce3287b4f25641a0d6a848)
- Fixed reference to scheduler from core [`f9e6b25`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f9e6b255eae95d5be54b110c3a6512305ec06dc4)
- Refactored `settings->general->interface->api` generate button [`d473f39`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d473f39a1d86efc645dcf660dad66184ee3acf7e)
- Misc import cleanup [`a6eb943`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a6eb94382e641ed34b1e7aba750a92a6ff96ce3b)
- Fixed issue with shutting down post-processor queue during updates. [`13ddc68`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/13ddc68cf9ff14583c5769108064720444c3c981)
- Fixed error handling for when a queued task fails [`9a9019c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9a9019cd50e8a76a5553e76b5b9a867dcceb3141)
- Fixed typo that was preventing scene exception lookups [`5104e13`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5104e1382c4e6bf59c9786786ba4b7345ff8fd5b)
- Placed a 30s timeout on sickrage api and sickrage auth health checks [`f3e6f42`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3e6f42c08108f4d4c644c1b1c95db1a9985e735)
- Fixed issue with adding shows off IMDb [`617e12d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/617e12d17c17ab0287043277d808185fab3dcb91)
- Removed debug logging from current_user web base method [`9e2f78c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9e2f78cfc41155d140d1cd4719f555b40a4fe341)
- Refactored search formats collection string [`aa0e659`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aa0e65962a4537009fa9753239b4b0d950537d68)
- Refactored base render function to use write instead of finish, resolves a performance issue [`fafc42a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fafc42aa13ea71e31831e68a71391e66eed1995d)
- Refactored name of function in auto_postprocessor.py from run to task [`6ef74b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6ef74b10569dd25046d57f18827e4a33671b5a80)
- Refactored mvgroup regex to be stricter [`3db8944`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3db8944c4de3c48a64532b1e52ff7d7209464f9d)
- Fixed issue with displaying a show when no imdb info is available [`c8a763b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c8a763bfa2b6f0e2431ccdec488d95a2709ee52d)
- Fixed passing of args to thread when creating thread for queue class task [`5ff5b1e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5ff5b1e91686fac3c3b5402ad2b1bd4af62710af)
- Removed async from queue run function [`34e95c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/34e95c93435cc466dfbcc8b493e9323ceebcf92d)
- Fixed missing start of thread for queue class [`4350619`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4350619c6e64a56a8a6596cf910791b8215b6af5)
- Fixed typo [`907f445`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/907f44547e6619f9a61541c96648d9c7187d2f1d)
- Renabled mako template caching [`8430679`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/843067923593bc326328cda325c3060b198e7ed5)
- Refactored ip whitelist helper and subnet checking [`741587f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/741587fb1c4bd7087afdf9c5ad76486e738e6aac)
- Refactored ip whitelist helper [`b29f00b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b29f00bcff0c3323f83af3affc9d492a02da16bf)
- Fixed issue with repeating debug message for whitelisted helper function [`484919d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/484919d7efe8288fa7f7f891761a93f05d19dca6)
- Fixed issue with unregistering app_id when app_id is not set [`7a4d36b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7a4d36b0f29850711b88ff72befa5d36cb720294)
- Fixed issue with enabling sickrage api when auth token exists [`5a82893`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5a828937d7bcbeb98ef42fabd4926bcce008e78a)
- Fixed issue #486 - scene_default reference removed from add existing shows code, added search_format_default to be passed when adding existing shows [`9b9e717`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9b9e717ec4d45a62bfdb9a16cf781ac204a10b71)
- Fixed issue with passing web root to Docker [`57444d9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57444d96d9ae32b58fad872f2cb7dc6e0e72ad1c)
- Fixed missing column headers for display show view [`21dd1f0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/21dd1f0e17bd28110cb2f7cd22c0755cd242d35b)
- Updated gktorrent provider URL [`d20520b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d20520bc71979f3e5b82aa6483ea66cbd3465ad1)
- Refactored auto-postprocessing task to be async [`f495891`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f49589158c79cb2ddbc30d7927e07d64dcb21dc4)
#### [9.4.211](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.210...9.4.211)
> 20 April 2020
- Refactored timezone updater to perform better when updating using bulk database transactions [`a8e4896`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a8e48962dec71914c03ea663de5b799ed58da7dd)
- Reverted small change [`e8f116e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e8f116ee99d2f67ddbe82f0ac96f9e370849c043)
#### [9.4.210](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.209...9.4.210)
> 20 April 2020
#### [9.4.209](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.208...9.4.209)
> 20 April 2020
- Fixed typo in nyaatorrents provider code [`2f710ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f710baf844b9fa856e7db33afba620a16c0f28b)
- Fixed name 'ModuleNotFoundError' is not defined error for older Python 3 versions [`53746c7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/53746c73a1078e2b26760ef50c05d34858d5fd1a)
- Refactored gitlab-ci script to remove changelog create when building and deploying master branch [`5bd3790`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5bd3790e5c1130c88004ba73119c7df00a918352)
#### [9.4.208](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.207...9.4.208)
> 20 April 2020
- Removed old changelog.md [`71816be`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/71816be1cd6b7c7bead63eb3565e8b91b968cb09)
- Refactored changelog creation [`022e36d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/022e36d344ef0f0706acd7b363db1c634107a583)
- Replaced cfscrape with cloudcraper in requirements [`e4695af`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e4695affcedc66aabeeb0aabee2e53654db823e6)
- Fixed `Unknown format code 'd' for object of type 'str'` [`2eac392`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2eac39209671a37e47f83957184719cfa9ff8974)
- Refactored git-changelog to use a template [`2d6ce4b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2d6ce4b2679730aed40b8585d232296966529d8c)
- Refactored ErrorViewer and WarningViewer classes to use collections deque with a max size of 100 to prevent memory errors. [`ec25dfe`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ec25dfed73b8115375529793bd590f181d7c6b05)
- Refactored application startup to install requirements via pip if ModuleNotFound exception is thrown. [`3bddcc2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3bddcc22384ec23e3b22e4711af73a85c2adf440)
- Refactored code for adding new/existing shows, removed auto-detection of XEM scene numbering as it was falsely setting scene numbering to ON. [`caa7ddf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/caa7ddf76787f32e6f86b957636f120241397519)
- Refactored npx command for generating changelog [`877f7f5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/877f7f57bbc3169f2217431487a67beb911a460b)
- Refactored git-changelog template, removed version info. [`eeffca0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eeffca07583e562dcc0729c0f25eb14e6b35cde0)
- Refactored requirements install cmd to include `--no-cache-dir` flag when ModuleNotFound exception is thrown [`96e2baa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/96e2baa026f1db19d761e2b1de8bdd1e7c7cfb04)
- Fixed path to requirements for startup install of missing modules [`0955612`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/09556122f82ebce44adcfbd4b2e6b1e83ed40b67)
- Updated donation link URL [`31143a1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/31143a1557a4e06c6c605f68a9e65f80474e8537)
#### [9.4.207](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.206...9.4.207)
> 5 April 2020
- Removed bitsoup torrent provider [`7b2618d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b2618d182cd9f41886656c81365b0b3c8402cb5)
- Refactored some startup events to fire via io_loop callbacks instead of scheduler, resolves timezone issues related to apscheduler. [`8abfa44`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8abfa4487353e1c988aa0ec77d4b8769d6ba7091)
- Fixed issue with daily searcher setting unaired episodes to wanted that do not have an airdate. [`ff440e4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ff440e4ab2145a4c0ebd3c10707f7e9c900a6098)
- Fixed missing namecache error for server status page [`b9e224f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9e224ffa4ffce65ae15c593e751d5b2c264d951)
#### [9.4.206](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.205...9.4.206)
> 1 April 2020
#### [9.4.205](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.204...9.4.205)
> 30 March 2020
- Fixed issue with adding search result episodes to search snatch history for season search results. [`cfb0ceb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cfb0ceb41c9aa4c95d40ec4c7b228484d1f329ac)
- Fixed authentication issues with QBittorrent [`72ffe67`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/72ffe67ec9dd54c11d033a976a9e3902515bfbf5)
- Fixed issue with detailed/simple view and previous episode air dates. [`c3fc910`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c3fc91048121b747fb1692dd39d50379c60c7bb4)
- Removed encryption of versioned backup files, caused issues with backing up database files. [`6fe0adf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6fe0adf9a1bf84e6e0b1560a3b0ab5b9c338be85)
- Fixed regex pattern for search client URLs to allow for extra paths [`5ed88e9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5ed88e9df566bb48e83a9610d6947ca7b9f2329d)
#### [9.4.204](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.203...9.4.204)
> 13 March 2020
- Updated requirement dependencies [`c888386`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c888386521cafa46bba9c8b99cc87da878ec05e9)
- Resolved incorrect handling of indexer error for `_show_data` metadata class method. [`9004608`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9004608b8c17c9a12795bba8add3238413fb0698)
- Refactored core loading shows function to use query object from database to fill show details. [`0714833`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0714833119807efc275808ec04e458a9ee00dd34)
#### [9.4.203](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.202...9.4.203)
> 9 March 2020
- Fixed IndexError when deleting episode from show episode cache. [`69fda28`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/69fda28adf1088c8e7cd5e3bb944814bebbe5bfd)
#### [9.4.202](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.201...9.4.202)
> 8 March 2020
- Refactored nzb and torrent clients into separate folders. [`09d5fcc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/09d5fcc459b564c0508e4cc2bf507acf72f655de)
- Refactored home view to not display shows till fully loaded from initial show load, allows all other aspects of web-ui to work. [`b49e766`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b49e766ec09264b39cac3e1b14952636e4292716)
- Refactored more web handlers to be async [`bc7393a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bc7393aa3d6a66a7c2ac51a8125b313e66fcc125)
- Mako templates are now rendered on executor, resolves lockups for large renders. [`dc8df9f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dc8df9f7a4d04a5d1bbd6b9f36d2a7b0e8a67466)
- Refactored with statement for database session call to variable. [`da03a7b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/da03a7b0aa463a6ddb9ced2b6b1c8ce195d33efb)
- Fixed issue with getting result using search clients. [`d2145a1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d2145a164b680e2c55d614500486bfe5573c1213)
- Refactored shows cache to populate after database init. [`77cbb46`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/77cbb4678093e141d0e85f7962938fc37ceb710a)
- Created a scheduler just for queues. [`bbaf09a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bbaf09a5033ffc165367e940b30bad14f6a0e861)
- Bumped PNotify to v4.0.0 [`f3a0f0c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3a0f0c6754af5e7f9766b75d9bb225becf4f55d)
- Fixed issue with home view simple taking forever to render. [`1fab208`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1fab20827a441fedf6b8a1e7172019e4feacb9dd)
- Fixed up more database session passing throughout application to help with 'database locked' exceptions [`e9cf48b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e9cf48b513cb762186f78d6338bb8b87d4558f66)
- Refactored queues to be watched via apscheduler 1s interval job. [`6c2ada5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6c2ada5a92f3e0635fa1609cc022813f81bb6947)
- Refactored RLock to be acquired/released using `with` statement inside safe_commit session method. [`80ea445`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/80ea4454a8d0e715f54d07353171ec6a0765750b)
- Misc refactor [`b102856`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b102856863fc60ef702296e11deb1bb857e054e8)
- Refactored clients get module function. [`c64e4f7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c64e4f793aecfd6c97e7bacac29e96c92dca8f0f)
- Increased max database commit attempts for "database is locked" exceptions to 50 with random sleep timer ranged 10 to 30 seconds each attempt. [`4a64aa4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4a64aa4a65839e168877fa4d4e3f75470031b11b)
- Removed left over session declares on cache and main table parent classes. [`b05bbee`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b05bbee5ff39f73c9c9312d78cf4a90aea71b741)
- Fixed issue where rollback on database transaction was not being called correctly on OperationalError exceptions. [`a7076e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a7076e84cd6cfe947047cfe0172a947f2833892b)
- Refactored RLock to be acquired/released using `with` statement inside safe_commit session method. [`180bd6b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/180bd6b21e692f921b1608b6a3376652f27e4a10)
- Refactored `delete_episode` method to remove episode object from related show episode cache. [`97c5569`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/97c5569653dada1fec55ac173611eb643f598800)
- Fixed issue with progress bar not working. [`9b55c91`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9b55c9177c190386d6f0f4f7188036b9f781f8cd)
- Refactored lazy loading for relationships on database models to joined. [`f62514e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f62514eb8b30b9be5c096b648a6a4f0085796696)
- Populating data from indexers no longer returns false if show directory does not exist so to not raise a EpisodeNotFound exception. [`50f4c87`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/50f4c876ae54f9b2acbbffac2d51a0880f409216)
- Refactored backup to not restore privatekey.pem file when choosing not to restore config. [`32e77cd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/32e77cdbb424b5b763da837f92b9c3718e5d3384)
- Fixed issue with saving shows during shutdown/restart of app. [`6917479`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/69174798e9be7a79f884c78022fb0a085c738eeb)
- Fixed type error in determine_release_name for post-processing. [`dafcedf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dafcedfce3677278d0d6d506f171e7771342fefd)
- Converted f-string literal to formatted string. [`4814986`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/481498627ba20417750ba545028fac2c76738d05)
#### [9.4.201](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.200...9.4.201)
> 31 January 2020
- Fixed issue with retrieving images for cache [`7310f88`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7310f886a6e90eb3e124c1fb6747f372a19ae9b4)
- Fixed issue with image_type string being stripped improperly [`9763fa5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9763fa5b00588221f510ca729c372f445cf8a2ca)
- Fixed mislabeled banner image type for image cache [`d56b80e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d56b80ebf125ae65d011c4f262f0d00f6bd5d4bc)
#### [9.4.200](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.199...9.4.200)
> 31 January 2020
- Refactored `_retrieve_show_image` method to download images from fanart.tv if downloading images from indexer fails in anyway. [`92e1b2b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/92e1b2bd5695e4ed652b97f47ec3fe1efcbce9af)
- Refactored getting current user info from decoded token instead of userinfo endpoint [`a41b58f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a41b58f1358cd3945c609f12bc89ec28fe5f2881)
- Fixed issue with indexer error handling [`efb8215`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/efb8215fe556e00edf623b83fbd2f40bb6dd083f)
- Bumped guessit to v3.1.0 [`57dec5d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57dec5d0a69d22ed344b336a6dca58c7254d632d)
- Bumped CacheControl to v0.12.6 [`ad5bf69`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ad5bf6961034ebdfcc553dff271957479cce3ebe)
- Increased default backlog search frequency to 1440 minutes (1 day) [`a6cbc19`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a6cbc1981ed2105da5d6304f68b7f4de139a7856)
- Reverted health check for providers, needs further work before considered beta. [`8a08741`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8a08741865edd668b1ad2228bebdb6b37a4e69e7)
#### [9.4.199](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.198...9.4.199)
> 17 January 2020
- Fixed issues with login cookies not storing in chrome or safari browsers causing failed login attempts. [`355e96e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/355e96e688491839394d90bd48534572ce809c5a)
#### [9.4.198](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.197...9.4.198)
> 12 January 2020
#### [9.4.197](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.196...9.4.197)
> 12 January 2020
- added .yarn-cache to .gitignore [`c5992b5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c5992b5e309c446f75ca2508e07f39a84ab9d6d6)
- Replaced npm with yarn in gitlab ci/cd script [`928a029`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/928a0292858ef5faba19c7c8e0d611d2eb52f88b)
- Refactored gitlab ci/cd script to clone to a depth of 10 [`aeff0eb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aeff0eba3dcf5a6399530bce88540c9d241d5d7b)
- Removed all grunt related packages from package.json [`141db85`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/141db8547d4b55689e5cdfa2eb0a30f39b11d5d5)
- Push tags only after pushing commits was successful for gitlab ci/cd script [`5fe6a98`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5fe6a989a876566c2a0720d36a84dd75aa6600a3)
- Fixed scss import paths for fontawesome [`4ed31f0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4ed31f055a96347a932f82ea36ba6f6e94cd65d4)
- Updated nodejs to v12 for gitlab ci/cd script [`177d165`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/177d165df6c14981e26f493f3e6eca6f8d08dd9a)
- Refactored npm install command for gitlab ci/cd script [`38ac023`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/38ac02315ac6c1dd0b5886f8b3832e48797d8f95)
- Reverted git depth variable in gitlab ci/cd script [`5faa625`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5faa625df40abb661ecd8b702212c7d1bb53672b)
#### [9.4.196](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.195...9.4.196)
> 10 January 2020
- Refactored offline tokens to be revoked before being replaced, resolves issues with tokens piling up. [`92d0c0f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/92d0c0ffd8ef6c8e082d91e5dc6cd37ba7ed586b)
#### [9.4.195](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.194...9.4.195)
> 9 January 2020
- Reload database files after a restore, resolves issues with database scheme migrations. [`017b1a4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/017b1a4c94cfc5ff72857040012ce06d7fc6820e)
#### [9.4.194](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.193...9.4.194)
> 8 January 2020
- Removed footer from show cards in home view. [`5de63b9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5de63b9e276b4fa498f4745196436e4ee2c1d061)
- Refactored database `with_session` staticmethod to classmethod. [`61bd3e1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/61bd3e18f67161fb85b8823b2552744eebc83920)
- Refactored OperationalError to import from sqlalchemy.exc [`803b397`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/803b39775f077017474c473c96c87645d0e97938)
- Fixed issue with replacing oauth2 token on login if token already exists. [`2849e5c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2849e5c279eb6987c4ef08c9f03c4fc6c0e39dbd)
- Misc cleanup [`a929f0b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a929f0b2ef3eb8ade113a735622a7b4f47e776c1)
#### [9.4.193](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.192...9.4.193)
> 22 December 2019
#### [9.4.192](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.191...9.4.192)
> 20 December 2019
- Increased default quality sizes for 720p and up. [`0d2fd21`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0d2fd213afbef094f19eccfa06388736b9c0e42b)
- Re-enabled manual post-processing. [`e9c5c46`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e9c5c468001296f3b8cc5521d7d674c5bf988ad3)
#### [9.4.191](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.190...9.4.191)
> 19 December 2019
- Retired torrent9 provider in favour of gktorrent. [`daea33f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/daea33f084cde5d88c72ea03abbc443f560a8607)
- Increased sqlite timeout to 20 from 10 to help with `database is locked` errors during concurrency. [`f22c2df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f22c2df7a54d3e39064d9968c0bdb674687c0378)
- Check if base url is present in download url before attempting to replace with custom url. [`339ca83`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/339ca834736594a740adf69a9e4e5cdd534b8ec0)
#### [9.4.190](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.189...9.4.190)
> 17 December 2019
#### [9.4.189](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.188...9.4.189)
> 16 December 2019
- Converting internal web calls to routines to direct calls, resolves issues with timeouts occurring. [`d3d413d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d3d413d59bb9b0c0fd081f21e53e058f863bb36b)
- Refactored default provider urls to bypass urls property when formatting urls on app startup. [`0cb3c8d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0cb3c8de2501f1b827f7ba28d2e3d8aa502f3e4f)
- Refactored naming of internal api error and external api error exception classes [`580f19e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/580f19ecc119c51d65ee6327f9c465c2aa8a9f2d)
- Refactored exception handling for `quality_from_file_meta` function. [`00d367c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/00d367c13abe7dc4a3f530c67002fd8cc65c129a)
- Fixes issue #432, outputs episode object as a dict when running episode cmd from app api. [`9cfcfa4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9cfcfa4c87fff080170a2889ec575782407f3905)
- Updated URL for YggtorrentProvider to `www2.yggtorrent.ws` [`00f2131`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/00f2131c924d455c3af6b2202db438ad5f4ad942)
- Increased sqlite pool size from 200 to 1000 [`28975f4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/28975f4931e92a7b643dace7768c69c716c2a8fa)
#### [9.4.188](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.187...9.4.188)
> 9 December 2019
- Fixed an issue with version updating related to checking for number of commits behind, manual update to this version commit may be required. [`37ea161`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/37ea161e35e38bc99b16ed95e59252dd87863654)
#### [9.4.187](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.186...9.4.187)
> 8 December 2019
- update RTorrent compatibility for 0.9.x [`#37`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/37)
- update rtorrent compatibility for 0.9.x [`568403a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/568403a2faccf353eb5194a0a975f12a565b5d93)
- Disabled review for CI script [`cdb11c1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cdb11c1a0c9abb4b4bdaa6fbca2a81cef2323662)
- Restricted CI/CD jobs to upstream. [`8e6c052`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8e6c052c1e7b19b5474d8dfe074bf5325cc4c144)
- Fixing issues with CI script and stages not being triggered on pushes. [`e30e8ea`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e30e8eac9987b01f7f53c3d650524981ca6ebffd)
- Fixing issues with CI script and stages not being triggered on pushes. [`c193f2f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c193f2f1ed541b27373c5b74fbd6a53d6f79da8c)
- Fixing issues with CI script and stages not being triggered on pushes. [`f99732f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f99732fa7482bc658094d2719a32a08d21be01e1)
- Disabled webpack stage for reviewing merge requests, webpack needs to be done manually before submitting a merge request online. [`d0c058b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d0c058bdf9d0b193acd0c97223f594905ffbedf8)
- Fixing issues with CI script and stages not being triggered on pushes. [`c10d945`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c10d94508971b4e354f6378a1b3dafb335a237f1)
- Disabled webpack stage for reviewing merge requests, webpack needs to be done manually before submitting a merge request online. [`c40e707`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c40e707797a2dc45fc26ddb68064632ae71be957)
- Re-enabled automatic build/release/deploy for develop branch [`ffe965b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ffe965b1a6c8425f4ecab0580d5331ef68507cc7)
- fix urllib import and usage [`6a7c4a5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6a7c4a5edf16c1b70bfc1988bfa23afe5a8e8301)
- Fixing issues with CI script and stages not being triggered on pushes. [`03c886f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/03c886f7d55caeb2508984f542a5dd46eaacb9ed)
- Moved tagging of pre-release to happen after committing changes for CI script [`e4f45b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e4f45b2de5c9932c3b6bbb9a563f38facbc8ec44)
- permit scgi URIs for rtorrent [`38489fa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/38489faf77124bd50e9ea810f4be2679af3dc0c1)
- Update sickrage/clients/rtorrent.py [`1332df2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1332df2c59375e2e3c923208e0fb0182d654b527)
- add exception logging to rtorrent client auth test [`053ade3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/053ade3e148055d85024fbeecee95da7607d2f5c)
#### [9.4.186](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.185...9.4.186)
> 28 November 2019
- Refactor CI review stage [`#28`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/28)
- Delete namespace when CI environment is stopped. [`#26`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/26)
- Fixes issue #425 - converting air-by-date to episode ID when multiple episodes... [`#25`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/25)
- Added CI/CD release stage to build app [`#24`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/24)
- Added regex for semantic versioning along with matching of each section of the... [`#20`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/20)
- Refactor gitlab cicd [`#19`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/19)
- Added ability to set webroot at startup from CLI. [`#17`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/17)
- Added ability to set webroot at startup from CLI. [`#17`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/17)
- Updated gitlab ci/cd script allowing reviews [`f31ae93`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f31ae93d97c6d67871f567668b8cffdfc02db4e6)
- Refactored websockets handler. [`ba3961e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ba3961e7291988c48344713b33acab024ec51889)
- Refactored bumpversion config to properly handle develop and master versioning schemes. [`4125ec2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4125ec22037cdf14f5bc54b6cf987506538a67f0)
- Refactoring release cycle for develop -> master [`a50e87a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a50e87aedc650252d58cd958922555009f9774e2)
- Fixed issue with adding existing shows that have episode filenames that do not contain the show name. [`dc965ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dc965bade915fff67f494b3adef73420dba53713)
- Bumped version to 9.4.186.dev1 [`6438042`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6438042a2de979afc6a908a9c85e9ab347f82fce)
- Fixed issue with unlinking accounts and destroying token [`a73aa96`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a73aa968becb1c6eac71bd11b89d6956fdd92c21)
- Updated all CI jobs with proper requirements to build cryptography [`2ab5e3a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2ab5e3a011ce32aaf5e78895a50147c5f46d0f0c)
- Fixes issue #425 - converting air-by-date to episode ID when multiple episodes for show falls on same date. [`831fbb1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/831fbb180817e63e4a2deae3965508d008c06edc)
- Pre-Release v9.4.184.dev1 [`855fbd7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/855fbd738b66e1f5d36a61b6e49b78badd462941)
- Refactored gitlab ci/cd script [`d9c6d77`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d9c6d7732230f7f964df51124d65ac72baf30c56)
#### [9.4.185](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.183...9.4.185)
> 26 November 2019
- Merging Pre-Release v9.4.184.dev9 [`#29`](https://git.sickrage.ca/SiCKRAGE/sickrage/pull/29)
- Merge branch 'develop' into 'master' [`#425`](https://git.sickrage.ca/SiCKRAGE/sickrage/issues/425)
#### [9.4.183](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.182...9.4.183)
> 5 November 2019
- Revert "Refactored main shows page to load shows via web sockets." [`932c107`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/932c107abd9b64eacdffb6b18bd6c66564627a44)
- Revert "Refactored main shows page to load shows via web sockets." [`2afbbf6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2afbbf6fdb4d27d471b1d5ad1efb4ec6b94e06cf)
- Release v9.4.183 [`94f82ef`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/94f82ef67e5de5d493975d93efbb30ef0d51cbe7)
- Pre-Release v9.4.183.dev1 [`d517820`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d517820615086ffc83d91a85a6c430de3d192640)
#### [9.4.182](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.181...9.4.182)
> 4 November 2019
- Pre-Release v9.4.182.dev2 [`69602be`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/69602bec7c8ecae9269957edb7203f69e05ea2f4)
- Release v9.4.182 [`bb8c6e5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bb8c6e568d9c280eb77ba68c91cb352197c46e9c)
- Pre-Release v9.4.182.dev1 [`b7b2ac4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b7b2ac46bb3b508945e1e7baa2638d0517941a75)
#### [9.4.181](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.180...9.4.181)
> 3 November 2019
- Release v9.4.181 [`6bb50b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6bb50b258ea32c57401262152a3fe6f3d4c133af)
- Pre-Release v9.4.181.dev1 [`fdc5c9d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fdc5c9d5b9b3f68e0dcdfd54883d7e7d68cd24ff)
#### [9.4.180](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.179...9.4.180)
> 3 November 2019
- Release v9.4.180 [`b9bd1dc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9bd1dccfc9cccbe66aa1eaf4c9e06c77a501c2f)
- Pre-Release v9.4.180.dev1 [`0a7c487`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0a7c487c06f0201d2c59ce977429ba09ce36bd53)
#### [9.4.179](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.178...9.4.179)
> 3 November 2019
- Release v9.4.179 [`d685071`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d685071b7cff47061bbe4b9461d05e5e16c8bd4f)
- Pre-Release v9.4.179.dev1 [`16e2094`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/16e2094574e353a518092d7bf7388daab1a0b525)
#### [9.4.178](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.177...9.4.178)
> 3 November 2019
- Refactored main shows page to load shows via web sockets. [`b9b280d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9b280d708c15a2bc455c92b29763d6a3849ed6c)
- Refactored main shows page to load shows via web sockets. [`828d5f7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/828d5f75a7922a8be43a37179968adfb233a1a8a)
- Resolved issue with daylight savings and scheduler. [`8a252b5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8a252b55a10c8e2e4d3704feafbd825123d4f08a)
- Fixed indenting in template for shows list [`5450dd7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5450dd7f35db9b405e2bdca57b8e54188a3cb1c5)
- Pre-Release v9.4.178.dev2 [`33f9ddf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/33f9ddf35ef53ffc1e68cd9fe54b523408de68ef)
- Pre-Release v9.4.178.dev5 [`062ac69`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/062ac69587d035b98461292f92377186146ae46d)
- Pre-Release v9.4.178.dev15 [`84a5ed4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/84a5ed4bbf18ed6a3e3c8e0b2b27a37fd5b3ebff)
- Pre-Release v9.4.178.dev13 [`add4a56`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/add4a56cfb4c3fd254f4f103a41fd5deaa82196f)
- Pre-Release v9.4.178.dev16 [`222c3ed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/222c3ed4ad35c02cc7cfebe873f0e279a12f1152)
- Pre-Release v9.4.178.dev17 [`82ee3f4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/82ee3f41cb1d45540db729a73451b199277f2178)
- Pre-Release v9.4.178.dev8 [`749ed1b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/749ed1b54fccd252218d04c670b313d6d1a67985)
- Pre-Release v9.4.178.dev6 [`0707d80`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0707d807cd106c4737ece9a837dd9c9fb8b90380)
- Release v9.4.178 [`7616019`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7616019b7f3076c511f9baeb546a1b5d6af02cf5)
- Pre-Release v9.4.178.dev12 [`60f5423`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/60f542362afa7ed92e56549c8aa6c17885a9a3d3)
- Pre-Release v9.4.178.dev9 [`d07f9f8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d07f9f8f3ace8eb9e6a2c9d65da5d10897a77671)
- Pre-Release v9.4.178.dev7 [`da38c26`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/da38c261d7f9d1a961ee28617b442f973a1950be)
- Pre-Release v9.4.178.dev4 [`8dd6f50`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8dd6f503420043288254fb3096c757178a65304f)
- Pre-Release v9.4.178.dev3 [`4cf7fbb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4cf7fbbcf9583bf4f82ec76e0a376d767a5ba750)
- Pre-Release v9.4.178.dev14 [`2537f0b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2537f0b44c56ee64634f34febe41d88e10cf9c6f)
- Pre-Release v9.4.178.dev11 [`66f810e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/66f810e9a827669f89ac0c6ff154f7c48fd2217d)
- Pre-Release v9.4.178.dev10 [`4e0a44b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4e0a44b46d222347f6fd0dc40dbf386f9de783ec)
- Pre-Release v9.4.178.dev1 [`ed9a94d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ed9a94df5d2b30ca0e0a6a18a1d96789db23e83c)
#### [9.4.177](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.176...9.4.177)
> 29 September 2019
- Release v9.4.177 [`87a6ec6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/87a6ec61a7f56a492f04d1376c85f623dd107631)
- Development version bump. [`0f10d34`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0f10d349cc1f3792472f16d061490e0cb0c24f11)
#### [9.4.176](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.175...9.4.176)
> 29 September 2019
- Release v9.4.176 [`6be984f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6be984fe6dd6e30b6a1e1d19b207f6650471f71d)
#### [9.4.175](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.174...9.4.175)
> 29 September 2019
- Update .gitlab-ci.yml [`c3aed9a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c3aed9a0178a04e1cef53977f0848b5bf4f4a1de)
- Release v9.4.175 [`43fd875`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/43fd8756da6620832f4bcbcb0a56f7296d0a099d)
- Pre-Release v9.4.175.dev1 [`d35176f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d35176f2f4efee801c12b93ebf0a6f2d3cd0e1b4)
#### [9.4.174](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.173...9.4.174)
> 18 September 2019
- Refactored speed.cd to use cookie login due to re-captcha on login forms. [`7f6bdf7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7f6bdf7ab1ce4c3d6a66b6a68e721e95e6d8f466)
- Release v9.4.174 [`4a98d7f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4a98d7fe26c36cc60d73db9250758db27c191f14)
- Pre-Release v9.4.174.dev1 [`b783172`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b783172a63347e0202b6abd8e01cf570c267803a)
#### [9.4.173](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.172...9.4.173)
> 16 September 2019
- Release v9.4.173 [`73d8223`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/73d82236beaba02590f4d4800628225187c59fd2)
- Pre-Release v9.4.173.dev1 [`f354ce8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f354ce83e759c41db0e85391c1034828a0750d25)
#### [9.4.172](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.171...9.4.172)
> 16 September 2019
- Bumped version for cfscrape to v2.0.8 [`1706331`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/17063315137431858dfeb700f758e4b571694013)
- Resolved issue with enable/disable of provider daily and backlog searches. [`ae7acbe`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae7acbe0d853407610db9d000125087233095a56)
- Release v9.4.172 [`483e4db`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/483e4db337154dafa471c898ac968873b61248b0)
- Pre-Release v9.4.172.dev1 [`fa32f37`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fa32f37af8a5969d1b53816a43391c1ed86f9500)
#### [9.4.171](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.170...9.4.171)
> 14 September 2019
- Release v9.4.171 [`288e419`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/288e41982bc1116aa79dc310d3b3cf7645577289)
- Pre-Release v9.4.171.dev1 [`5eb814d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5eb814d013940fdd0bfd5ddbed7f480f5c1900d3)
#### [9.4.170](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.169...9.4.170)
> 8 September 2019
- Refactored config view for search clients to require NZB host/url to be [`e40869f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e40869fc7a3acd6d0503b4238829f7f1b9a758d3)
- Resolves issues for PosixPath being returned instead of string when trying to get subtitles path. [`7df5d8f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7df5d8f40ebfd223c25c415dc4ce770c9bc1b8bd)
- Removed un-required application ID registration code from config [`3817370`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3817370539a923888971d9fb44ac12f67524f42b)
- Release v9.4.170 [`e5ff7bc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e5ff7bc44f0546e8b19346a952268e4e0198e7e9)
#### [9.4.169](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.168...9.4.169)
> 8 September 2019
- Refactored code for getting subtitles path, strips leading slashes from [`44977d4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/44977d45f29f2f2fdb484721d1f42a5ec11a6b0b)
- Misc changes [`6f4fdcb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6f4fdcb74845d8c13486c928c62de5b8e1297931)
- Updated docker-compose file [`db675fd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/db675fdc45f02cd8f1c7561c35291ef1c30230ea)
- Pre-Release v9.4.169.dev2 [`1b448d7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1b448d72f2b18fb8a38fb9171d1b8e78bdaf22db)
- Release v9.4.169 [`003aeca`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/003aecaed6ba09c45e4b97baed521fbff4392a39)
- Pre-Release v9.4.169.dev1 [`d52005c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d52005c6d0e99932f1b90fd706566c582decbbcd)
- Grammar correction. [`30462b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/30462b1f29d1f687d8604e7e511e3d525ac07f75)
#### [9.4.168](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.167...9.4.168)
> 29 August 2019
- Refactored jQuery search client code, resolves issues with form validation. [`a4e25d1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4e25d1c6293c004a30f8b28e595ca297342c873)
- Performs a database rollback for episodes that fail to post-process. [`22648d1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/22648d1ec28e3c06246d06594a65bd31e90d5d9d)
- Pre-Release v9.4.168.dev2 [`10e170e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/10e170e9d46fa78139f7270d2cbcdf85046f6a4f)
- Release v9.4.168 [`4638e26`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4638e2610a7ab63c70d44c584d3867bf1f80b0ae)
- Pre-Release v9.4.168.dev1 [`0116b2e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0116b2e29a7053c49cdcf4602e319ee0bcf7e2c6)
- Refactored URL for support forums in readme [`798def6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/798def65a083ed6194cba120d701cc336665f324)
- Raised timeout from 60 to 120 for Boxcar2 notifier. [`5fd62e0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5fd62e07606ca3614c82fd981d2d180653e75249)
#### [9.4.167](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.166...9.4.167)
> 11 August 2019
- Refactored code for searching providers, was causing issues with final results correctly, results where being removed when not matching exact quality. [`25fc34f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/25fc34f9fd621fceb9ac586091c863a4c87b744a)
- Release v9.4.167 [`efc5637`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/efc5637346707ec6a65f55d069aec9c13863ee64)
- Pre-Release v9.4.167.dev1 [`9c20647`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9c20647f7942bc6bc138d3d3774adfa946210d05)
#### [9.4.166](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.165...9.4.166)
> 10 August 2019
- Release v9.4.166 [`bb5635e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bb5635ec34e1562b226ad5b98dc26f213086cbff)
- Pre-Release v9.4.166.dev1 [`f9f51d2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f9f51d24af2e7ed792301268a2af50723ca99df5)
#### [9.4.165](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.164...9.4.165)
> 4 August 2019
- Renamed cache providers column `indexer_id` to `series_id` [`e5d59c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e5d59c9d124492d208fb8919c2ac9670ff87ec20)
- Resolved issue with int variable being used where str variable is expected when creating metadata for mede8er provider. [`365a16d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/365a16db2baf200917f2f26ade55e674289c0042)
- Release v9.4.165 [`484236b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/484236b8d2a26716084d950ce6a38e15dd54dc08)
- Pre-Release v9.4.165.dev1 [`bfd27b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bfd27b17ac550be2d082d95f38f6cf0ccb708154)
#### [9.4.164](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.163...9.4.164)
> 3 August 2019
- Fixed issues were skipping shows during adding of existing shows would just return to home page, now correctly skips to next show to add. [`b9e1cec`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9e1cec52f2981ffb39589c148f6b917bda39b0b)
- Refactored os.path for pathlib.Path [`dae67f8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dae67f8d090cd49b0f9a807acba9a199734b9e64)
- Release v9.4.164 [`dfd9ecf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dfd9ecf67f2181a5b87b33edac766a872a278da3)
- Pre-Release v9.4.164.dev2 [`4d7edad`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d7edadd052c30b04f1f1e588716e81cdfc95723)
- Pre-Release v9.4.164.dev1 [`0b1d1c7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0b1d1c70d03d98e16bb070d799ce19d7795c8529)
- Refactored python version log tagging to use platform instead of sys [`4b7cdae`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4b7cdaefa0af712687cfb8050ae69ce1d1fd6fa6)
#### [9.4.163](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.162...9.4.163)
> 3 August 2019
- Release v9.4.163 [`8810a83`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8810a8320b108ceca21053042357d99bcf6e0450)
- Fixed issues with startup and shutil.rmtree [`f269aa7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f269aa7ee2439896e4df2711d20bd61a52c31831)
- Fixed startup issues with pathlib.Path, passes string representation of path to shutil.rmtree. [`66c7250`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/66c72505a6047c4dc74f519d814ee7f475fd3f0d)
#### [9.4.162](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.161...9.4.162)
> 3 August 2019
- Release v9.4.162 [`faae82e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/faae82e5445111ae5ffeab2c7710cdb035fb7932)
- Pre-Release v9.4.162.dev1 [`7220352`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/72203528b8f64c2441c0438f2d1ccd32ca4af0ed)
- Fixed startup issues with pathlib.Path, passes string representation of path to shutil.rmtree. [`405dead`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/405dead306aa83c7a8427664a320dafabb74d4f1)
#### [9.4.161](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.160...9.4.161)
> 1 August 2019
- Fixed issues with startup and shutil.rmtree [`f269aa7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f269aa7ee2439896e4df2711d20bd61a52c31831)
- Release v9.4.161 [`c696d94`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c696d9414262c9b36ae29413ac857168e03d3df0)
- Pre-Release v9.4.161.dev1 [`22b5ff3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/22b5ff3c1476277c2de0d52e4aa9050c1a837022)
#### [9.4.160](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.159...9.4.160)
> 1 August 2019
- Fixed issues with cleanup of python compiled files on startup [`2be1836`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2be1836ff4272f40d7a9493e55105c4f8129f4ca)
- Release v9.4.160 [`cbdb2f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cbdb2f1a774b3aa72813d0395b3d1100996d4aca)
- Pre-Release v9.4.160.dev1 [`95e4603`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/95e46036ae2b8bb510007a9992282210ddcd6555)
#### [9.4.159](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.158...9.4.159)
> 31 July 2019
- Fixed issues with saving metadata provider settings. [`89e4931`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/89e49316f05b1fd59db1901082c1766008daf8ca)
- Refactored cleanup of pyc, pyo, and __pycache__ files and folders. [`763629b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/763629b0503e47c815b5746210f0d47b077bc119)
- Release v9.4.159 [`7b9f412`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b9f412c40ba56ecedbe8d27dab174a4b6cb1f74)
- Refactored post-processing to properly handle specials. [`e210a8f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e210a8fb3bb898cb99cc16b251437d8d88c8d3c7)
- Pre-Release v9.4.159.dev1 [`cec8a87`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cec8a876a72d6c79b54f8f8990bb2cdc11c7e78b)
- Refactored download link for source installs to accommodate develop releases. [`67acc5d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/67acc5d9fabbf8e6506e061479ab8ba89253ff6c)
- Updated gitignore file [`b4f3226`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b4f32269eb581f063b08644e412070ade5c54aa2)
#### [9.4.158](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.157...9.4.158)
> 31 July 2019
- Release v9.4.158 [`5db54c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5db54c4bd649f560cca169dbab94b3e08e3b48d8)
- Fixed attribute error `'str' object has no attribute 'decode'` in version updater. [`cfbeee1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cfbeee1abb4d2a3ff76e44bbabd26a1885f8c15c)
- Pre-Release v9.4.158.dev1 [`c7a14c8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c7a14c81a2e60998ae7ad945e02b595017bd8986)
- Refactored requirements.txt to replace package hachoir3 with hachoir, hachoir3 was removed from PyPi. [`67b328e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/67b328efe075a04e6e418965358a9567d9ff08ce)
#### [9.4.157](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.156...9.4.157)
> 28 July 2019
- Refactored dynamic loading of metadata providers. [`90fe2d3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/90fe2d3d3a50a0314575b9a45c3f7e3348757139)
- Release v9.4.157 [`dad896a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dad896a559fd2342dcf11f9ea1fc3ceaa3e8dd5e)
- Pre-Release v9.4.157.dev1 [`324d44f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/324d44f3a9908620c021268e17d83b24deb59340)
#### [9.4.156](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.155...9.4.156)
> 22 July 2019
- Resolved issues with marking failed snatches and retrying snatches. [`7fce356`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7fce35662d902052360241c72b662b6e3bd16150)
- Release v9.4.156 [`7d7e6e5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7d7e6e5b7e8b24745edd78416d1c3bcce2882e78)
- Pre-Release v9.4.156.dev1 [`7cea63c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7cea63c5efec648d20a5face18b359696afb0368)
#### [9.4.155](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.154...9.4.155)
> 22 July 2019
- Updated copyright notices. [`19624f6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/19624f654f1fb2fbfc8bd19eac9ce35b0286e386)
- Release v9.4.155 [`56ddaf1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/56ddaf16574654c59a25ac537e937baf2552f9f9)
- Pre-Release v9.4.155.dev1 [`a70aaea`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a70aaea6b6189efc897a35053f5ef37b958f1ff5)
#### [9.4.154](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.153...9.4.154)
> 22 July 2019
- Release v9.4.154 [`397ac97`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/397ac97c0f46227a8809038c374d7c20ab84d598)
- Pre-Release v9.4.154.dev1 [`3079a6f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3079a6fca99dea79aa52a6b5e542fd40ca3535dd)
#### [9.4.153](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.152...9.4.153)
> 21 July 2019
- Modified startup scripts to use python3 instead of python2.7 [`5b99399`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5b993994a4f3a39d5a001d12efb7973a186ae074)
- Release v9.4.153 [`ae1a14e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae1a14e49c7e8bebb34986d07b2bbb20b7427d9f)
- Pre-Release v9.4.153.dev1 [`db14540`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/db145403c908ec22850e567b3642458217ec1e4b)
- Modified readme.md to reflect minimum requirement of Python 3.5+ [`08f3d6a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/08f3d6aad3a0f7f1a3b67a3ea173bd0e7d453f8f)
- Removed authentication requirement for robots.txt handler. [`eb4cf0a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eb4cf0ae6e218a937cb128c6c687995a835137b5)
#### [9.4.152](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.151...9.4.152)
> 21 July 2019
- Lowered requirement for Python to 3.5+ [`16043b6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/16043b63feb0ac9c14e204c2d5f9dc7cef3a0784)
- Release v9.4.152 [`31f9db2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/31f9db26785bbc91e540995405d61cbd6592502f)
- Pre-Release v9.4.152.dev1 [`927bc42`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/927bc42cb7f709bc0414d134a2f64ffc4c1c2adb)
#### [9.4.151](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.150...9.4.151)
> 21 July 2019
- When trying to determine season/episode numbers for air-by-date shows [`2f4076d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f4076d8f491e4e676ce4c0c7e1aac007892869a)
- Previous archived episodes will now be set to downloaded with original [`4806e15`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4806e15eb34483b4d99597a64a1eb785204f39c7)
- Release v9.4.151 [`54a1397`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/54a1397b22906ba90051e067502592ce28e04c31)
- Fixed issue for NZBGet downloads returning error `decorator() takes 1 positional argument but 2 were given` [`57ea9ff`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57ea9ffbcbdbb5cb5d4c50bfba4899ce43032a11)
- Pre-Release v9.4.151.dev1 [`81939c2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/81939c28d3dbcc8322fbbafdbd624f7662e5e627)
#### [9.4.150](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.149...9.4.150)
> 20 July 2019
- Refactored how source updates are handled. [`a805f32`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a805f3247e5a58c09c43312fb13d22f0359dd222)
- Release v9.4.150 [`6a275ed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6a275ed12f72e5b0922b69a89c1137a5f28c35ab)
- Pre-Release v9.4.150.dev1 [`c419de0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c419de010904b45206bcb33860eb9b5fb235959a)
#### [9.4.149](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.148...9.4.149)
> 20 July 2019
- Fixed issues with unlinking account from application. [`05c4140`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/05c414015c1593c2f57d4ee7947c0826230a0052)
- Release v9.4.149 [`fbcf2b4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fbcf2b481d638af8d3c38cad46b681737a30d3e8)
- Pre-Release v9.4.149.dev1 [`1999b15`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1999b1567a0db4b1f4e0e1d740197bb44db0761a)
#### [9.4.148](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.147...9.4.148)
> 20 July 2019
- Release v9.4.148 [`ce02111`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ce0211119dcfc4c3c5cb311a94e62ea348d63eee)
- Pre-Release v9.4.148.dev1 [`ac21414`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ac214149b46ff4679ceea8fb33099b70c2d086db)
#### [9.4.147](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.146...9.4.147)
> 20 July 2019
- Release v9.4.147 [`a702972`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a702972a0b3663cb9dd75cdabc125e3ba44aac6e)
- Pre-Release v9.4.147.dev1 [`c2e5d67`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c2e5d67041523f5118a3b9f08ea500abfddc4f78)
- Decodes output when checking for installed PIP version to convert from [`ae4c4b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae4c4b1a047cadfd0630af575ded452740ba3dd8)
#### [9.4.146](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.145...9.4.146)
> 20 July 2019
- No longer need to use url_concat for requests. [`ca7e94e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ca7e94e3e62872a24c7ed65e31f777adb401714f)
- Release v9.4.146 [`130a23b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/130a23bd9b08211ce0b3252e4dd5ccd03a160327)
- Pre-Release v9.4.146.dev1 [`9c6fc09`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9c6fc098957f577ff79b5acaf2ff01ee89833af6)
#### [9.4.145](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.144...9.4.145)
> 20 July 2019
- Pre-Release v9.4.145.dev2 [`2b93b28`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2b93b2856440adc4d47170ba3d28f4dc0f8c667c)
- Release v9.4.145 [`971d032`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/971d03215d67dd9b317933199c495e10e3fb7f08)
- Checks for episode number in provider result episodes list before attempting to remove it. [`a339f1f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a339f1f6ba3bbf5a1bdf1af088dc130ae28b8102)
- Pre-Release v9.4.145.dev1 [`30f6bd1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/30f6bd1be4ba0a8c5c86f453b4b5bc900c0aab5b)
#### [9.4.144](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.143...9.4.144)
> 17 July 2019
- Release v9.4.144 [`88af882`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/88af882666d3092e9678163dd6297575035142aa)
- Pre-Release v9.4.144.dev1 [`c7b8a46`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c7b8a466f3336144c09a444d5cb9e00d34d53331)
#### [9.4.143](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.142...9.4.143)
> 17 July 2019
- Release v9.4.143 [`1155881`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/115588118522957b3476c7270398a81c409547c0)
- Pre-Release v9.4.143.dev1 [`bb11dd5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bb11dd5b7decaff3db72a3d3591500d561e0aa0f)
#### [9.4.142](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.141...9.4.142)
> 17 July 2019
- Release v9.4.142 [`692f9b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/692f9b1cfcd43db4509844272259d00cfb29ee06)
#### [9.4.141](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.140...9.4.141)
> 16 July 2019
- Release v9.4.141 [`d4bb52b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d4bb52b2ab4d4a54214a56fda5494f4dfbf92005)
#### [9.4.140](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.139...9.4.140)
> 16 July 2019
- Release v9.4.140 [`bf8ba35`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bf8ba3540b083a080bc37cd50e75a1d5b02929cf)
#### [9.4.139](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.138...9.4.139)
> 16 July 2019
- Refactored using data to using json in requests. [`578ab74`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/578ab748cc26c62fcf4fa1da68c55c4fdbb2333b)
- Pre-Release v9.4.139.dev2 [`e749806`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e74980679886635b0add287480a94c8d3f77e262)
- Release v9.4.139 [`0f153a4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0f153a4336c2a948fa31679b1ca329c4b9038e2f)
- Pre-Release v9.4.139.dev1 [`7139f44`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7139f448203018f53462263ef103927347bd1f50)
#### [9.4.138](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.137...9.4.138)
> 14 July 2019
- Release v9.4.138 [`6c1a44f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6c1a44f0e3960b52e52dbe5798b6d2c60a1250b5)
- Pre-Release v9.4.138.dev1 [`5745352`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5745352886984d9ccb472e9542ccb048a4bfbc34)
#### [9.4.137](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.136...9.4.137)
> 14 July 2019
- Fixed schedule category sorting. [`5fe263f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5fe263f3fe4cebc23e778d5e563326ca6938e998)
- Release v9.4.137 [`f3e6803`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3e68034c06e971b45ce787b52d1cc53c73e896a)
- Pre-Release v9.4.137.dev1 [`e12dfb5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e12dfb570e6ba2d37a81c0137a4533cc648217c3)
#### [9.4.136](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.135...9.4.136)
> 14 July 2019
- Fixed download issues for Deluge Web-UI Client. [`dd3a9a6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dd3a9a6084fb234db8691c51f2d1df99d019fd31)
- Release v9.4.136 [`e6daa57`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e6daa572f7c7a246c4ae2c95917377abedcdbba3)
#### [9.4.135](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.134...9.4.135)
> 14 July 2019
- Release v9.4.135 [`9a12a64`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9a12a645c4af25cb4c2d9cd871b8374f0d6e0dd0)
#### [9.4.134](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.133...9.4.134)
> 14 July 2019
- Resolved issue with renaming episodes not including metadata files. [`2e0b68b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2e0b68b3444009493802ef32a289d80a11d596fd)
- Pre-Release v9.4.134.dev2 [`985b907`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/985b907b4fd95651586f127327c6715d3105ea4d)
- Pre-Release v9.4.134.dev7 [`83aec60`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/83aec6047a0588f1ad3bf01b116624c6ceeacb56)
- Pre-Release v9.4.134.dev6 [`0583b04`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0583b040c89955f8609d07a3eaca79d61d325eb9)
- Release v9.4.134 [`de4f179`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/de4f179d9cfb0b81c4ac8b72562991c94344d253)
- Pre-Release v9.4.134.dev5 [`57198a8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57198a80d20175090ef6bf18fcfcfefeca522661)
- Pre-Release v9.4.134.dev4 [`5d6bcf5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5d6bcf5c9c85fe31fdb140c52b73e5194560af25)
- Pre-Release v9.4.134.dev3 [`e9c169f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e9c169ffe1b65aca5d5f0e157904d577e622eeb0)
- Pre-Release v9.4.134.dev1 [`6b7e8bb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6b7e8bba72d6bf064e576f950c88cabb427f5220)
#### [9.4.133](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.132...9.4.133)
> 13 July 2019
- Refactoring database tests. [`3e7748e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3e7748e54fdddf1bfd36dc9f64e643ff638fc730)
- Release v9.4.133 [`9aa3996`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9aa3996478978a75d96c2350bebf3f72c64319f2)
- Pre-Release v9.4.133.dev1 [`63d34e6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/63d34e6d1c12b27ad0d509e31dc1ecee94340a40)
#### [9.4.132](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.131...9.4.132)
> 13 July 2019
- Fixes issues with mass editing shows and setting qualities. [`1175f63`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1175f634694268a94ab10898c79df6a7758e4ea3)
- Release v9.4.132 [`fc3b301`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fc3b301799316aac5ac23ab0e8d82fbc848794fe)
- Updated git release flow. [`999475f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/999475fc04666532c7f3fae6db29bc89a2d2e4c1)
- Resolved issue with setting proxy address when global proxy configured. [`7b0f1bf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b0f1bfbb4d128e9dcb43c23ba281784608da927)
- Pre-Release v9.4.132.dev1 [`faeabc9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/faeabc9473e7284506e562fc108f9706ed4c6c03)
#### [9.4.131](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.130...9.4.131)
> 13 July 2019
- Fixed issue with gitlab-ci and pipelines for master branch. [`4df45f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4df45f161996e3a6199be3c95699e9c4fbf62cfc)
- Release v9.4.131 [`4072c47`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4072c47a255a1c0b180bf02fbdbd04d2d071e398)
- Pre-Release v9.4.131.dev1 [`f7067e9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f7067e98798a4e46bd1f92fce4e6dc8eda297d02)
#### [9.4.130](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.129...9.4.130)
> 13 July 2019
- Release v9.4.130 [`368e70c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/368e70c185050d2a3ca41b1681e2b669b0baafe2)
#### [9.4.129](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.128...9.4.129)
> 13 July 2019
- Release v9.4.129 [`9628b36`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9628b3657b82a0f1f34bf45cb96543e7456ccc3e)
#### [9.4.128](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.127...9.4.128)
> 13 July 2019
- Release v9.4.128 [`705d0bd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/705d0bda1d9fc7435361092756fe5d193e189291)
#### [9.4.127](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.126...9.4.127)
> 13 July 2019
- Release v9.4.127 [`45aab9a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/45aab9af9858484f57cb05eff4b85e5273d1d9b9)
#### [9.4.126](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.125...9.4.126)
> 13 July 2019
- Release v9.4.126 [`32308be`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/32308beb65137eb8630e6247a454e31bc4a4ec9c)
#### [9.4.125](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.124...9.4.125)
> 13 July 2019
- Refactored release flow. [`0ff1e9d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0ff1e9d821017f738102d167e5a7deb9e6dd4e53)
- Updated gruntfile. [`bc7c359`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bc7c35998ff6f4575164e3d009d44097f814b9d1)
- Release v9.4.125 [`a411278`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a411278c61e6794015ef692d0ee5c9f414bd7302)
- Changed close to remove for database sessions being access from web handlers, helps resolve QueuePool overflow issues. [`b9ea97e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b9ea97eb33917cb5d59707d52d4bd471a496c80f)
- Merge tag '9.4.124' into develop [`ecc4ad7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ecc4ad7c43574581d95a376b21c5dd211a068f3d)
#### [9.4.124](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.122...9.4.124)
> 12 July 2019
- Pre-Release v9.4.124.dev1 [`1ad0be6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1ad0be62db17a5f34be52bb25339fddfd97cad31)
- Release v9.4.124 [`65f3178`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/65f31787404cf7dd90229e654b90ed169501c4ad)
- Pre-Release v9.4.124.dev2 [`c878cc0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c878cc06a2ebd0b760d4bcb2d022970f6ed444dc)
- Merge tag '9.4.122' into develop [`4bf4a79`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4bf4a79c199ad18610e8c94c3f2347a785070a43)
- Merge tag '9.4.122' into develop [`d37bdcd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d37bdcd25105f094bb0def5e0a478b03c100f22d)
#### [9.4.122](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.120...9.4.122)
> 12 July 2019
- Updated gruntfile. [`3e2a870`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3e2a87007c762b096046e9f0e48cba687ddd5121)
- Pre-Release v9.4.122 [`9e9f867`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9e9f867fe05714066332d87d9ae839b6b9436852)
- Pre-Release v9.4.121 [`7d9f054`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7d9f054135beb2b324bade0bef6d39e93b1b15c9)
- Pre-Release v9.4.120 [`7e3a1e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7e3a1e8843957996babe2a7d907ce2be4c5e7a0b)
- Release v9.4.122 [`3923c2d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3923c2d090c315492f6da052862a196e35e07574)
- Merge tag '9.4.120' into develop [`37d1c92`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/37d1c92859bb09920b8cd4bec10904dacf924851)
#### [9.4.120](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.119...9.4.120)
> 12 July 2019
- Migrated Docker builds to their own repository. [`01678da`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/01678da7bcd22092c7756e623ec87b0904f90c50)
- Pre-Release v9.4.120.dev1 [`17ee7fb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/17ee7fbb1a0f1ff04789bc22ba4814502c9baebe)
- Release v9.4.120 [`a586ca0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a586ca0433b1139605797f21e06f223c2e25e509)
- Merge tag '9.4.119' into develop [`523b457`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/523b4579b9ea752aa78bfb2935eb5c2787b87969)
#### [9.4.119](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.118...9.4.119)
> 11 July 2019
- Resolved issue for saving custom qualities, black/white lists, and scene exceptions. [`edc07c8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/edc07c8d7fb00a2a23c3c82a1a3297ad15bb7cc8)
- Release v9.4.119 [`30e8a1b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/30e8a1b7d5f073b12b0b6c986be16ec166f0f884)
- Resolves `can't concat str to bytes` in sickrage.providers in _get_season_search_strings [`3b88e82`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3b88e82e0ee0c59a66722a564b3b5b751c127625)
- Merge tag '9.4.118' into develop [`a52948d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a52948d19a5a56adeaf150093f0d0f7eb61121c9)
#### [9.4.118](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.117...9.4.118)
> 10 July 2019
- Release v9.4.118 [`63354dc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/63354dce53a4b3888c8a3d25945e4252891f183a)
- Places search result from indexer into list object if returned as dict. [`f6fce27`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f6fce27667b2859843e2bf5cfef57a9d62baa095)
- Resolves error `can't concat str to bytes` in `sickrage.providers in _get_episode_search_strings` [`7ad8c0b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7ad8c0b06299462bc1ce471680e2aa4d6dff9c45)
- Resolved unsupported operand type(s) for +=: 'dict' and 'list' [`8a423fd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8a423fd15bc61b20045d380802fcbd2b7069a346)
- Merge tag '9.4.117' into develop [`1548288`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/154828840a40199c1de3cea064c6e3104455f371)
#### [9.4.117](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.116...9.4.117)
> 9 July 2019
- Release v9.4.117 [`1ee3cdb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1ee3cdb90e060881b0e9a5f4054087e5cc46bc58)
- Fixed issue with post-processing and logging downloads to history when unable to determine provider result came from. [`edd6289`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/edd62897563e4b3a9399a49b203c5cddd7de2a69)
- Fixed typo in container name [`134fcfe`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/134fcfe23fccb7a4234b14b591039a7ba0dccf3e)
- Merge tag '9.4.116' into develop [`a953ad5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a953ad53a2b6804808a77dccfecd943de6373f98)
#### [9.4.116](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.115...9.4.116)
> 8 July 2019
- Release v9.4.116 [`42aec55`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/42aec5573026710a0ff8d4f26292ff28d9c25a68)
- Merge tag '9.4.115' into develop [`de17715`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/de17715c33d0070779236695e40848a819d552d6)
#### [9.4.115](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.114...9.4.115)
> 8 July 2019
- Release v9.4.115 [`8f08c10`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8f08c10c2e900f58ffb573cf02529a9b30a59ea8)
- Merge tag '9.4.114' into develop [`939b921`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/939b921eaf09e65fe5979c04cf151926a9f495be)
#### [9.4.114](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.113...9.4.114)
> 8 July 2019
- Release v9.4.114 [`b0731df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b0731df1538aaf17dbff3e88e29250f7f156f318)
- Merge tag '9.4.113' into develop [`daaa163`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/daaa163d3fd177c9a840fdc2a426e4765268169d)
#### [9.4.113](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.111...9.4.113)
> 8 July 2019
- Release v9.4.112 [`2df3ed9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2df3ed96967463e9d93a6335c30099e40c3b5eef)
- Release v9.4.113 [`f369fde`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f369fde9f2c9b9468660366487667c7a68a7e4a4)
- Merge tag '9.4.111' into develop [`9f19c8e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9f19c8e9aa077ebb71caa63ece67c46b460cf332)
#### [9.4.111](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.110...9.4.111)
> 8 July 2019
- Refactored GitLab CI/CD script and Dockerfiles to cut down build times. [`6b4378a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6b4378aea31ff52575c21de60db3a6e0f3f06a74)
- Release v9.4.111 [`07d2e3c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/07d2e3c3519b7b31a8af906ae854fdd54f1a59a0)
- Update Dockerfile.arm32v7 [`b861832`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b8618323f0f3c4a47733f23f9eb3c3e43efee2c9)
- Merge tag '9.4.110' into develop [`d263df4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d263df474f00cfbb164b356cb76e10e218848af7)
#### [9.4.110](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.109...9.4.110)
> 8 July 2019
- Fixed issue with manually post-processing episodes, was a typo. [`9d17dfa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9d17dfa420c1901519c26f1e4328f2451aeea284)
- Release v9.4.110 [`43d40c3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/43d40c38ad8119c8c84ae79056057b3864233c32)
- Merge tag '9.4.109' into develop [`2612012`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2612012fa3d87d9c9bd0af254a96b9aba4871026)
#### [9.4.109](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.108...9.4.109)
> 7 July 2019
- Release v9.4.109 [`9521413`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9521413b70f351077e5ca7addbd1e78ec10a4f2c)
- Merge tag '9.4.108' into develop [`b877a36`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b877a3647ec8339ba44ba2b90cc88313f1e358cd)
#### [9.4.108](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.107...9.4.108)
> 7 July 2019
- Updated Docker image tags to correctly represent multi-arch [`ea56a8b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ea56a8b17f0a28c5cb59162a0c6bef9bb04174ad)
- Release v9.4.108 [`ca70d11`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ca70d11b606672eac2feaf9cd0b7535bb6d890f5)
- Merge tag '9.4.107' into develop [`447124b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/447124bab77ac74be790aae59bab27ec44354d9f)
#### [9.4.107](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.106...9.4.107)
> 7 July 2019
- Release v9.4.107 [`5b3fb85`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5b3fb85a012fa12f6e9f86194199c3b0916b8a82)
- Merge tag '9.4.106' into develop [`57cceaf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57cceafb2094f4b41fca6ba89bb526d7e6caeb74)
#### [9.4.106](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.105...9.4.106)
> 7 July 2019
- Release v9.4.106 [`3c710c6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3c710c6eee96919a560da7103fe7f936c205b3fb)
- Pre-Release v9.4.106.dev6 [`1a2908e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1a2908e11f089935dd54ad9592c212f1b1e559c0)
- Pre-Release v9.4.106.dev2 [`ab0fcd1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ab0fcd1fa9572513c99db533f95ad89390946ea9)
- Pre-Release v9.4.106.dev3 [`86e80dd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/86e80dd0493146e9e52097f3e6d50cbc57d2abef)
- Pre-Release v9.4.106.dev5 [`bd8dc67`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bd8dc67586c4ed46804bfc17548a4b5633fe381d)
- Pre-Release v9.4.106.dev4 [`c8067c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c8067c4f946cb1e8fca92cf9b7d830a093d0ed86)
- Pre-Release v9.4.106.dev1 [`b0c73bf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b0c73bfd3d2b1f265184374dcf181cb9cb8341ee)
- Merge tag '9.4.105' into develop [`9ebfde2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9ebfde2307672b58191694026450ac0a3c20e41d)
#### [9.4.105](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.104...9.4.105)
> 7 July 2019
- Updated gitlab-ci.yml file [`cb5b159`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cb5b1592d53f9b48e359dfd83129ba86e2107714)
- Release v9.4.105 [`2070a5b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2070a5bed225ddcedb724fdc3c88f9d0e726f948)
- Merge tag '9.4.104' into develop [`b0838ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b0838ba031edf0f0aa5ba9eb790d7188adaa5ac8)
#### [9.4.104](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.103...9.4.104)
> 7 July 2019
- Release v9.4.104 [`0a2f554`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0a2f5542d08db04a197f5140905e6873bfba463f)
- Merge tag '9.4.103' into develop [`174579e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/174579eae0d8cf2111f19f8a6882e2ae6b8fdef0)
#### [9.4.103](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.102...9.4.103)
> 7 July 2019
- Release v9.4.103 [`73ad9a4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/73ad9a49863e5e5347327e29a68ae31f67223668)
- Confirms that there is a year to be added from series pieces to show directory if requested. [`331fb7b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/331fb7b29cc114bd133694a7960d89bf5f523604)
- Merge tag '9.4.102' into develop [`74ff12d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/74ff12d83d8cfefbcd470d71a982daeb584ce89d)
#### [9.4.102](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.101...9.4.102)
> 7 July 2019
- Release v9.4.102 [`e59ea00`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e59ea00f5b2cd4c7212cfbcc037bd52461dd6d8e)
- Merge tag '9.4.101' into develop [`ae8f473`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae8f473592fb55ea4552ae47b6f5b303b0807db5)
#### [9.4.101](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.100...9.4.101)
> 6 July 2019
- Release v9.4.101 [`c768c9a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c768c9a4871e4c407813c700c04012f4c6589a94)
- Merge tag '9.4.100' into develop [`a45e606`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a45e60631a34ab8f87dbd5aaa9300f6a91963dc6)
#### [9.4.100](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.99...9.4.100)
> 6 July 2019
- Release v9.4.100 [`2f5e07c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f5e07c8d1e8ccd14c7b2728da8fe2787d26ce68)
- Merge tag '9.4.99' into develop [`e7feb74`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e7feb74d41dc63c8f3c3b1111851f5f4295ddd73)
#### [9.4.99](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.98...9.4.99)
> 6 July 2019
- Misc typo fixes. [`c8ac2d4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c8ac2d441475e4b215145d7d453aea9833b8d89b)
- Release v9.4.99 [`2f4236c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f4236c989db5325d643296dd54f673b5e5f2664)
- Looks for provider search result by URL and if exists it does not add to cache. [`5ceded0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5ceded0af18cab44540e2f21410ec576de5b813f)
- Converted misc errors to warnings [`c446e18`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c446e185b9d6250e6522bc2c162fa5b0eb7aa12b)
- Resolved issue for combining quality when qualities list is empty by providing a default. [`1de0584`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1de0584abc7a975e7c08ffa8e6fd5b338929f91c)
- Passes database session object onto add keyword function to avoid database locks. [`5dff80f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5dff80fb0b06a8626b64a40a8fdc4112d6306dfd)
- Merge tag '9.4.98' into develop [`ac97203`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ac9720385eb9b9e596e8105471ace881bd4c82e3)
#### [9.4.98](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.97...9.4.98)
> 6 July 2019
- Resolves timeout issues for internal http requests. [`d426b5d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d426b5d7309c989583321c2736bc3aac516fff5f)
- Release v9.4.98 [`6ddee98`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6ddee98ef99d0eca645229cbc4c7202535b61d35)
- Merge tag '9.4.97' into develop [`9ba8828`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9ba88283373ede6e57c198b404571c3f619a0631)
#### [9.4.97](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.96...9.4.97)
> 6 July 2019
- Resolved issues with subtitle downloading. [`466bb28`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/466bb283809b4ec780f6b19647bc21ac642380eb)
- Release v9.4.97 [`0603b4c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0603b4cc9a434b1927ec344b185ab62cbd03c896)
- Pre-Release v9.4.97.dev1 [`569cda3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/569cda3416bc8fc1f3129d69c6b9b0d140d2bbb6)
- Merge tag '9.4.96' into develop [`32beab2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/32beab224bb087476abf209df5bd6e0549613158)
#### [9.4.96](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.95...9.4.96)
> 5 July 2019
- Release v9.4.96 [`97f0ddc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/97f0ddc7de51c1e2314ed7dc2a3f118cef91c72f)
- Pre-Release v9.4.96.dev1 [`fbbeec4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fbbeec4aef4700fb429c1bfb7437ad46ebd667db)
- Pre-Release v9.4.96.dev2 [`6c06ea1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6c06ea1f7b7efaf397d23a08e4845721bbaae30c)
- Resolves unbound exception for variable `imdb_exception` [`d0aae5b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d0aae5b394f9f2eb819097c3de4ab314af99f1c1)
- Performs select count on provider cache results to determine if its ok to insert provider result. [`140e129`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/140e12938db2578f38fb2ebc7990d155753dd3a1)
- Merge tag '9.4.95' into develop [`90d1ea6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/90d1ea6d7676e6f74c2d807b6d8ba5dbc391a067)
#### [9.4.95](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.94...9.4.95)
> 3 July 2019
- Release v9.4.95 [`f7eea90`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f7eea9011e07db94dd73bb264c58e7842c9e5e28)
- Merge tag '9.4.94' into develop [`4d39393`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d39393385d33612c42ea1654484808318f4572d)
#### [9.4.94](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.93...9.4.94)
> 3 July 2019
- Resolves issue with saving subtitle settings. [`8fb2de7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8fb2de789668bb7b2559707cb774bf8d8e88f9dc)
- Release v9.4.94 [`0d476b6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0d476b6caaf98e9a945a3a502973a23070be2e17)
- Merge tag '9.4.93' into develop [`4d45298`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d45298148f7b1a6cb59a029a1589d94e6b21b41)
#### [9.4.93](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.92...9.4.93)
> 3 July 2019
- Resolves `a bytes-like object is required, not 'str'` [`831787e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/831787e65b2ad05aa986574abdd97f68b141ac52)
- Release v9.4.93 [`a2bfb77`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a2bfb7721a9bdcd1002334e3aac36b37f7b3b173)
- Pre-Release v9.4.93.dev1 [`d6a1ed2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d6a1ed2ef5ea3cc3f18e5f4d8e588009119c7248)
- Fixed key not found issue with migration table column mapper. [`32ed358`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/32ed35832cf7aa0c4d47918a843819049bce2a00)
- Merge tag '9.4.92' into develop [`86ed469`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/86ed469f120d8425c3a82b6c1535d4c4759870bf)
#### [9.4.92](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.91...9.4.92)
> 2 July 2019
- Refactored Deluge Daemon client to PIP install and removed old lib requirement. [`9a08345`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9a08345479bf2cfd0b84c51a5674df02a6a9f76a)
- Release v9.4.92 [`79bd8f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/79bd8f1e9ac2c60838e8a9431d37655aeeb80f1d)
- Pre-Release v9.4.92.dev1 [`60c2498`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/60c2498fb1288ddb0a7c4ed3cd4211c9a95afa88)
- Resolves version updated issue `'str' object has no attribute 'decode'` [`22240c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/22240c96a4fae5f6eb467958b7653fda6f47417c)
- Refactored display show mako code to check if imdb_info object has attribute genre. [`526b345`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/526b345cba2bccd58f2c7cbabd4082e8fe9290ee)
- Merge tag '9.4.91' into develop [`7183e59`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7183e59fb187265d6af6bc2589ab6068d505daea)
#### [9.4.91](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.90...9.4.91)
> 1 July 2019
- Resolved issues with installing requirements.txt during updates causing updates to fail. [`df757f5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/df757f507110e376ecb7b6d2bb4755366b7ad749)
- Release v9.4.91 [`3425338`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3425338989c55bcf7d2b46da0085cc1fbd0ca0de)
- Merge tag '9.4.90' into develop [`3b118f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3b118f1ea456ce4d4c7268b15853b6d219363584)
#### [9.4.90](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.89...9.4.90)
> 1 July 2019
- Release v9.4.90 [`2f63091`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f63091d3f4d17e17c8d4491a54e92fe3eb95645)
- Merge tag '9.4.89' into develop [`c272ea3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c272ea3975c718c56cbb99d5276b94426bc16e33)
#### [9.4.89](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.88...9.4.89)
> 1 July 2019
- Resolved issues with NZB searches and not snatching found results. [`c3957e4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c3957e4dc5220c471721d95ffe04e73fb5febeed)
- Release v9.4.89 [`2908018`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2908018017261d407e7f083fb130d42299158de0)
- Merge tag '9.4.88' into develop [`bfb84e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bfb84e872ce32b0328e3443e9fc1271e83320ad7)
#### [9.4.88](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.87...9.4.88)
> 1 July 2019
- Refactored how we gather query and body arguments to use one method. [`5bffa94`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5bffa94a2ec9bf3bd468924c21f522a0aed801df)
- Refactored async http client calls in web handlers. [`a4f2d4e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4f2d4e5626b83974350106fc7f97caa56ebeef2)
- Refactored show search list to not select shows already in library. [`5e05f9c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5e05f9ce7ff2fb574e6d602457cbebb252701bfc)
- Resolved issues with unicode decoding output from version update commands. [`c894e74`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c894e74593d71486f84cfdb1422968be7cb7cbf6)
- Pre-Release v9.4.88.dev4 [`8b2b290`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8b2b290351a9f6794a28390d7d591387debf3be2)
- Pre-Release v9.4.88.dev6 [`aa389b1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aa389b1006a4816354c492fc23a6bd277dec6987)
- Pre-Release v9.4.88.dev5 [`60ad77f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/60ad77ff856c170f1211921b3409dbb221d73b8d)
- Resolved issues with sorting main show poster view. [`c71c5ce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c71c5cefc9cdc668229257175c2ab816ecd8cf45)
- Pre-Release v9.4.88.dev3 [`2c95398`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2c9539800266a20fe69e5c111ac229288d416b8b)
- Pre-Release v9.4.88.dev2 [`4ba9839`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4ba9839f7ae543f1f616a9ea21af8da944b73b78)
- Release v9.4.88 [`a15394b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a15394bf1ea908d5b3d3b449a81ee874c644ed54)
- Merge tag '9.4.87' into develop [`4484245`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/44842450815de800de9e90fe983a75b330522dd9)
#### [9.4.87](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.86...9.4.87)
> 30 June 2019
- Refactored cache database last_search table provider column to be the [`b8d32c7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b8d32c76f4e9e858073b32ca6dc700bd96ec1080)
- Resolved yaml issue for CI/CD [`b4eb0e7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b4eb0e71ac8a12389ce285285ee51b73947a2743)
- Pre-Release v9.4.87.dev9 [`3c4a9b9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3c4a9b9271e5422b2a6d229878e8ce92100b115b)
- Pre-Release v9.4.87.dev5 [`0a574b3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0a574b3635f6b490c4b664dc3bc908e239da1b4a)
- Pre-Release v9.4.87.dev4 [`352931e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/352931e93612cd0b5ad49102adb6cecd155d57de)
- Pre-Release v9.4.87.dev1 [`fda4adf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fda4adf7b754cd9c583e951ebe40927bf0f6c439)
- Release v9.4.87 [`0f183b7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0f183b7700e372470e5663679ae00efd1d7c09c0)
- Pre-Release v9.4.87.dev8 [`a4fc5c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4fc5c9592bcc3494312356f299b322e67799fa9)
- Pre-Release v9.4.87.dev7 [`db4a94b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/db4a94b20afd37fe0695d82a80b21937c9a1d185)
- Pre-Release v9.4.87.dev6 [`2a6d3de`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2a6d3de117c84b2c33fe29935d3b172d64506a33)
- Pre-Release v9.4.87.dev3 [`25f4b66`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/25f4b661f420222883df42ffa711aa63646a7743)
- Pre-Release v9.4.87.dev2 [`d8ef193`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d8ef19390a193fc18a7d789a07378aad0cf2e822)
- Merge tag '9.4.86' into develop [`625ccfa`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/625ccfa0bb8f3e23e1b736bccdedaeb7d7766ae7)
#### [9.4.86](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.85...9.4.86)
> 29 June 2019
- Release v9.4.86 [`5c877f4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5c877f45fe86bbe7aaf275f043590b8c01f60699)
- Update readme.md [`81c32f3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/81c32f3b4320f6075fe89bfc4f3f538195fd84ca)
- Update readme.md [`4deb267`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4deb2671f0e7d6d9712289e3cc7306da608d15b4)
- Merge tag '9.4.85' into develop [`686783f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/686783f2190e5f5acd180c51d10dd8c7a379dbb9)
#### [9.4.85](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.84...9.4.85)
> 29 June 2019
- Migration from Python 2 to Python 3.7.x [`c8c1995`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c8c19951b34b3b30df9b07f92e90e4b0ff4280b6)
- Restructured web view folders and classes. [`1f9f2c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1f9f2c413129513488aaca9e13c278d8be41a284)
- Migration from Python 2 to Python 3.7.x [`7f5696f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7f5696f950ebb3f078ecc68c539f010b9f775fcd)
- Refactoring provider searches to search for one season/episode at a time, this will allow for better multi-thread handling of search queue items. [`81d9d7c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/81d9d7ce1b3659f5ac0841826e4f8c79a77ccfc9)
- Refactored file headers [`19708c3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/19708c3c956b3cd4f12a20894611d9212e75fb0a)
- Refactoring code for performance [`6f6e1db`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6f6e1db2508ebbd5897e31ec1980bc280ff2ecde)
- Refactoring post-processor code. [`4d9e816`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d9e816729b3ddb380512efd17c983011c42568e)
- Refactoring database calls to properly use session context. [`ced8924`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ced89247453064a7d4dd5d71098157a881816dd3)
- Refactored schedule calendar view. [`50275d8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/50275d8703ab4d199bc1585252081f086d920276)
- Refactoring database calls to properly use session context. [`5684a09`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5684a09482cfcb67e4ea62a1169ba5c411756724)
- Improved load time for main shows page by loading episodes into memory. [`f01d04b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f01d04b128fbf211ab3b56438d02684a9ca51857)
- Refactored `searchProviders` method [`7fa3757`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7fa3757e0e1e575bdac0d5b4f47dffc50e3f6b9f)
- Refactored History methods [`c31c7c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c31c7c4e83a2be7890a8d8602a5c2af0de0fe29c)
- Refactoring database calls to properly use session context. [`02d3bdc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/02d3bdc388a4b839b332261271eb4e871e4c92dc)
- Refactored core main helpers module. [`8d70465`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8d7046525b9f654eaf1fbfcf64614fa2cab715ce)
- Pre-Release v9.4.85.dev1 [`45c6de2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/45c6de2a2c6ca4072b0049413347463903e130ee)
- Refactored more database calls [`a5c700f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a5c700ffd2be7102c3b6502481bbd7b1ae9ff471)
- Refactoring database calls [`98df301`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/98df3016fec61fe3b178f002c1b2977ee576cd5f)
- Improved performance of loading main shows page and gather statistics. [`ca56cad`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ca56cadee491dfa6b06750947f29def994104cbf)
- Fixed issue `install() got an unexpected keyword argument 'unicode'` [`8baf524`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8baf52440a720903575dae317da452d03671e1f5)
- Refactored configuration encryption routines [`762a0f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/762a0f10228330128e1b721a28dbda819028f3de)
- Refactoring post-processor to pass show and episode IDs instead of objects. [`c478beb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c478bebc3d3132f42604024fc4da0e6eb1f63c67)
- Enabled `autocommit` for database sessions. [`9ddf71a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9ddf71a71846ab85c6472fd10a92d115b2ad5b89)
- Refactored `find_search_results` function [`ac6ef8c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ac6ef8c150e3ef76efbc8160a630f88ad57d6da2)
- Refactoring of misc class names. [`b1e3ed9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b1e3ed92f4b08cb50746277586ac3410661277c0)
- Improved performance of loading main shows page by doing away with overall stats and moving stat gathering for shows to views. [`b1dd65f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b1dd65fa0977f7f221cf9ad49ec7c86c47cb933a)
- Working on fix for locked database issues [`c6f5543`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c6f5543332ea482b634ea2ff7a078df2f4c65ca8)
- Refactored search provider HDBits [`49b3286`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/49b32863378296074f1046b08f5862308f09cece)
- Refactored `show_names` module [`468638f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/468638fb9d9e45c744292bf0949e81544ee769de)
- Refactored database calls to be more multi-thread friendly. [`fc34dac`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fc34daca5ce7e703d2a8809d4ca67fab982a9f10)
- Refactoring show object code [`b2d7407`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b2d7407d97f8dc6d3cb6a881a2f4da0d2b52275a)
- Removed remaining custom database functions no longer needed. [`9f4c8df`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9f4c8df89f0cb3dead44340c400e183a386806b7)
- Fixed attribute issue for show object release groups [`45cdfe1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/45cdfe1d293c75fdc745f378e97b10e49f258ef5)
- Fixed issues were season packs and multi-ep search results would cause [`164b687`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/164b687cc9a309b2f123cf9f9a64d1d789567dda)
- Cleaned up search queue code. [`6af5a7d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6af5a7dee78f34bf2c7edae0db405923cccf75ec)
- Refactored schedule calendar view. [`6f3e014`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6f3e01496085f6045817d36c9eb32d6f6020fa48)
- Refactored encryption functions [`a13c1ef`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a13c1efc62ca815feb14264bb44f2271570e582a)
- Refactored post-processor class code. [`8f8968b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8f8968bc9cf02548f70cb13f4256621483e5b934)
- Refactored database insert calls [`1bff88a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1bff88aa81e170039c394b6d794b965f7c49a5d1)
- Refactored how we delete database rows [`b65e3ac`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b65e3acee78b2aa2c807ad4dc1cbe27adf13a98d)
- Refactored provider search to return single result, avoids multiple snatches. [`80cc2c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/80cc2c4835243655227181e651dff75933317556)
- Refactored tornado web handler to perform async calls [`c55f378`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c55f37875b5dfe29d0ff7ee3deb0571bc4fbe767)
- Refactored remaining database query calls [`da76cd1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/da76cd140835dd730b65aec0558b13296677c8dc)
- Refactoring database delete calls [`a495abb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a495abb035065877870b38488a4212f512b06156)
- Misc code refactors. [`e743c7e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e743c7ec3e26fa65830613da3de8ce305e90d2d6)
- Refactored database update calls [`2edaad7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2edaad7769558a484187283208745fee9e005e9a)
- Refactored show stat handling. [`a53079e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a53079ed0bcf736ccfb8389d2d28445253ec2330)
- Refactored scene numbering function conditionals [`87cabbd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/87cabbd1a721712aad2ae71f9fd77726c54e78f7)
- Resolved issues with show updates and refreshes related to database sessions. [`c6818d8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c6818d8b08ae882d3de48f94d2abb3954ddcb3cf)
- Refactored pip_path to pip3_path [`eed9186`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eed91867cf108b438b5f38806634ac7ccb2a9949)
- Working on fix for locked database issues [`2dd6518`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2dd6518872e4990b2b3147b9cc85c218ac923ec8)
- Fixed issue with main show page including downloaded specials in [`9906b49`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9906b4952a2506b609beb09910ca15304f0ef829)
- Fixed issue `name 'table' is not defined` [`3d8c877`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3d8c877684ca88e712b864e4cd47f80d11709050)
- Moved encryption startup routines to its own function call [`326cdd7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/326cdd71a33e96e3961e2a6408f571a92447182d)
- Fixed issue with calling backlog on newly added show with wanted episodes. [`e850bb0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e850bb0f99200337ed6409414701f0469e6c70e4)
- Fixed Zooqle torrent provider search issues. [`a2040ab`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a2040ab6a7463b1bb3be1213ccb4741b6ca4cc8a)
- Fixed issue with internal http client and auth [`c0cbb15`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c0cbb15f48bef05833360acff51df8a6e943c1f8)
- Refactored search code to account for season packs and multi-episode results when determining quality size constraints. [`30c9bda`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/30c9bdacfa45f609f40356bc2f19149a8084504e)
- Refactired database update calls [`87ae736`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/87ae7363b95779c8d2765e360a1dfd32f40cd541)
- Refactoring scene numbering functions. [`2803fa9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2803fa9f366b44cb3beaea92442a1e5dda92332b)
- Reverted scoped_session as it was removing session binds from models. [`d84f863`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d84f8634a05478089ed7738c93665044fb52ed71)
- Refactored `backlog_searcher` module [`f7cf3a1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f7cf3a184073ae5cfc06d0d16566fde3c58bc0dd)
- Misc code refactors for using show episode relationships [`b91e49c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b91e49c1450e7aa700a750872195229572b8e3ec)
- Refactored database migration code to handle unique constraint errors. [`7f15e46`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7f15e46542fb7f0f99b9f9d1f9e6dbd9fe27cda9)
- Downgraded main database from version 13 to 12 to revert changes made to imdb_info and tv_shows tables. [`77a73fb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/77a73fb3b07656e1dce6d4a24dbc167bbe8a0312)
- Refactored search provider Zooqle [`17bb034`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/17bb034ff4408c2af1c750c53bd4315e5562e684)
- Refactored `daily_searcher` module [`c337738`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c33773841941732cd27c339e519b1f2cf4b2b281)
- Improved app performance in regards to startup time. [`ad47082`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ad4708281f9b5228abb5dad0c8bff24d3aa5e2d7)
- Fixed issue with post-processing manually and async. [`06aec91`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/06aec91d6bb9f2292aaf67508bf7a41b23a79d63)
- Refactored database update calls to merge object sessions before committing [`f05f45b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f05f45b220176e75348739bc288a25682b47badc)
- Refactored database update calls [`c382663`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c38266317b47e6c144cfbdc006b3a5a657263c8a)
- Refactored `set_sqlite_pragma` function. [`99b8bb8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/99b8bb820f00a2a439651ec13ca447232db31e7b)
- Refactored old code used for getting show episode images. [`1b78049`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1b780497928088764585c84383aec5a83eee6401)
- Refactored IMDbInfo table nullable columns allowance. [`b736150`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b73615052a90866b038a547e5b9f4c8f74c5a060)
- Refactored database update calls to grab session from object first that we want to update to use for committing the data [`7383dce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7383dce629513b5b5fe1ad0bc1465e4e8da22765)
- Refactored database update calls [`d55538a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d55538a86ffa9ed097f0ce4b789372c7448eae4c)
- Refactored `new_episode_finder` method [`f8ee032`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f8ee0322056eda71d7b2556131b9cba3e40bf976)
- Converted schedule and display show handlers to async. [`e34a1ed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e34a1ed82c26b377ff416eecadd8ac551ccea5b0)
- Fixed 'InstrumentedList' object has no attribute 'all' [`0e375e1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0e375e144d6d5ecc9e9762aa5256f0ef3b9be3c7)
- Refactored show queue to retrieve show objects from database via indexer_id attribute [`f571a00`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f571a00ae11f04f1c46b9175fba81d9ca06b1d1a)
- Refactored code to backup/restore `-shm` and `-wal` database files. [`0a963af`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0a963af2981459660c14d2ea5d8f4e0aa09a5333)
- Fixed issue with History table migrations. [`69abaf4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/69abaf43ebaba9f2f5dbdbbbe5ef4576627918de)
- Fixed issue with displaying show stats when adding or removing a show. [`bbfd1ce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/bbfd1cea1e4aa6e14394352d38b858a33d9c6dc2)
- Fixed Quicksearch, was incorrectly encoding data. [`1f9477e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1f9477e894502fde83da0ba8d4f0a62bba4e6ea1)
- Refactored main shows page to not include specials or unaired in totals. [`4b8e9f0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4b8e9f03c0f4e47236ca8ec947e22659b6bc017e)
- Fixed issues with manual searches, added session decorator to snatch episode function. [`225936a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/225936aeaf3b7d64b44816a0915a7c0b697ef9cc)
- Fixed issue with forcing backlogs and finding nothing. [`356ab93`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/356ab93562b8202aa031a83b75ec45db219c8998)
- Working on fix for locked database issues [`521828f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/521828f94c094b8e855bedfb80c47fc3e05c27b3)
- Misc cleanup of database models [`cc98260`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cc98260942c8b402319d65bdd59cb0540e86b855)
- Refactored progress-bar for poster view. [`f75ab47`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f75ab4795ef2eb60d104ac2c9acc2fdd132d72c8)
- Fixed issue where scene_season, scene_episode, and scene_absolute_number got reset to zero if not found on XEM, caused search issues. [`2559549`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/255954995c836d748c07727e47eb89864cc7a378)
- Fixed issue where main show page will show duplicate show entries when adding a new show. [`c76465f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c76465fc93ed8c8fddde403c9da08469c0281cf5)
- Fixed issue with getting IMDb info [`5b74195`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5b741954a50908ed7c8abca4331be4b7a0bf04e0)
- Refactored `BacklogQueueItem` [`f52da13`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f52da1338c669c1f1e2a82f03a2afc117bb4dd7e)
- Fixed issue with backlog searches not working due to async not being properly implemented on queue items [`07dc6b4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/07dc6b47f05bd9cc209295d67f0e16f246b06db9)
- Fixed issue with unprocessed videos being skipped due to being processed. [`52691bd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/52691bd6a55704e052ae3e839fd6f93628f3f62a)
- Fixed issue with adding existing shows and being unable to parse a filename into a show object. [`16d0db4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/16d0db46e116fa5af2a0622d147f08b4d912d876)
- Refactored `set_sqlite_pragma` function. [`85e8749`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/85e874939de69c3df9dd7e874becb98f77665cf6)
- Refactored remaining incorrect database calls for CacheDB. [`6e27416`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6e274160ff90a411fcf6d94c9e6a6f17d62e3895)
- Fixed remaining calls to variable `current_item` [`d30471a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d30471a50e6b6062619b2f112c2b58e14290ba93)
- Fixed a typo [`f3877e7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3877e792685e7ff186173a2f4773a8bde780a36)
- Fixed issue with creating processed marker files. [`c7e61d6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c7e61d642886a912a63a3091d08e2f88d249343c)
- Refactored `run_task` function to not be async, returns future that can be awaited or fired and forgotten. [`f8b9e2d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f8b9e2df234271998b038715bc141aa05ec5a64b)
- Fixed issue with show name not being displayed correctly when a show is being added to the database on main show display page. [`47e5445`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/47e5445f74be75493659435f7c6775ddb62c0a5d)
- Refactored xem_refresh database update call [`264d5c8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/264d5c80e9a23e1fa549a6ea5a442fd95b5e39a3)
- Fixed issue with adding duplicate provider results to cache. [`cef3044`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/cef30445213a0381e0d1c90eca6a5311cd0d7623)
- Refactored misc errors to warnings. [`3832745`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3832745f4428bcf58c65aed8357046ce6283d26d)
- Fixed issue with displaying existing shows from multiple root directories. [`b1e7d1d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b1e7d1d1923b6af6f7d3957bcffe6a1cbf9f23cf)
- Fixed issue with slack and binary messages [`baf2f48`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/baf2f48aeeef3231e4a8496d98187c2674762a31)
- Fixed issue with history of snatched episodes not having their statuses updated after being downloaded and post-processed. [`a2d0eb7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a2d0eb747fc97a573b4efc83543852f4f1bea0ce)
- Fixed show display page to sort drop-down of shows non-case-sensitive [`fea454a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fea454aad1c3196df74614be83450715fc0d52a3)
- Fixed issues with parsing xml data for Plex and NZB [`516bec5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/516bec5a251ec7cca98048a07524fd418e851c86)
- Refactored configuration encryption routines [`124ce33`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/124ce33cf6370c7c240bd9777856ff81187534da)
- Fixed issue with initial setting of app_id [`9d884af`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9d884afbae19e8e8518c9e0ffaee842176d98a2f)
- Refactored remaining database calls using old-style dictionary calls [`4d7d73e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4d7d73e422e2590e0e2d71717c82eb9922164399)
- Refactored main layout submenu creation to honor required setting [`3382e14`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3382e1427fc1613b8510a1d2a8894ff2c3b006c0)
- Python 2 to 3 database migration happens against files in root of data directory instead of seperate migration folder. [`0e1b42e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0e1b42e198bc1021bea0020bb2f1188f70edca78)
- Pre-Release v9.4.85.dev19 [`ae7eff4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ae7eff421cf90e01cbd752c14c6d92f160cb2e74)
- Refactored episode properties to not include specials. [`37f7632`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/37f7632d50544645e64660063dbac83834be258b)
- Fixed select issue for display show drop down. [`42607c3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/42607c3b1aa4fac277470c748f4455de9222cc8e)
- Fixed issues with version updating. [`b69acd0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b69acd091650424d5e97ac265337ffa4817bb7ed)
- Refactored database engine to use a QueuePool with a size of 100 connections. [`ab3d032`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ab3d032de14f8585b86b3fed3da9a39077a02194)
- Fixed issue with clearing errors and warnings [`61cce7c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/61cce7cde91518f1f582c4d7e08143c9af1d5e96)
- Fixed issue with show not being added when trying to add show via queue. [`77ac496`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/77ac496ba50b590c35b5d541f9a822de66a120fd)
- Updated primary keys for quicksearch database tables [`78fa24f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/78fa24f70e6609e4b0612519664a82a78b9bed76)
- Fixed Mako error for status page [`caaf36a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/caaf36a3eacc9f08c7190c45e2aefa09fd6310fa)
- Fixed issue with black and white lists [`a4929e4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4929e4291fa17d428315994aa1a3de306ad1ec5)
- Refactored variable to function call. [`289685b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/289685be2f0e9d114e64ccbc5b254cdb6d150122)
- Refactored history lookup to return first result instead of only trying to return one or none [`1dc9ad9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1dc9ad934598ead1472c3646f9b87683b1cacabe)
- Fixed issue with loading episode details from .nfo file for multi-episodes. [`255da20`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/255da20e83e4761234f1ea7ba31bf1b570bca286)
- Refactored history clear and trim web handlers to be async. [`f3e2f64`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3e2f64098d1ca4311ce03d0d41e2a64a2b12712)
- Made minor adjustments to queue [`fbe61c6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fbe61c6d691646f632de99c4812c98f6b165d4b8)
- Fixed displaying queue priorities from server status page [`ff4ea98`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ff4ea982ad505f622c16d5f9950cf5e060f14fc2)
- Refactored backup/restore functions to include public encryption key [`2fccd96`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2fccd962274ed82cca9129fe5ccc039e1f565dfe)
- Pre-Release v9.4.85.dev23 [`eef0ad4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eef0ad4b26d9736df2d737833d92a667333d3bef)
- Pre-Release v9.4.85.dev21 [`7d0b6b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7d0b6b2a31cc7a39ef4d0740f0377263fa31eb55)
- Fixed issue with searches and picking best results when multiple results presented. [`3867759`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/38677592b333a806dfa5e7fe7f15e768adb3b786)
- Refactored database delete function to check count of query results before attempting delete to avoid errors [`7b833ac`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7b833ac6d88352d0aafffa826a71f225477108ed)
- Fixed issue with calling backlog on newly added show with wanted episodes. [`29b7ce4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/29b7ce4cd7559a7c1531606e2733b57b908c249c)
- Pre-Release v9.4.85.dev10 [`4efd8a0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4efd8a0b9c766f409e9103887279c1616dbe58a1)
- Fixed source commit variable to point to correct enviro var. [`0aae828`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0aae828af6ef762ead68d3660c9e11c5c8b70d2a)
- Pre-Release v9.4.85.dev6 [`4c7abdc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4c7abdcb3212d6c4792c883c208ed246011ca030)
- Fixed issue `OverflowError: date value out of range` [`3d9725a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3d9725a5157da65d642d0fc050688c25d4f1d0bd)
- Fixed a issue with relationships for tv shows and episodes [`a305c92`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a305c92b5be3ca78ae1c184046a29f8c6dedeec6)
- Fixed issue with polling for episode search status from scheduler page when no show ID is provided. [`80ebdad`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/80ebdad5e385a2341bdcb379cac815c4d2937998)
- Fixed issue with automatic post-processing [`aca0067`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aca0067d8b974c343b4a35fbb31841c81b2ca241)
- Fixed issue with queue and `max_queue_workers` variable [`8917d88`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8917d8874c0de12da945462473448a7a2635d473)
- Fixed missing handler for post-processing view [`2ac7b86`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2ac7b86d4cadc2397b4676d174cfb53a953a25fb)
- Refactored backup and restore functions to include `privatekey.pem` [`208a6d0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/208a6d03e9a9477698c41f5e1e942dfe87c2363f)
- Fixed typo for restore function [`622650a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/622650abe5f8b1e4c9e5fc99d6361dd238f2557a)
- Pre-Release v9.4.85.dev37 [`859f7d3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/859f7d3e2f8cc01533676c7b75124dedeaaf26cd)
- Pre-Release v9.4.85.dev36 [`3bb44d0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3bb44d02281d62efa72fc98298e11c5cf4edea33)
- Pre-Release v9.4.85.dev32 [`d37b9d8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d37b9d8033a68f88a2978f9c7f17f53b239041fc)
- Pre-Release v9.4.85.dev30 [`a75533a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a75533a33d5b2c4e63fb31d1b61536ef22197cc8)
- Pre-Release v9.4.85.dev17 [`0d74c97`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0d74c97948179be1d67cca74eae02462f37d2188)
- Pre-Release v9.4.85.dev4 [`acb8383`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/acb838359585b0d80c8d611b5cfc1a17d9887b8a)
- Pre-Release v9.4.85.dev2 [`d9cccea`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d9cccea9be1f40422a8b02b86212e070982d5125)
- Fixed issue `Missing argument pid` [`eea340c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/eea340c9522dd92fb3eaaccc1ebf0d8b5ba47c2c)
- Fixed web call to force daily searches. [`887cb3a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/887cb3a8bd681aae08f833a7cb006917faedd0c7)
- Pre-Release v9.4.85.dev35 [`b7bc6f3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b7bc6f3ee451548abbad82bf4d5826ef73f1201a)
- Pre-Release v9.4.85.dev31 [`d50d140`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d50d1406ce04b18b865944d1f18b0be3ad2b6006)
- Pre-Release v9.4.85.dev29 [`242607a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/242607a985743959caadb9f5fbad9faebe629563)
- Pre-Release v9.4.85.dev28 [`f3b429a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f3b429ade7d0526b9facc5ddc9b97a469f5b0f1f)
- Pre-Release v9.4.85.dev27 [`8545559`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/85455596c5820c1a782921407af39db97895f736)
- Pre-Release v9.4.85.dev26 [`71c7f47`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/71c7f470e5e19ed3525df29a4612f60b6fe6759d)
- Pre-Release v9.4.85.dev25 [`0fe4cdd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0fe4cdd0455f80914972079cc6f0f115fdc6822e)
- Pre-Release v9.4.85.dev24 [`7a7446a`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7a7446af4bd4ee5fccf300d374559c9346815046)
- Pre-Release v9.4.85.dev22 [`a5032f1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a5032f12472445146d901c36aabe5418d740761e)
- Pre-Release v9.4.85.dev20 [`8403749`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/840374995c6545c16e096b6d1d214ba15ab9009d)
- Pre-Release v9.4.85.dev18 [`fc59ac3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fc59ac305095b37b516314cf29de17f2892d19f1)
- Pre-Release v9.4.85.dev16 [`5ed3462`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5ed3462f803da9a487602834ba192b178c1e2c34)
- Pre-Release v9.4.85.dev15 [`1e38c3c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1e38c3c0ac2b6fc4bb7412b9d5d92dbedcf24ee0)
- Pre-Release v9.4.85.dev14 [`a229286`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a22928603bad513405d01b61bb02ec0ca53d8ebe)
- Pre-Release v9.4.85.dev13 [`d8b37b3`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d8b37b3538a08a4a5d52c92c7febf0ebe7e74194)
- Fixed episode total to not include specials. [`5478146`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/547814611e743a331fde0dad02dcb1e75de88725)
- Pre-Release v9.4.85.dev12 [`c8e8d12`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c8e8d1279a568c93403da7cad978884fd27f1ce8)
- Pre-Release v9.4.85.dev11 [`fb2f3b2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fb2f3b2f81b752a5198deda873ce7323ba226e17)
- Pre-Release v9.4.85.dev9 [`2c370dd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2c370dde3e70965ce4edd52daecd62c8e84344b5)
- Pre-Release v9.4.85.dev8 [`ed7d5e1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ed7d5e1468a84bdeeffb8760e977a878338d654f)
- Updated YGG torrent provider URL. [`0f90596`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0f90596670720268939310f74a9914ede86aa5ab)
- Pre-Release v9.4.85.dev7 [`20831e8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/20831e8bca8de07dd51d8a6f8ad267ed07ce5d90)
- Pre-Release v9.4.85.dev5 [`9c4bfe1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9c4bfe19bebca1f629f39d7142032302fc093550)
- Pre-Release v9.4.85.dev3 [`9e93282`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9e932820f2cb98045cbf9dc92bb9e2ac995fea1a)
- Fixed issue with daily and backlog searches not running. [`271a443`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/271a443f94bde7db70dccf9bd9923dd46adb4139)
- Updated requirements [`410b5fd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/410b5fdddbf69410bbc4025af3debd5b36e30823)
- Fixed issue with viewing logs and max lines [`a4ee42f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4ee42fd7f791c37068bc1c4fb28b1764028c7ba)
- Fixed issue with looking up show in database using string search terms. [`2eb5847`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2eb58478ceb0c6f1525afed34c5311595bdc06d5)
- Refactored backlog and daily log messages to indicate number of days its searching for. [`3c3aed5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3c3aed5d3f7167a8288c50a95cf4e76550153572)
- Fixed issue with loading of imdb_info attribute for shows [`d93dc9f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d93dc9f624da214e45d4801562b8bc0db39e504c)
- Fixed more logic with `max_queue_workers` [`a4b1b61`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a4b1b6188b26aae82f41a3c8122b10da90e8f060)
- Moved call to register app-id [`555d960`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/555d9603ac48c4ab5fd2c06c7d79b1fa20326984)
- Encrypt config only if able to save encryption key [`78f5288`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/78f5288090b095c4c49f586a33b7d64f43b8172c)
- Release v9.4.85 [`1ca6bcd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1ca6bcdec27660c6a0436fca8ef087ded58479ce)
- Pre-Release v9.4.85.dev34 [`17f4e24`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/17f4e245c9d7225d3d87f8804644d98e219ba09f)
- Pre-Release v9.4.85.dev33 [`13c6d5e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/13c6d5e05eb7c9d8c6f25449f302dc124e78f98b)
- Refactoring post-processor to pass show and episode IDs instead of objects. [`52147ba`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/52147ba694bc76997eda067ab8067015ceefda05)
- Removed un-required sleep for post-processor [`a2fb2db`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a2fb2db61c6dcef98d6a57c72e8f6f5a58489303)
- Fixed typo in CI/CD script. [`c3f6024`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c3f6024329bda0cccc8ba57cc9f32e7f42e35bb2)
- Downgraded main database from version 13 to 12 to revert changes made to imdb_info and tv_shows tables. [`0cf4b20`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0cf4b20fdeccdab95724e7a574da086e1db652bc)
- Fixed issue `run_in_executor() got an unexpected keyword argument 'webui'` [`57e5d92`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57e5d92bfb57d46b4e141995026a2fd8b7887e0c)
- Refactored code to backup/restore `-shm` and `-wal` database files. [`302fb73`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/302fb737c5946c5f9c949f9265294a8973bd955d)
- Removed ajaxsearch init from schedule core js handler [`11903dd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/11903dd263775f34d5145396250fbf02246dcd7d)
- Removed ajaxsearch init from schedule core js handler [`fb7f665`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fb7f6659bd82936b9f25714df73af7c01874f23d)
- Misc typo [`d8ba166`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d8ba1666c3cc30c5a90741d59bd2d1d13ae3bfbb)
- Removed committing to add and delete database methods. [`5f870d9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5f870d9ba4755aeed6a7de54edf609d4299b654b)
- Fixed issue with trimming history. [`4375dff`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4375dffcc86a8f572d6d5c547ded9d292cd32c6b)
- Update __init__.py [`6b8ef37`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6b8ef374b450f9916eaed376583a21981b0662f1)
- Fixed issue with drop-down show list for display show page [`0fd669b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/0fd669baae995a3115dce98a3066a6c1c174215e)
- Changed logic for queue and `max_queue_workers` [`5b01682`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5b01682461e64aefa9da922c772403b3dda0b657)
- Fixed issue with queue and `max_queue_workers` variable [`506ed4c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/506ed4c38a4e20a0208892524061a53481190daf)
- Fixed `In Progress` for show queue status in Mako code [`48438eb`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/48438eb666f10c16e70b69e37e9db2ac5a6bc875)
- Fixed missing params from get method for post processing handler [`afece73`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/afece7307c69fa82a8d999c2c7af2026c5e1f7f1)
- Refactored queue to process all items that are queued at once instead of one at a time. [`2ce606e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2ce606eb95d0c22ac67f975b6cb6ac41b017af1b)
- Fixed issue with mapping when called by reduce, wrapped in list call. [`aaefbb4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/aaefbb428a20ec517586020ce54523336407a672)
- Fixed `can't have unbuffered text I/O` value error [`a228f02`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a228f02ccc26999b4b7f093b15f69f6c698babee)
- Refactored public encryption key to be saved only after private key is saved [`5d65e31`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5d65e31cb35ec0382e4367296ebaab48316c57a7)
- Updated version to 9.5.1 [`8f59e6d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8f59e6dc25ad7838b758ab560bbeac00663e32b1)
- Refactored database update calls [`412de15`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/412de15dcf3b7ebce4c687691f780b708c6c7171)
- Updated python-keycloak-client to 0.2.2 [`c7a4409`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c7a4409b70d9aae1f118bdda2609d83b09cade4f)
- Fixed status page to display show queue item progress correctly [`faa271c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/faa271c4e3b6e5fd3732ba4dd3d78884496b0214)
#### [9.4.84](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.83...9.4.84)
> 6 April 2019
- Pre-Release v9.4.84.dev2 [`611cb16`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/611cb16d69ed6068e75b3d230197b93f334bdb32)
- Release v9.4.84 [`c41a995`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c41a995d1618af450cbc8a3d4d36f6e367fa46e1)
- Removed py-unrar from requirements [`96aab9c`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/96aab9ca4dbb0545147b3436324e3615a9b3be74)
- Merge tag '9.4.83' into develop [`fb6f06f`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/fb6f06f2c9cb2dd2f61ca736dbcfed0edd1f7b87)
#### [9.4.83](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.82...9.4.83)
> 9 March 2019
- Release v9.4.83 [`d8b8087`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/d8b8087e86d8ba04b2de809f7970c3e408c23f61)
- Fixed issues with source updates. [`471976b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/471976ba7c7c1fb7b4b6e925beb184caf9f56d7b)
- Merge tag '9.4.82' into develop [`5b429fc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/5b429fc1871da1cf566760e8393787cdc8169321)
#### [9.4.82](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.81...9.4.82)
> 6 March 2019
- Release v9.4.82 [`ee7439e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ee7439e9ed2faf634119fab6eff24b362f2033f6)
- Merge tag '9.4.81' into develop [`57650a0`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/57650a0236f438502db24c12756dc6cb4983596f)
#### [9.4.81](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.80...9.4.81)
> 6 March 2019
- Release v9.4.81 [`8a67674`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8a67674262155f52a63973c374e63b433041bef0)
- Merge tag '9.4.80' into develop [`4662673`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4662673088f6b993c58c9d567adbaaea501bb723)
#### [9.4.80](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.79...9.4.80)
> 5 March 2019
- Release v9.4.80 [`6de5fa5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/6de5fa566c1456866b28b11ed254471c443b4b14)
- Fixed saving of provider settings so that booleans are saved as integers [`43baedf`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/43baedf8e0d91ee7f4f6bda98e6dec4a9ccac554)
- Merge tag '9.4.79' into develop [`7fe3583`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7fe3583471a3e6738f838cb7cb834af89cdae8c3)
#### [9.4.79](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.78...9.4.79)
> 4 March 2019
- Release v9.4.79 [`4f0d739`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4f0d739a2a935b9ab30aa1bc9402f9df68b18184)
- Merge tag '9.4.78' into develop [`78e1194`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/78e11941211fccaf18ac06682fc2208eb9de7b52)
#### [9.4.78](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.77...9.4.78)
> 4 March 2019
- Release v9.4.78 [`74f6d46`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/74f6d4603df82d7570874b282330a00415319721)
- Cleaned up backup and restore functions for database. [`3151280`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3151280c7ef0bead219c4ba8d8497607f26a1f2f)
- Merge tag '9.4.77' into develop [`01dfecd`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/01dfecd8c51df568d9372f0240422be24c3a6e43)
#### [9.4.77](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.76...9.4.77)
> 24 February 2019
- Release v9.4.77 [`a72ca25`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/a72ca25f7e2d6a69ee61b82d67782a0db15200b6)
- Merge tag '9.4.76' into develop [`377a573`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/377a57341a4ba374c9ee5c5d264df6f6b5981901)
#### [9.4.76](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.75...9.4.76)
> 24 February 2019
- Release v9.4.76 [`e0f2db6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e0f2db68575041a45ea428afea004546267db62a)
- Merge tag '9.4.75' into develop [`897dea8`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/897dea8e160aa2f982ec98890d01a0d96a4c20a5)
#### [9.4.75](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.74...9.4.75)
> 24 February 2019
- Release v9.4.75 [`abe73d7`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/abe73d7802020778aa01226480f6ae46fa00278a)
- Fixed issue with scene exceptions not being retrieved. [`f4b1e65`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/f4b1e65d9f8dffe31d6a152c3f7ab125c175098d)
- Merge tag '9.4.74' into develop [`9b5dd59`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9b5dd59468796397c3f61af6893b23635030dfeb)
#### [9.4.74](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.73...9.4.74)
> 24 February 2019
- Pre-Release v9.4.74.dev1 [`1ebefb4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1ebefb42e3a5753c9e44126fefe847ab24957d83)
- Release v9.4.74 [`78d6b6e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/78d6b6ecc45b7bf64c3962936ef19496ac1b0037)
- Pre-Release v9.4.74.dev2 [`90fa33d`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/90fa33d218235bb09a2df4f886a4233779d1ab4d)
- Fixed issue with default add show options and add show year feature. [`b690738`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b6907389629b0891a73229c54811a28aed670740)
- Merge tag '9.4.73' into develop [`045620b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/045620bfc7e85a89d436d636629d9d4595389a7a)
#### [9.4.73](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.72...9.4.73)
> 24 February 2019
- Release v9.4.73 [`ffd8fa4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ffd8fa4791a0bb0d75d5a0419f550e7d93faa3b8)
- Merge tag '9.4.72' into develop [`337acf9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/337acf90960c8a2806426c7ad8e693256514f0f8)
#### [9.4.72](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.71...9.4.72)
> 24 February 2019
- Release v9.4.72 [`47572b6`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/47572b673012e75705b9e7dcec6edac150a3c8ce)
- Merge tag '9.4.71' into develop [`7ef8aed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/7ef8aedc97ab3ff087062e29a40795594f5bebfd)
#### [9.4.71](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.70...9.4.71)
> 23 February 2019
- Release v9.4.71 [`b86d9d2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/b86d9d2eda05f4edae03bb2ff76c625085b5bc0a)
- Merge tag '9.4.70' into develop [`dd79285`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/dd79285cedd8065a626f06e4d114f4515f22f798)
#### [9.4.70](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.69...9.4.70)
> 23 February 2019
- Release v9.4.70 [`ea526d2`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ea526d22fee7dc3b31256741ade628576084d048)
- Pre-Release v9.4.70.dev1 [`2e4fa85`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2e4fa859c8cc6fb77cddd04135d1e1c32c7ffd3c)
- Merge tag '9.4.69' into develop [`df9fe01`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/df9fe01ea0b5b46d112b1a78ed8cb8151c30ebcb)
#### [9.4.69](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.68...9.4.69)
> 23 February 2019
- Pre-Release v9.4.69.dev1 [`2f89453`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/2f89453ad18ae9bbf5008dd875ff41799b9a82c9)
- Release v9.4.69 [`502eb01`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/502eb01636c0bef2bfd1ea73f8635525e1f68884)
- Don't attempt daily or backlog searches if nothing to search for. [`ffa69b5`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/ffa69b5186fb2de9c996a2a057c80d3b38fcc86c)
- Merge tag '9.4.68' into develop [`954c634`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/954c63461afe5caaf7bf036135868d9f0cb8772b)
#### [9.4.68](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.66...9.4.68)
> 23 February 2019
- Release v9.4.67 [`3f6df12`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/3f6df121d9a4e7dd708dbfadb87925ca9e3ecf4d)
- Release v9.4.68 [`c3441ed`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/c3441ed155c761f553d9f8772de514bad7d66378)
- Merge tag '9.4.66' into develop [`9a730c4`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9a730c4d3854bc4eb25b7a5e722daac8eda40d22)
#### [9.4.66](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.65...9.4.66)
> 23 February 2019
- Release v9.4.66 [`9c78d0b`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/9c78d0b1c6acd2edab8016f5120069e97f17fb5d)
- Merge tag '9.4.65' into develop [`4acabb9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/4acabb945597fde0d5d4f65c14eba0a3580b39f4)
#### [9.4.65](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.63...9.4.65)
> 23 February 2019
- Release v9.4.64 [`15ffdce`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/15ffdce8031c36b881a477041865040a458b09ed)
- Release v9.4.65 [`8275fd1`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/8275fd1ebaf370c24b6af9bfde7a7078475a29f1)
- Merge tag '9.4.63' into develop [`caf00c9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/caf00c99483ba378406956b1b412ccc7cd789b30)
#### [9.4.63](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.62...9.4.63)
> 23 February 2019
- Release v9.4.63 [`33a4acc`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/33a4acc8ecc4b409b51cf3c5927d4470f7cfc378)
- Merge tag '9.4.62' into develop [`e4c0f75`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e4c0f750ab564ae2fb21116d160c7f016dfaf618)
#### [9.4.62](https://git.sickrage.ca/SiCKRAGE/sickrage/compare/9.4.61...9.4.62)
> 23 February 2019
- Pre-Release v9.4.62.dev1 [`04b3d37`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/04b3d3784b5ba3642c02b6153623ab59922541bd)
- Release v9.4.62 [`1e6bcf9`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/1e6bcf9746d276f7c9d56911820940be2900573c)
- Release v9.4.62 [`e648c9e`](https://git.sickrage.ca/SiCKRAGE/sickrage/commit/e648c9e8b84ef2c7baf0fc34a6887125188e9655)
- Merge t
gitextract_ei3lbocf/ ├── .changelogrc ├── .dockerignore ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .gitlab-ci.yml ├── CHANGELOG.md ├── COPYING.txt ├── Dockerfile ├── MANIFEST.in ├── README.txt ├── SiCKRAGE.py ├── build_protos.bat ├── changelog-template.md ├── checksum-generator.py ├── checksum-validator.py ├── crowdin.yaml ├── docker-compose.yml ├── manifests/ │ ├── deployment.yaml │ ├── ingress.yaml │ └── service.yaml ├── package.json ├── protos/ │ ├── announcement_v1.proto │ ├── network_timezone_v1.proto │ ├── search_provider_url_v1.proto │ ├── server_certificate_v1.proto │ └── updates_v1.proto ├── readme.md ├── renovate.json ├── requirements-dev.txt ├── requirements.txt ├── runscripts/ │ ├── init.debian │ ├── init.fedora │ ├── init.freebsd │ ├── init.gentoo │ ├── init.solaris11 │ ├── init.systemd │ ├── init.ubuntu │ └── init.upstart ├── setup.cfg ├── setup.py ├── sickrage/ │ ├── __init__.py │ ├── autoProcessTV/ │ │ ├── __init__.py │ │ ├── autoProcessTV.cfg.sample │ │ ├── autoProcessTV.py │ │ ├── hellaToSiCKRAGE.py │ │ ├── mediaToSiCKRAGE.py │ │ └── sabToSiCKRAGE.py │ ├── checksums.md5 │ ├── clients/ │ │ ├── __init__.py │ │ ├── nzb/ │ │ │ ├── __init__.py │ │ │ ├── download_station.py │ │ │ ├── nzbget.py │ │ │ └── sabnzbd.py │ │ └── torrent/ │ │ ├── __init__.py │ │ ├── deluge.py │ │ ├── deluged.py │ │ ├── download_station.py │ │ ├── mlnet.py │ │ ├── putio.py │ │ ├── qbittorrent.py │ │ ├── rtorrent.py │ │ ├── transmission.py │ │ └── utorrent.py │ ├── core/ │ │ ├── __init__.py │ │ ├── amqp/ │ │ │ ├── __init__.py │ │ │ ├── consumer.py │ │ │ └── protos/ │ │ │ ├── announcement_v1_pb2.py │ │ │ ├── network_timezone_v1_pb2.py │ │ │ ├── search_provider_url_v1_pb2.py │ │ │ ├── server_certificate_v1_pb2.py │ │ │ └── updates_v1_pb2.py │ │ ├── announcements.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ └── exceptions.py │ │ ├── auth/ │ │ │ └── __init__.py │ │ ├── auto_backup.py │ │ ├── blackandwhitelist.py │ │ ├── caches/ │ │ │ ├── __init__.py │ │ │ ├── image_cache.py │ │ │ ├── name_cache.py │ │ │ └── tv_cache.py │ │ ├── classes.py │ │ ├── common.py │ │ ├── config/ │ │ │ ├── __init__.py │ │ │ └── helpers.py │ │ ├── databases/ │ │ │ ├── __init__.py │ │ │ ├── cache/ │ │ │ │ ├── __init__.py │ │ │ │ └── migrations/ │ │ │ │ ├── env.py │ │ │ │ ├── script.py.mako │ │ │ │ └── versions/ │ │ │ │ ├── 001_Add_Initial_Tables.py │ │ │ │ ├── 002_Remove_ID_Column_From_LastSearch_Table.py │ │ │ │ ├── 003_Rename_IndexerID_To_SeriesID_On_Provider_Table.py │ │ │ │ ├── 004_Add_OAuth2Token_Table.py │ │ │ │ ├── 005_Add_Announcements_Table.py │ │ │ │ ├── 006_Add_Session_State_Column_To_OAuth2Token_Table.py │ │ │ │ ├── 007_Add_Token_Type_Column_To_OAuth2Token_Table.py │ │ │ │ ├── 008_Drop_QuickSearch_Tables.py │ │ │ │ ├── 009_Add_SeriesProviderID_Column_To_Providers_Table.py │ │ │ │ ├── 010_Remove_OAuth2Token_Table.py │ │ │ │ └── 011_Bump_Version.py │ │ │ ├── config/ │ │ │ │ ├── __init__.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── env.py │ │ │ │ │ ├── script.py.mako │ │ │ │ │ └── versions/ │ │ │ │ │ ├── 001_Add_Initial_Tables.py │ │ │ │ │ ├── 002_Remove_Web_Host_Column.py │ │ │ │ │ ├── 003_Remove_Search_Providers_Newznab_Key_Column.py │ │ │ │ │ ├── 004_Add_SSO_API_Key_Column_To_General_Table.py │ │ │ │ │ ├── 005_Convert_Default_Series_Provider_Language_Code_To_ISO6393_In_General_Table.py │ │ │ │ │ ├── 006_Bump_Version.py │ │ │ │ │ ├── 007_Convert_NMA_Priority_Column_To_Integer.py │ │ │ │ │ ├── 008_Add_Update_Video_Metadata_Column_To_General_Table.py │ │ │ │ │ └── 009_Add_AutoBackup_Columns_To_General_Table.py │ │ │ │ └── schemas.py │ │ │ └── main/ │ │ │ ├── __init__.py │ │ │ ├── migrations/ │ │ │ │ ├── env.py │ │ │ │ ├── script.py.mako │ │ │ │ └── versions/ │ │ │ │ ├── 001_Add_Initial_Tables.py │ │ │ │ ├── 002_Add_Last_Backlog_Search_Column_To_TVShow_Table.py │ │ │ │ ├── 003_Add_Last_Proper_Search_Column_To_TVShow_Table.py │ │ │ │ ├── 004_Rename_Columns_On_TVShow_Table.py │ │ │ │ ├── 005_Rename_Columns_On_IMDbInfo_Table.py │ │ │ │ ├── 006_Rename_Columns_On_TVEpisode_Table.py │ │ │ │ ├── 007_Convert_Airdate_Column_To_Date_Type_On_TVEpisode_Table.py │ │ │ │ ├── 008_Convert_Date_Column_To_DateTime_Type_On_FailedSnatchHistory_Table.py │ │ │ │ ├── 009_Convert_Date_Column_To_DateTime_Type_On_History_Table.py │ │ │ │ ├── 010_Add_Release_Group_Column_To_History_Table.py │ │ │ │ ├── 011_Add_Scene_Exceptions_Column_To_TVShow_Table.py │ │ │ │ ├── 012_Add_Search_Format_Column_To_TVShow_Table.py │ │ │ │ ├── 013_Add_Scene_Column_To_TVShow_Table.py │ │ │ │ ├── 014_Add_Last_XEM_Refresh_Column_To_TVShows_Table.py │ │ │ │ ├── 015_Add_XEM_Numbering_To_TVEpisodes_Table.py │ │ │ │ ├── 016_Merge_Scene_Numbering_Table_With_TVEpisodes_Table.py │ │ │ │ ├── 017_Convert_SearchFormat_Column_To_Enum_Type_On_TVShow_Table.py │ │ │ │ ├── 018_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVEpisode_Table.py │ │ │ │ ├── 019_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVShow_Table.py │ │ │ │ ├── 020_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_ImdbInfo_Table.py │ │ │ │ ├── 021_Upgrade_To_SiCKRAGE_v10.py │ │ │ │ ├── 022_Convert_Language_Codes_To_ISO6393_On_TVShow_Table.py │ │ │ │ └── 023_Bump_Version.py │ │ │ └── schemas.py │ │ ├── enums.py │ │ ├── exceptions/ │ │ │ └── __init__.py │ │ ├── google_drive.py │ │ ├── helpers/ │ │ │ ├── __init__.py │ │ │ ├── anidb.py │ │ │ ├── browser.py │ │ │ ├── encryption.py │ │ │ ├── metadata.py │ │ │ ├── show_names.py │ │ │ └── srdatetime.py │ │ ├── imdb_popular.py │ │ ├── logger/ │ │ │ └── __init__.py │ │ ├── media/ │ │ │ ├── __init__.py │ │ │ ├── banner.py │ │ │ ├── fanart.py │ │ │ ├── network.py │ │ │ ├── poster.py │ │ │ └── util.py │ │ ├── nameparser/ │ │ │ ├── __init__.py │ │ │ ├── regexes.py │ │ │ └── validator.py │ │ ├── nzbSplitter.py │ │ ├── process_tv.py │ │ ├── processors/ │ │ │ ├── __init__.py │ │ │ ├── auto_postprocessor.py │ │ │ ├── failed_processor.py │ │ │ └── post_processor.py │ │ ├── queues/ │ │ │ ├── __init__.py │ │ │ ├── postprocessor.py │ │ │ ├── search.py │ │ │ └── show.py │ │ ├── scene_numbering.py │ │ ├── search.py │ │ ├── searchers/ │ │ │ ├── __init__.py │ │ │ ├── backlog_searcher.py │ │ │ ├── daily_searcher.py │ │ │ ├── failed_snatch_searcher.py │ │ │ ├── proper_searcher.py │ │ │ ├── subtitle_searcher.py │ │ │ └── trakt_searcher.py │ │ ├── traktapi.py │ │ ├── tv/ │ │ │ ├── __init__.py │ │ │ ├── episode/ │ │ │ │ ├── __init__.py │ │ │ │ └── helpers.py │ │ │ └── show/ │ │ │ ├── __init__.py │ │ │ ├── coming_episodes.py │ │ │ ├── helpers.py │ │ │ └── history.py │ │ ├── ui.py │ │ ├── updaters/ │ │ │ ├── __init__.py │ │ │ ├── rsscache_updater.py │ │ │ ├── show_updater.py │ │ │ └── tz_updater.py │ │ ├── upnp.py │ │ ├── version_updater.py │ │ ├── webserver/ │ │ │ ├── __init__.py │ │ │ ├── handlers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── announcements.py │ │ │ │ ├── api/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── schemas.py │ │ │ │ │ ├── v1/ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── v2/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── episode/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── file_browser/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── history/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── postprocess/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── schedule/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ ├── series/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── schemas.py │ │ │ │ │ └── series_provider/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── schemas.py │ │ │ │ ├── base.py │ │ │ │ ├── calendar.py │ │ │ │ ├── changelog.py │ │ │ │ ├── config/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── anime.py │ │ │ │ │ ├── backup_restore.py │ │ │ │ │ ├── general.py │ │ │ │ │ ├── notifications.py │ │ │ │ │ ├── postprocessing.py │ │ │ │ │ ├── providers.py │ │ │ │ │ ├── quality_settings.py │ │ │ │ │ ├── search.py │ │ │ │ │ └── subtitles.py │ │ │ │ ├── google_drive.py │ │ │ │ ├── history.py │ │ │ │ ├── home/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── add_shows.py │ │ │ │ │ └── postprocess.py │ │ │ │ ├── login.py │ │ │ │ ├── logout.py │ │ │ │ ├── logs.py │ │ │ │ ├── manage/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── queues.py │ │ │ │ ├── not_found.py │ │ │ │ ├── root.py │ │ │ │ └── web_file_browser.py │ │ │ ├── helpers.py │ │ │ └── views/ │ │ │ ├── announcements.mako │ │ │ ├── api_builder.mako │ │ │ ├── config/ │ │ │ │ ├── anime.mako │ │ │ │ ├── backup_restore.mako │ │ │ │ ├── general.mako │ │ │ │ ├── index.mako │ │ │ │ ├── notifications.mako │ │ │ │ ├── postprocessing.mako │ │ │ │ ├── providers.mako │ │ │ │ ├── quality_settings.mako │ │ │ │ ├── search.mako │ │ │ │ └── subtitles.mako │ │ │ ├── errors/ │ │ │ │ └── 500.mako │ │ │ ├── generic_message.mako │ │ │ ├── history.mako │ │ │ ├── home/ │ │ │ │ ├── add_existing_shows.mako │ │ │ │ ├── add_shows.mako │ │ │ │ ├── display_show.mako │ │ │ │ ├── edit_show.mako │ │ │ │ ├── imdb_shows.mako │ │ │ │ ├── index.mako │ │ │ │ ├── mass_add_table.mako │ │ │ │ ├── new_show.mako │ │ │ │ ├── postprocess.mako │ │ │ │ ├── provider_status.mako │ │ │ │ ├── restart.mako │ │ │ │ ├── server_status.mako │ │ │ │ ├── test_renaming.mako │ │ │ │ └── trakt_shows.mako │ │ │ ├── includes/ │ │ │ │ ├── add_show_options.mako │ │ │ │ ├── blackwhitelist.mako │ │ │ │ ├── modals.mako │ │ │ │ ├── quality_chooser.mako │ │ │ │ ├── quality_defaults.mako │ │ │ │ └── root_dirs.mako │ │ │ ├── layouts/ │ │ │ │ ├── config.mako │ │ │ │ └── main.mako │ │ │ ├── login.mako │ │ │ ├── login_failed.mako │ │ │ ├── logs/ │ │ │ │ ├── errors.mako │ │ │ │ └── view.mako │ │ │ ├── manage/ │ │ │ │ ├── backlog_overview.mako │ │ │ │ ├── episode_statuses.mako │ │ │ │ ├── failed_downloads.mako │ │ │ │ ├── mass_edit.mako │ │ │ │ ├── mass_update.mako │ │ │ │ ├── queues.mako │ │ │ │ ├── subtitles_missed.mako │ │ │ │ └── torrents.mako │ │ │ └── schedule.mako │ │ ├── websession/ │ │ │ └── __init__.py │ │ └── websocket/ │ │ └── __init__.py │ ├── libs/ │ │ ├── __init__.py │ │ ├── adba/ │ │ │ ├── __init__.py │ │ │ ├── aniDBAbstracter.py │ │ │ ├── aniDBcommands.py │ │ │ ├── aniDBerrors.py │ │ │ ├── aniDBfileInfo.py │ │ │ ├── aniDBlink.py │ │ │ ├── aniDBmaper.py │ │ │ ├── aniDBresponses.py │ │ │ └── aniDBtvDBmaper.py │ │ ├── fanart/ │ │ │ ├── __init__.py │ │ │ ├── errors.py │ │ │ ├── immutable.py │ │ │ ├── items.py │ │ │ ├── movie.py │ │ │ ├── music.py │ │ │ └── tv.py │ │ ├── rtorrentlib/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── err.py │ │ │ ├── file.py │ │ │ ├── group.py │ │ │ ├── lib/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bencode.py │ │ │ │ ├── torrentparser.py │ │ │ │ └── xmlrpc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── basic_auth.py │ │ │ │ ├── http.py │ │ │ │ ├── requests_transport.py │ │ │ │ └── scgi.py │ │ │ ├── peer.py │ │ │ ├── rpc/ │ │ │ │ └── __init__.py │ │ │ ├── torrent.py │ │ │ └── tracker.py │ │ ├── trakt/ │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── core/ │ │ │ │ ├── __init__.py │ │ │ │ ├── configuration.py │ │ │ │ ├── context_collection.py │ │ │ │ ├── context_stack.py │ │ │ │ ├── emitter.py │ │ │ │ ├── errors.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── helpers.py │ │ │ │ ├── http.py │ │ │ │ ├── keylock.py │ │ │ │ ├── pagination.py │ │ │ │ └── request.py │ │ │ ├── helpers.py │ │ │ ├── hooks.py │ │ │ ├── interfaces/ │ │ │ │ ├── __init__.py │ │ │ │ ├── auth.py │ │ │ │ ├── base/ │ │ │ │ │ └── __init__.py │ │ │ │ ├── calendars.py │ │ │ │ ├── movies/ │ │ │ │ │ └── __init__.py │ │ │ │ ├── oauth/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── device.py │ │ │ │ │ └── pin.py │ │ │ │ ├── recommendations.py │ │ │ │ ├── scrobble.py │ │ │ │ ├── search.py │ │ │ │ ├── shows/ │ │ │ │ │ └── __init__.py │ │ │ │ ├── sync/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── collection.py │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── mixins.py │ │ │ │ │ ├── history.py │ │ │ │ │ ├── playback.py │ │ │ │ │ ├── ratings.py │ │ │ │ │ ├── watched.py │ │ │ │ │ └── watchlist.py │ │ │ │ └── users/ │ │ │ │ ├── __init__.py │ │ │ │ ├── lists/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── list_.py │ │ │ │ └── settings.py │ │ │ ├── mapper/ │ │ │ │ ├── __init__.py │ │ │ │ ├── comment.py │ │ │ │ ├── core/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── base.py │ │ │ │ ├── list.py │ │ │ │ ├── list_item.py │ │ │ │ ├── search.py │ │ │ │ ├── summary.py │ │ │ │ └── sync.py │ │ │ ├── objects/ │ │ │ │ ├── __init__.py │ │ │ │ ├── comment.py │ │ │ │ ├── core/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── helpers.py │ │ │ │ ├── episode.py │ │ │ │ ├── list/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ └── custom.py │ │ │ │ ├── media.py │ │ │ │ ├── movie.py │ │ │ │ ├── person.py │ │ │ │ ├── rating.py │ │ │ │ ├── season.py │ │ │ │ ├── show.py │ │ │ │ └── video.py │ │ │ ├── sphinxext.py │ │ │ └── version.py │ │ └── upnpclient/ │ │ ├── __init__.py │ │ ├── const.py │ │ ├── errors.py │ │ ├── marshal.py │ │ ├── soap.py │ │ ├── ssdp.py │ │ ├── upnp.py │ │ └── util.py │ ├── locale/ │ │ ├── af_ZA/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ar_SA/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ca_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── cs_CZ/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── da_DK/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── de_DE/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── el_GR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── en_US/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── es_ES/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── fi_FI/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── fr_FR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── he_IL/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── hu_HU/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── it_IT/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ja_JP/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ko_KR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── messages.pot │ │ ├── nl_NL/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── no_NO/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── pl_PL/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── pt_BR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── pt_PT/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ro_RO/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── ru_RU/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── sr_SP/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── sv_SE/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── tr_TR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── uk_UA/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── vi_VN/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ ├── zh_CN/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── messages.mo │ │ │ └── messages.po │ │ └── zh_TW/ │ │ └── LC_MESSAGES/ │ │ ├── messages.mo │ │ └── messages.po │ ├── metadata_providers/ │ │ ├── __init__.py │ │ ├── kodi.py │ │ ├── kodi_12plus.py │ │ ├── mede8er.py │ │ ├── mediabrowser.py │ │ ├── ps3.py │ │ ├── tivo.py │ │ └── wdtv.py │ ├── notification_providers/ │ │ ├── __init__.py │ │ ├── alexa.py │ │ ├── boxcar2.py │ │ ├── discord.py │ │ ├── emailnotify.py │ │ ├── emby.py │ │ ├── freemobile.py │ │ ├── growl.py │ │ ├── join.py │ │ ├── kodi.py │ │ ├── libnotify.py │ │ ├── nma.py │ │ ├── nmj.py │ │ ├── nmjv2.py │ │ ├── plex.py │ │ ├── prowl.py │ │ ├── pushalot.py │ │ ├── pushbullet.py │ │ ├── pushover.py │ │ ├── pytivo.py │ │ ├── slack.py │ │ ├── synoindex.py │ │ ├── synology.py │ │ ├── telegram.py │ │ ├── trakt.py │ │ ├── tweet.py │ │ └── twilio_notifer.py │ ├── search_providers/ │ │ ├── __init__.py │ │ ├── nzb/ │ │ │ ├── __init__.py │ │ │ ├── anizb.py │ │ │ └── binsearch.py │ │ └── torrent/ │ │ ├── 1337x.py │ │ ├── __init__.py │ │ ├── abnormal.py │ │ ├── alpharatio.py │ │ ├── bitcannon.py │ │ ├── btn.py │ │ ├── danishbits.py │ │ ├── filelist.py │ │ ├── gktorrent.py │ │ ├── hd4free.py │ │ ├── hdbits.py │ │ ├── hdspace.py │ │ ├── hdtorrents.py │ │ ├── hounddawgs.py │ │ ├── immortalseed.py │ │ ├── iptorrents.py │ │ ├── kat.py │ │ ├── limetorrents.py │ │ ├── magnetdl.py │ │ ├── morethantv.py │ │ ├── ncore.py │ │ ├── nebulance.py │ │ ├── newpct.py │ │ ├── norbits.py │ │ ├── nyaatorrents.py │ │ ├── pretome.py │ │ ├── scenetime.py │ │ ├── shazbat.py │ │ ├── speedcd.py │ │ ├── thepiratebay.py │ │ ├── tokyotoshokan.py │ │ ├── torrentbytes.py │ │ ├── torrentday.py │ │ ├── torrentleech.py │ │ ├── torrentproject.py │ │ ├── torrentz.py │ │ ├── tvchaosuk.py │ │ ├── xthor.py │ │ └── yggtorrent.py │ ├── series_providers/ │ │ ├── __init__.py │ │ ├── cache.py │ │ ├── exceptions.py │ │ ├── helpers.py │ │ └── thetvdb.py │ ├── subtitles/ │ │ ├── __init__.py │ │ ├── converters/ │ │ │ ├── __init__.py │ │ │ └── subscene.py │ │ ├── providers/ │ │ │ ├── __init__.py │ │ │ ├── itasa.py │ │ │ ├── subscene.py │ │ │ ├── utils.py │ │ │ └── wizdom.py │ │ └── refiners/ │ │ ├── __init__.py │ │ ├── release.py │ │ └── tv_episode.py │ └── version.txt ├── src/ │ ├── app.js │ ├── js/ │ │ └── core.js │ └── scss/ │ └── core.scss ├── tests/ │ ├── __init__.py │ └── test_web.py ├── tox.ini └── webpack.config.js
Showing preview only (344K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4488 symbols across 370 files)
FILE: checksum-generator.py
function md5 (line 32) | def md5(filename):
FILE: checksum-validator.py
function md5 (line 31) | def md5(filename):
FILE: setup.py
function requirements (line 10) | def requirements():
class CleanCommand (line 15) | class CleanCommand(Command):
method initialize_options (line 19) | def initialize_options(self):
method finalize_options (line 22) | def finalize_options(self):
method run (line 25) | def run(self):
FILE: sickrage/__init__.py
class SiCKRAGEService (line 82) | class SiCKRAGEService(win32serviceutil.ServiceFramework):
method __init__ (line 95) | def __init__(self, args):
method SvcDoRun (line 99) | def SvcDoRun(self):
method SvcStop (line 105) | def SvcStop(self):
method Logger (line 112) | def Logger(self, state, msg):
class Daemon (line 118) | class Daemon(object):
method __init__ (line 123) | def __init__(self, pidfile, working_dir="/"):
method daemonize (line 131) | def daemonize(self):
method delpid (line 177) | def delpid(self):
method start (line 181) | def start(self):
method stop (line 201) | def stop(self):
function version (line 232) | def version():
function install_type (line 237) | def install_type():
function changelog (line 245) | def changelog():
function check_requirements (line 251) | def check_requirements():
function verify_checksums (line 276) | def verify_checksums(remove_unverified=False):
function handle_windows_service (line 307) | def handle_windows_service():
function main (line 320) | def main():
function start (line 336) | def start():
FILE: sickrage/autoProcessTV/autoProcessTV.py
function processEpisode (line 30) | def processEpisode(dir_to_process, org_nzb_name=None, status=None):
FILE: sickrage/autoProcessTV/mediaToSiCKRAGE.py
function utorrent (line 69) | def utorrent():
function transmission (line 83) | def transmission():
function deluge (line 90) | def deluge():
function blackhole (line 103) | def blackhole():
function main (line 124) | def main():
FILE: sickrage/clients/__init__.py
class GenericClient (line 43) | class GenericClient(object):
method __init__ (line 44) | def __init__(self, name, host=None, username=None, password=None):
method response (line 60) | def response(self):
method response (line 64) | def response(self, value):
method _request (line 67) | def _request(self, method='get', params=None, data=None, *args, **kwar...
method _get_auth (line 101) | def _get_auth(self):
method test_authentication (line 107) | def test_authentication(self):
class TorrentClient (line 119) | class TorrentClient(GenericClient):
method _add_torrent_uri (line 120) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 127) | def _add_torrent_file(self, result):
method _set_torrent_label (line 134) | def _set_torrent_label(self, result):
method _set_torrent_ratio (line 141) | def _set_torrent_ratio(self, result):
method _set_torrent_seed_time (line 148) | def _set_torrent_seed_time(self, result):
method _set_torrent_priority (line 155) | def _set_torrent_priority(self, result):
method _set_torrent_path (line 162) | def _set_torrent_path(self, torrent_path):
method _set_torrent_pause (line 169) | def _set_torrent_pause(self, result):
method _get_torrent_hash (line 177) | def _get_torrent_hash(result):
method send_torrent (line 204) | def send_torrent(self, result):
class NZBClient (line 260) | class NZBClient(GenericClient):
method _add_nzb_uri (line 261) | def _add_nzb_uri(self, result):
method _add_nzb_file (line 268) | def _add_nzb_file(self, result):
method send_nzb (line 275) | def send_nzb(self, result):
function get_client_module (line 282) | def get_client_module(name, client_type):
function get_client_instance (line 286) | def get_client_instance(name, client_type):
FILE: sickrage/clients/nzb/download_station.py
class DownloadStationAPI (line 33) | class DownloadStationAPI(NZBClient):
method __init__ (line 34) | def __init__(self, host=None, username=None, password=None):
method _check_response (line 90) | def _check_response(self):
method _get_auth (line 110) | def _get_auth(self):
method _add_nzb_uri (line 137) | def _add_nzb_uri(self, result):
method _add_nzb_file (line 143) | def _add_nzb_file(self, result):
method _check_destination (line 149) | def _check_destination(self):
method _send_dsm_request (line 216) | def _send_dsm_request(self, method, data, **kwargs):
FILE: sickrage/clients/nzb/nzbget.py
class NZBGet (line 34) | class NZBGet(object):
method sendNZB (line 36) | def sendNZB(nzb, proper=False):
FILE: sickrage/clients/nzb/sabnzbd.py
class SabNZBd (line 32) | class SabNZBd(object):
method sendNZB (line 34) | def sendNZB(nzb):
method _check_sab_response (line 96) | def _check_sab_response(jdata):
method get_sab_access_method (line 110) | def get_sab_access_method(host=None):
method test_authentication (line 136) | def test_authentication(host=None, username=None, password=None, apike...
FILE: sickrage/clients/torrent/deluge.py
class DelugeAPI (line 30) | class DelugeAPI(TorrentClient):
method __init__ (line 31) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 38) | def _get_auth(self):
method _add_torrent_uri (line 120) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 131) | def _add_torrent_file(self, result):
method _set_torrent_label (line 142) | def _set_torrent_label(self, result):
method _set_torrent_ratio (line 186) | def _set_torrent_ratio(self, result):
method _set_torrent_path (line 208) | def _set_torrent_path(self, result):
method _set_torrent_pause (line 226) | def _set_torrent_pause(self, result):
FILE: sickrage/clients/torrent/deluged.py
class DelugeDAPI (line 32) | class DelugeDAPI(TorrentClient):
method __init__ (line 35) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 38) | def _get_auth(self):
method connect (line 44) | def connect(self, reconnect=False):
method _add_torrent_uri (line 54) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 72) | def _add_torrent_file(self, result):
method _set_torrent_label (line 94) | def _set_torrent_label(self, result):
method _set_torrent_ratio (line 111) | def _set_torrent_ratio(self, result):
method _set_torrent_priority (line 117) | def _set_torrent_priority(self, result):
method _set_torrent_path (line 122) | def _set_torrent_path(self, result):
method _set_torrent_pause (line 129) | def _set_torrent_pause(self, result):
method test_authentication (line 135) | def test_authentication(self):
class DelugeRPC (line 142) | class DelugeRPC(object):
method __init__ (line 149) | def __init__(self, host='localhost', port=58846, username=None, passwo...
method connect (line 157) | def connect(self):
method disconnect (line 162) | def disconnect(self):
method test (line 165) | def test(self):
method add_torrent_magnet (line 171) | def add_torrent_magnet(self, torrent, options, torrent_hash):
method add_torrent_file (line 187) | def add_torrent_file(self, filename, torrent, options, torrent_hash):
method set_torrent_label (line 203) | def set_torrent_label(self, torrent_id, label):
method set_torrent_path (line 217) | def set_torrent_path(self, torrent_id, path):
method set_torrent_priority (line 232) | def set_torrent_priority(self, torrent_ids, priority):
method set_torrent_ratio (line 246) | def set_torrent_ratio(self, torrent_ids, ratio):
method pause_torrent (line 261) | def pause_torrent(self, torrent_ids):
method _check_torrent (line 275) | def _check_torrent(self, torrent_hash):
FILE: sickrage/clients/torrent/download_station.py
class DownloadStationAPI (line 31) | class DownloadStationAPI(TorrentClient):
method __init__ (line 32) | def __init__(self, host=None, username=None, password=None):
method _check_response (line 89) | def _check_response(self):
method _get_auth (line 109) | def _get_auth(self):
method _get_api_info (line 136) | def _get_api_info(self, method):
method _add_torrent_uri (line 161) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 169) | def _add_torrent_file(self, result):
method _check_destination (line 178) | def _check_destination(self):
method _send_dsm_request (line 244) | def _send_dsm_request(self, method, data, **kwargs):
FILE: sickrage/clients/torrent/mlnet.py
class mlnetAPI (line 26) | class mlnetAPI(TorrentClient):
method __init__ (line 27) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 33) | def _get_auth(self):
method _add_torrent_uri (line 42) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 48) | def _add_torrent_file(self, result):
FILE: sickrage/clients/torrent/putio.py
class PutioAPI (line 29) | class PutioAPI(TorrentClient):
method __init__ (line 30) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 37) | def _get_auth(self):
method _add_torrent_uri (line 68) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 87) | def _add_torrent_file(self, result):
FILE: sickrage/clients/torrent/qbittorrent.py
class QBittorrentAPI (line 31) | class QBittorrentAPI(TorrentClient):
method __init__ (line 32) | def __init__(self, host=None, username=None, password=None):
method get_api_version (line 36) | def get_api_version(self):
method _get_auth (line 60) | def _get_auth(self):
method _set_torrent_label (line 89) | def _set_torrent_label(self, result):
method _add_torrent_uri (line 107) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 113) | def _add_torrent_file(self, result):
method _set_torrent_priority (line 119) | def _set_torrent_priority(self, result):
method _set_torrent_pause (line 126) | def _set_torrent_pause(self, result):
method remove_torrent (line 133) | def remove_torrent(self, info_hash):
FILE: sickrage/clients/torrent/rtorrent.py
class rTorrentAPI (line 31) | class rTorrentAPI(TorrentClient):
method __init__ (line 32) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 35) | def _get_auth(self):
method _add_torrent_uri (line 58) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 93) | def _add_torrent_file(self, result):
method _set_torrent_ratio (line 132) | def _set_torrent_ratio(self, name):
method test_authentication (line 167) | def test_authentication(self):
FILE: sickrage/clients/torrent/transmission.py
class TransmissionAPI (line 33) | class TransmissionAPI(TorrentClient):
method __init__ (line 34) | def __init__(self, host=None, username=None, password=None):
method _get_auth (line 48) | def _get_auth(self):
method _add_torrent_uri (line 73) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 90) | def _add_torrent_file(self, result):
method _set_torrent_ratio (line 107) | def _set_torrent_ratio(self, result):
method _set_torrent_seed_time (line 135) | def _set_torrent_seed_time(self, result):
method _set_torrent_priority (line 154) | def _set_torrent_priority(self, result):
method remove_torrent (line 177) | def remove_torrent(self, info_hash):
FILE: sickrage/clients/torrent/utorrent.py
class uTorrentAPI (line 29) | class uTorrentAPI(TorrentClient):
method __init__ (line 30) | def __init__(self, host=None, username=None, password=None):
method _request (line 34) | def _request(self, method='get', data=None, params=None, *args, **kwar...
method _get_auth (line 44) | def _get_auth(self):
method _add_torrent_uri (line 59) | def _add_torrent_uri(self, result):
method _add_torrent_file (line 63) | def _add_torrent_file(self, result):
method _set_torrent_label (line 68) | def _set_torrent_label(self, result):
method _set_torrent_ratio (line 82) | def _set_torrent_ratio(self, result):
method _set_torrent_seed_time (line 105) | def _set_torrent_seed_time(self, result):
method _set_torrent_priority (line 125) | def _set_torrent_priority(self, result):
method _set_torrent_pause (line 132) | def _set_torrent_pause(self, result):
FILE: sickrage/core/__init__.py
class Core (line 93) | class Core(object):
method __init__ (line 94) | def __init__(self):
method start (line 237) | def start(self):
method init_sentry (line 585) | def init_sentry(self):
method server_checkup (line 636) | def server_checkup(self):
method load_shows (line 667) | def load_shows(self):
method startup_message (line 692) | def startup_message(self):
method launch_browser (line 702) | def launch_browser(self):
method shutdown (line 708) | def shutdown(self, restart=False):
method restart (line 761) | def restart(self):
method shutdown_trigger (line 764) | def shutdown_trigger(self):
FILE: sickrage/core/amqp/__init__.py
class AMQPBase (line 32) | class AMQPBase(object):
method __init__ (line 33) | def __init__(self):
method connect (line 46) | def connect(self):
method disconnect (line 84) | def disconnect(self):
method on_connection_close (line 100) | def on_connection_close(self, connection, reason):
method on_connection_open (line 105) | def on_connection_open(self, connection):
method on_connection_open_error (line 109) | def on_connection_open_error(self, connection, reason):
method reconnect (line 113) | def reconnect(self):
method on_channel_open (line 117) | def on_channel_open(self, channel):
method stop (line 120) | def stop(self):
FILE: sickrage/core/amqp/consumer.py
class AMQPConsumer (line 35) | class AMQPConsumer(AMQPBase):
method __init__ (line 36) | def __init__(self):
method events (line 40) | def events(self):
method on_channel_open (line 72) | def on_channel_open(self, channel):
method on_qos_applied (line 76) | def on_qos_applied(self, method):
method on_message (line 79) | def on_message(self, unused_channel, basic_deliver, properties, body):
method start_consuming (line 98) | def start_consuming(self):
FILE: sickrage/core/announcements.py
class Announcement (line 30) | class Announcement(object):
method __init__ (line 35) | def __init__(self, title, description, image, date, ahash):
method seen (line 43) | def seen(self):
method seen (line 52) | def seen(self, value):
class Announcements (line 61) | class Announcements(object):
method __init__ (line 67) | def __init__(self):
method add (line 72) | def add(self, ahash, title, description, image, date):
method clear (line 80) | def clear(self, ahash=None):
method get_all (line 93) | def get_all(self):
method get (line 96) | def get(self, ahash):
method count (line 99) | def count(self):
FILE: sickrage/core/api/__init__.py
class API (line 18) | class API(object):
method __init__ (line 19) | def __init__(self):
method imdb (line 26) | def imdb(self):
method server (line 30) | def server(self):
method search_provider (line 34) | def search_provider(self):
method series_provider (line 38) | def series_provider(self):
method announcement (line 42) | def announcement(self):
method google (line 46) | def google(self):
method torrent (line 50) | def torrent(self):
method scene_exceptions (line 54) | def scene_exceptions(self):
method alexa (line 58) | def alexa(self):
method session (line 62) | def session(self):
method token (line 74) | def token(self):
method token_expiration (line 83) | def token_expiration(self):
method token_time_remaining (line 98) | def token_time_remaining(self):
method token_is_expired (line 102) | def token_is_expired(self):
method token_url (line 106) | def token_url(self):
method health (line 110) | def health(self):
method userinfo (line 128) | def userinfo(self):
method token_updater (line 131) | def token_updater(self, value):
method login (line 134) | def login(self):
method logout (line 158) | def logout(self):
method refresh_token (line 165) | def refresh_token(self):
method allowed_usernames (line 184) | def allowed_usernames(self):
method download_privatekey (line 187) | def download_privatekey(self):
method upload_privatekey (line 190) | def upload_privatekey(self, privatekey):
method network_timezones (line 193) | def network_timezones(self):
method request (line 196) | def request(self, method, url, timeout=120, **kwargs):
method throttle_hook (line 270) | def throttle_hook(response, **kwargs):
class ServerAPI (line 277) | class ServerAPI:
method __init__ (line 278) | def __init__(self, api):
method register_server (line 281) | def register_server(self, ip_addresses, web_protocol, web_port, web_...
method unregister_server (line 292) | def unregister_server(self, server_id):
method update_server (line 299) | def update_server(self, server_id, ip_addresses, web_protocol, web_p...
method get_status (line 311) | def get_status(self, server_id):
method get_server_certificate (line 314) | def get_server_certificate(self, server_id):
method declare_amqp_queue (line 317) | def declare_amqp_queue(self, server_id):
method upload_config (line 320) | def upload_config(self, server_id, pkey_sig, config):
method download_config (line 328) | def download_config(self, server_id, pkey_sig):
class AnnouncementsAPI (line 335) | class AnnouncementsAPI:
method __init__ (line 336) | def __init__(self, api):
method get_announcements (line 339) | def get_announcements(self):
class SearchProviderAPI (line 342) | class SearchProviderAPI:
method __init__ (line 343) | def __init__(self, api):
method get_url (line 346) | def get_url(self, provider):
method get_status (line 350) | def get_status(self, provider):
method get_search_result (line 354) | def get_search_result(self, provider, series_id, season, episode):
method add_search_result (line 358) | def add_search_result(self, provider, data):
class TorrentAPI (line 361) | class TorrentAPI:
method __init__ (line 362) | def __init__(self, api):
method get_trackers (line 365) | def get_trackers(self):
method get_torrent (line 369) | def get_torrent(self, hash):
method add_torrent (line 373) | def add_torrent(self, url):
class IMDbAPI (line 376) | class IMDbAPI:
method __init__ (line 377) | def __init__(self, api):
method search_by_imdb_title (line 380) | def search_by_imdb_title(self, title):
method search_by_imdb_id (line 384) | def search_by_imdb_id(self, imdb_id):
class GoogleDriveAPI (line 388) | class GoogleDriveAPI:
method __init__ (line 389) | def __init__(self, api):
method is_connected (line 392) | def is_connected(self):
method upload (line 396) | def upload(self, file, folder):
method download (line 400) | def download(self, id):
method delete (line 404) | def delete(self, id):
method search_files (line 408) | def search_files(self, id, term):
method list_files (line 412) | def list_files(self, id):
method clear_folder (line 416) | def clear_folder(self, id):
class SceneExceptions (line 420) | class SceneExceptions:
method __init__ (line 421) | def __init__(self, api):
method get (line 424) | def get(self, *args, **kwargs):
method search_by_id (line 428) | def search_by_id(self, series_id):
class AlexaAPI (line 432) | class AlexaAPI:
method __init__ (line 433) | def __init__(self, api):
method send_notification (line 436) | def send_notification(self, message):
class SeriesProviderAPI (line 439) | class SeriesProviderAPI:
method __init__ (line 440) | def __init__(self, api):
method search (line 443) | def search(self, provider, query, language='eng'):
method search_by_id (line 447) | def search_by_id(self, provider, remote_id, language='eng'):
method get_series_info (line 451) | def get_series_info(self, provider, series_id, language='eng'):
method get_episodes_info (line 455) | def get_episodes_info(self, provider, series_id, season_type='defaul...
method languages (line 459) | def languages(self, provider):
method updates (line 463) | def updates(self, provider, since):
FILE: sickrage/core/api/exceptions.py
class APIError (line 1) | class APIError(Exception):
method __init__ (line 6) | def __init__(self, status, message, response):
method status (line 12) | def status(self):
method message (line 16) | def message(self):
method response (line 20) | def response(self):
method __unicode__ (line 23) | def __unicode__(self):
method __repr__ (line 26) | def __repr__(self):
class APIResourceDoesNotExist (line 30) | class APIResourceDoesNotExist(APIError):
class APIUnauthorized (line 35) | class APIUnauthorized(APIError):
class APITokenExpired (line 40) | class APITokenExpired(APIError):
FILE: sickrage/core/auth/__init__.py
class KeycloakOpenidConnectCustom (line 31) | class KeycloakOpenidConnectCustom(KeycloakOpenidConnect):
method get_path_well_known (line 32) | def get_path_well_known(self):
class AuthServer (line 36) | class AuthServer(object):
method __init__ (line 40) | def __init__(self):
method client (line 47) | def client(self):
method health (line 51) | def health(self):
method get_url (line 68) | def get_url(self, *args, **kwargs):
method certs (line 74) | def certs(self):
method logout (line 82) | def logout(self, *args, **kwargs):
method decode_token (line 88) | def decode_token(self, *args, **kwargs):
method refresh_token (line 91) | def refresh_token(self, *args, **kwargs):
method authorization_code (line 97) | def authorization_code(self, *args, **kwargs):
method authorization_url (line 103) | def authorization_url(self, **kwargs):
method token_exchange (line 109) | def token_exchange(self, access_token, scope='offline_access'):
method __get_client (line 116) | def __get_client(self) -> KeycloakOpenidConnect:
method __get_server (line 123) | def __get_server(self) -> KeycloakRealm:
FILE: sickrage/core/auto_backup.py
class AutoBackup (line 5) | class AutoBackup(object):
method __init__ (line 6) | def __init__(self, *args, **kwargs):
method task (line 9) | def task(self):
FILE: sickrage/core/blackandwhitelist.py
class BlackAndWhiteList (line 25) | class BlackAndWhiteList(object):
method __init__ (line 29) | def __init__(self, series_id, series_provider_id):
method load (line 36) | def load(self):
method _add_keywords (line 51) | def _add_keywords(self, table, values):
method set_black_keywords (line 69) | def set_black_keywords(self, values):
method set_white_keywords (line 86) | def set_white_keywords(self, values):
method _load_list (line 102) | def _load_list(self, keyword_list):
method is_valid (line 115) | def is_valid(self, result):
class BlackWhitelistNoShowIDException (line 151) | class BlackWhitelistNoShowIDException(Exception):
FILE: sickrage/core/caches/image_cache.py
class ImageCache (line 30) | class ImageCache(object):
method __init__ (line 47) | def __init__(self):
method __del__ (line 50) | def __del__(self):
method _cache_dir (line 53) | def _cache_dir(self):
method _cache_series_dir (line 59) | def _cache_series_dir(self, series_id):
method _cache_seasons_dir (line 65) | def _cache_seasons_dir(self, series_id):
method _cache_episodes_dir (line 72) | def _cache_episodes_dir(self, series_id):
method _thumbnails_dir (line 78) | def _thumbnails_dir(self):
method poster_path (line 84) | def poster_path(self, series_id, season_id=None, episode_id=None):
method banner_path (line 101) | def banner_path(self, series_id, season_id=None, episode_id=None):
method fanart_path (line 111) | def fanart_path(self, series_id, season_id=None, episode_id=None):
method fanart_thumb_path (line 121) | def fanart_thumb_path(self, series_id, season_id=None, episode_id=None):
method poster_thumb_path (line 131) | def poster_thumb_path(self, series_id, season_id=None, episode_id=None):
method banner_thumb_path (line 141) | def banner_thumb_path(self, series_id, season_id=None, episode_id=None):
method has_poster (line 151) | def has_poster(self, series_id, season_id=None, episode_id=None):
method has_banner (line 159) | def has_banner(self, series_id, season_id=None, episode_id=None):
method has_fanart (line 167) | def has_fanart(self, series_id, season_id=None, episode_id=None):
method has_poster_thumbnail (line 175) | def has_poster_thumbnail(self, series_id, season_id=None, episode_id=N...
method has_banner_thumbnail (line 183) | def has_banner_thumbnail(self, series_id, season_id=None, episode_id=N...
method which_type (line 191) | def which_type(self, path):
method _cache_image_from_file (line 230) | def _cache_image_from_file(self, image_path, img_type, series_id):
method _cache_image_from_series_provider (line 266) | def _cache_image_from_series_provider(self, show_obj, img_type, force=...
method _cache_episode_images_from_series_provider (line 302) | def _cache_episode_images_from_series_provider(self, show_obj, force=F...
method fill_cache (line 325) | def fill_cache(self, show_obj, force=False):
FILE: sickrage/core/caches/name_cache.py
class NameCache (line 30) | class NameCache(object):
method __init__ (line 31) | def __init__(self, *args, **kwargs):
method should_update (line 38) | def should_update(self, show):
method put (line 44) | def put(self, name, series_id=0):
method get (line 69) | def get(self, name):
method clear (line 80) | def clear(self, series_id=None, name=None):
method load (line 99) | def load(self):
method save (line 103) | def save(self):
FILE: sickrage/core/caches/tv_cache.py
class TVCache (line 42) | class TVCache(object):
method __init__ (line 43) | def __init__(self, provider, **kwargs):
method clear (line 50) | def clear(self):
method _get_title_and_url (line 56) | def _get_title_and_url(self, item):
method _get_result_stats (line 59) | def _get_result_stats(self, item):
method _get_size (line 62) | def _get_size(self, item):
method _get_rss_data (line 65) | def _get_rss_data(self):
method _check_auth (line 69) | def _check_auth(self, data):
method check_item (line 72) | def check_item(self, title, url):
method update (line 75) | def update(self, force=False):
method get_rss_feed (line 101) | def get_rss_feed(self, url, params=None):
method _translateTitle (line 112) | def _translateTitle(self, title):
method _translateLinkURL (line 115) | def _translateLinkURL(self, url):
method _parseItem (line 118) | def _parseItem(self, item):
method last_update (line 132) | def last_update(self):
method last_update (line 146) | def last_update(self, toDate):
method last_search (line 162) | def last_search(self):
method last_search (line 176) | def last_search(self, toDate):
method should_update (line 191) | def should_update(self):
method shouldClearCache (line 197) | def shouldClearCache(self):
method add_cache_entry (line 203) | def add_cache_entry(self, name, url, seeders, leechers, size):
method search_cache (line 266) | def search_cache(self, series_id, series_provider_id, season, episode,...
FILE: sickrage/core/classes.py
class UIError (line 28) | class UIError(object):
method __init__ (line 33) | def __init__(self, message):
class UIWarning (line 39) | class UIWarning(object):
method __init__ (line 44) | def __init__(self, message):
class ErrorViewer (line 50) | class ErrorViewer(object):
method __init__ (line 56) | def __init__(self):
method add (line 59) | def add(self, error, ui=False):
method clear (line 62) | def clear(self):
method get (line 65) | def get(self, *args, **kwargs):
method count (line 68) | def count(self):
class WarningViewer (line 72) | class WarningViewer(object):
method __init__ (line 78) | def __init__(self):
method add (line 81) | def add(self, warning, ui=False):
method clear (line 84) | def clear(self):
method get (line 87) | def get(self, *args, **kwargs):
method count (line 90) | def count(self):
FILE: sickrage/core/common.py
class EpisodeStatus (line 45) | class EpisodeStatus(IntEnum):
method _strings (line 61) | def _strings(cls):
method _prefix_strings (line 79) | def _prefix_strings(cls):
method display_name (line 91) | def display_name(self):
method prefix_name (line 98) | def prefix_name(self):
method composites (line 102) | def composites(status):
class Overview (line 114) | class Overview(enum.Enum):
method _strings (line 126) | def _strings(self):
method css_name (line 140) | def css_name(self):
class Quality (line 144) | class Quality(object):
method combine_qualities (line 146) | def combine_qualities(anyQualities, bestQualities):
method split_quality (line 158) | def split_quality(quality):
method name_quality (line 168) | def name_quality(name, anime=False):
method scene_quality (line 192) | def scene_quality(name, anime=False):
method composite_status (line 279) | def composite_status(status, quality):
method split_composite_status (line 283) | def split_composite_status(status):
method quality_from_file_meta (line 295) | def quality_from_file_meta(filename):
method scene_quality_from_name (line 337) | def scene_quality_from_name(name, quality):
method status_from_name (line 396) | def status_from_name(name, assume=True, anime=False):
method from_guessit (line 409) | def from_guessit(guess):
method to_guessit (line 461) | def to_guessit(quality):
method to_guessit_source (line 484) | def to_guessit_source(quality):
method to_guessit_screen_size (line 504) | def to_guessit_screen_size(quality):
class Qualities (line 526) | class Qualities(enum.IntFlag):
method _strings (line 562) | def _strings(self):
method _preset_strings (line 584) | def _preset_strings(self):
method _scene_strings (line 598) | def _scene_strings(self):
method _css_strings (line 620) | def _css_strings(self):
method _combined_strings (line 645) | def _combined_strings(self):
method display_name (line 653) | def display_name(self):
method scene_name (line 663) | def scene_name(self):
method css_name (line 669) | def css_name(self):
method is_preset (line 677) | def is_preset(self):
method is_combined (line 681) | def is_combined(self):
FILE: sickrage/core/config/__init__.py
class Config (line 45) | class Config(object):
method __init__ (line 46) | def __init__(self, db_type, db_prefix, db_host, db_port, db_username, ...
method user (line 54) | def user(self):
method general (line 58) | def general(self):
method gui (line 62) | def gui(self):
method blackhole (line 66) | def blackhole(self):
method sabnzbd (line 70) | def sabnzbd(self):
method nzbget (line 74) | def nzbget(self):
method synology (line 78) | def synology(self):
method torrent (line 82) | def torrent(self):
method kodi (line 86) | def kodi(self):
method plex (line 90) | def plex(self):
method emby (line 94) | def emby(self):
method growl (line 98) | def growl(self):
method freemobile (line 102) | def freemobile(self):
method telegram (line 106) | def telegram(self):
method join_app (line 110) | def join_app(self):
method prowl (line 114) | def prowl(self):
method twitter (line 118) | def twitter(self):
method twilio (line 122) | def twilio(self):
method boxcar2 (line 126) | def boxcar2(self):
method pushover (line 130) | def pushover(self):
method libnotify (line 134) | def libnotify(self):
method nmj (line 138) | def nmj(self):
method nmjv2 (line 142) | def nmjv2(self):
method slack (line 146) | def slack(self):
method discord (line 150) | def discord(self):
method trakt (line 154) | def trakt(self):
method pytivo (line 158) | def pytivo(self):
method nma (line 162) | def nma(self):
method pushalot (line 166) | def pushalot(self):
method pushbullet (line 170) | def pushbullet(self):
method email (line 174) | def email(self):
method alexa (line 178) | def alexa(self):
method subtitles (line 182) | def subtitles(self):
method failed_downloads (line 186) | def failed_downloads(self):
method failed_snatches (line 190) | def failed_snatches(self):
method anidb (line 194) | def anidb(self):
method load (line 197) | def load(self):
method save (line 480) | def save(self, mark_dirty=False):
method reset_encryption (line 612) | def reset_encryption(self):
method migrate_config_file (line 617) | def migrate_config_file(self, filename):
method _get_config_file_value (line 1414) | def _get_config_file_value(self, config_object, section, key, default=...
method convert_value (line 1432) | def convert_value(self, value, field_type):
method to_json (line 1444) | def to_json(self):
FILE: sickrage/core/config/helpers.py
function encrypt_config (line 39) | def encrypt_config(config_obj, private_key, public_key):
function decrypt_config (line 59) | def decrypt_config(config_file, private_key):
function legacy_encrypt (line 76) | def legacy_encrypt(section, key, encryption_version, encryption_secret, ...
function legacy_decrypt (line 102) | def legacy_decrypt(section, key, encryption_version, encryption_secret):
function change_gui_lang (line 106) | def change_gui_lang(language):
function change_unrar_tool (line 120) | def change_unrar_tool(unrar_tool):
function change_nzb_dir (line 191) | def change_nzb_dir(nzb_dir):
function change_torrent_dir (line 212) | def change_torrent_dir(torrent_dir):
function change_tv_download_dir (line 233) | def change_tv_download_dir(tv_download_dir):
function change_auto_postprocessor_freq (line 254) | def change_auto_postprocessor_freq(freq):
function change_daily_searcher_freq (line 269) | def change_daily_searcher_freq(freq):
function change_backlog_searcher_freq (line 282) | def change_backlog_searcher_freq(freq):
function change_show_update_hour (line 295) | def change_show_update_hour(freq):
function change_subtitle_searcher_freq (line 309) | def change_subtitle_searcher_freq(freq):
function change_failed_snatch_age (line 322) | def change_failed_snatch_age(age):
function change_version_notify (line 333) | def change_version_notify(version_notify):
function change_web_external_port (line 344) | def change_web_external_port(web_external_port):
function change_auto_backup_freq (line 356) | def change_auto_backup_freq(freq):
FILE: sickrage/core/databases/__init__.py
function set_sqlite_pragma (line 45) | def set_sqlite_pragma(dbapi_connection, connection_record):
function instant_defaults_listener (line 58) | def instant_defaults_listener(target, args, kwargs):
class IntFlag (line 67) | class IntFlag(TypeDecorator):
method __init__ (line 71) | def __init__(self, enum):
method process_bind_param (line 74) | def process_bind_param(self, value, dialect):
method process_result_value (line 77) | def process_result_value(self, value, dialect):
class ContextSession (line 81) | class ContextSession(sqlalchemy.orm.Session):
method __init__ (line 84) | def __init__(self, *args, **kwargs):
method commit (line 89) | def commit(self, close=False):
method __enter__ (line 118) | def __enter__(self):
method __exit__ (line 121) | def __exit__(self, exc_type, exc_val, exc_tb):
class SRDatabaseBase (line 125) | class SRDatabaseBase(object):
method as_dict (line 126) | def as_dict(self):
method as_attrdict (line 129) | def as_attrdict(self):
method update (line 132) | def update(self, **kwargs):
class SRDatabase (line 139) | class SRDatabase(object):
method __init__ (line 140) | def __init__(self, name, db_type='sqlite', db_prefix='sickrage', db_ho...
method engine (line 155) | def engine(self):
method version (line 166) | def version(self):
method setup (line 172) | def setup(self):
method initialize (line 199) | def initialize(self):
method upgrade (line 202) | def upgrade(self):
method get_alembic_config (line 223) | def get_alembic_config(self):
method get_metadata (line 230) | def get_metadata(self):
method get_base (line 235) | def get_base(self):
method integrity_check (line 240) | def integrity_check(self):
method cleanup (line 246) | def cleanup(self):
method vacuum (line 249) | def vacuum(self):
method backup (line 252) | def backup(self, filename):
method restore (line 275) | def restore(self, filename):
method shutdown (line 327) | def shutdown(self):
FILE: sickrage/core/databases/cache/__init__.py
class CacheDB (line 25) | class CacheDB(SRDatabase):
method __init__ (line 28) | def __init__(self, db_type, db_prefix, db_host, db_port, db_username, ...
method initialize (line 31) | def initialize(self):
method cleanup (line 34) | def cleanup(self):
class LastUpdate (line 62) | class LastUpdate(base):
class LastSearch (line 68) | class LastSearch(base):
class SceneName (line 74) | class SceneName(base):
class NetworkTimezone (line 81) | class NetworkTimezone(base):
class Provider (line 87) | class Provider(base):
class Announcements (line 106) | class Announcements(base):
FILE: sickrage/core/databases/cache/migrations/env.py
function run_migrations_offline (line 28) | def run_migrations_offline():
function run_migrations_online (line 52) | def run_migrations_online():
FILE: sickrage/core/databases/cache/migrations/versions/001_Add_Initial_Tables.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/002_Remove_ID_Column_From_LastSearch_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 29) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/003_Rename_IndexerID_To_SeriesID_On_Provider_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/004_Add_OAuth2Token_Table.py
function upgrade (line 22) | def upgrade():
function downgrade (line 59) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/005_Add_Announcements_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 26) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/006_Add_Session_State_Column_To_OAuth2Token_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/007_Add_Token_Type_Column_To_OAuth2Token_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/008_Drop_QuickSearch_Tables.py
function upgrade (line 18) | def upgrade():
function downgrade (line 30) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/009_Add_SeriesProviderID_Column_To_Providers_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 30) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/010_Remove_OAuth2Token_Table.py
function upgrade (line 26) | def upgrade():
function downgrade (line 58) | def downgrade():
FILE: sickrage/core/databases/cache/migrations/versions/011_Bump_Version.py
function upgrade (line 26) | def upgrade():
function downgrade (line 30) | def downgrade():
FILE: sickrage/core/databases/config/__init__.py
function encryption_key (line 44) | def encryption_key():
class CustomStringEncryptedType (line 51) | class CustomStringEncryptedType(StringEncryptedType):
method process_bind_param (line 54) | def process_bind_param(self, value, dialect):
method process_result_value (line 82) | def process_result_value(self, value, dialect):
class ConfigDB (line 119) | class ConfigDB(SRDatabase):
method __init__ (line 122) | def __init__(self, db_type, db_prefix, db_host, db_port, db_username, ...
method initialize (line 125) | def initialize(self):
class Users (line 128) | class Users(base):
class General (line 138) | class General(base):
class GUI (line 272) | class GUI(base):
class Blackhole (line 298) | class Blackhole(base):
class SABnzbd (line 304) | class SABnzbd(base):
class NZBget (line 317) | class NZBget(base):
class Synology (line 330) | class Synology(base):
class Torrent (line 343) | class Torrent(base):
class Kodi (line 359) | class Kodi(base):
class Plex (line 374) | class Plex(base):
class Emby (line 391) | class Emby(base):
class Growl (line 401) | class Growl(base):
class FreeMobile (line 411) | class FreeMobile(base):
class Telegram (line 421) | class Telegram(base):
class Join (line 431) | class Join(base):
class Prowl (line 441) | class Prowl(base):
class Twitter (line 451) | class Twitter(base):
class Twilio (line 464) | class Twilio(base):
class Boxcar2 (line 476) | class Boxcar2(base):
class Pushover (line 485) | class Pushover(base):
class Libnotify (line 497) | class Libnotify(base):
class NMJ (line 505) | class NMJ(base):
class NMJv2 (line 513) | class NMJv2(base):
class Slack (line 521) | class Slack(base):
class Discord (line 530) | class Discord(base):
class Trakt (line 542) | class Trakt(base):
class PyTivo (line 561) | class PyTivo(base):
class NMA (line 573) | class NMA(base):
class Pushalot (line 583) | class Pushalot(base):
class Pushbullet (line 592) | class Pushbullet(base):
class Email (line 602) | class Email(base):
class Alexa (line 617) | class Alexa(base):
class Subtitles (line 625) | class Subtitles(base):
class FailedDownloads (line 648) | class FailedDownloads(base):
class FailedSnatches (line 653) | class FailedSnatches(base):
class AniDB (line 659) | class AniDB(base):
class QualitySizes (line 668) | class QualitySizes(base):
class SearchProvidersMixin (line 675) | class SearchProvidersMixin(object):
class SearchProvidersTorrent (line 694) | class SearchProvidersTorrent(SearchProvidersMixin, base):
class SearchProvidersNzb (line 699) | class SearchProvidersNzb(SearchProvidersMixin, base):
class SearchProvidersTorrentRss (line 705) | class SearchProvidersTorrentRss(SearchProvidersMixin, base):
class SearchProvidersNewznab (line 713) | class SearchProvidersNewznab(SearchProvidersMixin, base):
class MetadataProviders (line 722) | class MetadataProviders(base):
FILE: sickrage/core/databases/config/migrations/env.py
function run_migrations_offline (line 28) | def run_migrations_offline():
function run_migrations_online (line 52) | def run_migrations_online():
FILE: sickrage/core/databases/config/migrations/versions/001_Add_Initial_Tables.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/002_Remove_Web_Host_Column.py
function upgrade (line 15) | def upgrade():
function downgrade (line 20) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/003_Remove_Search_Providers_Newznab_Key_Column.py
function upgrade (line 15) | def upgrade():
function downgrade (line 20) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/004_Add_SSO_API_Key_Column_To_General_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/005_Convert_Default_Series_Provider_Language_Code_To_ISO6393_In_General_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/006_Bump_Version.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/007_Convert_NMA_Priority_Column_To_Integer.py
function upgrade (line 17) | def upgrade():
function downgrade (line 34) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/008_Add_Update_Video_Metadata_Column_To_General_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/config/migrations/versions/009_Add_AutoBackup_Columns_To_General_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 24) | def downgrade():
FILE: sickrage/core/databases/config/schemas.py
class UsersSchema (line 35) | class UsersSchema(SQLAlchemyAutoSchema):
class Meta (line 38) | class Meta:
method on_bind_field (line 43) | def on_bind_field(self, field_name, field_obj):
class GeneralSchema (line 47) | class GeneralSchema(SQLAlchemyAutoSchema):
class Meta (line 64) | class Meta:
method on_bind_field (line 69) | def on_bind_field(self, field_name, field_obj):
class GUISchema (line 73) | class GUISchema(SQLAlchemyAutoSchema):
class Meta (line 83) | class Meta:
method on_bind_field (line 88) | def on_bind_field(self, field_name, field_obj):
class BlackholeSchema (line 92) | class BlackholeSchema(SQLAlchemyAutoSchema):
class Meta (line 93) | class Meta:
method on_bind_field (line 98) | def on_bind_field(self, field_name, field_obj):
class SABnzbdSchema (line 102) | class SABnzbdSchema(SQLAlchemyAutoSchema):
class Meta (line 103) | class Meta:
method on_bind_field (line 108) | def on_bind_field(self, field_name, field_obj):
class NZBgetSchema (line 112) | class NZBgetSchema(SQLAlchemyAutoSchema):
class Meta (line 113) | class Meta:
method on_bind_field (line 118) | def on_bind_field(self, field_name, field_obj):
class SynologySchema (line 122) | class SynologySchema(SQLAlchemyAutoSchema):
class Meta (line 123) | class Meta:
method on_bind_field (line 128) | def on_bind_field(self, field_name, field_obj):
class TorrentSchema (line 132) | class TorrentSchema(SQLAlchemyAutoSchema):
class Meta (line 133) | class Meta:
method on_bind_field (line 138) | def on_bind_field(self, field_name, field_obj):
class KodiSchema (line 142) | class KodiSchema(SQLAlchemyAutoSchema):
class Meta (line 143) | class Meta:
method on_bind_field (line 148) | def on_bind_field(self, field_name, field_obj):
class PlexSchema (line 152) | class PlexSchema(SQLAlchemyAutoSchema):
class Meta (line 153) | class Meta:
method on_bind_field (line 158) | def on_bind_field(self, field_name, field_obj):
class EmbySchema (line 162) | class EmbySchema(SQLAlchemyAutoSchema):
class Meta (line 163) | class Meta:
method on_bind_field (line 168) | def on_bind_field(self, field_name, field_obj):
class GrowlSchema (line 172) | class GrowlSchema(SQLAlchemyAutoSchema):
class Meta (line 173) | class Meta:
method on_bind_field (line 178) | def on_bind_field(self, field_name, field_obj):
class FreeMobileSchema (line 182) | class FreeMobileSchema(SQLAlchemyAutoSchema):
class Meta (line 183) | class Meta:
method on_bind_field (line 188) | def on_bind_field(self, field_name, field_obj):
class TelegramSchema (line 192) | class TelegramSchema(SQLAlchemyAutoSchema):
class Meta (line 193) | class Meta:
method on_bind_field (line 198) | def on_bind_field(self, field_name, field_obj):
class JoinSchema (line 202) | class JoinSchema(SQLAlchemyAutoSchema):
class Meta (line 203) | class Meta:
method on_bind_field (line 208) | def on_bind_field(self, field_name, field_obj):
class ProwlSchema (line 212) | class ProwlSchema(SQLAlchemyAutoSchema):
class Meta (line 213) | class Meta:
method on_bind_field (line 218) | def on_bind_field(self, field_name, field_obj):
class TwitterSchema (line 222) | class TwitterSchema(SQLAlchemyAutoSchema):
class Meta (line 223) | class Meta:
method on_bind_field (line 228) | def on_bind_field(self, field_name, field_obj):
class TwilioSchema (line 232) | class TwilioSchema(SQLAlchemyAutoSchema):
class Meta (line 233) | class Meta:
method on_bind_field (line 238) | def on_bind_field(self, field_name, field_obj):
class Boxcar2Schema (line 242) | class Boxcar2Schema(SQLAlchemyAutoSchema):
class Meta (line 243) | class Meta:
method on_bind_field (line 248) | def on_bind_field(self, field_name, field_obj):
class PushoverSchema (line 252) | class PushoverSchema(SQLAlchemyAutoSchema):
class Meta (line 253) | class Meta:
method on_bind_field (line 258) | def on_bind_field(self, field_name, field_obj):
class LibnotifySchema (line 262) | class LibnotifySchema(SQLAlchemyAutoSchema):
class Meta (line 263) | class Meta:
method on_bind_field (line 268) | def on_bind_field(self, field_name, field_obj):
class NMJSchema (line 272) | class NMJSchema(SQLAlchemyAutoSchema):
class Meta (line 273) | class Meta:
method on_bind_field (line 278) | def on_bind_field(self, field_name, field_obj):
class NMJv2Schema (line 282) | class NMJv2Schema(SQLAlchemyAutoSchema):
class Meta (line 285) | class Meta:
method on_bind_field (line 290) | def on_bind_field(self, field_name, field_obj):
class SlackSchema (line 294) | class SlackSchema(SQLAlchemyAutoSchema):
class Meta (line 295) | class Meta:
method on_bind_field (line 300) | def on_bind_field(self, field_name, field_obj):
class DiscordSchema (line 304) | class DiscordSchema(SQLAlchemyAutoSchema):
class Meta (line 305) | class Meta:
method on_bind_field (line 310) | def on_bind_field(self, field_name, field_obj):
class TraktSchema (line 314) | class TraktSchema(SQLAlchemyAutoSchema):
class Meta (line 318) | class Meta:
method on_bind_field (line 323) | def on_bind_field(self, field_name, field_obj):
class PyTivoSchema (line 327) | class PyTivoSchema(SQLAlchemyAutoSchema):
class Meta (line 328) | class Meta:
method on_bind_field (line 333) | def on_bind_field(self, field_name, field_obj):
class NMASchema (line 337) | class NMASchema(SQLAlchemyAutoSchema):
class Meta (line 338) | class Meta:
method on_bind_field (line 343) | def on_bind_field(self, field_name, field_obj):
class PushalotSchema (line 347) | class PushalotSchema(SQLAlchemyAutoSchema):
class Meta (line 348) | class Meta:
method on_bind_field (line 353) | def on_bind_field(self, field_name, field_obj):
class PushbulletSchema (line 357) | class PushbulletSchema(SQLAlchemyAutoSchema):
class Meta (line 358) | class Meta:
method on_bind_field (line 363) | def on_bind_field(self, field_name, field_obj):
class EmailSchema (line 367) | class EmailSchema(SQLAlchemyAutoSchema):
class Meta (line 368) | class Meta:
method on_bind_field (line 373) | def on_bind_field(self, field_name, field_obj):
class AlexaSchema (line 377) | class AlexaSchema(SQLAlchemyAutoSchema):
class Meta (line 378) | class Meta:
method on_bind_field (line 383) | def on_bind_field(self, field_name, field_obj):
class SubtitlesSchema (line 387) | class SubtitlesSchema(SQLAlchemyAutoSchema):
class Meta (line 388) | class Meta:
method on_bind_field (line 393) | def on_bind_field(self, field_name, field_obj):
class FailedDownloadsSchema (line 397) | class FailedDownloadsSchema(SQLAlchemyAutoSchema):
class Meta (line 398) | class Meta:
method on_bind_field (line 403) | def on_bind_field(self, field_name, field_obj):
class FailedSnatchesSchema (line 407) | class FailedSnatchesSchema(SQLAlchemyAutoSchema):
class Meta (line 408) | class Meta:
method on_bind_field (line 413) | def on_bind_field(self, field_name, field_obj):
class AniDBSchema (line 417) | class AniDBSchema(SQLAlchemyAutoSchema):
class Meta (line 418) | class Meta:
method on_bind_field (line 423) | def on_bind_field(self, field_name, field_obj):
class QualitySizesSchema (line 427) | class QualitySizesSchema(SQLAlchemyAutoSchema):
class Meta (line 430) | class Meta:
method on_bind_field (line 435) | def on_bind_field(self, field_name, field_obj):
class SearchProvidersTorrentSchema (line 439) | class SearchProvidersTorrentSchema(SQLAlchemyAutoSchema):
class Meta (line 442) | class Meta:
method on_bind_field (line 447) | def on_bind_field(self, field_name, field_obj):
class SearchProvidersNzbSchema (line 451) | class SearchProvidersNzbSchema(SQLAlchemyAutoSchema):
class Meta (line 454) | class Meta:
method on_bind_field (line 459) | def on_bind_field(self, field_name, field_obj):
class SearchProvidersTorrentRssSchema (line 463) | class SearchProvidersTorrentRssSchema(SQLAlchemyAutoSchema):
class Meta (line 466) | class Meta:
method on_bind_field (line 471) | def on_bind_field(self, field_name, field_obj):
class SearchProvidersNewznabSchema (line 475) | class SearchProvidersNewznabSchema(SQLAlchemyAutoSchema):
class Meta (line 478) | class Meta:
method on_bind_field (line 483) | def on_bind_field(self, field_name, field_obj):
class MetadataProvidersSchema (line 487) | class MetadataProvidersSchema(SQLAlchemyAutoSchema):
class Meta (line 488) | class Meta:
method on_bind_field (line 493) | def on_bind_field(self, field_name, field_obj):
FILE: sickrage/core/databases/main/__init__.py
class MainDB (line 30) | class MainDB(SRDatabase):
method __init__ (line 33) | def __init__(self, db_type, db_prefix, db_host, db_port, db_username, ...
method initialize (line 36) | def initialize(self):
method cleanup (line 39) | def cleanup(self):
class TVShow (line 294) | class TVShow(base):
class TVEpisode (line 344) | class TVEpisode(base):
class IMDbInfo (line 386) | class IMDbInfo(base):
class SeriesProviderMapping (line 418) | class SeriesProviderMapping(base):
class Blacklist (line 430) | class Blacklist(base):
class Whitelist (line 442) | class Whitelist(base):
class History (line 454) | class History(base):
class FailedSnatchHistory (line 474) | class FailedSnatchHistory(base):
class FailedSnatch (line 492) | class FailedSnatch(base):
FILE: sickrage/core/databases/main/migrations/env.py
function run_migrations_offline (line 28) | def run_migrations_offline():
function run_migrations_online (line 52) | def run_migrations_online():
FILE: sickrage/core/databases/main/migrations/versions/001_Add_Initial_Tables.py
function upgrade (line 17) | def upgrade():
function downgrade (line 21) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/002_Add_Last_Backlog_Search_Column_To_TVShow_Table.py
function upgrade (line 17) | def upgrade():
function downgrade (line 26) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/003_Add_Last_Proper_Search_Column_To_TVShow_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/004_Rename_Columns_On_TVShow_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/005_Rename_Columns_On_IMDbInfo_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 70) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/006_Rename_Columns_On_TVEpisode_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 29) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/007_Convert_Airdate_Column_To_Date_Type_On_TVEpisode_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 35) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/008_Convert_Date_Column_To_DateTime_Type_On_FailedSnatchHistory_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 35) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/009_Convert_Date_Column_To_DateTime_Type_On_History_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 35) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/010_Add_Release_Group_Column_To_History_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/011_Add_Scene_Exceptions_Column_To_TVShow_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 28) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/012_Add_Search_Format_Column_To_TVShow_Table.py
class SearchFormats (line 16) | class SearchFormats(object):
function upgrade (line 32) | def upgrade():
function downgrade (line 65) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/013_Add_Scene_Column_To_TVShow_Table.py
class SearchFormats (line 16) | class SearchFormats(object):
function upgrade (line 32) | def upgrade():
function downgrade (line 47) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/014_Add_Last_XEM_Refresh_Column_To_TVShows_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 35) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/015_Add_XEM_Numbering_To_TVEpisodes_Table.py
function upgrade (line 16) | def upgrade():
function downgrade (line 30) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/016_Merge_Scene_Numbering_Table_With_TVEpisodes_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 34) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/017_Convert_SearchFormat_Column_To_Enum_Type_On_TVShow_Table.py
class SearchFormat (line 18) | class SearchFormat(enum.Enum):
function upgrade (line 26) | def upgrade():
function downgrade (line 36) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/018_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVEpisode_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 34) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/019_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVShow_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 50) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/020_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_ImdbInfo_Table.py
function upgrade (line 39) | def upgrade():
function downgrade (line 55) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/021_Upgrade_To_SiCKRAGE_v10.py
class SeriesProviderID (line 45) | class SeriesProviderID(enum.Enum):
function upgrade (line 49) | def upgrade():
function downgrade (line 150) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/022_Convert_Language_Codes_To_ISO6393_On_TVShow_Table.py
function upgrade (line 18) | def upgrade():
function downgrade (line 30) | def downgrade():
FILE: sickrage/core/databases/main/migrations/versions/023_Bump_Version.py
function upgrade (line 18) | def upgrade():
function downgrade (line 22) | def downgrade():
FILE: sickrage/core/databases/main/schemas.py
class TVShowSchema (line 30) | class TVShowSchema(SQLAlchemyAutoSchema):
class Meta (line 36) | class Meta:
method on_bind_field (line 41) | def on_bind_field(self, field_name, field_obj):
class TVEpisodeSchema (line 45) | class TVEpisodeSchema(SQLAlchemyAutoSchema):
class Meta (line 49) | class Meta:
method on_bind_field (line 54) | def on_bind_field(self, field_name, field_obj):
class IMDbInfoSchema (line 58) | class IMDbInfoSchema(SQLAlchemyAutoSchema):
class Meta (line 59) | class Meta:
method on_bind_field (line 64) | def on_bind_field(self, field_name, field_obj):
class BlacklistSchema (line 68) | class BlacklistSchema(SQLAlchemyAutoSchema):
class Meta (line 71) | class Meta:
method on_bind_field (line 76) | def on_bind_field(self, field_name, field_obj):
class WhitelistSchema (line 80) | class WhitelistSchema(SQLAlchemyAutoSchema):
class Meta (line 83) | class Meta:
method on_bind_field (line 88) | def on_bind_field(self, field_name, field_obj):
class HistoryScheme (line 92) | class HistoryScheme(SQLAlchemyAutoSchema):
class Meta (line 96) | class Meta:
method on_bind_field (line 101) | def on_bind_field(self, field_name, field_obj):
class FailedSnatchHistoryScheme (line 105) | class FailedSnatchHistoryScheme(SQLAlchemyAutoSchema):
class Meta (line 109) | class Meta:
method on_bind_field (line 114) | def on_bind_field(self, field_name, field_obj):
FILE: sickrage/core/enums.py
class SeriesProviderID (line 24) | class SeriesProviderID(enum.Enum):
method _strings (line 28) | def _strings(self):
method display_name (line 34) | def display_name(self):
class DefaultHomePage (line 38) | class DefaultHomePage(enum.Enum):
method _strings (line 44) | def _strings(self):
method display_name (line 52) | def display_name(self):
class MultiEpNaming (line 56) | class MultiEpNaming(enum.Enum):
method _strings (line 65) | def _strings(self):
method display_name (line 76) | def display_name(self):
class CpuPreset (line 80) | class CpuPreset(enum.Enum):
method _strings (line 86) | def _strings(self):
method display_name (line 94) | def display_name(self):
class CheckPropersInterval (line 98) | class CheckPropersInterval(enum.Enum):
method _strings (line 106) | def _strings(self):
method display_name (line 116) | def display_name(self):
class FileTimestampTimezone (line 120) | class FileTimestampTimezone(enum.Enum):
method _strings (line 125) | def _strings(self):
method display_name (line 132) | def display_name(self):
class ProcessMethod (line 136) | class ProcessMethod(enum.Enum):
method _strings (line 144) | def _strings(self):
method display_name (line 154) | def display_name(self):
class NzbMethod (line 158) | class NzbMethod(enum.Enum):
method _strings (line 165) | def _strings(self):
method display_name (line 174) | def display_name(self):
class TorrentMethod (line 178) | class TorrentMethod(enum.Enum):
method _strings (line 191) | def _strings(self):
method display_name (line 206) | def display_name(self):
class SearchFormat (line 210) | class SearchFormat(enum.Enum):
method _strings (line 218) | def _strings(self):
method display_name (line 228) | def display_name(self):
class UserPermission (line 232) | class UserPermission(enum.Enum):
method _strings (line 237) | def _strings(self):
method display_name (line 244) | def display_name(self):
class PosterSortDirection (line 248) | class PosterSortDirection(enum.Enum):
method _strings (line 253) | def _strings(self):
method display_name (line 260) | def display_name(self):
class HomeLayout (line 264) | class HomeLayout(enum.Enum):
method _strings (line 272) | def _strings(self):
method display_name (line 282) | def display_name(self):
class PosterSortBy (line 286) | class PosterSortBy(enum.Enum):
method _strings (line 293) | def _strings(self):
method display_name (line 302) | def display_name(self):
class HistoryLayout (line 306) | class HistoryLayout(enum.Enum):
method _strings (line 311) | def _strings(self):
method display_name (line 318) | def display_name(self):
class TimezoneDisplay (line 322) | class TimezoneDisplay(enum.Enum):
method _strings (line 327) | def _strings(self):
method display_name (line 334) | def display_name(self):
class UITheme (line 338) | class UITheme(enum.Enum):
method _strings (line 343) | def _strings(self):
method display_name (line 350) | def display_name(self):
class TraktAddMethod (line 354) | class TraktAddMethod(enum.Enum):
method _strings (line 360) | def _strings(self):
method display_name (line 368) | def display_name(self):
FILE: sickrage/core/exceptions/__init__.py
class SiCKRAGEException (line 23) | class SiCKRAGEException(Exception):
class SiCKRAGETVShowException (line 29) | class SiCKRAGETVShowException(SiCKRAGEException):
class SiCKRAGETVEpisodeException (line 35) | class SiCKRAGETVEpisodeException(SiCKRAGEException):
class AuthException (line 41) | class AuthException(SiCKRAGEException):
class CantRefreshShowException (line 47) | class CantRefreshShowException(SiCKRAGEException):
class CantRemoveShowException (line 53) | class CantRemoveShowException(SiCKRAGEException):
class CantUpdateShowException (line 59) | class CantUpdateShowException(SiCKRAGEException):
class EpisodeDeletedException (line 65) | class EpisodeDeletedException(SiCKRAGETVEpisodeException):
class EpisodeNotFoundException (line 71) | class EpisodeNotFoundException(SiCKRAGETVEpisodeException):
class EpisodePostProcessingFailedException (line 77) | class EpisodePostProcessingFailedException(SiCKRAGEException):
class EpisodeDirectoryNotFoundException (line 83) | class EpisodeDirectoryNotFoundException(SiCKRAGETVEpisodeException):
class FailedPostProcessingFailedException (line 89) | class FailedPostProcessingFailedException(SiCKRAGEException):
class MultipleEpisodesInDatabaseException (line 95) | class MultipleEpisodesInDatabaseException(SiCKRAGETVEpisodeException):
class MultipleShowsInDatabaseException (line 101) | class MultipleShowsInDatabaseException(SiCKRAGETVShowException):
class MultipleShowObjectsException (line 107) | class MultipleShowObjectsException(SiCKRAGETVShowException):
class NoNFOException (line 113) | class NoNFOException(SiCKRAGEException):
class ShowNotFoundException (line 119) | class ShowNotFoundException(SiCKRAGETVShowException):
class NoFreeSpaceException (line 125) | class NoFreeSpaceException(SiCKRAGEException):
class AnidbAdbaConnectionException (line 131) | class AnidbAdbaConnectionException(SiCKRAGEException):
FILE: sickrage/core/google_drive.py
class GoogleDrive (line 12) | class GoogleDrive(object):
method __init__ (line 13) | def __init__(self):
method reset_progress (line 16) | def reset_progress(self):
method set_progress (line 19) | def set_progress(self, current_info, percent_done):
method get_progress (line 25) | def get_progress():
method walk_drive (line 28) | def walk_drive(self, folder_id):
method sync_remote (line 42) | def sync_remote(self):
method sync_local (line 70) | def sync_local(self):
FILE: sickrage/core/helpers/__init__.py
function safe_getattr (line 81) | def safe_getattr(object, name, default=None):
function try_int (line 88) | def try_int(value, default=0):
function read_file_buffered (line 95) | def read_file_buffered(filename, reverse=False):
function arg_to_bool (line 118) | def arg_to_bool(x):
function auto_type (line 133) | def auto_type(s):
function fix_glob (line 143) | def fix_glob(path):
function indent_xml (line 148) | def indent_xml(elem, level=0):
function remove_extension (line 167) | def remove_extension(name):
function remove_non_release_groups (line 183) | def remove_non_release_groups(name):
function replace_extension (line 267) | def replace_extension(filename, newExt):
function is_torrent_or_nzb_file (line 287) | def is_torrent_or_nzb_file(filename):
function is_sync_file (line 300) | def is_sync_file(filename):
function is_media_file (line 317) | def is_media_file(filename):
function is_rar_file (line 346) | def is_rar_file(filename):
function sanitize_file_name (line 365) | def sanitize_file_name(name):
function make_dir (line 388) | def make_dir(path):
function list_media_files (line 405) | def list_media_files(path):
function copy_file (line 430) | def copy_file(src_file, dest_file):
function move_file (line 452) | def move_file(src_file, dest_file):
function link (line 468) | def link(src, dst):
function hardlink_file (line 484) | def hardlink_file(src_file, dest_file):
function symlink (line 507) | def symlink(src, dst):
function move_and_symlink_file (line 523) | def move_and_symlink_file(src_file, dest_file):
function make_dirs (line 548) | def make_dirs(path):
function delete_empty_folders (line 593) | def delete_empty_folders(check_empty_dir, keep_dir=None):
function file_bit_filter (line 631) | def file_bit_filter(mode):
function chmod_as_parent (line 646) | def chmod_as_parent(child_path):
function fix_set_group_id (line 697) | def fix_set_group_id(child_path):
function sanitize_scene_name (line 739) | def sanitize_scene_name(name, anime=False):
function anon_url (line 768) | def anon_url(*url):
function full_sanitize_scene_name (line 784) | def full_sanitize_scene_name(name):
function is_hidden_folder (line 788) | def is_hidden_folder(folder):
function file_size (line 815) | def file_size(fname):
function real_path (line 819) | def real_path(path):
function extract_zipfile (line 826) | def extract_zipfile(archive, targetDir):
function create_zipfile (line 857) | def create_zipfile(fileList, archive, arcname=None):
function restore_config_zip (line 877) | def restore_config_zip(archive, target_dir, restore_main_database=True, ...
function backup_app_data (line 918) | def backup_app_data(backup_dir, backup_type='manual', backup_main_db=Tru...
function restore_app_data (line 960) | def restore_app_data(src_dir, dst_dir):
function modify_file_timestamp (line 1001) | def modify_file_timestamp(fname, atime=None):
function touch_file (line 1017) | def touch_file(fname):
function get_size (line 1022) | def get_size(start_path='.'):
function generate_api_key (line 1050) | def generate_api_key():
function pretty_file_size (line 1069) | def pretty_file_size(size, use_decimal=False, **kwargs):
function remove_article (line 1096) | def remove_article(text=''):
function generate_secret (line 1102) | def generate_secret():
function verify_freespace (line 1108) | def verify_freespace(src, dest, oldfile=None):
function pretty_time_delta (line 1163) | def pretty_time_delta(seconds):
function is_file_locked (line 1183) | def is_file_locked(checkfile, writeLockCheck=False):
function get_disk_space_usage (line 1221) | def get_disk_space_usage(disk_path=None, pretty=True):
function get_free_space (line 1241) | def get_free_space(directories):
function restore_versioned_file (line 1270) | def restore_versioned_file(backup_file, version):
function backup_versioned_file (line 1321) | def backup_versioned_file(old_file, version):
function bs4_parser (line 1358) | def bs4_parser(markup, features="html5lib", *args, **kwargs):
function get_file_size (line 1370) | def get_file_size(file):
function get_temp_dir (line 1377) | def get_temp_dir():
function scrub (line 1396) | def scrub(obj):
function convert_size (line 1407) | def convert_size(size, default=0, units=None):
function random_string (line 1423) | def random_string(size=8, chars=string.ascii_uppercase + string.digits):
function clean_url (line 1427) | def clean_url(url):
function launch_browser (line 1453) | def launch_browser(protocol=None, host=None, startport=None):
function is_ip_private (line 1467) | def is_ip_private(ip):
function is_ip_whitelisted (line 1473) | def is_ip_whitelisted(ip):
function validate_url (line 1498) | def validate_url(value):
function torrent_webui_url (line 1512) | def torrent_webui_url(reset=False):
function checkbox_to_value (line 1543) | def checkbox_to_value(option, value_on=True, value_off=False):
function clean_host (line 1561) | def clean_host(host, default_port=None):
function clean_hosts (line 1593) | def clean_hosts(hosts, default_port=None):
function glob_escape (line 1618) | def glob_escape(pathname):
function convert_to_timedelta (line 1631) | def convert_to_timedelta(time_val):
function total_seconds (line 1669) | def total_seconds(td):
function episode_num (line 1677) | def episode_num(season=None, episode=None, **kwargs):
function strip_accents (line 1696) | def strip_accents(name):
function md5_file_hash (line 1708) | def md5_file_hash(filename):
function get_extension (line 1719) | def get_extension(filename):
function get_external_ip (line 1724) | def get_external_ip():
function get_internal_ip (line 1732) | def get_internal_ip():
function get_ip_address (line 1742) | def get_ip_address(hostname):
function camelcase (line 1746) | def camelcase(s):
function convert_dict_keys_to_camelcase (line 1751) | def convert_dict_keys_to_camelcase(d):
function flatten (line 1763) | def flatten(nested_list):
FILE: sickrage/core/helpers/anidb.py
function set_up_anidb_connection (line 7) | def set_up_anidb_connection():
function get_release_groups_for_anime (line 36) | def get_release_groups_for_anime(series_name):
function get_short_group_name (line 51) | def get_short_group_name(release_group):
function short_group_names (line 71) | def short_group_names(groups):
function get_anime_episode (line 90) | def get_anime_episode(file_path):
FILE: sickrage/core/helpers/browser.py
function get_win_drives (line 28) | def get_win_drives():
function getFileList (line 43) | def getFileList(path, includeFiles, fileTypes):
function foldersAtPath (line 91) | def foldersAtPath(path, includeParent=False, includeFiles=False, fileTyp...
FILE: sickrage/core/helpers/encryption.py
function initialize (line 15) | def initialize():
function generate_private_key (line 22) | def generate_private_key():
function verify_public_key (line 30) | def verify_public_key(public_key, private_key):
function load_public_key (line 38) | def load_public_key(filename):
function load_private_key (line 50) | def load_private_key(filename):
function save_public_key (line 62) | def save_public_key(filename, public_key):
function save_private_key (line 72) | def save_private_key(filename, private_key):
function encrypt_file (line 83) | def encrypt_file(filename, public_key):
function decrypt_file (line 114) | def decrypt_file(filename, private_key):
function encrypt_string (line 140) | def encrypt_string(string, public_key):
function decrypt_string (line 168) | def decrypt_string(string, private_key):
FILE: sickrage/core/helpers/metadata.py
function get_resolution (line 60) | def get_resolution(filename):
function get_file_metadata (line 67) | def get_file_metadata(filename):
FILE: sickrage/core/helpers/show_names.py
function contains_at_least_one_word (line 47) | def contains_at_least_one_word(name, words):
function filter_bad_releases (line 70) | def filter_bad_releases(name, parse=True):
function scene_to_normal_show_names (line 116) | def scene_to_normal_show_names(name):
function all_possible_show_names (line 152) | def all_possible_show_names(series_id, series_provider_id, season=-1):
function determine_release_name (line 201) | def determine_release_name(dir_name=None, nzb_name=None):
FILE: sickrage/core/helpers/srdatetime.py
class SRDateTime (line 92) | class SRDateTime(object):
method __init__ (line 93) | def __init__(self, dt, convert=False):
method srftime (line 105) | def srftime(self, show_seconds=False, t_preset=None):
method srfdate (line 148) | def srfdate(self, d_preset=None):
method srfdatetime (line 187) | def srfdatetime(self, show_seconds=False, d_preset=None, t_preset=None):
FILE: sickrage/core/imdb_popular.py
class imdbPopular (line 33) | class imdbPopular(object):
method __init__ (line 34) | def __init__(self):
method fetch_popular_shows (line 47) | def fetch_popular_shows(self):
method change_size (line 97) | def change_size(image_url, factor=3):
method cache_image (line 115) | def cache_image(self, image_url):
FILE: sickrage/core/logger/__init__.py
class Logger (line 37) | class Logger(logging.getLoggerClass()):
method __init__ (line 41) | def __init__(self, name="sickrage", consoleLogging=True, fileLogging=F...
method censored_items (line 89) | def censored_items(self):
method start (line 143) | def start(self):
method makeRecord (line 190) | def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=N...
method set_level (line 209) | def set_level(self):
method list_modules (line 218) | def list_modules(self, package):
method get_loggers (line 228) | def get_loggers(self, package):
method log (line 238) | def log(self, level, msg, *args, **kwargs):
method db (line 241) | def db(self, msg, *args, **kwargs):
method info (line 244) | def info(self, msg, *args, **kwargs):
method debug (line 247) | def debug(self, msg, *args, **kwargs):
method critical (line 250) | def critical(self, msg, *args, **kwargs):
method exception (line 253) | def exception(self, msg, *args, **kwargs):
method error (line 256) | def error(self, msg, *args, **kwargs):
method warning (line 260) | def warning(self, msg, *args, **kwargs):
method fatal (line 263) | def fatal(self, msg, *args, **kwargs):
method close (line 267) | def close(self, *args, **kwargs):
FILE: sickrage/core/media/__init__.py
class Media (line 11) | class Media(object):
method __init__ (line 12) | def __init__(self, series_id, episode_id=None, series_provider_id=None...
method get_default_media_name (line 31) | def get_default_media_name(self):
method url (line 39) | def url(self):
method content (line 49) | def content(self):
method type (line 58) | def type(self):
method get_media_path (line 70) | def get_media_path(self):
method get_media_root (line 78) | def get_media_root():
method get_show (line 85) | def get_show(self):
method get_static_media_path (line 95) | def get_static_media_path(self):
FILE: sickrage/core/media/banner.py
class Banner (line 27) | class Banner(Media):
method __init__ (line 32) | def __init__(self, series_id, series_provider_id, media_format=None):
method get_default_media_name (line 35) | def get_default_media_name(self):
method get_media_path (line 38) | def get_media_path(self):
FILE: sickrage/core/media/fanart.py
class FanArt (line 27) | class FanArt(Media):
method __init__ (line 32) | def __init__(self, series_id, series_provider_id, media_format=None):
method get_default_media_name (line 35) | def get_default_media_name(self):
method get_media_path (line 38) | def get_media_path(self):
FILE: sickrage/core/media/network.py
class Network (line 26) | class Network(Media):
method __init__ (line 31) | def __init__(self, series_id, series_provider_id, media_format=None):
method get_default_media_name (line 34) | def get_default_media_name(self):
method get_media_path (line 37) | def get_media_path(self):
FILE: sickrage/core/media/poster.py
class Poster (line 27) | class Poster(Media):
method __init__ (line 32) | def __init__(self, series_id, episode_id=None, series_provider_id=None...
method get_default_media_name (line 35) | def get_default_media_name(self):
method get_media_path (line 38) | def get_media_path(self):
FILE: sickrage/core/media/util.py
class SeriesImageType (line 34) | class SeriesImageType(enum.Enum):
function series_image (line 44) | def series_image(series_id=None, series_provider_id=None, which=None):
function episode_image (line 57) | def episode_image(series_id, episode_id, series_provider_id=None):
function series_provider_image (line 61) | def series_provider_image(series_id=None, episode_id=None, series_provid...
FILE: sickrage/core/nameparser/__init__.py
class NameParser (line 43) | class NameParser(object):
method __init__ (line 48) | def __init__(self, file_name=True, series_id=None, series_provider_id=...
method get_show (line 61) | def get_show(self, name):
method clean_series_name (line 100) | def clean_series_name(series_name):
method _compile_regexes (line 117) | def _compile_regexes(self, regexMode):
method _parse_string (line 140) | def _parse_string(self, name, skip_scene_detection=False):
method _combine_results (line 366) | def _combine_results(self, first, second, attr):
method _convert_number (line 389) | def _convert_number(org_number):
method parse (line 423) | def parse(self, name, cache_result=True, skip_scene_detection=False):
class ParseResult (line 496) | class ParseResult(object):
method __init__ (line 497) | def __init__(self,
method __eq__ (line 528) | def __eq__(self, other):
method __str__ (line 543) | def __str__(self):
method is_air_by_date (line 567) | def is_air_by_date(self):
method is_anime (line 573) | def is_anime(self):
method in_showlist (line 579) | def in_showlist(self):
class NameParserCache (line 585) | class NameParserCache(object):
method __init__ (line 586) | def __init__(self):
method get (line 591) | def get(self, key):
method add (line 598) | def add(self, key, value):
class InvalidNameException (line 608) | class InvalidNameException(Exception):
class InvalidShowException (line 612) | class InvalidShowException(Exception):
FILE: sickrage/core/nameparser/validator.py
class FakeEpisode (line 53) | class FakeEpisode(object):
method __init__ (line 54) | def __init__(self, season, episode, absolute_number, name):
method formatted_filename (line 73) | def formatted_filename(self, *args, **kwargs):
method _format_pattern (line 76) | def _format_pattern(self, *args, **kwargs):
method _replace_map (line 79) | def _replace_map(self):
method _ep_name (line 82) | def _ep_name(self):
method _format_string (line 85) | def _format_string(self, *args, **kwargs):
method formatted_dir (line 88) | def formatted_dir(self, *args, **kwargs):
class FakeShow (line 92) | class FakeShow(object):
method __init__ (line 93) | def __init__(self):
function check_force_season_folders (line 103) | def check_force_season_folders(pattern=None, multi=None, anime_type=None):
function check_valid_naming (line 122) | def check_valid_naming(pattern=None, multi=None, anime_type=None):
function check_valid_abd_naming (line 141) | def check_valid_abd_naming(pattern=None):
function check_valid_sports_naming (line 157) | def check_valid_sports_naming(pattern=None):
function validate_name (line 173) | def validate_name(pattern, multi=None, anime_type=None, file_only=False,...
function generate_sample_ep (line 228) | def generate_sample_ep(multi=None, abd=False, sports=False, anime_type=N...
function test_name (line 278) | def test_name(pattern, multi=None, abd=False, sports=False, anime_type=N...
FILE: sickrage/core/nzbSplitter.py
function getSeasonNZBs (line 31) | def getSeasonNZBs(name, urlData, season):
function createNZBString (line 82) | def createNZBString(fileElements, xmlns):
function saveNZB (line 93) | def saveNZB(nzbName, nzbString):
function stripNS (line 108) | def stripNS(element, ns):
function split_nzb_result (line 116) | def split_nzb_result(result):
FILE: sickrage/core/process_tv.py
class ProcessResult (line 41) | class ProcessResult(object):
method __init__ (line 42) | def __init__(self, path, process_method=None, process_type='auto'):
method path (line 53) | def path(self):
method path (line 57) | def path(self, value):
method output (line 77) | def output(self):
method log (line 80) | def log(self, message, level=None):
method clear_log (line 84) | def clear_log(self):
method delete_folder (line 87) | def delete_folder(self, folder, check_empty=True):
method delete_files (line 125) | def delete_files(self, processPath, notwantedFiles, force=False):
method process (line 166) | def process(self, nzbName=None, force=False, is_priority=None, delete_...
method validateDir (line 268) | def validateDir(self, process_path, release_name, failed):
method unrar (line 346) | def unrar(self, path, rar_files, force):
method already_postprocessed (line 453) | def already_postprocessed(self, dirName, videofile, force):
method process_media (line 496) | def process_media(self, processPath, videoFiles, nzbName, process_meth...
method process_failed (line 534) | def process_failed(self, dirName, nzbName):
FILE: sickrage/core/processors/auto_postprocessor.py
class AutoPostProcessor (line 28) | class AutoPostProcessor(object):
method __init__ (line 29) | def __init__(self):
method task (line 34) | def task(self, force=False):
FILE: sickrage/core/processors/failed_processor.py
class FailedProcessor (line 31) | class FailedProcessor(object):
method __init__ (line 34) | def __init__(self, dirName, nzbName):
method process (line 44) | def process(self):
method _log (line 97) | def _log(self, message, level=None):
FILE: sickrage/core/processors/post_processor.py
class PostProcessor (line 47) | class PostProcessor(object):
method __init__ (line 59) | def __init__(self, file_path, nzb_name=None, process_method=None, is_p...
method _log (line 97) | def _log(self, message, level=None):
method _checkForExistingFile (line 107) | def _checkForExistingFile(self, existing_file):
method list_associated_files (line 146) | def list_associated_files(self, file_path, subtitles_only=False, subfo...
method _delete (line 248) | def _delete(self, file_path, associated_files=False):
method _combined_file_operation (line 292) | def _combined_file_operation(self, file_path, new_path, new_base_name,...
method _move (line 365) | def _move(self, file_path, new_path, new_base_name, associated_files=F...
method _copy (line 389) | def _copy(self, file_path, new_path, new_base_name, associated_files=F...
method _hardlink (line 413) | def _hardlink(self, file_path, new_path, new_base_name, associated_fil...
method _moveAndSymlink (line 441) | def _moveAndSymlink(self, file_path, new_path, new_base_name, associat...
method _symlink (line 466) | def _symlink(self, file_path, new_path, new_base_name, associated_file...
method _history_lookup (line 494) | def _history_lookup(self):
method _finalize (line 552) | def _finalize(self, parse_result):
method _analyze_name (line 578) | def _analyze_name(self, name):
method _add_to_anidb_mylist (line 641) | def _add_to_anidb_mylist(self, filePath):
method _find_info (line 658) | def _find_info(self):
method _get_quality (line 728) | def _get_quality(self, ep_obj):
method _run_extra_scripts (line 780) | def _run_extra_scripts(self, ep_obj):
method _is_priority (line 809) | def _is_priority(self, ep_obj, new_ep_quality):
method _add_processed_marker_file (line 861) | def _add_processed_marker_file(self, file_path):
method process (line 864) | def process(self):
FILE: sickrage/core/queues/__init__.py
class TaskPriority (line 32) | class TaskPriority(object):
class TaskStatus (line 39) | class TaskStatus(Enum):
class WorkerStatus (line 51) | class WorkerStatus(Enum):
class Queue (line 60) | class Queue(object):
method __init__ (line 61) | def __init__(self, name="QUEUE"):
method start_worker (line 73) | def start_worker(self, n_workers=1):
method stop_worker (line 92) | def stop_worker(self, worker_id=None):
method remove_worker (line 120) | def remove_worker(self, worker_id):
method get_task_dependants (line 141) | def get_task_dependants(self):
method auto_remove_tasks (line 150) | def auto_remove_tasks(self):
method get (line 161) | def get(self, *args, **kwargs):
method put (line 215) | def put(self, task, task_id=None, depend=None, *args, **kwargs):
method notify_workers (line 248) | def notify_workers(self):
method check_status (line 257) | def check_status(self, task_id):
method fetch_task (line 263) | def fetch_task(self, task_id):
method remove_task (line 266) | def remove_task(self, task_id):
method get_result (line 279) | def get_result(self, task_id):
method is_busy (line 283) | def is_busy(self):
method is_paused (line 287) | def is_paused(self):
method pause (line 290) | def pause(self):
method unpause (line 295) | def unpause(self):
method get_random_id (line 300) | def get_random_id(self):
method shutdown (line 307) | def shutdown(self):
class Worker (line 314) | class Worker(object):
method __init__ (line 315) | def __init__(self, _id, _queue):
method notify (line 322) | def notify(self):
method run (line 332) | def run(self):
class WorkerThread (line 357) | class WorkerThread(threading.Thread):
method __init__ (line 358) | def __init__(self, worker):
method run (line 363) | def run(self):
class Task (line 367) | class Task(object):
method __init__ (line 368) | def __init__(self, name, action=0, depend=None):
method run (line 380) | def run(self):
method finish (line 383) | def finish(self):
method is_finished (line 386) | def is_finished(self):
method is_started (line 389) | def is_started(self):
method is_queued (line 392) | def is_queued(self):
method is_failed (line 395) | def is_failed(self):
method get_status (line 398) | def get_status(self):
method can_run (line 401) | def can_run(self, tasks):
FILE: sickrage/core/queues/postprocessor.py
class PostProcessorTaskActions (line 31) | class PostProcessorTaskActions(Enum):
class PostProcessorQueue (line 36) | class PostProcessorQueue(Queue):
method __init__ (line 37) | def __init__(self):
method output (line 42) | def output(self):
method log (line 45) | def log(self, message, level=None):
method clear_log (line 49) | def clear_log(self):
method find_in_queue (line 52) | def find_in_queue(self, dirName, proc_type):
method queue_length (line 66) | def queue_length(self):
method put (line 82) | def put(self, dirName, nzbName=None, process_method=None, force=False,...
class PostProcessorTask (line 130) | class PostProcessorTask(Task):
method __init__ (line 131) | def __init__(self, dirName, nzbName=None, process_method=None, force=F...
method run (line 146) | def run(self):
FILE: sickrage/core/queues/search.py
class SearchTaskActions (line 35) | class SearchTaskActions(Enum):
class SearchQueue (line 42) | class SearchQueue(Queue):
method __init__ (line 43) | def __init__(self):
method is_in_queue (line 48) | def is_in_queue(self, series_id, season, episode):
method is_ep_in_queue (line 55) | def is_ep_in_queue(self, season, episode):
method is_show_in_queue (line 62) | def is_show_in_queue(self, series_id):
method get_all_tasks_from_queue_by_show (line 65) | def get_all_tasks_from_queue_by_show(self, series_id):
method pause_daily_searcher (line 68) | def pause_daily_searcher(self):
method unpause_daily_searcher (line 71) | def unpause_daily_searcher(self):
method is_daily_searcher_paused (line 74) | def is_daily_searcher_paused(self):
method pause_backlog_searcher (line 77) | def pause_backlog_searcher(self):
method unpause_backlog_searcher (line 80) | def unpause_backlog_searcher(self):
method is_backlog_searcher_paused (line 83) | def is_backlog_searcher_paused(self):
method is_manual_search_in_progress (line 86) | def is_manual_search_in_progress(self):
method is_backlog_in_progress (line 89) | def is_backlog_in_progress(self):
method is_dailysearch_in_progress (line 92) | def is_dailysearch_in_progress(self):
method queue_length (line 95) | def queue_length(self):
method put (line 109) | def put(self, item, *args, **kwargs):
class DailySearchTask (line 130) | class DailySearchTask(Task):
method __init__ (line 131) | def __init__(self, series_id, series_provider_id, season, episode):
method run (line 141) | def run(self):
class ManualSearchTask (line 187) | class ManualSearchTask(Task):
method __init__ (line 188) | def __init__(self, series_id, series_provider_id, season, episode, dow...
method run (line 200) | def run(self):
method finish (line 252) | def finish(self):
class BacklogSearchTask (line 261) | class BacklogSearchTask(Task):
method __init__ (line 262) | def __init__(self, series_id, series_provider_id, season, episode):
method run (line 273) | def run(self):
class FailedSearchTask (line 319) | class FailedSearchTask(Task):
method __init__ (line 320) | def __init__(self, series_id, series_provider_id, season, episode, dow...
method run (line 332) | def run(self):
FILE: sickrage/core/queues/show.py
class ShowQueue (line 42) | class ShowQueue(Queue):
method __init__ (line 43) | def __init__(self):
method loading_show_list (line 47) | def loading_show_list(self):
method _is_in_queue (line 50) | def _is_in_queue(self, series_id, actions):
method _is_being (line 57) | def _is_being(self, series_id, actions):
method is_queued_to_remove (line 64) | def is_queued_to_remove(self, series_id):
method is_queued_to_add (line 67) | def is_queued_to_add(self, series_id):
method is_queued_to_update (line 70) | def is_queued_to_update(self, series_id):
method is_queued_to_refresh (line 73) | def is_queued_to_refresh(self, series_id):
method is_queued_to_rename (line 76) | def is_queued_to_rename(self, series_id):
method is_queued_to_subtitle (line 79) | def is_queued_to_subtitle(self, series_id):
method is_being_removed (line 82) | def is_being_removed(self, series_id):
method is_being_added (line 85) | def is_being_added(self, series_id):
method is_being_updated (line 88) | def is_being_updated(self, series_id):
method is_being_refreshed (line 91) | def is_being_refreshed(self, series_id):
method is_being_renamed (line 94) | def is_being_renamed(self, series_id):
method is_being_subtitled (line 97) | def is_being_subtitled(self, series_id):
method update_show (line 100) | def update_show(self, series_id, series_provider_id, force=False):
method refresh_show (line 113) | def refresh_show(self, series_id, series_provider_id, force=False):
method rename_show_episodes (line 127) | def rename_show_episodes(self, series_id, series_provider_id):
method download_subtitles (line 130) | def download_subtitles(self, series_id, series_provider_id):
method add_show (line 133) | def add_show(self, series_provider_id, series_id, showDir, default_sta...
method remove_show (line 159) | def remove_show(self, series_id, series_provider_id, full=False):
class ShowTaskActions (line 175) | class ShowTaskActions(Enum):
class ShowTask (line 185) | class ShowTask(Task):
method __init__ (line 197) | def __init__(self, series_id, series_provider_id, action):
method is_in_queue (line 202) | def is_in_queue(self):
method show_name (line 206) | def show_name(self):
method is_loading (line 211) | def is_loading(self):
method run (line 214) | def run(self):
method finish (line 223) | def finish(self):
class ShowTaskAdd (line 233) | class ShowTaskAdd(ShowTask):
method __init__ (line 234) | def __init__(self, series_provider_id, series_id, show_dir, default_st...
method show_name (line 257) | def show_name(self):
method is_loading (line 267) | def is_loading(self):
method run (line 275) | def run(self):
method _finish_early (line 441) | def _finish_early(self):
class ShowTaskRefresh (line 449) | class ShowTaskRefresh(ShowTask):
method __init__ (line 450) | def __init__(self, series_id=None, series_provider_id=None, force=False):
method run (line 456) | def run(self):
class ShowTaskRename (line 483) | class ShowTaskRename(ShowTask):
method __init__ (line 484) | def __init__(self, series_id=None, series_provider_id=None):
method run (line 487) | def run(self):
class ShowTaskSubtitle (line 525) | class ShowTaskSubtitle(ShowTask):
method __init__ (line 526) | def __init__(self, series_id=None, series_provider_id=None):
method run (line 529) | def run(self):
class ShowTaskUpdate (line 545) | class ShowTaskUpdate(ShowTask):
method __init__ (line 546) | def __init__(self, series_id=None, series_provider_id=None, force=Fals...
method run (line 550) | def run(self):
class ShowTaskForceRemove (line 617) | class ShowTaskForceRemove(ShowTask):
method __init__ (line 618) | def __init__(self, series_id=None, series_provider_id=None, full=False):
method is_loading (line 626) | def is_loading(self):
method run (line 632) | def run(self):
FILE: sickrage/core/scene_numbering.py
function get_scene_numbering (line 33) | def get_scene_numbering(series_id, series_provider_id, season, episode, ...
function get_scene_absolute_numbering (line 62) | def get_scene_absolute_numbering(series_id, series_provider_id, absolute...
function get_series_provider_numbering (line 90) | def get_series_provider_numbering(series_id, series_provider_id, scene_s...
function get_series_provider_absolute_numbering (line 112) | def get_series_provider_absolute_numbering(series_id, series_provider_id...
function get_series_provider_numbering_from_xem_numbering (line 141) | def get_series_provider_numbering_from_xem_numbering(series_id, series_p...
function get_series_provider_absolute_numbering_from_xem_numbering (line 162) | def get_series_provider_absolute_numbering_from_xem_numbering(series_id,...
function get_scene_numbering_for_show (line 191) | def get_scene_numbering_for_show(series_id, series_provider_id):
function get_scene_absolute_numbering_for_show (line 215) | def get_scene_absolute_numbering_for_show(series_id, series_provider_id):
function get_xem_numbering_for_show (line 237) | def get_xem_numbering_for_show(series_id, series_provider_id):
function get_xem_absolute_numbering_for_show (line 263) | def get_xem_absolute_numbering_for_show(series_id, series_provider_id):
function find_scene_numbering (line 287) | def find_scene_numbering(series_id, series_provider_id, season, episode):
function find_scene_absolute_numbering (line 305) | def find_scene_absolute_numbering(series_id, series_provider_id, absolut...
function find_xem_numbering (line 323) | def find_xem_numbering(series_id, series_provider_id, season, episode):
function find_xem_absolute_numbering (line 350) | def find_xem_absolute_numbering(series_id, series_provider_id, absolute_...
function set_scene_numbering (line 371) | def set_scene_numbering(series_id, series_provider_id, season=None, epis...
function xem_refresh (line 402) | def xem_refresh(series_id, series_provider_id, force=False):
function get_absolute_number_from_season_and_episode (line 480) | def get_absolute_number_from_season_and_episode(series_id, series_provid...
FILE: sickrage/core/search.py
function snatch_episode (line 51) | def snatch_episode(result, end_status=EpisodeStatus.SNATCHED):
function pick_best_result (line 145) | def pick_best_result(results, season_pack=False):
function is_final_result (line 257) | def is_final_result(result):
function is_first_best_match (line 291) | def is_first_best_match(result):
function search_providers (line 310) | def search_providers(series_id, series_provider_id, season, episode, man...
FILE: sickrage/core/searchers/backlog_searcher.py
class BacklogSearcher (line 32) | class BacklogSearcher(object):
method __init__ (line 33) | def __init__(self, *args, **kwargs):
method task (line 42) | def task(self, force=False):
method am_running (line 61) | def am_running(self):
method search_backlog (line 65) | def search_backlog(self, series_id=None, series_provider_id=None):
method _get_wanted (line 100) | def _get_wanted(show, from_date):
method _get_last_backlog_search (line 138) | def _get_last_backlog_search(show):
method _set_last_backlog_search (line 143) | def _set_last_backlog_search(show, when):
FILE: sickrage/core/searchers/daily_searcher.py
class DailySearcher (line 30) | class DailySearcher(object):
method __init__ (line 31) | def __init__(self):
method task (line 36) | def task(self, force=False):
method _get_wanted (line 79) | def _get_wanted(show, from_date):
FILE: sickrage/core/searchers/failed_snatch_searcher.py
class FailedSnatchSearcher (line 33) | class FailedSnatchSearcher(object):
method __init__ (line 34) | def __init__(self):
method task (line 39) | def task(self, force=False):
method snatched_episodes (line 83) | def snatched_episodes(self):
method downloaded_releases (line 91) | def downloaded_releases(self):
FILE: sickrage/core/searchers/proper_searcher.py
class ProperSearcher (line 41) | class ProperSearcher(object):
method __init__ (line 42) | def __init__(self, *args, **kwargs):
method task (line 46) | def task(self, force=False):
method _get_proper_list (line 72) | def _get_proper_list(self):
method _get_wanted (line 214) | def _get_wanted(self, show, search_date):
method _download_propers (line 229) | def _download_propers(self, proper_list):
method _generic_name (line 290) | def _generic_name(self, name):
method _set_last_proper_search (line 293) | def _set_last_proper_search(self, series_id, series_provider_id, when):
method _get_last_proper_search (line 309) | def _get_last_proper_search(self, series_id, series_provider_id):
FILE: sickrage/core/searchers/subtitle_searcher.py
class SubtitleSearcher (line 32) | class SubtitleSearcher(object):
method __init__ (line 38) | def __init__(self, *args, **kwargs):
method task (line 42) | def task(self, force=False):
method _get_rules (line 129) | def _get_rules():
FILE: sickrage/core/searchers/trakt_searcher.py
function set_episode_to_wanted (line 35) | def set_episode_to_wanted(show, s, e):
class TraktSearcher (line 56) | class TraktSearcher(object):
method __init__ (line 57) | def __init__(self):
method task (line 67) | def task(self, force=False):
method sync_watchlist (line 98) | def sync_watchlist(self):
method sync_collection (line 113) | def sync_collection(self):
method find_show_match (line 120) | def find_show_match(self, series_provider_id, series_id):
method remove_show_from_trakt_library (line 135) | def remove_show_from_trakt_library(self, show_obj):
method add_show_to_trakt_library (line 155) | def add_show_to_trakt_library(self, show_obj):
method add_episodes_to_trakt_collection (line 184) | def add_episodes_to_trakt_collection(self):
method remove_episodes_from_trakt_collection (line 205) | def remove_episodes_from_trakt_collection(self):
method remove_episodes_from_trakt_watch_list (line 231) | def remove_episodes_from_trakt_watch_list(self):
method add_episodes_to_trakt_watch_list (line 254) | def add_episodes_to_trakt_watch_list(self):
method add_show_to_trakt_watch_list (line 283) | def add_show_to_trakt_watch_list(self):
method remove_show_from_sickrage (line 310) | def remove_show_from_sickrage(self):
method update_shows (line 329) | def update_shows(self):
method update_episodes (line 361) | def update_episodes(self):
method add_default_show (line 405) | def add_default_show(series_provider_id, series_id, name, status):
method manage_new_show (line 441) | def manage_new_show(self, show):
method _check_in_list (line 447) | def _check_in_list(self, trakt_id, series_id, season, episode, List=No...
method _get_show_watchlist (line 468) | def _get_show_watchlist(self):
method _get_episode_watchlist (line 481) | def _get_episode_watchlist(self):
method _get_show_collection (line 495) | def _get_show_collection(self):
method trakt_bulk_data_generate (line 510) | def trakt_bulk_data_generate(data):
FILE: sickrage/core/traktapi.py
class TraktAPI (line 25) | class TraktAPI(object):
method __init__ (line 26) | def __init__(self):
method authenticate (line 51) | def authenticate(pin):
method on_token_refreshed (line 63) | def on_token_refreshed(response):
method __getattr__ (line 70) | def __getattr__(self, name):
method __setattr__ (line 76) | def __setattr__(self, name, value):
method __getitem__ (line 82) | def __getitem__(self, key):
class TraktException (line 86) | class TraktException(Exception):
class TraktAuthException (line 90) | class TraktAuthException(TraktException):
class TraktServerBusy (line 94) | class TraktServerBusy(TraktException):
FILE: sickrage/core/tv/episode/__init__.py
class TVEpisode (line 50) | class TVEpisode(object):
method __init__ (line 51) | def __init__(self, series_id, series_provider_id, season, episode, loc...
method slug (line 73) | def slug(self):
method series_id (line 77) | def series_id(self):
method series_id (line 81) | def series_id(self, value):
method episode_id (line 85) | def episode_id(self):
method episode_id (line 89) | def episode_id(self, value):
method series_provider_id (line 93) | def series_provider_id(self):
method series_provider_id (line 97) | def series_provider_id(self, value):
method tvdb_id (line 101) | def tvdb_id(self):
method season (line 106) | def season(self):
method season (line 110) | def season(self, value):
method episode (line 114) | def episode(self):
method episode (line 118) | def episode(self, value):
method absolute_number (line 122) | def absolute_number(self):
method absolute_number (line 126) | def absolute_number(self, value):
method scene_season (line 130) | def scene_season(self):
method scene_season (line 134) | def scene_season(self, value):
method scene_episode (line 138) | def scene_episode(self):
method scene_episode (line 142) | def scene_episode(self, value):
method scene_absolute_number (line 146) | def scene_absolute_number(self):
method scene_absolute_number (line 150) | def scene_absolute_number(self, value):
method xem_season (line 154) | def xem_season(self):
method xem_season (line 158) | def xem_season(self, value):
method xem_episode (line 162) | def xem_episode(self):
method xem_episode (line 166) | def xem_episode(self, value):
method xem_absolute_number (line 170) | def xem_absolute_number(self):
method xem_absolute_number (line 174) | def xem_absolute_number(self, value):
method name (line 178) | def name(self):
method name (line 182) | def name(self, value):
method description (line 186) | def description(self):
method description (line 190) | def description(self, value):
method subtitles (line 194) | def subtitles(self):
method subtitles (line 198) | def subtitles(self, value):
method subtitles_searchcount (line 202) | def subtitles_searchcount(self):
method subtitles_searchcount (line 206) | def subtitles_searchcount(self, value):
method subtitles_lastsearch (line 210) | def subtitles_lastsearch(self):
method subtitles_lastsearch (line 214) | def subtitles_lastsearch(self, value):
method airdate (line 218) | def airdate(self):
method airdate (line 222) | def airdate(self, value):
method hasnfo (line 226) | def hasnfo(self):
method hasnfo (line 230) | def hasnfo(self, value):
method hastbn (line 234) | def hastbn(self):
method hastbn (line 238) | def hastbn(self, value):
method status (line 242) | def status(self):
method status (line 246) | def status(self, value):
method quality (line 250) | def quality(self):
method quality (line 256) | def quality(self, value):
method location (line 260) | def location(self):
method location (line 264) | def location(self, value):
method file_size (line 270) | def file_size(self):
method file_size (line 274) | def file_size(self, value):
method release_name (line 278) | def release_name(self):
method release_name (line 282) | def release_name(self, value):
method is_proper (line 286) | def is_proper(self):
method is_proper (line 290) | def is_proper(self, value):
method version (line 294) | def version(self):
method version (line 298) | def version(self, value):
method release_group (line 302) | def release_group(self):
method release_group (line 306) | def release_group(self, value):
method poster (line 313) | def poster(self):
method show (line 317) | def show(self):
method related_episodes (line 321) | def related_episodes(self):
method search_queue_status (line 325) | def search_queue_status(self):
method overview (line 346) | def overview(self):
method save (line 394) | def save(self):
method delete (line 407) | def delete(self):
method refresh_subtitles (line 415) | def refresh_subtitles(self):
method download_subtitles (line 422) | def download_subtitles(self):
method checkForMetaFiles (line 453) | def checkForMetaFiles(self):
method populate_episode (line 481) | def populate_episode(self, season, episode):
method load_from_series_provider (line 507) | def load_from_series_provider(self, season=None, episode=None, cache=T...
method load_from_nfo (line 624) | def load_from_nfo(self, location):
method create_meta_files (line 706) | def create_meta_files(self, force=False):
method create_nfo (line 717) | def create_nfo(self, force=False):
method update_video_metadata (line 728) | def update_video_metadata(self):
method create_thumbnail (line 746) | def create_thumbnail(self, force=False):
method fullPath (line 754) | def fullPath(self):
method createStrings (line 760) | def createStrings(self, pattern=None):
method pretty_name (line 779) | def pretty_name(self):
method proper_path (line 794) | def proper_path(self):
method rename (line 815) | def rename(self):
method airdate_modify_stamp (line 893) | def airdate_modify_stamp(self):
method _ep_name (line 939) | def _ep_name(self):
method _replace_map (line 974) | def _replace_map(self):
method _format_string (line 1086) | def _format_string(self, pattern, replace_map):
method _format_pattern (line 1102) | def _format_pattern(self, pattern=None, multi=None, anime_type=None):
method formatted_filename (line 1265) | def formatted_filename(self, pattern=None, multi=None, anime_type=None):
method formatted_dir (line 1286) | def formatted_dir(self, pattern=None, multi=None):
method rename_ep_file (line 1310) | def rename_ep_file(self, cur_path, new_path, old_path_length=0):
method get_season_episode_numbering (line 1356) | def get_season_episode_numbering(self):
method get_absolute_numbering (line 1364) | def get_absolute_numbering(self):
method __unicode__ (line 1372) | def __unicode__(self):
method to_json (line 1387) | def to_json(self):
FILE: sickrage/core/tv/episode/helpers.py
function find_episode (line 26) | def find_episode(episode_id, series_provider_id):
FILE: sickrage/core/tv/show/__init__.py
class TVShowID (line 51) | class TVShowID(object):
method __init__ (line 52) | def __init__(self, series_id, series_provider_id):
method slug (line 57) | def slug(self):
class TVShow (line 61) | class TVShow(object):
method __init__ (line 62) | def __init__(self, series_id, series_provider_id, lang='eng', location...
method slug (line 85) | def slug(self):
method series_id (line 89) | def series_id(self):
method series_id (line 93) | def series_id(self, value):
method series_provider_id (line 97) | def series_provider_id(self):
method series_provider_id (line 101) | def series_provider_id(self, value):
method tvdb_id (line 105) | def tvdb_id(self):
method name (line 110) | def name(self):
method name (line 114) | def name(self, value):
method location (line 118) | def location(self):
method location (line 122) | def location(self, value):
method network (line 126) | def network(self):
method network (line 130) | def network(self, value):
method genre (line 134) | def genre(self):
method genre (line 138) | def genre(self, value):
method overview (line 142) | def overview(self):
method overview (line 146) | def overview(self, value):
method classification (line 150) | def classification(self):
method classification (line 154) | def classification(self, value):
method runtime (line 158) | def runtime(self):
method runtime (line 162) | def runtime(self, value):
method quality (line 166) | def quality(self):
method quality (line 170) | def quality(self, value):
method airs (line 174) | def airs(self):
method airs (line 178) | def airs(self, value):
method status (line 182) | def status(self):
method status (line 186) | def status(self, value):
method flatten_folders (line 190) | def flatten_folders(self):
method flatten_folders (line 194) | def flatten_folders(self, value):
method paused (line 198) | def paused(self):
method paused (line 202) | def paused(self, value):
method scene (line 206) | def scene(self):
method scene (line 210) | def scene(self, value):
method anime (line 214) | def anime(self):
method anime (line 218) | def anime(self, value):
method search_format (line 222) | def search_format(self):
method search_format (line 226) | def search_format(self, value):
method subtitles (line 230) | def subtitles(self):
method subtitles (line 234) | def subtitles(self, value):
method dvd_order (line 238) | def dvd_order(self):
method dvd_order (line 242) | def dvd_order(self, value):
method skip_downloaded (line 246) | def skip_downloaded(self):
method skip_downloaded (line 250) | def skip_downloaded(self, value):
method startyear (line 254) | def startyear(self):
method startyear (line 258) | def startyear(self, value):
method lang (line 262) | def lang(self):
method lang (line 266) | def lang(self, value):
method imdb_id (line 270) | def imdb_id(self):
method imdb_id (line 274) | def imdb_id(self, value):
method rls_ignore_words (line 278) | def rls_ignore_words(self):
method rls_ignore_words (line 282) | def rls_ignore_words(self, value):
method rls_require_words (line 286) | def rls_require_words(self):
method rls_require_words (line 290) | def rls_require_words(self, value):
method default_ep_status (line 294) | def default_ep_status(self):
method default_ep_status (line 298) | def default_ep_status(self, value):
method sub_use_sr_metadata (line 302) | def sub_use_sr_metadata(self):
method sub_use_sr_metadata (line 306) | def sub_use_sr_metadata(self, value):
method notify_list (line 310) | def notify_list(self):
method notify_list (line 314) | def notify_list(self, value):
method search_delay (line 318) | def search_delay(self):
method search_delay (line 322) | def search_delay(self, value):
method scene_exceptions (line 326) | def scene_exceptions(self):
method scene_exceptions (line 332) | def scene_exceptions(self, value):
method last_update (line 336) | def last_update(self):
method last_update (line 340) | def last_update(self, value):
method last_refresh (line 344) | def last_refresh(self):
method last_refresh (line 348) | def last_refresh(self, value):
method last_backlog_search (line 352) | def last_backlog_search(self):
method last_backlog_search (line 356) | def last_backlog_search(self, value):
method last_proper_search (line 360) | def last_proper_search(self):
method last_proper_search (line 364) | def last_proper_search(self, value):
method last_scene_exceptions_refresh (line 368) | def last_scene_exceptions_refresh(self):
method last_scene_exceptions_refresh (line 372) | def last_scene_exceptions_refresh(self, value):
method last_xem_refresh (line 376) | def last_xem_refresh(self):
method last_xem_refresh (line 380) | def last_xem_refresh(self, value):
method series_provider (line 384) | def series_provider(self):
method episodes (line 388) | def episodes(self):
method imdb_info (line 396) | def imdb_info(self):
method is_anime (line 401) | def is_anime(self):
method airs_next (line 405) | def airs_next(self):
method airs_prev (line 427) | def airs_prev(self):
method episodes_unaired (line 449) | def episodes_unaired(self):
method episodes_snatched (line 465) | def episodes_snatched(self):
method episodes_downloaded (line 482) | def episodes_downloaded(self):
method episodes_special (line 498) | def episodes_special(self):
method episodes_total (line 511) | def episodes_total(self):
method new_episodes (line 527) | def new_episodes(self):
method total_size (line 559) | def total_size(self):
method network_logo_name (line 569) | def network_logo_name(self):
method release_groups (line 573) | def release_groups(self):
method poster (line 578) | def poster(self):
method banner (line 582) | def banner(self):
method allowed_qualities (line 586) | def allowed_qualities(self):
method preferred_qualities (line 591) | def preferred_qualities(self):
method show_queue_status (line 596) | def show_queue_status(self):
method is_loading (line 641) | def is_loading(self):
method is_removing (line 645) | def is_removing(self):
method is_loading_episodes (line 649) | def is_loading_episodes(self):
method save (line 652) | def save(self):
method delete (line 664) | def delete(self):
method flush_episodes (line 669) | def flush_episodes(self):
method load_from_series_provider (line 672) | def load_from_series_provider(self, cache=True):
method load_episodes_from_series_provider (line 706) | def load_episodes_from_series_provider(self, cache=True):
method get_episode (line 752) | def get_episode(self, season=None, episode=None, absolute_number=None,...
method delete_episode (line 786) | def delete_episode(self, season, episode, full=False):
method write_show_nfo (line 817) | def write_show_nfo(self, force=False):
method write_metadata (line 830) | def write_metadata(self, show_only=False, force=False):
method write_episode_nfos (line 845) | def write_episode_nfos(self, force=False):
method update_episode_video_metadata (line 860) | def update_episode_video_metadata(self):
method load_episodes_from_dir (line 875) | def load_episodes_from_dir(self):
method load_imdb_info (line 929) | def load_imdb_info(self):
method get_images (line 989) | def get_images(self, fanart=None, poster=None):
method make_ep_from_file (line 1005) | def make_ep_from_file(self, filename):
method delete_show (line 1121) | def delete_show(self, full=False):
method populate_cache (line 1184) | def populate_cache(self, force=False):
method refresh_dir (line 1188) | def refresh_dir(self):
method download_subtitles (line 1250) | def download_subtitles(self):
method qualitiesToString (line 1263) | def qualitiesToString(self, qualities=None):
method want_episode (line 1279) | def want_episode(self, season, episode, quality, manualSearch=False, d...
method get_all_episodes_from_absolute_number (line 1336) | def get_all_episodes_from_absolute_number(self, absolute_numbers):
method retrieve_scene_exceptions (line 1351) | def retrieve_scene_exceptions(self, get_anidb=True, force=False):
method get_scene_exception_by_name (line 1385) | def get_scene_exception_by_name(self, exception_name):
method get_scene_exceptions_by_season (line 1391) | def get_scene_exceptions_by_season(self, season=-1):
method update_scene_exceptions (line 1404) | def update_scene_exceptions(self, scene_exceptions, season=-1):
method __unicode__ (line 1408) | def __unicode__(self):
method to_json (line 1430) | def to_json(self, episodes=False, progress=False, details=False):
FILE: sickrage/core/tv/show/coming_episodes.py
class ComingEpsLayout (line 32) | class ComingEpsLayout(enum.Enum):
method _strings (line 39) | def _strings(self):
method display_name (line 48) | def display_name(self):
class ComingEpsSortBy (line 52) | class ComingEpsSortBy(enum.Enum):
method _strings (line 58) | def _strings(self):
method display_name (line 66) | def display_name(self):
class ComingEpisodes (line 70) | class ComingEpisodes:
method get_coming_episodes (line 86) | def get_coming_episodes(categories, sort_by, group, paused=False):
FILE: sickrage/core/tv/show/helpers.py
function find_show (line 26) | def find_show(series_id, series_provider_id=None):
function find_show_by_slug (line 36) | def find_show_by_slug(slug):
function find_show_by_name (line 41) | def find_show_by_name(term):
function find_show_by_scene_exception (line 47) | def find_show_by_scene_exception(term):
function find_show_by_location (line 53) | def find_show_by_location(location):
function get_show_list (line 59) | def get_show_list(offset=0, limit=0):
FILE: sickrage/core/tv/show/history.py
class History (line 34) | class History:
method clear (line 35) | def clear(self):
method get (line 43) | def get(self, limit=100, action=None):
method trim (line 97) | def trim(self):
method _log_history_item (line 109) | def _log_history_item(action, series_id, series_provider_id, season, e...
method log_snatch (line 143) | def log_snatch(search_result):
method log_download (line 165) | def log_download(series_id, series_provider_id, season, episode, statu...
method log_subtitle (line 187) | def log_subtitle(series_id, series_provider_id, season, episode, statu...
method log_failed (line 206) | def log_failed(series_id, series_provider_id, season, episode, release...
class FailedHistory (line 226) | class FailedHistory(object):
method prepare_failed_name (line 228) | def prepare_failed_name(release):
method log_failed (line 241) | def log_failed(release):
method log_success (line 284) | def log_success(release):
method has_failed (line 291) | def has_failed(release, size, provider="%"):
method revert_failed_episode (line 311) | def revert_failed_episode(series_id, series_provider_id, season, episo...
method mark_failed (line 340) | def mark_failed(series_id, series_provider_id, season, episode):
method log_snatch (line 364) | def log_snatch(search_result):
method delete_logged_snatch (line 394) | def delete_logged_snatch(release, size, provider):
method trim_history (line 409) | def trim_history():
method find_failed_release (line 418) | def find_failed_release(series_id, series_provider_id, season, episode):
FILE: sickrage/core/ui.py
class Notifications (line 32) | class Notifications(object):
method __init__ (line 37) | def __init__(self):
method message (line 41) | def message(self, title, message=""):
method error (line 53) | def error(self, title, message=""):
method get_notifications (line 65) | def get_notifications(self, remote_ip='127.0.0.1'):
class Notification (line 81) | class Notification(object):
method __init__ (line 87) | def __init__(self, title, message='', type=None, timeout=None):
method data (line 96) | def data(self):
method is_new (line 103) | def is_new(self, remote_ip='127.0.0.1'):
method is_expired (line 109) | def is_expired(self):
method see (line 115) | def see(self, remote_ip='127.0.0.1'):
class LoadingTVShow (line 189) | class LoadingTVShow:
method __init__ (line 190) | def __init__(self, dir):
FILE: sickrage/core/updaters/rsscache_updater.py
class RSSCacheUpdater (line 7) | class RSSCacheUpdater(object):
method __init__ (line 8) | def __init__(self):
method task (line 14) | def task(self, force=False):
FILE: sickrage/core/updaters/show_updater.py
class ShowUpdater (line 33) | class ShowUpdater(object):
method __init__ (line 34) | def __init__(self):
method task (line 39) | def task(self, force=False):
FILE: sickrage/core/updaters/tz_updater.py
class TimeZoneUpdater (line 33) | class TimeZoneUpdater(object):
method __init__ (line 34) | def __init__(self):
method update_network_timezone (line 39) | def update_network_timezone(self, network, timezone):
method delete_network_timezone (line 54) | def delete_network_timezone(self, network):
method update_network_timezones (line 58) | def update_network_timezones(self):
method get_network_timezone (line 109) | def get_network_timezone(self, network):
method parse_date_time (line 127) | def parse_date_time(self, d, t, network):
method test_timeformat (line 162) | def test_timeformat(self, t):
FILE: sickrage/core/upnp.py
class UPNPClient (line 33) | class UPNPClient(object):
method __init__ (line 36) | def __init__(self, *args, **kwargs):
method task (line 40) | def task(self, force=False):
method refresh_nat_portmap (line 53) | def refresh_nat_portmap(self):
method add_nat_portmap (line 62) | def add_nat_portmap(self):
method _add_nat_portmap (line 82) | def _add_nat_portmap(self, upnp_dev):
method delete_nat_portmap (line 102) | def delete_nat_portmap(self):
method _delete_nat_portmap (line 110) | def _delete_nat_portmap(self, upnp_dev):
method _discover_upnp_device (line 120) | def _discover_upnp_device(self):
method _find_internal_ip_on_device_network (line 131) | def _find_internal_ip_on_device_network(self, upnp_dev):
FILE: sickrage/core/version_updater.py
class VersionUpdater (line 42) | class VersionUpdater(object):
method __init__ (line 43) | def __init__(self):
method updater (line 48) | def updater(self):
method version (line 70) | def version(self):
method branch (line 74) | def branch(self):
method task (line 77) | def task(self, force=False):
method backup (line 111) | def backup(self):
method safe_to_update (line 134) | def safe_to_update(self):
method check_for_update (line 151) | def check_for_update(self):
method update (line 174) | def update(self, webui=False):
class UpdateManager (line 211) | class UpdateManager(object):
method __init__ (line 212) | def __init__(self):
method version (line 216) | def version(self):
method latest_version (line 220) | def latest_version(self):
method current_branch (line 239) | def current_branch(self):
method need_update (line 242) | def need_update(self):
method update (line 252) | def update(self):
method set_latest_version (line 255) | def set_latest_version(self):
method _pip_cmd (line 267) | def _pip_cmd(args, silent=False):
method upgrade_pip (line 295) | def upgrade_pip(self):
method install_requirements (line 312) | def install_requirements(self, branch):
class GitUpdateManager (line 347) | class GitUpdateManager(UpdateManager):
method __init__ (line 348) | def __init__(self):
method version (line 355) | def version(self):
method latest_version (line 373) | def latest_version(self):
method current_branch (line 409) | def current_branch(self):
method remote_branches (line 416) | def remote_branches(self):
method _git_path (line 424) | def _git_path(self):
method _git_cmd (line 457) | def _git_cmd(git_path, args, silent=False):
method need_update (line 504) | def need_update(self):
method update (line 511) | def update(self):
method clean (line 535) | def clean(self):
method reset (line 543) | def reset(self):
method fetch (line 551) | def fetch(self):
method checkout_branch (line 561) | def checkout_branch(self, branch):
method get_remote_url (line 584) | def get_remote_url(self):
method set_remote_url (line 588) | def set_remote_url(self):
class WindowsUpdateManager (line 593) | class WindowsUpdateManager(UpdateManager):
method __init__ (line 594) | def __init__(self):
method latest_version (line 600) | def latest_version(self):
class SynologyUpdateManager (line 612) | class SynologyUpdateManager(UpdateManager):
method __init__ (line 613) | def __init__(self):
class DockerUpdateManager (line 619) | class DockerUpdateManager(UpdateManager):
method __init__ (line 620) | def __init__(self):
class ReadynasUpdateManager (line 626) | class ReadynasUpdateManager(UpdateManager):
method __init__ (line 627) | def __init__(self):
class QnapUpdateManager (line 633) | class QnapUpdateManager(UpdateManager):
method __init__ (line 634) | def __init__(self):
class PipUpdateManager (line 640) | class PipUpdateManager(UpdateManager):
method __init__ (line 641) | def __init__(self):
class SourceUpdateManager (line 647) | class SourceUpdateManager(UpdateManager):
method __init__ (line 648) | def __init__(self):
method update (line 652) | def update(self):
FILE: sickrage/core/webserver/__init__.py
class StaticImageHandler (line 106) | class StaticImageHandler(StaticFileHandler):
method initialize (line 107) | def initialize(self, path, default_filename=None):
method get (line 110) | def get(self, path, include_body=True):
class StaticNoCacheFileHandler (line 119) | class StaticNoCacheFileHandler(StaticFileHandler):
method set_extra_headers (line 120) | def set_extra_headers(self, path):
class WebServer (line 124) | class WebServer(object):
method __init__ (line 125) | def __init__(self):
method cert_file (line 138) | def cert_file(self):
method cert_key_file (line 144) | def cert_key_file(self):
method start (line 149) | def start(self):
method load_ssl_certificate (line 508) | def load_ssl_certificate(self, certificate=None, private_key=None):
method shutdown (line 554) | def shutdown(self):
FILE: sickrage/core/webserver/handlers/account.py
class AccountLinkHandler (line 33) | class AccountLinkHandler(BaseHandler):
method get (line 35) | def get(self, *args, **kwargs):
class AccountUnlinkHandler (line 99) | class AccountUnlinkHandler(BaseHandler):
method get (line 101) | def get(self, *args, **kwargs):
class AccountIsLinkedHandler (line 116) | class AccountIsLinkedHandler(BaseHandler):
method get (line 118) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/announcements.py
class AnnouncementsHandler (line 28) | class AnnouncementsHandler(BaseHandler):
method get (line 30) | def get(self, *args, **kwargs):
class MarkAnnouncementSeenHandler (line 40) | class MarkAnnouncementSeenHandler(BaseHandler):
method post (line 42) | def post(self, *args, **kwargs):
class AnnouncementCountHandler (line 52) | class AnnouncementCountHandler(BaseHandler):
method get (line 54) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/api/__init__.py
class APIBaseHandler (line 43) | class APIBaseHandler(RequestHandler):
method __init__ (line 44) | def __init__(self, application, request, api_version='', **kwargs):
method prepare (line 48) | def prepare(self):
method run_async (line 126) | def run_async(self, method):
method get_current_user (line 134) | def get_current_user(self):
method write_error (line 146) | def write_error(self, status_code, **kwargs):
method set_default_headers (line 160) | def set_default_headers(self):
method options (line 167) | def options(self, *args, **kwargs):
method json_response (line 170) | def json_response(self, data=None, error=None, status=200):
method _no_content (line 183) | def _no_content(self):
method _unauthorized (line 186) | def _unauthorized(self, error):
method _bad_request (line 189) | def _bad_request(self, error):
method _not_found (line 192) | def _not_found(self, error):
method _validate_schema (line 195) | def _validate_schema(self, schema, arguments):
method _parse_value (line 198) | def _parse_value(self, value, func):
method _parse_boolean (line 205) | def _parse_boolean(self, value):
method generate_swagger_json (line 210) | def generate_swagger_json(self, handlers, api_version):
method get_argument (line 231) | def get_argument(self, *args, **kwargs):
class ApiProfileHandler (line 240) | class ApiProfileHandler(APIBaseHandler):
method get (line 241) | def get(self):
class ApiPingHandler (line 245) | class ApiPingHandler(APIBaseHandler):
method get (line 246) | def get(self):
class ApiSwaggerDotJsonHandler (line 250) | class ApiSwaggerDotJsonHandler(APIBaseHandler):
method initialize (line 251) | def initialize(self, api_handlers, api_version):
method get (line 256) | def get(self):
FILE: sickrage/core/webserver/handlers/api/schemas.py
class BaseSchema (line 25) | class BaseSchema(Schema):
class Meta (line 26) | class Meta:
class NotAuthorizedSchema (line 30) | class NotAuthorizedSchema(BaseSchema):
class NotFoundSchema (line 38) | class NotFoundSchema(BaseSchema):
class BaseSuccessSchema (line 46) | class BaseSuccessSchema(BaseSchema):
class BaseErrorSchema (line 54) | class BaseErrorSchema(BaseSchema):
class BadRequestSchema (line 62) | class BadRequestSchema(BaseErrorSchema):
FILE: sickrage/core/webserver/handlers/api/v1/__init__.py
class ApiV1BaseHandler (line 80) | class ApiV1BaseHandler(RequestHandler):
method __init__ (line 84) | def __init__(self, application, request, **kwargs):
method prepare (line 88) | async def prepare(self, *args, **kwargs):
method route (line 129) | async def route(self, method):
method _out_as_image (line 137) | def _out_as_image(self, _dict):
method _out_as_json (line 141) | def _out_as_json(self, _dict):
method api_calls (line 154) | def api_calls(self):
method call_dispatcher (line 161) | def call_dispatcher(self, *args, **kwargs):
method filter_params (line 225) | def filter_params(self, cmd, *args, **kwargs):
class ApiV1Handler (line 265) | class ApiV1Handler(ApiV1BaseHandler):
method __init__ (line 268) | def __init__(self, application, request, *args, **kwargs):
method run (line 275) | def run(self):
method return_help (line 279) | def return_help(self):
method return_missing (line 308) | def return_missing(self):
method check_params (line 315) | def check_params(self, key=None, default=None, required=None, arg_type...
method _check_param_type (line 365) | def _check_param_type(value, name, arg_type):
method _check_param_value (line 408) | def _check_param_value(value, name, allowed_values):
class TVDBShorthandWrapper (line 429) | class TVDBShorthandWrapper(ApiV1Handler):
method __init__ (line 432) | def __init__(self, sid, application, request, *args, **kwargs):
method run (line 443) | def run(self):
function _is_int (line 454) | def _is_int(data):
function _responds (line 463) | def _responds(result_type, data=None, msg=""):
function _map_quality (line 473) | def _map_quality(show_object):
function _get_quality_map (line 485) | def _get_quality_map():
function _get_root_dirs (line 537) | def _get_root_dirs():
class InternalApiError (line 574) | class InternalApiError(Exception):
class IntParseError (line 580) | class IntParseError(Exception):
class CMD_Help (line 586) | class CMD_Help(ApiV1Handler):
method __init__ (line 595) | def __init__(self, application, request, *args, **kwargs):
method run (line 600) | def run(self):
class CMD_Backup (line 610) | class CMD_Backup(ApiV1Handler):
method __init__ (line 619) | def __init__(self, application, request, *args, **kwargs):
method run (line 624) | def run(self):
class CMD_ComingEpisodes (line 634) | class CMD_ComingEpisodes(ApiV1Handler):
method __init__ (line 647) | def __init__(self, application, request, *args, **kwargs):
method run (line 654) | def run(self):
class CMD_Episode (line 682) | class CMD_Episode(ApiV1Handler):
method __init__ (line 700) | def __init__(self, application, request, *args, **kwargs):
method run (line 709) | def run(self):
class CMD_EpisodeSearch (line 752) | class CMD_EpisodeSearch(ApiV1Handler):
method __init__ (line 767) | def __init__(self, application, request, *args, **kwargs):
method run (line 775) | def run(self):
class CMD_EpisodeSetStatus (line 803) | class CMD_EpisodeSetStatus(ApiV1Handler):
method __init__ (line 820) | def __init__(self, application, request, *args, **kwargs):
method run (line 832) | def run(self):
class CMD_SubtitleSearch (line 899) | class CMD_SubtitleSearch(ApiV1Handler):
method __init__ (line 914) | def __init__(self, application, request, *args, **kwargs):
method run (line 922) | def run(self):
class CMD_Exceptions (line 957) | class CMD_Exceptions(ApiV1Handler):
method __init__ (line 968) | def __init__(self, application, request, *args, **kwargs):
method run (line 974) | def run(self):
class CMD_History (line 993) | class CMD_History(ApiV1Handler):
method __init__ (line 1003) | def __init__(self, application, request, *args, **kwargs):
method run (line 1009) | def run(self):
class CMD_HistoryClear (line 1037) | class CMD_HistoryClear(ApiV1Handler):
method __init__ (line 1041) | def __init__(self, application, request, *args, **kwargs):
method run (line 1044) | def run(self):
class CMD_HistoryTrim (line 1051) | class CMD_HistoryTrim(ApiV1Handler):
method __init__ (line 1055) | def __init__(self, application, request, *args, **kwargs):
method run (line 1058) | def run(self):
class CMD_Failed (line 1065) | class CMD_Failed(ApiV1Handler):
method __init__ (line 1074) | def __init__(self, application, request, *args, **kwargs):
method run (line 1078) | def run(self):
class CMD_Backlog (line 1092) | class CMD_Backlog(ApiV1Handler):
method __init__ (line 1096) | def __init__(self, application, request, *args, **kwargs):
method run (line 1099) | def run(self):
class CMD_Logs (line 1128) | class CMD_Logs(ApiV1Handler):
method __init__ (line 1141) | def __init__(self, application, request, *args, **kwargs):
method run (line 1146) | def run(self):
class CMD_PostProcess (line 1177) | class CMD_PostProcess(ApiV1Handler):
method __init__ (line 1194) | def __init__(self, application, request, *args, **kwargs):
method run (line 1207) | def run(self):
class CMD_SiCKRAGE (line 1228) | class CMD_SiCKRAGE(ApiV1Handler):
method __init__ (line 1232) | def __init__(self, application, request, *args, **kwargs):
method run (line 1235) | def run(self):
class CMD_SiCKRAGEAddRootDir (line 1242) | class CMD_SiCKRAGEAddRootDir(ApiV1Handler):
method __init__ (line 1254) | def __init__(self, application, request, *args, **kwargs):
method run (line 1259) | def run(self):
class CMD_SiCKRAGECheckVersion (line 1304) | class CMD_SiCKRAGECheckVersion(ApiV1Handler):
method __init__ (line 1308) | def __init__(self, application, request, *args, **kwargs):
method run (line 1311) | def run(self):
class CMD_SiCKRAGECheckScheduler (line 1323) | class CMD_SiCKRAGECheckScheduler(ApiV1Handler):
method __init__ (line 1327) | def __init__(self, application, request, *args, **kwargs):
method run (line 1330) | def run(self):
class CMD_SiCKRAGEDeleteRootDir (line 1342) | class CMD_SiCKRAGEDeleteRootDir(ApiV1Handler):
method __init__ (line 1348) | def __init__(self, application, request, *args, **kwargs):
method run (line 1352) | def run(self):
class CMD_SiCKRAGEGetDefaults (line 1386) | class CMD_SiCKRAGEGetDefaults(ApiV1Handler):
method __init__ (line 1390) | def __init__(self, application, request, *args, **kwargs):
method run (line 1393) | def run(self):
class CMD_SiCKRAGEGetMessages (line 1404) | class CMD_SiCKRAGEGetMessages(ApiV1Handler):
method __init__ (line 1408) | def __init__(self, application, request, *args, **kwargs):
method run (line 1411) | def run(self):
class CMD_SiCKRAGEGetRootDirs (line 1420) | class CMD_SiCKRAGEGetRootDirs(ApiV1Handler):
method __init__ (line 1424) | def __init__(self, application, request, *args, **kwargs):
method run (line 1427) | def run(self):
class CMD_SiCKRAGEPauseDaily (line 1433) | class CMD_SiCKRAGEPauseDaily(ApiV1Handler):
method __init__ (line 1442) | def __init__(self, application, request, *args, **kwargs):
method run (line 1446) | def run(self):
class CMD_SiCKRAGEPauseBacklog (line 1456) | class CMD_SiCKRAGEPauseBacklog(ApiV1Handler):
method __init__ (line 1465) | def __init__(self, application, request, *args, **kwargs):
method run (line 1469) | def run(self):
class CMD_SiCKRAGEPing (line 1479) | class CMD_SiCKRAGEPing(ApiV1Handler):
method __init__ (line 1483) | def __init__(self, application, request, *args, **kwargs):
method run (line 1486) | def run(self):
class CMD_SiCKRAGERestart (line 1494) | class CMD_SiCKRAGERestart(ApiV1Handler):
method __init__ (line 1498) | def __init__(self, application, request, *args, **kwargs):
method run (line 1501) | def run(self):
class CMD_SiCKRAGESearchSeriesProvider (line 1507) | class CMD_SiCKRAGESearchSeriesProvider(ApiV1Handler):
method __init__ (line 1519) | def __init__(self, application, request, *args, **kwargs):
method run (line 1527) | def run(self):
class CMD_SiCKRAGESearchTVDB (line 1578) | class CMD_SiCKRAGESearchTVDB(CMD_SiCKRAGESearchSeriesProvider):
method __init__ (line 1589) | def __init__(self, application, request, *args, **kwargs):
class CMD_SiCKRAGESearchTVRAGE (line 1594) | class CMD_SiCKRAGESearchTVRAGE(CMD_SiCKRAGESearchSeriesProvider):
method __init__ (line 1606) | def __init__(self, application, request, *args, **kwargs):
method run (line 1609) | def run(self):
class CMD_SiCKRAGESetDefaults (line 1613) | class CMD_SiCKRAGESetDefaults(ApiV1Handler):
method __init__ (line 1626) | def __init__(self, application, request, *args, **kwargs):
method run (line 1636) | def run(self):
class CMD_SiCKRAGEShutdown (line 1673) | class CMD_SiCKRAGEShutdown(ApiV1Handler):
method __init__ (line 1677) | def __init__(self, application, request, *args, **kwargs):
method run (line 1680) | def run(self):
class CMD_SiCKRAGEUpdate (line 1688) | class CMD_SiCKRAGEUpdate(ApiV1Handler):
method __init__ (line 1692) | def __init__(self, application, request, *args, **kwargs):
method run (line 1695) | def run(self):
class CMD_Show (line 1703) | class CMD_Show(ApiV1Handler):
method __init__ (line 1716) | def __init__(self, application, request, *args, **kwargs):
method run (line 1722) | def run(self):
class CMD_ShowAddExisting (line 1792) | class CMD_ShowAddExisting(ApiV1Handler):
method __init__ (line 1809) | def __init__(self, application, request, *args, **kwargs):
method run (line 1822) | def run(self):
class CMD_ShowAddNew (line 1881) | class CMD_ShowAddNew(ApiV1Handler):
method __init__ (line 1910) | def __init__(self, application, request, *args, **kwargs):
method run (line 1937) | def run(self):
class CMD_ShowCache (line 2049) | class CMD_ShowCache(ApiV1Handler):
method __init__ (line 2062) | def __init__(self, application, request, *args, **kwargs):
method run (line 2068) | def run(self):
class CMD_ShowDelete (line 2090) | class CMD_ShowDelete(ApiV1Handler):
method __init__ (line 2106) | def __init__(self, application, request, *args, **kwargs):
method run (line 2113) | def run(self):
class CMD_ShowGetQuality (line 2127) | class CMD_ShowGetQuality(ApiV1Handler):
method __init__ (line 2140) | def __init__(self, application, request, *args, **kwargs):
method run (line 2146) | def run(self):
class CMD_ShowGetPoster (line 2157) | class CMD_ShowGetPoster(ApiV1Handler):
method __init__ (line 2170) | def __init__(self, application, request, *args, **kwargs):
method run (line 2176) | def run(self):
class CMD_ShowGetBanner (line 2184) | class CMD_ShowGetBanner(ApiV1Handler):
method __init__ (line 2197) | def __init__(self, application, request, *args, **kwargs):
method run (line 2203) | def run(self):
class CMD_ShowGetNetworkLogo (line 2211) | class CMD_ShowGetNetworkLogo(ApiV1Handler):
method __init__ (line 2224) | def __init__(self, application, request, *args, **kwargs):
method run (line 2230) | def run(self):
class CMD_ShowGetFanArt (line 2240) | class CMD_ShowGetFanArt(ApiV1Handler):
method __init__ (line 2253) | def __init__(self, application, request, *args, **kwargs):
method run (line 2259) | def run(self):
class CMD_ShowPause (line 2267) | class CMD_ShowPause(ApiV1Handler):
method __init__ (line 2281) | def __init__(self, application, request, *args, **kwargs):
method run (line 2288) | def run(self):
class CMD_ShowRefresh (line 2304) | class CMD_ShowRefresh(ApiV1Handler):
method __init__ (line 2317) | def __init__(self, application, request, *args, **kwargs):
method run (line 2323) | def run(self):
class CMD_ShowSeasonList (line 2337) | class CMD_ShowSeasonList(ApiV1Handler):
method __init__ (line 2351) | def __init__(self, application, request, *args, **kwargs):
method run (line 2358) | def run(self):
class CMD_ShowSeasons (line 2371) | class CMD_ShowSeasons(ApiV1Handler):
method __init__ (line 2385) | def __init__(self, application, request, *args, **kwargs):
method run (line 2392) | def run(self):
class CMD_ShowSetQuality (line 2448) | class CMD_ShowSetQuality(ApiV1Handler):
method __init__ (line 2463) | def __init__(self, application, request, *args, **kwargs):
method run (line 2472) | def run(self):
class CMD_ShowStats (line 2499) | class CMD_ShowStats(ApiV1Handler):
method __init__ (line 2512) | def __init__(self, application, request, *args, **kwargs):
method run (line 2518) | def run(self):
class CMD_ShowUpdate (line 2612) | class CMD_ShowUpdate(ApiV1Handler):
method __init__ (line 2625) | def __init__(self, application, request, *args, **kwargs):
method run (line 2631) | def run(self):
class CMD_Shows (line 2645) | class CMD_Shows(ApiV1Handler):
method __init__ (line 2655) | def __init__(self, application, request, *args, **kwargs):
method run (line 2660) | def run(self):
class CMD_ShowsStats (line 2701) | class CMD_ShowsStats(ApiV1Handler):
method __init__ (line 2705) | def __init__(self, application, request, *args, **kwargs):
method run (line 2708) | def run(self):
FILE: sickrage/core/webserver/handlers/api/v2/__init__.py
class ApiV2BaseHandler (line 27) | class ApiV2BaseHandler(APIBaseHandler):
method __init__ (line 28) | def __init__(self, application, request, **kwargs):
class ApiV2RetrieveSeriesMetadataHandler (line 32) | class ApiV2RetrieveSeriesMetadataHandler(ApiV2BaseHandler):
method get (line 33) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/config/__init__.py
class ApiV2ConfigHandler (line 30) | class ApiV2ConfigHandler(ApiV2BaseHandler):
method get (line 31) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/api/v2/episode/__init__.py
class ApiV2EpisodeStatusesHandler (line 25) | class ApiV2EpisodeStatusesHandler(ApiV2BaseHandler):
method get (line 26) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/file_browser/__init__.py
class ApiV2FileBrowserHandler (line 26) | class ApiV2FileBrowserHandler(ApiV2BaseHandler):
method get (line 27) | def get(self):
method get_path (line 33) | def get_path(self, path, include_files=False):
method get_win_drives (line 84) | def get_win_drives(self):
FILE: sickrage/core/webserver/handlers/api/v2/history/__init__.py
class ApiV2HistoryHandler (line 32) | class ApiV2HistoryHandler(ApiV2BaseHandler):
method get (line 33) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/postprocess/__init__.py
class Apiv2PostProcessHandler (line 29) | class Apiv2PostProcessHandler(ApiV2BaseHandler):
method get (line 30) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/postprocess/schemas.py
class PostProcessSchema (line 28) | class PostProcessSchema(BaseSchema):
class PostProcessSuccessSchema (line 85) | class PostProcessSuccessSchema(BaseSuccessSchema):
FILE: sickrage/core/webserver/handlers/api/v2/schedule/__init__.py
class ApiV2ScheduleHandler (line 29) | class ApiV2ScheduleHandler(ApiV2BaseHandler):
method get (line 30) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/schedule/schemas.py
class ScheduleSuccessSchema (line 26) | class ScheduleSuccessSchema(BaseSuccessSchema):
FILE: sickrage/core/webserver/handlers/api/v2/series/__init__.py
class ApiV2SeriesHandler (line 45) | class ApiV2SeriesHandler(ApiV2BaseHandler):
method get (line 46) | def get(self, series_slug=None):
method post (line 126) | def post(self):
method patch (line 214) | def patch(self, series_slug):
method delete (line 339) | def delete(self, series_slug):
class ApiV2SeriesEpisodesHandler (line 351) | class ApiV2SeriesEpisodesHandler(ApiV2BaseHandler):
method get (line 352) | def get(self, series_slug, *args, **kwargs):
class ApiV2SeriesImagesHandler (line 364) | class ApiV2SeriesImagesHandler(ApiV2BaseHandler):
method get (line 365) | def get(self, series_slug, *args, **kwargs):
class ApiV2SeriesImdbInfoHandler (line 374) | class ApiV2SeriesImdbInfoHandler(ApiV2BaseHandler):
method get (line 375) | def get(self, series_slug, *args, **kwargs):
class ApiV2SeriesBlacklistHandler (line 387) | class ApiV2SeriesBlacklistHandler(ApiV2BaseHandler):
method get (line 388) | def get(self, series_slug, *args, **kwargs):
class ApiV2SeriesWhitelistHandler (line 400) | class ApiV2SeriesWhitelistHandler(ApiV2BaseHandler):
method get (line 401) | def get(self, series_slug, *args, **kwargs):
class ApiV2SeriesRefreshHandler (line 413) | class ApiV2SeriesRefreshHandler(ApiV2BaseHandler):
method get (line 414) | def get(self, series_slug):
class ApiV2SeriesUpdateHandler (line 427) | class ApiV2SeriesUpdateHandler(ApiV2BaseHandler):
method get (line 428) | def get(self, series_slug):
class ApiV2SeriesEpisodesRenameHandler (line 441) | class ApiV2SeriesEpisodesRenameHandler(ApiV2BaseHandler):
method get (line 442) | def get(self, series_slug):
method post (line 502) | def post(self, series_slug):
class ApiV2SeriesEpisodesManualSearchHandler (line 555) | class ApiV2SeriesEpisodesManualSearchHandler(ApiV2BaseHandler):
method get (line 556) | def get(self, series_slug, episode_slug):
class ApiV2SeriesSearchFormatsHandler (line 632) | class ApiV2SeriesSearchFormatsHandler(ApiV2BaseHandler):
method get (line 633) | def get(self):
FILE: sickrage/core/webserver/handlers/api/v2/series/schemas.py
class SeriesSlugPath (line 26) | class SeriesSlugPath(BaseSchema):
class EpisodeSlugPath (line 36) | class EpisodeSlugPath(BaseSchema):
class SeriesEpisodesRenameSuccessSchema (line 46) | class SeriesEpisodesRenameSuccessSchema(BaseSuccessSchema):
class SeriesEpisodesManualSearchPath (line 50) | class SeriesEpisodesManualSearchPath(BaseSchema):
class SeriesEpisodesManualSearchSchema (line 60) | class SeriesEpisodesManualSearchSchema(BaseSchema):
class SeriesEpisodesManualSearchSuccessSchema (line 70) | class SeriesEpisodesManualSearchSuccessSchema(BaseSuccessSchema):
FILE: sickrage/core/webserver/handlers/api/v2/series_provider/__init__.py
class ApiV2SeriesProvidersHandler (line 28) | class ApiV2SeriesProvidersHandler(ApiV2BaseHandler):
method get (line 29) | def get(self):
class ApiV2SeriesProvidersSearchHandler (line 33) | class ApiV2SeriesProvidersSearchHandler(ApiV2BaseHandler):
method get (line 34) | def get(self, series_provider_slug):
class ApiV2SeriesProvidersLanguagesHandler (line 52) | class ApiV2SeriesProvidersLanguagesHandler(ApiV2BaseHandler):
method get (line 53) | def get(self, series_provider_slug):
FILE: sickrage/core/webserver/handlers/base.py
class BaseHandler (line 42) | class BaseHandler(RequestHandler):
method __init__ (line 43) | def __init__(self, application, request, **kwargs):
method data_received (line 50) | def data_received(self, chunk: bytes) -> Optional[Awaitable[None]]:
method get_user_locale (line 53) | def get_user_locale(self):
method write_error (line 56) | def write_error(self, status_code, **kwargs):
method get_current_user (line 83) | def get_current_user(self):
method render (line 114) | def render(self, template_name, **kwargs):
method set_default_headers (line 155) | def set_default_headers(self):
method redirect (line 161) | def redirect(self, url, permanent=True, status=None, add_web_root=True):
method previous_url (line 174) | def previous_url(self):
method _genericMessage (line 178) | def _genericMessage(self, subject, message):
method get_url (line 186) | def get_url(self, url):
method run_async (line 192) | def run_async(self, method):
method prepare (line 200) | def prepare(self):
method options (line 205) | def options(self, *args, **kwargs):
method get_argument (line 208) | def get_argument(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/calendar.py
class CalendarHandler (line 33) | class CalendarHandler(BaseHandler):
method get (line 34) | def get(self, *args, **kwargs):
method calendar_auth (line 41) | def calendar_auth(self):
method calendar (line 44) | def calendar(self):
FILE: sickrage/core/webserver/handlers/changelog.py
class ChangelogHandler (line 30) | class ChangelogHandler(BaseHandler):
method get (line 32) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/__init__.py
class ConfigWebHandler (line 30) | class ConfigWebHandler(BaseHandler):
method get (line 45) | def get(self, *args, **kwargs):
class ConfigResetHandler (line 55) | class ConfigResetHandler(BaseHandler):
method get (line 57) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/anime.py
class ConfigAnimeHandler (line 31) | class ConfigAnimeHandler(BaseHandler):
method get (line 33) | def get(self, *args, **kwargs):
class ConfigSaveAnimeHandler (line 43) | class ConfigSaveAnimeHandler(BaseHandler):
method post (line 45) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/backup_restore.py
class ConfigBackupRestoreHandler (line 33) | class ConfigBackupRestoreHandler(BaseHandler):
method get (line 35) | def get(self, *args, **kwargs):
class ConfigBackupHandler (line 45) | class ConfigBackupHandler(BaseHandler):
method get (line 47) | def get(self, *args, **kwargs):
class ConfigRestoreHandler (line 65) | class ConfigRestoreHandler(BaseHandler):
method get (line 67) | def get(self, *args, **kwargs):
class SaveBackupRestoreHandler (line 98) | class SaveBackupRestoreHandler(BaseHandler):
method post (line 100) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/general.py
class ConfigGeneralHandler (line 34) | class ConfigGeneralHandler(BaseHandler):
method get (line 36) | def get(self, *args, **kwargs):
class GenerateApiKeyHandler (line 46) | class GenerateApiKeyHandler(BaseHandler):
method get (line 48) | def get(self, *args, **kwargs):
class SaveRootDirsHandler (line 52) | class SaveRootDirsHandler(BaseHandler):
method get (line 54) | def get(self, *args, **kwargs):
class SaveAddShowDefaultsHandler (line 59) | class SaveAddShowDefaultsHandler(BaseHandler):
method get (line 61) | def get(self, *args, **kwargs):
class SaveGeneralHandler (line 99) | class SaveGeneralHandler(BaseHandler):
method post (line 101) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/notifications.py
class ConfigNotificationsHandler (line 33) | class ConfigNotificationsHandler(BaseHandler):
method get (line 35) | def get(self, *args, **kwargs):
class SaveNotificationsHandler (line 45) | class SaveNotificationsHandler(BaseHandler):
method post (line 47) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/postprocessing.py
function is_naming_pattern_valid (line 35) | def is_naming_pattern_valid(pattern=None, multi=None, abd=None, sports=N...
function is_rar_supported (line 67) | def is_rar_supported():
class ConfigPostProcessingHandler (line 81) | class ConfigPostProcessingHandler(BaseHandler):
method get (line 83) | def get(self, *args, **kwargs):
class SavePostProcessingHandler (line 93) | class SavePostProcessingHandler(BaseHandler):
method post (line 95) | def post(self, *args, **kwargs):
class TestNamingHandler (line 222) | class TestNamingHandler(BaseHandler):
method get (line 224) | def get(self, *args, **kwargs):
class IsNamingPatternValidHandler (line 244) | class IsNamingPatternValidHandler(BaseHandler):
method get (line 246) | def get(self, *args, **kwargs):
class IsRarSupportedHandler (line 262) | class IsRarSupportedHandler(BaseHandler):
method get (line 264) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/providers.py
class ConfigProvidersHandler (line 33) | class ConfigProvidersHandler(BaseHandler):
method get (line 35) | def get(self, *args, **kwargs):
class CanAddNewznabProviderHandler (line 45) | class CanAddNewznabProviderHandler(BaseHandler):
method get (line 47) | def get(self, *args, **kwargs):
class CanAddTorrentRssProviderHandler (line 56) | class CanAddTorrentRssProviderHandler(BaseHandler):
method get (line 58) | def get(self, *args, **kwargs):
class GetNewznabCategoriesHandler (line 73) | class GetNewznabCategoriesHandler(BaseHandler):
method get (line 75) | def get(self, *args, **kwargs):
class SaveProvidersHandler (line 91) | class SaveProvidersHandler(BaseHandler):
method post (line 93) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/quality_settings.py
class ConfigQualitySettingsHandler (line 30) | class ConfigQualitySettingsHandler(BaseHandler):
method get (line 32) | def get(self, *args, **kwargs):
class SaveQualitiesHandler (line 42) | class SaveQualitiesHandler(BaseHandler):
method post (line 44) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/search.py
class ConfigSearchHandler (line 35) | class ConfigSearchHandler(BaseHandler):
method get (line 37) | def get(self, *args, **kwargs):
class SaveSearchHandler (line 47) | class SaveSearchHandler(BaseHandler):
method post (line 49) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/config/subtitles.py
class ConfigSubtitlesHandler (line 35) | class ConfigSubtitlesHandler(BaseHandler):
method get (line 37) | def get(self, *args, **kwargs):
class ConfigSubtitleGetCodeHandler (line 47) | class ConfigSubtitleGetCodeHandler(BaseHandler):
method get (line 49) | def get(self, *args, **kwargs):
class ConfigSubtitlesWantedLanguagesHandler (line 58) | class ConfigSubtitlesWantedLanguagesHandler(BaseHandler):
method get (line 60) | def get(self, *args, **kwargs):
class SaveSubtitlesHandler (line 67) | class SaveSubtitlesHandler(BaseHandler):
method post (line 69) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/google_drive.py
class GoogleDriveHandler (line 26) | class GoogleDriveHandler(BaseHandler):
method __init__ (line 27) | def __init__(self, *args, **kwargs):
method getProgress (line 30) | def getProgress(self):
method syncRemote (line 33) | def syncRemote(self):
method syncLocal (line 37) | def syncLocal(self):
FILE: sickrage/core/webserver/handlers/history.py
class HistoryHandler (line 30) | class HistoryHandler(BaseHandler):
method get (line 32) | def get(self, *args, **kwargs):
class HistoryClearHandler (line 105) | class HistoryClearHandler(BaseHandler):
method get (line 107) | def get(self, *args, **kwargs):
class HistoryTrimHandler (line 113) | class HistoryTrimHandler(BaseHandler):
method get (line 115) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/home/__init__.py
class HomeHandler (line 67) | class HomeHandler(BaseHandler):
method get (line 69) | def get(self, *args, **kwargs):
method statistics (line 88) | def statistics(self):
class ShowProgressHandler (line 132) | class ShowProgressHandler(BaseHandler):
method get (line 133) | def get(self, *args, **kwargs):
class IsAliveHandler (line 160) | class IsAliveHandler(BaseHandler):
method get (line 161) | def get(self, *args, **kwargs):
class TestSABnzbdHandler (line 172) | class TestSABnzbdHandler(BaseHandler):
method get (line 174) | def get(self, *args, **kwargs):
class TestSynologyDSMHandler (line 190) | class TestSynologyDSMHandler(BaseHandler):
method get (line 192) | def get(self, *args, **kwargs):
class TestTorrentHandler (line 203) | class TestTorrentHandler(BaseHandler):
method get (line 205) | def get(self, *args, **kwargs):
class TestFreeMobileHandler (line 216) | class TestFreeMobileHandler(BaseHandler):
method get (line 218) | def get(self, *args, **kwargs):
class TestTelegramHandler (line 228) | class TestTelegramHandler(BaseHandler):
method get (line 230) | def get(self, *args, **kwargs):
class TestJoinHandler (line 240) | class TestJoinHandler(BaseHandler):
method get (line 242) | def get(self, *args, **kwargs):
class TestGrowlHandler (line 252) | class TestGrowlHandler(BaseHandler):
method get (line 254) | def get(self, *args, **kwargs):
class TestProwlHandler (line 269) | class TestProwlHandler(BaseHandler):
method get (line 271) | def get(self, *args, **kwargs):
class TestBoxcar2Handler (line 281) | class TestBoxcar2Handler(BaseHandler):
method get (line 283) | def get(self, *args, **kwargs):
class TestPushoverHandler (line 292) | class TestPushoverHandler(BaseHandler):
method get (line 294) | def get(self, *args, **kwargs):
class TwitterStep1Handler (line 304) | class TwitterStep1Handler(BaseHandler):
method get (line 306) | def get(self, *args, **kwargs):
class TwitterStep2Handler (line 310) | class TwitterStep2Handler(BaseHandler):
method get (line 312) | def get(self, *args, **kwargs):
class TestTwitterHandler (line 322) | class TestTwitterHandler(BaseHandler):
method get (line 324) | def get(self, *args, **kwargs):
class TestTwilioHandler (line 331) | class TestTwilioHandler(BaseHandler):
method get (line 333) | def get(self, *args, **kwargs):
class TestAlexaHandler (line 357) | class TestAlexaHandler(BaseHandler):
method get (line 359) | def get(self, *args, **kwargs):
class TestSlackHandler (line 366) | class TestSlackHandler(BaseHandler):
method get (line 368) | def get(self, *args, **kwargs):
class TestDiscordHandler (line 375) | class TestDiscordHandler(BaseHandler):
method get (line 377) | def get(self, *args, **kwargs):
class TestKODIHandler (line 384) | class TestKODIHandler(BaseHandler):
method get (line 386) | def get(self, *args, **kwargs):
class TestPMCHandler (line 403) | class TestPMCHandler(BaseHandler):
method get (line 405) | def get(self, *args, **kwargs):
class TestPMSHandler (line 429) | class TestPMSHandler(BaseHandler):
method get (line 431) | def get(self, *args, **kwargs):
class TestLibnotifyHandler (line 460) | class TestLibnotifyHandler(BaseHandler):
method get (line 462) | def get(self, *args, **kwargs):
class TestEMBYHandler (line 468) | class TestEMBYHandler(BaseHandler):
method get (line 470) | def get(self, *args, **kwargs):
class TestNMJHandler (line 480) | class TestNMJHandler(BaseHandler):
method get (line 482) | def get(self, *args, **kwargs):
class SettingsNMJHandler (line 493) | class SettingsNMJHandler(BaseHandler):
method get (line 495) | def get(self, *args, **kwargs):
class TestNMJv2Handler (line 512) | class TestNMJv2Handler(BaseHandler):
method get (line 514) | def get(self, *args, **kwargs):
class SettingsNMJv2Handler (line 523) | class SettingsNMJv2Handler(BaseHandler):
method get (line 525) | def get(self, *args, **kwargs):
class GetTraktTokenHandler (line 538) | class GetTraktTokenHandler(BaseHandler):
method get (line 540) | def get(self, *args, **kwargs):
class TestTraktHandler (line 548) | class TestTraktHandler(BaseHandler):
method get (line 550) | def get(self, *args, **kwargs):
class LoadShowNotifyListsHandler (line 557) | class LoadShowNotifyListsHandler(BaseHandler):
method get (line 559) | def get(self, *args, **kwargs):
class SaveShowNotifyListHandler (line 567) | class SaveShowNotifyListHandler(BaseHandler):
method get (line 569) | def get(self, *args, **kwargs):
class TestEmailHandler (line 580) | class TestEmailHandler(BaseHandler):
method get (line 582) | def get(self, *args, **kwargs):
class TestNMAHandler (line 596) | class TestNMAHandler(BaseHandler):
method get (line 598) | def get(self, *args, **kwargs):
class TestPushalotHandler (line 608) | class TestPushalotHandler(BaseHandler):
method get (line 610) | def get(self, *args, **kwargs):
class TestPushbulletHandler (line 619) | class TestPushbulletHandler(BaseHandler):
method get (line 621) | def get(self, *args, **kwargs):
class GetPushbulletDevicesHandler (line 630) | class GetPushbulletDevicesHandler(BaseHandler):
method get (line 632) | def get(self, *args, **kwargs):
class ServerStatusHandler (line 641) | class ServerStatusHandler(BaseHandler):
method get (line 643) | def get(self, *args, **kwargs):
class ProviderStatusHandler (line 666) | class ProviderStatusHandler(BaseHandler):
method get (line 668) | def get(self, *args, **kwargs):
class ShutdownHandler (line 677) | class ShutdownHandler(BaseHandler):
method get (line 679) | def get(self, *args, **kwargs):
class RestartHandler (line 690) | class RestartHandler(BaseHandler):
method get (line 692) | def get(self, *args, **kwargs):
class UpdateCheckHandler (line 718) | class UpdateCheckHandler(BaseHandler):
method get (line 720) | def get(self, *args, **kwargs):
class UpdateHandler (line 735) | class UpdateHandler(BaseHandler):
method get (line 737) | def get(self, *args, **kwargs):
class VerifyPathHandler (line 750) | class VerifyPathHandler(BaseHandler):
method get (line 752) | def get(self, *args, **kwargs):
class InstallRequirementsHandler (line 760) | class InstallRequirementsHandler(BaseHandler):
method get (line 762) | def get(self, *args, **kwargs):
class BranchCheckoutHandler (line 778) | class BranchCheckoutHandler(BaseHandler):
method get (line 780) | def get(self, *args, **kwargs):
class DisplayShowHandler (line 794) | class DisplayShowHandler(BaseHandler):
method get (line 796) | def get(self, *args, **kwargs):
method have_kodi (line 984) | def have_kodi(self):
method have_plex (line 987) | def have_plex(self):
method have_emby (line 990) | def have_emby(self):
class TogglePauseHandler (line 994) | class TogglePauseHandler(BaseHandler):
method get (line 996) | def get(self, *args, **kwargs):
class DeleteShowHandler (line 1013) | class DeleteShowHandler(BaseHandler):
method get (line 1015) | def get(self, *args, **kwargs):
class RefreshShowHandler (line 1043) | class RefreshShowHandler(BaseHandler):
method get (line 1045) | def get(self, *args, **kwargs):
class UpdateShowHandler (line 1063) | class UpdateShowHandler(BaseHandler):
method get (line 1065) | def get(self, *args, **kwargs):
class SubtitleShowHandler (line 1086) | class SubtitleShowHandler(BaseHandler):
method get (line 1088) | def get(self, *args, **kwargs):
class UpdateKODIHandler (line 1104) | class UpdateKODIHandler(BaseHandler):
method get (line 1106) | def get(self, *args, **kwargs):
class UpdatePLEXHandler (line 1132) | class UpdatePLEXHandler(BaseHandler):
method get (line 1134) | def get(self, *args, **kwargs):
class UpdateEMBYHandler (line 1146) | class UpdateEMBYHandler(BaseHandler):
method get (line 1148) | def get(self, *args, **kwargs):
class SyncTraktHandler (line 1166) | class SyncTraktHandler(BaseHandler):
method get (line 1168) | def get(self, *args, **kwargs):
class DeleteEpisodeHandler (line 1179) | class DeleteEpisodeHandler(BaseHandler):
method get (line 1181) | def get(self, *args, **kwargs):
class TestRenameHandler (line 1222) | class TestRenameHandler(BaseHandler):
method get (line 1224) | def get(self, *args, **kwargs):
class DoRenameHandler (line 1264) | class DoRenameHandler(BaseHandler):
method get (line 1266) | def get(self, *args, **kwargs):
class SearchEpisodeHandler (line 1297) | class SearchEpisodeHandler(BaseHandler):
method get (line 1299) | def get(self, *args, **kwargs):
class GetManualSearchStatusHandler (line 1316) | class GetManualSearchStatusHandler(BaseHandler):
method get (line 1318) | def get(self, *args, **kwargs):
method get_episodes (line 1341) | def get_episodes(self, series_id, season, episode, search_status):
method get_quality_class (line 1366) | def get_quality_class(self, status):
class SearchEpisodeSubtitlesHandler (line 1376) | class SearchEpisodeSubtitlesHandler(BaseHandler):
method get (line 1378) | def get(self, *args, **kwargs):
class SetSceneNumberingHandler (line 1405) | class SetSceneNumberingHandler(BaseHandler):
method get (line 1407) | def get(self, *args, **kwargs):
class RetryEpisodeHandler (line 1492) | class RetryEpisodeHandler(BaseHandler):
method get (line 1494) | def get(self, *args, **kwargs):
class FetchReleasegroupsHandler (line 1512) | class FetchReleasegroupsHandler(BaseHandler):
method get (line 1514) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/home/add_shows.py
function split_extra_show (line 43) | def split_extra_show(extra_show):
class HomeAddShowsHandler (line 62) | class HomeAddShowsHandler(BaseHandler):
method get (line 64) | def get(self, *args, **kwargs):
class SearchSeriesProviderForShowNameHandler (line 73) | class SearchSeriesProviderForShowNameHandler(BaseHandler):
method get (line 75) | def get(self, *args, **kwargs):
class MassAddTableHandler (line 109) | class MassAddTableHandler(BaseHandler):
method get (line 111) | def get(self, *args, **kwargs):
class NewShowHandler (line 181) | class NewShowHandler(BaseHandler):
method get (line 183) | def get(self, *args, **kwargs):
class TraktShowsHandler (line 231) | class TraktShowsHandler(BaseHandler):
method get (line 233) | def get(self, *args, **kwargs):
class PopularShowsHandler (line 261) | class PopularShowsHandler(BaseHandler):
method get (line 263) | def get(self, *args, **kwargs):
class AddShowToBlacklistHandler (line 285) | class AddShowToBlacklistHandler(BaseHandler):
method get (line 287) | def get(self, *args, **kwargs):
class ExistingShowsHandler (line 295) | class ExistingShowsHandler(BaseHandler):
method get (line 297) | def get(self, *args, **kwargs):
class AddShowByIDHandler (line 311) | class AddShowByIDHandler(BaseHandler):
method get (line 313) | def get(self, *args, **kwargs):
class AddNewShowHandler (line 347) | class AddNewShowHandler(BaseHandler):
method get (line 349) | def get(self, *args, **kwargs):
method post (line 353) | def post(self, *args, **kwargs):
method finish_add_show (line 474) | def finish_add_show(self, other_shows):
class AddExistingShowsHandler (line 487) | class AddExistingShowsHandler(BaseHandler):
method post (line 489) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/home/postprocess.py
class HomePostProcessHandler (line 31) | class HomePostProcessHandler(BaseHandler):
method get (line 33) | def get(self, *args, **kwargs):
class HomeProcessEpisodeHandler (line 42) | class HomeProcessEpisodeHandler(BaseHandler):
method get (line 44) | def get(self, *args, **kwargs):
method post (line 48) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/login.py
class LoginHandler (line 31) | class LoginHandler(BaseHandler):
method get (line 32) | def get(self, *args, **kwargs):
method post (line 49) | def post(self, *args, **kwargs):
method handle_jwt_auth_get (line 53) | def handle_jwt_auth_get(self):
method handle_sso_auth_get (line 120) | def handle_sso_auth_get(self):
method handle_local_auth_get (line 213) | def handle_local_auth_get(self):
method handle_local_auth_post (line 221) | def handle_local_auth_post(self):
FILE: sickrage/core/webserver/handlers/logout.py
class LogoutHandler (line 27) | class LogoutHandler(BaseHandler):
method get (line 28) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/logs.py
function get_logs (line 32) | def get_logs(log_search, log_filter, min_level, max_lines):
class LogsHandler (line 51) | class LogsHandler(BaseHandler):
method initialize (line 52) | def initialize(self):
method get (line 63) | def get(self, *args, **kwargs):
method have_errors (line 75) | def have_errors(self):
method have_warnings (line 79) | def have_warnings(self):
class LogsClearWarningsHanlder (line 84) | class LogsClearWarningsHanlder(BaseHandler):
method get (line 86) | def get(self, *args, **kwargs):
class LogsClearErrorsHanlder (line 91) | class LogsClearErrorsHanlder(BaseHandler):
method get (line 93) | def get(self, *args, **kwargs):
class LogsClearAllHanlder (line 98) | class LogsClearAllHanlder(BaseHandler):
method get (line 100) | def get(self, *args, **kwargs):
class LogsViewHandler (line 106) | class LogsViewHandler(BaseHandler):
method get (line 108) | def get(self, *args, **kwargs):
class ErrorCountHandler (line 150) | class ErrorCountHandler(BaseHandler):
method get (line 152) | def get(self, *args, **kwargs):
class WarningCountHandler (line 156) | class WarningCountHandler(BaseHandler):
method get (line 158) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/manage/__init__.py
function set_episode_status (line 42) | def set_episode_status(series_id, eps, status, direct=None):
function edit_show (line 164) | def edit_show(series_id, any_qualities, best_qualities, exceptions_list,...
class ManageHandler (line 318) | class ManageHandler(BaseHandler):
method get (line 320) | def get(self, *args, **kwargs):
class ShowEpisodeStatusesHandler (line 324) | class ShowEpisodeStatusesHandler(BaseHandler):
method get (line 326) | def get(self, *args, **kwargs):
class EpisodeStatusesHandler (line 346) | class EpisodeStatusesHandler(BaseHandler):
method get (line 348) | def get(self, *args, **kwargs):
class ChangeEpisodeStatusesHandler (line 385) | class ChangeEpisodeStatusesHandler(BaseHandler):
method post (line 387) | def post(self, *args, **kwargs):
class SetEpisodeStatusHandler (line 416) | class SetEpisodeStatusHandler(BaseHandler):
method get (line 418) | def get(self, *args, **kwargs):
class ShowSubtitleMissedHandler (line 432) | class ShowSubtitleMissedHandler(BaseHandler):
method get (line 434) | def get(self, *args, **kwargs):
class SubtitleMissedHandler (line 466) | class SubtitleMissedHandler(BaseHandler):
method get (line 468) | def get(self, *args, **kwargs):
class DownloadSubtitleMissedHandler (line 519) | class DownloadSubtitleMissedHandler(BaseHandler):
method post (line 521) | def post(self, *args, **kwargs):
class BacklogShowHandler (line 549) | class BacklogShowHandler(BaseHandler):
method get (line 551) | def get(self, *args, **kwargs):
class BacklogOverviewHandler (line 560) | class BacklogOverviewHandler(BaseHandler):
method get (line 562) | def get(self, *args, **kwargs):
class EditShowHandler (line 608) | class EditShowHandler(BaseHandler):
method get (line 610) | def get(self, *args, **kwargs):
method post (line 652) | def post(self, *args, **kwargs):
class MassEditHandler (line 691) | class MassEditHandler(BaseHandler):
method get (line 693) | def get(self, *args, **kwargs):
method post (line 828) | def post(self, *args, **kwargs):
class MassUpdateHandler (line 955) | class MassUpdateHandler(BaseHandler):
method get (line 957) | def get(self, *args, **kwargs):
method post (line 970) | def post(self, *args, **kwargs):
class FailedDownloadsHandler (line 1065) | class FailedDownloadsHandler(BaseHandler):
method get (line 1067) | def get(self, *args, **kwargs):
method post (line 1086) | def post(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/manage/queues.py
class ManageQueuesHandler (line 30) | class ManageQueuesHandler(BaseHandler):
method get (line 32) | def get(self, *args, **kwargs):
class ForceBacklogSearchHandler (line 50) | class ForceBacklogSearchHandler(BaseHandler):
method get (line 52) | def get(self, *args, **kwargs):
class ForceDailySearchHandler (line 64) | class ForceDailySearchHandler(BaseHandler):
method get (line 66) | def get(self, *args, **kwargs):
class ForceFindPropersHandler (line 78) | class ForceFindPropersHandler(BaseHandler):
method get (line 80) | def get(self, *args, **kwargs):
class PauseDailySearcherHandler (line 92) | class PauseDailySearcherHandler(BaseHandler):
method get (line 94) | def get(self, *args, **kwargs):
class PauseBacklogSearcherHandler (line 105) | class PauseBacklogSearcherHandler(BaseHandler):
method get (line 107) | def get(self, *args, **kwargs):
class PausePostProcessorHandler (line 118) | class PausePostProcessorHandler(BaseHandler):
method get (line 120) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/not_found.py
class NotFoundHandler (line 29) | class NotFoundHandler(BaseHandler):
method prepare (line 30) | def prepare(self):
FILE: sickrage/core/webserver/handlers/root.py
class RobotsDotTxtHandler (line 41) | class RobotsDotTxtHandler(BaseHandler):
method initialize (line 42) | def initialize(self):
method get (line 45) | def get(self, *args, **kwargs):
class MessagesDotPoHandler (line 50) | class MessagesDotPoHandler(BaseHandler):
method initialize (line 51) | def initialize(self):
method get (line 55) | def get(self, *args, **kwargs):
class APIBulderHandler (line 63) | class APIBulderHandler(BaseHandler):
method get (line 65) | def get(self, *args, **kwargs):
class SetHomeLayoutHandler (line 101) | class SetHomeLayoutHandler(BaseHandler):
method get (line 103) | def get(self, *args, **kwargs):
class SetPosterSortByHandler (line 116) | class SetPosterSortByHandler(BaseHandler):
method post (line 118) | def post(self, *args, **kwargs):
class SetPosterSortDirHandler (line 128) | class SetPosterSortDirHandler(BaseHandler):
method post (line 130) | def post(self, *args, **kwargs):
class SetHistoryLayoutHandler (line 137) | class SetHistoryLayoutHandler(BaseHandler):
method get (line 139) | def get(self, *args, **kwargs):
class ToggleDisplayShowSpecialsHandler (line 150) | class ToggleDisplayShowSpecialsHandler(BaseHandler):
method get (line 152) | def get(self, *args, **kwargs):
class SetScheduleLayoutHandler (line 159) | class SetScheduleLayoutHandler(BaseHandler):
method get (line 161) | def get(self, *args, **kwargs):
class ToggleScheduleDisplayPausedHandler (line 175) | class ToggleScheduleDisplayPausedHandler(BaseHandler):
method get (line 177) | def get(self, *args, **kwargs):
class SetScheduleSortHandler (line 182) | class SetScheduleSortHandler(BaseHandler):
method get (line 184) | def get(self, *args, **kwargs):
class ScheduleHandler (line 198) | class ScheduleHandler(BaseHandler):
method get (line 200) | def get(self, *args, **kwargs):
class QuicksearchDotJsonHandler (line 222) | class QuicksearchDotJsonHandler(BaseHandler):
method post (line 224) | def post(self, *args, **kwargs):
class ForceSchedulerJobHandler (line 272) | class ForceSchedulerJobHandler(BaseHandler):
method get (line 274) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/handlers/web_file_browser.py
class WebFileBrowserHandler (line 31) | class WebFileBrowserHandler(BaseHandler):
method initialize (line 32) | def initialize(self):
method get (line 36) | def get(self, *args, **kwargs):
class WebFileBrowserCompleteHandler (line 44) | class WebFileBrowserCompleteHandler(BaseHandler):
method initialize (line 45) | def initialize(self):
method get (line 49) | def get(self, *args, **kwargs):
FILE: sickrage/core/webserver/helpers.py
function create_https_certificates (line 14) | def create_https_certificates(ssl_cert, ssl_key):
function is_certificate_valid (line 61) | def is_certificate_valid(cert_file):
function certificate_needs_renewal (line 93) | def certificate_needs_renewal(cert_file):
FILE: sickrage/core/websession/__init__.py
function _add_proxies (line 40) | def _add_proxies():
class WebSession (line 48) | class WebSession(Session):
method __init__ (line 49) | def __init__(self, proxies=None, cache=True, cloudflare=False):
method _get_ssl_cert (line 68) | def _get_ssl_cert(verify):
method _get_user_agent (line 78) | def _get_user_agent(random_ua=False):
method request (line 86) | def request(self, method, url, verify=False, random_ua=False, timeout=...
method download (line 132) | def download(self, url, filename, **kwargs):
method normalize_url (line 154) | def normalize_url(url, secure=False):
class WebHooks (line 172) | class WebHooks(object):
method log_url (line 174) | def log_url(response, **kwargs):
class WebHelpers (line 184) | class WebHelpers(object):
method cloudflare (line 186) | def cloudflare(session, resp, **kwargs):
FILE: sickrage/core/websocket/__init__.py
function check_web_socket_queue (line 10) | def check_web_socket_queue():
class WebSocketUIHandler (line 16) | class WebSocketUIHandler(WebSocketHandler):
method check_origin (line 22) | def check_origin(self, origin):
method open (line 26) | def open(self, *args, **kwargs):
method on_message (line 30) | def on_message(self, message):
method data_received (line 55) | def data_received(self, chunk):
method on_close (line 59) | def on_close(self):
method broadcast (line 64) | def broadcast(cls, msg):
method __repr__ (line 68) | def __repr__(self):
class WebSocketMessage (line 73) | class WebSocketMessage(object):
method __init__ (line 76) | def __init__(self, message_type, data):
method content (line 86) | def content(self):
method json (line 93) | def json(self):
method push (line 97) | def push(self):
FILE: sickrage/libs/adba/__init__.py
function StartLogging (line 40) | def StartLogging():
function StopLogging (line 74) | def StopLogging(listener):
class Connection (line 81) | class Connection(threading.Thread):
method __init__ (line 82) | def __init__(self, clientname='adba', server='api.anidb.info', port=90...
method stop (line 116) | def stop(self):
method cut (line 119) | def cut(self):
method handle_response (line 122) | def handle_response(self, response):
method handle (line 129) | def handle(self, command, callback):
method authed (line 178) | def authed(self, reAuthenticate=False):
method _reAuthenticate (line 187) | def _reAuthenticate(self):
method _keep_alive (line 196) | def _keep_alive(self):
method run (line 216) | def run(self):
method auth (line 221) | def auth(self, username, password, nat=None, mtu=None, callback=None):
method logout (line 283) | def logout(self, cutConnection=True, callback=None):
method stayloggedin (line 301) | def stayloggedin(self):
method push (line 312) | def push(self, notify, msg, buddy=None, callback=None):
method pushack (line 327) | def pushack(self, nid, callback=None):
method notifyadd (line 340) | def notifyadd(self, aid=None, gid=None, type=None, priority=None, call...
method notify (line 357) | def notify(self, buddy=None, callback=None):
method notifylist (line 370) | def notifylist(self, callback=None):
method notifyget (line 377) | def notifyget(self, type, id, callback=None):
method notifyack (line 391) | def notifyack(self, type, id, callback=None):
method buddyadd (line 405) | def buddyadd(self, uid=None, uname=None, callback=None):
method buddydel (line 419) | def buddydel(self, uid, callback=None):
method buddyaccept (line 432) | def buddyaccept(self, uid, callback=None):
method buddydeny (line 445) | def buddydeny(self, uid, callback=None):
method buddylist (line 458) | def buddylist(self, startat, callback=None):
method buddystate (line 471) | def buddystate(self, startat, callback=None):
method anime (line 484) | def anime(self, aid=None, aname=None, amask=-1, callback=None):
method episode (line 501) | def episode(self, eid=None, aid=None, aname=None, epno=None, callback=...
method file (line 518) | def file(self, fid=None, size=None, ed2k=None, aid=None, aname=None, g...
method group (line 613) | def group(self, gid=None, gname=None, callback=None):
method groupstatus (line 627) | def groupstatus(self, aid=None, state=None, callback=None):
method producer (line 643) | def producer(self, pid=None, pname=None, callback=None):
method mylist (line 658) | def mylist(self, lid=None, fid=None, size=None, ed2k=None, aid=None, a...
method mylistadd (line 683) | def mylistadd(self, lid=None, fid=None, size=None, ed2k=None, aid=None...
method mylistdel (line 730) | def mylistdel(self, lid=None, fid=None, aid=None, aname=None, gid=None...
method myliststats (line 753) | def myliststats(self, callback=None):
method vote (line 760) | def vote(self, type, id=None, name=None, value=None, epno=None, callba...
method randomanime (line 789) | def randomanime(self, type, callback=None):
method ping (line 809) | def ping(self, callback=None):
method encrypt (line 816) | def encrypt(self, user, apipassword, type=None, callback=None):
method encoding (line 831) | def encoding(self, name, callback=None):
method sendmsg (line 853) | def sendmsg(self, to, title, body, callback=None):
method user (line 868) | def user(self, user, callback=None):
method uptime (line 881) | def uptime(self, callback=None):
method version (line 888) | def version(self, callback=None):
FILE: sickrage/libs/adba/aniDBAbstracter.py
class aniDBabstractObject (line 36) | class aniDBabstractObject(object):
method __init__ (line 37) | def __init__(self, aniDB, load=False):
method set_connection (line 43) | def set_connection(self, aniDB):
method _fill (line 46) | def _fill(self, dataline):
method __getattr__ (line 68) | def __getattr__(self, name):
method _build_names (line 74) | def _build_names(self):
method _easy_extend (line 84) | def _easy_extend(initialList, item):
method load_data (line 93) | def load_data(self):
method add_notification (line 96) | def add_notification(self):
class Anime (line 106) | class Anime(aniDBabstractObject):
method __init__ (line 107) | def __init__(self, aniDB, name=None, aid=None, tvdbid=None, paramsA=No...
method load_data (line 148) | def load_data(self):
method return_raw_data (line 160) | def return_raw_data(self):
method get_groups (line 164) | def get_groups(self):
method _get_aid_from_xml (line 177) | def _get_aid_from_xml(self, name):
method _get_name_from_xml (line 196) | def _get_name_from_xml(self, aid, onlyMain=True):
method _builPreSequal (line 209) | def _builPreSequal(self):
class Episode (line 224) | class Episode(aniDBabstractObject):
method __init__ (line 225) | def __init__(self, aniDB, number=None, epid=None, filePath=None, fid=N...
method load_data (line 253) | def load_data(self):
method add_to_mylist (line 264) | def add_to_mylist(self, state=None, viewed=None, source=None, storage=...
method edit_to_mylist (line 289) | def edit_to_mylist(self, state=None, viewed=None, source=None, storage...
method delete_from_mylist (line 319) | def delete_from_mylist(self):
method _calculate_file_stuff (line 330) | def _calculate_file_stuff(filePath):
FILE: sickrage/libs/adba/aniDBcommands.py
class Command (line 25) | class Command:
method __init__ (line 28) | def __init__(self, command, **parameters):
method __repr__ (line 38) | def __repr__(self):
method authorize (line 41) | def authorize(self, mode, tag, session, callback):
method handle (line 50) | def handle(self, resp):
method wait_response (line 57) | def wait_response(self):
method flatten (line 60) | def flatten(self, command, parameters):
method escape (line 69) | def escape(data):
method raw_data (line 72) | def raw_data(self):
method cached (line 76) | def cached(self, interface, database):
method cache (line 79) | def cache(self, interface, database):
class AuthCommand (line 84) | class AuthCommand(Command):
method __init__ (line 85) | def __init__(self, username, password, protover, client, clientver, na...
class LogoutCommand (line 90) | class LogoutCommand(Command):
method __init__ (line 91) | def __init__(self):
class PushCommand (line 96) | class PushCommand(Command):
method __init__ (line 97) | def __init__(self, notify, msg, buddy=None):
class PushAckCommand (line 102) | class PushAckCommand(Command):
method __init__ (line 103) | def __init__(self, nid):
class NotifyAddCommand (line 108) | class NotifyAddCommand(Command):
method __init__ (line 109) | def __init__(self, aid=None, gid=None, type=None, priority=None):
class NotifyCommand (line 116) | class NotifyCommand(Command):
method __init__ (line 117) | def __init__(self, buddy=None):
class NotifyListCommand (line 122) | class NotifyListCommand(Command):
method __init__ (line 123) | def __init__(self):
class NotifyGetCommand (line 127) | class NotifyGetCommand(Command):
method __init__ (line 128) | def __init__(self, type, id):
class NotifyAckCommand (line 133) | class NotifyAckCommand(Command):
method __init__ (line 134) | def __init__(self, type, id):
class BuddyAddCommand (line 139) | class BuddyAddCommand(Command):
method __init__ (line 140) | def __init__(self, uid=None, uname=None):
class BuddyDelCommand (line 147) | class BuddyDelCommand(Command):
method __init__ (line 148) | def __init__(self, uid):
class BuddyAcceptCommand (line 153) | class BuddyAcceptCommand(Command):
method __init__ (line 154) | def __init__(self, uid):
class BuddyDenyCommand (line 159) | class BuddyDenyCommand(Command):
method __init__ (line 160) | def __init__(self, uid):
class BuddyListCommand (line 165) | class BuddyListCommand(Command):
method __init__ (line 166) | def __init__(self, startat):
class BuddyStateCommand (line 171) | class BuddyStateCommand(Command):
method __init__ (line 172) | def __init__(self, startat):
class AnimeCommand (line 178) | class AnimeCommand(Command):
method __init__ (line 179) | def __init__(self, aid=None, aname=None, amask=None):
class EpisodeCommand (line 186) | class EpisodeCommand(Command):
method __init__ (line 187) | def __init__(self, eid=None, aid=None, aname=None, epno=None):
class FileCommand (line 194) | class FileCommand(Command):
method __init__ (line 195) | def __init__(self, fid=None, size=None, ed2k=None, aid=None, aname=Non...
class GroupCommand (line 202) | class GroupCommand(Command):
method __init__ (line 203) | def __init__(self, gid=None, gname=None):
class GroupstatusCommand (line 210) | class GroupstatusCommand(Command):
method __init__ (line 211) | def __init__(self, aid=None, status=None):
class ProducerCommand (line 218) | class ProducerCommand(Command):
method __init__ (line 219) | def __init__(self, pid=None, pname=None):
method cached (line 225) | def cached(self, intr, db):
method cache (line 245) | def cache(self, intr, db):
class MyListCommand (line 263) | class MyListCommand(Command):
method __init__ (line 264) | def __init__(self, lid=None, fid=None, size=None, ed2k=None, aid=None,...
method cached (line 270) | def cached(self, intr, db):
method cache (line 333) | def cache(self, intr, db):
class MyListAddCommand (line 351) | class MyListAddCommand(Command):
method __init__ (line 352) | def __init__(self, lid=None, fid=None, size=None, ed2k=None, aid=None,...
class MyListDelCommand (line 359) | class MyListDelCommand(Command):
method __init__ (line 360) | def __init__(self, lid=None, fid=None, aid=None, aname=None, gid=None,...
class MyListStatsCommand (line 367) | class MyListStatsCommand(Command):
method __init__ (line 368) | def __init__(self):
class VoteCommand (line 372) | class VoteCommand(Command):
method __init__ (line 373) | def __init__(self, type, id=None, name=None, value=None, epno=None):
class RandomAnimeCommand (line 380) | class RandomAnimeCommand(Command):
method __init__ (line 381) | def __init__(self, type):
class PingCommand (line 386) | class PingCommand(Command):
method __init__ (line 387) | def __init__(self):
class EncryptCommand (line 392) | class EncryptCommand(Command):
method __init__ (line 393) | def __init__(self, user, apipassword, type):
class EncodingCommand (line 399) | class EncodingCommand(Command):
method __init__ (line 400) | def __init__(self, name):
class SendMsgCommand (line 405) | class SendMsgCommand(Command):
method __init__ (line 406) | def __init__(self, to, title, body):
class UserCommand (line 413) | class UserCommand(Command):
method __init__ (line 414) | def __init__(self, user):
class UptimeCommand (line 419) | class UptimeCommand(Command):
method __init__ (line 420) | def __init__(self):
class VersionCommand (line 424) | class VersionCommand(Command):
method __init__ (line 425) | def __init__(self):
FILE: sickrage/libs/adba/aniDBerrors.py
class AniDBError (line 20) | class AniDBError(Exception):
class AniDBIncorrectParameterError (line 24) | class AniDBIncorrectParameterError(AniDBError):
class AniDBCommandTimeoutError (line 28) | class AniDBCommandTimeoutError(AniDBError):
class AniDBMustAuthError (line 32) | class AniDBMustAuthError(AniDBError):
class AniDBPacketCorruptedError (line 36) | class AniDBPacketCorruptedError(AniDBError):
class AniDBInternalError (line 40) | class AniDBInternalError(AniDBError):
FILE: sickrage/libs/adba/aniDBfileInfo.py
function get_ED2K (line 35) | def get_ED2K(filePath, forceHash=False, cacheLocation=os.path.normpath(s...
function get_file_size (line 101) | def get_file_size(path):
function read_anidb_xml (line 106) | def read_anidb_xml(file_path=None):
function read_tvdb_map_xml (line 114) | def read_tvdb_map_xml(file_path=None):
function read_xml_into_etree (line 122) | def read_xml_into_etree(filePath):
function _remove_file_failed (line 139) | def _remove_file_failed(file):
function download_file (line 146) | def download_file(url, filename):
function get_anime_titles_xml (line 165) | def get_anime_titles_xml(path):
function get_anime_list_xml (line 169) | def get_anime_list_xml(path):
FILE: sickrage/libs/adba/aniDBlink.py
class AniDBLink (line 34) | class AniDBLink(threading.Thread):
method __init__ (line 35) | def __init__(self, server, port, myport, delay=2, timeout=20):
method connectSocket (line 63) | def connectSocket(self, myport, timeout):
method disconnectSocket (line 78) | def disconnectSocket(self):
method stop (line 83) | def stop(self):
method stopped (line 89) | def stopped(self):
method print_log_dummy (line 92) | def print_log_dummy(self, data):
method run (line 95) | def run(self):
method _handle_timeouts (line 161) | def _handle_timeouts(self):
method _resp_queue (line 174) | def _resp_queue(self, response):
method getresponse (line 180) | def getresponse(self, command):
method _cmd_queue (line 188) | def _cmd_queue(self, command):
method _cmd_dequeue (line 192) | def _cmd_dequeue(self, resp):
method _delay (line 198) | def _delay(self):
method _do_delay (line 201) | def _do_delay(self):
method _send (line 207) | def _send(self, command):
method new_tag (line 220) | def new_tag(self):
method request (line 228) | def request(self, command):
FILE: sickrage/libs/adba/aniDBmaper.py
class AniDBMaper (line 21) | class AniDBMaper:
method getAnimeBitsA (line 24) | def getAnimeBitsA(self, amask):
method getAnimeCodesA (line 28) | def getAnimeCodesA(self, aBitChain):
method getFileBitsF (line 32) | def getFileBitsF(self, fmask):
method getFileCodesF (line 36) | def getFileCodesF(self, bitChainF):
method getFileBitsA (line 40) | def getFileBitsA(self, amask):
method getFileCodesA (line 44) | def getFileCodesA(self, bitChainA):
method _getBitChain (line 48) | def _getBitChain(self, map, wanted):
method _getCodes (line 61) | def _getCodes(map, bit_chain):
method getAnimeMapA (line 73) | def getAnimeMapA():
method getFileMapF (line 86) | def getFileMapF():
method getFileMapA (line 97) | def getFileMapA():
method checkMapping (line 106) | def checkMapping(self, verbos=False):
method checkMapFileF (line 113) | def checkMapFileF(self, verbos=False):
method checkMapFileA (line 119) | def checkMapFileA(self, verbos=False):
method _checkMapGeneral (line 125) | def _checkMapGeneral(self, getGeneralMap, getBits, getCodes, verbos=Fa...
FILE: sickrage/libs/adba/aniDBresponses.py
class ResponseResolver (line 22) | class ResponseResolver:
method __init__ (line 23) | def __init__(self, data):
method parse (line 32) | def parse(data):
method resolve (line 49) | def resolve(self, cmd):
class Response (line 53) | class Response:
method __init__ (line 54) | def __init__(self, cmd, restag, rescode, resstr, rawlines):
method __repr__ (line 62) | def __repr__(self):
method parse (line 77) | def parse(self):
method handle (line 95) | def handle(self):
class LoginAcceptedResponse (line 100) | class LoginAcceptedResponse(Response):
method __init__ (line 101) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class LoginAcceptedNewVerResponse (line 123) | class LoginAcceptedNewVerResponse(Response):
method __init__ (line 124) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class LoggedOutResponse (line 146) | class LoggedOutResponse(Response):
method __init__ (line 147) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class ResourceResponse (line 161) | class ResourceResponse(Response):
method __init__ (line 162) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class StatsResponse (line 176) | class StatsResponse(Response):
method __init__ (line 177) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class TopResponse (line 191) | class TopResponse(Response):
method __init__ (line 192) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class UptimeResponse (line 206) | class UptimeResponse(Response):
method __init__ (line 207) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class EncryptionEnabledResponse (line 222) | class EncryptionEnabledResponse(Response):
method __init__ (line 223) | def __init__(self, cmd, restag, rescode, resstr, datalines):
class MylistEntryAddedResponse (
Copy disabled (too large)
Download .json
Condensed preview — 571 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,846K chars).
[
{
"path": ".changelogrc",
"chars": 1125,
"preview": "{\n \"app_name\": \"\",\n \"logo\": \"https://sickrage.ca/img/logo-stacked.png\",\n \"intro\": \"\",\n \"branch\" : \"\",\n \"r"
},
{
"path": ".dockerignore",
"chars": 271,
"preview": ".git\n.gitlab\n.gitignore\n.gitattributes\n.eslintc\n**/__pycache__\n**/*.py[cod]\nsrc\ntests\nrunscripts\nnode_modules\ndist\nmanif"
},
{
"path": ".eslintrc",
"chars": 379,
"preview": "{\n \"env\": {\n \"browser\": true,\n \"es6\": true,\n \"node\": true,\n \"jquery\": true\n },\n \"parserOptions\": {\n "
},
{
"path": ".gitattributes",
"chars": 1221,
"preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n\n# Handle line endings automatically for files "
},
{
"path": ".gitignore",
"chars": 1173,
"preview": "# SR AniDB Files #\n######################\n/Session.cfg\n/sickrage/libs/adba/anime-list.xml\n/sickrage/libs/adba/animeti"
},
{
"path": ".gitlab-ci.yml",
"chars": 12332,
"preview": "stages:\n# - review_webpack\n# - review_docker\n# - review_deploy\n# - test\n - build\n# - sentry\n - deploy\n - publish"
},
{
"path": "CHANGELOG.md",
"chars": 999383,
"preview": "### Changelog\n\nAll notable changes to this project will be documented in this file. Dates are displayed in UTC.\n\n#### [1"
},
{
"path": "COPYING.txt",
"chars": 35125,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "Dockerfile",
"chars": 543,
"preview": "FROM python:3.8-alpine3.12\nMAINTAINER echel0n <echel0n@sickrage.ca>\n\nARG SOURCE_COMMIT\nENV SOURCE_COMMIT $SOURCE_COMMIT\n"
},
{
"path": "MANIFEST.in",
"chars": 167,
"preview": "include README.txt\ninclude COPYING.txt\ninclude CHANGELOG.md\ninclude requirements.txt\n\nrecursive-include sickrage *\n\nglob"
},
{
"path": "README.txt",
"chars": 1758,
"preview": "SiCKRAGE\n=====\nAutomatic Video Library Manager for TV Shows.\nIt watches for new episodes of your favorite shows, and whe"
},
{
"path": "SiCKRAGE.py",
"chars": 1056,
"preview": "#!/usr/bin/env python3\n# ##############################################################################\n# Author: echel"
},
{
"path": "build_protos.bat",
"chars": 92,
"preview": ".\\protoc.exe --proto_path=.\\protos --python_out=.\\sickrage\\core\\amqp\\protos .\\protos\\*.proto"
},
{
"path": "changelog-template.md",
"chars": 648,
"preview": "<% if(logo) { %><img width=\"300px\" src=\"<%= logo %>\" /><%= '\\n\\n' %><% } %># <%= title %>\n<% if(intro) { %><%= '\\n' %>_<"
},
{
"path": "checksum-generator.py",
"chars": 1824,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "checksum-validator.py",
"chars": 1916,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "crowdin.yaml",
"chars": 241,
"preview": "project_identifier: sickragetv\napi_key_env: CROWDIN_API_KEY\nbase_url: 'https://api.crowdin.com'\nbase_path: .\nfiles:\n - "
},
{
"path": "docker-compose.yml",
"chars": 382,
"preview": "version: '2'\n\nservices:\n sickrage:\n container_name: sickrage\n build: .\n ports:\n - 8081:8081\n volumes:\n"
},
{
"path": "manifests/deployment.yaml",
"chars": 772,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: __CI_COMMIT_REF_SLUG__\n namespace: __KUBE_NAMESPACE__\n labels:\n"
},
{
"path": "manifests/ingress.yaml",
"chars": 517,
"preview": "apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n name: __CI_COMMIT_REF_SLUG__\n namespace: __KUBE_NAMESPACE__\n "
},
{
"path": "manifests/service.yaml",
"chars": 311,
"preview": "apiVersion: v1\nkind: Service\nmetadata:\n name: __CI_COMMIT_REF_SLUG__\n namespace: __KUBE_NAMESPACE__\n labels:\n app:"
},
{
"path": "package.json",
"chars": 2008,
"preview": "{\n \"name\": \"sickrage\",\n \"version\": \"10.0.71\",\n \"private\": true,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+"
},
{
"path": "protos/announcement_v1.proto",
"chars": 265,
"preview": "syntax = \"proto3\";\n\npackage app.protobufs.v1;\n\nmessage CreatedAnnouncementResponse {\n string ahash = 1;\n string ti"
},
{
"path": "protos/network_timezone_v1.proto",
"chars": 205,
"preview": "syntax = \"proto3\";\n\npackage app.protobufs.v1;\n\nmessage SavedNetworkTimezoneResponse {\n string network = 1;\n string"
},
{
"path": "protos/search_provider_url_v1.proto",
"chars": 147,
"preview": "syntax = \"proto3\";\n\npackage app.protobufs.v1;\n\nmessage SavedSearchProviderUrlResponse {\n string provider_id = 1;\n "
},
{
"path": "protos/server_certificate_v1.proto",
"chars": 146,
"preview": "syntax = \"proto3\";\n\npackage app.protobufs.v1;\n\nmessage SavedServerCertificateResponse {\n string certificate = 1;\n "
},
{
"path": "protos/updates_v1.proto",
"chars": 98,
"preview": "syntax = \"proto3\";\n\npackage app.protobufs.v1;\n\nmessage UpdatedAppResponse {\n bool force = 1;\n}\n"
},
{
"path": "readme.md",
"chars": 2371,
"preview": "\n\nAutomatic Video Library Manager for TV Shows. It watches for new epi"
},
{
"path": "renovate.json",
"chars": 326,
"preview": "{\n \"extends\": [\n \"config:base\",\n \":assignee(echel0n)\"\n ],\n \"baseBranches\": [\n \"develop\"\n ],\n \"enabledManag"
},
{
"path": "requirements-dev.txt",
"chars": 42,
"preview": "twine\ncrowdin-cli-py\nbabel\ntox\nmako\npytest"
},
{
"path": "requirements.txt",
"chars": 1917,
"preview": "aenum==2.2.4\nalembic==1.4.2\napispec==4.0.0\napispec-webframeworks==0.5.2\nappdirs==1.4.4\nAPScheduler==3.6.3\narrow==0.15.8\n"
},
{
"path": "runscripts/init.debian",
"chars": 4690,
"preview": "#!/bin/sh\n#\n### BEGIN INIT INFO\n# Provides: sickrage\n# Required-Start: $local_fs $network $remote_fs\n# Requi"
},
{
"path": "runscripts/init.fedora",
"chars": 2097,
"preview": "#!/bin/sh\n#\n### BEGIN INIT INFO\n# Provides: sickrage\n# Required-Start: $all\n# Required-Stop: $all\n# Defa"
},
{
"path": "runscripts/init.freebsd",
"chars": 2165,
"preview": "#!/bin/sh\n#\n# PROVIDE: sickrage\n# REQUIRE: LOGIN\n# KEYWORD: shutdown\n#\n# Add the following lines to /etc/rc.conf.local o"
},
{
"path": "runscripts/init.gentoo",
"chars": 2029,
"preview": "#!/sbin/runscript\n# Copyright 1999-2013 Gentoo Foundation\n# Distributed under the terms of the GNU General Public Licens"
},
{
"path": "runscripts/init.solaris11",
"chars": 2314,
"preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE service_bundle SYSTEM \"/usr/share/lib/xml/dtd/service_bundle.dtd.1\">\n<!--\n Assumes user"
},
{
"path": "runscripts/init.systemd",
"chars": 2159,
"preview": "# Sickrage systemd service unit file\n#\n# Configuration Notes\n#\n# - Option names (e.g. ExecStart=, Type=) are case-sen"
},
{
"path": "runscripts/init.ubuntu",
"chars": 3502,
"preview": "#!/bin/sh\n#\n### BEGIN INIT INFO\n# Provides: sickrage\n# Required-Start: $local_fs $network $remote_fs\n# Requi"
},
{
"path": "runscripts/init.upstart",
"chars": 1204,
"preview": "# SickRage\n#\n# Configuration Notes\n#\n# - Adjust setuid and setgid to the user/group you want SickRage to run as.\n# "
},
{
"path": "setup.cfg",
"chars": 843,
"preview": "[bumpversion]\ncurrent_version = 10.0.71\ncommit = False\ntag = False\nparse = (?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+"
},
{
"path": "setup.py",
"chars": 2418,
"preview": "import os\nimport shutil\n\nimport glob\nfrom setuptools import setup, Command\n\nfrom sickrage import __version__\n\n\ndef requi"
},
{
"path": "sickrage/__init__.py",
"chars": 18236,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/autoProcessTV/__init__.py",
"chars": 970,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/autoProcessTV/autoProcessTV.cfg.sample",
"chars": 60,
"preview": "[sickrage]\nhost=localhost\nport=8081\napi_key=\nweb_root=\nssl=0"
},
{
"path": "sickrage/autoProcessTV/autoProcessTV.py",
"chars": 3747,
"preview": "#!/usr/bin/env python3\n# ##############################################################################\n# Author: echel"
},
{
"path": "sickrage/autoProcessTV/hellaToSiCKRAGE.py",
"chars": 1226,
"preview": "#!/usr/bin/env python3\n# ##############################################################################\n# Author: echel"
},
{
"path": "sickrage/autoProcessTV/mediaToSiCKRAGE.py",
"chars": 7079,
"preview": "#!/usr/bin/env python3\n# ##############################################################################\n# Author: echel"
},
{
"path": "sickrage/autoProcessTV/sabToSiCKRAGE.py",
"chars": 1394,
"preview": "#!/usr/bin/env python3\n# ##############################################################################\n# Author: echel"
},
{
"path": "sickrage/checksums.md5",
"chars": 47859,
"preview": "sickrage/version.txt = 80389d18c0540d2cec6ef65560121838\nsickrage/checksums.md5 = d41d8cd98f00b204e9800998ecf8427e\nsickra"
},
{
"path": "sickrage/clients/__init__.py",
"chars": 10190,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is fr"
},
{
"path": "sickrage/clients/nzb/__init__.py",
"chars": 969,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/nzb/download_station.py",
"chars": 8029,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/nzb/nzbget.py",
"chars": 7690,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/clients/nzb/sabnzbd.py",
"chars": 6135,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage\n#\n# "
},
{
"path": "sickrage/clients/torrent/__init__.py",
"chars": 968,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/deluge.py",
"chars": 8159,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/deluged.py",
"chars": 8318,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/download_station.py",
"chars": 9117,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/mlnet.py",
"chars": 1919,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/putio.py",
"chars": 3557,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/qbittorrent.py",
"chars": 6244,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/rtorrent.py",
"chars": 5324,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/transmission.py",
"chars": 6387,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/clients/torrent/utorrent.py",
"chars": 5208,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/__init__.py",
"chars": 29418,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/amqp/__init__.py",
"chars": 4528,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/amqp/consumer.py",
"chars": 4804,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/amqp/protos/announcement_v1_pb2.py",
"chars": 2181,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: announcement_v1.proto\n\"\"\"Ge"
},
{
"path": "sickrage/core/amqp/protos/network_timezone_v1_pb2.py",
"chars": 2118,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: network_timezone_v1.proto\n\""
},
{
"path": "sickrage/core/amqp/protos/search_provider_url_v1_pb2.py",
"chars": 1486,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: search_provider_url_v1.prot"
},
{
"path": "sickrage/core/amqp/protos/server_certificate_v1_pb2.py",
"chars": 1488,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: server_certificate_v1.proto"
},
{
"path": "sickrage/core/amqp/protos/updates_v1_pb2.py",
"chars": 1287,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: updates_v1.proto\n\"\"\"Generat"
},
{
"path": "sickrage/core/announcements.py",
"chars": 3521,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/api/__init__.py",
"chars": 15568,
"preview": "import collections\nimport errno\nimport time\nimport traceback\nfrom urllib.parse import urljoin\n\nimport oauthlib.oauth2\nim"
},
{
"path": "sickrage/core/api/exceptions.py",
"chars": 802,
"preview": "class APIError(Exception):\n \"\"\"\n API Error\n \"\"\"\n\n def __init__(self, status, message, response):\n sel"
},
{
"path": "sickrage/core/auth/__init__.py",
"chars": 4272,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/auto_backup.py",
"chars": 564,
"preview": "import sickrage\nfrom sickrage.core.helpers import backup_app_data\n\n\nclass AutoBackup(object):\n def __init__(self, *ar"
},
{
"path": "sickrage/core/blackandwhitelist.py",
"chars": 5295,
"preview": "# Author: Dennis Lutter <lad1337@gmail.com>\n# URL: https://sickrage.ca/\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage"
},
{
"path": "sickrage/core/caches/__init__.py",
"chars": 1386,
"preview": "# import os\n#\n# from dogpile.cache import make_region\n# from dogpile.cache.backends.file import AbstractFileLock\n# from "
},
{
"path": "sickrage/core/caches/image_cache.py",
"chars": 16956,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/caches/name_cache.py",
"chars": 4166,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/caches/tv_cache.py",
"chars": 13981,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/classes.py",
"chars": 2420,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca/\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git"
},
{
"path": "sickrage/core/common.py",
"chars": 26999,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca/\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git"
},
{
"path": "sickrage/core/config/__init__.py",
"chars": 121680,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/config/helpers.py",
"chars": 14340,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/databases/__init__.py",
"chars": 12768,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is fr"
},
{
"path": "sickrage/core/databases/cache/__init__.py",
"chars": 3717,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is fr"
},
{
"path": "sickrage/core/databases/cache/migrations/env.py",
"chars": 2041,
"preview": "from logging.config import fileConfig\n\nfrom sqlalchemy import engine_from_config\nfrom sqlalchemy import pool\n\nfrom alemb"
},
{
"path": "sickrage/core/databases/cache/migrations/script.py.mako",
"chars": 422,
"preview": "\"\"\"${message}\n\nRevision ID: ${up_revision}\nRevises: ${down_revision | comma,n}\nCreate Date: ${create_date}\n\n\"\"\"\nfrom ale"
},
{
"path": "sickrage/core/databases/cache/migrations/versions/001_Add_Initial_Tables.py",
"chars": 271,
"preview": "\"\"\"Initial migration\n\nRevision ID: 1\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\nimport"
},
{
"path": "sickrage/core/databases/cache/migrations/versions/002_Remove_ID_Column_From_LastSearch_Table.py",
"chars": 595,
"preview": "\"\"\"Initial migration\n\nRevision ID: 2\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/003_Rename_IndexerID_To_SeriesID_On_Provider_Table.py",
"chars": 684,
"preview": "\"\"\"Initial migration\n\nRevision ID: 3\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/004_Add_OAuth2Token_Table.py",
"chars": 1782,
"preview": "\"\"\"Initial migration\n\nRevision ID: 4\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport json\nimport os\nfrom js"
},
{
"path": "sickrage/core/databases/cache/migrations/versions/005_Add_Announcements_Table.py",
"chars": 478,
"preview": "\"\"\"Initial migration\n\nRevision ID: 5\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\nimport"
},
{
"path": "sickrage/core/databases/cache/migrations/versions/006_Add_Session_State_Column_To_OAuth2Token_Table.py",
"chars": 746,
"preview": "\"\"\"Initial migration\n\nRevision ID: 6\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/007_Add_Token_Type_Column_To_OAuth2Token_Table.py",
"chars": 740,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/008_Drop_QuickSearch_Tables.py",
"chars": 552,
"preview": "\"\"\"Initial migration\n\nRevision ID: 8\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/009_Add_SeriesProviderID_Column_To_Providers_Table.py",
"chars": 772,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/cache/migrations/versions/010_Remove_OAuth2Token_Table.py",
"chars": 1674,
"preview": "\"\"\"Initial migration\n\nRevision ID: 10\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport json\nimport os\nfrom j"
},
{
"path": "sickrage/core/databases/cache/migrations/versions/011_Bump_Version.py",
"chars": 524,
"preview": "\"\"\"Initial migration\n\nRevision ID: 11\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport json\nimport os\nfrom j"
},
{
"path": "sickrage/core/databases/config/__init__.py",
"chars": 36876,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/databases/config/migrations/env.py",
"chars": 2041,
"preview": "from logging.config import fileConfig\n\nfrom sqlalchemy import engine_from_config\nfrom sqlalchemy import pool\n\nfrom alemb"
},
{
"path": "sickrage/core/databases/config/migrations/script.py.mako",
"chars": 422,
"preview": "\"\"\"${message}\n\nRevision ID: ${up_revision}\nRevises: ${down_revision | comma,n}\nCreate Date: ${create_date}\n\n\"\"\"\nfrom ale"
},
{
"path": "sickrage/core/databases/config/migrations/versions/001_Add_Initial_Tables.py",
"chars": 271,
"preview": "\"\"\"Initial migration\n\nRevision ID: 1\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\nimport"
},
{
"path": "sickrage/core/databases/config/migrations/versions/002_Remove_Web_Host_Column.py",
"chars": 331,
"preview": "\"\"\"Initial migration\n\nRevision ID: 1\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\n\n# rev"
},
{
"path": "sickrage/core/databases/config/migrations/versions/003_Remove_Search_Providers_Newznab_Key_Column.py",
"chars": 343,
"preview": "\"\"\"Initial migration\n\nRevision ID: 3\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\n\n# rev"
},
{
"path": "sickrage/core/databases/config/migrations/versions/004_Add_SSO_API_Key_Column_To_General_Table.py",
"chars": 337,
"preview": "\"\"\"Initial migration\n\nRevision ID: 4\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/config/migrations/versions/005_Convert_Default_Series_Provider_Language_Code_To_ISO6393_In_General_Table.py",
"chars": 600,
"preview": "\"\"\"Initial migration\n\nRevision ID: 4\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport babelfish\nfrom alembic"
},
{
"path": "sickrage/core/databases/config/migrations/versions/006_Bump_Version.py",
"chars": 263,
"preview": "\"\"\"Initial migration\n\nRevision ID: 6\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport babelfish\nfrom alembic"
},
{
"path": "sickrage/core/databases/config/migrations/versions/007_Convert_NMA_Priority_Column_To_Integer.py",
"chars": 692,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/config/migrations/versions/008_Add_Update_Video_Metadata_Column_To_General_Table.py",
"chars": 361,
"preview": "\"\"\"Initial migration\n\nRevision ID: 8\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/config/migrations/versions/009_Add_AutoBackup_Columns_To_General_Table.py",
"chars": 611,
"preview": "\"\"\"Initial migration\n\nRevision ID: 9\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/config/schemas.py",
"chars": 15481,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/databases/main/__init__.py",
"chars": 27447,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is fr"
},
{
"path": "sickrage/core/databases/main/migrations/env.py",
"chars": 2041,
"preview": "from logging.config import fileConfig\n\nfrom sqlalchemy import engine_from_config\nfrom sqlalchemy import pool\n\nfrom alemb"
},
{
"path": "sickrage/core/databases/main/migrations/script.py.mako",
"chars": 422,
"preview": "\"\"\"${message}\n\nRevision ID: ${up_revision}\nRevises: ${down_revision | comma,n}\nCreate Date: ${create_date}\n\n\"\"\"\nfrom ale"
},
{
"path": "sickrage/core/databases/main/migrations/versions/001_Add_Initial_Tables.py",
"chars": 271,
"preview": "\"\"\"Initial migration\n\nRevision ID: 1\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\nimport"
},
{
"path": "sickrage/core/databases/main/migrations/versions/002_Add_Last_Backlog_Search_Column_To_TVShow_Table.py",
"chars": 524,
"preview": "\"\"\"Initial migration\n\nRevision ID: 2\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nfrom alembic import op\nimport"
},
{
"path": "sickrage/core/databases/main/migrations/versions/003_Add_Last_Proper_Search_Column_To_TVShow_Table.py",
"chars": 521,
"preview": "\"\"\"Initial migration\n\nRevision ID: 3\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/main/migrations/versions/004_Rename_Columns_On_TVShow_Table.py",
"chars": 708,
"preview": "\"\"\"Initial migration\n\nRevision ID: 4\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/main/migrations/versions/005_Rename_Columns_On_IMDbInfo_Table.py",
"chars": 5864,
"preview": "\"\"\"Initial migration\n\nRevision ID: 5\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom "
},
{
"path": "sickrage/core/databases/main/migrations/versions/006_Rename_Columns_On_TVEpisode_Table.py",
"chars": 1188,
"preview": "\"\"\"Rename Columns On TV Episodes Table\n\nRevision ID: 6\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqla"
},
{
"path": "sickrage/core/databases/main/migrations/versions/007_Convert_Airdate_Column_To_Date_Type_On_TVEpisode_Table.py",
"chars": 920,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqlal"
},
{
"path": "sickrage/core/databases/main/migrations/versions/008_Convert_Date_Column_To_DateTime_Type_On_FailedSnatchHistory_Table.py",
"chars": 1462,
"preview": "\"\"\"Initial migration\n\nRevision ID: 8\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqlal"
},
{
"path": "sickrage/core/databases/main/migrations/versions/009_Convert_Date_Column_To_DateTime_Type_On_History_Table.py",
"chars": 1268,
"preview": "\"\"\"Initial migration\n\nRevision ID: 9\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqlal"
},
{
"path": "sickrage/core/databases/main/migrations/versions/010_Add_Release_Group_Column_To_History_Table.py",
"chars": 507,
"preview": "\"\"\"Initial migration\n\nRevision ID: 10\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/011_Add_Scene_Exceptions_Column_To_TVShow_Table.py",
"chars": 685,
"preview": "\"\"\"Initial migration\n\nRevision ID: 11\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/012_Add_Search_Format_Column_To_TVShow_Table.py",
"chars": 1849,
"preview": "\"\"\"Initial migration\n\nRevision ID: 12\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/013_Add_Scene_Column_To_TVShow_Table.py",
"chars": 1284,
"preview": "\"\"\"Initial migration\n\nRevision ID: 13\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/014_Add_Last_XEM_Refresh_Column_To_TVShows_Table.py",
"chars": 992,
"preview": "\"\"\"Initial migration\n\nRevision ID: 14\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqla"
},
{
"path": "sickrage/core/databases/main/migrations/versions/015_Add_XEM_Numbering_To_TVEpisodes_Table.py",
"chars": 866,
"preview": "\"\"\"Initial migration\n\nRevision ID: 15\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/016_Merge_Scene_Numbering_Table_With_TVEpisodes_Table.py",
"chars": 1105,
"preview": "\"\"\"Initial migration\n\nRevision ID: 16\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport sqlalchemy as sa\nfrom"
},
{
"path": "sickrage/core/databases/main/migrations/versions/017_Convert_SearchFormat_Column_To_Enum_Type_On_TVShow_Table.py",
"chars": 723,
"preview": "\"\"\"Initial migration\n\nRevision ID: 17\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport enum\n\nimport sqlalche"
},
{
"path": "sickrage/core/databases/main/migrations/versions/018_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVEpisode_Table.py",
"chars": 1032,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqlal"
},
{
"path": "sickrage/core/databases/main/migrations/versions/019_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_TVShow_Table.py",
"chars": 2736,
"preview": "\"\"\"Initial migration\n\nRevision ID: 7\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\nimport datetime\n\nimport sqlal"
},
{
"path": "sickrage/core/databases/main/migrations/versions/020_Convert_Timestamp_Integer_Columns_To_DateTime_Type_On_ImdbInfo_Table.py",
"chars": 1957,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/databases/main/migrations/versions/021_Upgrade_To_SiCKRAGE_v10.py",
"chars": 5512,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/databases/main/migrations/versions/022_Convert_Language_Codes_To_ISO6393_On_TVShow_Table.py",
"chars": 714,
"preview": "\"\"\"Initial migration\n\nRevision ID: 22\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\n\nimport babelfish\nimport sql"
},
{
"path": "sickrage/core/databases/main/migrations/versions/023_Bump_Version.py",
"chars": 290,
"preview": "\"\"\"Initial migration\n\nRevision ID: 23\nRevises:\nCreate Date: 2017-12-29 14:39:27.854291\n\n\"\"\"\n\nimport babelfish\nimport sql"
},
{
"path": "sickrage/core/databases/main/schemas.py",
"chars": 3875,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/enums.py",
"chars": 8848,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/exceptions/__init__.py",
"chars": 3407,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/google_drive.py",
"chars": 2880,
"preview": "import os\nfrom base64 import b64decode\n\nfrom tornado.escape import json_encode\n\nimport sickrage\n\ncurrentInfo = ''\npercen"
},
{
"path": "sickrage/core/helpers/__init__.py",
"chars": 54579,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/helpers/anidb.py",
"chars": 3679,
"preview": "import adba\nimport sickrage\nfrom adba import AniDBCommandTimeoutError\nfrom sickrage.core.exceptions import AnidbAdbaConn"
},
{
"path": "sickrage/core/helpers/browser.py",
"chars": 4885,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca/\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git"
},
{
"path": "sickrage/core/helpers/encryption.py",
"chars": 4794,
"preview": "import base64\nimport os\nimport zlib\n\nfrom cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.p"
},
{
"path": "sickrage/core/helpers/metadata.py",
"chars": 3344,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/helpers/show_names.py",
"chars": 8297,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/helpers/srdatetime.py",
"chars": 6471,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/imdb_popular.py",
"chars": 5191,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/logger/__init__.py",
"chars": 10325,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/media/__init__.py",
"chars": 2590,
"preview": "import os\nfrom mimetypes import guess_type\n\nfrom tornado.escape import url_escape\n\nimport sickrage\nfrom sickrage.core.ex"
},
{
"path": "sickrage/core/media/banner.py",
"chars": 1701,
"preview": "# This file is part of SiCKRAGE.\n#\n# URL: https://www.sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n#"
},
{
"path": "sickrage/core/media/fanart.py",
"chars": 1646,
"preview": "# This file is part of SiCKRAGE.\n#\n# URL: https://www.sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n#"
},
{
"path": "sickrage/core/media/network.py",
"chars": 1566,
"preview": "# This file is part of SiCKRAGE.\n#\n# URL: https://www.sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n#"
},
{
"path": "sickrage/core/media/poster.py",
"chars": 1763,
"preview": "# This file is part of SiCKRAGE.\n#\n# URL: https://www.sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n#"
},
{
"path": "sickrage/core/media/util.py",
"chars": 4429,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/nameparser/__init__.py",
"chars": 26113,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/nameparser/regexes.py",
"chars": 26501,
"preview": "# -*- coding: utf-8 -*-\n# ##############################################################################\n# Author: eche"
},
{
"path": "sickrage/core/nameparser/validator.py",
"chars": 9826,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/nzbSplitter.py",
"chars": 6739,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/process_tv.py",
"chars": 26542,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/processors/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "sickrage/core/processors/auto_postprocessor.py",
"chars": 1798,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/processors/failed_processor.py",
"chars": 4413,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/processors/post_processor.py",
"chars": 54094,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/queues/__init__.py",
"chars": 13342,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/queues/postprocessor.py",
"chars": 6723,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/queues/search.py",
"chars": 17824,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/queues/show.py",
"chars": 28793,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/scene_numbering.py",
"chars": 19644,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/search.py",
"chars": 26863,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/searchers/__init__.py",
"chars": 779,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/searchers/backlog_searcher.py",
"chars": 5911,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/searchers/daily_searcher.py",
"chars": 4995,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/searchers/failed_snatch_searcher.py",
"chars": 4051,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/searchers/proper_searcher.py",
"chars": 15192,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/searchers/subtitle_searcher.py",
"chars": 6110,
"preview": "# Author: Nyaran <nyayukko@gmail.com>, based on Antoine Bertin <diaoulael@gmail.com> work\n# URL: https://sickrage.ca\n#\n#"
},
{
"path": "sickrage/core/searchers/trakt_searcher.py",
"chars": 23014,
"preview": "# Author: Frank Fenton\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is free software: you "
},
{
"path": "sickrage/core/traktapi.py",
"chars": 2834,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/tv/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "sickrage/core/tv/episode/__init__.py",
"chars": 60410,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/tv/episode/helpers.py",
"chars": 1585,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/tv/show/__init__.py",
"chars": 61459,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/tv/show/coming_episodes.py",
"chars": 7326,
"preview": "# This file is part of SiCKRAGE.\n#\n# URL: https://www.sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n#"
},
{
"path": "sickrage/core/tv/show/helpers.py",
"chars": 2026,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/tv/show/history.py",
"chars": 18297,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/ui.py",
"chars": 6048,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/updaters/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "sickrage/core/updaters/rsscache_updater.py",
"chars": 783,
"preview": "import functools\nimport threading\n\nimport sickrage\n\n\nclass RSSCacheUpdater(object):\n def __init__(self):\n supe"
},
{
"path": "sickrage/core/updaters/show_updater.py",
"chars": 4103,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n#\n# This file is part of SiCKRAGE.\n#\n# SiCKRAGE is fr"
},
{
"path": "sickrage/core/updaters/tz_updater.py",
"chars": 5498,
"preview": "# Author: echel0n <echel0n@sickrage.ca>\n# URL: https://sickrage.ca\n# Git: https://git.sickrage.ca/SiCKRAGE/sickrage.git\n"
},
{
"path": "sickrage/core/upnp.py",
"chars": 5175,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/version_updater.py",
"chars": 26584,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/webserver/__init__.py",
"chars": 38678,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/webserver/handlers/__init__.py",
"chars": 969,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/webserver/handlers/account.py",
"chars": 4997,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
},
{
"path": "sickrage/core/webserver/handlers/announcements.py",
"chars": 2097,
"preview": "# ##############################################################################\n# Author: echel0n <echel0n@sickrage.ca"
}
]
// ... and 371 more files (download for full content)
About this extraction
This page contains the full source code of the SiCKRAGE/SiCKRAGE GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 571 files (12.3 MB), approximately 3.3M tokens, and a symbol index with 4488 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.