Skip to content

Commit

Permalink
Updates and fixes
Browse files Browse the repository at this point in the history
* Build themes
* Small changes
* Pass show name directly to add-show-options
* Update release groups code
* Disable save defaults button when needed
* Rename default to showDefaults
* Fix quality-chooser
* [Lost track...]
  • Loading branch information
sharkykh committed Aug 25, 2018
1 parent 24b35e7 commit d2770ae
Show file tree
Hide file tree
Showing 14 changed files with 204 additions and 203 deletions.
14 changes: 8 additions & 6 deletions medusa/server/api/v2/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,12 +296,14 @@ def data_main():
section_data['subtitles']['enabled'] = bool(app.USE_SUBTITLES)
section_data['recentShows'] = app.SHOWS_RECENT

section_data['default'] = {}
section_data['default']['status'] = common.statusStrings[app.STATUS_DEFAULT]
section_data['default']['statusAfter'] = common.statusStrings[app.STATUS_DEFAULT_AFTER]
section_data['default']['seasonFolders'] = app.SEASON_FOLDERS_DEFAULT
section_data['default']['anime'] = app.ANIME_DEFAULT
section_data['default']['scene'] = app.SCENE_DEFAULT
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
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
175 changes: 102 additions & 73 deletions themes-default/slim/src/components/add-show-options.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@
<div class="form-group">
<div class="row">
<label for="customQuality" class="col-sm-2 control-label">
<span>Preferred Quality</span>
<span>Quality</span>
</label>
<div class="col-sm-10 content">
<quality-chooser @update:quality:allowed="quality.allowed = $event" @update:quality:preferred="quality.preferred = $event"></quality-chooser>
<quality-chooser :overall-quality="defaultConfig.quality" @update:quality:allowed="quality.allowed = $event" @update:quality:preferred="quality.preferred = $event"></quality-chooser>
</div>
</div>
</div>

<!-- app.USE_SUBTITLES: -->
<div v-show="config.subtitles.enabled" id="use-subtitles">
<config-toggle-slider label="Subtitles" id="subtitles" :checked="config.subtitles.enabled" @update="selectedSubtitleEnabled = $event"
<div v-if="subtitlesEnabled" id="use-subtitles">
<config-toggle-slider label="Subtitles" id="subtitles" :checked="defaultConfig.subtitles" @update="selectedSubtitleEnabled = $event"
:explanations="['Download subtitles for this show?']">
</config-toggle-slider>
</div>
Expand Down Expand Up @@ -45,15 +44,15 @@
</div>
</div>

<config-toggle-slider label="Season Folders" id="season_folders" :checked="defaultConfig.seasonFolders"
<config-toggle-slider label="Season Folders" id="season_folders" :checked="defaultConfig.seasonFolders || namingForceFolders" :disabled="namingForceFolders"
:explanations="['Group episodes by season folder?']" @update="selectedSeasonFolderEnabled = $event">
</config-toggle-slider>

<config-toggle-slider label="Anime" id="anime" :checked="defaultConfig.anime"
:explanations="['Is this show an Anime?']" @update="selectedAnimeEnabled = $event">
</config-toggle-slider>

