Resolve "Allow hiding compilation artists in the Artists tab"

This commit is contained in:
Ciarán Ainsworth 2020-07-27 10:57:11 +02:00 committed by Agate
parent 806912c05f
commit 7c031eb186
7 changed files with 37 additions and 0 deletions

View File

@ -101,6 +101,7 @@ class ArtistFilter(
q = fields.SearchFilter(search_fields=["name"], fts_search_fields=["body_text"]) q = fields.SearchFilter(search_fields=["name"], fts_search_fields=["body_text"])
playable = filters.BooleanFilter(field_name="_", method="filter_playable") playable = filters.BooleanFilter(field_name="_", method="filter_playable")
has_albums = filters.BooleanFilter(field_name="_", method="filter_has_albums")
tag = TAG_FILTER tag = TAG_FILTER
scope = common_filters.ActorScopeFilter( scope = common_filters.ActorScopeFilter(
actor_field="tracks__uploads__library__actor", distinct=True actor_field="tracks__uploads__library__actor", distinct=True
@ -130,6 +131,12 @@ class ArtistFilter(
actor = utils.get_actor_from_request(self.request) actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value).distinct() return queryset.playable_by(actor, value).distinct()
def filter_has_albums(self, queryset, name, value):
if value is True:
return queryset.filter(albums__isnull=False)
else:
return queryset.filter(albums__isnull=True)
class TrackFilter( class TrackFilter(
RelatedFilterSet, RelatedFilterSet,

View File

@ -0,0 +1 @@
Allow users to hide compilation artists on the artist search page (#1053)

View File

@ -67,6 +67,14 @@ Playable:
schema: schema:
required: false required: false
type: "boolean" type: "boolean"
HasAlbums:
name: "has_albums"
in: "query"
default: null
description: "Filter/exclude artists with no associated albums"
schema:
required: false
type: "boolean"
Refresh: Refresh:
name: "refresh" name: "refresh"
in: "query" in: "query"

View File

@ -361,6 +361,7 @@ paths:
- name - name
- random - random
- $ref: "./api/parameters.yml#/Playable" - $ref: "./api/parameters.yml#/Playable"
- $ref: "./api/parameters.yml#/HasAlbums"
- $ref: "./api/parameters.yml#/Library" - $ref: "./api/parameters.yml#/Library"
- $ref: "./api/parameters.yml#/PageNumber" - $ref: "./api/parameters.yml#/PageNumber"
- $ref: "./api/parameters.yml#/PageSize" - $ref: "./api/parameters.yml#/PageSize"

View File

@ -44,6 +44,13 @@
<option :value="parseInt(50)">50</option> <option :value="parseInt(50)">50</option>
</select> </select>
</div> </div>
<div class="field">
<label><translate translate-context="Content/Search/Checkbox/Noun">Exclude Compilation Artists</translate></label>
<div id="excludeCompilation" class="ui fitted toggle checkbox">
<input id="exclude-compilation" v-model="excludeCompilation" true-value="true" false-value="null" type="checkbox">
<label></label>
</div>
</div>
</div> </div>
</form> </form>
<div class="ui hidden divider"></div> <div class="ui hidden divider"></div>
@ -116,6 +123,7 @@ export default {
return { return {
isLoading: true, isLoading: true,
result: null, result: null,
excludeCompilation: true,
page: parseInt(this.defaultPage), page: parseInt(this.defaultPage),
query: this.defaultQuery, query: this.defaultQuery,
tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }), tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }),
@ -161,6 +169,7 @@ export default {
scope: this.scope, scope: this.scope,
page: this.page, page: this.page,
page_size: this.paginateBy, page_size: this.paginateBy,
has_albums: this.excludeCompilation,
q: this.query, q: this.query,
ordering: this.getOrderingAsString(), ordering: this.getOrderingAsString(),
playable: "true", playable: "true",
@ -195,6 +204,9 @@ export default {
}, },
"$store.state.moderation.lastUpdate": function () { "$store.state.moderation.lastUpdate": function () {
this.fetchData() this.fetchData()
},
excludeCompilation() {
this.fetchData()
} }
} }
} }

View File

@ -47,6 +47,7 @@ $bottom-player-height: 4rem;
@import "./pages/_admin_account_detail.scss"; @import "./pages/_admin_account_detail.scss";
@import "./pages/_admin_domain_detail.scss"; @import "./pages/_admin_domain_detail.scss";
@import "./pages/_admin_library.scss"; @import "./pages/_admin_library.scss";
@import "./pages/_artists.scss";
@import "./pages/_home.scss"; @import "./pages/_home.scss";
@import "./pages/_library.scss"; @import "./pages/_library.scss";
@import "./pages/_notifications.scss"; @import "./pages/_notifications.scss";

View File

@ -0,0 +1,7 @@
#excludeCompilation {
margin-top: 0.7rem;
}
.ui.multiple.search.dropdown > input.search {
width: auto;
}