Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vueify add show options #4848

Merged
merged 32 commits into from
Sep 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
550a1ad
Add default options to apiv2 /config
p0psicles Aug 5, 2018
a31c9ca
Update store.js with new default (add-show) options.
p0psicles Aug 5, 2018
f9728aa
Implement add-show-options.vue
p0psicles Aug 5, 2018
4d1a9a2
Move back setTimeout method, that was removed.
p0psicles Aug 5, 2018
9376a6b
Process review feedback
p0psicles Aug 11, 2018
3208a53
Updates and fixes
sharkykh Aug 24, 2018
3c56e42
Fix enter button on the search input submitting the form
sharkykh Aug 28, 2018
a8d811e
Fix bad HTML in inc_addShowOptions.mako
sharkykh Aug 29, 2018
f68ae8e
Implement saving defaults
sharkykh Aug 29, 2018
0b98cca
Remove unused code
sharkykh Aug 29, 2018
e21801c
Lint
sharkykh Aug 29, 2018
5ac922c
Fix `is_valid_combined_quality`, add test
sharkykh Aug 30, 2018
ce95a67
Replace old jQuery code for refreshing the show options section
sharkykh Aug 30, 2018
a42934d
Update inc_addShowOptions.mako
sharkykh Aug 30, 2018
abd8305
Rename seasonFolder to seasonFolders
sharkykh Aug 30, 2018
31098cb
Update addShows_newShow.mako
sharkykh Aug 30, 2018
c4f2065
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Aug 30, 2018
c7f2c43
Move some watches to `mounted()` and add missing `selectedSubtitleEna…
sharkykh Aug 30, 2018
b3a6e43
Add render test
sharkykh Aug 30, 2018
be545af
Lint
sharkykh Aug 30, 2018
cb0f236
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Sep 2, 2018
3e3966b
Test `utils.combineQualities`
sharkykh Sep 2, 2018
88dec5c
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Sep 2, 2018
f6f053e
Fixes for clicking enter on the show name search input
sharkykh Sep 2, 2018
d2fd220
Fix `toggle-slider` value not updated when prop value is updated
sharkykh Sep 2, 2018
36ff6fe
Update changelog
sharkykh Sep 4, 2018
d531365
Only show anime option if `enableAnimeOptions` prop is `true`
sharkykh Sep 4, 2018
785f062
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Sep 4, 2018
a48bf70
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Sep 7, 2018
6217121
Update notifications
sharkykh Sep 7, 2018
4fe1a64
Merge branch 'develop' into feature/vue-add-show-options
sharkykh Sep 10, 2018
67e9813
Add missing `apiRoute` import
sharkykh Sep 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- Updated `guessit` to version 3.0.0 ([#4244](https://github.com/pymedusa/Medusa/pull/4244))
- Updated the API v2 endpoint to handle concurrent requests ([#4970](https://github.com/pymedusa/Medusa/pull/4970))
- Converted some of the show header to Vue ([#5087](https://github.com/pymedusa/Medusa/pull/5087))
- Converted "Add Show" options into a Vue SFC ([#4848](https://github.com/pymedusa/Medusa/pull/4848))

#### Fixes
- Fixed many release name parsing issues as a result of updating `guessit` ([#4244](https://github.com/pymedusa/Medusa/pull/4244))
Expand Down
16 changes: 16 additions & 0 deletions medusa/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,22 @@ def split_quality(quality):

return sorted(allowed_qualities), sorted(preferred_qualities)

@staticmethod
def is_valid_combined_quality(quality):
"""
Check quality value to make sure it is a valid combined quality.

:param quality: Quality to check
:type quality: int
:return: True if valid, False if not
"""
for cur_qual in Quality.qualityStrings:
if cur_qual & quality:
quality -= cur_qual
if cur_qual << 16 & quality:
quality -= cur_qual << 16
return quality == 0

@staticmethod
def name_quality(name, anime=False, extend=True):
"""
Expand Down
24 changes: 24 additions & 0 deletions medusa/server/api/v2/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
logger,
ws,
)
from medusa.common import IGNORED, Quality, SKIPPED, WANTED
from medusa.helper.mappings import NonEmptyDict
from medusa.indexers.indexer_config import get_indexer_config
from medusa.logger.adapters.style import BraceAdapter
Expand Down Expand Up @@ -51,6 +52,11 @@ def theme_name_setter(object, name, value):
config.change_theme(value)


def season_folders_validator(value):
"""Validate default season folders setting."""
return not (app.NAMING_FORCE_FOLDERS and value is False)


class ConfigHandler(BaseRequestHandler):
"""Config request handler."""

Expand Down Expand Up @@ -116,6 +122,15 @@ class ConfigHandler(BaseRequestHandler):
'backlogOverview.period': StringField(app, 'BACKLOG_PERIOD'),
'backlogOverview.status': StringField(app, 'BACKLOG_STATUS'),
'rootDirs': ListField(app, 'ROOT_DIRS'),

'showDefaults.status': EnumField(app, 'STATUS_DEFAULT', (SKIPPED, WANTED, IGNORED), int),
'showDefaults.statusAfter': EnumField(app, 'STATUS_DEFAULT_AFTER', (SKIPPED, WANTED, IGNORED), int),
'showDefaults.quality': IntegerField(app, 'QUALITY_DEFAULT', validator=Quality.is_valid_combined_quality),
'showDefaults.subtitles': BooleanField(app, 'SUBTITLES_DEFAULT', validator=lambda v: app.USE_SUBTITLES, converter=bool),
'showDefaults.seasonFolders': BooleanField(app, 'SEASON_FOLDERS_DEFAULT', validator=season_folders_validator, converter=bool),
'showDefaults.anime': BooleanField(app, 'ANIME_DEFAULT', converter=bool),
'showDefaults.scene': BooleanField(app, 'SCENE_DEFAULT', converter=bool),

'postProcessing.showDownloadDir': StringField(app, 'TV_DOWNLOAD_DIR'),
'postProcessing.processAutomatically': BooleanField(app, 'PROCESS_AUTOMATICALLY'),
'postProcessing.processMethod': StringField(app, 'PROCESS_METHOD'),
Expand Down Expand Up @@ -297,6 +312,15 @@ def data_main():
section_data['subtitles']['enabled'] = bool(app.USE_SUBTITLES)
section_data['recentShows'] = app.SHOWS_RECENT

section_data['showDefaults'] = {}
section_data['showDefaults']['status'] = app.STATUS_DEFAULT
section_data['showDefaults']['statusAfter'] = app.STATUS_DEFAULT_AFTER
section_data['showDefaults']['quality'] = app.QUALITY_DEFAULT
section_data['showDefaults']['subtitles'] = bool(app.SUBTITLES_DEFAULT)
section_data['showDefaults']['seasonFolders'] = bool(app.SEASON_FOLDERS_DEFAULT)
section_data['showDefaults']['anime'] = bool(app.ANIME_DEFAULT)
section_data['showDefaults']['scene'] = bool(app.SCENE_DEFAULT)

section_data['news'] = NonEmptyDict()
section_data['news']['lastRead'] = app.NEWS_LAST_READ
section_data['news']['latest'] = app.NEWS_LATEST
Expand Down
9 changes: 9 additions & 0 deletions tests/apiv2/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,15 @@ def config_main(monkeypatch, app_config):
config_data['subtitles']['enabled'] = bool(app.USE_SUBTITLES)
config_data['recentShows'] = app.SHOWS_RECENT

config_data['showDefaults'] = {}
config_data['showDefaults']['status'] = app.STATUS_DEFAULT
config_data['showDefaults']['statusAfter'] = app.STATUS_DEFAULT_AFTER
config_data['showDefaults']['quality'] = app.QUALITY_DEFAULT
config_data['showDefaults']['subtitles'] = bool(app.SUBTITLES_DEFAULT)
config_data['showDefaults']['seasonFolders'] = bool(app.SEASON_FOLDERS_DEFAULT)
config_data['showDefaults']['anime'] = bool(app.ANIME_DEFAULT)
config_data['showDefaults']['scene'] = bool(app.SCENE_DEFAULT)

config_data['news'] = NonEmptyDict()
config_data['news']['lastRead'] = app.NEWS_LAST_READ
config_data['news']['latest'] = app.NEWS_LATEST
Expand Down
30 changes: 30 additions & 0 deletions tests/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -461,3 +461,33 @@ def test_wanted_quality():

# Then
assert actual is True


@pytest.mark.parametrize('p', [
{ # p0 - Invalid combined quality
'quality': -4,
'expected': False
},
{ # p1 - Valid 'allowed' quality
'quality': Quality.HDTV,
'expected': True
},
{ # p2 - Valid 'allowed' quality + valid 'preferred' quality
'quality': Quality.combine_qualities([Quality.HDTV], [Quality.HDWEBDL]),
'expected': True
},
{ # p3 - Valid 'allowed' quality + **invalid** 'preferred' quality
'quality': Quality.combine_qualities([Quality.HDTV], [-4]),
'expected': False
},
])
def test_is_valid_combined_quality(p):
# Given
quality = p['quality']
expected = p['expected']

# When
actual = Quality.is_valid_combined_quality(quality)

# Then
assert expected == actual
Loading