Skip to content

Commit

Permalink
Update /series API to only get AniDB data if requested (#5166)
Browse files Browse the repository at this point in the history
* Add `fetch` argument to `/series` API endpoint

Only fetch AniDB info when it is set to `True` (default is `False`)

* Update editShow to get AniDB data

* Update store/shows actions

* Lint JS

* Update changelog
  • Loading branch information
sharkykh authored and p0psicles committed Sep 9, 2018
1 parent abaac57 commit cf14dcd
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 22 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#### Fixes
- Fixed many release name parsing issues as a result of updating `guessit` ([#4244](https://github.com/pymedusa/Medusa/pull/4244))
- Fixed UI bugs in home page (when using "split home in tabs") and status page ([#5126](https://github.com/pymedusa/Medusa/pull/5126) + [#5127](https://github.com/pymedusa/Medusa/pull/5127))
- Fixed extraneous calls to AniDB when navigating to any show's page ([#5166](https://github.com/pymedusa/Medusa/pull/5166))

-----

Expand Down
7 changes: 7 additions & 0 deletions dredd/api-description.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ paths:
description: Filter series based on paused status
type: boolean
- $ref: '#/parameters/detailed'
- $ref: '#/parameters/fetch'
- $ref: '#/parameters/page'
- $ref: '#/parameters/limit'
- $ref: '#/parameters/sort'
Expand Down Expand Up @@ -1829,6 +1830,12 @@ parameters:
required: false
description: Whether response should contain detailed information
type: boolean
fetch:
name: fetch
in: query
required: false
description: Whether response should fetch external information
type: boolean
page:
name: page
in: query
Expand Down
9 changes: 7 additions & 2 deletions medusa/server/api/v2/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@ def filter_series(current):

if not series_slug:
detailed = self._parse_boolean(self.get_argument('detailed', default=False))
data = [s.to_json(detailed=detailed) for s in Series.find_series(predicate=filter_series)]
fetch = self._parse_boolean(self.get_argument('fetch', default=False))
data = [
s.to_json(detailed=detailed, fetch=fetch)
for s in Series.find_series(predicate=filter_series)
]
return self._paginate(data, sort='title')

identifier = SeriesIdentifier.from_slug(series_slug)
Expand All @@ -61,7 +65,8 @@ def filter_series(current):
return self._not_found('Series not found')

detailed = self._parse_boolean(self.get_argument('detailed', default=True))
data = series.to_json(detailed=detailed)
fetch = self._parse_boolean(self.get_argument('fetch', default=False))
data = series.to_json(detailed=detailed, fetch=fetch)
if path_param:
if path_param not in data:
return self._bad_request("Invalid path parameter '{0}'".format(path_param))
Expand Down
38 changes: 24 additions & 14 deletions medusa/tv/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -1965,8 +1965,13 @@ def __unicode__(self):
to_return += u'anime: {0}\n'.format(self.is_anime)
return to_return

def to_json(self, detailed=True):
"""Return JSON representation."""
def to_json(self, detailed=True, fetch=False):
"""
Return JSON representation.
:param detailed: Append seasons & episodes data as well
:param fetch: Fetch and append external data (for example AniDB release groups)
"""
bw_list = self.release_groups or BlackAndWhiteList(self)

data = {}
Expand Down Expand Up @@ -2018,22 +2023,27 @@ def to_json(self, detailed=True):
data['config']['defaultEpisodeStatus'] = self.default_ep_status_name
data['config']['aliases'] = list(self.aliases)
data['config']['release'] = {}
# These are for now considered anime-only options, as they query anidb for available release groups.
data['config']['release']['ignoredWords'] = self.release_ignore_words
data['config']['release']['requiredWords'] = self.release_required_words

# These are for now considered anime-only options
if self.is_anime:
data['config']['release']['blacklist'] = bw_list.blacklist
data['config']['release']['whitelist'] = bw_list.whitelist
try:
data['config']['release']['allgroups'] = get_release_groups_for_anime(self.name)
except AnidbAdbaConnectionException as error:
data['config']['release']['allgroups'] = []
log.warning(
'An anidb adba exception occurred when attempting to get the release groups for the show {show}'
'\nError: {error}',
{'show': self.name, 'error': error}
)

data['config']['release']['ignoredWords'] = self.release_ignore_words
data['config']['release']['requiredWords'] = self.release_required_words
# Fetch data from external sources
if fetch:
# These are for now considered anime-only options, as they query anidb for available release groups.
if self.is_anime:
try:
data['config']['release']['allgroups'] = get_release_groups_for_anime(self.name)
except AnidbAdbaConnectionException as error:
data['config']['release']['allgroups'] = []
log.warning(
'An anidb adba exception occurred when attempting to get the release groups for the show {show}'
'\nError: {error}',
{'show': self.name, 'error': error}
)

if detailed:
episodes = self.get_all_episodes()
Expand Down
28 changes: 27 additions & 1 deletion themes-default/slim/src/store/modules/shows.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,43 @@ const getters = {
}
};

/**
* An object representing request parameters for getting a show from the API.
*
* @typedef {Object} ShowParameteres
* @property {string} indexer - The indexer name (e.g. `tvdb`)
* @property {string} id - The show ID on the indexer (e.g. `12345`)
* @property {boolean} detailed - Whether to fetch detailed information (seasons & episodes)
* @property {boolean} fetch - Whether to fetch external information (for example AniDB release groups)
*/
const actions = {
getShow(context, { indexer, id, detailed }) {
/**
* Get show from API and commit it to the store.
*
* @param {*} context - The store context.
* @param {ShowParameteres} parameters - Request parameters.
* @returns {Promise} The API response.
*/
getShow(context, { indexer, id, detailed, fetch }) {
const { commit } = context;
const params = {};
if (detailed !== undefined) {
params.detailed = Boolean(detailed);
}
if (fetch !== undefined) {
params.fetch = Boolean(fetch);
}
return api.get('/series/' + indexer + id, { params }).then(res => {
commit(ADD_SHOW, res.data);
});
},
/**
* Get shows from API and commit them to the store.
*
* @param {*} context - The store context.
* @param {ShowParameteres[]} shows - Shows to get. If not provided, gets the first 1000 shows.
* @returns {(undefined|Promise)} undefined if `shows` was provided or the API response if not.
*/
getShows(context, shows) {
const { commit, dispatch } = context;

Expand Down
3 changes: 2 additions & 1 deletion themes-default/slim/views/editShow.mako
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ window.app = new Vue({
created() {
const { $store, seriesSlug } = this;
const params = { detailed: false }; // Don't get episodes
// Don't get episodes, but do get external information for AniDB release groups
const params = { detailed: false, fetch: true };
api.get('series/' + seriesSlug, { params }).then(response => {
this.series = Object.assign({}, this.series, response.data);
this.seriesLoaded = true;
Expand Down
2 changes: 1 addition & 1 deletion themes/dark/assets/js/vendors.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion themes/dark/templates/editShow.mako

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit cf14dcd

Please sign in to comment.