(dynamic->type()));
@@ -393,6 +397,8 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &item
q.BindValue(u":dynamic_data"_s, QByteArray());
q.BindValue(u":dynamic_backend"_s, QString());
}
+ q.BindValue(u":half_playing_s"_s, half_playing_s);
+ q.BindValue(u":position_playing"_s, position_playing);
q.BindValue(u":playlist"_s, playlist);
if (!q.Exec()) {
database_->ReportErrors(q);
diff --git a/src/playlist/playlistbackend.h b/src/playlist/playlistbackend.h
index 9cc97a87bc..a8ac6c8d9f 100644
--- a/src/playlist/playlistbackend.h
+++ b/src/playlist/playlistbackend.h
@@ -62,6 +62,9 @@ class PlaylistBackend : public QObject {
PlaylistGenerator::Type dynamic_type;
QString dynamic_backend;
QByteArray dynamic_data;
+
+ int half_playing_time_s_;
+ int percent_interest_song_;
};
using PlaylistList = QList;
@@ -80,14 +83,14 @@ class PlaylistBackend : public QObject {
void SetPlaylistUiPath(const int id, const QString &path);
int CreatePlaylist(const QString &name, const QString &special_type);
- void SavePlaylistAsync(const int playlist, const PlaylistItemPtrList &items, const int last_played, PlaylistGeneratorPtr dynamic);
+ void SavePlaylistAsync(const int playlist, const PlaylistItemPtrList &items, const int last_played, const int half_playing_s, const int position_playing, PlaylistGeneratorPtr dynamic);
void RenamePlaylist(const int id, const QString &new_name);
void FavoritePlaylist(const int id, bool is_favorite);
void RemovePlaylist(const int id);
public Q_SLOTS:
void Exit();
- void SavePlaylist(const int playlist, const PlaylistItemPtrList &items, const int last_played, PlaylistGeneratorPtr dynamic);
+ void SavePlaylist(const int playlist, const PlaylistItemPtrList &items, const int last_played, const int half_playing_s, const int position_playing, PlaylistGeneratorPtr dynamic);
Q_SIGNALS:
void ExitFinished();
diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp
index c95c920063..e7e8964942 100644
--- a/src/playlist/playlistcontainer.cpp
+++ b/src/playlist/playlistcontainer.cpp
@@ -128,6 +128,11 @@ PlaylistContainer::PlaylistContainer(QWidget *parent)
ui_->search_field->installEventFilter(this);
ui_->search_field->setToolTip(FilterParser::ToolTip());
+ ui_->playing_time_before_or_after->setToolTip(PlaylistContainer::ToolTipPlayingTime());
+ ui_->playing_center_time->setToolTip(PlaylistContainer::ToolTipPositionTime());
+
+ ui_->show_collection_option->setIcon(IconLoader::Load(u"configure"_s));
+ QObject::connect(ui_->show_collection_option, &QAction::triggered, this, &PlaylistContainer::DisplayPlayingOption);
ReloadSettings();
@@ -143,6 +148,7 @@ void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist
ui_->load->setDefaultAction(load_playlist);
ui_->save->setDefaultAction(save_playlist);
ui_->clear->setDefaultAction(clear_playlist);
+ ui_->display_option->setDefaultAction(ui_->show_collection_option);
ui_->tab_bar->SetActions(new_playlist, load_playlist);
@@ -154,6 +160,9 @@ void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist
QObject::connect(previous_playlist, &QAction::triggered, this, &PlaylistContainer::GoToPreviousPlaylistTab);
QObject::connect(save_all_playlists, &QAction::triggered, &*manager_, &PlaylistManager::SaveAllPlaylists);
+ QObject::connect(ui_->playing_time_before_or_after, &QSpinBox::valueChanged, &*manager_, &PlaylistManager::UpdatePlayingTime);
+ QObject::connect(ui_->playing_center_time, &QSpinBox::valueChanged, &*manager_, &PlaylistManager::UpdatePlayingPosition);
+
}
void PlaylistContainer::SetManager(SharedPtr manager) {
@@ -194,6 +203,12 @@ void PlaylistContainer::SetViewModel(Playlist *playlist, const int scroll_positi
playlist_ = playlist;
+ ui_->playing_time_before_or_after->blockSignals(true);
+ ui_->playing_time_before_or_after->setValue(manager_->half_playing_time_s());
+ ui_->playing_time_before_or_after->blockSignals(false);
+ ui_->playing_center_time->blockSignals(true);
+ ui_->playing_center_time->setValue(manager_->percent_interest_song());
+ ui_->playing_center_time->blockSignals(false);
// Set the view
playlist->IgnoreSorting(true);
view()->setModel(playlist->filter());
@@ -252,6 +267,7 @@ void PlaylistContainer::ReloadSettings() {
ui_->clear->setIconSize(QSize(iconsize, iconsize));
ui_->undo->setIconSize(QSize(iconsize, iconsize));
ui_->redo->setIconSize(QSize(iconsize, iconsize));
+ ui_->display_option->setIconSize(QSize(iconsize, iconsize));
ui_->search_field->setIconSize(iconsize);
s.beginGroup(kSettingsGroup);
@@ -466,6 +482,13 @@ void PlaylistContainer::UpdateNoMatchesLabel() {
}
+void PlaylistContainer::DisplayPlayingOption() {
+
+ ui_->playing_time_before_or_after->setVisible(!ui_->playing_time_before_or_after->isVisible());
+ ui_->playing_center_time->setVisible(!ui_->playing_center_time->isVisible());
+
+}
+
void PlaylistContainer::resizeEvent(QResizeEvent *e) {
QWidget::resizeEvent(e);
RepositionNoMatchesLabel();
@@ -535,3 +558,19 @@ bool PlaylistContainer::eventFilter(QObject *objectWatched, QEvent *event) {
return QWidget::eventFilter(objectWatched, event);
}
+
+QString PlaylistContainer::ToolTipPlayingTime() {
+
+ return ""_L1 +
+ QObject::tr("The time played before and after the position time selected in seconds (0 for playing the complete track)") +
+ "
"_L1;
+
+}
+
+QString PlaylistContainer::ToolTipPositionTime() {
+
+ return ""_L1 +
+ QObject::tr("The position time reference selected in percent of the track length") +
+ "
"_L1;
+
+}
diff --git a/src/playlist/playlistcontainer.h b/src/playlist/playlistcontainer.h
index bf4c4c7870..9cd305b286 100644
--- a/src/playlist/playlistcontainer.h
+++ b/src/playlist/playlistcontainer.h
@@ -63,6 +63,9 @@ class PlaylistContainer : public QWidget {
bool eventFilter(QObject *objectWatched, QEvent *event) override;
+ static QString ToolTipPlayingTime();
+ static QString ToolTipPositionTime();
+
Q_SIGNALS:
void UndoRedoActionsChanged(QAction *undo, QAction *redo);
void ViewSelectionModelChanged();
@@ -85,6 +88,8 @@ class PlaylistContainer : public QWidget {
void PlaylistClosed(const int id);
void PlaylistRenamed(const int id, const QString &new_name);
+ void DisplayPlayingOption();
+
void Started();
void Save();
diff --git a/src/playlist/playlistcontainer.ui b/src/playlist/playlistcontainer.ui
index bee4b89790..2cce390527 100644
--- a/src/playlist/playlistcontainer.ui
+++ b/src/playlist/playlistcontainer.ui
@@ -145,6 +145,51 @@
-
+ -
+
+
+
+ 20
+ 20
+
+
+
+ true
+
+
+ false
+
+
+
+ -
+
+
+ 0
+
+
+ 0
+
+
+ false
+
+
+
+ -
+
+
+ 0
+
+
+ 100
+
+
+ 0
+
+
+ false
+
+
+
@@ -183,6 +228,11 @@
+
+
+ Show the collection option
+
+
diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp
index 8118228f61..ff474d1901 100644
--- a/src/playlist/playlistmanager.cpp
+++ b/src/playlist/playlistmanager.cpp
@@ -111,7 +111,7 @@ void PlaylistManager::Init(PlaylistSequence *sequence, PlaylistContainer *playli
const PlaylistBackend::PlaylistList playlists = playlist_backend_->GetAllOpenPlaylists();
for (const PlaylistBackend::Playlist &p : playlists) {
++playlists_loading_;
- Playlist *ret = AddPlaylist(p.id, p.name, p.special_type, p.ui_path, p.favorite);
+ Playlist *ret = AddPlaylist(p.id, p.name, p.special_type, p.ui_path, p.half_playing_time_s_, p.percent_interest_song_, p.favorite);
QObject::connect(ret, &Playlist::PlaylistLoaded, this, &PlaylistManager::PlaylistLoaded);
}
@@ -153,9 +153,9 @@ QItemSelection PlaylistManager::selection(const int id) const {
return it->selection;
}
-Playlist *PlaylistManager::AddPlaylist(const int id, const QString &name, const QString &special_type, const QString &ui_path, const bool favorite) {
+Playlist *PlaylistManager::AddPlaylist(const int id, const QString &name, const QString &special_type, const QString &ui_path, const int half_playing_time_s, const int percent_interest_song, const bool favorite) {
- Playlist *ret = new Playlist(task_manager_, url_handlers_, playlist_backend_, collection_backend_, tagreader_client_, id, special_type, favorite);
+ Playlist *ret = new Playlist(task_manager_, url_handlers_, playlist_backend_, collection_backend_, tagreader_client_, id, special_type, favorite, half_playing_time_s, percent_interest_song);
ret->set_sequence(sequence_);
ret->set_ui_path(ui_path);
@@ -193,7 +193,7 @@ void PlaylistManager::New(const QString &name, const SongList &songs, const QStr
if (id == -1) qFatal("Couldn't create playlist");
- Playlist *playlist = AddPlaylist(id, name, special_type, QString(), false);
+ Playlist *playlist = AddPlaylist(id, name, special_type, QString(), 0, 50, false);
playlist->InsertSongsOrCollectionItems(songs);
SetCurrentPlaylist(id);
@@ -216,7 +216,7 @@ void PlaylistManager::Load(const QString &filename) {
return;
}
- Playlist *playlist = AddPlaylist(id, fileinfo.completeBaseName(), QString(), QString(), false);
+ Playlist *playlist = AddPlaylist(id, fileinfo.completeBaseName(), QString(), QString(), 0, 50, false);
playlist->InsertUrls(QList() << QUrl::fromLocalFile(filename));
@@ -547,7 +547,7 @@ void PlaylistManager::Open(const int id) {
return;
}
- AddPlaylist(p.id, p.name, p.special_type, p.ui_path, p.favorite);
+ AddPlaylist(p.id, p.name, p.special_type, p.ui_path, p.half_playing_time_s_, p.percent_interest_song_, p.favorite);
}
diff --git a/src/playlist/playlistmanager.h b/src/playlist/playlistmanager.h
index be568aed22..7f69db78ad 100644
--- a/src/playlist/playlistmanager.h
+++ b/src/playlist/playlistmanager.h
@@ -140,6 +140,11 @@ class PlaylistManager : public PlaylistManagerInterface {
void SaveAllPlaylists();
+ int half_playing_time_s() const { return current()->half_playing_time_s(); }
+ void UpdatePlayingTime(int playing_time_s) { current()->UpdatePlayingTime(playing_time_s); }
+ int percent_interest_song() const { return current()->percent_interest_song(); }
+ void UpdatePlayingPosition(int playing_position_percent) { current()->UpdatePlayingPosition(playing_position_percent); }
+
void SetActivePlaying() override;
void SetActivePaused() override;
void SetActiveStopped() override;
@@ -152,7 +157,7 @@ class PlaylistManager : public PlaylistManagerInterface {
void PlaylistLoaded();
private:
- Playlist *AddPlaylist(const int id, const QString &name, const QString &special_type, const QString &ui_path, const bool favorite);
+ Playlist *AddPlaylist(const int id, const QString &name, const QString &special_type, const QString &ui_path, const int half_playing_time_s, const int percent_interest_song, const bool favorite);
private:
struct Data {
diff --git a/src/smartplaylists/smartplaylistsearchpreview.cpp b/src/smartplaylists/smartplaylistsearchpreview.cpp
index 4d1620f09f..eb47e175bb 100644
--- a/src/smartplaylists/smartplaylistsearchpreview.cpp
+++ b/src/smartplaylists/smartplaylistsearchpreview.cpp
@@ -72,7 +72,7 @@ void SmartPlaylistSearchPreview::Init(const SharedPtr player,
collection_backend_ = collection_backend;
- model_ = new Playlist(nullptr, nullptr, nullptr, collection_backend_, nullptr, -1, QString(), false, this);
+ model_ = new Playlist(nullptr, nullptr, nullptr, collection_backend_, nullptr, -1, QString(), false, 0, 50, this);
ui_->tree->setModel(model_);
ui_->tree->SetPlaylist(model_);