diff --git a/src/core/commandlineoptions.cpp b/src/core/commandlineoptions.cpp index bd8f7ceff..1fc5d5445 100644 --- a/src/core/commandlineoptions.cpp +++ b/src/core/commandlineoptions.cpp @@ -299,6 +299,11 @@ bool CommandlineOptions::is_empty() const { toggle_pretty_osd_ == false && urls_.isEmpty(); } +bool CommandlineOptions::contains_play_options() const { + return player_action_ != Player_None || play_track_at_ != -1 || + !urls_.isEmpty(); +} + QByteArray CommandlineOptions::Serialize() const { QBuffer buf; buf.open(QIODevice::WriteOnly); diff --git a/src/core/commandlineoptions.h b/src/core/commandlineoptions.h index a2202c1f4..0f69740fa 100644 --- a/src/core/commandlineoptions.h +++ b/src/core/commandlineoptions.h @@ -60,6 +60,7 @@ class CommandlineOptions { bool Parse(); bool is_empty() const; + bool contains_play_options() const; UrlListAction url_list_action() const { return url_list_action_; } PlayerAction player_action() const { return player_action_; } diff --git a/src/main.cpp b/src/main.cpp index 42d8f0fc0..e40e52e7e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -462,7 +462,7 @@ int main(int argc, char* argv[]) { #endif // Window - MainWindow w(&app, tray_icon.get(), &osd); + MainWindow w(&app, tray_icon.get(), &osd, options); #ifdef Q_OS_DARWIN mac::EnableFullScreen(w); #endif // Q_OS_DARWIN @@ -474,7 +474,6 @@ int main(int argc, char* argv[]) { #endif QObject::connect(&a, SIGNAL(messageReceived(QByteArray)), &w, SLOT(CommandlineOptionsReceived(QByteArray))); - w.CommandlineOptionsReceived(options); int ret = a.exec(); diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index c653a5528..47a950594 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -118,7 +118,8 @@ Playlist::Playlist(PlaylistBackend* backend, TaskManager* task_manager, playlist_sequence_(nullptr), ignore_sorting_(false), undo_stack_(new QUndoStack(this)), - special_type_(special_type) { + special_type_(special_type), + cancel_restore_(false) { undo_stack_->setUndoLimit(kUndoStackSize); connect(this, SIGNAL(rowsInserted(const QModelIndex&, int, int)), @@ -1470,6 +1471,7 @@ void Playlist::Restore() { virtual_items_.clear(); library_items_by_id_.clear(); + cancel_restore_ = false; QFuture> future = QtConcurrent::run(backend_, &PlaylistBackend::GetPlaylistItems, id_); NewClosure(future, this, SLOT(ItemsLoaded(QFuture)), @@ -1477,6 +1479,9 @@ void Playlist::Restore() { } void Playlist::ItemsLoaded(QFuture future) { + if (cancel_restore_) + return; + PlaylistItemList items = future.result(); // backend returns empty elements for library items which it couldn't @@ -1749,6 +1754,9 @@ void Playlist::UpdateScrobblePoint(qint64 seek_point_nanosec) { } void Playlist::Clear() { + // If loading songs from session restore async, don't insert them + cancel_restore_ = true; + const int count = items_.count(); if (count > kUndoItemLimit) { diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 5cb4659ba..ada4db68d 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -443,6 +443,9 @@ signals: QList veto_listeners_; QString special_type_; + + // Cancel async restore if songs are already replaced + bool cancel_restore_; }; // QDataStream& operator <<(QDataStream&, const Playlist*); diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 78eef85df..ce90010af 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -165,7 +165,7 @@ const int kTrackPositionUpdateTimeMs = 1000; } MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, - QWidget* parent) + const CommandlineOptions& options, QWidget* parent) : QMainWindow(parent), ui_(new Ui_MainWindow), thumbbar_(new Windows7ThumbBar(this)), @@ -1038,7 +1038,10 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, CheckFullRescanRevisions(); - LoadPlaybackStatus(); + CommandlineOptionsReceived(options); + + if (!options.contains_play_options()) + LoadPlaybackStatus(); qLog(Debug) << "Started"; } diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index c68cbf5b9..6d8cbbd5c 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -89,7 +89,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { public: MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, - QWidget* parent = nullptr); + const CommandlineOptions& options, QWidget* parent = nullptr); ~MainWindow(); static const char* kSettingsGroup;