From 5fee42f896d6f72c746c9a5f28a16a2c15fb8baf Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Tue, 17 Apr 2018 20:03:31 +0200 Subject: [PATCH] Can now filter by import status on library tracks --- api/funkwhale_api/federation/filters.py | 8 +++++++ .../federation/LibraryTrackTable.vue | 24 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/federation/filters.py b/api/funkwhale_api/federation/filters.py index c911f1a8..7a388ff1 100644 --- a/api/funkwhale_api/federation/filters.py +++ b/api/funkwhale_api/federation/filters.py @@ -24,6 +24,7 @@ class LibraryFilter(django_filters.FilterSet): class LibraryTrackFilter(django_filters.FilterSet): library = django_filters.CharFilter('library__uuid') + imported = django_filters.CharFilter(method='filter_imported') q = fields.SearchFilter(search_fields=[ 'artist_name', 'title', @@ -31,6 +32,13 @@ class LibraryTrackFilter(django_filters.FilterSet): 'library__actor__domain', ]) + def filter_imported(self, queryset, field_name, value): + if value.lower() in ['true', '1', 'yes']: + queryset = queryset.filter(local_track_file__isnull=False) + elif value.lower() in ['false', '0', 'no']: + queryset = queryset.filter(local_track_file__isnull=True) + return queryset + class Meta: model = models.LibraryTrack fields = { diff --git a/front/src/components/federation/LibraryTrackTable.vue b/front/src/components/federation/LibraryTrackTable.vue index b4e7dd06..925ef388 100644 --- a/front/src/components/federation/LibraryTrackTable.vue +++ b/front/src/components/federation/LibraryTrackTable.vue @@ -1,7 +1,20 @@ <template> <div> <div class="ui inline form"> - <input type="text" v-model="search" placeholder="Search by title, artist, domain..." /> + <div class="fields"> + <div class="ui field"> + <label>{{ $t('Search') }}</label> + <input type="text" v-model="search" placeholder="Search by title, artist, domain..." /> + </div> + <div class="ui field"> + <label>{{ $t('Import status') }}</label> + <select class="ui dropdown" v-model="importedFilter"> + <option :value="null">{{ $t('Any') }}</option> + <option :value="true">{{ $t('Imported') }}</option> + <option :value="false">{{ $t('Not imported') }}</option> + </select> + </div> + </div> </div> <table v-if="result" class="ui compact very basic single line unstackable table"> <thead> @@ -112,7 +125,8 @@ export default { search: '', checked: {}, isImporting: false, - importBatch: null + importBatch: null, + importedFilter: null } }, created () { @@ -125,6 +139,9 @@ export default { 'page_size': this.paginateBy, 'q': this.search }, this.filters) + if (this.importedFilter !== null) { + params.imported = this.importedFilter + } let self = this self.isLoading = true self.checked = [] @@ -181,6 +198,9 @@ export default { }, page () { this.fetchData() + }, + importedFilter () { + this.fetchData() } } } -- GitLab