diff --git a/api/funkwhale_api/federation/filters.py b/api/funkwhale_api/federation/filters.py index c911f1a891966adf0ba942670ad1a74fbaca4da7..7a388ff1298fbab740342c5de1885157ea433a94 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 b4e7dd06f86e4e7c61f3f1d44c9aaa03ec378caf..925ef3889668d5fbae39cf434fa8db390d0f4d06 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() } } }