from django.contrib import admin from scrobbles.models import ( AudioScrobblerTSVImport, BGStatsImport, EBirdCSVImport, FavoriteMedia, KoReaderImport, LastFmImport, RetroarchImport, ScaleCSVImport, Scrobble, TrailGPXImport, ) from scrobbles.mixins import Genre class ScrobbleInline(admin.TabularInline): model = Scrobble extra = 0 raw_id_fields = ( "video", "channel", "podcast_episode", "track", "video_game", "book", "paper", "sport_event", "food", "board_game", "geo_location", "task", "puzzle", "mood", "brick_set", "trail", "beer", "web_page", "life_event", "birding_location", "user", ) exclude = ( "scrobble_log", "timezone", "videogame_save_data", "screenshot", ) class ImportBaseAdmin(admin.ModelAdmin): date_hierarchy = "created" list_display = ( "uuid", "process_count", "processed_finished", "processing_started", "error_log", ) ordering = ("-created",) @admin.register(AudioScrobblerTSVImport) class AudioScrobblerTSVImportAdmin(ImportBaseAdmin): ... @admin.register(LastFmImport) class LastFmImportAdmin(ImportBaseAdmin): ... @admin.register(KoReaderImport) class KoReaderImportAdmin(ImportBaseAdmin): ... @admin.register(RetroarchImport) class RetroarchImportAdmin(ImportBaseAdmin): ... class RetroarchImportAdmin(ImportBaseAdmin): ... @admin.register(BGStatsImport) class BGStatsImportAdmin(ImportBaseAdmin): ... @admin.register(EBirdCSVImport) class EBirdCSVImportAdmin(ImportBaseAdmin): ... @admin.register(ScaleCSVImport) class ScaleCSVImportAdmin(ImportBaseAdmin): ... @admin.register(TrailGPXImport) class TrailGPXImportAdmin(ImportBaseAdmin): ... @admin.register(Genre) class GenreAdmin(admin.ModelAdmin): list_display = ( "name", "source", ) @admin.register(Scrobble) class ScrobbleAdmin(admin.ModelAdmin): date_hierarchy = "timestamp" list_display = ( "timestamp", "media_name", "media_type", "playback_percent", "source", "in_progress", "is_paused", "played_to_completion", "user", ) raw_id_fields = ( "video", "podcast_episode", "track", "sport_event", "book", "video_game", "board_game", "geo_location", "puzzle", "paper", "food", "task", "mood", "brick_set", "trail", "beer", "web_page", "life_event", "birding_location", ) list_filter = ( "is_paused", "in_progress", "media_type", "long_play_complete", "source", "timezone", "user", ) ordering = ("-timestamp",) def media_name(self, obj): return obj.media_obj def playback_percent(self, obj): return obj.percent_played def get_queryset(self, request): qs = super().get_queryset(request).exclude(timestamp__year=None) return qs @admin.register(FavoriteMedia) class FavoriteMediaAdmin(admin.ModelAdmin): list_display = ("user", "media_type", "sent_to_mopidy", "created") list_filter = ("media_type", "sent_to_mopidy", "user") date_hierarchy = "created" raw_id_fields = ( "video", "track", "podcast_episode", "sport_event", "book", "video_game", "board_game", "geo_location", "task", "mood", "brick_set", "trail", "beer", "web_page", "life_event", "birding_location", )