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

Convert editShow to Vue store and SFC #4486

Merged
merged 63 commits into from
Jun 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
0d1432c
convert editShow to vue store
OmgImAlexis Jun 28, 2018
d8620ff
Build themes
sharkykh Aug 28, 2018
43b27d8
Merge remote-tracking branch 'remotes/origin/develop' into feature/vu…
p0psicles Jun 11, 2019
e14a581
Move editShow.mako -> components/edit-show.vue
p0psicles Jun 11, 2019
47e1c58
Fixed indents (caused by rebase)
p0psicles Jun 11, 2019
6c27c4a
Added new route massEditShow as a replacement for editShow.
p0psicles Jun 22, 2019
3bc4fd6
Added store getter getShowByIdFromShows.
p0psicles Jun 22, 2019
7f07e9d
Used the store getter getShowByIdFromShows.
p0psicles Jun 22, 2019
6362f73
Update handler.py with comment.
p0psicles Jun 22, 2019
f919ff9
shows.js: remove getShowByIdFromShows function. And move the logic to…
p0psicles Jun 22, 2019
6df0099
Merge remote-tracking branch 'remotes/origin/develop' into feature/vu…
p0psicles Jun 22, 2019
1a42b87
Revert getShowById.
p0psicles Jun 22, 2019
5f359aa
Checked for stray css.
p0psicles Jun 22, 2019
e810555
fix bundles that should not have been modified
sharkykh Jun 22, 2019
0651bf9
fix plugin registration
sharkykh Jun 22, 2019
7e54666
remove vue-snotify
sharkykh Jun 22, 2019
3c3c906
change name: editShow -> edit-show
sharkykh Jun 22, 2019
80f4555
use getShowById
sharkykh Jun 22, 2019
0e4c8ae
fix backstretch
sharkykh Jun 22, 2019
02a2f19
replace showUrl
sharkykh Jun 22, 2019
f9da589
fix save button
sharkykh Jun 22, 2019
eedf8dc
move `computed` higher
sharkykh Jun 22, 2019
6fad890
map setShow action
sharkykh Jun 22, 2019
a1bc887
fix doubled black/white list component
sharkykh Jun 22, 2019
f485ef5
import & declare all components
sharkykh Jun 22, 2019
03c0511
template fixes
sharkykh Jun 22, 2019
184c5a7
fix template indents
sharkykh Jun 22, 2019
278b942
handle jQuery tabs
sharkykh Jun 23, 2019
699db83
get status options from store
sharkykh Jun 23, 2019
a24ef45
remove unused configLoaded
sharkykh Jun 23, 2019
5a9ada5
update bundle
sharkykh Jun 23, 2019
c165e95
Merge pull request #6868 from sharkykh/feature/vueify-editShow
p0psicles Jun 23, 2019
3b356b2
Fetch the release groups from within the anidb-release-group-ui.vue c…
p0psicles Jun 23, 2019
abe200e
Remove the release group attributes from anidb-release-group-ui.vue.
p0psicles Jun 23, 2019
08e00f7
remove unused action mapping.
p0psicles Jun 23, 2019
c62e475
Clean up `massEditShow`
sharkykh Jun 24, 2019
a9018c0
make sure components is always an array
sharkykh Jun 26, 2019
c036aa3
Merge branch 'develop'
sharkykh Jun 27, 2019
ebb1137
Update anidb-release-group-ui.vue
sharkykh Jun 26, 2019
52333f2
Remove fetching of AniDB data in `Series`
sharkykh Jun 27, 2019
ada195e
Update template and test for anidb component
sharkykh Jun 27, 2019
e01c96f
Fix python lint
sharkykh Jun 27, 2019
7511b1c
Merge branch 'develop' into feature/vueify-editShow
sharkykh Jun 27, 2019
d1d3ad6
Missing StateSwitch import
sharkykh Jun 27, 2019
fd43752
Merge branch 'develop' into feature/vueify-editShow
sharkykh Jun 27, 2019
487d596
Fix typo
sharkykh Jun 27, 2019
1a138f1
Convert saveShow to async
sharkykh Jun 27, 2019
82dbfb6
Update setShow
sharkykh Jun 27, 2019
c5e00a5
Update changelog
sharkykh Jun 27, 2019
94d90ad
Get only the current show
sharkykh Jun 27, 2019
a3065f7
Fix QualityChooser and EditShow race condition
sharkykh Jun 27, 2019
69c4abd
Add missing theme to StateSwitch (AniDB component)
sharkykh Jun 27, 2019
9ac404a
Remove async
sharkykh Jun 28, 2019
006db80
Handle load errors
sharkykh Jun 28, 2019
617b000
Fixed the "fetching release groups" spinner / message.
p0psicles Jun 28, 2019
62bd58f
import order & simplify mapState & [bundle]
sharkykh Jun 28, 2019
c534660
Use currentShow
sharkykh Jun 28, 2019
c24a5b4
Fix small lint issues
sharkykh Jun 29, 2019
1dd1c71
Merge branch 'develop' into feature/vueify-editShow
sharkykh Jun 29, 2019
0552300
Object destructuring and tick strings.
p0psicles Jun 29, 2019
1769dc3
rebundle
p0psicles Jun 29, 2019
9cbad98
Fix tiny mistake
sharkykh Jun 29, 2019
1f3849b
Fix backlogOverview Edit Show link
sharkykh Jun 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#### Improvements
- Converted the footer to a Vue component ([#4520](https://github.com/pymedusa/Medusa/pull/4520))
- Converted Edit Show to a Vue SFC ([#4486](https://github.com/pymedusa/Medusa/pull/4486)

#### Fixes
- Fixed hdtorrent provider parse the publishing date with the day first ([#6847](https://github.com/pymedusa/Medusa/pull/6847))
Expand Down
193 changes: 32 additions & 161 deletions medusa/server/web/home/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,11 @@
db,
helpers,
logger,
name_cache,
notifiers,
providers,
subtitles,
ui,
)
from medusa.black_and_white_list import (
BlackAndWhiteList,
)
from medusa.clients import torrent
from medusa.clients.nzb import (
nzbget,
Expand All @@ -48,7 +44,6 @@
from medusa.helper.common import (
enabled_providers,
pretty_file_size,
try_int,
)
from medusa.helper.exceptions import (
AnidbAdbaConnectionException,
Expand All @@ -57,19 +52,14 @@
ShowDirectoryNotFoundException,
ex,
)
from medusa.helpers.anidb import get_release_groups_for_anime, short_group_names
from medusa.helpers.anidb import get_release_groups_for_anime
from medusa.indexers.indexer_api import indexerApi
from medusa.indexers.indexer_exceptions import (
IndexerException,
IndexerShowNotFoundInLanguage,
)
from medusa.indexers.utils import indexer_id_to_name, indexer_name_to_id
from medusa.providers.generic_provider import GenericProvider
from medusa.sbdatetime import sbdatetime
from medusa.scene_exceptions import (
get_all_scene_exceptions,
get_scene_exceptions,
update_scene_exceptions,
)
from medusa.scene_numbering import (
get_scene_absolute_numbering,
Expand Down Expand Up @@ -1131,55 +1121,39 @@ def check_show_for_language(series_obj, language):
if language in indexer.config['valid_languages']:
return True

def editShow(self, indexername=None, seriesid=None, location=None, allowed_qualities=None, preferred_qualities=None,
exceptions_list=None, season_folders=None, paused=None, directCall=False,
air_by_date=None, sports=None, dvd_order=None, indexer_lang=None,
subtitles=None, rls_ignore_words=None, rls_require_words=None,
anime=None, blacklist=None, whitelist=None, scene=None,
defaultEpStatus=None, quality_preset=None):
def massEditShow(
self, indexername=None, seriesid=None, location=None, allowed_qualities=None, preferred_qualities=None,
season_folders=None, paused=None, air_by_date=None, sports=None, dvd_order=None, subtitles=None,
anime=None, scene=None, defaultEpStatus=None
):
"""
A variation of the original `editShow`, where `directCall` is always true.

This route as been added specifically for the usage in the massEditSubmit route.
It's called when trying to mass edit show configurations.
This route should be removed after vueifying manage_massEdit.mako.
"""
allowed_qualities = allowed_qualities or []
preferred_qualities = preferred_qualities or []
exceptions = exceptions_list or set()

errors = 0

if not indexername or not seriesid:
error_string = 'No show was selected'
if directCall:
errors += 1
return errors
else:
return self._genericMessage('Error', error_string)
logger.log('No show was selected (indexer: {indexer}, show: {show})'.format(
indexer=indexername, show=seriesid), logger.WARNING)
errors += 1
return errors

series_obj = Show.find_by_id(app.showList, indexer_name_to_id(indexername), seriesid)

if not series_obj:
error_string = 'Unable to find the specified show ID: {show}'.format(show=series_obj)
if directCall:
errors += 1
return errors
else:
return self._genericMessage('Error', error_string)
logger.log('Unable to find the specified show: {indexer}{show}'.format(
indexer=indexername, show=seriesid), logger.WARNING)
errors += 1
return errors

series_obj.exceptions = get_scene_exceptions(series_obj)

# If user set quality_preset remove all preferred_qualities
if try_int(quality_preset, None):
preferred_qualities = []

if not location and not allowed_qualities and not preferred_qualities and season_folders is None:
t = PageTemplate(rh=self, filename='editShow.mako')
groups = []

if series_obj.is_anime:
return t.render(show=series_obj, groups=groups, whitelist=whitelist,
blacklist=blacklist, title='Edit Show', header='Edit Show', controller='home',
action='editShow')
else:
return t.render(show=series_obj, title='Edit Show', header='Edit Show',
controller='home', action='editShow')

season_folders = config.checkbox_to_value(season_folders)
dvd_order = config.checkbox_to_value(dvd_order)
paused = config.checkbox_to_value(paused)
Expand All @@ -1189,87 +1163,14 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
anime = config.checkbox_to_value(anime)
subtitles = config.checkbox_to_value(subtitles)

do_update = False
# In mass edit, we can't change language so we need to check if indexer_lang is set
if indexer_lang and series_obj.lang != indexer_lang:
msg = (
'{{status}} {language}'
' for {indexer_name} show {show_id}'.format(
language=indexer_lang,
show_id=series_obj.indexerid,
indexer_name=indexerApi(series_obj.indexer).name,
)
)
status = 'Unexpected result when changing language to'
log_level = logger.WARNING
language = series_obj.lang
try:
do_update = self.check_show_for_language(
series_obj,
indexer_lang,
)
except IndexerShowNotFoundInLanguage:
errors += 1
status = 'Could not change language to'
except IndexerException as error:
errors += 1
status = u'Failed getting show in'
msg += u' Please try again later. Error: {error!r}'.format(
error=error,
)
else:
language = indexer_lang
status = 'Changing language to'
log_level = logger.INFO
finally:
indexer_lang = language
msg = msg.format(status=status)
logger.log(msg, log_level)

if scene == series_obj.scene and anime == series_obj.anime:
do_update_scene_numbering = False
else:
do_update_scene_numbering = True
do_update_scene_numbering = not (scene == series_obj.scene and anime == series_obj.anime)

if not isinstance(allowed_qualities, list):
allowed_qualities = [allowed_qualities]

if not isinstance(preferred_qualities, list):
preferred_qualities = [preferred_qualities]

if isinstance(exceptions, list):
exceptions = set(exceptions)

if not isinstance(exceptions, set):
exceptions = {exceptions}

# If directCall from mass_edit_update no scene exceptions handling or
# blackandwhite list handling
if directCall:
do_update_exceptions = False
else:
if exceptions == series_obj.exceptions:
do_update_exceptions = False
else:
do_update_exceptions = True

with series_obj.lock:
if anime:
if not series_obj.release_groups:
series_obj.release_groups = BlackAndWhiteList(series_obj)

if whitelist:
shortwhitelist = short_group_names(whitelist)
series_obj.release_groups.set_white_keywords(shortwhitelist)
else:
series_obj.release_groups.set_white_keywords([])

if blacklist:
shortblacklist = short_group_names(blacklist)
series_obj.release_groups.set_black_keywords(shortblacklist)
else:
series_obj.release_groups.set_black_keywords([])

with series_obj.lock:
new_quality = Quality.combine_qualities([int(q) for q in allowed_qualities],
[int(q) for q in preferred_qualities])
Expand Down Expand Up @@ -1303,11 +1204,6 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
series_obj.default_ep_status = int(defaultEpStatus)
series_obj.dvd_order = dvd_order

if not directCall:
series_obj.lang = indexer_lang
series_obj.rls_ignore_words = rls_ignore_words.strip()
series_obj.rls_require_words = rls_require_words.strip()

# if we change location clear the db of episodes, change it, write to db, and rescan
old_location = os.path.normpath(series_obj._location)
new_location = os.path.normpath(location)
Expand All @@ -1316,16 +1212,16 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
logger.log('Changing show location to: {new}'.format(new=new_location), logger.INFO)
if not os.path.isdir(new_location):
if app.CREATE_MISSING_SHOW_DIRS:
logger.log(u"Show directory doesn't exist, creating it", logger.INFO)
logger.log("Show directory doesn't exist, creating it", logger.INFO)
try:
os.mkdir(new_location)
except OSError as error:
errors += 1
changed_location = False
logger.log(u"Unable to create the show directory '{location}'. Error: {msg}".format
logger.log("Unable to create the show directory '{location}'. Error: {msg}".format
(location=new_location, msg=error), logger.WARNING)
else:
logger.log(u'New show directory created', logger.INFO)
logger.log('New show directory created', logger.INFO)
helpers.chmod_as_parent(new_location)
else:
changed_location = False
Expand All @@ -1337,7 +1233,7 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
if changed_location:
series_obj.location = new_location

if (do_update or changed_location) and os.path.isdir(new_location):
if changed_location and os.path.isdir(new_location):
try:
app.show_queue_scheduler.action.refreshShow(series_obj)
except CantRefreshShowException as error:
Expand All @@ -1348,26 +1244,6 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
# Save all settings changed while in series_obj.lock
series_obj.save_to_db()

# force the update
if do_update:
try:
app.show_queue_scheduler.action.updateShow(series_obj)
time.sleep(cpu_presets[app.CPU_PRESET])
except CantUpdateShowException as error:
errors += 1
logger.log("Unable to update show '{show}': {error!r}".format
(show=series_obj.name, error=error), logger.WARNING)

if do_update_exceptions:
try:
update_scene_exceptions(series_obj, exceptions)
time.sleep(cpu_presets[app.CPU_PRESET])
name_cache.build_name_cache(series_obj)
except CantUpdateShowException as error:
errors += 1
logger.log("Unable to force an update on scene exceptions for show '{show}': {error!r}".format
(show=series_obj.name, error=error), logger.WARNING)

if do_update_scene_numbering or do_erase_parsed_cache:
try:
xem_refresh(series_obj)
Expand All @@ -1392,20 +1268,15 @@ def editShow(self, indexername=None, seriesid=None, location=None, allowed_quali
logger.log("Unable to refresh show '{show}'. Please manually trigger a full show refresh. "
'Error: {error!r}'.format(show=series_obj.name, error=error), logger.WARNING)

if directCall:
return errors
return errors

if errors:
ui.notifications.error(
'Errors', '{num} error{s} while saving changes. Please check logs'.format(
num=errors, s='s' if errors > 1 else ''
)
)
def editShow(self, **query_args):
"""
Render the editShow page.

logger.log(u'Finished editing show: {show}'.format(show=series_obj.name), logger.DEBUG)
return self.redirect(
'/home/displayShow?indexername={series_obj.indexer_name}&seriesid={series_obj.series_id}'.format(
series_obj=series_obj))
[Converted to VueRouter]
"""
return PageTemplate(rh=self, filename='index.mako').render()

@staticmethod
def erase_cache(series_obj):
Expand Down
18 changes: 8 additions & 10 deletions medusa/server/web/manage/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -683,19 +683,17 @@ def massEditSubmit(self, paused=None, default_ep_status=None, dvd_order=None,

if quality_preset == 'keep':
allowed_qualities, preferred_qualities = series_obj.current_qualities
# If user set quality_preset remove all preferred_qualities
elif try_int(quality_preset, None):
preferred_qualities = []

exceptions_list = []

errors += self.editShow(identifier.indexer.slug, identifier.id, new_show_dir, allowed_qualities,
preferred_qualities, exceptions_list,
defaultEpStatus=new_default_ep_status,
season_folders=new_season_folders,
paused=new_paused, sports=new_sports, dvd_order=new_dvd_order,
subtitles=new_subtitles, anime=new_anime,
scene=new_scene, air_by_date=new_air_by_date,
directCall=True)
errors += self.massEditShow(
indexername=identifier.indexer.slug, seriesid=identifier.id, location=new_show_dir,
allowed_qualities=allowed_qualities, preferred_qualities=preferred_qualities,
season_folders=new_season_folders, paused=new_paused, air_by_date=new_air_by_date, sports=new_sports,
dvd_order=new_dvd_order, subtitles=new_subtitles, anime=new_anime, scene=new_scene,
defaultEpStatus=new_default_ep_status,
)

if errors:
ui.notifications.error('Errors', '{num} error{s} while saving changes. Please check logs'.format
Expand Down
13 changes: 9 additions & 4 deletions themes-default/slim/src/components/anidb-release-group-ui.vue
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<template>
<div class="anidb-release-group-ui-wrapper top-10 max-width">
<div v-if="fetchingGroups" id="fetch-release-groups">
<state-switch state="loading" />
<template v-if="fetchingGroups">
<state-switch state="loading" :theme="config.themeName" />
<span>Fetching release groups...</span>
</div>
</template>
<div v-else class="row">
<div class="col-sm-4 left-whitelist">
<span>Whitelist</span><img v-if="showDeleteFromWhitelist" class="deleteFromWhitelist" src="images/no16.png" @click="deleteFromList('whitelist')">
Expand Down Expand Up @@ -35,7 +35,7 @@
</div>
<div id="add-new-release-group" class="row">
<div class="col-md-4">
<input class="form-control input-sm" type="text" v-model="newGroup" placeholder="add custom group">
<input v-model="newGroup" class="form-control input-sm" type="text" placeholder="add custom group">
</div>
<div class="col-md-8">
<p>Use the input to add custom whitelist / blacklist release groups. Click on the <img src="images/curved-arrow-left.png"> to add it to the correct list.</p>
Expand All @@ -45,6 +45,8 @@
</template>

<script>
import { mapState } from 'vuex';

import { apiRoute } from '../api';
import { StateSwitch } from './helpers';

Expand Down Expand Up @@ -172,6 +174,9 @@ export default {
}
},
computed: {
...mapState([
'config'
]),
itemsWhitelist() {
return this.allReleaseGroups.filter(x => x.memberOf === 'whitelist');
},
Expand Down