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)
Dynamically add tabs to the transcoder settings page. Use the same
mechanism that is used in the options dialog to select an options
page based on the best encoder element for a mime type.
Create a TranscoderOptionsError class and ui that inherits from
TranscoderOptionsInterface. Use this to display options errors. Move
widget creation into a static method. These changes will allow use of
the same mechanism in the transcoder settings page.
Split best element type search from Transcoder::CreateElementForMimeType
into new FindBestElementForMimeType method. This will allow the setting
dialog to determine the encoder element type before the pipeline is
built.
Remove condition that allows no dialog to be displayed when user selects
options for transcoding. Display the dialog with an error message
instead. This also applies to the transcode options dialog in the
ripping and network remote settings.
Move the debug console variable check to a static method in the
Application class and use environment variable CLEMENTINE_DEBUG instead
of CLEMENTINE_DEBUG_CONSOLE. This will allow debug features to be
enabled elsewhere in the code.
Example:
CLEMENTINE_DEBUG=1 clementine
track".
Changed shortcut key for Next Album from "space" to F9
Fixed indentation in player.cpp
Fixed spacing in player.cpp.
Updated player.cpp to ensure while loop takes into consideration the last
song on the playlist.
Fixed lint formatting error in player.cpp
Additional changes to player.cpp to make sure next album search reacts properly to the given repeat mode.
Updated player.cpp to address cpplint issues.
Fixing formatting issues.
Fixing formatting errors.
Finished formatting updates.
Final formatting...
Final formatting
Really final formatting...
Addressed issues from code review.
Added functionality to disable Next Album option when repeat mode is "repeat track".
Added commentary to recent changes.
Disable Next Album action also when Repeat Mode is Repeat_Album
In addition to disabling this action for the Next_Track repeat mode, the same applies to the Next_Album repeat mode.
The gstreamer flacenc element defines a set of quality levels that is different
from the standard flac library. Its highest level, labeled "insane", uses
settings that are outside of the streamable subset. Set the streamable-subset
property to false for this level.
Reference: https://xiph.org/flac/format.html#subset
This allows the use of the DumpGraph method in transcoding pipelines. The call
can be added to Transcoder::StartJob for debugging. In the future, a trigger
may be added to the debug console ui.
When the decoder bin's src pad becomes available, check its caps
for a format. If the format is not S16LE, then apply F32LE caps
before the tee. This prevents the pipeline from negotiating
S16LE when the decoder produces other formats.
Add a MainWindow signal that is emitted when a debug console is created. Relay
that signal to the Application. Add an AddPage method to the Console class that
allows components to populate pages when they receive the signal.
Each time the debug console is launched, a new instance is created, but never
deleted. To fix, create one instance, if the option is enabled, and show that
one each time the menu option is selected.
GstEnginePipeline::InitFromString was attempting to link the decoder and audio
bins twice and returning the result of the failed second attempt as it's own
status. The return value was also being ignored by the caller.
An old hack was notifying MergedProxyModel users that max int rows had been
removed when a submodel was reset. This caused the code that invalidates
selected items to spin for a very long time. A modelAboutToBeReset signal,
introduced in Qt 4.6, allows notification before the submodel information is
lost.
Note: there is one other case, in RemoveSubModel, where this hack is used.
This is only called when a device is removed and doesn't trigger this
condition, but it should probably be addressed in the future.
When opening a context menu on an internet item, the selected items are stored
in the InternetModel instance. In cases when the items are removed, certain menu
options can cause a crash. A specific case is downloading a podcast when the
user has chosen to limit the number of visible episodes. The subtree for the
podcast is rebuilt after the download completes, so if a context menu was opened
during the download time, selecting the append to playlist option will attempt
to operate on bad indexes.
This fix uses the rowsAboutToBeRemoved signal to remove these stored indexes.
There are likely another rare cases where the indexes can become invalid. For
example, sibling items within a subtree may be removed, causing the stored
indexes to become incorrect or out of range.
Read the G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT attribute (unix::is-mountpoint) to
determine if a volume is a mount that udisks2 has detected. Ignoring these
prevents network mounts from showing up as devices.
GioLister::UnmountDevice calls g_object_unref on the GVolume object held by a
DeviceInfo. This appears to be left over from a time before DeviceInfo held
onto the volume.
The opml parsing code handles cases where there are extra levels in the xml file
by copying the child to the main container. This corrupts the source instance
during the copy, which leads to corruption in the destination, and ultimately a
crash when it is later used.
To fix, do the copy in two steps, copying the child container to a temporary
location before copying to the destination.
The extends two functions:
- Recognize iPods as iPods, check for them in MakeDeviceUrls
- Give them a nice Icon in DeviceIcons (code taken from devicekitlister)
When there is album artist information available for a track, the user would
probably expect that "Repeat Album" should cycle through all songs with the same
album artist and album title, not only all songs with the same artist and album
title.
When the current playlist is changed, PlaylistContainer::SetViewModel is called
to set the new list. This calls PlaylistView::SetItemDelegates, which allocates
several objects that are never freed. Instead, move the call to SetItemDelegates
to PlaylistContainer::SetApplication, which is only called once.
Moving these from LibraryPlaylistItem removes local file specific
implementations of IsLocalLibraryItem and Reload. Returning true for
IsLocalLibraryItem caused ratings to be set on unrelated library songs.
Since the SimpleTreeItem constructor variant used from LoadAllDevices adds the
object to the parent's children list, use the parent's Delete method to destroy
it.
If the destination device has a transcode option set, then compute filenames
with updated extensions. This does not cover the case where Organise needs to
transcode due to format support.