Add an Error signal to PlayListParser and connect that to the
PlayListManager::Error signal. This is eventually connected to the
Application::AddError. Add error messages in some cases where
PlayListParser can fail silently.
Move the code that attempts to fill missing song metadata out of the
tagreader worker. In the main process, it will be controllable using
settings and calling context.
The methods were moved into a new SongPathParser class that checks new
settings to determine if action should be taken.
Rather than assume UTF-8, use QTextStream to read data. This checks the
byte order mark of the file to determine encoding.
As an optimization, since the playlist already needs to be searched for \r
characters, just create a string list and work from that.
In the initial implementation, DeviceLister::DeviceIcons returned a
string list and some listers would concatenate other lists to form that
list. When DeviceIcons was changed to return a variant list, that
logic wasn't changed in many places, so instead of appending, string
list variants are being added icon list.
An earlier change attempted to fix qdbusxml2cpp parsing errors by adding
directions to arguments. However, signal arguments are always out and it
was the annotations that were incorrect.
Fixes: f17b79a10 (dbus: Fix qdbusxml2cpp unknown type warnings., 2021-04-19)
Reference: https://dbus.freedesktop.org/doc/dbus-specification.html
The com.trolltech was renamed to org.qtproject. The code generation tool
still handles the old name, but prints a deprecation error.
Reference: https://bugreports.qt.io/browse/QTBUG-23274
QRandomGenerator was introduced in 5.10 and qrand has since been
deprecated. QRandomGenerator::global() returns a global instance that
has been securely seeded. QRandomGenerator provides methods that
generate values within ranges, so taking a modulus of the result isn't
necessary.
This policy allowed included files and modules to affect policy in the
parent scope. Besides the top level, 3rdparty/libprojectm is the only
place where old policy is set.
Reference: https://cmake.org/cmake/help/latest/policy/CMP0011.html
QueuedItemDelegate::DrawBox leaves the painter in a state that can cause
artifacts. Specifically, there are cases where the item text is not
visible. To fix this, push the painter state before making changes and
pop it after drawing.
In version 5.6, Qt introduced an automatic scaling feature for high DPI
displays. Since projectM is not part of the Qt framework, it's necessary
to convert coordinates when specifying view size.
Reference: https://doc.qt.io/qt-5/highdpi.html
This consolidates most of the knowledge of internet settings pages in
the internet subdirectory. The exception is the master page enumeration
in the settings dialog.
Add an output format option in playback settings. The options are
Detect, S16LE, and F32LE. Selecting Detect will use the existing
behavior and detect the native format when the pipeline starts. The
other options will set the format when the pipeline is built.
If a root library directory is deleted and recreated, it is not
detected since inotify would need to watch the parent directory. On
rescan, if the subdirectory list for a directory is empty, re-add the
library's root directory.
This is an edge case on Linux systems. The issue may not exist on other
operating systems.
RatingPainter::RatingForPos should return a value in 0-1. But if the
passed position was outside of the widget's draw rectangle, a value
outside of that range could be returned.
Wii and notifications signals are currently connected for every settings
page. Move the signals from the base SettingsPage class into the derived
classes and connect the signals for only those objects.
Move CloudFileService::ShowContextMenu to the base class so that all
services can utilize the pattern established in CloudFileService.
ShowContextMenu creates the menu if it doesn't exist then calls an
overridable method to populate the content. It then calls an update
method before showing the menu.
Move /src/config.h to /include/clementine-config.h. The new name
prevents conflict with 3rdparty/taglib/config.h. A stub src/config.h will
remain for a transition period. This is a first step in eliminating the
dependency of /ext components on /src.
Add a new skip option in library settings that takes a comma separated
list of file extensions. Skip files with the specified extensions when
scanning the library.
Use the request URL rather than the media URL when emitting the
SongChangeRequestProcessed signal. The request URL is the URL that the
PlaylistManager, which is the only consumer of this signal, knows about.
However, in the current cases, the url is only checked by the playlist
when the two URLs should be the same.
Modify the signals emitted by the engine when a url is determined to be
valid or invalid to send the entire request. This will allow additional
metadata to be added to the request, providing a mechanism to better
identify the request source.
Add PopulateContextMenu, called once to populate the menu items, and
UpdateContextMenu, called ever time a menu is shown, to allow
service-specific behavior.
The live API was deprecated in 2018. This change implements basic
onedrive access using the MS graph API.
The URL scheme was also changed from skydrive to onedrive. This is based
on the assumption that existing playlists won't have compatible item
ids.
Known issues:
- Directories with over 200 items will be truncated.
- No mechanism for discovering changes at runtime.
- No mechanism for removing deleted items or rescanning.
Reference: https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/migrating-from-live-sdk?view=odsp-graph-online
Don't clear the message dialog if a hide event is sent from the window
manager. These spontaneous events are sent when a window is minimized,
moved to a different screen, etc.
Since initialization on first startup or during a database schema update
can take several seconds, show a splash screen. In the initial
implementation, this is just a small Clementine logo.
The benefit of instantiating the splash in the Application class rather
than in main is that it could eventually show status messages during
startup. However, this implementation does not use the
QSplashScreen::finish mechanism that would synchronize the hiding of the
splash screen with the showing of the main window.
Add a slot that is invoked when the main application loop starts. This
can be used to perform setup tasks after the initialization has
occurred. Initial use is to hide a splash.
Query params were not added to redirect url prior to inclusion in oauth
request. This change fixes OneDrive authentication.
Regression introduced in 8b226c2171
Protobuf 3.15 adds a namespace alias for "pb" that conflicts with
Clementine's. Modify Clementine to use "cpb".
Patch provided by @ahesford
Reference: 5c028d6cf4/src/google/protobuf/port.h (L44)