File picard.changes of Package picard
-------------------------------------------------------------------
Tue Jan 27 17:21:45 UTC 2026 - Scott Bradnick <scott.bradnick@suse.com>
- Update to version 3.0.0a1:
* Fixed pypi-release workflow
* Fixed changelog-for-version.py not extracting the changes from NEWS.md
* Translated using Weblate (Albanian)
* Bump version to 3.0.0 alpha 1
* Update NEWS.md
* Enable pymarkdown single-h1 rule and reformat NEWS.md
* Enabled Ukrainian for appstream metadata translation
* Translated using Weblate (German)
* Translated using Weblate (Catalan)
* Add regression tests for FileIdentity edge cases
* Translated using Weblate (Ukrainian)
* Translated using Weblate (German)
* Update translation files
* Translated using Weblate (German)
* Update translation files
* Translated using Weblate (German)
* Add regression test for file deleted after identity capture
* Consistently use "Execution Order" for plugin order configuration
* Update picard.pot
* Use PicardDialog standard help in CustomColumnsManagerDialog
* Added help URL to filter dialog
* Moved filter dialog in separate class
* Use QDialogButtonBox for filter dialog
* Update translation files
* Consistent name for album / file view
* Update translation files
* Update picard.pot
* Translated using Weblate (German)
* Update translation files
* Translated using Weblate (German)
* Update translation files
* Translated using Weblate (German)
* Refactor ColumnGroups to IntEnum-based ColumnGroup
* Use hierarchical menu for header selector items
* Get all child items from hierarcical tree (Quick Setting Menu)
* Get all child items from hierarcical tree (Option Profiles)
* "Play select files" => "Play selected files"
* Set quick settings options UI texts directly in .ui file
* Update .mailmap
* Add regression test for replaced file with same size and different content
* Translated using Weblate (Catalan)
* Update translation files
* Translated using Weblate (Lithuanian)
* Translated using Weblate (German)
* Update translation files
* Translated using Weblate (German)
* Run update constants
* Update picard.pot
* Changes based on feedback
* Shorten option settings titles (second pass)
* Update picard.pot
* Use Markdown to emphasize in script function documentation
* Use quotation marks around filepaths in translated texts
* Shorten option settings titles (first pass)
* PICARD-3170: Drop deprecated parameter from $matchedtracks function
* Add test for hierarchical sorting
* Display hierarchical tree for quick selector menu options page
* Fixed register_script_variable being called without documentation
* Replaced python-dateutil with picard.util.parse_date
* extract_year_from_date: allow passing date / datetime objects directly
* Update translation files
* Translated using Weblate (Catalan)
* Update picard.pot
* Allow buolding with pyobjc 12
* Update dependencies with uv
* FormattedTextDelegate: Import required Qt objects directly for readability
* Fixed rendering of FormattedTextDelegate
* Fix custom_columns option not being registered
* Fixed CheckboxMenuItem not always repainting on mouse leave
* Re-implement CheckboxMenuItem to not use a QCheckbox
* Fixed CheckboxMenuItem not toggling on all clicks
* Add note about handling settings that don't appear in an options page
* Add `additionaldesc` values for clarification
* PICARD-2025: Actually set ~filepath in metadata
* Fix CD lookup dialog media column not using alternating background color
* PICARD-2607: Add the _genres and _folksonomy_tags variables to tag list
* Fixed tests without markdown package
* Use f-string instead of str.format for FunctionRegistryItem.__repr__
* Accept FullArgSpec directly in generate_function_signature
* Add function signature to PluginApi.register_script_function
* Update all script function signatures
* Automatically generate script function signatures for documentation
* Add check for missing `parent` page in profile options tree
* PyQt6 is not optional and can be assumed to be available
* INSTALL.md: charset-normalizer is an optional dependency
* Ignore unresolved-import typing errors for optional imports
* hashlib import in plugin.py is not optional
* ThreadingHTTPServer is available since Python 3.7
* Removed STATUS.md and TRANSLATIONS_IMPL.md from plugin docs
* API.md: Add a note that plugin priority can be changed by users
* API.md: Update register_script_function example documentation
* API.md: Replaced the removed get_files_from_objects with other example
* Update translation files
* Translated using Weblate (Catalan)
* Update wlc to fix vulnerability
* Update picard.pot
* Added "Funding" link to pyproject.toml
* Display option profile settings in hierarchical tree
* Specifically reset the obj stylesheet to empty to clear highlight
* Major revision:
* PICARD-2817: Implement macOS Now Playing support
* Refactor to reduce code duplication and unnecessary assignments
* Add error checking. Auto locate starting directory.
* Also process `scripts` and `test` directory trees
* Remove from pre-commit hooks
* Player toolbar: guard for potentially missing widget
* CI: removed not needed "pip install setuptools" from Windows build
* CI: Skip libgit2 install on macOS
* CI: Skip libgit2 install on Windows
* PICARD-3164: Fix make make_save_path modifying Windows share hostname
* Removed unused "noqa" directives
* Improved localization of profile name in attached profiles dialog
* Ignore lines ending with continuation character
* Add pre-commit hook to fix multiple imports on one line
* Added is_unc_path helper and fixed Windows raw path getting detected as UNC
* Update pre-commit hooks and require ruff >= 0.13
* Enable most of pyupgrade checks in ruff lint
* Enable UP034: Avoid extraneous parentheses
* Enable UP030: Use implicit references for positional format fields
* Enable UP022: Use subprocess.run with capture_output
* Enable UP045: Use typing X | None instead of Optional
* Removed Python < 3.10 workaround
* Enable UP035: no deprecated imports
* Enable UP028: Use yield from instead of for loop with yield
* Enable UP024: Replace aliased errors with OSError
* Enable UP010: Unnecessary __future__ import for target Python version
* Enable UP008: Use super() instead of super(__class__, self)
* Enable UP007: Use X | Y for type annotations instead of typing.Union
* Enable UP006: use dict / list instead of typing.Dict / typing.List
* Consistently use multiline import statements
* Update translation files
* Update picard.pot
* Refresh FileIdentity after successful save
* Add test for parsing raw SCSI TOC data file
* Support parsing raw SCSI TOC data file
* Cleanup: remove redundant _hash initialization
* Compute file hash at load and verify on compare
* Actually use _fast_hash() and improve tests
* Improve test coverage, document
* Unify test style with other tests
* Allow enabling / disabling now playing during runtime
* Add option to disable "now playing" notifications
* PICARD-3157: Implement MPRIS2 DBus support for media player
* PICARD-2657: Renamed "Open in Player" to "Open in System Media Player"
* PICARD-3160: CheckboxMenuItem should not toggle on mouse release if not pressed
* PICARD-3160: Fixed custom columns update overwriting ClusterList title
* The class CustomColumnsManagerDialog is never None
* Custom columns dialog: Avoid double commit changes on dialog accept
* Ensure Player volume can be set to 100%
* Fix Player emitting state change signal on track change
* Add a Player.seeked event
* Introduce own PlaybackState enum
* Implemented actual Player.stop action to fully stop the current playback
* Added Player.duration property
* Re-implemented Windows status indicator using comtypes
* Move statusindicator into package with multiple files
* PICARD-3161: Add keyboard shortcuts to control internal player
* PICARD-2561: Add action and context menu entry to play in internal player
* Allow selecting only a single plugin for installation
* Detect external file changes: 1. Add _exists flag and __bool__() as asked by zas 2. Simplify save logic 3. Add FileIdentity unit tests
* PICARD-2945: Add broadcast_date to tags documentation
* PICARD-2945: Provide broadcast date variable and tests
* Update dependencies, specifically PyInstaller 6.18
* Update translation files
* Update picard.pot
* Improve action name (never changed after copy'n'paste).
* Refactor return processing
* Remove options page and mode order setting to plugin context menu
* Retain priority for disabled plugins
* Check if `markdown` is available
* Add option to manually set metadata processor plugin execution order
* Rebuild all ui files to ensure they are up-to-date
* Update wlc (dev dependency)
* feat: detect external file changes using FileIdentity + blake2b
* Remove Tagger.get_files_from_objects
* Translated using Weblate (Lithuanian)
* Stay on PyQt6-Qt6 6.9 for Linux
* Fix player toolbar should update "Pause" button on state change
* Implement Player.can_play and make playback status properties readonly
* Player toolbar: adjust the sensibility of changing the playback rate by mouse wheel
* Renamed ui.player.widgets to ui.player.toolbar
* Decouple Player class
* Media Player: implemented playback signals directly on Player class
* Run uv pip compile only pre-commit
* Update translation files
* Update picard.pot
* Upgrade to latest PyQt6 version 6.10.2
* Fix typos
* refactor(options): Define 'Overwrite existing files' in UI file. Moves the UI definition for the 'Overwrite existing files' checkbox from Python code to the options_renaming.ui file
* Update picard/file.py
* Fix the DBus com.canonical.Unity.LauncherEntry implementation
* feat(options): Relocate "Overwrite existing files" checkbox under the Delete empty directories option
* feat(options): Add option to overwrite existing files when moving
* Detect image formats supported by Qt for use in cover art processing
* PICARD-2765: Use double quotes consistently in translatable strings
* Make Player class more robust by checking availability of self._player
* Removed Player.set_playback_rate workaround
* Upgrade dependencies
* pre-commit: run uv pip compile as upgrade, but only if uv.lock changed
* docs: clarify behavior of _set_error
* Docs: Add docstring to TreeItem class (#2946)
* Add typehint to Item.ui_item
* Fix(File Saving): Prevent existing additional files from being overwritten.
* Fixed exception if webservice task got removed while aborting
* Revert "Avoid circular dependency between CoverArt and CoverArtProvider instances"
* Translated using Weblate (Chinese (Simplified Han script))
* Use icon for opening directory picker in local plugin install dialog
* PICARD-2729: Remove ID3 from formats that can toggle date sanitization
* Simplified File.is_date_sanitization_enabled
* Removed unused MainEventInterceptor from test_coverart_processing
* Use weakref for File.parent_item
* Unify redundant Cluster.album and Cluster.related_album properties
* Avoid circular dependency between Album and Cluster or Track
* Use weakref to avoid circular dependency between Item and TreeItem
* Use weakref to avoid PendingTask referencing itself
* WebService must remove pendingtask after reply was received
* Avoid circular dependency between CoverArt and CoverArtProvider instances
* Prevent garbage collection while DataHash objects are created
* Make the DataHash.remove_all_files function description less scary
* Ensure all DataHash temp files are cleared on shutdown
* Make DataHash.data() a method, but DataHash.hash a property
* Refactor DataHash to use a single instance per unique hash
* Upgrade all dependencies
* Add help links to new / revised option settings pages
* Update disable date sanitization option from dropdown to checkbox
* Reapply buddy label name changes and icon button to select directory
* Revert changes to Maintenance options page
* Update based on PR feedback:
* Docs: Add macOS gettext troubleshooting steps
* Rename CoverArtImage.set_tags_data to CoverArtImage.set_data
* CI: Fix macOS packaging running "patch_version" after uv sync
* CI: Set UV_FROZEN=1
* Use long parameter names for pytest in pre-commit config for clarity
* Advanced / Maintenance options page:
* Interface options page:
* Fingerprinting options page:
* File Naming options page:
* Advanced / Sessions options page:
* Move get_config outside the loop in CoverArt._start_queue
* More stable test implementation for test_coverart_processing
* Refactor cover art image loading to use generator
* Fixed CoverArtImageProcessing calling callback after thread finished
* Refactored CoverArt queue handling into separate methods
* Translated using Weblate (French)
* CI: show actual changes required by ruff format
* Correct error bar still showing empty red bar after error corrected
* Improve Advanced options page:
* Improve Cover Art / Local options page:
* Improve Cover Art / CAA options page:
* Improve Cover Art options page:
* Remove picard-plugins.exe from MSIX install
* Copy win10 images into pyinstaller target dir instead of using datafiles
* Omit "_unsigned" from MSIX package name
* Build and sign Windows MSIX package again
* PICARD-2678: Disable AppData virtualization for Windows MSIX package
* Improve Metadata / Genres options page:
* Move extraction of plugin_id to FunctionRegistryItem
* Removed misleading threading comments from config.py
* PICARD-2905: Seed release date when submitting release
* PICARD-3020: Set disc subtitle and media format in submit cluster
* Fixed tabulator order in options metadata view
* PICARD-1274: Move to trash action for files
* QTableWidget.isPersistentEditorOpen is always available in Qt6
* Removed timezone workaround for Python 3.5 from $datetime script function
* sys.audithook is always available in supported Python versions
* Small layout changes
* Fix CoverArtImage exception if data is None
* Refactor ImageProcessor.Target to be flags
* Fix cover art processors always getting registered for all targets
* Fix CoverArtImageProcessing running callback once after processing
* Set coverart as metadata only after image processing has completed
* Improve error messages for file access errors
* Revise / reformat Sessions option settings page
* Fix PluginManager not disabling local plugin on re-install.
* Fix metadata options resizing below minimum widget height
* PICARD-3154: Fix cover art provider images not being applied to track/file metadata
* Reformat script function documentation:
* CI: install libegl1 and gettext in one go for Linux tests
* CI: use uv to handle dependencies in tests
* Fixed register_script_variable not setting plugin module correctly
* Bump azure/trusted-signing-action from 0.5.10 to 0.5.11
* Bump actions/setup-python from 5 to 6
* Bump actions/download-artifact from 6 to 7
* Bump actions/upload-artifact from 5 to 6
* Fixed type hints for Manifest locale parameters
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Catalan)
* Select the plugin that was just installed (in the plugin list widget)
* Optimize check updates after action to only check the plugin in the action
* Add plugin_id_to_plugin() convenient method to get plugin object for its id
* check_updates(): optionally accept a list of included plugins to check
* Remove unused PluginManager._check_single_plugin_update()
* Remove get_plugin_update_status(), unused
* Drop all_plugins attribute, use plugin_manager.plugins directly
* In ref selector, display default and custom widgets at top, instead of vertical center
* extract_plugin_translation: keep existing qt translations, but not removed keys
* extract_plugin_translation: simplified toml writing code
* extract_plugin_translation: use tomlkit for reading manifest
* extract_plugin_translation should keep translations for qt translations
* Fix extract_plugin_translation not writing tables in correct order
* Use getattr() with default None instead of "hasttr() and ..." where applicable
* Translate categories in plugin information dialog
* Don't pass exceptions silently, log to debug at least
* Translate plugin categories if possible
* Update translation files
* Run update_constants
* Update picard.pot
* Use named placeholders in localized format strings
* Set up options profile warning widgets in code
* Fixed button labels in metadata options
* Use ellipsis instead of three dots in UI labels
* Changed position of plugins options page
* Unified options/plugins.py and options/plugins3.py
* Sort registry plugins in plugin install dialog by display name
* Add a small spacing between progress bar and button, and above them
* Remove unused QLabel, causing a space on the right of Update All button
* Ensure the Update All button can be activated only once
* Rework Update All Plugin Manager UI
* Update link to Qt docs in comment
* Don't show quit confirmation dialog when the application is already exiting
* Prevent segfault from Qt object double-deletion during request cleanup
* Fix OAuth refresh race condition causing RemoteHostClosedError
* Pluralize plugin status messages
* tracknum_and_title_from_filename(): only try to strip dot if enough length
* PICARD-3150: Fix CD lookup when there is no selected format
* Sort plugins locale aware
* Remove redundant URL check
* Ensure plugins are sorted by name() in the installed plugins list
* Add ReadTheDocs support
* Remove dead code
* Simplify and fix getting plugin name, improve error dialogs
* PICARD-2759: Add ellipsis to "Clear Log…" button
* Update PyPI packages (uv sync -U --all-groups --all-extras)
* Exclude tomli from PyInstaller package if tomllib is available
* CI: Use uv to build macOS package
* CI: Use macos-15-intel for x86_64 builds with macOS
* CI: Use uv to build Windows package
* CI: Use Python 3.14 for macOS and Windows packages
* Update to PyInstaller 6.17
* Removed aubio from extra packages
* Add exception handling to disable_plugin method
* Handle cascading exceptions when both enable and disable fail
* Move plugin enable failure handling to manager layer
* Fix plugin checkbox state inconsistency when enable fails
* Include translatable items from `MANIFEST.toml`
* Add Plugin3 API new method: get_plugin_version()
* Include picard-plugins CLI in PyInstaller onefolder package
* Exclude aubio from extras on Windows since the package doesn build there
* Removed unused cipher option from picard.spec
* Fix Branches double entries in ref selector when installing from a local directory
* Don't fail initializing ProviderOptions without _options_ui attribute
* refactor: improve registry.py code quality and readability
* refactor: remove redundant _fetch_version_tags wrapper method
* refactor: extract duplicate strip_prefix functions and move re import to top
* refactor: split _check_single_plugin_update into focused methods
* refactor: eliminate redundant _create_ref_item wrapper methods
* refactor: reduce code redundancy in PluginUpdater
* refactor: unify remote and local installation with _install_common
* refactor: move imports to top and add logging to silent exceptions
* refactor: further simplify PluginInstaller with common patterns
* refactor: reduce code redundancy in PluginInstaller
* fix: update mock paths after refactoring for install and registry tests
* fix: resolve CLI test failures after refactoring
* fix: resolve remaining test failures after refactoring
* fix: update test imports after plugin manager refactoring
* refactor: extract PluginLifecycleManager and reduce main manager file
* refactor: extract registry logic to registry.py module
* fix: update test mocks for update module refactoring
* refactor: extract update logic to update.py module
* fix: update test mocks for install module refactoring
* refactor: extract installation logic to install.py module
* refactor: move manager.py to manager/__init__.py
* refactor: extract _install_from_remote_url from install_plugin
* refactor: extract _check_single_plugin_update from check_updates
* refactor: add _get_plugin_uuid_and_metadata helper and use in multiple methods
* refactor: use _with_plugin_repo in refresh_all_plugin_refs
* refactor: use _with_plugin_repo in update_plugin
* refactor: use _with_plugin_repo in _install_from_local_directory
* refactor: add _with_plugin_repo helper and refactor _rollback_plugin_to_commit
* Fix album unmatched files being shown when adding files
* Fix git fetch operations to include tags in all scenarios
* Additional type hints for plugin relevant classes
* Simplify plugin ref fetching logic
* Add has_versioning and get_versioning_scheme methods to Plugin class
* Fix plugin update display to show tag names instead of commit hashes
* Add test script for local plugins without registry
* Eliminate code duplication in plugin ref fetching
* Avoid double fetching in Refresh All
* Separate ref fetching from update detection in Refresh All
* Fix tag-based updates for URL-installed plugins
* Fix update checking for local plugins with git remotes
* Fix registry test mock to include ref attributes
* Fix second selected_ref.name to use shortname
* Fix pluginlistwidget to use RefItem shortname
* Simplify install dialog to use RefItem shortname only
* Fix install dialog to handle RefItem shortname
* Fix final GitRef.format() calls in CLI
* Complete CLI migration to RefItem
* Fix remaining GitRef.format() calls
* Fix CLI tests to use RefItem in UpdateResult
* Update UI widgets to use RefItem for display
* Update install tests to use RefItem in UpdateResult
* Update manager.py to use RefItem for display operations
* Remove format() method from GitRef
* Add RefItem class for plugin-specific reference handling
* Fix UpdateResult compatibility with GitRef objects
* Fix test script regex to handle ANSI color codes
* Fix version display format to avoid duplication
* Fix all GitRef displays to use shortnames consistently
* Fix GitRef display to always show shortnames
* Add GitRef serialization methods for metadata storage
* Simplify helper method return values to only return needed data
* Replace _ with descriptive unused variable names
* Update manager switch_ref to accept GitRef or string parameters
* Add GitRef support to plugin metadata
* Make GitOperations.switch_ref() return GitRef objects
* Eliminate ref type guesswork by using PluginSourceGit.resolved_ref_type
* Use GitRef objects in UpdateResult to eliminate guesswork
* Remove RefItem class completely
* Use GitRef.format() in UI ref selector components
* Use GitRef.format() in CLI commands
* Use GitRef.format() in plugin manager display methods
* Add format() method to GitRef class
* Strip remote prefix from branch names in plugin ref display
* Improve plugin ref display to show ref type in --list-refs
* Improve plugin ref type detection and eliminate hex string guesswork
* Fix plugin ref handling for consistency and relative references
* Add debug logging for temporary directory cleanup
* Require all plugins to be git repositories
* Fix temp directory cleanup on manifest validation failure
* Fix git ref resolution to handle origin/ prefix fallback
* Fix plugin rollback failure causing plugins to disappear
* Add _safe_remove_directory helper method for robust directory removal
* Fixed config value conversion for enum types
* Add PluginManifestError base class for comprehensive manifest exception handling
* Refactor: Extract _cleanup_failed_plugin_install helper method
* Fix test script to exit cleanly without errors
* Add cleanup for broken test plugins in test script
* Update test script to reflect rollback protection reality
* Fix: Add rollback protection to local directory installation
* Add test for local directory install enable failure gap
* Add rollback tests to plugin commands test script
* Refactor: Extract _validate_manifest_or_rollback helper method
* Implement cleanup for install_plugin on manifest validation failure during enable
* Implement rollback for switch_ref on manifest validation failure
* Implement rollback for update_plugin on manifest validation failure
* Add rollback helper method for plugin manifest validation failures
* Removed debugging print call from migrate_plugin
* plugins3_do_not_update_plugins -> plugins3_do_not_update
* Use full commit IDs internally for reliable plugin update validation
* Persist plugin updates between sessions and use plugin_id consistently
* In versioning scheme for plugins allow semver without patch
* Remove unused _has_update_available method
* Remove duplicate trust level methods from details widget
* Hide empty fields in Details panel using QFormLayout.setRowVisible
* Add Maintainers field to Details panel
* Remove Plugin ID field from Details panel
* Remove Trust Level from Details panel and fix Information dialog
* Remove redundant Version field and rename Git Ref to Version
* Replace Full Description button with Information dialog
* Skip tag-based updates for local plugins without versioning_scheme
* Improve plugin update debug logging
* Re-check for updates after ref switch instead of just removing
* Refresh plugin list display after updating updates dict
* Add debug logging to _on_plugin_state_changed
* Fix plugin update display by checking updates before load()
* Add debug logging to _on_plugin_installed
* Remove obsolete refresh_update_status method
* Fix plugin list not showing updates after installation
* Add commit resolution for custom plugin installations
* Refactor repeated git refs creation pattern into helper method
* Fix git backend _create_git_refs method calls
* Add fallback for existing plugins without ref_type metadata
* Store plugin installation method (ref_type) in metadata
* Fix plugin update detection to respect original installation ref
* Fix plugin update detection for tagged commits on branches
* Add debug logging to plugin update checking
* Fix updates dict maintenance after plugin actions
* Remove redundant _version_cache from PluginListWidget
* Remove unused _refresh_update_status method
* Plugin info dialog: Fix size not being restored on show
* Plugin info dialog: Avoid double scrollbars and render markdown with Qt
* Plugin info dialog: Removed stretch so the content takes the full dialog
* Use QButtonBox for plugin switch ref dialog
* Make plugin uninstall confirmation a QMessageBox
* Do not reset sizes of plugin management dialogs
* Fix mock repository to support context manager protocol
* Add context manager to switch_ref method
* Extract _try_switch_to_commit helper method from switch_ref
* Extract _try_switch_to_tag helper method from switch_ref
* Extract _try_switch_to_branch helper method from switch_ref
* Extract _fetch_remote_refs helper method from switch_ref
* Fix missing repo.free() in has_uncommitted_changes
* Fix missing repo.free() in check_ref_type
* Fix missing repo.free() in check_dirty_working_dir
* Fix missing repo.free() in plugin_metadata.py
* Implement context manager for GitRepository
* Fix check_updates to skip plugins already on latest version tag
* Simplify 3 inefficient methods in PluginListWidget
* Remove 4 unused methods from PluginListWidget
* Remove unused _refresh_single_plugin_update_status method
* Remove _update_status_cache completely
* Use self.updates dict instead of _update_status_cache
* Change check_updates() to return dict instead of list
* Remove unused _resolve_ref and _resolve_to_commit methods
* Complete migration to revparse_to_commit in plugin.py
* Replace revparse_single + peel_to_commit with revparse_to_commit
* Add revparse_to_commit() method to GitRepository
* get_plugin_update_status(): removed code, return always False now (WIP)
* Improve git backend logging (--debug-opts git_backend)
* Remove RefsCache system and eliminate code duplication
* Support storing enum types in config
* Fix GUI refresh to clear cache and add debug logging
* Add debug logging to show force_refresh parameter
* Fix GUI update detection for local repositories
* Add debug logging to tag detection exception
* Fix tag detection for detached HEAD to show version tags
* Make CLI update display consistent with RefItem.format()
* Fix update display to show commit hashes for detached HEAD
* Refactor: Extract detached HEAD logic into helper method
* Fix detached HEAD handling in get_plugin_update_status
* Fix detached HEAD update checking for local repository plugins
* Fix display of git revision syntax in switch_ref output
* Improve git revision syntax error handling in switch_ref
* Fix switch_ref to handle git revision syntax (^, ~, etc.)
* Fix --check-updates to detect branch updates for local repositories
* Fix check-updates to detect current branch from repository
* Fix local and remote branch handling in switch_ref
* Handle annotated tags and ^{} dereferencing properly
* Replace all .value enum comparisons with direct GitRefType comparisons
* Use direct GitRefType enum comparisons in plugin.py
* Simplify read_references_from_local_repo to _get_current_ref_info
* Replace listall_references() with list_references() for GitRef objects
* Optimize remaining ref resolution with find_git_ref()
* Replace get_ref_type() with GitRef-based find_git_ref()
* Optimize ref type checking in plugin manager
* Replace string matching with GitRef property access
* Fix 'GitRef' object has no attribute 'startswith' errors
* Plugin migration: Convert BaseAction attribute NAME to TITLE
* Fix AttributeError: move _create_git_refs to Pygit2Repository class
* Remove duplicate get_references() method, keep only list_references()
* Simplify GitRef creation by using pygit2 objects for all refs
* Merge duplicate _create_git_refs methods into unified implementation
* Remove backward compatibility from GitRef methods
* Update MockGitBackend to return GitRef objects
* Change list_references() and get_references() to return GitRef objects
* Further simplify code using GitRef metadata
* Simplify plugin manager using enhanced GitRef metadata
* Enhance GitRef with type information and shortname
* Optimize fetch_remote_refs to reuse existing plugin repositories
* Plugin migrate: migrate registering options
* Stop adding "api" parameter to class __init__ functions
* Plugin migrate: Use PyQt6.uic instead of launching subprocess
* Fix plugin migration tests after version got removed
* Fixed setting FileItem error icons
* Remove `version` from generated `MANIFEST.toml`. Add note.
* Prefer more generic IO[bytes] typehint over FileIO in File.score
* Reduce debug logging on successful translation matches
* fix: revparse_single() raises GitReferenceError not KeyError
* fix: fetch_all_git_refs(): fix annotated tags resolving
* GitRef: add __repr__() to help debugging
* PICARD-3148: Use docstring as default documentation for script functions
* PluginMetadata: introduce read_references_from_local_repo()
* Plugin migration: add specific warning about track metadata parameter change
* Plugin migration: removed warning about adding api to __init__
* Plugin migration: fix signature of album metadata processor
* Plugin migration: fix new signature of track metadata processor
* Plugin: if we already have an uuid, pass it to the constructor
* Add typehint to ScriptParser.context
* pygit2 1.19 can be used with Python 3.11
* Update PyPI dependencies
* Remove obsolete `version` key from `MANIFEST.toml` examples
* Plugin info dialog: use QButtonBox and remember size
* Plugin install confirmation: Use QButtonBox and set minimum size
* Plugin install dialog: Removed stretch and remember size
* Use QButtonBox in plugin install dialog
* Ensure cover art provider optons have self.api available
* Added CoverArtProvider.QueueState enum instead of constants
* Type hinting for cover art providers
* migrate_plugin: have a newline at end of .gitignore
* Add plugin_state_changed signal for common plugin state handling
* Adjust migration script to direct imports of all classes from plugin3.api
* Adjust documentation to API import changes
* Expose plugin API relevant classes only in picard.plugin3.api
* PluginApi._get_caller_info should be considered private
* Only keep actually exported objects in plugin3.api module
* Remove obsolete old plugin system options
* Fix plugin_tools_updated signal connection
* Remove unused plugin update functionality
* Remove unused pluginupdatedialog.py
* Clean up unused old plugin system remnants
* Make pluginmanager3 private by renaming to _pluginmanager3
* Use get_plugin_manager() consistently instead of direct pluginmanager3 access
* Renamed BaseAction.NAME to BaseAction.TITLE for consistency
* Provide a base class HasDisplayTitle for classes providing a TITLE
* Fix test failures by adding uuid property to Mock objects
* Simplify UUID check in plugin metadata lookup
* Eliminate unnecessary plugin_uuid intermediate variables
* Fix remaining tests to include uuid property in Mock objects
* Replace remaining plugin.manifest.uuid with plugin.uuid
* Update tests to use Plugin.uuid shortcut property
* Add Plugin.uuid shortcut property and refactor code to use it
* QTranslator should return None, if there is no context
* Add a resync mechanism for do not update persisted config
* Add debug logging when an exception occurs when loading plugins in Options
* Add a specific handling of manifest file read error
* Fix PluginTranslator iterating in deterministic order over locales
* Fixed exception in cover art provider if image has no data
* Update Plugin Tools menu when enabling or disabling a plugin
* extract_plugin_translations: also extract qt strings
* Set api when registering tools menu action
* Allow cover art provider implementations to add image as data
* Set api when registering tools menu action
* Webservice.remove_task was replaced b Webservice.abort_task
* Make specifying OptionPage NAME, TITLE and PARENT optional
* Simplify disabling/re-enabling plugin install widgets during installation
* Add Clear button in search boxes
* Fix URL/local plugin install with a specified ref, skip confirmation
* Fixed remaining wrong use of File.State
* Handle plugins registering duplicates of existing variables:
* Ensure we have a minimal content in Update column (hacky)
* Improve plugin details panel toggle behavior
* Fix table headers display (do not stretch last section)
* Honor do_not_update preference in plugin details update button
* Change plugins3_do_not_update_plugins from setting to persist
* Clean up plugin settings when uninstalled
* Refresh update status after plugin installation
* Fix plugin details pane width changing when selecting different plugins
* Fix plugin table header and improve column layout
* Add registry refresh with conditional requests to Install Plugin dialog
* Prevent network calls during Options dialog initialization
* Fix: Only fetch plugin info on Refresh All button press
* ProcessingImage: set basic ImageInfo from QImage, if not set otherwise
* Moved enum ProcessingTarget to ImageProcessor.Target
* Added processing image to PluginApi
* Better type hinting for cover art processing related classes
* Fix and improve plugin information dialog
* Add a File.score class method
* Implement RefItem dataclass and match version format in update column
* Expose ImageProcessor in PluginApi
* Fixed file state not using new enum
* Sort variables in documentation alphabetically without the leading "_"
* Introduce File.State, File.LookupType and File.ErrorType enums
* Reduce code redundancy with tooltip helper method
* Use state-based tooltips for update checkboxes
* Add tooltips to Update button and checkboxes
* Remember user's plugin update checkbox preferences
* Keep Update button always visible but enable/disable based on selection
* Clear update status cache after plugin update completes
* Show 'In Progress...' in update column during plugin updates
* Fix update column showing 'Available' during plugin updates
* Display actual new version (ref@commit) instead of 'Available'
* Add update column with checkboxes and header button to plugin list
* Merge plugin manager buttons and add contextual Update All
* Better type hints relevant for subclassing File
* Improved type hinting for core API classes
* Fix script variable description shown in tooltips and docs.
* Use partial() and make the code simpler and more reliable
* _refresh_update_status(): use _refresh_single_plugin_update_status()
* Replaced album with track in track_metadata_processors
* Add PluginApi.manifest property
* Export alias for ScriptParser in PluginApi
* PluginApi: add type hints for Callable parameters
* After a Check Updates multi upgrades, refresh update status for all plugins
* Ensure plugin update status is updated after an update
* Refresh update status immediately after plugin ref switch
* Fix unnecessary update checks when plugin state changes
* Fix plugin search slowdown with multi-layered caching
* Fix logic for determining whether to process markdown
* Display translated plugin names if possible in the check updates dialog
* Add debug logging for specific tag fetch failures
* Optimize to fetch only the specific missing ref instead of all tags
* Explicitly fetch tags when switching plugin refs
* Fix tag resolution when switching plugin refs
* Optimize is_blacklisted to return tuple and avoid double registry calls
* Fix test_update_plugin_dirty_with_discard signal emission error
* Remove duplicate _get_ref_type method in favor of ref_utils.get_ref_type
* Fix plugin translations not showing up during dynamic installation
* Fix plugin module reloading by clearing sys.modules cache on disable
* Add plugin module reload during updates
* Fix error page removal when plugins are uninstalled
* Prevent duplicate error pages for failed plugin option pages
* Create error pages for failed plugin option pages in refresh
* Reload plugin module when switching references
* Fix trn() method to also use source locale fallback
* Fix plugin translation fallback to use source locale
* Emit plugin_ref_switched signal after plugin updates
* Fix plugin option pages not appearing immediately after installation
* Revert to simpler plugin page removal logic
* Improve plugin option page removal for uninstalled plugins
* Fix plugin option pages not showing when plugin manager unavailable
* Fix ConfigSection access to use dictionary-style indexing
* Remove sip dependency by fixing Qt object lifecycle management
* Fix plugin option page removal when disabling plugins
* Fix UI crash when opening options after removing all plugins via CLI
* Add new get_ref_type() and fix flaky extraction of git refs
* Move commonly used local imports to top in plugin UI files
* Fix test mocks after moving git_backend import to top
* Move GitObjectType import to top of git/ops.py
* Move git_backend import to top of plugin_metadata.py
* Move git_backend import to top of refs_cache.py
* Move get_config import to top of registry.py
* Move commonly used local imports to top of manager.py
* Move commonly used local imports to top of cli.py
* Update tests to use public registry interface instead of private attributes
* Add public interface for registry data access in async operations
* Use registry public interface instead of accessing raw data in refs cache
* Prevent dict access on RegistryPlugin to enforce object-oriented interface
* Complete elimination of dict access patterns for RegistryPlugin objects
* Fix versioning tests to use RegistryPlugin objects instead of dicts
* Fix failing CLI tests by adding description attribute to mock
* Use InstallablePlugin classes throughout codebase
* Encapsulate blacklist checking in InstallablePlugin
* Build RegistryPlugin objects directly in PluginRegistry
* Add all registry fields as properties to RegistryPlugin
* Fix InstallablePlugin property conflicts with RegistryPlugin
* Simplify install dialog using InstallablePlugin interface
* Make RegistryPlugin inherit from InstallablePlugin
* Add concrete InstallablePlugin subclasses
* Add InstallablePlugin base class
* picard plugins command was renamed picard-plugins, update test scripts
* Fix commit ID extraction from GitRef objects
* Improve ref selector to show current refs and use shared formatting
* Improve default ref display, getting the actual one (semver=last version)
* Introduce small helper _make_label()
* Drop redundant (and buggy) status in Plugin Information dialog
* Improve the display of fields in Plugin Information dialog
* Refresh Registry button should also refresh ref cache
* Replaced deprecated typing type hints
* Adjust API.md for recent API changes without `api` in constructors
* Apply api class property pattern to all plugin classes supposed to be subclassed
* Add a plugin BaseAction with guaranteed api class property
* Add a PluginOptionsPage with guaranteed api class property
* Fix options dialog plugin page restoration
* Preserve original ref when reinstalling plugins
* Add UUID conflict detection to prevent installing plugins with same UUID from different sources
* Remove orphaned docstring from installplugin.py
* Add URL to the tooltip of "Open Homepage" button
* Fix Full Description button to fallback to regular description when long description is unavailable
* Refactor plugin info dialog to use RegistryPlugin wrapper with cached property
* Use i18n description methods in plugin info dialog
* Enhance RegistryPlugin with properties for common registry fields
* Move RegistryPlugin class to registry module
* Add translation support to Install Plugin dialog
* Fix plugin list tooltip to use translated descriptions
* Fix extension points test for UUID-based filtering
* Use Picard's UI language setting for plugin translations
* Enable word wrapping for labels with potentially long content
* Fix details panel toggle button text logic
* Add toggle button to show/hide plugin details panel
* Add i18n wrapper methods for cleaner translation handling
* Fix plugin name translations in tables and dialogs
* Fix plugin name translations
* Fix plugin description translations and full description button
* Make HTTP/HTTPS URLs clickable in plugin information
* Add homepage button to plugin full description dialog
* Add full description button to plugin details widget
* Improve confirmation button texts in plugin dialogs
* Improve install confirmation button text
* Make plugin details widget use same methods as context menu
* Fix plugin details widget to emit same status signals as context menu
* Add detailed status messages for all plugin actions
* Add status update when enabling/disabling plugins
* Remove version info from registry refresh success message
* Replace status label with mini log showing last 3 messages
* Add generic status helper method for timed messages
* Force UI update to show registry refresh status
* Auto-clear status after registry refresh
* Improve status label in plugins options page
* Give more vertical space to plugin list in options page
* Remove parentheses from version display in GUI
* Add ref/tag support to local directory installation
* Add local directory installation option to Install Plugin dialog
* Create dedicated RefSelectorWidget to eliminate code duplication
* Refactor plugin ref selection dialogs to eliminate redundant code
* Use UUID instead of URL for plugin registry lookups where possible
* Fix plugin option page duplication in options dialog
* Moved requirements files for Windows/macOS packages to scripts/packaging
* Moved optional plugin dependencies to extra
* fix: make all plugin manager tables read-only
* feat: make plugin names double-clickable to show info in install dialog
* feat: improve registry refresh feedback and show registry info in tooltip
* fix: use correct method to refresh plugin registry
* fix: add comprehensive error logging to plugin list widget
* fix: add proper error logging to plugin manager GUI operations
* feat: add manual registry refresh functionality
* feat: add tooltips to plugin manager buttons
* fix: force plugin disable during reinstall to unregister extensions
* fix: correct plugin removal method in reinstall
* fix: properly unload plugin before reinstall to prevent duplication
* fix: prevent duplicate entries in plugin list during reinstall
* test: fix switch_ref test signal emission type error
* fix: improve ref type detection to avoid resolving non-existent tags
* fix: resolve plugin update check error for branch refs
* refactor: adopt get_plugin_manager() method across UI components
* feat: add Tagger.get_plugin_manager() method
* perf: complete plugin manager caching in remaining UI components
* perf: cache plugin manager in UI components
* fix: GUI plugin installation now uses versioning scheme like CLI
* Fix version display showing 'Unknown' for installed plugins
* Add proper error handling for direct plugin manager access
* Standardize plugin manager method naming to consistent prefix
* Cache tagger instance in plugin widgets for performance
* Standardize signal connection pattern to direct access
* Complete simplification of redundant plugin manager checks
* Simplify redundant plugin manager checks in UI
* Fix plugin option pages not appearing after installation
* Remove remaining code duplication in plugin info dialog
* Remove duplicated code from plugin details widget
* Remove duplicated code from plugin list widget
* Add plugin utility methods to manager to reduce UI code duplication
* Fix plugin option pages not appearing after installation
* Fix GUI plugin update detection to use manager's corrected logic
* Fix plugin manager check_updates bug with version tags
* Fix GUI plugin update detection and versioning scheme display
* Improve plugin UI display and usability
* Add dynamic plugin option page management
* Fix UninstallPluginDialog - add missing _uninstall method
* Add comprehensive install confirmation dialog with trust warnings and ref selection
* Fix version display to prioritize git ref over manifest version
* Add signal-based refresh for switch ref operation
* Fix switch ref dialog - extract ref names from dict objects
* Fix plugin name access - call name() as method not property
* Make dialog labels selectable for copying text
* Fix switch ref URL access - use plugin metadata instead of source.url
* Add Switch Ref action to installed plugin context menu
* Add Reinstall action to installed plugin context menu
* Fix plugin list refresh after uninstall - remove plugin from manager list
* Fix installed plugin list refresh by filtering out disabled plugins
* Merge uninstall dialogs - use shared UninstallPluginDialog everywhere
* Replace timer with async uninstall and callback for proper list refresh
* Fix plugin list refresh after uninstall using delayed timer
* Add custom uninstall dialog with purge configuration option
* Fix QTimer import - use QtCore.QTimer instead of QtWidgets.QTimer
* Fix UUID filtering - access uuid as property not method
* Filter out installed plugins from registry table
* Refactor plugin info dialog to eliminate code duplication
* Improve installed plugin list display and add Information dialog
* Add description tooltips to installed plugin list
* Add registry plugin list with search, filtering, and detailed info dialog
* Use constants for column and tab positions instead of hardcoded numbers
* Remove redundant Status column from plugin list
* Separate checkbox from plugin name into dedicated column
* Add registry plugin installation support to install dialog
* Implement Plugin v3 GUI with robust enable/disable functionality
* Fix FormatRegistry not updated fully on plugin_enabled signal
* CI: run pypi-bdist for Python 3.14
* CI: run codeql only on code file changes
* CI: run linting steps only on relevant changes
* CI: run lint only if relevant files changed
* CI: run tests only if relevant files changed
* CI: restrict packaging workflow to specific paths also on pull requests
* CI: replaced code coverage upload to Codacy with HTML report artifact
* Removed run_codacy_analaysis.sh
* Added pytest-cov to dev dependencies and moved config to pyproject.toml
* Added ProviderOptions to API.md documentation
* Run CI tests with Python 3.14
* Upgrade pypi dependencies
* Ensure executable flag is set properly
* Fix typo
* Fix linting issues
* CI: Removed validate-xdg-metadata workflow
* Plugin migration: Add type hint for PluginApi to enable function
* Plugin migration: Always add PluginApi import statement, if needed
* Adapt plugin migration to class aliases in PluginApi
* Add coverart ProviderOptions to PluginApi
* Have migrate_plugin generate a .gitignore file
* Ensure executable flag is set properly
* Added zed editor config dir to gitignore
* Remoged Codacy badge from README
* Fixed picard-plugins CLI debug output
* Updated docs/PLUGINSv3 for CLI script name changes
* Grouped arguments for picard-plugins CLI and added description and epilog
* Separated plugin CLI commands into picard-plugins script
* SettingConfigSection: use parent class methods when no profile is matched
* Option: disable the check for double registration, it will be a problem with plugin options
* Translated using Weblate (Finnish)
* Removed prospector and pylint config files
* Removed markdownlint and remark config files
* Removed Codacy from CI workflow and configuration
* Enable pymarkdownlnt no-emphasis-as-heading
* Fix Markdown linting issues
* refactor: move pygit2_backend.py to picard/git/backends/pygit2.py
* refactor: rename test_git_backend.py to test_git.py
* refactor: complete git module refactoring
* refactor: move git_ops.py and git_utils.py to picard/git/
* refactor: move git_factory.py and pygit2_backend.py to picard/git/
* refactor: move git_backend.py to picard/git/backend.py
* Use pymarkdownlnt to lint Markdown files
* Improve user friendliness of CONTRIBUTING.md
* Use compact style for markdown tables
* Fix markdown issues
* CONTRIBUTING: Remove useless example
* Markdownlint: atx headers
* Revamp and update INSTALL.md and CONTRIBUTING.md
* DSDIFF format support is not treated as optional
* Update tag date sanitize options when formats change
* Update file browser file type filter if registered formats have changed
* PICARD-2990: Rebuild FormatRegistry extension map on plugin disable
* Introduce a FormatRegistry class to handle registered file formats
* Fix critical fetch_remote_refs bug in git backend
* Regenerate requirements*.txt files
* If --debug-opts is used, set DEBUG log level even with CLI mode
* Display pygit2 version in About dialog and --long-version
* Handle the case no git backend is available, just disable plugin manager
* Complete git backend abstraction and optimize remote fetching
* Fix test scripts to use --remove instead of --uninstalled (it was renamed)
* --clean-config: do not error if there's no config (print & exit with success)
* Add a warning about register_ui_init (removed from V3 plugin API)
* PICARD-3147: Remove ui_init extension point
* PICARD-3133: Add register_file_pre_save_processor to PluginApi
* Remove redundent `self.plugin_tools_menu.clear()`
* Add to documentation
* Make menu more generic:
* Fix crash handler hanging and add Ctrl+C support
* Add menu item for test actions
* Fix RuntimeError when TailLogger is deleted during logging
* Make blacklisted plugins message box translatable
* Fixed info dialog not closing on button click
* Fix order and improve logging output so it is clear
* Improve translators logging output, displaying plugin id if possible
* Add signals to PluginManager for plugin install, uninstall, enable, disable
* Update tests
* Translators: only reinstall if something changed
* _translators -> _qt_translators
* Drop extra debug info and only add a translator if there are qt. keys
* translations_updated -> _qt_translators_updated
* Rework the loading process for translators
* PluginTranslator: pass optional parent to QTranslator
* PluginTranslator: implement isEmpty()
* Removed ext_point_formats.changed handling from filebrowser again
* Revert "Add changed signal to ExtensionPoint"
* Revert "Fix tests by not patching global ExtensionPoints"
* Revert "Avoid patching ext_point_script_functions in tests"
* Revert "Try to prevent Qt from deleting ExtensionPoint objects during tests"
* Revert "Fix ExtensionPoint deletion by storing parent at module level"
* plugin translations: fix passing missing translations to next translator
* Fixed crash on start if file browser is hidden
* Plugins CLI: Allow -u shortcut for --update
* Plugins CLI: Renamed --uninstall / -u to --remove / -r
* Make markdown validation optional for minimal dependency testing
* Add test for markdown parsing error handling
* Use markdown module to validate long_description syntax
* Clarify Markdown support and add validation for long_description
* Add detection for album._requests pattern in migration script
* Document album background task migration from v2 to v3
* Fix ExtensionPoint deletion by storing parent at module level
* Remove classes exported by PluginApi from plugin3.api exports
* Add request_factory to prevent race conditions in task request registration
* Try to prevent Qt from deleting ExtensionPoint objects during tests
* Fix method name: cancel_requests -> cancel_tasks
* Fix type hints in plugin3/manager.py and api.py
* Change _plugin_dir from str to Path
* Fix last type issues in api.py and plugin.py
* Fix final type hints in api.py and i18n.py
* Fix remaining type hints in plugin3 files
* Add type hint for resolved_ref and assertions for _module
* Add more type hints and assertions in plugin.py
* Fix Optional type hints in plugin3
* Add missing type hints for mypy
* Add more type hints to Plugin API
* Add plugin_dir property to PluginApi
* Renamed album requests to album tasks
* Renamed webservice RequestTask to PendingRequest
* Avoid patching ext_point_script_functions in tests
* Install/remove PluginApi qt translator when enabling/disabling plugin
* Consistently use tomli as tomllib fallback
* Add unit tests for abort_task functionality
* Fix webservice tests for RequestTask changes
* Make remove_task private (_remove_task)
* Silently ignore canceled operations in reply handler
* Implement proper abort_task API in webservice layer
* Fix cancellation for both queued and active requests
* Warn when request timeout exceeds network timeout
* Add timeout handling for album requests
* Document set_album_request_reply() in plugin API
* Implement request cancellation when albums are removed (PICARD-1507)
* Provide a more generic PluginApi.deprecation_warning() and outputs messages once
* Add deprecation warning to album._requests getter
* Use untranslated cover art type in request description
* Remove redundant _finalize_loading call from cover art code
* Identify plugin in album._requests deprecation warning
* Add backward compatibility for album._requests
* Fix AttributeError when cover art arrives after album finalization
* Document album request management API for plugins
* Add plugin API methods for album request management
* Replace album request counter with typed request tracking
* Fixed type hints for PluginApi methods
* Translated using Weblate (Japanese)
* Translated using Weblate (Dutch)
* Fix tests by not patching global ExtensionPoints
* Update file browser file type filter if registered formats have changed
* Add changed signal to ExtensionPoint
* Fix Qt standard button translations by keeping translator reference
* Fix plugin version logging to omit version when None
* Ignore Python cache files in plugin dirty checks
* Set a type hint on PluginApi.get_api
* Raise TypeError in ConfigSection.register_option if default is None
* Removed ConfigSection.get again
* Upgrade to actions/checkout@v6 in lint.yml
* Update API documentation for ConfigSection.register_option
* Add a ConfigSection.register_option method
* Use `checkout@v5`. Use consistent indentation for `steps` sections.
* Use conditional to filter `validate-xdg-metadata` paths on `push`
* Combine static checks into one github action file
* Add settings key checks to github workflows
* Ensure urllib >= 2.6.0 (CVE-2025-66471)
* Fix plugin_config.get() returning boolean strings instead of booleans
* Update BaseAction example to include translation of the action name
* get_current_locale(): just return the lang if encoding is None
* Add a small helper get_current_locale() and fix another call site
* set_locale_from_env(): return the actual locale
* Log plugin version and commit ID when enabling
* Fix incorrect examples, BaseAction.NAME shouldn't be marked for translation
* Add t_() translation marker function with smart extractor
* Fix API.md: correct api.window to api.tagger.window
* Fix API.md: correct api.config to api.plugin_config in example
* ExtensionPoint: Allow classes from plugin sub-modules
* Add PluginApi.get_api() class method for convenient API access
* Add a script to extract tr()/trn() plugin translations
* Add debug log when loading source locale translation file
* Improve translation loading with validation, lazy loading, and debugging
* Require quoted keys in TOML translations and warn on nested structures
* Support both TOML and JSON formats for plugin translations
* Add integration test for plugin translation loading on enable
* Fix plugin translations not being loaded on enable
* Fix trn() to use standard n parameter for plural forms
* Fix plugin translations to use Picard's UI language setting
* Fix clean-config to not show 'not found' error for orphaned configs
* Allow reinstalling plugins by any identifier (name/UUID/plugin_id)
* Use plugin UUID instead of plugin_id for config storage
* build(deps): bump actions/checkout from 5 to 6
* Add orphaned plugin config detection and listing
* Fix plugin config cleanup not removing settings from disk
* Fix test_config and test_profiles to restore logging state
* Fix logger propagation test
* Add plugin_id property to PluginApi
* Include plugin ID in action error messages
* Add error handling to plugin action callbacks
* Only prompt to delete saved options if plugin has any
* Update documentation and help text for 'saved options'
* Improve wording: 'saved options' instead of 'configuration'
* Fix Windows test failure with file handle
* Add comprehensive test for plugin_config operations
* Fix ConfigSection.get() to work without registered Options
* Add test for plugin config with registered Options
* Add test for plugin config persistence
* Fix plugin settings not being removed on purge
* Fix plugin logger not propagating to main logger
* Move REFS_CACHE constants to refs_cache.py
* Reorganize constants for registry compatibility
* Make validator.py truly standalone by inlining constants
* Refactor _validate_locale_field to reuse _validate_string_field
* Add _validate_locale_field() helper for consistency
* Further improve validator code with enhanced helpers
* Refactor validator to reduce code redundancy
* Add validation for remaining optional manifest fields
* Add categories field validation to manifest validator
* Add source_locale validation to manifest validator
* Add translation methods to API.md documentation
* Add public get_locale() method to PluginApi
* Add translated test plugin and integration tests
* Add source_locale to manifest template and documentation
* Refactor Qt translator tests to use TemporaryDirectory
* Refactor translation tests to use TemporaryDirectory context manager
* Fix Qt translator tests to use TemporaryDirectory context manager
* Implement Qt Designer integration (Phase 3)
* Implement plural forms support with trn() method (Phase 2.2)
* Implement CLDR plural rules (Phase 2.1)
* Implement translation lookup with fallback (Phase 1.3)
* Implement translation file loading (Phase 1.1-1.2)
* Implement basic tr() method for plugin translations
* Add tests for plugin translation system (Phase 1)
* docs: Add implementation plan for plugin translation system
* docs: Add warning about relying on Picard's translations in plugins
* docs: Document qt.* as reserved prefix for Qt Designer files
* docs: Remove redundant PROPOSED section from TRANSLATIONS.md
* docs: Add Qt Designer (.ui files) integration with automatic QTranslator
* docs: Remove api.gettext(), consolidate to api.tr() and api.trn() approach
* docs: Fix typos and improve clarity in TRANSLATIONS.md
* docs: Add plural forms support with api.trn() to TRANSLATIONS.md
* docs: Document extraction tool behavior for api.tr() without text parameter
* docs: Update api.tr() signature to key-first with optional text parameter
* docs: Update registry examples from JSON to TOML format in TRANSLATIONS.md
* docs: Clarify Weblate TOML support status in TRANSLATIONS.md
* docs: Add Weblate TOML format support information to TRANSLATIONS.md
* docs: Remove outdated GIT_REFS_FEATURE.md (content migrated to REGISTRY.md)
* docs: Remove Status and Phase columns from CLI.md commands summary
* Minor doc fixes
* docs: Document async operations in GUI.md
* Fix plugin action menu building
* Deduplicate plugin actions in track context menu
* Fix plugin actions not showing in context menus
* Clarify that api parameter is always provided for plugins
* Remove parent parameter from plugin examples
* Clarify parent parameter usage in Best Practices
* Remove redundant self.api assignments from examples
* Fix class inheritance in API.md examples
* Fix API.md examples to properly use self.api
* Add missing methods to PluginApi
* Update CLI docs: --reinstall now supports registry ID and UUID
* Support reinstalling plugins by UUID
* Removed translator's e-mail upon request
* fix: add tomli fallback in test_plugins3_helpers
* fix: add tomli fallback for Python < 3.11
* test: replace tomli-w with plain TOML strings
* docs: clarify BaseAction __init__ pattern in plugin API
* Registry format was migrated from json to TOML, update code & docs
* Add unit tests for plugin3 asyncops module
* Add plugin3 asyncops module for GUI integration
* Fix: Enable plugins installed from local URLs
* Remove strict category validation for forward compatibility
* Move manifest template generation to manifest.py
* Use CATEGORIES constant in manifest template
* Fix CLI tests after refactoring
* Move local repo dirty check to git_utils
* Move plugin ID suggestion logic to manager
* Move registry search/filter logic to manager
* Add support for file:// URLs in registry
* Add local registry support to test script
* Add clear_cache method to properly invalidate refs cache
* Clear refs cache when refreshing registry
* Remove unused available_refs from PluginRefNotFoundError
* Simplify --switch-ref error to suggest --list-refs
* Treat cache unmarshal errors as old/corrupted cache
* Add version field to refs and registry caches
* Add --list-refs test to local plugin test script
* Resolve annotated tags to actual commits in --list-refs
* Improve --list-refs output with commit IDs
* Fix branch switching by detaching HEAD before force-creating branch
* Update tests for tag resolution and PluginMetadata changes
* Add comprehensive tests for annotated and lightweight tag resolution
* Fix CLI to check loaded plugins for duplicate installs
* Resolve annotated tags to actual commit IDs in PluginSourceGit
* Move PluginMetadata dataclass to plugin_metadata.py
* Drop packaging (external dependency) and use picard.version
* Add missing _handle_exception()
* If no version in MANIFEST, just return None and simplify display
* All CLI command functions are now _cmd_<cli command name>
* Add plugin i18n display support with --locale option
* refactor: extract git/path utilities to separate module
* refactor: move is_immutable_ref to GitOperations
* refactor: remove GUI code from manager (blacklist warning)
* refactor: move version preference logic from CLI to manager
* refactor: move ref selection logic from CLI to manager
* refactor: move find_plugin from CLI to manager layer
* Move pathlib and tempfile imports at top
* Use MAX_VERSIONS constant instead of hardcoded number
* Make more use of _handle_exception() as it displays traceback in debug mode
* Introduce _read_manifest() and reduce code redundancy
* Update manifest template to match documentation
* Add test script for local plugin operations with dummy git repository
* Fix: update and switch-ref fall back to registry for manually installed plugins
* Fix: list-refs falls back to registry for manually installed plugins
* Refactor: Move packaging.version and remove redundant imports in plugin3
* Refactor: Move safe local imports to top of plugin3 files
* Refactor: Move local imports to top of plugin3 files
* Feature: Auto-enable plugins after CLI install
* Refactor: Flatten plugins3 config keys and remove ConfigOperations
* Fix: Remove orphaned init_plugins code from refactoring
* Optimize: Speed up test_plugins3_registry.py by mocking time.sleep
* Fix: test_plugins3_manager.py failure
* Fix: test_plugins3_install.py failures
* Fix: test_plugins3_registry.py failures
* Fix: Restore init_plugins() method removed during refactoring
* Expand test script to 31 scenarios covering all major commands
* Add --refresh-registry and --switch-ref tests to script
* Fix: --switch-ref returning None instead of result tuple
* Fix: --refresh-registry failing with AttributeError
* Expand plugin test script to cover more commands
* Fix: --update command unpacking errors
* Fix: --list-refs not working for installed plugins
* Add wrapper methods for CLI backward compatibility
* Add get_plugin_refs_info wrapper method to manager
* Refactor: extract config operations to separate module
* Refactor: extract validation to separate module
* Refactor: extract git operations to separate module
* Refactor: extract plugin metadata to separate module
* Refactor: extract refs caching to separate module
* Update CLI.md documentation for UUID support and recent changes
* Add UUID lookup support for registry plugins
* Filter out ^{} dereferenced annotated tags from --list-refs output
* Show current ref/tag in --list-refs output
* Make _parse_versioning_scheme return compiled regex with error handling
* Optimize cache: reuse fetch_all_git_refs in _fetch_version_tags
* Rename VERSION_TAG_CACHE_FILE to REFS_CACHE_FILE for consistency
* Rename VERSION_TAG_CACHE_TTL to REFS_CACHE_TTL for consistency
* Add caching for fetch_all_git_refs to avoid unnecessary network traffic
* Refactor: add _fetch_remote_refs helper to reduce code duplication
* Refactor: move business logic from CLI to manager for reusability
* Update CLI.md documentation for --list-refs command
* Add --list-refs command to show available git refs for plugins
* Make enable_plugin() idempotent as well
* Fix uninstall: don't try to disable already-disabled plugins
* Remove --status command, enhance --list and --info with comprehensive details
* Translated using Weblate (Chinese (Simplified Han script))
* Translated using Weblate (Dutch)
* Update cache from local repo after fetch in --check-updates
* Add disk cache for version tags with 1-hour TTL
* Replace deprecated ls_remotes() with list_heads()
* Update --status to display git tag as version
* Display version tags in --list, --info, --browse, --search
* Remove version field from MANIFEST (no longer required)
* Fix --refresh-registry to work with any command combination
* docs: Move versioning behavior to Install from Registry section
* Remove last_updated field from registry
* Add debug mode support to plugin CLI
* Fix: Convert repo.references to list to avoid len() error
* Add versioning_scheme support for automatic version discovery
* Add a note about order in REGISTRY_TRUST_LEVELS
* Store datetime format for CLI display in DATETIME_FORMAT constant
* Display registry last updated time in local timezone
* docs: add TODO for picard.musicbrainz.org registry endpoint
* docs: update REGISTRY.md with multi-URL fallback configuration
* Implement multi-URL fallback for plugin registry
* Change DEFAULT_PLUGIN_REGISTRY_URL to GitHub raw URL
* docs: update PLUGINSV3 docs to match actual registry implementation
* Use relative import in validator.py for easier code sharing
* Show commit date in update output for all commands
* Use consistent format in --update with --update-all
* Use d_name() for plugin_id colorization in --update-all
* Use same colorization in --update-all as --check-updates
* Use UpdateAllResult and show tag transitions in --update-all
* Use UpdateCheck NamedTuple and show commit IDs with tags
* Show tag transitions in --check-updates output
* Refactor update_plugin to return UpdateResult NamedTuple
* Save updated ref after tag update
* Fix --check-updates to properly detect tag updates
* Add confirmation when using --ref with multiple plugins
* Sort plugins alphabetically in --browse and --search commands
* Sort plugins by name in --list command
* Replace function wrappers with direct class usage
* Refactor create_cli_args() to MockCliArgs class
* Refactor create_mock_plugin() to MockPlugin class
* Replace remaining mock_plugin = Mock() with create_mock_plugin()
* Replace mock_plugin = Mock() with create_mock_plugin()
* Replace remaining args = Mock() with create_cli_args() in install tests
* Add MockTagger helper and use it in tests
* Replace remaining Mock() with MockPluginManager() in tests
* Use create_cli_args() instead of Mock() for args in tests
* Fix tests: use MockPluginManager with sensible defaults
* Auto-discard changes with --reinstall --yes
* Track and allow uninstalling failed/corrupted plugins
* Fix plugin count to only count installed enabled plugins
* Fix api to self.api conversion in class methods
* Add Plugins parent page in options dialog
* Update log checking instructions to use stderr
* Remove outdated success rate statistic from overview
* Replace specific migration statistics with generic indication
* Fix documentation links and remove rdswift example
* Strip origin/ prefix from checkout_branch in git clone
* Fix error handling to not catch branch-level not found errors
* Add repository naming convention to migration guide
* Fix API reference table in MIGRATION.md
* Document tagger property in API reference
* Add tagger property to PluginApi
* Handle instantiated action/page variables in migration script
* Fix migration script to skip generated files instead of creating .orig
* Sort plugin3 API imports alphabetically in migration script
* Refactor import handling in migration script
* Fix multi-line CoverArtProvider import handling in migration script
* Fix multi-line BaseAction import handling in migration script
* Fix multi-line OptionsPage import handling in migration script
* Add __all__ to plugin API and fix documentation examples
* Keep File and CoverArtProvider as direct imports in migration
* Fix OptionsPage and BaseAction imports in migration script
* Improve error messages for repository not found and auth failures
* Fix authentication infinite retry loop for private repos
* Show available refs when requested ref is not found
* Add authentication support for private git repositories
* Fix git ref resolution for local repositories
* Cache registry fetch failures to prevent repeated 404 warnings
* Add unit test for ConfigSection.get() method
* Expand plugin_config documentation with examples
* Add .get() method to ConfigSection for consistency
* Document config option migration in guides
* Fix class conversion to use word boundaries
* Remove 'options' class attribute from OptionsPage classes
* Add automatic config option conversion to migration script
* Add Metadata class to PluginApi
* Add CoverArtProvider to migration script
* Expose CoverArtProvider through PluginApi and update docs
* Clarify enable/disable functions in plugin API docs
* Add missing extension points to API documentation
* Add missing extension points to migration script
* Rename register_plugin_uuid to set_plugin_uuid
* Add version tag checking to --check-updates
* Clarify that only version tags auto-update
* Update CLI.md to reflect automatic tag updates
* Update docs: automatic tag updates now supported
* Add automatic tag update support to plugin system
* Document tag update limitation and workaround
* Clarify plugin release process supports both branches and tags
* Use release branches instead of tags for plugin releases
* Fix migration tool reference to use scripts/migrate_plugin.py
* Remove translation/locale examples from V2 and V3 examples
* Mark plugin translations as work in progress
* Add comprehensive PluginApi documentation
* Remove obsolete global _api pattern from docs
* Update migration docs with latest improvements
* Improve migration script: copy all files, handle conflicts, format safely
* Phase 1: Auto-detect instance method processor registration
* Auto-add api parameter to OptionsPage/BaseAction __init__
* Preserve function metadata when wrapping with partial()
* Step 4: Update documentation for new API access pattern
* Step 3: Update migration script for new API access pattern
* Fix tests for partial wrapping of processors
* Step 2: Pass API to OptionsPage and BaseAction
* Step 1: Wrap plugin processors with partial() to inject API
* Document module-level _api pattern for V3 plugins
* Add noqa comments to pyuic6-generated imports
* Skip private methods in processor detection
* Improve method-based processor detection in migration script
* Add commonly used classes to PluginApi
* Improve UI prefix detection for absolute imports
* Fix UI file naming to match import statements
* Add module-level _api variable pattern in migration script
* Add warning for method-based processors in migration script
* Fix tests for optional authors/license fields
* Make authors, maintainers, license fields optional in MANIFEST.toml
* Remove ast.Str handling from migrate_plugin.py
* Update WEBSITE.md with actual validation code structure
* Refactor manifest.py to use standalone validator
* Add standalone manifest validator module
* Refactor manifest.py to use constants from constants.py
* Add plugin3/constants.py with shared plugin system constants
* chore: Remove accidentally committed files
* feat: Support wildcard imports in plugin migration script
* feat: Comprehensive plugin v2→v3 migration script improvements
* docs: Update migration guides with automated tool capabilities
* Add proposed alternative translation approach to plugin documentation
* Move retry configuration to constants
* Add retry logic for git clone and fetch operations
* Add retry logic for registry fetch operations
* Warn when installing plugin via URL that exists in registry
* Clarify that --refresh-registry can be combined with other commands
* Use ref auto-selection when installing by registry ID
* Add ref selection helper for plugin installation
* Add multi-ref test plugin to registry
* Convert test registry to use refs format
* Fix documentation inconsistencies in git refs feature
* Add GIT_REFS_FEATURE.md to See Also sections
* Add git refs support to plugin registry
* Add git commit helper function
* Refactor: Add test helpers to reduce code duplication
* Optimize: Add LRU cache to URL normalization
* Refactor: Reuse manifest loading from manager in CLI
* Refactor: Extract registry lazy-loading to helper method
* Remove registry_id storage, look it up dynamically from registry
* Extract manifest reading into helper method
* Add hash_string helper and remove hash truncation
* Replace MD5 with SHA1 for hash generation
* Remove duplicate _check_dirty_working_dir method
* Warn users when updating plugins pinned to immutable refs
* Refactor filter description building to avoid code duplication
* Include filter info in --search no results message
* Improve --browse message when filters return no results
* Simplify blacklist check to avoid double cloning
* Refactor to generic get_blacklist_types() method
* Optimize UUID blacklist check to only clone when needed
* Check UUID blacklist before trust prompts during install
* Fix --validate with tags and commits in shallow clones
* Fix Version object string concatenation error in plugin update
* fix: Add plugin_id and state to mock_plugin in extension_points tests
* fix: Update tests for registry cache_dir changes
* refactor: Add custom exceptions for registry operations
* docs: Mark --refresh-registry as done in CLI.md
* feat: Add --refresh-registry CLI command
* refactor: Use URL-specific cache and add get_registry_info()
* docs: Add backend architecture section to GUI.md for developers
* Implement --trust-community flag to skip community plugin warnings
* Update CLI.md to document enhanced prefix matching
* Optimize _find_plugin to support prefix matching for all identifiers
* Show registry ID in --info output
* Document registry ID usage in CLI.md
* Store and use registry ID for plugin operations
* Add fuzzy matching suggestions for registry ID not found
* Fix early reinstall check to also use original argument format
* Fix reinstall suggestion to use original argument format
* Add comprehensive exception handling to all CLI plugin commands
* Handle new plugin exceptions in CLI enable/disable commands
* Replace remaining ValueError with specific plugin exceptions
* Replace ValueError with specific PluginManagerError subclasses
* Add PluginManagerError base exception class
* Add PluginAlreadyInstalledError exception for better separation
* Fix install output: remove duplicate message and use plugin_id
* Improve browse/search output: show name first, registry ID last
* Clarify registry ID vs plugin_id in install documentation
* Refactor display methods: split d_plugin_name into d_id and d_name
* Add consistent colorization to all plugin_id references in CLI
* Add colorization to uninstall plugin prompts and messages
* Document Plugin ID prefix matching in CLI.md
* Add Plugin ID prefix matching to plugin finder
* Update CLI documentation to use 'Plugin ID' terminology
* Rename plugin.name to plugin.plugin_id for clarity
* Mark implemented commands as Done in CLI documentation
* Update CLI documentation for --reinstall and --check-updates
* Fix tag/commit detection using try-catch instead of heuristics
* Add --check-blacklist command
* Colorize more command suggestions
* Add colorization for commands and options
* Check if already installed before showing warnings
* Check if plugin already installed before cloning
* Improve 'already installed' error message
* Check blacklist before prompting user to install
* Add colorization to install, update, and switch-ref output
* Optimize: reuse temp git repos on retry
* Add single-branch optimization to update and switch-ref
* Add single-branch optimization to plugin installation
* Refactor: reduce code duplication in dirty check handling
* Add dirty working dir check to install_plugin with --reinstall
* Add dirty working dir check to switch_ref
* Add dirty working dir check to update_plugin
* Add PluginDirtyError exception and dirty working dir detection
* Use shallow clones for validate and manifest commands
* Use atomic rename for plugin installation and add cleanup
* Fix plugin validate command with git URLs
* fix: use consistent colors for enabled/disabled status
* fix: suppress INFO logs in plugin CLI output
* fix: suppress git clone progress output
* feat: colorize blacklist bypass warning in red
* feat: colorize security warning messages in red
* refactor: add yesno() helper method for prompts
* feat: add colorized prompts with d_prompt() method
* fix: clarify enabled/disabled count in --list output
* fix: apply d_* display methods to all plugin commands
* feat: add universal color system with semantic display methods
* fix: add time to commit date in check-updates output
* feat: add commit date to check-updates output
* fix: improve update output when version doesn't change
* fix: downgrade registry fetch error to debug level
* fix: improve check_updates ref resolution and suppress progress output
* test: remove unused legacy v2 test plugins
* refactor: remove legacy v2 plugin system
* test: add comprehensive tests for extension_points
* feat: update ExtensionPoint to support plugin v3 UUIDs
* docs: update plugin v3 design decisions and translation implementation
* fix: rollback git changes on manifest validation failure in switch-ref
* fix: make path tests Windows-compatible
* fix: replace deprecated tempfile.mktemp with NamedTemporaryFile
* docs: add --no-color option to CLI documentation
* fix: handle None from find_spec in module path detection
* feat: add --no-color option to plugins CLI
* test: add validate and manifest command tests
* test: improve cli.py coverage to 55%
* test: improve cli.py coverage to 52%
* test: improve plugin.py coverage to 73%
* test: improve registry.py coverage to 99%
* test: improve plugin3 test coverage to 70%
* Add tests for PluginOutput class
* Add tests for PluginApi registration methods
* Add git repository requirement to Testing section
* Add uuid field to all MANIFEST examples in migration guide
* Ensure all MANIFEST examples show required uuid field
* Document plugin identification methods in CLI.md
* Update CLI.md to show UUID in --info output
* Update ROADMAP.md and STATUS.md with recent improvements
* Use standard UUID format with hyphens in directory names
* Use full UUID in plugin directory names to guarantee uniqueness
* Add logging for plugin initialization
* Improve plugin registry tests with centralized test data
* Add UUID to --info CLI output
* Add helper functions for plugin tests
* Support UUID prefix matching in plugin finder
* Handle ambiguous plugin names when multiple plugins match
* Support finding plugins by manifest name, directory name, or UUID
* Show manifest name instead of directory name in plugin list
* Auto-detect current branch when installing from local git repo
* Use UUID instead of plugin name in enabled_plugins config
* Add helper for setting config values
* Add config helper for nested value access
* Remove duplicate shutil imports
* Add helper for plugin UUID validation
* Extract manifest validation error formatting to helper
* Combine sanitize_plugin_name into get_plugin_directory_name
* Extract metadata preservation logic to helper method
* Extract redirect detection logic to helper method
* Consolidate duplicate plugin existence checks
* Simplify PluginMetadata.to_dict() using dataclasses.asdict
* Rename plugin_id to plugin_name for clarity
* Use UUID as metadata key instead of plugin name
* Refactor: Use PluginMetadata dataclass for cleaner API
* Track original URL/UUID in metadata when redirects are followed
* Rename url_pattern to url_regex for clarity
* Fix test mock for UUID changes
* Step 4: Verify redirects work with CLI and real plugin
* Step 3: Add test registry with redirects for real plugin
* Step 2: Add tests for URL and UUID redirects
* Step 1: Add redirect support to find_plugin()
* Add redirect implementation notes to REGISTRY.md
* Add UUID generation to manifest template and migration script
* Implement UUID support for plugin identity
* Document UUID as required field and registry redirects
* Fix blacklist check for local repository installations
* Check for .git directory in get_local_repository_path()
* Add test-registry.json to gitignore (to prevent accidental commits)
* Add get_local_repository_path() helper
* Fix is_local_path() to handle scp-like git URLs
* Add get_local_path() helper to reduce code duplication
* Add is_local_path() helper and use consistently
* Improve local path detection in normalize_git_url
* Support local git URLs in plugin registry for testing
* Document PICARD_PLUGIN_REGISTRY_URL environment variable
* Fix plugin enable/disable in CLI mode
* Add remote refs fallback for cloned repos without local branches
* Add more robust fallback for finding branches in cloned repos
* Fix HEAD resolution when cloning local repos without HEAD set
* Warn when installing from local git repository with uncommitted changes
* Show all optional MANIFEST fields in --info output
* Hide ref when it's a commit hash in git info display
* Display help when plugins command is run with no action
* Add note about --manifest command in migration guide
* Improve --list output format
* Display raw semver strings instead of normalized Version objects
* Add --manifest command to show MANIFEST.toml template or from plugin
* Add all optional manifest fields to --validate output
* Show complete manifest information in --validate output
* Clean up output messages and add nl() method
* Reorganize --info output with description on one line
* Add short_commit_id() helper function for consistent commit hash display
* Save the actual resolved ref for accurate git reference tracking
* Validate that --ref is only used with --install or --validate
* Use repository's default branch instead of hardcoding 'main'
* Save ref and commit for git repos even without explicit --ref
* Add trust level warning for unregistered plugins during installation
* Use compact format for git info in plugin list/info
* Show git ref and commit in plugin list and info commands
* Fix plugin metadata persistence and ref handling for local git repos
* Use minimal_init for plugin CLI commands instead of full Tagger
* Make PluginManager work without tagger for CLI mode
* Add minimal_init function for CLI commands without GUI
* Suppress Qt logging messages for plugin commands
* Fix plugin info command and config persistence
* Fix plugin enabled state persistence to config
* Add newly installed plugins to plugins list immediately
* Fix plugin installation from local directories and name truncation
* Add tests for PICARD_PLUGIN_REGISTRY_URL environment variable
* Move plugin registry URL to const/defaults.py
* Add environment variable support for plugin registry URL
* Fix crash handler when tagger is not fully initialized
* Support local directory validation in plugin CLI
* Make pygit2 tests optional when pygit2 is not available
* Make plugin3 system optional when pygit2 is unavailable
* Make pygit2 import optional
* Add Qt 6.5+ ColorScheme compatibility check
* Fix config.setting access in plugin manager
* Docs: Update debug logging instructions in Plugin2to3MigrationGuide
* Update requirements files
* Migrate from macos-13 to macos-14 in run-tests workflow
* Revert all workflows to Python 3.13
* Revert package-windows to Python 3.13
* Remove Python 3.14 from PyPI build matrix
* Add gettext to Linux dependencies in package-pypi workflow
* Install from pyproject.toml in package-pypi workflow
* Add Python 3.14 support with conditional pygit2 version
* Update pygit2 requirement to ~=1.18 for Python 3.14 support
* CI: Add LIBPATH for libgit2 on Windows
* CI: Use vcpkg instead of chocolatey for libgit2 on Windows
* CI: Add debug output to find libgit2 files on Windows
* CI: Fix libgit2 paths to use chocolatey installation directory
* CI: Add debug output for libgit2 installation on Windows
* CI: Exclude PyQt6-Qt6 6.10.* in test-requirements
* Skip migration tests when script not available
* CI: Remove test run from macOS packaging workflow
* CI: Install pytest before running tests in Windows packaging
* CI: Set INCLUDE and LIB paths for libgit2 on Windows
* Fix Windows file handle leak in install_plugin error cleanup
* Fix plugin migration test isolation
* Fix Windows file handle leaks in git plugin tests
* CI: Add libgit2 installation to PyPI packaging workflows
* CI: Install libgit2 for pygit2 dependency
* Fix git plugin tests: handle remote refs and set HEAD properly
* Set proper paths for libgit2 on macOS builds
* Install libgit2 for macOS builds and handle pip install failures
* Install libgit2 for Windows builds and handle pip install failures
* Fix Python 3.10 compatibility in migration tests
* Add monorepo design document
* Add comprehensive status document for V3 plugin system
* Add comprehensive Plugin V2 to V3 migration guide
* Add Qt5 to Qt6 conversion for UI files
* Enhance UI file pattern detection for complex plugins
* Add multi-file plugin support to migration tool
* Add support for script functions and cover art providers to migration tool
* Add register_options_page support to migration tool
* Enhanced migration tool: UI actions, escaped quotes, and line continuations
* Fix migration tool: proper quote handling and test fixes
* Phase 2.4: Enhanced migration tool with proper TOML escaping and description handling
* Mark Phase 3.4 as complete in ROADMAP
* Implement Phase 3.4: Blacklist Enforcement
* Mark Phase 3.3 as complete in ROADMAP
* Implement Phase 3.3: Enhanced CLI Commands
* Mark Phase 3.2 as complete in ROADMAP
* Implement Phase 3.2: Registry Integration
* Update documentation with recent implementation progress
* Update --ref help text to mention --validate
* Validate MANIFEST on install and every read
* Improve MANIFEST validation with constants and empty section warnings
* Add MANIFEST validation with --validate CLI command
* Add basic translation support for plugin metadata
* Align MANIFEST.toml implementation with documented spec
* Implement Phase 2.1: Git integration tests
* Improve test coverage significantly (69% → 76%)
* Improve test coverage further (65% → 69%)
* Phase 2.1: Improve test coverage (63% → 65%)
* Split test_plugins3.py into 5 logical test files
* Update ROADMAP.md: Mark Phase 1 as complete
* Implement Phase 1.8: Basic blacklist support (SECURITY)
* Implement Phase 1.7: Better install logic
* Implement Phase 1.6: Git ref/branch support
* Implement Phase 1.5: Plugin state management
* Add tests for Phase 1.4 plugin update functionality
* Implement Phase 1.4: Plugin updates
* Use ExitCode enum instead of magic numbers in PluginCLI
* Add PluginOutput wrapper with color support
* Implement enhanced CLI output and error handling (Phase 1.3)
* Implement API version compatibility checking (Phase 1.2)
* Add test fixtures for plugin v3 testing
* Implement plugin v3 config persistence (Phase 1.1)
* Fix: Add missing sessions_folder() function to appdirs.py
* Move PLUGINSV3 to docs/
* Add a section about update detection with git refs
* We'll use git refs not versions (well, tags can be versions but...)
* GUI mockups & workflows
* Update with remote commands / GUI vs non-GUI
* Plugins v2 had no support for translations
* plugin_main -> enable / disable
* IRC is gone
* Self-promotion: get rid of last.fm examples, use listenbrainz.org :)
* Add long_description to MANIFEST + explanations
* Rework website/registy, with a git repo approach (much simpler)
* Add @rdswift comments
* Revamp in smaller documents
* Clarify unregistered level (default, not in registry)
* Update to new trust level scheme (trust level is per-plugin)
* Add a note about min/max_api_version in the registry
* Update plugin schema (in registry)
* About website & translations of name/description of plugins
* Add whole repo blacklisting (suggested by rdswift)
* Fix minor inconsistencies
* Clarify category/categories
* Rework categories/authors, and trust level (per plugin rather than per author)
* Add a table of contents
* About plugins moved to another repository
* About ref blacklisting
* Fix wrapping
* About local registry and local plugin repositories
* Add details about Blacklist Enforcement
* Trust levels: add totally untrusted level
* Add example of picard plugins --help
* Add a list of plugins command lines options
* Roadmap for plugins v3
* Add pre-save processing
* Fix use of incorrect setting key
* Translated using Weblate (Italian)
* Move to `script/tools` directory. Only run once per commit.
* Add check for invalid settings keys
* Only initiate a QTimer for periodictouch if enable_timer() was called
* Setup log handlers explicitly on application start
* Removed unused picard.log mocks from tests
* Removed initialization of QApplication from tests
* Add pytest-randomly to developer dependencies
* Translated using Weblate (Polish)
* CI: Renamed macos-deployment-version to macos-deployment-target
* Ensure target architecture for macOS packaging
* Run CI tests and packaging with Python 3.14
* Update to PyInstaller 6.16.0
* CI: Replace deprecated macos-13 runner image with macos-14
* Translated using Weblate (Italian)
* build(deps): bump azure/trusted-signing-action from 0.5.9 to 0.5.10
* build(deps): bump github/codeql-action from 3 to 4
* build(deps): bump actions/download-artifact from 5 to 6
* build(deps): bump actions/upload-artifact from 4 to 5
* CI: do not fail fast for different macOS architecture builds
* Update dependencies
* Translated using Weblate (Portuguese (Brazil))
* Translated using Weblate (Italian)
* chore(event_hooks): sorted imports
* Adds a file presave hook
* Add count information to display
* Add ability to search scripting help documentation
* Allow scripting help to open external links
* Use tag name for sorting, using code provided by @zas
* Use `lstrip()`
* Do not consider leading underscores when sorting tags
* Exclude PyQt6-Qt6!=6.10.*, as it doesn't bundle tiff format for some reason
* Rewrite ProcessingImage.get_result()
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Spanish)
* Override setuptools editable_wheel command to also generate scripts/picard
* fix(metadata): rename album translation setting for consistency
* Ensure CheckboxMenuItem toggles the checkbox on any click on the widget
* PICARD-3128: Make CheckboxMenuItem menu items navigable by keyboard
* fix(metadata): update translation options behavior
* fix(ui): remove `layoutSpacing` of `translation_options_layout`
* Use CheckboxMenuItem as base class for CollectionMenuItem
* Use CheckboxMenuItem for profile selection
* Added CheckboxMenuItem to render column selection with active highlight
* Re-order columns menu items a bit
* refactor(configurablecolumnsheader): improve formatting of checkbox action creation
* refactor(configurablecolumnsheader): enhance context menu actions for column management
* refactor(mainwindow): remove unused profile selection method
* feat(mbjson): enhance alias locale mapping and add unit tests
* refactor(mbjson): simplify logging of detected scripts
* refactor(metadata): restructure alias localization functions for clarity and efficiency
* feat(metadata): enhance metadata translation; add title/album/track
* feat(metadata): add localization options for artist, album, and track titles
* feat(mainwindow): enhance profile selection menu with checkboxes
* fix(scripting_options): bug red error bar + add debounce
* refactor(variable_patterns): consolidate regex pattern definitions and improve imports
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Norwegian Bokmål)
* refactor(scripttextedit): remove unnecessary lambda; remove reserved `_`
* feat(scripttextedit): enhance completion popup behavior and selection persistence
* refactor(user_script_scanner): extract script hash calculation into a separate method
* feat(user_script_scanner): add feature to scan user scripts for vars
* refactor(completion_provider): simplify variable collection logic in CompletionChoicesProvider
* refactor(scripttextedit): simplify autocomplete logic by extracting helper methods
* fix(tests): brittle DRY and PT rule violations in tests
* fix(tests): fix DRY violations in AST tests
* refactor(scripttextedit): extract debounce timer constant to module level
* fix(scripttextedit): remove default function completion logic and enhance choice iteration
* feat(tests): add comprehensive unit tests for CompletionChoicesProvider and ContextDetector
* refactor(completion_provider): introduce CompletionChoicesProvider for script completion
* feat(script_variables): add validation for script variable names and introduce regex patterns
* refactor(script_variables): simplify variable name retrieval in get_plugin_variable_names
* refactor(scripttextedit): streamline variable suggestion logic in ScriptCompleter
* refactor(scripttextedit): optimize variable usage counting with pre-compiled regex patterns
* refactor(variable_extractor): optimize regex pattern for variable extraction
* fix(context_detector): add validation for invalid syntax in function arguments
* feat(tests): add comprehensive unit tests for ContextDetector and VariableExtractor
* refactor(context_detector, variable_extractor): context detection and variable extraction for script completion
* feat(scripttextedit): add shared pytest fixtures for script_text_edit tests
* refactor(scripttextedit): implement VariableExtractor for enhanced variable extraction
* fix(scripttextedit): refine error handling in ScriptCompleter model updates
* feat(script_variables): add script variable registration and retrieval functions
* feat(scripttextedit): implement context-aware completion in ScriptCompleter
* feat(scripttextedit): enhance ScriptCompleter with dynamic variable extraction
* PICARD-1861: Basic plugins CLI
* Disable Python 3.14 tests again for now
* PICARD-1861: Use pathlib.Path for plugins paths
* PICARD-1861: Remove old plugin options page
* PICARD-1861: Plugins doc changes after discussion
* PICARD-1861: Introduce PluginSource, PluginSourceGit, PluginSourceLocal
* Add tomlkit & pygit2 to test-requirements dependencies
* Some structure improvements for PLUGINS.md
* PICARD-1861: Basic plugin3 functionality
* PICARD-1861: Extended limitation section in plugin specification
* PICARD-1861: Added description of distribution to plugin specification
* PICARD-1861: Updated plugin specification
* PICARD-1861: allow multilingual descriptions in plugin manifests
* PICARD-1861: remove zipped plugins from current spec
* PICARD-1861: basic implementation for PluginManifest and PluginApi
* PICARD-1861: Initial draft for Plugin API v3
-------------------------------------------------------------------
Fri Oct 03 20:21:09 UTC 2025 - Scott Bradnick <scott.bradnick@suse.com>
- Removing 'picard-requirements.patch'; seems updated upstream
- Handling 'dev#' change in _service file vs. .spec "sed"
- Update to version 3.0.0.dev8:
* Bump actions/setup-python from 5 to 6
* refactor: consolidate column creation logic into columns.py
* refactor: enhance custom column creation with is_default parameter
* Refactor: Centralize RESTORABLE_CONFIG_KEYS for session management
* Run ruff/lint
* fix(fileview): preserve 'Unclustered Files' title while hiding custom values on group rows\n\nHide custom column values for and special rows except for the Title and status icon columns. This prevents showing on group rows while keeping the label visible after the refactor.
* refactor: standard columns to use new API
* fix: Add `invalidate` to `_AdapterBase`
* Fix: `dir` -> `directory` in script file export
* refactor: `session_loader` more readable
* Fix: `dir` -> `directory`
* Make `restore_options` more generic
* Update pypi dependencies
* Improve type hints
* Apply zas code review 20250925
* Make `_atomic_write` its own utility
* Rename `dont_write_tags` -> `enable_tag_saving`
* Apply zas code review 20250924
* Ensure we also update quick settings on option changes
* Move `_make_settings_selector_menu()` call to `_reset_option_menu_state()`
* _update_quick_setting -> _toggle_quick_setting
* PICARD-3123: Added test for enable_tag_saving config upgrade
* Rename option `dont_write_tags` to `enable_tag_saving`
* fix: cached value and cached sorting issues
* Add tooltips for sorting adapters
* Locale aware sorting also for NullsLastAdapter and NullsFirstAdapter
* Generic implementation of _apply_sorting_adapter
* Remove unused sorting ReverseAdapater
* Sort custom columns locale aware by default
* Do not skip natural sort order tests on Linux and macOS
* Remove descending sort adapters
* Use consistent parameter names in FileDialog static helpers
* Update locked dependencies
* Translated using Weblate (Ukrainian)
* PICARD-150: Set default filter columns for tree view filters
* Extended mailmap to unify git author list
* Translated using Weblate (Ukrainian)
* Apply zas code review recs 20250910
* Fix some inconsistencies with `last_session_path`
* Fix bug with web requests suppression
* Fix bug with blank albums (no cache, no web)
* Refactor session loader for dry/srp
* Switch from json to yaml for session files
* Refactor ; remove redundant code
* Add atomic writes; fix crash during load session
* Fix failing Windows tests
* `load_session` should default to the last_session_path
* Clean up menus; add default filenames
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Make session_folder configurable and default
* Add flyout menu for recent sessions
* Use try...except...else pattern
* Do not show hardcoded values for cluster/noncluster
* Zas code review 20250908; own close session confirm box
* Apply single quote on dict/attr keys
* Do not catch blind exceptions
* Enable caching of mb data in sessions
* Session files should be compressed
* Refactor sessions manager and add unit tests
* Complete session save/load roundtrip
* Fix crash issue due to non-float-parseable values returning `QCollatorSortKey`
* Avoid a possible crash when columns index is invalid
* Fix bug with eval of regular vs. `~` tilde slugs
* `ValidationReport.summary` should be translated
* Update shared.py
* Use `tuple`; remove redundant code
* Set focus on title when `New` is clicked
* Unchecking views should de-register col from view
* Silently fix key errors
* Make expressions optional, show warning
* Enhance validation dialog+interaction
* Allow highlighting multiple and deleting
* Rename `Add` -> `New`
* Suppress mising attr `ClusterList.column` log
* Fix failing tests
* Updates from zas' code review
* Remove `Make It So!` button from dialog
* Relax key rule; mark and translate errors
* Allow Qt to determine placement of "Reset" button
* Newly added custom columns should also trigger data refresh
* Newly visible columns should have a checkbox
* Add should create a placeholder spec
* Translated using Weblate (Ukrainian)
* Use Qt standard buttons. Only use "Make It So!" on Options page.
* Default col name and focus on add; fix bug invalid spec closing window
* Remove `Save Changes` button; auto stage changes
* Rename file refactor -> decoupling
* PR review change requests from zas
* Formatting review by rdswift
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Spanish)
* Natural sorting behaviour is different on Linux
* Need to skip these tests on MACOS
* Alias the sort_key import
* Remove 'reverse' sorter from UI
* Add natural sorter; fix failing tests
* Add NAT sorting; fix failing tests
* Add ability to pick a sorting algo
* refactor: Make `manager_dialog.py` lighter
* refactor: move `SpecListModel` to own module
* Minor: must click `Add` to add initially; dup/del disabled unless has selection
* Fix failing tests
* Make col ids guid; fix bug with delayed commit
* Move `refresh_all_views` to event bus
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Ukrainian)
* Add 'stage changes' clarification
* Fix rdswift's bug: Uncommitted changes
* Update picard/ui/itemviews/custom_columns/manager_dialog.py
* Fix failing tests
* Fix failing tests; QT objects need to be mocked
* `Manage Columns…` -> `Manage Custom Columns…` context menu
* Add help button
* Add live spec check
* Add unit tests
* Massive refactor: SRP/DRY/SOC, etc; rewire flows
* Translated using Weblate (Ukrainian)
* Switch over to use `ColumnSpecValidator` from `validation.py`
* Bump actions/checkout from 4 to 5
* Bump actions/download-artifact from 4 to 5
* Scripts should be evaluated for errors
* Apply better abstractions/decoupling for SRP
* fix: Inputs should reset on add
* ui: single dialog custom columns manager; use `ScriptTextEdit`
* Refactor buttons for consistency
* Rename `Field Name` -> `Column Title`
* `FieldReferenceProvider` needs a Callable column guard
* Make show-in-view selection generic
* Make `left`/`right` choices translatable
* Use try...except..else pattern
* Add user-facing tooltips to `expression_dialog.py`
* Should import directly
* Provide a way to enter key; deduplicate key
* PICARD-2300: Check for setColorScheme for Qt <6.8 compatibility
* Fix live column updates; remove `is_default` concept
* Fix bug with field type custom column
* Apply live delete/create to columns
* Remove `insert_after_key` concept; BLE001 fix
* Add dirty/cache mechanism for O(1) in `get_by_key`
* Use `tuple` in place of list
* Use generic `Iterable`, not `list`
* Rename `upper` -> `align`
* Refactor `validate` to flatten results via a comprehension
* Use `add_to` instead of `add_to_file_view`, `add_to_album_view`, etc.
* Do not hardcode ints; use screaming constants
* Remove blind catch; log debug msg
* Remove readme's in code tree
* No need to import in try-except
* Use `IntEnum` and `HEADERS` dict; do not hardcode vals
* Fix failing tests
* Add ui to manage custom columns
* Update translation files
* Update picard.pot
* Update Ukrainian translations
* Translated using Weblate (Ukrainian)
* Only keep ui_options_renaming.py changes
* Update `file.py`: remove `set()`, align with PR comment
* Update picard/formats/util.py
* Update picard/ui/options/tags.py
* Refactor: entries to use `format_key_desc_generator`
* Mark format desc for translation; `_()` to menu
* Move `_date_format_entries` into property
* Refactor: remove `is_date_sanitization_enabled` from util
* refactor: do not hardcode toggle settings list; centralized `is_date_sanitization_enabled`
* Translated using Weblate (Ukrainian)
* Add copyright notice
* Move sanitization settings to `tags.py`
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Galician)
* Translated using Weblate (Ukrainian)
* Translated using Weblate (German)
* Add select formats to disable date sanitization
* Update to fpcalc 1.6.0 for Windows and macOS builds
* Do not catch blind exceptions
* Remove `RandomSortAdapter`
* Remove `insert_after_key` concept
* Remove redundant strategies; apply `DefaultContextStrategy` for album and cluster
* Add more trailing commas
* Add trailing commas to import
* Simplify code for setting AVAILABLE_UI_THEMES
* Set line ending for po files to lf in gitattributes
* Updated Ukrainian translations from Weblate
* Ensure options are loaded for all tests
* Explicitly set C locale in coverart details tests
* Ensure TestI18n resets locale to the default locale C after running
* Restored headers in uk.po
* Reapply "Translated using Weblate (Ukrainian)"
* Revert "Translated using Weblate (Ukrainian)"
* Make `cache_size`/`max_runtime_ms` default to `None`
* Translated using Weblate (Ukrainian)
* Translated using Weblate (German)
* Default max and min should be injectible class vars
* Remove `bool()`; not needed
* Use `log.debug`; use `__class__.__name__`
* Replace `{VIEW_FILE, VIEW_ALBUM}` with `RECOGNIZED_VIEWS`
* Move import outside of `for` loop
* Update Ukrainian translation
* Use `self.__class__.__name__`; use `log.debug`
* Apply suggestions from code review
* Translated using Weblate (Galician)
* Do not hardcode classname
* Use `get_recognized_view_columns` in `unregister` method
* Use generic `get_recognized_view_columns` dict approach
* Use `log.debug`
* Update picard/ui/itemviews/custom_columns/shared.py
* Use numpy style docstring
* Remove `add_to_file_view`, `add_to_album_view` in favour of `ad_to`
* Registry should honour initial custom col widths
* Implement improvements from code review
* Add custom columns api and tests
* CI: Install gettext before running Windows tests
* Remove redundant option settings (now available in Quick settings)
* Don't add default `quick_menu_items` settings to new profile
* Add tests
* Fix restore defaults
* Don't display settings not currently available
* Standardize option page name in tree and options page
* Only expand checked or partially checked groups
* Move quick settings to new options page. Revert version change.
* Add quick settings menu and the ability to select the items to include
* Force `profiles` options page to always save first
* Translated using Weblate (Polish)
* Display multiple profiles in order of application from top to bottom
* Add name as secondary sort criterion
* Ensure `profile` option settings page is saved first.
* List all profiles
* Change stretch on warning text. Remove unused `profile_title` variable.
* Add profile save warning to option settings
* Explicitly set the "strict" parameter for builtin zip()
* Translated using Weblate (Spanish)
* Translated using Weblate (Catalan)
* Allow ruff to format picard/tagger.py
* Set ruff target-version to py310
* pyproject.toml: remove dependencies from dynamic setuptools parameters
* Update translation files
* Run update_constants
* Update pot files
* update pre-commit config
* pre-commit: exclude some files from whitespace cleanup
* Force pytest to run pre-push instead of pre-commit
* Generate requirements files for oldest supported Python 3.10
* Removed double blank line at end of file
* "gui-scripts" must be a dynamic attribute for windows wheel
* Update dependencies with uv
* Update requirements.txt
* Revert to manage requirements-{win,macos}.txt manually instead with uv
* Removed system theme UI warning
* Fix test_windows_dark_theme_palette actually assuming IS_WIN
* Remove UiTheme.SYSTEM
* Config migration for ui_theme "system" setting
* Parametrize args must use tuples
* If changing colorScheme fails fall back to the custom dark color palette
* refactor: CoverArtSetter to use single dispatch pattern
* Revert to `setter.set_coverart()`
* Revert ; issue
* Add new config to
* Remove show details config from Cover Art config
* Default to false
* Remove `initialize_covertartbox_settings`; properly mock tests
* Add copyright/license
* Allow up to 3 char replacement in illegal chars
* Move `matched` into if block
* Refactor `_first_image_info_lines`
* Use `python setup.py build_ui` to generate
* Add user prefs for album art details
* Do not catch blind exceptions
* Add more details to album art info box and tests
* Fix strings in ui files and re-run build_ui
* Remove `always_visible`; make `is_default` = `True`
* parametrize should use tuples; don't call fixture decorator
* Add ui quick toggles for cover art
* Use single quote for keys
* Don't hardcode col index; move variable below if block
* refactor: use a namedtuple instead for `_get_item_data`
* Make match quality tooltip translatable
* Fix failing linux test
* Run `ruff format`
* Remove/clarify some confusing comments
* fix all themes available only when stylehints available
* Fix failing mac tests
* Clean up formatting
* Add qt's stylehints to theme.py
* Apply dict-style threshold icon matching
* Apply suggestions from code review
* Add trailing commas for consistent format
* Sync ruff version with pre-commit hook
* Upgrade pre-commit hooks
* Add `format --check` ci workflow
* Run ruff format
* Run `ruff format`
* Move `Match` column to the right; fileview shouldn't have `Match` col
* Reverse sorting order on Linux
* Remove text; only icon. Fix tests for sort order
* Fix sorting logic and force clear sorting cache
* Refactor for DRY and single responsibility
* Add match quality column with unit tests and UI improvements
* Split long string in smaller bits
* Drop spurious double quote char in docstring
* Preserve string indentation (script)
* Add trailing commas to preferred multi-line items. Also clarify return.
* Add missing comma
* Translated using Weblate (Lithuanian)
* Force wrapping by adding a comma
* Add a trailing comma, keep one parameter per line
* Remove incorrect trailing commas in IntEnum
* Run `uv ruff format`
* Reverse sorting order on Linux
* Simplify `if` block of `gnome_color_scheme_is_dark`
* Remove text; only icon. Fix tests for sort order
* Refactor for DRY; do not catch blind exc; rename funcs
* Translated using Weblate (Galician)
* Fix sorting logic and force clear sorting cache
* Refactor for DRY and single responsibility
* Add match quality column with unit tests and UI improvements
* Bump azure/trusted-signing-action from 0.5.1 to 0.5.9
* Update INSTALL.md
* Translated using Weblate (Japanese)
* Translated using Weblate (Galician)
* Add qtdbus dark theme detect
* Translated using Weblate (Galician)
* Translated using Weblate (Lithuanian)
* Update dependencies, including latest discid 1.3.0
* uv, and pip-compile stages should always run
* Make win/macos group deps less restrictive
* Make requirements install clearer; move --optional to groups
* Remove isort and flake8
* Make `ruff` isort match with current isort
* Add ruff isort settings to match current isort
* Add filetype/bitrate
* Modernize dev tooling: switch to uv, pre-commit, PEP 621, update docs
* Remove un-used code line
* Run isort
* Run ruff check
* Fix flake 8 issues
* Fix failing macos tests
* Must check if ui isn't already defined as dark
* Add wrappers for de-aware strategies
* Refactor to centralise `DARK_PALETTE_COLORS`
* Add support for `org.freedesktop.appearance.color-scheme`
* Refactor; add more detection; add tests
* Honor Linux system dark mode in 'System' UI theme; add comprehensive tests
-------------------------------------------------------------------
Tue Jul 15 15:49:39 UTC 2025 - Scott Bradnick <scott.bradnick@suse.com>
- Update to version 3.0.0.dev5:
* Translated using Weblate (Ukrainian)
* Drop set_dirty(), use self._dirty directly
* reverse()/sort() don't change the total length, not needed
* Sanitize HTTP header values in browser integration
* For the sake of completeness, add __iadd__() and __imul__()
* Introduce ListOfMetadataItems with length property
* Only calculate cluster "length" on display
* Translated using Weblate (Lithuanian)
* Make Metadata.length a property and raises exception if set to negative value
* CI: Test with Python 3.14 beta 3
* Include dataclasses and zstandard in PyInstaller bundle
* PICARD-3081: Perform windows forbidden filename replacement with one regex
* PICARD-3081: Replace forbidden filenames for Windows
* _update_tags(): split in smaller bits
* _update_tags(): add comments & refactor a bit
* Add comments & docstrings
* Move _process_file_for_orig_actions() after _collect_orig_tag_actions()
* _collect_orig_tag_actions(): document the method, as it's rather obscure
* Move part of _collect_orig_tag_actions() code to new _process_file_for_orig_actions()
* Move part of contextMenuEvent() to new _add_copy_paste_actions()
* Move part of contextMenuEvent() to new _add_tag_modification_actions()
* Move part of ContextMenuEvent() to new _collect_orig_tag_actions()
* Move part of contextMenuEvent() to new _add_single_tag_actions()
* Added requirements file with dependencies of some plugins
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Catalan)
* Removed deprecated License classifier and license declaration
* Upgrade PyInstaller to 6.14.1
* Update OAuth credentials
* Add tooltips showing reason for display (matched tags).
* Standardize persistent key names
* Only include filter items that are currently available
* Add log message when filterable tags set is updated.
* Add checkbox to select / clear all filters
* Update filtering logic:
* Add persistent settings for selected filters
* Remove custom TAK file type implementation
* Remove custom WAVE file type implementation
* Moved common APEv2 tag handling code to separate functions
* Remove custom AC3 file type implementation
* Remove import check for mutagen GRP1 frame type import
* Bump required mutagen version to 1.45
* Upgrade config: Copy `standardize_vocals` from `standardize_instruments`
* PICARD-2828: Separate options for standardized instrument/vocal credits
* Use public imports for mutagen, when possible
* windows-2019 is deprecated -> 2022
* No need to print Python version, it is in logs anyway
* Use Python >= 3.13.5 as 3.13.4 has an annoying bug
* Move ExtensionPoint and related code to extension_points package
* changed clear all button location
* fix unchecking all filters by iterating over checkbox values instead of items
* Refactor as per suggestion by zas and add more filter tests
* Remove unneeded items from tests
* Revert changes on `cancel`. Add button to clear all selected filters.
* Use `set()` for all `selected_filters` references
* Exclude macOS and Windows tests for Python 3.14
* PICARD-3079: Declare support for Python 3.14 and fix tests
* Run tests with Python 3.14
* Use `suspend_while_loading` to manage re-applying filters.
* Add `suspended` flag to `Filter`. Add context manager for filtering.
* Add trigger to re-apply the filters after a file move
* Use `set()` for selected filters
* Remove testing button and code.
* Avoid multiple builds of the filter selection dialog:
* Reapply filters if filterable tags reloaded. Add testing option.
* Store filterable tags set as class variable. Add method to regenerate.
* Add tooltips to filter items.
* Use `filterable_tag_names()` to provide all filter items:
* update comment to reflect new function name
* Fix tests
* Make filter bar display a persistent setting to restore on startup
* Rename `test_ui_find.py`. Fix filterable tags generator test.
* Use OrderedDict to avoid manual sorting when creating file filters
* refactor: rename test method to reflect new class name
* refactor: rename Find to Filter
* refactor: remove find icon from FindBox
* refactor: update filter button label logic in FindBox
* fix: filterable_tag_names return value to a set
* refactor: rename valid_tags to filterable_tags and update related methods
* fix: QSplitter::replaceWidget: Index -1 out of range
* refactor: rename find toolbar action and status tip
* fix: changed _name to str
* fix: mock import
* Refactor to accommodate testing. Update tests.
* fix: convert text to lower inside _filter_tree_items function
* fix: removed unnecessary _( for display name
* fix: Removed hidden tags from filter, and adressed issues with file_filters
* Fix imports to pass isort test.
* Refactor to allow testing button text generation. Fix tests.
* fix: removed unused import
* fix: update filters to display display_names and translations
* fix: update filter button text to show only single selected filter for better readability
* feat: add internationalization support for find UI elements
* fix: find box gains focus based on the currently focused view
* feat: find option in view menu
* fix: rebase & headers
* PICARD-150: Support for internal search/filter of the main two panes
* Generic suspend while loading mechanism
* Add tooltips to filter items.
* Use `filterable_tag_names()` to provide all filter items:
* Fix filterable tags generator to use `is_filterable` only
* Exclude unmatched files and cluster entries from filtering
* Revert "Add `filter_key` attribute to `TagVar` class"
* Add `filter_key` attribute to `TagVar` class
* Fix filterable tags generator to use `is_filterable` only
* update comment to reflect new function name
* Fix tests
* Make filter bar display a persistent setting to restore on startup
* Rename `test_ui_find.py`. Fix filterable tags generator test.
* Use OrderedDict to avoid manual sorting when creating file filters
* refactor: rename test method to reflect new class name
* refactor: rename Find to Filter
* refactor: remove find icon from FindBox
* refactor: update filter button label logic in FindBox
* fix: filterable_tag_names return value to a set
* refactor: rename valid_tags to filterable_tags and update related methods
* Add `filename` and `filepath` to filtered tags
* First pass at identifying filterable tags
* fix: QSplitter::replaceWidget: Index -1 out of range
* refactor: rename find toolbar action and status tip
* fix: changed _name to str
* fix: mock import
* Refactor to accommodate testing. Update tests.
* Change `is_filterable` attribute default to `False`
* fix: convert text to lower inside _filter_tree_items function
* fix: removed unnecessary _( for display name
* fix: Removed hidden tags from filter, and adressed issues with file_filters
* Translated using Weblate (Polish)
* Translated using Weblate (Galician)
* Add filterable tag names
* Add new generators and tests.
* Fix imports to pass isort test.
* Refactor to allow testing button text generation. Fix tests.
* fix: removed unused import
* fix: update filters to display display_names and translations
* fix: update filter button text to show only single selected filter for better readability
* feat: add internationalization support for find UI elements
* fix: find box gains focus based on the currently focused view
* feat: find option in view menu
* merge fix
* fix: rebase & headers
* PICARD-150: Support for internal search/filter of the main two panes
* PICARD-150: Support for internal search/filter of the main two panes
* Translated using Weblate (Polish)
* Removed legacy code for Python 3.9 compatibility
* Use Path.is_relative_to in log handler
* PICARD-2784: Drop Python 3.9 support
* Update pip dependencies
* tristatesortheaderview -> lockableheaderview
* TristateSortHeaderView -> LockableHeaderView
* Update docstring
* QT6.1 introduces setSortIndicatorClearable(), TristateSortHeaderView can be simplified
* CI: Update libdiscid for binary packages to 0.6.5
* Add disambiguation comment to search dialog results
* PICARD-3074: Fix search box QLineEdit focus issue
* PICARD-3073: Fix loading of cover art for non-visible cells
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Simplify sorting, add comments
* Drop _track_length_sortkey() in favor of attrgetter('length')
* Preserve sort column & order between searches & restarts
* Disable sorting while loading table, else some cells are missing
* Move ConfigurableColumnsHeader to a separate file
* Make changes in order to be able to use ConfigurableColumnsHeader
* Preserve user-defined column widths between searchs
* Initialize columns much sooner, and do translations much later, rework table inititialization
* Simplify code by enumerating columns
* Split set_table_item_value() code to new set_table_item()
* set_table_item_value(): use Columns.get_column_by_key()
* Add a Columns.get_column_by_key() helper function
* Column: use actual class name in __repr__()
* Drop useless code
* Handle column size in album/artist/track search tables
* Move IconColumn to itemviews/columns
* Fix imports (it was working, but not totaly correct)
* Columns: make the code a bit more generic
* Set natural sort for few columns, change alignment to right for tracks (it's a number)
* Implement sorting by sortkey & alignment using Column
* Drop get_value_for_row_id(), used only once, and it just returns the current row
* search dialog: reduce redundancy
* Properly initialize item view columns when starting with --no-restore (#2661)
* PICARD-3056: Set ripper log file chooser to FileMode.ExistingFile
* Allow loading all selected local cover art files
* PICARD-3056: Set cover art local file chooser to FileMode.ExistingFiles
* TableBasedDialog: use Columns/Column classes
* Column, Columns: update tests to include new features
* Column: update repr() to include always_visible and status_icon new properties
* TreeItem: add a class property to store ITEMVIEW_COLUMNS
* Pass ITEMVIEW_COLUMNS to BaseTreeView constructor, stored as columns property
* Translated using Weblate (Italian)
* Rename DEFAULT_COLUMNS to ITEMVIEW_COLUMNS
* Replace `ITEM_ICON_COLUMN` with a Columns property `status_icon_column`
* Columns: introduce `_new_column()` and reduce code redundancy a bit
* FileTreeView/AlbumTreeView: pass proper arguments to parent class BaseTreeView constructor
* ConfigurableColumnsHeader: pass DEFAULT_COLUMNS to constructor
* ConfigurableColumnsHeader: use `Columns.always_visible_columns()`
* Columns: add `always_visible_columns()` generator
* Column: introduce `always_visible` property
* set_clusters_text(): use actual Title column pos, not ITEM_ICON_COLUMN
* Move `browser/browser.py` to `browser/server.py`
* Drop changes made for supporting AF_INET6, keep OurHTTPServer to ease subclassing
* Rework safe message logging
* Wrap long line
* Rework logging, use a common prefix
* Store min/max ports in MIN_PORT/MAX_PORT
* Move class declaration where it is used
* Drop # nosec
* Ipv4 only for now, drop Ipv6 related tests
* Improve browser integration logging
* Add support for IPv6 to BrowserIntegration
* Translated using Weblate (Polish)
* Translated using Weblate (Italian)
* Add few docstrings
* Move QTranslator setup to new `setup_translator()`
* Move QDBus setup to new `setup_dbus()`
* Move QApplication general setup to new `setup_application()`
* Move pipe/remote instance code to new `setup_pipe_handler()`
* `_no_restore` is set in `_init_properties_from_args_or_env()`, so remove
* Move `load_user_collections()` call to `_init_webservice()`
* Move logging/audit/debug_opts code to new `_init_logging()`
* Move UI initialization code to new `_init_ui()`
* Add missing docstrings
* Use `register_cleanup()` in `_init*()` and drop redundant variable initialization
* Move tagger entities initialization to new `_init_tagger_entities()`
* Move browser integration initialization to new `_init_browser_integration()`
* Move plugins initialization to new `_init_plugins()`
* Move fingerprinting initialization to new `_init_fingerprinting()`
* Move web service & API initialization to new `_init_webservice()`
* Move gettext initialization to new `_init_gettext()`
* Move initial debug log output code to new `_log_startup()`
* Move signal handling init to `_init_signal_handling()`
* Move pipe handler & server initialization to new `_init_pipe_server()`
* Move threads initialization to new `_init_threads()`
* Create properties from command line args or env
* PicardArgumentParser -> CmdlineArgsParser
* picard_args -> cmdline_args, it is more explicit
* Tagger: move variables initialization to new _bootstrap()
* Translated using Weblate (Albanian)
* Translated using Weblate (Polish)
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Get rid of `log.set_level()`
* Use `log.is_debug()`
* Rework setting log verbosity
* Translated using Weblate (Ukrainian)
* Update translation files
* Translated using Weblate (Catalan)
* Translated using Weblate (Chinese (Traditional Han script))
* Update picard.pot
* Search Dialog: replace hardcoded URL in translatable string by a placeholder
* help(): improve output formatting a bit.
* Wrap long lines, make argument description shorter
* Introduce remote_command decorator, build REMOTE_COMMANDS from RemoteCommandHandlers
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Update translation files
* Translated using Weblate (Galician)
* Use percent format with log.*() methods
* Simplify remove_empty()
* remove(): call Tagger.remove_files() directly
* Simplify remove_all(), call Tagger.remove_files() directly
* Shorten remote command methods names since they are in a class now
* Pass the RemoteCommandHandlers function instead of its name in REMOTER_COMMANDS
* handle_command_lookup(): rewrite to be more readable
* Introduce Tagger.run_lookup_cd() and Tagger.run_lookup_discid_from_logfile()
* Update pot files
* Move remote command help & list to RemoteCommands class
* Move picard/util/remotecommands.py to picard/remotecommands/__init__.py
* Move remote command handlers to picard/remotecommands
* Better specify $rsearch's docstring
* Add an optional `group` parameter to `rsearch`
* Refactor preserved tags:
* Fixed test case for dot stripping in filenames
* Translated using Weblate (Catalan)
* Translated using Weblate (Italian)
* Update translation files
* Translated using Weblate (Italian)
* PICARD-3066: generic implementation to get an accent color in dark theme mode
* Added test case for dot stripping after the tracknumber
* Unify style and order of parameters in tests
* Added a condition to strip dots after the tracknumber in filenames
* Add test for rsearch returning None [PICARD-3065]
* Further refactoring:
* Refactor tags:
* Move theme.setup() call sooner
* Update picard.pot
* PICARD-3064: Fix ID3File hiding File._save_images
* HTML escaping
* Rewrite the code to use classes and reduce code redundancy
* Simplify `process_tag()`
* Don't return None in `rsearch` when first group does not match
* Do not pass self on every widget constructor
* Drop unused variable
* Translated using Weblate (Catalan)
* Use tabs to select functions or tags.
* Add links to "See also:" items in the tag documentation
* Ensure tags are sorted by tag name
* Add debugging infos about selected theme
* Initialize theme much later in order to have logging properly set up
* Refactor to move description generation into `TagVar`
* Add tags and variables to scripting documentation
* Add test to ensure all `doc_link` entries have both a title and a link
* Translate notes and add tests for translations
* Translation processing fixes
* Add test to ensure a tag doesn't refer to itself in the `see_also` list
* Clarification regarding `%discid%` and `%musicbrainz_discid%`.
* Add tests to confirm all related options exist and have titles
* Improve returned option settings titles as suggested by @zas
* Add test for `is_multi_value` in `TagVarTest::test_basic_properties`
* Change method of obtaining the title of a configuration option:
* Add `is_multi_value` TagVar argument. Update related descriptions.
* Fix descriptions of TagVar arguments.
* First pass on short description cleanup.
* Improve Sections (#20)
* Add provision for additional description not used for tooltip.
* Refactor tag tooltip and full description methods. Update tests.
* Fix generator error due to changing attribute name.
* Add "See Also:" section to full description
* Shorten tooltip descriptions. Add settings and links sections:
* Update picard/util/tags.py
* Use ordered dict for notes. Negate two TagVar attributes. Add helpers.
* Display tooltip on first column of metadata box items (tags)
* Add tooltips to tags and variables in script editor:
* Translated using Weblate (Catalan)
* PICARD-3060: limit number of choices in script completer popup
* ScriptCompleter.choices: sort functions & variables independently
* Initialize `last_selected` before connecting signals
* enable_completer() -> initialize_completer()
* Fix exception introduced in d765211120fe0 (#2638)
* script_variable_tag_names(): use TagVar.script_name(), add test
* TarVar: add script_name() method, it returns the name prefixed with _ if hidden
* ALL_TAG_VARS -> ALL_TAGS
* filepath, length: set is_tag=false
* Translated using Weblate (Catalan)
* Translated using Weblate (Dutch)
* Translated using Weblate (Catalan)
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Ensure TagVars contains only TagVar instances, add test
* Test hidden var with shortdesc
* Improve handling of hidden vars + tests
* Add tests for TagVars & TagVar
* Add `TagVars.names()` method which accepts a method to select names to output
* TagVar.__hash__() isn't needed
* Introduce `TagVars` mutable sequence type and get rid of `ALL_NAME_2_TAGVAR`
* Replace `PRESERVED_TAGS` with generator `preserved_tag_names()`
* Add TagVar description
* Replace `SCRIPT_VARIABLES` with generator `script_variable_tag_names()`
* Replace `FILE_INFO_TAGS` with generator `file_info_tag_names()`
* Replace `CALCULATED_TAGS` with generator `calculated_tag_names()`
* Replace `TAG_NAMES` dict by a generator `tag_names()`
* Simplify `display_tag_name()`
* Introduce TagVar
* Translated using Weblate (Polish)
* Translated using Weblate (Catalan)
* Translated using Weblate (Italian)
* Translated using Weblate (Catalan)
* Move EXTRA_VARIABLES to picard/util/tags.py
* Add new `_*artists_countries` variables to autocomplete list.
-------------------------------------------------------------------
Mon Apr 14 20:32:55 UTC 2025 - Scott Bradnick <scott.bradnick@suse.com>
- Update to version 3.0.0.dev5:
* Translated using Weblate (Albanian)
* Translated using Weblate (Galician)
* Translated using Weblate (Catalan)
* Enabled Catalan translation for Windows installer
* Translated using Weblate (Catalan)
* PICARD-3029: Incorrect mapping of case-variant tags in MP4 files (#2624)
* Update translation files
* Translated using Weblate (German)
* Run update_constants
* Fixed update_constants command in setup.py
* Update picard.pot
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Galician)
* Translated using Weblate (French)
* Translated using Weblate (Catalan)
* Upated appstream translations after summary changed
* Enabled Catalan and Galician translations of appstream data
* Added Catalan translation file for installer
* Translated using Weblate (Catalan)
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Move utility functions to scripteditor/utils.py
* Move ScriptEditorExamples to scripeditor/examples.py
* Move scripteditor.py to scripteditor/__init__.py
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Remove unique variables `_albumartistcountry` and `_artistcountry`
* Use existing `uniquify()` function.
* Properly handle countries shown as null in the json
* Revise format of string output.
* Add new artist country variables
* Add more patterns to .gitignore
* Drop redundant *.pyc & *.pyd
* Add Byte-compiled / optimized / DLL files to .gitignore
* Added mime data helper
* Move Player widgets to their own file (ui/player/widgets.py)
* Move playertoolbar.py code to ui/player/__init__.py
* More permissive copy
* Rework Copy & Paste Actions
* _update_objects(): do not catch exceptions, as it may hide issues
* Move object updating code to _paste_value() and reduce code redundancy
* _paste_single(): delay object updates
* _paste_multiple(): only update objects once
* Split _set_tag_values() into _set_tag_values_delayed_updates() and _update_objects()
* Move code from _paste_value() to new _paste_single()
* Move code from _paste_value() to new _paste_multiple() and _load_data_from_json_clipboard()
* Added Tests and escaped TSV
* Store the json as a custom mimetype on the clipboard
* CONTRIBUTING.md: Added link to TagLib mappings
* Added utility function to order the tags in tag_names
* Move InfoDialog main class to infodialog/dialog.py
* Move utility functions to infodialog/utils.py
* Move Artwork* widgets to infodialog/widgets.py
* Move infodialog.py code to infodialog/__init__.py
* PICARD-3049: do not set image for filelist "parent"
* Move debug output code from CoverArtBox to CoverArtSetter
* PICARD-3042: Highlight matching format in disc ID lookup results
* Move CoverArtSetter to its own file
* PICARD-3042: Show all release media formats in disc ID lookup results
* PICARD-3042: Include format in disc ID lookup result table
* Drop ABC/abstracmethod and multiple classes, simplify
* Pass source object to CoverArtSetter constructor
* Move code to their own classes derived from CoverArtSetter abstract class
* Introduce CoverArtSetter class
* CoverArtBox: set_coverart_*() methods don't depend on the class, move them outside
* _try_load_remote_image(): explode in smaller bits
* Move ImageURLDialog to its own file
* Move CoverArtThumbnail to its own file
* Move code from coverartbox.py to coverartbox/__init__.py
* Remove unused variable from macos-package-app.sh
* CI: On macOS do not explicitly install gettext
* On macOS build with pyobjc 11.0
* Removed unused script "upload.sh"
* CI: Move code style checks with flake8 and isort to separate jobs
* CI: removed unused upload code from macos packaging script
* CI: Code sign macOS bundle with PyInstaller
* picard.spec cleanup
* Translated using Weblate (Portuguese)
* Use Columns in CDLookupDialog
* Move part of the code from ui/itemviews/columns.py to ui/columns.py
* Additional tests for picard.util.filenaming
* xml.sax.saxutils.quoteattr is used only on MBID data
* Added tests for encode_filename/decode_filename
* Added tests for picard.browser.addrelease
* Extended tests for picard.util.filenaming
* Extended tests for picard.util.bitreader
* Add tests for picard.util.versions
* Add tests for picard.util.xml
* Ensure that format_time() only expects integer values for ms
* Add tests for special tag ne handler
* TagDiff: introduce tag_ne_handlers
* PICARD-3045: Fail safe if the parameter passed to format_time cannot be converted to a float
* Consistent headline formatting in CONTRIBUTING.md
* TagCounter: introduce status() and TagCounterStatus, simplify display_value()
* Paste JSON as tags
* Copy multiple tags as JSON
* Fixed bug in copying with multiple files selected
* TagDiff.__tag_ne(): convert string to int rather than float
* Tag "~length" value in TagDiff should be a string
* TagDiff.add(): use keyword arguments old & new for old & new values
* In the context of TagDiff, use old instead of orig
* TagDiff.add(): make removable a keyword argument, defaulting to True
* _set_item_value() -> staticmethod
* Move tag display code to new _set_item_tag()
* Move colors definition to _update_items() where it is used
* MetadataBox._update_items(): introduce get_table_item()
* Rename TagStatus.NOCHANGE to TagStatus.UNCHANGED
* PICARD-3044: Fix ~filepath sometimes being editable in metadata list
* TableTagEditorDelegate: add docstrings and use class constants
* Move edittagdialog.py to metadatabox/ and use relative imports
* Add a test to cover last 2%
* Add unit tests for TagDiff & TagCounter
* Move Tag* classes to new metadatabox/tagdiff.py
* Move metadatabox code to a subdir
* TagCounter, TagDiff: add docstrings
* Use temporary_disconnect() in edittagdialog
* Introduce temporary_disconnect() context manager and matching tests
* CI: Include both macOS x86_64 and arm64 packages in Github release
* CI: Use actions/setup-python for macOS package
* CI: Build macOS arm64 builds on actual arm64 runner
* CI: Removed obsolete code from macOS build
* Tag editor: Ensure tags with only empty values get removed from tag list
* Tag editor: Rename _modified_tag to _current_tag_values
* Added link to Navidrome's tag mapping to contribution docs
* Fix tag editor newly added value rows not being draggable
* Fix tag editor not updating stored data on drag and drop
* PICARD-3038: Fix crashes and editing of wrong indexes in edit tag dialog
* Simplify modified tags cleanup when exiting the dialog
* Revert incorrect changes made in last refactor
* Use enabled rather than selected
* PICARD-3043: Improved tests for handling tags with empty description
* PICARD-3043: Fix deleting performer tag without role from ID3
* Replace _set_placeholder_text() with _get_placeholder_text()
* TagEditorDelegate: get parent from self.parent() instead of passing it
* Move lock/unlock to _update_metadata_with_modified_tags()
* keyPressEvent(): wrap long line
* _create_completer_for_tag(): switch parameters to be consistent with others methods
* Drop get_tag_name(), not needed, and it doesn't even use index
* Drop _setup_completer(), not strictly needed
* accept(): use a mutex lock/unlock to avoid concurrent access to edited metadata
* Avoid a race condition in tag_changed()
* Document few more methods
* Update default appx publisher to match current signing certificate
* _set_item_style(): add docstring
* _update_object_metadata(): clarify docstring
* _update_button_states(): make it clear that's value-related buttons
* _update_metadata_with_modified_tags(): move code to new _update_object_metadata()
* _update_metadata_with_modified_tags(): split code to new _cleanup_modified_tags()
* Replace disable/enable_all() with new _set_ui_enabled_state()
* value_selection_changed(): move part of the code to new _update_button_states()
* _move_row(): add docstring
* _group(): add docstring
* accept(): document and split code to new _update_metadata_with_modified_tags()
* _modified_tag(): add docstring
* _add_value_items(): add docstrings and split to new _create_value_item()
* tag_changed(): move part of the code to new _update_tag_combobox()
* tag_changed(): move code to new _get_tag_values() and _update_tag_values()
* Explode EditTagDialog.__init__() in smaller bits
* get_tag_name(): add docstring
* tagger is set by PicardDialog, no need to re-declare
* Explode createEditor() in smaller bits
* Build locales inplace again for PyInstaller packaging
* packaging: "gui-scripts" must be defined dynamic
* Fix wheel builds not including locales
* Translated using Weblate (Finnish)
* Only pass needed parameters to _remove_*_tag()
* Test exact match first, then call startswith(), as syncedlyrics
* Move _remove_custom_tag() to else clause
* Only pass real_name if needed
* Store UFID owner value in a constant
* _remove_deleted_tags(): pass config_params instead of config
* Rename save_params/params to config_params, consistent with _load()
* No need to use ** for params dict (at call, and at definition)
* Pass write_id3v23 via params, no need to pass config anymore
* Pass rating_user_email and rating_steps via params
* Cache setting itunes_compatible_grouping, pass it via save_params
* Rename 2 more methods for consistency, suffix _tag for all
* Call encode_filename() once, add a comment about _get_tags()
* _remove_deleted_tags(): pass config from caller
* _remove_deleted_tags(): invert tags & metadata parameters to match other methods
* Optimize _save_performer_tag(): get config value outside the loop
* Rename and normalize signature for 2 methods that were forgotten
* Pass config, encoding, people_frames in a save_params dict
* Instead of tmcl & tipl, use a dict named people_frames
* _save(): move part of the code to new _save_work_tag()
* _save(): move part of the code to new _save_grouping_tag()
* Rename methods for consistency, _save_*_tag() for all
* Pass metadata directly to _save_images() and drop _get_images_to_save()
* _save(): convert values only if we don't skip based on name
* Explode _remove_deleted_tags() in smaller bits
* Introduce _get_images_to_save()
* _save(): move part of the code to new _create_people_frames()
* _save_images(): return asap if nothing to do, reformat code a bit
* _save_track_disc_movement_numbers(): reduce code redundancy
* _save(): move part of the code to new _save_custom_tag()
* _save(): move part of the code to new _save_id3_tag()
* _save(): move part of the code to new _save_freetext()
* _save(): move part of the code to new _save_freetext_ci()
* _save(): move part of the code to new _save_rtipl_role()
* _save(): move part of the code to new _save_performer()
* _save(): move part of the code to new _save_standard_frame()
* _save(): move part of the code to new _save_rating()
* _save(): move part of the code to new _save_musicbrainz_recording_id()
* _save(): move part of the code to new _save_synced_lyrics_tag()
* _save(): move part of the code to new _save_lyrics_tag()
* _save(): move part of the code to new _save_comment_tag()
* _save(): move part of the code to new _save_images()
* _save(): move part of the code to new _save_track_disc_movement_numbers()
* _save(): move part of the code to new _initialize_tags_for_saving()
* Disc: introduce _submission_url() static method and improve tests
* Translated using Weblate (Polish)
* PICARD-3003: Disable autoupdate during build with PICARD_DISABLE_AUTOUPDATE
* Add test for SYLT frame without lang
* Add tests for ID3 load processors
* Fix (old) typo in comment
* Add helper id3_rating_user_email() and reduce code redundancy a bit
* Simplify generation of frame processors from __translate and __tag_re_parse
* _load_tipl_frame()/_load_tmcl_frame(): reduce code redundancy
* PICARD-2003: Include locales as package data inside the main package.
* ext-modules requires at least setuptools 74.1
* Fixed unneeded lambda in setup.py
* Reduce code redundancy in setup.py update_constants command
* Run packaging workflow if pyproject.toml changes
* Introduce frame_processors and replace if/elif blocks
* Move handling of SYLT and UFID frames special cases to their respective handlers
* id3.load(): handle all frame processing in new _process_frame()
* id3._load(): extraction init params to their own method
* id3._load(): move 2.3 to 2.4 frame upgrading code to its own method
* id3._load(): move date sanitization to its own method
* id3._load(): move TIT1 frame handling code to its own method
* id3._load(): move std text frames handling code to its own method
* id3._load(): move POPM frame handling code to its own method
* id3._load(): move APIC frame handling code to its own method
* id3._load(): move frame regex parsing to its own method
* id3._load(): move SYLT & UFID frame handling code to their own methods
* id3._load(): move USLT frame handling code to its own method
* id3._load(): move TMCL frame handling code to its own method
* id3._load(): move TIPL frame handling code to its own method
* id3._load(): move TXXX fram handling code to its own method
* Run pip install test with --verbose flag
* Fix build file generation in setup.py on Windows
* Use a consistent short app description in pyproject.toml and appstream data
* Define setuptools packages and ext-modules in pyproject.toml
* Remove unused code from setup.py
* Move package metadata from setup.py to pyproject.toml
* Build packages with PEP 517 "python -m build"
* Replace "setup.py test" with pytest
* Replaced deprecated log.warn calls with log.warning
* Explode _parse_release() in smaller bits:
* _parse_release(): move part of the code to new _needs_track_relationships()
* Rename m to metadata, and move customization code to its own method
* _hande_release_redirect(): reduce indentation level
* _parse_release(): Move release redirect code to its own method
* Introduce TracksCache and simplify _match_files()
* _e -> _i
* Remove noqa: B008, define parent parameter as None and properly initialize
* Raise from previous OSError
* Raise from previous ValueError exception
* always -> run_on_error
* py38 -> py39
* Do not add a project section yet
* Use latest ruff (explicit)
* Simplify, set with twice the same element
* Ignore B008, as its the correct proto
* Add missing @staticmethod
* Fix E741, B020, B007 warnings
* Use raise ... from were applicable
* Ignore some annoying flake8 warnings (mostly about capitalization)
* Fix unused variables warnings, mainly by prefixing them with _
* Add ruff
* Add ruff config to pyproject.toml
* Use % style instead of f-strings for logging
* Prospector: do not run mccabe (complexity) and skip generated files
* CoverArt._set_metatada() call: Fix missing argument image_info when used with local files
* Disable pylint too-many-positional-arguments
* Declare pywintypes & win32api to None if not imported
* Declare variables to None to make pylint happier (mainly conditional imports)
* Translated using Weblate (Chinese (Simplified Han script))
-------------------------------------------------------------------
Tue Feb 18 17:49:47 UTC 2025 - scott.bradnick@suse.com
- Update to version 3.0.0.dev5:
* Release 2.13.3
* Run update_constants
* PICARD-2192: For macOS build separate x86_64 and arm64 packages
* PICARD-2909: Do not write image width / height for Opus files
* PICARD-2909: Do not write image width / height for Opus files
* Removed win-build-fixes.ps1, the workaround is no longer required for Qt6
* Build Win/Mac packages with lates PyQt 6.8.1
* Upgrade to PyInstaller 6.12.0
* PICARD-3034: Make win-build-fixes.ps1 more verbose
* PICARD-3034: Fix win-build-fixes.ps1 not being called
* Translated using Weblate (Chinese (Simplified Han script))
* Translated using Weblate (Chinese (Simplified Han script))
* Translated using Weblate (Albanian)
* Release 2.13.2
* _use/merge_orig_tags(): reduce code redundancy
* Refactor metadatabox use original values
* PICARD-3030: Fix crash when merging original values for multiple tags
* set_tag_values() -> _set_tag_values()
* _use/merge_orig_tags(): reduce code redundancy
* Refactor metadatabox use original values
* PICARD-3030: Fix crash when merging original values for multiple tags
-------------------------------------------------------------------
Wed Feb 05 14:55:57 UTC 2025 - scott.bradnick@suse.com
- Update to version 3.0.0.dev5:
* Fix msix package filename not containing version
* Release 2.13.1
* Removed github-release dependency on package-pypi
* Release 2.13.1a1
* Move pypi-release task into package.yml
* Update constants
* Release 2.13
* Update constants
* Bump azure/trusted-signing-action from 0.5.0 to 0.5.1
* Bump azure/trusted-signing-action from 0.5.0 to 0.5.1
* Translated using Weblate (Albanian)
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Polish)
* Translated using Weblate (Polish)
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (Italian)
* Translated using Weblate (Italian)
* Translated using Weblate (Albanian)
* Translated using Weblate (Albanian)
* Update translation files
* Translated using Weblate (Albanian)
* Translated using Weblate (German)
* Update some UI labels for consistency and easier translation
* Translated using Weblate (German)
* CI: Use actions/setup-python cache for pip
* Do not consider paths with a single leading slash as absolute on Windows
* Run CI workflows for tests and PyPI packages with Python 3.13
* Add Python 3.13 to Python package metadata
* Translated using Weblate (Finnish)
* Translated using Weblate (Chinese (Simplified Han script))
* Added tests for Track genre handling
* Fix loading of folksonomy tags / genres
* Run update constants
* Run update constants
* Update translation files
* Translated using Weblate (Chinese (Traditional Han script))
* Update picard.pot
* PICARD-3021: Context menu action to merge original and new metadata values
* Update translation files
* Update picard.pot
* PICARD-3021: Context menu action to merge original and new metadata values
* Update dependencies for macOS and Win builds
* PICARD-3012: Sort files by disc no. when submitting cluster as release
* Use a common function for both tracknumber() and discnumber()
* Use ValueError exception (missed change)
* Use consistent logic for Item.discnumber and Item.tracknumber
* Moved addrelease.extract_discnumber functionality to Item.discnumber
* PICARD-3012: Sort files by disc no. when submitting cluster as release
* Fix headers/copyrights
* Fix headers/copyrights
* Fix headers/copyrights
* Fix headers/copyrights
* Translated using Weblate (Swedish)
* Update dependencies for Win and Mac builds
* Build with PyQt 6.8 for Windows and macOS
* Translated using Weblate (Turkish)
* CI: Use actions/setup-python cache for pip
* Ensure options are registered in profiles on startup
* PICARD-3019: Rebuild options menu on setting profile changes
* PICARD-3019: Move setting_changed signal to ConfigSection class
* Translated using Weblate (Chinese (Traditional Han script))
* Fix opening option dialog with specific page
* Handle clear_existing_tags change in metadatabox
* Handle option menu toggles update with new settings_changed signal
* Rename settings_changed_signal to just settings_changed
* PICARD-3014: Fix macOS not sorting empty values before other entries
* PICARD-3014: Fix macOS not sorting empty values before other entries
* Add additional settings to watch
* Update metadatabox on settings change
* Move delete_genre_from_tag from track.py to album.py
* Rename _genres and _folksonomy_tags to genre and folksonomy_tags
* Return old and new values with signal.
* PICARD-3016: Fix log path name_filter on Windows with Python 3.13
* Do not consider paths with a single leading slash as absolute on Windows
* Update PyInstaller to latest version 6.11.1
* macOS package build with Python 3.13
* Windows package build with Python 3.13
* Run CI workflows for tests and PyPI packages with Python 3.13
* Emit signal for each option setting but only if the value has changed.
* Translated using Weblate (German)
* Add signal when file naming related settings are changed
* Add helper function to check if tag is editable
* Show File Path ignoring move and rename files
* Support more LRC timestamps (#2566)
* added tagger instance to ScriptsMenu
* Minimum supported Python version is now 3.8
* Add ~filepath to tag names
* Add path to metadatabox
* PICARD-3013: Fix case-only renaming on case-insensitive filesystems
* Remove unused const imports
* PICARD-3013: Fix case-only renaming on case-insensitive filesystems
* Add Python 3.13 to Python package metadata
* Translated using Weblate (Norwegian Bokmål)
* PICARD-2886: If MB server OAuth2 logout fails, show a dialog box
* PICARD-2886: Implemented OAuth2 server side token revocation on logout
* PICARD-736: OAuth2: If webbrowser integration is turned of use OOB flow
* PICARD-736: oauth token exchange via webflow
* PICARD-2882: document functions s256_encode and base64url_encode
* PICARD-2882: Support OAuth2 PKCE
* Translated using Weblate (Norwegian Bokmål)
* Require older PyQt5-sip for Python before 3.9.
* Pin PyQt5-sip to version 12.15 on Windows build for Python 3.8
* PICARD-3002: Use Azure Trusted Signing for code signing
* Split CI package tasks into separate files
* PICARD-3008: Handle OverflowError in extract_year_from_date
* PICARD-2991: Do not fail to load renaming options page on make_filename errors
* PICARD-2991: Handle statvfs errors on file rename
* CI: Replace deprecated macos-12 image with macos-13
* Remove unused titlize function
* Add test for titlecase function
* Create titlecase util function
* Use titlecase util function instead of string title method
* Add custom function for title case to handle apostrophe
* Translated using Weblate (Chinese (Simplified Han script))
* Change genres to genre
* Add function to remove genres from tags
* removing unneeded config variables
* Translated using Weblate (Lithuanian)
* Update dependencies for Win and Mac builds
* PICARD-3001: Allow dependency charset-normalizer 3.x
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Lithuanian)
* Fix tests
* Move repeated code to _add_tags, remove filter
* Remove the check for 'use_genre'
* Move the method to follow add_genre
* Check 'folksonomy_tag' setting and fill genre
* Write _genres and _folksonomy_tags into file
* Load tags to _folksonomy_tags and genres to _genres
* Add _folksonomy_tags property to MetadataItem Class
* Translated using Weblate (Lithuanian)
* Update script editor examples only if script editor is visible
* PICARD-2989: fix SettingsOverride recursion
* Use PyQt 5.15.11 for macOS and Windows builds
* Translated using Weblate (Spanish)
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Lithuanian)
* Translated using Weblate (Italian)
* Run update_constants
-------------------------------------------------------------------
Tue Dec 10 20:36:31 UTC 2024 - scott.bradnick@suse.com
- Using git sources, but seems to self-set a version tag during build.
- Update to version 3.0.0.dev5:
* Translated using Weblate (Norwegian Bokmål)
* PICARD-3002: Use Azure Trusted Signing for code signing
* PICARD-3008: Handle OverflowError in extract_year_from_date
* PICARD-2991: Do not fail to load renaming options page on make_filename errors
* PICARD-2991: Handle statvfs errors on file rename
* CI: Replace deprecated macos-12 image with macos-13
* Add a blank line after function definition
* map -> mapping as map is a reserved word
-------------------------------------------------------------------
Mon Sep 9 06:46:48 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Update 2.12.3:
* PICARD-2958 - Hovering over unmatched files shows a tooltip with
the PO translation file header for the active locale
* PICARD-2960 - Replacement for directory separators can itself be
set to a directory separator
-------------------------------------------------------------------
Mon Sep 9 06:46:36 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Update to 2.12.2:
* PICARD-2953 - Windows: Incorrect sort order in list views and
search result
-------------------------------------------------------------------
Mon Sep 9 06:46:28 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Update to 2.12.1:
* PICARD-2914 - macOS: Crash when opening options with Spanish UI
* PICARD-2939 - Crash when loading release with genre filters resulting
in empty genre list
* PICARD-2940 - Possible bug with locking in Metadata.__iter__
* PICARD-2946 - Fix display length value in AppStream metadata
-------------------------------------------------------------------
Mon Sep 2 14:10:38 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Drop 0001-Fix-exception-when-genre-filtering-results-in.patch
-------------------------------------------------------------------
Mon Aug 12 15:25:02 UTC 2024 - Antonio Larrosa <alarrosa@suse.com>
- Add patch from upstream to fix a segfault when filtering genres
results in empty list of genres:
* 0001-Fix-exception-when-genre-filtering-results-in.patch
-------------------------------------------------------------------
Thu Jun 27 09:17:16 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Update to 2.12:
Bugfixes:
* PICARD-2468 - Unexpected behavior of MP3 comment tags when language isn't set
* PICARD-2846 - macOS package MusicBrainz-Picard-2.11-macOS-10.12.dmg
is not compatible with macOS 10.12 and 10.13
* PICARD-2850 - %_filename% tag displays as "_mp3" in preview
* PICARD-2866 - Non-genre tag added as genre for standalone recording
* PICARD-2868 - Picard crashes after selecting track search result
* PICARD-2880 - Non-integer rate limit delay causes crashes
* PICARD-2883 - Tooltip explaining match icon missing when there are multiple candidates
* PICARD-2885 - Special file error icons for permission and not found errors are not being used
* PICARD-2891 - Dragging matched files from right pane to clusters does not use original metadata
* PICARD-2895 - Picard crashes on Windows with Deezer plugin enabled
* PICARD-2901 - Pressing Shift+Alt+A (Add tag) raises an exception when there's nothing to edit
* PICARD-2910 - AttributeError: 'ScriptEditorDialog' object has no attribute
'unsaved_changes_confirmation'.
* PICARD-2918 - Crash when quitting Picard after saving large number of files
* PICARD-2919 - "Unrecognized image data" error when fetching GIF Cover Art
Improvements:
* PICARD-2716 - Accept encodings other than UTF-8 when opening CD extraction logs
* PICARD-2896 - Support .ogx extension for Ogg container
* PICARD-2935 - Improve results of genre filter options
-------------------------------------------------------------------
Sat Jan 27 06:48:15 UTC 2024 - Michael Vetter <mvetter@suse.com>
- Update to 2.11:
* PICARD-2819 - Track/release relationship settings not being
respected as described
-------------------------------------------------------------------
Mon Oct 16 13:52:32 UTC 2023 - Michael Vetter <mvetter@suse.com>
- Update to 2.10:
* Bugfixes
- PICARD-2768 - Series relationships are not loaded for standalone recordings
- PICARD-2774 - Error: 255 is not a valid Id3ImageType
- PICARD-2775 - Disable Qt WebP plugin for Windows and macOS binary
builds to mitigate libwebp vulnerability (CVE-2023-4863)
- PICARD-2776 - Track metadata compare ignores video flag check if there is no release
* Improvements
* PICARD-2769 - If a tag got unset by scripting display a file's original tag value in the columns
- Refresh picard-requirements.patch
-------------------------------------------------------------------
Tue Sep 12 06:56:05 UTC 2023 - Michael Vetter <mvetter@suse.com>
- Update to 2.9.2:
* Bugfixes
- PICARD-2700 - Content of series variables gets duplicated on each refresh
- PICARD-2712 - "00" is always stripped from DATE tag on save
- PICARD-2722 - Windows version can crash on exit and prevent restart of Picard
- PICARD-2724 - Crash in track search dialog if artist name translation is enabled
- PICARD-2733 - Crash when saving files with UI language set to Finnish
- PICARD-2736 - Windows: SSL errors if conflicting libssl is installed system wide
* Tasks
- PICARD-2752 - Include resource/images in source archive
* Improvements
- PICARD-2720 - Linux: Allow opening new instance via XDG desktop entry application action
-------------------------------------------------------------------
Thu Aug 17 07:16:45 UTC 2023 - Michael Vetter <mvetter@suse.com>
- Update to 2.9.1:
* Bugfixes
- PICARD-2186 - Windows installer fails to detect already
running instance
- PICARD-2688 - Windows: Portable version crashes when launched
with -h
- PICARD-2692 - Windows: Crash on startup after upgrade from
2.8 to 2.9
- PICARD-2693 - Windows installer allows canceling the
uninstaller
- PICARD-2694 - Crash when re-opening options after closing
without closing the scripting documentation dialog
- PICARD-2695 - Crash in script editor when showing tooltips
for some Unicode character codes
- PICARD-2696 - Windows: Shift dragging files into Picard
deletes the files on the filesystem
- PICARD-2697 - Options "Restore Defaults" does not restore all
defaults
- PICARD-2698 - Windows: Permanent high CPU usage
- PICARD-2710 - Files are not getting loaded on systems with 2
or less CPUs
- PICARD-2713 - Stand alone instance mode does not work
- PICARD-2714 - Windows: Portable installs should run as
separate instances
- PICARD-2718 - File selector for ripping log files does not
show *.log files
with the "All supported log files" filter
* New Features
- PICARD-1815 - Notification on plugin updates available
- PICARD-2705 - Provide the new audio director relationship as
tag
* Improvements
- PICARD-2691 - Provide code signed source archives
-------------------------------------------------------------------
Thu Jul 27 06:30:45 UTC 2023 - Michael Vetter <mvetter@suse.com>
- Update to 2.9:
* Bugfixes
- PICARD-2011 - "RuntimeError: dictionary changed size during
iteration" in metadatabox
- PICARD-2685 - Moving files between tracks looses AcoustID
fingerprint and ReplayGain tags
- PICARD-2689 - If the first dragged element is not visible an
empty rectangle is shown during drag
* Improvements
- PICARD-2680 - Modal first use and file save confirmation dialogs
- PICARD-2681 - Revise wording of first use and file save
confirmation dialogs
-------------------------------------------------------------------
Mon Jun 19 18:51:36 UTC 2023 - Benjamin Greiner <code@bnavigator.de>
- Remove obsolete python-sip (v4) module from BuildRequires
- Remove obsolete distribution switches for suse_version < 1500
- Use PEP517 macros instead of deprecated setup.py
- Enable tests
- Add picard-requirements.patch, update requirements
-------------------------------------------------------------------
Tue Dec 6 13:48:58 UTC 2022 - Paolo Stivanin <info@paolostivanin.com>
- Update to 2.8.5:
* Relative paths for cover art file names no longer work
* PICARD-2593 - Toolbar icon text disappears when saving options
* PICARD-2596 - "Show icons in menus" option is applied without saving options
-------------------------------------------------------------------
Tue Nov 29 18:57:35 UTC 2022 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to 2.8.4:
* Bugfixes
- PICARD-2520 - Null bytes in tag values can cause crashes when sorting
- PICARD-2539 - Picard crashes on huge releases if no cover art provider is
active
- PICARD-2548 - Loaded album does not update cover art display
- PICARD-2549 - Moving tracks between albums shows tracks differ even when
they do not
- PICARD-2554 - Submit AcoustIDs submits even IDs that are in center pane
- PICARD-2556 - Player popovers for volume and playback speed crash on
Wayland and open on wrong position
- PICARD-2557 - Add New Tag autocomplete list contains value typed so far
- PICARD-2558 - Floatable toolbars unusable under Wayland
- PICARD-2564 - Options for "Windows compatibility" and "Replace non-ASCII"
get incorrectly set to inactive
- PICARD-2565 - Rules for file name compatibility and max. path shortening
are not applied when saving cover art
- PICARD-2568 - $cleanmulti() has no effect for hidden variables
- PICARD-2570 - Unable to drag tracks from right hand pane to Clusters
- PICARD-2582 - distutils.errors.DistutilsClassError when building with
setup.py
- PICARD-2588 - QObject::startTimer: Timers can only be used with threads
started with QThread
* Improvements
- PICARD-2589 - Support media types "DualDisc (DVD side)" and "Betacam SP"
-------------------------------------------------------------------
Thu Aug 18 07:28:42 UTC 2022 - Michael Vetter <mvetter@suse.com>
- Update to 2.8.3:
* PICARD-2524 - Random crash on album search
-------------------------------------------------------------------
Wed Jul 13 07:25:27 UTC 2022 - Michael Vetter <mvetter@suse.com>
- Update to 2.8.2:
* Bugfixes
- PICARD-2480 - Lookup CD from EAC log generates incorrect Disc
ID from Enhanced CDs
- PICARD-2498 - Except for the description no HTML should be
allowed in plugin metadata
- PICARD-2505 - Cover art type "matrix/runout" causes a folder
"matrix" being created when saving cover art
- PICARD-2506 - fpcalc errors out with paths > 259 characters
- PICARD-2507 - CD pregap track not included in totaltracks
- PICARD-2508 - Scripts being run repeatedly when script editor
is open, can result in data duplication for scripts appending
to existing tags
- PICARD-2515 - macOS: Swatches not coloured in Options >
User Interface > Colours
- PICARD-2518 - Keyboard shortcuts not working in Italian localization
* Improvements
- PICARD-2504 - Increase default query limit and make it configurable
- PICARD-2516 - Support CAA cover art types "Top" and "Bottom"
- PICARD-2517 - Support media type "Mixed Mode CD"
-------------------------------------------------------------------
Tue Jun 14 11:34:21 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.8.1:
* Bugfixes
- PICARD-2489 - Preferred Releases UI not loading in Options
menu on FreeBSD
- PICARD-2491 - Crash upon loading album information for
releases with MBID redirects
- PICARD-2493 - If locales for picard-countries or
picard-attributes are missing UI translation is completely
skipped
- PICARD-2494 - Remove empty info dialog for
"[standalone-recordings]" special album entry
-------------------------------------------------------------------
Tue May 24 08:26:41 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.8.0:
* Tasks
- PICARD-2484 - Update bundled PyJWT to 2.4.0 for Windows and
macOS builds
- Update to 2.8.0rc2:
* Bugfixes
- PICARD-2465 - RecursionError after dragging folder from file
browser
- PICARD-2470 - CD Lookup error: utf-8 codec can't decode byte
0xff in position 0: invalid start byte
- PICARD-2472 - Cluster action applies to already matched
albums
- PICARD-2473 - CD disc ID from log files is unavailable on
Windows if there is no CD drive
- PICARD-2474 - Revert PICARD-2420: Adding a file with existing
AcoustID fingerprint and recording MBID in the tags activates
submission
- PICARD-2475 - If search dialog query contains an MBID "Lookup
in browser" will not open in browser
- Update to 2.8.0rc1:
* Bugfixes
- PICARD-1570 - Windows: Files with path length > 259 char fail
to load
- PICARD-2292 - When a recording is a performance of multiple
works, any instrumental performance attribute erases all
other lyrics languages
- PICARD-2368 - Matching files compares "totaltracks" to the
total no. of tracks across all mediums on the release
- PICARD-2398 - "Use track relationships" doesn't work on large
releases
- PICARD-2399 - Crash on login if options get closed before
login requests finished
- PICARD-2417 - macOS: Expand/Collapse tracklist should use
Left cursor to collapse
- PICARD-2420 - Adding a file with existing AcoustID
fingerprint and recording MBID in the tags activates
submission
- PICARD-2423 - Dragging album with multiple files matched to a
track back to unmatched moves only half of the files
- PICARD-2425 - Picard crashes when accessing WinFSP /
SSHFS-Win share
- PICARD-2430 - "Submit cluster as release" drops text after
quotation marks
- PICARD-2435 - File naming examples crash if selected target
directory exceeds Windows path limit
- PICARD-2440 - FLAC cover art does not preserve ID3 image type
- PICARD-2453 - "Submit cluster as release" won't submit
catalog number if there is no label tag
- PICARD-2454 - UI blocks when loading releases with a huge
amount of tracks
- PICARD-2457 - "Search for similar albums" loads cover art
into wrong rows
- PICARD-2459 - Crash if temporary cover art files are
removed from disk
- PICARD-2461 - File does not show error icon after saving
- PICARD-2463 - Cover art box does not handle different screen
scalings on multi-screen setups
- PICARD-2464 - Cover art stack on HiDPI displays rendered too
small
* New Features
- PICARD-1455 - Use EAC / XLD log files for disc ID lookup
- PICARD-2410 - Use Whipper log files for disc ID lookup
- PICARD-2411 - Add option to remove broken seektable from
FLAC files
* Tasks
- PICARD-2332 - Convert code to use scoped PyQt enums
- PICARD-2422 - Remove AcousticBrainz analysis and submission
features
* Improvements
- PICARD-993 - Better error icons for file loading / saving
errors
- PICARD-2076 - Respect Windows 10 > 1607 removal of 260 limit
on filenames
- PICARD-2282 - Provide ability to import and export Picard
config
- PICARD-2349 - Use consistent terminology for "standalone
recordings"
- PICARD-2369 - Renamed "Preferred release formats" to
"Preferred medium formats"
- PICARD-2379 - Script options: Clarify what activating /
deactivating scripts means
- PICARD-2380 - Update to fpcalc 1.5.1 for Windows / macOS
packages
- PICARD-2382 - Make it easier to create a multi-value field
value containing duplicate values
- PICARD-2392 - Allow multi-value variables to contain empty
strings
- PICARD-2396 - Do not submit AcoustID fingerprints on
significant track length mismatch
- PICARD-2402 - Make 'end' argument optional for $substr()
function
- PICARD-2405 - Support CAA cover art type "Matrix/Runout"
- PICARD-2407 - Set browser integration port in add cluster as
release functionality
- PICARD-2409 - Allow searching and dropping MusicBrainz disc
ID URLs
- PICARD-2415 - Make "Other versions" easier to access as a
separate dialog
- PICARD-2419 - Improve track number from filename detection
to not treat e.g. UB40 at end of filename as track number
- PICARD-2421 - Consider track MBID when matching files to
tracks
- PICARD-2437 - Tag editor dialog box should say “OK”
instead of “Save"
-------------------------------------------------------------------
Fri Apr 1 00:32:59 UTC 2022 - Federico Mena Quintero <federico@suse.com>
- Add dependency on python3-PyYAML to avoid a crash on startup.
-------------------------------------------------------------------
Tue Jan 18 07:59:49 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.7.3:
* PICARD-2395 - macOS 10.13: On launch app is reported as damaged
-------------------------------------------------------------------
Tue Jan 11 11:25:45 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.7.2:
* Bugfixes
- PICARD-2375 - Loading indicator when loading releases stays
near zero
- PICARD-2377 - Crash on start if system reports a standard
location path that no longer exists
- PICARD-2378 - Windows: AcousticBrainz submission submits full
path to files instead of just the basename
- PICARD-2386 - Artist field sorts characters with diacritic
after z
- PICARD-2389 - Unsupported locale error on Windows
- PICARD-2390 - "Default listening port" label only partially
shown
* Improvements
- PICARD-2373 - Make $slice() "end" parameter optional
- PICARD-2374 - Remove rate limit for archive.org
- PICARD-2388 - Support .m4r file extension for MP4 (iTunes
Ringtone files)
- Update to 2.7.1:
* Bugfixes
- PICARD-2363 - ID3 v2.3 files show as changed directly after
saving
- PICARD-2366 - Auto analyze / auto cluster only works if files
are loaded via built-in file browser
- PICARD-2367 - Crash when dropping an album onto "Clusters"
- PICARD-2372 - Settings changed in profile not always saved
* Improvements
- PICARD-2365 - Allow building / packaging with PyYAML 6
- Update to 2.7.0:
* Bugfixes
- PICARD-2346 - ID3v2.3 files show as changed, even if no tags
changed and no tag changes are indicated
- PICARD-2351 - Windows: System language detection broken
- PICARD-2352 - Log view colors are not restored after a clear
- PICARD-2353 - Post cluster focus regression
- PICARD-2361 - Removing files while clustering
- PICARD-2362 - Added __pycache__ directories make builds
unreproducible
- Update to 2.7.0b3:
* Bugfixes
- PICARD-2320 - macOS: Picard 2.6.4 segfault upon
authorization/login prompt
- PICARD-2328 - Crash on startup with Python 3.10
- PICARD-2329 - Changing the enabled options doesn't update
the naming script
- PICARD-2330 - Changes do not show when script editor is
closed and re-opened from Options dialog
- PICARD-2342 - Saving cover images to WMA or MP4 files fails
if "clear existing tags" and "keep embedded images" are
active
* Improvements
- PICARD-2325 - Show MusicBrainz login errors
- PICARD-2327 - macOS: Treat files with hidden attribute as
hidden files
- PICARD-2334 - Have script editor consistently save to
configuration
- PICARD-2339 - Improve clustering performance
- PICARD-2340 - Use configured name for Various Artists for
clusters with unknown artist name
- PICARD-2344 - Add more settings to option profiles
- Update to 2.7.0b2:
* Bugfixes
- PICARD-2290 - macOS: System wide dark mode is not respected
- PICARD-2291 - Portable Picard 2.7.0b1 on Windows can
conflict with system wide Qt5 install
- PICARD-2293 - macOS: 2.7 beta 1 for macOS 10.12+ requires
macOS 10.14
- PICARD-2294 - Incorrect local file cover art regex can lead
to exception
- PICARD-2297 - Loading many files can cause some files to be
skipped and not loaded
- PICARD-2302 - First function in naming script not displaying
tooltip
- PICARD-2307 - Unable to save Vorbis Comments after $delete
script with tag name that's not valid in Vorbis
- PICARD-2308 - Add cluster as release does not set track
artists
- PICARD-2311 - ID3 cover art types, as used by ID3, ASF, FLAC
and Vorbis, are not preserved
- PICARD-2314 - Hidden variable ~length gets written to MP4
tags
- PICARD-2318 - Submit AcousticBrainz features enabled on
unmatched files
- PICARD-2321 - "Keep original cover art" for tracks not
showing correctly
- PICARD-2322 - If files are attached to album on load cover
art changes are not shown on album level
- PICARD-2324 - WavPack correction files are identified as
duplicates to their WavPack files and renamed
* New Features
- PICARD-2304 - Add option to show/hide icons in menus
* Improvements
- PICARD-2239 - Save option settings to specified profile
- PICARD-2299 - Extend genre wildcard filtering with "?" and
"[...]" matching
- PICARD-2301 - Slight rewording of "CAA" cover art provider
options
- PICARD-2305 - Restructure user interface options
- PICARD-2306 - Disable "Convert Unicode Punctuation" option
by default
- Update to 2.7.0b1:
* Bugfixes
- PICARD-157 - "Translate artist names to this locale where
possible" also translates ones already in the correct locale
- PICARD-1645 - Picard doesn't respect MusicBrainz server
settings for the CD lookup in browser functionality
- PICARD-2189 - Network cache directory at wrong location on
Windows
- PICARD-2217 - $performer() pattern matches full tag name
- PICARD-2233 - Composer Sort Order doesn't use the artist sort
name when the "credited as" text is populated
- PICARD-2236 - Renaming files with "replace non-ascii" treats
fullwidth slash U+FF0F as directory separator
- PICARD-2253 - Tagging script name can be changed to empty
string
- PICARD-2261 - Any tagger script causes multi-line fields to
become changed
- PICARD-2276 - Fix browser integration on Windows if hostname
contains non-ASCII characters
* New Features
- PICARD-9 - Options profiles / quick presets
- PICARD-257 - Option to preserve artwork when selecting "clear
existing tags"
- PICARD-1127 - Filename presets
- PICARD-1734 - Add AcousticBrainz analyzer features
- PICARD-2165 - Add $is_multi() function to test if a variable
is multi-value
- PICARD-2203 - Integrate add cluster as release functionality
into Picard
- PICARD-2204 - Support unicode escape sequences in tagger
scripts
- PICARD-2213 - Allow naming script import/export as YAML
scripting package
- PICARD-2277 - When translating artist names ignore selected
scripts
- PICARD-2279 - Allow saving AcoustID fingerprint in
acoustid_fingerprint tag
* Tasks
- PICARD-2231 - Fix packaging Picard on Windows with Python 3.8
or later
* Improvements
- PICARD-226 - Cluster automatically
- PICARD-412 - Allow several locales to be selected for
"Translate artist names to this locale where possible"
- PICARD-524 - Ability to have more that one rename script and
choose desired
- PICARD-563 - Pad disc number in default renaming script if
more than 9 discs
- PICARD-1568 - Improve parsing track number and title from
filename
- PICARD-1718 - Display and log crash details
- PICARD-2150 - Option to show or hide the tag editor
- PICARD-2151 - Provide functions $year(), $month(), $day()
- PICARD-2171 - Make guessing title from filename if title is
empty optional
- PICARD-2174 - Optimize metadata view displaying format
specific metadata
- PICARD-2176 - Add column to see if cover art is present
- PICARD-2178 - Select random sample of loaded files to use as
renaming examples
- PICARD-2179 - Refactor Options > File naming
- PICARD-2181 - Support Markdown formatting for plugin
descriptions
- PICARD-2184 - Allow fully silent install using the Windows
installer
- PICARD-2198 - Update formats for Tefifon and 5.25" Floppy
Disk
- PICARD-2201 - Add help button to "Tags from file names"
dialog
- PICARD-2207 - Script editor: Show hover tooltip on Unicode
escape sequences and functions
- PICARD-2215 - Add function $countryname() to get country
name from country code
- PICARD-2218 - $performer() should allow regular expressions
- PICARD-2220 - Set default file extension for files with empty
extension
- PICARD-2232 - Allow data submission to unofficial server
- PICARD-2237 - Realistic progress and ETA
- PICARD-2248 - Lazily initialize the file browser on first
display
- PICARD-2251 - Add ability to import/export tagging scripts
- PICARD-2263 - Performers without role do not get saved to
TMCL (TIPL respectively) frames
- PICARD-2266 - Add already mapped tags gapless, podcast,
podcasturl, show and showsort to list of known tags
- PICARD-2271 - Allow removing obsolete option settings from
configuration INI file
- PICARD-2273 - Set acoustid_id tag also if AcoustIDs were
found, but no recordings are attached
- PICARD-2278 - Show the path and name of the configuration
currently used
- PICARD-2288 - Add variable %_workcomment% for the work
disambiguation comment
-------------------------------------------------------------------
Tue Dec 14 14:14:14 UTC 2021 - ohering@suse.de
- Add python-rpm-macros (bsc#1180125)
-------------------------------------------------------------------
Wed Oct 13 08:19:10 UTC 2021 - Michael Vetter <mvetter@suse.com>
- Update to 2.6.4:
* PICARD-2199 - Saving ID3 ratings fails, if rating e-mail contains
non latin-1 characters
* PICARD-2200 - Copy and pasting function names from inline scripting
docs can copy Unicode left-to-right mark
* PICARD-2230 - Picard fails to start on Windows if the hostname
contains non-ASCII characters and browser integration is enabled
* PICARD-2269 - "TypeError: arguments did not match any overloaded
call" with Python 3.10
* PICARD-2274 - Picard 2.6.3 crashes when track is removed or moved
during lookup
-------------------------------------------------------------------
Wed Jun 9 09:47:37 UTC 2021 - Michael Vetter <mvetter@suse.com>
- Update to 2.6.3:
* PICARD-2205[1] - Syntax highlighting ignores functions
starting with underscore or numbers
* PICARD-2206[2] - Fix tab order in option pages
* PICARD-2209[3] - Minimizing / maximizing Picard window
registers desktop status indicator multiple times
* PICARD-2214[4] - Backslash at end of script raises TypeError
* PICARD-2219[5] - Empty file naming script causes files
to be renamed to _ext
* PICARD-2226[6] - Some config changes are not applied
until restart
-------------------------------------------------------------------
Mon May 3 12:14:49 UTC 2021 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.6.2:
* Bugfixes
- PICARD-2188 - Plugin update can fetch old version from
network cache
- PICARD-2191 - Revert title and track number guessed from
filename should show up as changed metadata
-------------------------------------------------------------------
Tue Apr 20 11:31:55 UTC 2021 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.6.1:
* Bugfixes
- PICARD-2160 - Switching dark mode in macOS preferences does
not change list elements leading to mix of light and
dark mode
- PICARD-2166 - "Use original values" for a tag on a large
selection takes very long with a high CPU usage
- PICARD-2168 - Keyboard shortcut to trigger script editor
auto completion does not work on macOS
- PICARD-2170 - Title and track number guessed from filename
should show up as changed metadata
- PICARD-2173 - "Search for similar tracks" is enabled by
default, causes crash if used without selection
- PICARD-2187 - Scripting error in file naming options is
not displayed properly
* New Features
- PICARD-2161 - Add script function $unique to remove
duplicate values from multi-value variables
- PICARD-2177 - Add script function $replacemulti to replace
entries in multi-value variables
* Improvements
- PICARD-2157 - Reduce comparison overhead of logging window
- PICARD-2162 - Coverart box is slow to update when many files
are selected
- PICARD-2185 - Remove empty elements from $map() output
-------------------------------------------------------------------
Tue Apr 6 08:17:54 UTC 2021 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.6:
* Bugfixes
- PICARD-2156 - macOS: Use Cmd+Shift+H instead of Cmd+H for
opening history view to avoid conflicts with system keyboard
shortcut to hide window
- PICARD-2159 - macOS: Scripting Documentation dialog opens
behind options dialog
* Improvements
- PICARD-2158 - Make Scripting Documentation dialog available
in renaming script
- PICARD-2164 - Add shortcut Ctrl+T for "Search for similar
tracks"
- Version 2.6.0b3
* Bugfixes
- PICARD-2135 - Tags license and website cannot be deleted and
get duplicated on update for ID3
- PICARD-2136 - macOS: File browser does not use user's home
folder by default
- PICARD-2138 - macOS: After saving options the toolbar style
changes
* Improvements
- PICARD-1357 - Support dark mode on macOS Mojave 10.14 and
later
- PICARD-2095 - Allow the user to choose between light or
dark theme on Windows and macOS
- Version 2.6.0b2
* Bugfixes
- PICARD-2131 - Tagger button reacts slow in Firefox
* Improvements
- PICARD-2130 - Restructure cover art options to make them
easier to understand
- Version 2.6.0b1
* Bugfixes
- PICARD-1528 - "Search for similar albums" causes crashes if
the selection includes clusters and files
- PICARD-1689 - Freezes when adding tags to large album
- PICARD-1747 - macOS: Tearing when scrolling list of plugins
- PICARD-1926 - "Show changes first" in tag preview window
leads to freeze
- PICARD-2088 - Picard hangs when adding new tag to multiple
tracks in an album
- PICARD-2091 - Loading images from cover art via drag and
drop from browser only loads PNG and JPEG images
- PICARD-2097 - Crash with zh_CN locale
- PICARD-2113 - Script can change title of "Unclustered files"
special cluster
- PICARD-2127 - "Lookup in browser" in metadata box does not
pass tagger port
* New Features
- PICARD-204 - Support for track-level original release date
- PICARD-1998 - Add "director" (for videos) tag
- PICARD-2089 - Support WebP images for cover art
- PICARD-2124 - Add MB release annotation field as
%_releaseannotation% variable
* Tasks
- PICARD-715 - Chrome to block browser access to localhost
- PICARD-1950 - Fix macOS builds with PyQt > 5.13.2
* Improvements
- PICARD-2084 - Use TLS for AcoustID web service requests
- PICARD-2090 - Reenable TIFF support for cover art images
- PICARD-2092 - Improve script editor function/variable auto
completion
- PICARD-2105 - Improve script function popup descriptions
- PICARD-2110 - Add %originaldate% and %originalyear% to file
naming examples
- PICARD-2114 - Show disambiguation comment in CD Lookup
popup window
- PICARD-2125 - Enable CAA Release Group cover art provider
by default
- PICARD-2126 - Allow cross origin access to browser
integration
-------------------------------------------------------------------
Wed Jan 6 16:43:45 UTC 2021 - Michael Vetter <mvetter@suse.com>
- Update to 2.5.6:
* Bugfixes:
- PICARD-2074 - Crash when trying to add new tags
- PICARD-2083 - Snap version: path to fpcalc gets invalid
after update
- PICARD-2087 - Adding new tags crashes Picard with Qt < 5.10
-------------------------------------------------------------------
Fri Dec 18 10:33:06 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.5.5:
* Bugfixes:
- PICARD-2070 - Lookup on cluster only moves every other file
- PICARD-2071 - Track listings sometimes in reverse order
- Update to 2.5.4:
* Bugfixes:
- PICARD-2067 - 2.5.3 crashes on start on Windows
- Update to 2.5.3:
* Bugfixes:
- PICARD-2016 - AcoustID API Key is not stripped
- PICARD-2017 - Picard crashes when removing entries on the
right side while loading
- PICARD-2019 - Saving tracks to SMB share on Windows 10
results in ever more nested folders
- PICARD-2020 - Multi-value album or recording ID tags prevent
Picard from loading the proper albums
- PICARD-2021 - SameFileError when moving files between network
path and local path on Windows
- PICARD-2022 - Crash accessing network share without access
rights on Windows
- PICARD-2023 - Appdata file not generated on non-Linux
platforms
- PICARD-2028 - Deleting albums and saving files is extremely
slow
- PICARD-2031 - Scripting documentation link 404
- PICARD-2036 - MultiMetadataProxy::pop is not flagged as a
WRITE_METHOD; this breaks the "keep" plugin
- PICARD-2037 - Improve Info/Error tab readability
- PICARD-2045 - After fingerprint, unsaved tracks have green
tick
- PICARD-2050 - File selector pane jumps around horizontally
instead of expanding / collapsing the folder
- PICARD-2056 - Interface color changes are not saved
- PICARD-2058 - Add File dialog does not show files with
uppercase extension on case-sensitive file systems
- PICARD-2059 - Scripting Documentation shows extra line for
each function
- PICARD-2062 - Searching for similar tracks can remove current
album even if there are unmatched tracks
- PICARD-2064 - Cluster shows empty album column
* Improvements:
- PICARD-2034 - Add context menu entry for copy and paste to
metadata view
- PICARD-2035 - More verbose tooltip for album error icon
- PICARD-2038 - Integrate metadata box clipboard with system
clipboard
- PICARD-2039 - Unify error handling for albums, non-album
tracks and files, show errors in info dialog
- PICARD-2044 - Add date and originaldate fields to the choice
of columns in the list views
- PICARD-2046 - AcoustID submission can fail due to body size
limit of AcoustID server
- PICARD-2047 - Improve contrast for console text in dark mode
- PICARD-2057 - Allow showing all files in Add Files dialog
- PICARD-2063 - Add an option to disable automatic horizontal
scrolling in file browser
-------------------------------------------------------------------
Mon Nov 16 07:35:31 UTC 2020 - Michael Vetter <mvetter@suse.com>
- Update to 2.5.2:
* Bugfixes:
- PICARD-1991 - Case-only changes to file names are not applied
on case insensitive file systems on Linux
- PICARD-1992 - Case-only changes to file names are not applied
on FAT32 and exFAT file systems on Windows 10
- PICARD-2001 - Directory drag & drop from file browser to
cluster area broken
- PICARD-2004 - Metadata changes loaded asynchronously by
plugins are reset if file gets matched to track
- PICARD-2005 - Modified fields are sometimes not correctly
marked as changed when multiple files are selected
- PICARD-2006 - "Local files" cover provider does not detect
cover files for files already present at release loading time
- PICARD-2012 - Loaded files not shown in UI if release
MBID is a redirect
- PICARD-2014 - Config upgrade from Picard < 1.3.0 to
version 2.4 or later fails
* Improvements:
- PICARD-1828 - Allow assigning cover art to multiple selected
files
- PICARD-1999 - Provide binary distributions for Windows and
macOS on PyPI
- PICARD-2007 - Disable analyze / audio fingerprinting for MIDI
files
-------------------------------------------------------------------
Thu Oct 29 07:47:43 UTC 2020 - Michael Vetter <mvetter@suse.com>
- Update to 2.5.1:
* Bugfixes:
- PICARD-1987 - Special variables %_multiartist%, %_pregap%,
%_datatrack% and %_totalalbumtracks% missing after files
got matched to a track
- PICARD-1988 - Aborts if directory scan finds a directory
which cannot be read
- PICARD-1989 - Auto-sizing does not work right on first column
- PICARD-1990 - Case-only changes to file names are not applied
on Windows if running with Python >= 3.8
* Improvements:
- PICARD-1985 - Support chorus master recording relationships
as "performer:chorus master" instead of second conductor
- PICARD-1995 - Add command line parameter --no-player to
disable media player
- PICARD-1997 - Reduce performance impact of fingerprinting
column
-------------------------------------------------------------------
Tue Oct 27 06:29:29 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.5:
* Bugfixes
- PICARD-214 - Take case insensitive file systems into account
when renaming files
- PICARD-1972 - Times missing in bottom panel
- PICARD-1973 - Multi-value tags getting flattened when files
get matched to tracks
- PICARD-1974 - Picard crashes when using the same tag name
more than once in "Tags from File Names..."
- PICARD-1975 - Tags from file names does not properly set
hidden tags
- PICARD-1976 - Cover art providers do not handle URLs with
query arguments correctly
- PICARD-1979 - Comment tag in MP4 not saved correctly
- PICARD-1982 - Cover art not saving properly
* Improvements
- PICARD-1978 - Add keyboard shortcut for Tags From Filenames
and allow to place it in toolbar
- Update to 2.5.0b1:
* Bugfixes
- PICARD-1882 - Scripting text not well readable with
dark theme on KDE
- PICARD-1888 - Returning tracks to cluster uses matched
release rather than what's in the files
- PICARD-1932 - Failed AcoustID submission shows as successful
- PICARD-1939 - Crash when "Remove" button is hit without
picking a file first
- PICARD-1941 - Unchanged multi-value tags on tracks show up
as changed
- PICARD-1954 - Right-clicking on album with "could not load
album" message crashes
- PICARD-1956 - It is possible to have the same file multiple
times inside the same cluster
- PICARD-1961 - Capitalization for non-standardized instruments
- PICARD-1963 - Possible stack overflow when loading files
- PICARD-1964 - Scripting documentation does not support RTL
languages
- PICARD-1969 - Browser integration port changes without saving
options
- PICARD-1971 - Tags from file names dialog does not restore
window size
* New Features
- PICARD-259 - Make file-specific variables and metadata
available to tagger script
- PICARD-534 - Support SOCKS proxy
- PICARD-1908 - Allow loading release group URLs / MBIDs
- PICARD-1942 - Display tracklist in Info dialog for loaded
releases
- PICARD-1946 - Map "vocal arranger" rel to arranger tag
* Improvements
- PICARD-1390 - Apply a network timeout to avoid network
requests hanging indefinitely
- PICARD-1782 - Allow locking table headers to prevent
accidental resorting
- PICARD-1879 - When dragging tracks onto a release add
those tracks sequentially
- PICARD-1906 - Clarify uninstall message in Windows installer
- PICARD-1936 - Rename the "Whitelist" cover art provider to
"Allowed Cover Art URLs"
- PICARD-1937 - Add context menu entry to cover art box to
browse for local file
- PICARD-1938 - Add context menu option to load files / folders
from file browser
- PICARD-1951 - Avoid complete hiding of metadata box or file
panes
- PICARD-1952 - Allow using native Qt styles on Linux
- PICARD-1955 - Use built-in search by default for new installs
- PICARD-1957 - Load files in file browser on double click
- PICARD-1958 - macOS: Offer link to Applications folder in
disk image
- PICARD-1959 - In disc ID dialog rename "Lookup in Browser"
to "Submit disc ID"
- PICARD-1960 - Allow adding new items in list editor views
using Insert key
- PICARD-1965 - Allow opening fingerprinting options in
AcoustID missing API key dialog
* Tasks
- PICARD-1929 - Make NSIS installer translations available on
Transifex
-------------------------------------------------------------------
Sat Sep 5 17:34:47 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.4.4:
* Bugfixes
- PICARD-1931 - Regression: "Unmatched Files" do not appear
when release was deleted from MB
- Update to 2.4.3:
* Bugfixes
- PICARD-1916 - Picard crashes on older releases of macOS due
to theming exception
- PICARD-1918 - Saving files fails if there is no front image
and "Save only one front image as separate file" is enabled
- PICARD-1921 - Windows 10: With dark theme inactive checkboxes
cannot be distinguished from active ones
- PICARD-1928 - After clustering fingerprint icon disappears
- PICARD-1931 - Regression: "Unmatched Files" do not appear
when release was deleted from MB
* Improvements
- PICARD-1935 - Include tests in PyPI sdist tarball
-------------------------------------------------------------------
Thu Aug 20 09:32:18 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.4.2:
* Bugfixes
- PICARD-1909 - No refresh of metadata on "Use Original Value"
or remove tags
- PICARD-1911 - Removing tags does not update list views
- PICARD-1913 - Changing tags of a track without matched files
changes original metadata
- PICARD-1914 - Editing track metadata edits data of previously
linked file
- PICARD-1915 - An album selected during loading should update
the metadata view when loading has finished
- PICARD-1916 - Picard crashes on older releases of macOS due
to theming exception
* Improvements
- PICARD-1860 - New added tag should open field to enter value
automatically
- PICARD-1899 - Update help links to go to
http://picard-docs.musicbrainz.org
- PICARD-1920 - Open documentation in options dialog using the
platform's help shortcut (e.g. F1 on Windows or Ctrl+? on macOS)
- Update to 2.4.1:
* Bugfixes
- PICARD-1904 - Picard 2.4 does not start on Windows 7 and Windows 8
-------------------------------------------------------------------
Tue Aug 11 10:02:35 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.4:
* Bugfixes
- PICARD-1763 - App does not start on macOS 10.13 High Sierra
- PICARD-1873 - Scripting documentation uses an ugly font on Windows
- PICARD-1881 - Function names in script documentation not readable
with dark theme
- PICARD-1884 - No tracknumber tag if track number is 0
- PICARD-1889 - "Use track relationships" is including release
relationships
- PICARD-1890 - User is warned about color changes when exiting
options, even if no change was made
- PICARD-1891 - Crash parsing bad date in metadata
- PICARD-1892 - Deleting "Total Tracks" or "Total Discs" from
Vorbis tags causes save to fail
- PICARD-1894 - Detecting track number from filename wrongly
detects leading or trailing numbers
- PICARD-1896 - Instrument arranger is not being mapped for
tagging using the correct key
- PICARD-1902 - Crash when typing $noop(\) in the script editor
* New Features
- PICARD-1128 - Support Microsoft WAVE format (RIFF/WAVE) tagging
with ID3
- PICARD-1839 - Support DSDIFF (DFF) files
* Improvements
- PICARD-1812 - Support RIFF INFO chunks for WAVE files
- PICARD-1871 - Use tag list editor for preserved tags
- PICARD-1875 - Improve function documentation for $firstalphachar
- PICARD-1878 - Inefficient reading of tracks leads to slow saving
on some file systems and network shares
- PICARD-1880 - Use Consolas font on Windows for monospace font
(script editor, log view etc.)
- PICARD-1887 - On macOS use dark syntax theme if dark mode is
enabled (currently only when running from source)
- Update to 2.4.0b2
* Bugfixes
- PICARD-1864 - Adding single files does ignore existing MBIDs
- PICARD-1866 - Coverart pane does not update during / after
saving files
- PICARD-1867 - Guess format fallback is broken
- PICARD-1868 - CAA type selection dialog does not translate
"Unknown"
- Update to 2.4.0b1
* Bugfixes
- PICARD-1753 - Fix font size of script editor and log view
on Windows
- PICARD-1807 - Wrong error handling when using python-libdiscid
- PICARD-1813 - $title function throws error on empty value
- PICARD-1820 - PLUGIN_VERSION no longer displayed correctly
in plugins dialog
- PICARD-1823 - Genre tag ordering is non-deterministic
- PICARD-1826 - "no appropriate stream found" when saving .ogg
(OPUS) file
- PICARD-1838 - Files with a .dff file extension are interpreted
as DSF files and fail to load
- PICARD-1853 - Crash if tags contain null character
- PICARD-1855 - Relationships not tagged for non-album track
- PICARD-1859 - "ValueError: Invalid literal" followed by crash
when opening certain files
* New Features
- PICARD-1704 - Support Windows 10 dark mode
- PICARD-1797 - Autocompletion for script functions and variables
- PICARD-1798 - Add support for inline translatable documentation
* Improvements
- PICARD-824 - Expand all option submenus by default
- PICARD-920 - Remember selected options page
- PICARD-1117 - Instrumental recordings of a work should set
language to "No lyrics"
- PICARD-1796 - Consider release date when matching files to
releases
- PICARD-1805 - Make it easier to add the first script
- PICARD-1818 - Make PyQt5.QtDBus optional
- PICARD-1829 - Add support for disc numbers in cluster Info
dialog tracklists
- PICARD-1831 - Mitigate performance impacts of file selection
and UI updates during processing
- PICARD-1840 - Instrumental recordings of a work should drop
the lyricist credit
- PICARD-1842 - AIFF and DSF: Add support for albumsort,
artistsort, titlesort and discsubtitle
- PICARD-1843 - Improve load and clustering performance
- PICARD-1844 - Further improve loading and clustering performance
- PICARD-1845 - Add "lookup in browser" for musicbrainz_discid tag
in metadata view
- PICARD-1846 - Metadata.unset should not raise KeyError
- PICARD-1847 - Restructure tag compatibility options
- PICARD-1852 - Make about a separate dialog
- PICARD-1854 - Improve sorting performance in main window
- PICARD-1856 - Use pgettext function in Python 3.8
-------------------------------------------------------------------
Tue May 12 09:30:43 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.3.2:
* Bug-fix
- [PICARD-1775] - $firstwords function doesn't catch IndexError
- [PICARD-1776] - $datetime crashes when invalid format specified
- [PICARD-1781] - Have $find return "" rather than "-1" on not found
- [PICARD-1783] - Deleting performer, comment or lyrics tag fails
for some cases in ID3, Vorbis, MP4 and Apev2 tags
- [PICARD-1784] - Host not found error when downloading PDF artwork
- [PICARD-1785] - $delete(_id3:TXXX:foo) does not delete the ID3
frames
- [PICARD-1786] - Deleting tag stored in ID3 TIPL frame only removes
first occurrence
- [PICARD-1787] - Deleting case-insensitive TXXX frames does not
delete anything
- [PICARD-1788] - Saving ID3 tags marked as case-insensitive causes
duplicated TXXX frames
- [PICARD-1790] - Crash when selecting plugin that can be updated
- [PICARD-1791] - Network access is disabled error under VPN service
- [PICARD-1795] - iTunes tags not removable (reappear after being
deleted)
- [PICARD-1801] - List index out of range when saving Vorbis file
- [PICARD-1803] - Instrument EWI is rewritten "e w i"
* Improvement
- [PICARD-1777] - Support fractional scaling on Windows 10
- [PICARD-1800] - Simplify Unicode 'Bullet' to ASCII 'Hyphen-minus'
- [PICARD-1809] - Optimize format detection logic
- Remove patch alredy included by upstream:
* 0001-Fix-deletion-of-comment-performer-and-lyrics-tags.patch
-------------------------------------------------------------------
Tue Apr 28 15:44:15 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Add patch from upstream to fix removing some tags:
* 0001-Fix-deletion-of-comment-performer-and-lyrics-tags.patch
-------------------------------------------------------------------
Sun Mar 1 14:30:51 UTC 2020 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to 2.3.1:
* Bug-fix
- [PICARD-1745] - Packaged libdiscid is not compatible with macOS 10.12
- [PICARD-1748] - Many release events can cause the versions context menu to overflow
- [PICARD-1750] - Existing acoustid_fingerprint tags are not considered for AcoustID submission
- [PICARD-1754] - DEL always removes release or file from main window
- [PICARD-1756] - Plugin update fails to compare plugin versions with double digit versions
- [PICARD-1757] - Crash on loading a release if $div(n,0) is used in a script
- [PICARD-1760] - Prevent duplicates in top tags editor
- [PICARD-1762] - Dropping a PDF file on cover art image box doesn't work
- [PICARD-1765] - Adding uppercase tags to preserved tags list is not handled correctly
- [PICARD-1772] - Unexpected results with $num function
- [PICARD-1773] - Untrapped error on $mod with zero input
- [PICARD-1774] - $lenmulti with missing name returns "1"
* New Feature
- [PICARD-1743] - Add script functions $sortmulti and $reversemulti to sort and reverse multi-value variables
- [PICARD-1751] - Provide a %_releasecountries% variable
* Improvement
- [PICARD-1746] - Change Generate AcoustID Fingerprints shortcut to Ctrl+Shift+Y / ⌘⇧Y
- [PICARD-1752] - Use preferred release countries to select a matching release country if there are multiple
- [PICARD-1755] - "Supported Languages" on Microsoft Store shows only English (United States)
- [PICARD-1759] - Make editing tags in top tags list more intuitive
- [PICARD-1771] - Completely ignore release types set to zero in preferred releases
-------------------------------------------------------------------
Fri Feb 21 09:17:22 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.3:
* Bug-fix
- [PICARD-1739] - Update check does not handle alpha, beta and rc versions
properly
- [PICARD-1744] - Invalid ignore path regex can crash Picard
* Improvement
- [PICARD-1740] - Save originalfilename to ASF tags
- Update to version 2.3.0rc1
* Bug-fix
- [PICARD-1688] - "Submit AcoustIDs" fails with many tracks
- [PICARD-1719] - `$unset` marks tag for deletion
- [PICARD-1724] - Fingerprint status on left should not be submittable
(red)
- [PICARD-1725] - Fingerprint indicator rendering artifacts
- [PICARD-1726] - Crash when closing options quickly before plugin list
got loaded
- [PICARD-1727] - Performer tag in metadata list is not translated
- [PICARD-1733] - App does not start on macOS 10.12
- [PICARD-1736] - "Generate AcoustID Fingerprints" is too long for the
toolbar
* Improvement
- [PICARD-1716] - Add script functions for strings (`$find`, `$reverse`,
`$substr`), multi-value variables (`$getmulti`), and loops (`$foreach`,
`$while`, `$map`)
- [PICARD-1717] - Backup config file on update
- [PICARD-1720] - Add script function `$slice` to extract a portion of a
multi-value variable
- [PICARD-1721] - Add script function `$join` to join the elements of a
multi-value variable
- [PICARD-1723] - Match to album should consider the disc number
- [PICARD-1729] - Add scripting function `$datetime` to return the current
date and time
- [PICARD-1737] - Add keyboard shortcut Ctrl+Alt+F for "Generate
Fingerprints"
- [PICARD-1738] - Load a recording URL entered into the search field as
standalone recording
- Update to version 2.3.0b1
* Bug-fix
- [PICARD-239] - Using tag "comment" should behave the same as "comment:"
(with colon) in tagger script
- [PICARD-965] - Items in tagger scripts list are squished
- [PICARD-1054] - Picard swallows values of Qt command line arguments
- [PICARD-1218] - Script names aren't truncated properly
- [PICARD-1312] - Hotkeys for buttons do not work on macOS
- [PICARD-1565] - Picard ignores results in Acoust ID web service response
- [PICARD-1592] - APEv2: Read tags case insensitive
- [PICARD-1625] - UI unresponsive while matching files to release
- [PICARD-1626] - Locales in Options > Metadata are not translated and not
sorted
- [PICARD-1629] - Duration for AAC files with APEv2 tags is wrong
- [PICARD-1658] - macOS: System wide libdiscid is used instead of the
bundled one
- [PICARD-1662] - Issue saving FLAC with large (~ 16 MiB) embedded images
- [PICARD-1664] - Cluster lookup does not use preferred release types
- [PICARD-1667] - Some scripting functions are always true
- [PICARD-1668] - Read fails if mp4 file has "disk" tag set but empty
- [PICARD-1675] - Allow disabling auto update for Windows builds
- [PICARD-1678] - Picard crashes if result from search server contains
non-integer scores
- [PICARD-1693] - Position and size of log view and activity history are
not preserved
- [PICARD-1699] - On scan asking the user to enable the fingerprinting does
always abort the scan
- [PICARD-1700] - Crash with PyQt5 when opening cover art context menu
- [PICARD-1709] - Saving AIFF files can make them unreadable (requires
mutagen >= 1.43)
- [PICARD-1711] - Cannot delete lyrics from ASF, ID3, MP4 and APE files
* New Feature
- [PICARD-34] - Add a fingerprint indicator
- [PICARD-118] - Windows: Provide a portable Picard version
- [PICARD-125] - Support for AC3
- [PICARD-170] - Allow selecting displayed columns
- [PICARD-714] - Allow user to reorder fields in the lower pane
- [PICARD-991] - Allow calculating AcoustID fingerprints for matched
recordings
- [PICARD-1098] - MP4: Support custom tags
- [PICARD-1521] - Make Picard recognize "TOFN (Original Filename)" ID3 tag
- [PICARD-1656] - Allow setting cover art for clusters
- [PICARD-1673] - Show progress in Windows taskbar
- [PICARD-1674] - Show progress in Linux docks / taskbar supporting the
Unity.LauncherEntry DBus interface
- [PICARD-1677] - Option to ignore tags for file changed status
- [PICARD-1684] - Allow re-ordering multi-value tags
* Improvement
- [PICARD-115] - Display 'YYYY', 'MM' and 'DD' in date input field when
value not available
- [PICARD-321] - Backslash support in filenames if Windows compatibility
is disabled
- [PICARD-1260] - Sort entries in Clusters more "naturally"
- [PICARD-1349] - Change the sorting by clicking on a column title so that
it switches through three states (sort ascending/descending/not at all)
- [PICARD-1401] - CD Lookup dialog does not make it clear how to submit a
disc ID
- [PICARD-1467] - Provide signed Windows installer
- [PICARD-1523] - Make Picard case-agnostic for "Preserve tags from being
cleared"
- [PICARD-1589] - Support language for ID3 COMM tags with
`comment:{language}:{description}` syntax (enables support for
MediaMonkey's Songs-DB_Custom tags)
- [PICARD-1628] - Make APEv2 tags with AAC optional
- [PICARD-1631] - Notarize macOS app
- [PICARD-1646] - Respect preferred release types when scanning tracks
- [PICARD-1650] - Select / load multiple items from search results
- [PICARD-1652] - Support extended info for TAK files (requires
mutagen >= 1.43)
- [PICARD-1659] - Natural sorting for search results
- [PICARD-1661] - Improve preserved tags autocomplete
- [PICARD-1665] - Disable uninstall for globally installed plugins
- [PICARD-1666] - Consider video / audio when comparing files to tracks
- [PICARD-1671] - Rework Options > Tags page
- [PICARD-1672] - MP4: Use hdvd atom to detect videos (requires
mutagen >= 1.43)
- [PICARD-1680] - Select / load multiple items from CD lookup results
- [PICARD-1682] - Multiline editing for lyrics and comments
- [PICARD-1683] - Autocompletion when editing media, releasetype,
releasecountry and releasestatus tags
- [PICARD-1686] - Always keep [non-album tracks] entry on top
- [PICARD-1692] - Change sliders to jump to clicked position
- [PICARD-1695] - Make script editor UI consistent with other option pages
- [PICARD-1712] - Use Ctrl+D as keyboard shortcut to remove albums or files
- [PICARD-1714] - Focus search input with Ctrl+F
- [PICARD-1715] - Allow changing file extension by manipulating the
%_extension% variable in renaming script
* Task
- [PICARD-1406] - Refactor Metadata.set and metadata.__setitem__
- [PICARD-1465] - Add Picard to Windows Store
- [PICARD-1596] - Automate PyPI deployment
- [PICARD-1653] - macOS: Enable Hardened Runtime
- [PICARD-1669] - Build Windows 10 MSIX app package
- [PICARD-1703] - Upgrade to PyInstaller 3.6
- Drop patch already included upstream:
* 0001-Fix-crash-on-PyQt-ge-5.14-on-cover-art-context-menu.patch
-------------------------------------------------------------------
Thu Feb 13 16:25:33 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
- Add patch to fix a crash when right-clicking on the cover art box.
* 0001-Fix-crash-on-PyQt-ge-5.14-on-cover-art-context-menu.patch
-------------------------------------------------------------------
Mon Nov 11 21:10:07 UTC 2019 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to 2.2.3:
* Bug
* [PICARD-1633] – macOS: Automatic locale detection broken
* [PICARD-1634] – macOS: File browser sets wrong horizontal scroll position
* [PICARD-1635] – Terminated randomly when deleting files when saving
* [PICARD-1636] – Default locale detection fails if locale categories have different locales
* [PICARD-1637] – Crash when saving after removing some underlying files
* [PICARD-1640] – Picard with –config-file parameter copies over legacy configuration
* [PICARD-1642] – Picard crashes on launch (AttributeError: ‘NoneType’ object has no attribute ‘setPopupMode’)
* [PICARD-1643] – Performer with instruments containing non-ASCII characters are not written to Vorbis and APE tags
* [PICARD-1644] – Crash when initializing translations on Python 3.8
* [PICARD-1647] – macOS: Plugin enable/disable button does not always update the icon
* [PICARD-1648] – Crashes when using search dialogs
* [PICARD-1651] – File and release counts in status bar not updated when files get removed
* [PICARD-1654] – macOS: Logout button / username stays visible after logout
* [PICARD-1655] – macOS: Login dialog can be hidden behind options
* Improvement
* [PICARD-1630] – Ensure FLAC metadata is visible/editable in Windows Explorer
* [PICARD-1632] – Tooltips for genre filter help hide too quickly
-------------------------------------------------------------------
Sun Oct 13 12:40:42 UTC 2019 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to 2.2.2:
* Bug-fix
* [PICARD-1606] - Crashes on opening options with broken plugin
* [PICARD-1612] - Trackpad tap is not working properly on macOS
* [PICARD-1614] - macOS: Incorrect 'LSMinimumSystemVersion'
* [PICARD-1618] - macOS and Windows packages built without C astrcmp
* [PICARD-1621] - Lookup CD dropdown does not list additional drives
* [PICARD-1624] - Updating default CD device in options does not change default for keyboard shortcut
* Improvement
* [PICARD-1610] - Make the labels in Options > User Interface > Colours wider
* [PICARD-1619] - Grey out cover art providers list when cover art is disabled
- Update to 2.2.1:
* Bug
* [PICARD-1603] - Translations from picard/ui/colors.py don’t show up in Picard
* [PICARD-1604] - Windows install is not using Qt default translations
* [PICARD-1607] - Upgrading a plugin displays the dialog box multiple times
* [PICARD-1608] - "[non-album tracks]" can not directly be removed
* [PICARD-1609] - Picard About shows Qt version PyQt was build against, not actually used Qt
* Improvement
* [PICARD-1602] - Tests should not be included in the sdist package
-------------------------------------------------------------------
Mon Sep 16 14:42:19 UTC 2019 - Antonio Larrosa <alarrosa@suse.com>
- Update to 2.2.0:
* Bug-fix
* [PICARD-456] - "Delete empty directories" should not delete special folders such as the desktop
* [PICARD-571] - Scripting and renaming font on macOS and Windows not monospace
* [PICARD-622] - File Browser resets horizontal scrolling on selection change
* [PICARD-765] - Refreshing a release reloads the CAA index.json file from cache, even if it changed online
* [PICARD-1025] - An empty destination directory prevents the options from being saved, but doesn't show an error
* [PICARD-1090] - Match quality indicators are blurry
* [PICARD-1282] - ⌘W does not close Preferences window
* [PICARD-1284] - Can't quit with preferences open
* [PICARD-1446] - Expand/collapse indicator for the release is briefly missing
* [PICARD-1483] - Can't submit fingerprints to non-album recordings
* [PICARD-1489] - Crash on start when loading python-discid without libdiscid being available
* [PICARD-1490] - Local cover art provider fails on Windows
* [PICARD-1491] - Version check when loading Picard plugins too strict
* [PICARD-1492] - Can’t save rated tracks when it’s a FLAC file (when Metadata/Ratings is active)
* [PICARD-1493] - Crash on pre 1.0 config upgrade
* [PICARD-1497] - Saving fails when setting tags with invalid names for the underlying tagging format
* [PICARD-1499] - Picard loads embedded cover art with ID3 type "other" as sticker
* [PICARD-1501] - Double click in a cover opens it in web browser instead of an image viewer
* [PICARD-1503] - Scanning CDROM uses path containing ampersand (&)
* [PICARD-1516] - Picard fails to load MP4 without tags
* [PICARD-1517] - Functions matchedtracks and is_complete throw exception when run on cluster
* [PICARD-1522] - Crash when removing NAT recordings
* [PICARD-1527] - Can't resize options window in 2.1.x (Mac)
* [PICARD-1529] - NAT tracks get assigned wrong cover art
* [PICARD-1533] - Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created
* [PICARD-1541] - Closing log views destroys widgets
* [PICARD-1543] - v2.1.3 crashes when selecting Preferences in the Apple menu 10.14.5
* [PICARD-1547] - Picard doesn't warn about not updating .wav metadata
* [PICARD-1549] - Source distributions are broken on Windows
* [PICARD-1551] - "compare_to_track" method considers "score" parameter only if track has releases
* [PICARD-1556] - Default File Naming Script produces "00" track number in file name.
* [PICARD-1558] - Setting rating on a track does not apply to already matched files
* [PICARD-1566] - Cannot drag misidentified song back to the left pane
* [PICARD-1567] - Parsing track number from file name modifies original title in metadata
* [PICARD-1571] - On macOS multiple option dialogs can be opened
* [PICARD-1573] - Crash when loading release with a tag that contains only whitespace.
* [PICARD-1575] - Can't drag and drop a picture from the Google Picture Result Page to Picard.
* [PICARD-1580] - Crash when closing options window on "Preferred Releases" page
* [PICARD-1582] - "Allow selection of multiple directories" has no effect on Linux with Gtk file chooser
* [PICARD-1584] - Crash when disabling script function providing plugin
* [PICARD-1585] - On macOS restore default options dialog opens in background
* [PICARD-1588] - Metadata box shows tags unsupported by format
* [PICARD-1591] - Error when loading Vorbis file with invalid metadata_block_picture
* [PICARD-1593] - Picard crashes on plugin install error
* [PICARD-1595] - Cursor in tag edit box always jumps to end on input
* [PICARD-1598] - Metadata box hidden when album gets updated
* [PICARD-1601] - PyPI source tarball misses some test data
New Feature
* [PICARD-143] - Add a plugin hook for a file-added-to-a-track event
* [PICARD-1130] - Post save plugins
* [PICARD-1488] - Built-in media player (beta feature)
* [PICARD-1510] - Add a plugin hook for a file-removed-from-a-track event
* [PICARD-1512] - Add a plugin hook for an album-removed event
* [PICARD-1514] - Replace genre / folksonomy tag blacklist with more comprehensive list
* [PICARD-1524] - Replace hardcoded colors by user-configurable ones
* [PICARD-1560] - Add a plugin hook for a file loaded event
* [PICARD-1594] - Provide $is_video() / $is_audio scripting functions
* Task
* [PICARD-1353] - Update Travis CI to use newer Xcode
* [PICARD-1388] - Document how to uninstall local built version of picard from CLI
* [PICARD-1561] - test_file.TestPreserveTimes fails on macOS 10.14
* [PICARD-1563] - Add 'picard.egg-info' file to .gitignore
* Improvement
* [PICARD-1235] - Picard is not responding during start while CD is being inserted
* [PICARD-1361] - Add "Launch Picard" to Windows installer
* [PICARD-1400] - Remove Amazon cover art provider from Picard and place it into a plugin
* [PICARD-1468] - Localize Windows installer
* [PICARD-1485] - Picard should show the hours of long tracks
* [PICARD-1494] - Use Python3.3+ nano seconds resolution stat()/utime() to preserve times on file save
* [PICARD-1496] - Display count of Other versions available once known in album's contextual menu
* [PICARD-1502] - qApp.setDesktopFileName (wayland app_ip)
* [PICARD-1525] - Log/History views are updated even if not actually visible
* [PICARD-1546] - Display in Others submenu is messy for albums with a lot of tracks
* [PICARD-1552] - "compare_to_release_parts" considers track count of only first medium
* [PICARD-1559] - Allow moving files to subfolders without renaming
* [PICARD-1564] - Picard code for parsing response from AcoustID servers ignores tracks
* [PICARD-1576] - Open option help context sensitive
* [PICARD-1578] - Allow dragging images from Bing image search result
* [PICARD-1579] - Dragging cover art from Google image search on Linux drops just preview image
* [PICARD-1581] - "Recursively add files and folders" is very technical and hard to understand
* [PICARD-1586] - Support for ReplayGain 2.0 tags
* [PICARD-1599] - Use fpcalc json output for more robust output parsing
-------------------------------------------------------------------
Tue Mar 5 11:45:43 UTC 2019 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to 2.1.3:
* Bug-fix
* [PICARD-323] – Only the discid of the first disc in a release is written to tags
* [PICARD-455] – Picard setting cover art height, width and depth to 0 for FLAC files –> breaks libFLAC
* [PICARD-729] – Tracks get stuck at “[loading track information]” on Bad Gateway errors
* [PICARD-938] – Need two left-arrow key presses to go from track with file to album
* [PICARD-1178] – Images tagged with extra types that the user has chosen to ignore should not be shown as ‘modified’
* [PICARD-1288] – Folskonomy tags / genre fallback on album artists tags not working
* [PICARD-1422] – Windows: Uninstall 32 bit Picard before upgrade
* [PICARD-1447] – When releasing a new version, appdata should also be updated
* [PICARD-1460] – Windows installer does not detect running instance
* [PICARD-1461] – Crash when running with Spanish language
* [PICARD-1463] – Picard crashes on startup on Windows
* [PICARD-1469] – Force close when adding songs to larger albums
* [PICARD-1471] – Artist searches do not show begin and end area
* [PICARD-1473] – AcoustId lookup fails if fingerprint already in tags
* [PICARD-1474] – Windows installer shows outdated version string in file properties
* [PICARD-1475] – Cover art sources do not support HTTPS
* [PICARD-1476] – Filled up thread pool prevents metadata box updates
* [PICARD-1478] – Changing MB server requires a restart
* [PICARD-1480] – Search line input clear button icon is too small
* Task
* [PICARD-1459] – Remove OptionsPage.info method
* [PICARD-1472] – macOS code signing on Travis CI fails for xcode7.3 image
* Improvement
* [PICARD-1242] – Consider the number of AcoustID sources for linked recordings
* [PICARD-1457] – “Check for Update” should be in the Picard menu
* [PICARD-1458] – “Check for Update” should have an ellipsis at the end
* [PICARD-1470] – Make warning about Qt locale loading less prominent
-------------------------------------------------------------------
Wed Jan 30 06:10:38 UTC 2019 - mvetter@suse.com
- Update to 2.1.2:
* Bug-fix
* [PICARD-1451] - Redirects of authenticated requests fail with 401 error
* [PICARD-1454] - Crashes when adding action to toolbar in options
* Task
* [PICARD-1452] - Appveyor auto-deploy not working
* Improvement
* [PICARD-1450] - Fix language label for zh_CN and zh_TW
-------------------------------------------------------------------
Sat Dec 22 09:58:29 UTC 2018 - Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@fastmail.net>
- Update to version 2.1.0:
* support for MusicBrainz genres
* new convenient script functions: $title and $delete
* new command line option (-P, --no-plugins) allowing to skip plugin loading, which may help when a plugin is crashing Picard at start and to identify if an issue is due to a plugin or the main program
* improve tags support, better compatibility with other applications, wider range of audio files supported
* better stability and performance
* full changelog available at https://blog.metabrainz.org/2018/12/21/picard-2-1-release/
- Picard has been refactored to org.musicbrainz.Picard
- Add appdata.xml file
-------------------------------------------------------------------
Fri Sep 7 06:45:35 UTC 2018 - mvetter@suse.com
- Update to version 2.0.4:
* Bug-fix
* [PICARD-803] - tagging "8½ Minutes" with "replace with non-ascii characters" results in a directory being created
* [PICARD-1216] - Does not display version information
* [PICARD-1267] - 2.0.0dev6 crash in debug mode on Windows April Update (1803)
* [PICARD-1281] - Picard has wrong version string
* [PICARD-1294] - Crashes every time Picard connects to MB server.
* [PICARD-1310] - Picard crashes on clearing log
* [PICARD-1318] - RuntimeError: dictionary changed size during iteration
* [PICARD-1321] - CD drive selection not working on Linux
* [PICARD-1322] - Crash in options on "Restore defaults"
* [PICARD-1323] - Restore defaults does not restore CAA types
* [PICARD-1324] - Default locale not working reliable
* [PICARD-1326] - Picard Save Changes 5.1 Mix Type
* [PICARD-1327] - Loading TAK files fails
* [PICARD-1328] - Loading OptimFROG files fails
* [PICARD-1329] - Picard fails saving ID3 tags with iTunNORM tag
* [PICARD-1331] - Picard crashes on error during plugin install
-------------------------------------------------------------------
Tue Aug 21 06:41:03 UTC 2018 - alarrosa@suse.com
- Update to version 2.0.3
* Bug-fix
* [PICARD-1122] - Preffered release type settings are exclusive and should be inclusive
* [PICARD-1207] - Move additional files feature fails when source directory contains non-ascii characters
* [PICARD-1247] - Not all "preserved" tags are preserved
* [PICARD-1305] - Search dialog crashes picard when record doesn't have an album
* [PICARD-1306] - picard crashes when opening the options dialog if the cwd doesn't exist
* New Feature
* [PICARD-1289] - Allow manually running any tagger script
* Improvement
* [PICARD-1302] - Dropping an image from Google image crashes picard
* [PICARD-1303] - picard crashes when matching a cluster with a release with no tracks
* [PICARD-1304] - Info dialog for album crashes because track doesn't have a tracknumber
* Regression
* [PICARD-259] - Make file-specific variables available to tagger script
- Update to version 2.0.2
* Bug-fix
* [PICARD-1212] - Picard 2.0.0dev4 crashing at startup
* [PICARD-1300] - Picard crashes when logging lots of events
- Update to version 2.0.1
* No changes for linux users.
-------------------------------------------------------------------
Fri Jul 20 07:05:44 UTC 2018 - aloisio@gmx.com
- Updated source URL
-------------------------------------------------------------------
Thu Jul 19 12:38:11 UTC 2018 - aloisio@gmx.com
- Update to version 2.0
Bug-fix
* [PICARD-153] - Non-configuration data is saved in Picard.conf
* [PICARD-173] - ID3 tag TSOP appears to be stored blank
* [PICARD-340] - Cover art embedding will overwrite existing
ones
* [PICARD-405] - Save stopped working
* [PICARD-817] - On high-resolution / high DPI displays,
Picard's GUI is scaled wrong
* [PICARD-1047] - Incompatible plugins are loaded with picard
2.0
* [PICARD-1051] - Searching for similar tracks causes coredumps
* [PICARD-1052] - Not disabled Search for similar tracks can
cause coredumps
* [PICARD-1056] - Crash when viewing file info dialog
* [PICARD-1058] - Saving images as files doesn't work
* [PICARD-1062] - Picard crashes when moving files on release
* [PICARD-1063] - After #689 unit tests fail if astrcmp is not
compiled
* [PICARD-1064] - python setup.py test -v doesn't work
* [PICARD-1065] - python setup.py patch_version doesn't work
* [PICARD-1066] - python setup.py update_constants doesn't work
* [PICARD-1067] - Visual bug after un-checking an installed
plugin
* [PICARD-1073] - "Add New Tag" crashes picard
* [PICARD-1084] - Picard 2 doesn't find DVD drive
* [PICARD-1085] - Multi-Dir Add Folder not working
* [PICARD-1105] - Crashes when using the edit tag dialog
* [PICARD-1106] - cancel plugin installation file dialog
results in crash
* [PICARD-1114] - Cannot submit ratings in Picard 2.0 dev
* [PICARD-1119] - picard sets "Disc Subtitle" to the track
title
* [PICARD-1123] - Multiple work languages are collapsed
* [PICARD-1126] - Unhelpful error message logged on network
request errors
* [PICARD-1135] - Picard is not able to save on MTP devices
* [PICARD-1138] - Search crashes due to AttributeError
* [PICARD-1143] - Wrong amount of songs from added files
* [PICARD-1147] - FYI, Can't load "Alan Parsons" album "On
air" in Picard 1.2
* [PICARD-1153] - "Lookup in Browser" and "Search" fail
silently if artist name contains umlaut
* [PICARD-1156] - Picard fails to start when trying to upgrade
plugin which is a symlink
* [PICARD-1159] - Can't open WAV files
* [PICARD-1161] - Dragging artwork from Chrome pages doesn't
work
* [PICARD-1171] - Text of "About" can't be selected
* [PICARD-1179] - Error while searching for alt. releases
* [PICARD-1181] - In-app search dialog excessive slow down
* [PICARD-1188] - Picard chooses incorrect value for language
tag
* [PICARD-1199] - Crash when right-clicking album
* [PICARD-1202] - Right click on tag listing causes exception
and crash
* [PICARD-1203] - Hide unsupported tags from the tag diff in UI
* [PICARD-1204] - Picard freezes on unchecking show diff tags
first
* [PICARD-1206] - Text is not displaying properly in some
fields.
* [PICARD-1210] - Long lines in the option dialogue don’t wrap
* [PICARD-1213] - Wrong Movement of coverart providers
* [PICARD-1215] - Does not use config / ini file specified on
command line
* [PICARD-1221] - Picard 2.0 won't start on Windows 10
* [PICARD-1226] - Different fonts in the plugins dialog
* [PICARD-1230] - Looking up CD crashes Picard
* [PICARD-1234] - Crash when loading plugin from local
directory
* [PICARD-1252] - Crash on pasting invalid naming script
* [PICARD-1253] - Crash on image saving
* [PICARD-1255] - Crash on startup - no GUI
* [PICARD-1265] - Can't "Lookup in Browser":
UnicodeEncodeError: 'latin-1' codec can't encode characters in
position 0-7: ordinal not in range(256)
* [PICARD-1270] - Corruption of saved audio files located on a
network share
* [PICARD-1271] - Artist credit saved in tags sometimes loses
closing parenthesis
* [PICARD-1277] - Picard crashes on unknown cover art types
New Feature
* [PICARD-1187] - Add DSF file support
* [PICARD-1220] - Add keyboard shortcut for deleting scripts
from options > scripting page
Task
* [PICARD-960] - Migrate to PyQt5
* [PICARD-1186] - Support only 64 bit Picard builds from 2.0
Improvement
* [PICARD-259] - Make file-specific variables available to
tagger script
* [PICARD-581] - Picard XML processing should use lxml module
rather than QXmlStreamReader
* [PICARD-588] - Picard 2.0 based on Python 3
* [PICARD-807] - Retry release fetch on MB server overload
* [PICARD-922] - Make multi-value script functions work
correctly
* [PICARD-976] - Reimplement the picard WS code to accommodate
future versions of MBWS
* [PICARD-978] - Distinguish in UI between unclustered and
release unmatched files
* [PICARD-1075] - Add unit tests for Metadata object variables
* [PICARD-1087] - Improvements to UI for Lookup CD
* [PICARD-1100] - Error when running confined in a snap
because of gconf
* [PICARD-1174] - Option to tolerate differences in track times
* [PICARD-1200] - In Options dialog, tree pane on the left
cannot be resized
* [PICARD-1201] - Add a command-line option to not restore
persisted UI sizes or positions
* [PICARD-1211] - The “X” close button doesn’t work on the
options dialogue
- Switched to python3 and Qt5
- Dropped SearchAmazon3.py,SearchAMG.py,SearchCastAlbums3.py,
SearchDiscogs3.py,SearchFilmMusziek3.py,SearchGMR.py,
SearchGoogle3.py,SearchLortelArchives3.py,
SearchSoundtrackCollector3.py and SearchSoundtrackINFO3.py (not
compatible with API v2.0)
- Spec cleanup
-------------------------------------------------------------------
Wed May 10 13:08:08 UTC 2017 - alarrosa@suse.com
- Update to version 1.4.2:
* Bugfix: Picard does not stop analyzer while moving (PICARD-1053)
* Bugfix: Picard hangs with: RuntimeError: maximum recursion depth exceeded in cmp (PICARD-1055)
* Bugfix: The "Convert Unicode punctuation characters to ASCII" function only works in certain tags (PICARD-1070)
* Bugfix: ID3v2.4 text encoding settings are not saved correctly (PICARD-1077)
* Improvement: Search dialog webservices get queued behind matched album requests (PICARD-969)
* Improvement: Picard not seeing TOPE and TOAL (PICARD-1034)
-------------------------------------------------------------------
Sun May 7 10:08:16 UTC 2017 - olaf@aepfle.de
- setup.py requires sip
-------------------------------------------------------------------
Fri Apr 7 23:10:45 UTC 2017 - jengelh@inai.de
- Trim description as per the openSUSE description recommendations.
-------------------------------------------------------------------
Mon Apr 3 11:29:12 UTC 2017 - alarrosa@suse.com
- Update to version 1.4.1:
* Bugfix: Album shown matched even if extra unmatched files (PICARD-953)
* Bugfix: Removing album with saves pending does not remove pending saves (PICARD-972)
* Bugfix: Pending log messages not flushed to stderr on quit (PICARD-973)
* Bugfix: Drag & Drop not working (PICARD-988)
* Bugfix: Picard violating ID3 standard for TXXX frames (PICARD-990)
* Bugfix: Disabling the cover art box and enabling it again doesn't bring it back (PICARD-996)
* Bugfix: Disabling the action toolbar sometimes doesn't work (PICARD-998)
* Bugfix: If a cluster is moved to the album side of the main window it gets moved to unmatched files (PICARD-1005)
* Bugfix: Drag and drop for cover arts doesnt work on OSX (PICARD-1006)
* Bugfix: Unsetting View/Cover Art doesn't work permanently (PICARD-1010)
* Bugfix: Toolbar tab order incorrect after PICARD-908 (PICARD-1011)
* Bugfix: Number of images in release info is calculated incorrectly (PICARD-1014)
* Bugfix: Artwork tab of the Track Info DIalog doesn't show changes anymore (PICARD-1015)
* Bugfix: CoverArtBox doesn't show new/removed images after unmatched files are added/removed to the album (PICARD-1018)
* Bugfix: Directory persistence for Add Directory needs tweaking (PICARD-1023)
* Bugfix: Fix ~artists_sort metadata variable (PICARD-1029)
* Bugfix: Missing import for PICARD_APP_NAME (PICARD-1042)
* New Feature: Visual feedback for changes to artwork in before-after pane. (PICARD-258)
* New Feature: Implement artwork diff for albums (PICARD-1000)
* Task: Remove monkey patching of file write methods in picard formats (PICARD-943)
* Task: Replace Ok button text by Make It So! in Options dialog (PICARD-1041)
* Improvement: Remove should work when Unmatched Files is selected (PICARD-223)
* Improvement: Always use HTTPS for musicbrainz.org (PICARD-951)
* Improvement: Use Cover Art Archive over HTTPS (PICARD-952)
* Improvement: Mention AcoustID on Scan button too (PICARD-961)
* Improvement: Drag&drop cover art doesn't work for images from amazon/google images/https links (PICARD-980)
* Improvement: Buttons on the "User Interface" and "Scripting" pages are smaller than buttons in other places (PICARD-1012)
* Improvement: Multiple images in related tracks confusing (PICARD-1016)
* Improvement: Picard loads all pending files before quitting (PICARD-1021)
* Improvement: Allow specifying a configuration file path (PICARD-1024)
* Improvement: Allow to add/replace cover art images and keep existing cover art (PICARD-1030)
- Dropped 0001-Introduce-new-cover-art-thumbnail-class.patch,
0002-Connect-events-for-CoverArtThumbnail-class.patch,
0003-Update-coverartbox-class-to-include-new-and-original.patch,
0004-Update-labels-in-_show-method.patch,
0005-Update-mainwindow-to-display-original-coverart.patch,
0006-Implement-__eq__-method-for-CoverArtThumbnail-and-up.patch,
0007-Add-i18n-support-to-coverart-labels.patch,
0008-Add-view-coverart-changes-button.patch,
0009-Add-spacer-item-to-push-coverartbox-items-to-top.patch and
fix-cover-art-downloads.diff which are already merged in 1.4.1
-------------------------------------------------------------------
Fri Feb 17 10:16:22 UTC 2017 - olaf@aepfle.de
- Drop bonusdisc.py, URL disappeared
-------------------------------------------------------------------
Tue Feb 14 12:34:42 UTC 2017 - alarrosa@suse.com
- Update to version 1.4.0
* Bugfix: AcoustID submission fails with code 299 (PICARD-82)
* Bugfix: Ignoring "hip hop rap" folksonomy tags also ignores "rap", "hip hop", etc. (PICARD-335)
* Bugfix: Picard downloads multiple 'front' images instead of just first one. (PICARD-350)
* Bugfix: Saving hidden file with only an extension drops the extension (PICARD-357)
* Bugfix: Add directory opens in "wrong" dir (PICARD-366)
* Bugfix: Picard should de-duplicate work lists (PICARD-375)
* Bugfix: Tree selector in Options window is partially obscured, pane too narrow (PICARD-408)
* Bugfix: tag acoustid_id can not be removed or deleted in script, renaming or plugin (PICARD-419)
* Bugfix: Can't remove value from field (PICARD-546)
* Bugfix: Can't open Options (PICARD-592)
* Bugfix: "Tags from filenames" action stays enabled even if it is unavailable. (PICARD-688)
* Bugfix: Using the first image type as filename changes the name of front images (PICARD-701)
* Bugfix: Fingerprint Submission Failes if AcoustID tags are present and/or invalid (PICARD-706)
* Bugfix: Picard moves into the selected folder (PICARD-726)
* Bugfix: Picard does not support (recording) relationship credits (PICARD-730)
* Bugfix: Picard repeats/duplicates field data (PICARD-748)
* Bugfix: Number of pending web requests is not decremented on exceptions in the handler (PICARD-751)
* Bugfix: Divide by zero error in _convert_folksonomy_tags_to_genre when no tag at the release/release group level ( PICARD-753)
* Bugfix: Directory tree (file browser) not sorted for non-system drives under Windows (PICARD-754)
* Bugfix: Crash when loading release with only zero count tags (PICARD-759)
* Bugfix: No name and no window grouping in gnome-shell Alt-Tab app switcher (PICARD-761)
* Bugfix: Lookup in Browser does not and can not load HTTPS version of musicbrainz.org (PICARD-764)
* Bugfix: Unable to login using oauth via Picard options with Server Port set to 443 (PICARD-766)
* Bugfix: "AttributeError: 'MetadataBox' object has no attribute 'resize_columns'" when enabling the cover art box ( PICARD-775)
* Bugfix: Pre-gap tracks are not counted in absolutetracknumber (PICARD-778)
* Bugfix: CAA cover art provider runs even if cover art has already been loaded (PICARD-780)
* Bugfix: Toggling Embed Cover Art in Tags and restarting doesn't have the expected behavior (PICARD-782)
* Bugfix: XMLWS redirects incorrectly (PICARD-788)
* Bugfix: Handle empty collection-list in web server response (PICARD-798)
* Bugfix: Amazon Cover Art provider does not work (and does not have a lot of debug logging enabled) (PICARD-799)
* Bugfix: Cover Art from CAA release group is skipped even though it exists (PICARD-801)
* Bugfix: Multiple instances of history and log dialogs (PICARD-804)
* Bugfix: Empty string lookup (PICARD-805)
* Bugfix: Will not load album information on any albums (PICARD-811)
* Bugfix: Redirect URL is not encoded which leads to http 400 error. (PICARD-814)
* Bugfix: Not compatible with latest Mutagen (PICARD-833)
* Bugfix: Can't save any files. Get: "error: invalid literal for int() with base 10" (PICARD-834)
* Bugfix: Picard 1.3.2 shows cleartext username & password on status line when errors occur (PICARD-839)
* Bugfix: Cannot fetch cover art from amazon link contains https scheme. (PICARD-848)
* Bugfix: media-optical-modified.png icon still displayed after release save when two files match one track (PICARD-851)
* Bugfix: Release that Picard will not load (due to disc with just data track?) (PICARD-853)
* Bugfix: ValueError in metadata.py (PICARD-855)
* Bugfix: Improper detection of Gnome as a desktop environment and no support for gnome 3 (PICARD-857)
* Bugfix: Apparent non-functional tagger button (PICARD-858)
* Bugfix: Picard does not read Ogg/Opus files with an ".ogg" file exension (PICARD-859)
* Bugfix: Setting a large value in in $num function as length causes picard to become unresponsive (PICARD-865)
* Bugfix: id3 deletion needs to be improved (PICARD-867)
* Bugfix: id3v2.3 does not properly handle TMOO ( mood tag) (PICARD-868)
* Bugfix: Coverart providers duplicates on reset (PICARD-870)
* Bugfix: Restore defaults broken for plugins page and tagger scripts page (PICARD-873)
* Bugfix: Coverart providers erroneous save (PICARD-874)
* Bugfix: The metadatabox doesn't correctly show the tag selected (PICARD-876)
* Bugfix: Length tag for ID3 is no longer displayed in the metadata box (PICARD-881)
* Bugfix: Removed tags are not removed from the metadatabox after saving the file (PICARD-882)
* Bugfix: File Browser pane doesn't check for path type( file or folder) when setting home path/move files here ( PICARD-884)
* Bugfix: mov files return a +ve score for mp4 container leading to errors (PICARD-885)
* Bugfix: "Restore defaults" doesn't log out the user (PICARD-888)
* Bugfix: Broken 'Restore Defaults' (PICARD-907)
* Bugfix: Messagebox wraps and displays title inappropriately (PICARD-911)
* Bugfix: An “empty” track shouldn’t get an “excellent match” tooltip. (PICARD-914)
* Bugfix: In plugins list, some plugins don't show description (PICARD-915)
* Bugfix: Plugin restore defaults broken (PICARD-916)
* Bugfix: Does not use UI language but locale on Windows (PICARD-917)
* Bugfix: Preserve scripting splitter position (PICARD-925)
* Bugfix: Having trouble submitting AcoustIDs (PICARD-926)
* Bugfix: Cluster double‐click opens the Info… panel (PICARD-931)
* Bugfix: Status bar not cleared when selection changed (PICARD-937)
* Bugfix: Open containing folder not working for shared files over network (PICARD-942)
* Bugfix: Warning: Plugin directory '…/python2.7/site-packages/contrib/plugins' doesn't exist (PICARD-945)
* Bugfix: Additionnal files aren't moved anymore (PICARD-946)
* Bugfix: Search window error message does not appear translated (PICARD-947)
* Bugfix: Open Containing Folder duplicates (PICARD-950)
* Bugfix: Errors when directory / file names contain unicode characters (PICARD-958)
* New Feature: AIF support (ID3) (PICARD-42)
* New Feature: Test and integrate support for "local" cover art into Picard (PICARD-137)
* New Feature: Display infos (album, artist, tracklist) for clusters without release match (PICARD-680)
* New Feature: Add download plugin functionality to existing UI (PICARD-691)
* New Feature: Fallback on album artist's tags if no tags are found for album (PICARD-738)
* New Feature: Add m2a as a supported extension (PICARD-743)
* New Feature: MusicBrainz/AcoustID entities should be hyperlinked in Picard (PICARD-756)
* New Feature: Support key tag (PICARD-769)
* New Feature: Export / import settings (PICARD-901)
* New Feature: Search releases from within a Picard dialog (PICARD-927)
* New Feature: Searching tracks and displaying similar tracks in a dialog box (PICARD-928)
* New Feature: Search for artists from dialog (PICARD-929)
* Task: Picard default name files script refinement (PICARD-717)
* Task: Update Picard logo/icons (PICARD-760)
* Task: Link to the Scripting documentation on the Scripting options page (PICARD-779)
* Task: Remove contrib/plugins from the repository (PICARD-835)
* Task: Raise the required mutagen version to 1.22 (PICARD-841)
* Task: Renaming save_only_front_images_to_tags option to something more appropriate (PICARD-861)
* Task: Allow translators to finalize translations before releasing Picard 1.4 (PICARD-895)
* Task: Raise the required Python version to 2.7. (PICARD-904)
* Task: Bump Picard’s copyright date (PICARD-912)
* Task: Add Norwegian to UI languages (PICARD-982)
* Task: Provide ~video variable for video tracks (PICARD-652)
* Task: Improve error logging on AcoustId submission (PICARD-708)
* Improvement: Link to Picard Scripting page under 'File Naming' (PICARD-22)
* Improvement: Restore default settings button/s (PICARD-116)
* Improvement: Speed of Ogg tag writing/updating (PICARD-133)
* Improvement: Allow adding/removing tags to be preserved from context menu in the tag diff pane (PICARD-207)
* Improvement: Make it easier to remove everything currently loaded in Picard (PICARD-210)
* Improvement: Bring back keyboard shortcuts for editing tags (PICARD-222)
* Improvement: Case sensitivity for "Move additional files" option (PICARD-229)
* Improvement: Metadata comparison box shows that it intends to write (and has written) tags unsupported by underlyingfile format (PICARD-253)
* Improvement: Add more descriptive tooltips to buttons (PICARD-267)
* Improvement: Allow musicip_puid and acoustid_id to be cleared from tags (PICARD-268)
* Improvement: Make it possible to remove existing tags without clearing all tags (PICARD-287)
* Improvement: Disable recurse subdirectories should be added (PICARD-291)
* Improvement: display how many "pending files" left on lookup (PICARD-305)
* Improvement: Handle MP3 TSST/TIT3 (subtitle) tags better with ID3v2.3 (PICARD-307)
* Improvement: Customisable toolbars (PICARD-353)
* Improvement: Ignore file extension and try to read anyway (PICARD-359)
* Improvement: Make it possible to unset all performer (etc) tags (PICARD-384)
* Improvement: Progress tracking (PICARD-388)
* Improvement: Add ability to handle multiple tagger scripts (PICARD-404)
* Improvement: the option "select all" to save (PICARD-476)
* Improvement: Option to load only audio tracks, i.e. not DVD-Video, CD-ROM tracks (PICARD-514)
* Improvement: Picard should use OAuth for authentication (PICARD-615)
* Improvement: Improvements to WMA tags (PICARD-648)
* Improvement: Only ask to "log in now" once per session (PICARD-678)
* Improvement: Show codec info for MP4 files (PICARD-683)
* Improvement: "Play File" button should be renamed to "Open in Player" (PICARD-692)
* Improvement: ID3 padding not reduced can result in large files (PICARD-695)
* Improvement: Set option 'caa_approved_only' disabled by default (PICARD-705)
* Improvement: Validate fpcalc executable in options (PICARD-707)
* Improvement: Improve File Naming options (PICARD-733)
* Improvement: Add --long-version/-V option, outputting third parties libs versions as well as Picard version PICARD-734)
* Improvement: missing info in the help file (PICARD-740)
* Improvement: Pass command-line arguments to QtApplication (PICARD-773)
* Improvement: Use the more detailed icons in more places on windows (PICARD-777)
* Improvement: Use .ini configuration file on all platforms (PICARD-794)
* Improvement: Use python2 shebang as of PEP 0394 (PICARD-806)
* Improvement: Display existing covers in File Info dialog (PICARD-808)
* Improvement: Use HTTPS for external links (PICARD-818)
* Improvement: Install a scalable icon (PICARD-838)
* Improvement: Use HTTPS for requests to the plugins API on picard.musicbrainz.org (PICARD-852)
* Improvement: Use magic numbers to determine the audio file types instead of relying on extensions (PICARD-864)
* Improvement: Multi-scripting UI is very basic (PICARD-883)
* Improvement: Allow scripting functions to have arbitrary number of arguments (PICARD-887)
* Improvement: The "Restore defaults" confirmation buttons should follow the quit confirmation dialog in style PICARD-890)
* Improvement: Replace submit icon with AcoustID logo (PICARD-896)
* Improvement: Rename "Submit" button to "Submit AcoustIDs" (PICARD-897)
* Improvement: Use UTF-8 for ID3v2.4 by default instead of UTF-16 (PICARD-898)
* Improvement: Restore defaults is slightly broken for tags option page (PICARD-902)
* Improvement: Rearrange the action toolbar icons from left to right according to the expected user-flow (PICARD-908)
* Improvement: Add tooltips to “Restore all Defaults” and “Restore Defaults” (PICARD-913)
* Improvement: Make PICARD-883 UI have adjustable widths for list of scripts and script content (PICARD-918)
* Improvement: Move Options/Advanced/Scripting to Options/Scripting (PICARD-919)
* Improvement: Move UI options page up the options tree (PICARD-921)
* Improvement: Add $startswith and $endswith string functions (PICARD-923)
* Improvement: Make list of scripts smaller than script text by default (PICARD-924)
* Improvement: Wait for save thread pool to be finished before exit (PICARD-944)
* Improvement: New guess format functionality should use explicit buffer size (PICARD-970)
-------------------------------------------------------------------
Tue Feb 14 11:33:53 UTC 2017 - alarrosa@suse.com
- Fix the source urls for the plugins.
-------------------------------------------------------------------
Sun Feb 12 11:28:08 UTC 2017 - alarrosa@suse.com
- Add 0001-Introduce-new-cover-art-thumbnail-class.patch
0002-Connect-events-for-CoverArtThumbnail-class.patch
0003-Update-coverartbox-class-to-include-new-and-original.patch
0004-Update-labels-in-_show-method.patch
0005-Update-mainwindow-to-display-original-coverart.patch
0006-Implement-__eq__-method-for-CoverArtThumbnail-and-up.patch
0007-Add-i18n-support-to-coverart-labels.patch
0008-Add-view-coverart-changes-button.patch
0009-Add-spacer-item-to-push-coverartbox-items-to-top.patch
which are part of pull request 586, which fixes PICARD-258.
This pull request was already approved upstream but will be merged
after 1.4.0 is released.
- This makes picard show visual feedback in the main window
for coverart changes in tracks.
-------------------------------------------------------------------
Sat Feb 11 09:13:52 UTC 2017 - alarrosa@suse.com
- Add fix-cover-art-downloads.diff, which fixes drag&drop issues with
cover art images from amazon/google images/urls using https.
-------------------------------------------------------------------
Wed Jun 29 09:56:06 UTC 2016 - hpj@urpla.net
- add recommends for python-discid
-------------------------------------------------------------------
Wed Feb 24 16:03:42 UTC 2016 - olaf@aepfle.de
- Remove sco locale to fix build in SLE_11
-------------------------------------------------------------------
Tue Dec 8 18:40:55 UTC 2015 - olaf@aepfle.de
- Remove ffmpeg from BuildRequires, it is not used anymore
- Recommend chromaprint-fpcalc
-------------------------------------------------------------------
Sat Apr 4 08:23:55 UTC 2015 - avvissu@yandex.ru
- Fix build in PMBS: use libffmpeg-devel instead of ffmpeg-devel
-------------------------------------------------------------------
Wed Mar 11 20:55:41 UTC 2015 - p.drouand@gmail.com
- Update to version 1.3.2
* Bugfix: Fixed tags from filename dialog not opening on new installations
- Remove some useless stuff
-------------------------------------------------------------------
Tue May 21 18:07:23 CEST 2013 - ohering@suse.de
- Update to version 1.2 - 2013-03-30
- Picard now requires at least Python 2.6
- Removed support for AmpliFIND/PUIDs
- Add support for the Ogg Opus file format
- It's now possible to download cover images without any plugin.
Cover Art Archive images can be downloaded by image type
- Improved directory scanning performance
- Prefer already-loaded releases of the same RG when matching files
- Allow dropping new files onto specific targets
- Add basic collections management support (PICARD-84)
- Allow adding custom tags in the tag editing dialog (PICARD-349)
- Fix replacing of Windows-incompatible characters (PICARD-393)
- Save both primary and secondary release types (PICARD-240)
- Handle errors from the AcoustID service better (PICARD-391)
- Accept HTTPS URLs on drag-and-drop (PICARD-378)
- Allow adding custom tags in the tag editor (PICARD-349)
-------------------------------------------------------------------
Wed Nov 14 21:18:16 CET 2012 - ohering@suse.de
- install contrib/plugins/coverart.py
-------------------------------------------------------------------
Mon Oct 15 11:19:18 CEST 2012 - ohering@suse.de
- Update to version 1.1 - 2012-09-03
- Always show basic tags in metadata comparison box, even if empty (title,
artist, album, tracknumber, ~length, date) (PICARD-201)
- Fixed AcoustID submission failure after removing files from Picard (PICARD-82)
- Allow multi-select in new MetaDataBox for delete/remove tags (PICARD-194)
- File browser remembers last directory/no longer crashes on OS X (PICARD-104)
- Refreshing a non-album track correctly clears previous track metadata (PICARD-220)
- Fixed the preserved tags setting for tags with uppercase characters (PICARD-217)
- Added a completion box to the preserved tags setting, and clarified how it works
- Store lyrics language in tags instead of text representation language (PICARD-242)
- Fix various oddities in the metadata comparison box (PICARD-255, PICARD-256)
-------------------------------------------------------------------
Mon Jun 11 00:10:04 CEST 2012 - ohering@suse.de
- Update to version 1.0 - 2012-06-02
- New UI: Extended comparison of existing vs. MB metadata & tags (PICARD-43)
- Merged the renaming and moving options pages
- Removed the VA file naming format option (there is now a single format option) (PICARD-159)
- Add %license% tag
- Made %writer% available to tagger scripts and plugins with contents of songwriter (PICARD-21)
- Allow two multi-valued variables to be merged in tagger scripting (PICARD-139)
- Allow multi-valued variables to be transformed in tagger script and then set back in tags as multi-valued (PICARD-147)
- Fix $copy not preserving multi-value variables as documented (PICARD-138)
- Load/save free-text tags for ID3 as TXXX frames (PICARD-148)
- Fix writing of MusicBrainz Work Id / musicbrainz_workid to tags (PICARD-88)
- Handle mimetype for embedding cover art from EXIF jpegs (PICARD-27)
- Change cover art box to open MusicBrainz release rather than Amazon
- Support manual drag-and-drop of cover art onto a release via cover art box
- Only open browser on left-click of cover art box (PICARD-190)
- Fix Lookup in Browser (previously 'tag lookup') for clusters (PICARD-186)
- Lookup in Browser will now not use MBIDs to lookup unmatched files/clusters
- Add Date/Country to CD Lookup results dialog (PICARD-198)
- Fix/reset album folksonomy tag counts while refreshing releases (PICARD-4)
- Plugins actions can now create sub-menus using the MENU class attribute
- New plugin hook register_clusterlist_action
- Display the port Picard is listening on at bottom right status bar (PICARD-191)
- Make album drops from right hand pane to left default to "unmatched files" again (PICARD-33)
- Remove .DS_Store, desktop.ini, and Thumbs.db from otherwise empty directories (PICARD-75)
- Update artist translation to use new alias features (primary flag, sort names) (PICARD-200)
- Deleted tags aren't indicated as changes (PICARD-165)
- Picard log entries have inaccurate timestamp (PICARD-45)
- Interface doesn't allow keyboard only management (PICARD-103)
- Added option to preserve timestamps of tagged files (PICARD-31)
- Added keyboard shortcut to reload release (PICARD-99)
- Medium formats weren't listed in order in the "Other versions" menu (PICARD-91)
- Couldn't select multiple directories in "Add Folder" window on OS X (PICARD-74)
-------------------------------------------------------------------
Wed Apr 11 07:42:52 UTC 2012 - saschpe@suse.de
- Remove obsolete SUSE version checks
- Call icon_theme_cache_post(un) (bnc#756522)
- Remove Mandriva checks, not tested nor enabled in this project
-------------------------------------------------------------------
Sun Apr 1 16:52:18 CEST 2012 - ohering@suse.de
- Update to version 0.16 - 2011-10-23
- Added AcoustID support.
- Fixed track metadata plugins.
- Added new internal %_totalalbumtracks% tag field. (PICARD-16)
- Track metadata plugins now run also on non-album tracks. (PICARD-7)
- Fixed custom Various Artists name on the %albumartist% field. (PICARD-5)
- Album artist is now correctly "translated". (PICARD-1)
- Unicode punctuation is now converted to ASCII by default.
- WavPack correction files are moved together with the main files. (PICARD-15)
- Unicode filename normalization on OS X.
- Original release date is now saved into %originaldate%.
- Allow tagging with localized artist aliases (PICARD-17)
- Added a quit confirmation dialog. (PICARD-46)
- Standalone recordings can be tagged with relationships now. (PICARD-10)
- Refreshing an album will refresh its "other versions" listing. (PICARD-8)
- "Unicode punctuation to ASCII" now works on album-level metadata. (PICARD-50)
- DJ-mix tags should only be written to the medium where they apply. (PICARD-20)
- Support URL redirects in web service/network request module (PICARD-54)
- Jamendo and Archive.org cover art is displayed on web page, but not loaded by Picard plugin (PICARD-52)
- Edits to metadata in "Details..." menu not reflected in UI (PICARD-13)
- The status bar/new metadata box is updated when a selected file/track is changed. (PICARD-14)
-------------------------------------------------------------------
Thu Feb 23 10:34:30 UTC 2012 - Ralf Lang <lang@b1-systems.de>
- add a requires: on python-qt4. picard will not run without this
-------------------------------------------------------------------
Tue Feb 21 11:14:04 UTC 2012 - saschpe@suse.de
- Ran spec-cleaner
-------------------------------------------------------------------
Mon Feb 20 09:45:40 UTC 2012 - pascal.bleser@opensuse.org
- add conditional BUILD_ORIG_ADDON to buildrequire ffmpeg-devel and enable
ffmpeg fingerprinting support when picard is linked and built on Packman
-------------------------------------------------------------------
Mon Aug 1 08:25:44 CEST 2011 - ohering@suse.de
- Update to version 0.15.1 - 2011-07-31
- "Other versions" menu now displays release labels and catalog numbers.
- Added CD-R, 8cm CD to the format mapping.
- Picard no longer fails to load releases with new or unknown media formats.
- Threading issues that could occasionally cause Picard to stop loading files have been fixed.
- Fixed album metadata processor plugins not working (#5960)
- Fixed loading of standalone recordings (#5961)
- Fixed requests stopping at midnight (#5963)
- Stopped using QDateTime for timing requests (for Qt 4.6 compatibility) (#5967)
- Fixed display of ampersands in the "other versions" menu. (#5969)
- Fixed use of numerical functions in advanced scripting.
-------------------------------------------------------------------
Mon Jul 25 11:06:16 CEST 2011 - ohering@suse.de
- Update name of dlopen libdiscid object during build
-------------------------------------------------------------------
Mon Jul 25 09:29:08 CEST 2011 - ohering@suse.de
- Update additional python plugins to report compatibility for 0.15
-------------------------------------------------------------------
Mon Jul 25 09:24:40 CEST 2011 - ohering@suse.de
- Run dos2unix on additional python plugins
-------------------------------------------------------------------
Mon Jul 25 09:19:34 CEST 2011 - ohering@suse.de
- Update to version 0.15 - 2011-07-17
- Added options for using standardized track, release, and artist metadata.
- Added preferred release format support.
- Expanded preferred release country support to allow multiple countries.
- Added support for tagging non-album tracks (standalone recordings).
- Plugins can now be installed via drag and drop, or a file browser.
- Added several new tags: %%_originaldate%%, %%_recordingcomment%%, and %%_releasecomment%%
- Changes to request queuing: added separate high and low priority queues for each host.
- Tagger scripts now run after metadata plugins finish (#5850)
- The "compilation" tag can now be $unset or modified via tagger script.
- Added a shortcut (Ctrl+I) for Edit->Details.
- Miscellaneous bug fixes.
- Support for the NGS web service
Version 0.14 - 2011-05-15
- Fixed a problem with network operations hanging after a network error (#5794, #5884)
- ID3v2.3 with UTF-16 is now the default ID3 version
- Option to set preferred release types for improved album matching
- Added support for sorting the album/file lists (#75)
- Fixed OptimFROG tag reading (#5859)
- Fixed colors for a white-on-black color scheme (#5846)
- Added an option to replace non-ASCII punctuation (#5834)
- Support for writing release group and work IDs, currently unused (#5805)
- Fixed saving of the release event format tag (#5250)
- Added support for the language and script tags (#943)
- Plugins can now use track-track relationships (#5849)
- Allowed external drives to be visible in the file browser panel on OS X (#5308)
Version 0.13 - 2011-03-06
- Changed Picard icon license to CC by-sa
- Small UI consistency changes
- Albums with tracks linked to more than one file are never marked as
"completed".
- Fixed matching of scanned files to tracks while the album is still loading.
- Support for properly embedded FLAC pictures
- Existing embedded images in APE and ASF files are removed only if there
are new images to replace them.
- More strict tagger script validation.
- Fixed the $truncate tagger script function.
- Proper rounding of track durations.
- Fixed a bug with saving images larger than 64k to WMA files.
- Added a $swapprefix tagger script function.
- Release events with a date are preferred over the ones without a date.
- Files that are being saved as marked as pending.
- Updated .desktop file to allow opening Picard with multiple files.
- Handle the "open file" event on Mac OS X.
- Added timeouts to the HTTP web service client.
- Fixed a bug with albums missing the expand/collapse icons
-------------------------------------------------------------------
Mon Jul 25 09:10:44 CEST 2011 - ohering@suse.de
- Include a dummy binary to add the correct rpm dependency to the
libdiscid SONAME in the package. The python code uses dlopen.
-------------------------------------------------------------------
Mon Jul 25 09:06:43 CEST 2011 - ohering@suse.de
- Update specfile to include URLs to plugins
-------------------------------------------------------------------
Mon Jul 25 08:58:40 CEST 2011 - ohering@suse.de
- Remove incorrect sles_version check for libdiscid-devel
The package will be required unconditionally to read Audio CDs
-------------------------------------------------------------------
Wed Feb 2 08:58:35 UTC 2011 - saschpe@suse.de
- Don't install unsupported locale 'sco' on openSUSE > 11.3
- Fixed icons directory ownership and added hicolor-icon-theme
dependency
-------------------------------------------------------------------
Wed Aug 25 15:32:27 UTC 2010 - sasch.pe@gmx.de
- Updated to upstream version 0.12.1+bzr1043
- Icon license now complies with openSUSE packaging guidelines
-------------------------------------------------------------------
Mon Apr 19 19:24:13 UTC 2010 - sasch.pe@gmx.de
- Added several plugins
-------------------------------------------------------------------
Tue Jan 5 13:18:15 UTC 2010 - masterpatricko@gmail.com
- Updated to upstream v0.12.1
-------------------------------------------------------------------
Fri Jan 23 20:08:16 GMT 2009 - masterpatricko@gmail.com
- Updated to upstream v0.11
-------------------------------------------------------------------
Mon Jun 30 00:00:00 GMT 2008 - jfunk@funktronics.ca
- Adapt to non-standard python build
-------------------------------------------------------------------
Fri Feb 01 00:00:00 GMT 2008 - jfunk@funktronics.ca
- Update to final v0.9
-------------------------------------------------------------------
Mon Sep 03 00:00:00 GMT 2007 - jfunk@funktronics.ca
- Initial release