2018-10-01 19:56:52 +00:00
|
|
|
from funkwhale_api.common import admin
|
2017-06-23 21:00:42 +00:00
|
|
|
|
|
|
|
from . import models
|
|
|
|
|
2017-12-14 22:06:21 +00:00
|
|
|
|
2024-08-29 14:11:35 +00:00
|
|
|
@admin.register(models.ArtistCredit)
|
|
|
|
class ArtistCreditAdmin(admin.ModelAdmin):
|
|
|
|
list_display = [
|
|
|
|
"artist",
|
|
|
|
"credit",
|
|
|
|
"joinphrase",
|
|
|
|
"creation_date",
|
|
|
|
]
|
|
|
|
search_fields = ["artist__name", "credit"]
|
|
|
|
|
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
@admin.register(models.Artist)
|
|
|
|
class ArtistAdmin(admin.ModelAdmin):
|
2020-03-19 13:41:15 +00:00
|
|
|
list_display = ["name", "mbid", "creation_date", "modification_date"]
|
2018-06-09 13:36:16 +00:00
|
|
|
search_fields = ["name", "mbid"]
|
2017-06-23 21:00:42 +00:00
|
|
|
|
2017-12-14 22:06:21 +00:00
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
@admin.register(models.Album)
|
|
|
|
class AlbumAdmin(admin.ModelAdmin):
|
2024-08-29 14:11:35 +00:00
|
|
|
list_display = ["title", "mbid", "release_date", "creation_date"]
|
|
|
|
search_fields = ["title", "mbid"]
|
2017-06-23 21:00:42 +00:00
|
|
|
list_select_related = True
|
|
|
|
|
2025-04-24 23:48:51 +00:00
|
|
|
def formfield_for_manytomany(self, db_field, request, **kwargs):
|
|
|
|
if db_field.name == "artist_credit":
|
|
|
|
object_id = request.resolver_match.kwargs.get("object_id")
|
|
|
|
kwargs["queryset"] = models.ArtistCredit.objects.filter(
|
|
|
|
albums__id=object_id
|
|
|
|
)
|
|
|
|
|
|
|
|
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
|
|
|
|
2017-12-14 22:06:21 +00:00
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
@admin.register(models.Track)
|
|
|
|
class TrackAdmin(admin.ModelAdmin):
|
2024-08-29 14:11:35 +00:00
|
|
|
list_display = ["title", "album", "mbid", "artist"]
|
|
|
|
search_fields = ["title", "album__title", "mbid"]
|
|
|
|
|
|
|
|
def artist(self, obj):
|
|
|
|
return obj.get_artist_credit_string
|
2017-06-23 21:00:42 +00:00
|
|
|
|
2025-04-24 23:48:51 +00:00
|
|
|
def formfield_for_manytomany(self, db_field, request, **kwargs):
|
|
|
|
if db_field.name == "artist_credit":
|
|
|
|
object_id = request.resolver_match.kwargs.get("object_id")
|
|
|
|
kwargs["queryset"] = models.ArtistCredit.objects.filter(
|
|
|
|
tracks__id=object_id
|
|
|
|
)
|
|
|
|
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
|
|
|
|
2017-12-14 22:06:21 +00:00
|
|
|
|
2020-03-13 11:16:51 +00:00
|
|
|
@admin.register(models.TrackActor)
|
|
|
|
class TrackActorAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["actor", "track", "upload", "internal"]
|
|
|
|
search_fields = ["actor__preferred_username", "track__name"]
|
|
|
|
list_select_related = ["actor", "track"]
|
|
|
|
|
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
@admin.register(models.ImportBatch)
|
|
|
|
class ImportBatchAdmin(admin.ModelAdmin):
|
2018-06-09 13:36:16 +00:00
|
|
|
list_display = ["submitted_by", "creation_date", "import_request", "status"]
|
|
|
|
list_select_related = ["submitted_by", "import_request"]
|
|
|
|
list_filter = ["status"]
|
|
|
|
search_fields = ["import_request__name", "source", "batch__pk", "mbid"]
|
2017-12-14 22:06:21 +00:00
|
|
|
|
2018-05-10 15:52:13 +00:00
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
@admin.register(models.ImportJob)
|
|
|
|
class ImportJobAdmin(admin.ModelAdmin):
|
2018-09-22 12:29:30 +00:00
|
|
|
list_display = ["source", "batch", "upload", "status", "mbid"]
|
|
|
|
list_select_related = ["upload", "batch"]
|
2018-06-09 13:36:16 +00:00
|
|
|
search_fields = ["source", "batch__pk", "mbid"]
|
|
|
|
list_filter = ["status"]
|
2017-06-23 21:00:42 +00:00
|
|
|
|
|
|
|
|
2018-09-22 12:29:30 +00:00
|
|
|
@admin.register(models.Upload)
|
|
|
|
class UploadAdmin(admin.ModelAdmin):
|
2018-02-27 22:01:55 +00:00
|
|
|
list_display = [
|
2018-06-09 13:36:16 +00:00
|
|
|
"track",
|
|
|
|
"audio_file",
|
|
|
|
"source",
|
|
|
|
"duration",
|
|
|
|
"mimetype",
|
|
|
|
"size",
|
|
|
|
"bitrate",
|
2018-09-06 18:35:02 +00:00
|
|
|
"import_status",
|
2018-02-27 22:01:55 +00:00
|
|
|
]
|
2018-06-09 13:36:16 +00:00
|
|
|
list_select_related = ["track"]
|
2018-05-10 15:52:13 +00:00
|
|
|
search_fields = [
|
2018-06-09 13:36:16 +00:00
|
|
|
"source",
|
|
|
|
"acoustid_track_id",
|
|
|
|
"track__title",
|
|
|
|
"track__album__title",
|
|
|
|
"track__artist__name",
|
|
|
|
]
|
2018-09-06 18:35:02 +00:00
|
|
|
list_filter = ["mimetype", "import_status", "library__privacy_level"]
|
|
|
|
|
2025-05-07 15:22:38 +00:00
|
|
|
def formfield_for_manytomany(self, db_field, request, **kwargs):
|
|
|
|
if db_field.name == "playlist_libraries":
|
|
|
|
object_id = request.resolver_match.kwargs.get("object_id")
|
|
|
|
kwargs["queryset"] = models.Library.objects.filter(
|
|
|
|
playlist_uploads=object_id
|
|
|
|
).distinct()
|
|
|
|
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
|
|
|
|
2018-09-06 18:35:02 +00:00
|
|
|
|
2018-10-24 17:11:57 +00:00
|
|
|
@admin.register(models.UploadVersion)
|
|
|
|
class UploadVersionAdmin(admin.ModelAdmin):
|
|
|
|
list_display = [
|
|
|
|
"upload",
|
|
|
|
"audio_file",
|
|
|
|
"mimetype",
|
|
|
|
"size",
|
|
|
|
"bitrate",
|
|
|
|
"creation_date",
|
|
|
|
"accessed_date",
|
|
|
|
]
|
|
|
|
list_select_related = ["upload"]
|
|
|
|
search_fields = [
|
|
|
|
"upload__source",
|
|
|
|
"upload__acoustid_track_id",
|
|
|
|
"upload__track__title",
|
|
|
|
"upload__track__album__title",
|
|
|
|
"upload__track__artist__name",
|
|
|
|
]
|
|
|
|
list_filter = ["mimetype"]
|
|
|
|
|
|
|
|
|
2018-09-24 18:44:22 +00:00
|
|
|
def launch_scan(modeladmin, request, queryset):
|
|
|
|
for library in queryset:
|
|
|
|
library.schedule_scan(actor=request.user.actor, force=True)
|
|
|
|
|
|
|
|
|
|
|
|
launch_scan.short_description = "Launch scan"
|
|
|
|
|
|
|
|
|
2018-09-06 18:35:02 +00:00
|
|
|
@admin.register(models.Library)
|
|
|
|
class LibraryAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ["id", "name", "actor", "uuid", "privacy_level", "creation_date"]
|
|
|
|
list_select_related = True
|
2025-02-11 13:47:59 +00:00
|
|
|
search_fields = ["uuid", "name", "actor__preferred_username"]
|
2018-09-06 18:35:02 +00:00
|
|
|
list_filter = ["privacy_level"]
|
2018-09-24 18:44:22 +00:00
|
|
|
actions = [launch_scan]
|
|
|
|
|
|
|
|
|
|
|
|
@admin.register(models.LibraryScan)
|
|
|
|
class LibraryScanAdmin(admin.ModelAdmin):
|
|
|
|
list_display = [
|
|
|
|
"id",
|
|
|
|
"library",
|
|
|
|
"actor",
|
|
|
|
"status",
|
|
|
|
"creation_date",
|
|
|
|
"modification_date",
|
|
|
|
"status",
|
|
|
|
"total_files",
|
|
|
|
"processed_files",
|
|
|
|
"errored_files",
|
|
|
|
]
|
|
|
|
list_select_related = True
|
|
|
|
search_fields = ["actor__username", "library__name"]
|
|
|
|
list_filter = ["status"]
|