117 lines
2.7 KiB
Python
117 lines
2.7 KiB
Python
"""Admin interface for lyrics"""
|
|
from django.contrib import admin
|
|
from audio.models_lyrics import Lyrics, LyricsCache
|
|
|
|
|
|
@admin.register(Lyrics)
|
|
class LyricsAdmin(admin.ModelAdmin):
|
|
"""Admin for Lyrics model"""
|
|
|
|
list_display = [
|
|
'audio',
|
|
'has_lyrics',
|
|
'is_synced',
|
|
'is_instrumental',
|
|
'source',
|
|
'language',
|
|
'fetch_attempted',
|
|
'fetch_attempts',
|
|
'fetched_date',
|
|
]
|
|
|
|
list_filter = [
|
|
'is_instrumental',
|
|
'source',
|
|
'language',
|
|
'fetch_attempted',
|
|
'fetched_date',
|
|
]
|
|
|
|
search_fields = [
|
|
'audio__title',
|
|
'audio__channel_name',
|
|
'audio__youtube_id',
|
|
]
|
|
|
|
readonly_fields = [
|
|
'audio',
|
|
'fetched_date',
|
|
'has_lyrics',
|
|
'is_synced',
|
|
]
|
|
|
|
fieldsets = (
|
|
('Audio Information', {
|
|
'fields': ('audio',)
|
|
}),
|
|
('Lyrics', {
|
|
'fields': ('synced_lyrics', 'plain_lyrics', 'is_instrumental')
|
|
}),
|
|
('Metadata', {
|
|
'fields': ('source', 'language')
|
|
}),
|
|
('Fetch Status', {
|
|
'fields': ('fetch_attempted', 'fetch_attempts', 'last_error', 'fetched_date')
|
|
}),
|
|
('Properties', {
|
|
'fields': ('has_lyrics', 'is_synced'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
|
|
@admin.register(LyricsCache)
|
|
class LyricsCacheAdmin(admin.ModelAdmin):
|
|
"""Admin for LyricsCache model"""
|
|
|
|
list_display = [
|
|
'title',
|
|
'artist_name',
|
|
'duration',
|
|
'source',
|
|
'cached_date',
|
|
'access_count',
|
|
'not_found',
|
|
]
|
|
|
|
list_filter = [
|
|
'source',
|
|
'not_found',
|
|
'cached_date',
|
|
'language',
|
|
]
|
|
|
|
search_fields = [
|
|
'title',
|
|
'artist_name',
|
|
'album_name',
|
|
]
|
|
|
|
readonly_fields = [
|
|
'cached_date',
|
|
'last_accessed',
|
|
'access_count',
|
|
]
|
|
|
|
fieldsets = (
|
|
('Track Information', {
|
|
'fields': ('title', 'artist_name', 'album_name', 'duration')
|
|
}),
|
|
('Cached Lyrics', {
|
|
'fields': ('synced_lyrics', 'plain_lyrics', 'is_instrumental')
|
|
}),
|
|
('Metadata', {
|
|
'fields': ('source', 'language', 'not_found')
|
|
}),
|
|
('Cache Statistics', {
|
|
'fields': ('cached_date', 'last_accessed', 'access_count')
|
|
}),
|
|
)
|
|
|
|
actions = ['clear_not_found']
|
|
|
|
def clear_not_found(self, request, queryset):
|
|
"""Clear not_found cache entries"""
|
|
count = queryset.filter(not_found=True).delete()[0]
|
|
self.message_user(request, f'Cleared {count} not_found cache entries')
|
|
clear_not_found.short_description = 'Clear not_found entries'
|