From af06f8e70a82c2657b51293d03f5f55f64fbdf15 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 8 Sep 2024 13:12:13 +0200 Subject: [PATCH] Playlist: Remove flawed sorting logic for filename Possible fix for #1538 --- src/playlist/playlist.cpp | 19 +------------------ src/playlist/playlist.h | 2 -- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index e6e889e6..a032beaa 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1342,7 +1342,7 @@ bool Playlist::CompareItems(const Column column, const Qt::SortOrder order, Play case Column::Samplerate: cmp(samplerate); case Column::Bitdepth: cmp(bitdepth); 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::Filesize: cmp(filesize); 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) { 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::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 { std::stable_sort(begin, new_items.end(), std::bind(&Playlist::CompareItems, column, order, std::placeholders::_1, std::placeholders::_2)); } diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 8b05bf18..3009bb68 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -259,8 +259,6 @@ class Playlist : public QAbstractListModel { void sort(const int column_number, const Qt::SortOrder order) 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 bool MinorMetadataChange(const Song &old_metadata, const Song &new_metadata); void UpdateItemMetadata(PlaylistItemPtr item, const Song &new_metadata, const bool temporary);