Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beefdabc64 | ||
|
|
91e06cadf3 | ||
|
|
4ea5eb8292 | ||
|
|
af06f8e70a | ||
|
|
3238e295ba | ||
|
|
26fbd5c144 | ||
|
|
e64a2b98c4 |
17
3rdparty/README.md
vendored
17
3rdparty/README.md
vendored
@@ -2,20 +2,27 @@
|
|||||||
============================================
|
============================================
|
||||||
|
|
||||||
KDSingleApplication
|
KDSingleApplication
|
||||||
-----------------
|
-------------------
|
||||||
This is a small static library used by Strawberry to prevent it from starting twice per user session.
|
A small library used by Strawberry to prevent it from starting twice per user session.
|
||||||
If the user tries to start strawberry twice, the main window will maximize instead of starting another instance.
|
If the user tries to start strawberry twice, the main window will maximize instead of starting another instance.
|
||||||
It is also used to pass command-line options through to the first instance.
|
It is also used to pass command-line options through to the first instance.
|
||||||
|
This 3rdparty copy is used only if KDSingleApplication 1.1 or higher is not found on the system.
|
||||||
|
|
||||||
URL: https://github.com/KDAB/KDSingleApplication/
|
URL: https://github.com/KDAB/KDSingleApplication/
|
||||||
|
|
||||||
|
|
||||||
SPMediaKeyTap
|
SPMediaKeyTap
|
||||||
-------------
|
-------------
|
||||||
Used on macOS to exclusively enable strawberry to grab global media shortcuts.
|
A library used on macOS to exclusively grab global media shortcuts.
|
||||||
Can safely be deleted on other platforms.
|
|
||||||
|
|
||||||
|
The library is no longer maintained by the original author.
|
||||||
|
|
||||||
|
The directory can safely be deleted on other platforms.
|
||||||
|
|
||||||
getopt
|
getopt
|
||||||
------
|
------
|
||||||
getopt included only when compiling on Windows.
|
getopt included on Windows for command line options parsing with Unicode support .
|
||||||
|
|
||||||
|
The directory can safely be deleted on other platforms.
|
||||||
|
|
||||||
|
URL: https://github.com/ludvikjerabek/getopt-win
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Strawberry Music Player
|
|||||||
=======================
|
=======================
|
||||||
ChangeLog
|
ChangeLog
|
||||||
|
|
||||||
Version 1.1.2-rc1 (2024.09.06):
|
Version 1.1.2 (2024.09.12):
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Fixed Tidal Open API cover provider to only login when needed instead of on startup.
|
* Fixed Tidal Open API cover provider to only login when needed instead of on startup.
|
||||||
@@ -15,7 +15,7 @@ Version 1.1.2-rc1 (2024.09.06):
|
|||||||
* Fixed Spotify returning too many artists and albums.
|
* Fixed Spotify returning too many artists and albums.
|
||||||
* Fixed manually switching Spotify songs blocking UI.
|
* Fixed manually switching Spotify songs blocking UI.
|
||||||
* Fixed analyzer not being set.
|
* Fixed analyzer not being set.
|
||||||
* Fixed context top text being updated causing marked text to be unmarked.
|
* Fixed context top text being updated causing selected text to be unselected.
|
||||||
* Fixed filter search to use filename for songs with empty title.
|
* Fixed filter search to use filename for songs with empty title.
|
||||||
* Fixed missing developer in Appstream appdata file.
|
* Fixed missing developer in Appstream appdata file.
|
||||||
* Fixed MPRIS2 DesktopEntry to return desktop file entry without ".desktop" (#1516)
|
* Fixed MPRIS2 DesktopEntry to return desktop file entry without ".desktop" (#1516)
|
||||||
@@ -24,12 +24,13 @@ Version 1.1.2-rc1 (2024.09.06):
|
|||||||
* Fixed freeze on playlist right click (#1478).
|
* Fixed freeze on playlist right click (#1478).
|
||||||
* Fixed copying songs to a iPod device keeping too many files open (#1527).
|
* Fixed copying songs to a iPod device keeping too many files open (#1527).
|
||||||
* Fixed MBIDs from MP4 being parsed incorrectly causing ListenBrainz errors (#1531).
|
* Fixed MBIDs from MP4 being parsed incorrectly causing ListenBrainz errors (#1531).
|
||||||
* (macOS) Fixed missing Spotify.
|
* Fixed playlist sorting after filename (#1538).
|
||||||
|
|
||||||
Enhancements:
|
Enhancements:
|
||||||
* Improved volume adjustment and track seeking using touchpad (#1498).
|
* Improved volume adjustment and track seeking using touchpad (#1498).
|
||||||
* Use own thread for lyrics parsing.
|
* Use own thread for lyrics parsing.
|
||||||
* Added url and filename columns to collection and playlist filter search.
|
* Added url and filename columns to collection and playlist filter search.
|
||||||
|
* (macOS) Added Spotify.
|
||||||
|
|
||||||
Version 1.1.1 (2024.07.22):
|
Version 1.1.1 (2024.07.22):
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
set(STRAWBERRY_VERSION_MAJOR 1)
|
set(STRAWBERRY_VERSION_MAJOR 1)
|
||||||
set(STRAWBERRY_VERSION_MINOR 1)
|
set(STRAWBERRY_VERSION_MINOR 1)
|
||||||
set(STRAWBERRY_VERSION_PATCH 2)
|
set(STRAWBERRY_VERSION_PATCH 2)
|
||||||
set(STRAWBERRY_VERSION_PRERELEASE rc1)
|
#set(STRAWBERRY_VERSION_PRERELEASE rc1)
|
||||||
|
|
||||||
set(INCLUDE_GIT_REVISION OFF)
|
set(INCLUDE_GIT_REVISION OFF)
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
</screenshots>
|
</screenshots>
|
||||||
<update_contact>eclipseo@fedoraproject.org</update_contact>
|
<update_contact>eclipseo@fedoraproject.org</update_contact>
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="1.1.2" date="2024-09-12"/>
|
||||||
<release version="1.1.1" date="2024-07-22"/>
|
<release version="1.1.1" date="2024-07-22"/>
|
||||||
<release version="1.1.0" date="2024-07-14"/>
|
<release version="1.1.0" date="2024-07-14"/>
|
||||||
<release version="1.0.23" date="2024-01-11"/>
|
<release version="1.0.23" date="2024-01-11"/>
|
||||||
|
|||||||
@@ -1123,11 +1123,12 @@ void GstEnginePipeline::NotifyVolumeCallback(GstElement *element, GParamSpec *pa
|
|||||||
|
|
||||||
if (!instance->volume_set_.value()) return;
|
if (!instance->volume_set_.value()) return;
|
||||||
|
|
||||||
const double volume_internal = instance->volume_internal_.value();
|
double volume_internal = 0.0;
|
||||||
g_object_get(G_OBJECT(instance->volume_), "volume", &volume_internal, nullptr);
|
g_object_get(G_OBJECT(instance->volume_), "volume", &volume_internal, nullptr);
|
||||||
|
|
||||||
const uint volume_percent = static_cast<uint>(qBound(0L, lround(instance->volume_internal_.value() / 0.01), 100L));
|
const uint volume_percent = static_cast<uint>(qBound(0L, lround(volume_internal / 0.01), 100L));
|
||||||
if (volume_percent != instance->volume_percent_.value()) {
|
if (volume_percent != instance->volume_percent_.value()) {
|
||||||
|
instance->volume_internal_ = volume_internal;
|
||||||
instance->volume_percent_ = volume_percent;
|
instance->volume_percent_ = volume_percent;
|
||||||
Q_EMIT instance->VolumeChanged(volume_percent);
|
Q_EMIT instance->VolumeChanged(volume_percent);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1342,7 +1342,7 @@ bool Playlist::CompareItems(const Column column, const Qt::SortOrder order, Play
|
|||||||
case Column::Samplerate: cmp(samplerate);
|
case Column::Samplerate: cmp(samplerate);
|
||||||
case Column::Bitdepth: cmp(bitdepth);
|
case Column::Bitdepth: cmp(bitdepth);
|
||||||
case Column::Filename:
|
case Column::Filename:
|
||||||
return (QString::localeAwareCompare(a->Url().path().toLower(), b->Url().path().toLower()) < 0);
|
return QString::localeAwareCompare(a->Url().path(), b->Url().path()) < 0;
|
||||||
case Column::BaseFilename: cmp(basefilename);
|
case Column::BaseFilename: cmp(basefilename);
|
||||||
case Column::Filesize: cmp(filesize);
|
case Column::Filesize: cmp(filesize);
|
||||||
case Column::Filetype: cmp(filetype);
|
case Column::Filetype: cmp(filetype);
|
||||||
@@ -1371,18 +1371,6 @@ bool Playlist::CompareItems(const Column column, const Qt::SortOrder order, Play
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Playlist::ComparePathDepths(const Qt::SortOrder order, PlaylistItemPtr _a, PlaylistItemPtr _b) {
|
|
||||||
|
|
||||||
PlaylistItemPtr a = order == Qt::AscendingOrder ? _a : _b;
|
|
||||||
PlaylistItemPtr b = order == Qt::AscendingOrder ? _b : _a;
|
|
||||||
|
|
||||||
qint64 a_dir_level = a->Url().path().count(QLatin1Char('/'));
|
|
||||||
qint64 b_dir_level = b->Url().path().count(QLatin1Char('/'));
|
|
||||||
|
|
||||||
return a_dir_level < b_dir_level;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Playlist::column_name(const Column column) {
|
QString Playlist::column_name(const Column column) {
|
||||||
|
|
||||||
switch (column) {
|
switch (column) {
|
||||||
@@ -1471,11 +1459,6 @@ void Playlist::sort(const int column_number, const Qt::SortOrder order) {
|
|||||||
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, Column::Disc, order, std::placeholders::_1, std::placeholders::_2));
|
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, Column::Disc, order, std::placeholders::_1, std::placeholders::_2));
|
||||||
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, Column::Album, order, std::placeholders::_1, std::placeholders::_2));
|
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, Column::Album, order, std::placeholders::_1, std::placeholders::_2));
|
||||||
}
|
}
|
||||||
else if (column == Column::Filename) {
|
|
||||||
// When sorting by full paths we also expect a hierarchical order. This returns a breath-first ordering of paths.
|
|
||||||
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, Column::Filename, order, std::placeholders::_1, std::placeholders::_2));
|
|
||||||
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::ComparePathDepths, order, std::placeholders::_1, std::placeholders::_2));
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, column, order, std::placeholders::_1, std::placeholders::_2));
|
std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, column, order, std::placeholders::_1, std::placeholders::_2));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,8 +259,6 @@ class Playlist : public QAbstractListModel {
|
|||||||
void sort(const int column_number, const Qt::SortOrder order) override;
|
void sort(const int column_number, const Qt::SortOrder order) override;
|
||||||
bool removeRows(const int row, const int count, const QModelIndex &parent = QModelIndex()) override;
|
bool removeRows(const int row, const int count, const QModelIndex &parent = QModelIndex()) override;
|
||||||
|
|
||||||
static bool ComparePathDepths(Qt::SortOrder, PlaylistItemPtr, PlaylistItemPtr);
|
|
||||||
|
|
||||||
static Columns ChangedColumns(const Song &metadata1, const Song &metadata2);
|
static Columns ChangedColumns(const Song &metadata1, const Song &metadata2);
|
||||||
static bool MinorMetadataChange(const Song &old_metadata, const Song &new_metadata);
|
static bool MinorMetadataChange(const Song &old_metadata, const Song &new_metadata);
|
||||||
void UpdateItemMetadata(PlaylistItemPtr item, const Song &new_metadata, const bool temporary);
|
void UpdateItemMetadata(PlaylistItemPtr item, const Song &new_metadata, const bool temporary);
|
||||||
|
|||||||
Reference in New Issue
Block a user