<div v-show="enableAnimeOptions && selectedAnimeEnabled" class="form-group">
<div v-if="enableAnimeOptions && selectedAnimeEnabled" class="form-group">
<div class="row">
<label for="anidbReleaseGroup" class="col-sm-2 control-label">
<span>Release Groups</span>
Expand All @@ -76,72 +75,74 @@
<span>Use current values as the defaults</span>
</label>
<div class="col-sm-10 content">
<input class="btn-medusa btn-inline" type="button" id="saveDefaultsButton" value="Save Defaults" disabled="disabled" />
<input class="btn-medusa btn-inline" type="button" id="saveDefaultsButton" value="Save Defaults" :disabled="saveDefaultsDisabled" />
</div>
</div>
</div>
</fieldset>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { combineQualities } from '../utils';
import ConfigToggleSlider from './config-toggle-slider.vue';
import AnidbReleaseGroupUi from './anidb-release-group-ui.vue';
module.exports = {
export default {
name: 'add-show-options',
components: {
AnidbReleaseGroupUi,
ConfigToggleSlider
},
props: ['selectedShow'],
props: {
showName: {
type: String,
default: '',
required: false
},
enableAnimeOptions: {
type: Boolean,
default: false
}
},
data() {
return {
enableAnimeOptions: true,
useSubtitles: false,
defaultEpisodeStatusOptions: [
{ text: 'Wanted', value: 'Wanted' },
{ text: 'Skipped', value: 'Skipped' },
{ text: 'Ignored', value: 'Ignored' }
],
release: {
blacklist: [],
whitelist: [],
allgroups: []
selectedStatus: null,
selectedStatusAfter: null,
quality: {
allowed: [],
preferred: []
},
show: '',
selectedSubtitleEnabled: false,
selectedStatus: '',
selectedStatusAfter: '',
selectedSeasonFolderEnabled: false,
selectedAnimeEnabled: false,
selectedSceneEnabled: false,
quality: {
allowed: [],
preferred: []
},
defaultOptions: null
release: {
blacklist: [],
whitelist: [],
allgroups: []
}
};
},
mounted() {
const { selectedShow, defaultConfig, update } = this;
this.show = selectedShow;
const { defaultConfig, update } = this;
this.selectedStatus = defaultConfig.status;
this.selectedStatusAfter = defaultConfig.statusAfter;
this.$nextTick(() => update());
},
methods: {
getReleaseGroups(showName) {
const params = {
'series_name': showName // eslint-disable-line quote-props
series_name: showName // eslint-disable-line camelcase
};
try {
return apiRoute.get('home/fetch_releasegroups', { params, timeout: 30000 }).then(res => res.data);
} catch (error) {
console.warn(error);
return '';
}
return apiRoute
.get('home/fetch_releasegroups', { params, timeout: 30000 })
.then(response => response.data)
.catch(error => {
console.warn(error);
return '';
});
},
update() {
const {
Expand Down Expand Up @@ -174,56 +175,87 @@ module.exports = {
}
},
computed: {
header() {
return this.$route.meta.header;
...mapState({
defaultConfig: state => state.config.showDefaults,
namingForceFolders: state => state.config.namingForceFolders,
subtitlesEnabled: state => state.config.subtitles.enabled,
episodeStatuses: state => state.statuses
}),
defaultEpisodeStatusOptions() {
const { strings, values } = this.episodeStatuses;
const { skipped, wanted, ignored } = values;
return [skipped, wanted, ignored].map(value => ({
value,
text: strings[value]
}));
},
/**
* Calculate the combined value of the selected qualities.
* @returns {number} - An unsigned integer.
*/
combinedQualities() {
const { quality } = this;
const { allowed, preferred } = quality;
return combineQualities(allowed, preferred);
},
/**
* Check if any changes were made to determine if the "Save Defaults" button should be enabled.
* @returns {boolean} - Should the save default buttons be disabled?
*/
saveDefaultsDisabled() {
const {
defaultConfig,
namingForceFolders,
selectedStatus,
selectedStatusAfter,
combinedQualities,
selectedSeasonFolderEnabled,
selectedSubtitleEnabled,
selectedAnimeEnabled,
selectedSceneEnabled
} = this;
return [
selectedStatus === defaultConfig.status,
selectedStatusAfter === defaultConfig.statusAfter,
combinedQualities === defaultConfig.quality,
selectedSeasonFolderEnabled === (defaultConfig.seasonFolders || namingForceFolders),
selectedSubtitleEnabled === defaultConfig.subtitles,
selectedAnimeEnabled === defaultConfig.anime,
selectedSceneEnabled === defaultConfig.scene
].every(Boolean);
}
},
asyncComputed: {
releaseGroups() {
if (!this.show) {
return;
const { selectedAnimeEnabled, showName } = this;
if (!selectedAnimeEnabled || !showName) {
return Promise.resolve([]);
}
return this.getReleaseGroups(this.show).then(result => {
return this.getReleaseGroups(showName).then(result => {
if (result.groups) {
return result.groups;
}
});
},
/**
* Map the vuex state config.default on defaulConfig so we can watch it.
* @returns {Object} config.default from state.
*/
defaultConfig() {
return this.config.default;
},
selectedShowName() {
if (this.selectedShow) {
return this.selectedShow.showName;
}
return '';
}
},
watch: {
selectedShowName() {
const { selectedShowName } = this;
this.show = selectedShowName;
if (this.releaseGroups) {
this.releaseGroups.then(groups => {
if (groups) {
this.release.allgroups = groups;
}
});
}
releaseGroups(groups) {
this.release.allgroups = groups;
},
/**
* Whenever something changes that can impact the hight of the component, we need to update the parent formWizard.
* And make it resize.
* Whenever something changes that can impact the height of the component,
* we need to update the parent formWizard, and make it resize.
*/
release: {
handler() {
this.$emit('refresh');
this.update();
},
deep: true
deep: true,
immediate: false
},
selectedAnimeEnabled() {
this.$emit('refresh');
Expand All @@ -241,9 +273,6 @@ module.exports = {
selectedSceneEnabled() {
this.update();
},
selectedShow(newValue) {
this.show = newValue;
},
defaultConfig(newValue) {
this.selectedStatus = newValue.status;
this.selectedStatusAfter = newValue.statusAfter;
Expand Down
6 changes: 5 additions & 1 deletion themes-default/slim/src/components/config-toggle-slider.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<span>{{ label }}</span>
</label>
<div class="col-sm-10 content">
<toggle-button :width="45" :height="22" v-bind="{id, name: id}" v-model="localChecked" sync></toggle-button>
<toggle-button :width="45" :height="22" v-bind="{id, name: id, disabled}" v-model="localChecked" sync></toggle-button>
<p v-for="(explanation, index) in explanations" :key="index">{{ explanation }}</p>
</div>
</div>
Expand All @@ -30,6 +30,10 @@ export default {
type: Boolean,
default: null
},
disabled: {
type: Boolean,
default: false
},
explanations: {
type: Array,
default: () => []
Expand Down
4 changes: 3 additions & 1 deletion themes-default/slim/src/store/modules/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,11 @@ const state = {
anonRedirect: null,
logDir: null,
recentShows: [],
default: {
showDefaults: {
status: null,
statusAfter: null,
quality: null,
subtitles: null,
seasonFolders: null,
anime: null,
scene: null
Expand Down
15 changes: 15 additions & 0 deletions themes-default/slim/src/utils.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
const isDevelopment = process.env.NODE_ENV === 'development';

/**
* Calculate the combined value of the selected qualities.
* @param {number[]} allowedQualities - Array of allowed qualities.
* @param {number[]} preferredQualities - Array of preferred qualities.
* @returns {number} - An unsigned integer.
*/
const combineQualities = (allowedQualities, preferredQualities) => {
const reducer = (accumulator, currentValue) => accumulator | currentValue;
const allowed = allowedQualities.reduce(reducer, 0);
const preferred = preferredQualities.reduce(reducer, 0);

return (allowed | (preferred << 16)) >>> 0; // Unsigned int
};

export {
combineQualities,
isDevelopment
};
Loading

0 comments on commit d2770ae

Please sign in to comment.