mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-26 11:18:20 +00:00
Merged DataObj class with MetadataItem class
This commit is contained in:
@@ -54,7 +54,6 @@ from picard.cluster import Cluster
|
||||
from picard.collection import add_release_to_user_collections
|
||||
from picard.config import get_config
|
||||
from picard.const import VARIOUS_ARTISTS_ID
|
||||
from picard.dataobj import DataObject
|
||||
from picard.file import File
|
||||
from picard.i18n import (
|
||||
N_,
|
||||
@@ -104,7 +103,7 @@ def _copy_artist_nodes(source, target_node):
|
||||
credit['artist'] = artist_node
|
||||
|
||||
|
||||
class AlbumArtist(DataObject):
|
||||
class AlbumArtist(MetadataItem):
|
||||
def __init__(self, album_artist_id):
|
||||
super().__init__(album_artist_id)
|
||||
|
||||
@@ -122,11 +121,10 @@ class ParseResult(IntEnum):
|
||||
MISSING_TRACK_RELS = 2
|
||||
|
||||
|
||||
class Album(DataObject, MetadataItem):
|
||||
class Album(MetadataItem):
|
||||
|
||||
def __init__(self, album_id, discid=None):
|
||||
DataObject.__init__(self, album_id)
|
||||
MetadataItem.__init__(self)
|
||||
super().__init__(album_id)
|
||||
self.tracks = []
|
||||
self.loaded = False
|
||||
self.load_task = None
|
||||
|
||||
@@ -42,8 +42,6 @@ from collections import (
|
||||
from operator import attrgetter
|
||||
import re
|
||||
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from picard.config import get_config
|
||||
from picard.file import File
|
||||
from picard.i18n import (
|
||||
@@ -77,11 +75,10 @@ CLUSTER_COMPARISON_WEIGHTS = {
|
||||
}
|
||||
|
||||
|
||||
class FileList(QtCore.QObject, FileListItem):
|
||||
class FileList(FileListItem):
|
||||
|
||||
def __init__(self, files=None):
|
||||
QtCore.QObject.__init__(self)
|
||||
FileListItem.__init__(self, files)
|
||||
super().__init__(files=files)
|
||||
if self.files and self.can_show_coverart:
|
||||
for file in self.files:
|
||||
file.metadata_images_changed.connect(self.update_metadata_images)
|
||||
@@ -99,7 +96,6 @@ class Cluster(FileList):
|
||||
|
||||
def __init__(self, name, artist="", special=False, related_album=None, hide_if_empty=False):
|
||||
super().__init__()
|
||||
self.item = None
|
||||
self.metadata['album'] = name
|
||||
self.metadata['albumartist'] = artist
|
||||
self.metadata['totaltracks'] = 0
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Picard, the next-generation MusicBrainz tagger
|
||||
#
|
||||
# Copyright (C) 2004 Robert Kaye
|
||||
# Copyright (C) 2006-2008 Lukáš Lalinský
|
||||
# Copyright (C) 2011-2012 Michael Wiencek
|
||||
# Copyright (C) 2013, 2020-2021, 2023 Laurent Monin
|
||||
# Copyright (C) 2017 Sambhav Kothari
|
||||
# Copyright (C) 2017 Sophist-UK
|
||||
# Copyright (C) 2018 Vishal Choudhary
|
||||
# Copyright (C) 2018, 2021 Philipp Wolfer
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
|
||||
from collections import Counter
|
||||
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from picard.config import get_config
|
||||
|
||||
|
||||
class DataObject(QtCore.QObject):
|
||||
|
||||
def __init__(self, obj_id):
|
||||
super().__init__()
|
||||
self.id = obj_id
|
||||
self.item = None
|
||||
self._genres = Counter()
|
||||
|
||||
@property
|
||||
def genres(self):
|
||||
return self._genres
|
||||
|
||||
def add_genre(self, name, count):
|
||||
if name:
|
||||
self._genres[name] += count
|
||||
|
||||
@staticmethod
|
||||
def set_genre_inc_params(inc, config=None):
|
||||
require_authentication = False
|
||||
config = config or get_config()
|
||||
if config.setting['use_genres']:
|
||||
use_folksonomy = config.setting['folksonomy_tags']
|
||||
if config.setting['only_my_genres']:
|
||||
require_authentication = True
|
||||
inc |= {'user-tags'} if use_folksonomy else {'user-genres'}
|
||||
else:
|
||||
inc |= {'tags'} if use_folksonomy else {'genres'}
|
||||
return require_authentication
|
||||
@@ -59,8 +59,6 @@ import time
|
||||
|
||||
from mutagen._util import MutagenError
|
||||
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from picard import (
|
||||
PICARD_APP_NAME,
|
||||
log,
|
||||
@@ -135,7 +133,7 @@ class FileErrorType(Enum):
|
||||
PARSER = auto()
|
||||
|
||||
|
||||
class File(QtCore.QObject, MetadataItem):
|
||||
class File(MetadataItem):
|
||||
|
||||
NAME = None
|
||||
|
||||
@@ -173,7 +171,6 @@ class File(QtCore.QObject, MetadataItem):
|
||||
self.parent = None
|
||||
|
||||
self.lookup_task = None
|
||||
self.item = None
|
||||
|
||||
self.acoustid_fingerprint = None
|
||||
self.acoustid_length = 0
|
||||
|
||||
@@ -25,9 +25,12 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from collections import Counter
|
||||
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from picard import log
|
||||
from picard.config import get_config
|
||||
from picard.i18n import ngettext
|
||||
from picard.metadata import Metadata
|
||||
from picard.util import IgnoreUpdatesContext
|
||||
@@ -176,16 +179,20 @@ class ImageListState:
|
||||
self.first_obj = False
|
||||
|
||||
|
||||
class MetadataItem(Item):
|
||||
class MetadataItem(QtCore.QObject, Item):
|
||||
metadata_images_changed = QtCore.pyqtSignal()
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, obj_id=None):
|
||||
super().__init__()
|
||||
self.id = obj_id
|
||||
# FIXME: Rename to ui_item
|
||||
self.item = None
|
||||
self.metadata = Metadata()
|
||||
self.orig_metadata = Metadata()
|
||||
self.update_children_metadata_attrs = {}
|
||||
self.iter_children_items_metadata_ignore_attrs = {}
|
||||
self.suspend_metadata_images_update = IgnoreUpdatesContext()
|
||||
self._genres = Counter()
|
||||
|
||||
@property
|
||||
def tagger(self):
|
||||
@@ -287,11 +294,32 @@ class MetadataItem(Item):
|
||||
|
||||
return changed
|
||||
|
||||
@property
|
||||
def genres(self):
|
||||
return self._genres
|
||||
|
||||
def add_genre(self, name, count):
|
||||
if name:
|
||||
self._genres[name] += count
|
||||
|
||||
@staticmethod
|
||||
def set_genre_inc_params(inc, config=None):
|
||||
require_authentication = False
|
||||
config = config or get_config()
|
||||
if config.setting['use_genres']:
|
||||
use_folksonomy = config.setting['folksonomy_tags']
|
||||
if config.setting['only_my_genres']:
|
||||
require_authentication = True
|
||||
inc |= {'user-tags'} if use_folksonomy else {'user-genres'}
|
||||
else:
|
||||
inc |= {'tags'} if use_folksonomy else {'genres'}
|
||||
return require_authentication
|
||||
|
||||
|
||||
class FileListItem(MetadataItem):
|
||||
|
||||
def __init__(self, files=None):
|
||||
super().__init__()
|
||||
def __init__(self, obj_id=None, files=None):
|
||||
super().__init__(obj_id)
|
||||
self.files = files or []
|
||||
self.update_children_metadata_attrs = {'metadata', 'orig_metadata'}
|
||||
|
||||
|
||||
@@ -30,21 +30,18 @@ from functools import partial
|
||||
from itertools import combinations
|
||||
import traceback
|
||||
|
||||
from PyQt6 import QtCore
|
||||
|
||||
from picard import log
|
||||
from picard.dataobj import DataObject
|
||||
from picard.i18n import (
|
||||
N_,
|
||||
gettext as _,
|
||||
pgettext_attributes,
|
||||
)
|
||||
from picard.item import MetadataItem
|
||||
from picard.mbjson import (
|
||||
countries_from_node,
|
||||
label_info_from_node,
|
||||
media_formats_from_node,
|
||||
)
|
||||
from picard.metadata import Metadata
|
||||
from picard.util import (
|
||||
countries_shortlist,
|
||||
uniqify,
|
||||
@@ -106,12 +103,10 @@ def prepare_releases_for_versions(releases):
|
||||
}
|
||||
|
||||
|
||||
class ReleaseGroup(DataObject):
|
||||
class ReleaseGroup(MetadataItem):
|
||||
|
||||
def __init__(self, rg_id):
|
||||
super().__init__(rg_id)
|
||||
self.tagger = QtCore.QCoreApplication.instance()
|
||||
self.metadata = Metadata()
|
||||
self.loaded = False
|
||||
self.versions = []
|
||||
self.version_headings = " / ".join(_(VERSIONS_HEADINGS[k]) for k in VERSIONS_NAME_KEYS)
|
||||
|
||||
@@ -100,7 +100,6 @@ from picard.const.sys import (
|
||||
IS_MACOS,
|
||||
IS_WIN,
|
||||
)
|
||||
from picard.dataobj import DataObject
|
||||
from picard.debug_opts import DebugOpt
|
||||
from picard.disc import (
|
||||
Disc,
|
||||
@@ -115,6 +114,7 @@ from picard.i18n import (
|
||||
gettext as _,
|
||||
setup_gettext,
|
||||
)
|
||||
from picard.item import MetadataItem
|
||||
from picard.options import init_options
|
||||
from picard.pluginmanager import (
|
||||
PluginManager,
|
||||
@@ -1020,8 +1020,8 @@ class Tagger(QtWidgets.QApplication):
|
||||
"""Lookup the object's metadata on the MusicBrainz website."""
|
||||
lookup = self.get_file_lookup()
|
||||
metadata = item.metadata
|
||||
# Only lookup via MB IDs if matched to a DataObject; otherwise ignore and use metadata details
|
||||
if isinstance(item, DataObject):
|
||||
# Only lookup via MB IDs if matched to a MetadataItem; otherwise ignore and use metadata details
|
||||
if isinstance(item, MetadataItem):
|
||||
itemid = item.id
|
||||
if isinstance(item, Track):
|
||||
lookup.recording_lookup(itemid)
|
||||
|
||||
@@ -55,13 +55,15 @@ from picard.const import (
|
||||
SILENCE_TRACK_TITLE,
|
||||
VARIOUS_ARTISTS_ID,
|
||||
)
|
||||
from picard.dataobj import DataObject
|
||||
from picard.file import (
|
||||
run_file_post_addition_to_track_processors,
|
||||
run_file_post_removal_from_track_processors,
|
||||
)
|
||||
from picard.i18n import gettext as _
|
||||
from picard.item import FileListItem
|
||||
from picard.item import (
|
||||
FileListItem,
|
||||
MetadataItem,
|
||||
)
|
||||
from picard.mbjson import recording_to_metadata
|
||||
from picard.metadata import (
|
||||
Metadata,
|
||||
@@ -119,16 +121,15 @@ class TagGenreFilter:
|
||||
yield fmt % {'lineno': lineno + 1, 'error': error}
|
||||
|
||||
|
||||
class TrackArtist(DataObject):
|
||||
class TrackArtist(MetadataItem):
|
||||
def __init__(self, ta_id):
|
||||
super().__init__(ta_id)
|
||||
|
||||
|
||||
class Track(DataObject, FileListItem):
|
||||
class Track(FileListItem):
|
||||
|
||||
def __init__(self, track_id, album=None):
|
||||
DataObject.__init__(self, track_id)
|
||||
FileListItem.__init__(self)
|
||||
super().__init__(track_id)
|
||||
self.album = album
|
||||
self.scripted_metadata = Metadata()
|
||||
self._track_artists = []
|
||||
|
||||
@@ -44,7 +44,7 @@ from picard.util.tags import (
|
||||
)
|
||||
|
||||
|
||||
class DataObjectTest(PicardTestCase):
|
||||
class FileTest(PicardTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
@@ -25,14 +25,14 @@ from unittest.mock import Mock
|
||||
from test.picardtestcase import PicardTestCase
|
||||
|
||||
from picard import config
|
||||
from picard.dataobj import DataObject
|
||||
from picard.item import MetadataItem
|
||||
|
||||
|
||||
class DataObjectTest(PicardTestCase):
|
||||
class MetadataItemTest(PicardTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.obj = DataObject('id')
|
||||
self.obj = MetadataItem('id')
|
||||
|
||||
def test_set_genre_inc_params_no_genres(self):
|
||||
inc = set()
|
||||
Reference in New Issue
Block a user