Refactor some initial setup out of MainWindow::MainWindow().
This commit is contained in:
parent
59378166b4
commit
bde7902686
|
@ -42,10 +42,9 @@ const char* Mpris2::kMprisObjectPath = "/org/mpris/MediaPlayer2";
|
|||
const char* Mpris2::kServiceName = "org.mpris.MediaPlayer2.clementine";
|
||||
const char* Mpris2::kFreedesktopPath = "org.freedesktop.DBus.Properties";
|
||||
|
||||
Mpris2::Mpris2(MainWindow* main_window, Player* player, ArtLoader* art_loader,
|
||||
Mpris2::Mpris2(Player* player, ArtLoader* art_loader,
|
||||
Mpris1* mpris1, QObject* parent)
|
||||
: QObject(parent),
|
||||
ui_(main_window),
|
||||
player_(player),
|
||||
mpris1_(mpris1)
|
||||
{
|
||||
|
@ -205,8 +204,7 @@ QStringList Mpris2::SupportedMimeTypes() const {
|
|||
}
|
||||
|
||||
void Mpris2::Raise() {
|
||||
ui_->show();
|
||||
ui_->activateWindow();
|
||||
emit RaiseMainWindow();
|
||||
}
|
||||
|
||||
void Mpris2::Quit() {
|
||||
|
|
|
@ -72,7 +72,7 @@ class Mpris2 : public QObject {
|
|||
Q_PROPERTY( bool CanEditTracks READ CanEditTracks )
|
||||
|
||||
public:
|
||||
Mpris2(MainWindow* main_window, Player* player, ArtLoader* art_loader,
|
||||
Mpris2(Player* player, ArtLoader* art_loader,
|
||||
Mpris1* mpris1, QObject* parent);
|
||||
|
||||
// Root Properties
|
||||
|
@ -140,6 +140,8 @@ signals:
|
|||
void TrackRemoved(const QDBusObjectPath& trackId);
|
||||
void TrackMetadataChanged(const QDBusObjectPath& trackId, const TrackMetadata& metadata);
|
||||
|
||||
void RaiseMainWindow();
|
||||
|
||||
private slots:
|
||||
void ArtLoaded(const Song& song, const QString& art_uri);
|
||||
void EngineStateChanged(Engine::State newState);
|
||||
|
@ -165,7 +167,6 @@ private:
|
|||
|
||||
QVariantMap last_metadata_;
|
||||
|
||||
MainWindow* ui_;
|
||||
Player* player_;
|
||||
Mpris1* mpris1_;
|
||||
};
|
||||
|
|
|
@ -23,19 +23,11 @@
|
|||
#include "playlist/playlist.h"
|
||||
#include "playlist/playlistitem.h"
|
||||
#include "playlist/playlistmanager.h"
|
||||
#include "mpris_common.h"
|
||||
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
# include "radio/lastfmservice.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
# include "mpris.h"
|
||||
# include "mpris2.h"
|
||||
# include <QDBusConnection>
|
||||
# include <QImage>
|
||||
#endif
|
||||
|
||||
#include <QtDebug>
|
||||
#include <QtConcurrentRun>
|
||||
|
||||
|
@ -44,15 +36,12 @@
|
|||
using boost::shared_ptr;
|
||||
|
||||
|
||||
Player::Player(MainWindow* main_window, PlaylistManager* playlists,
|
||||
Player::Player(PlaylistManager* playlists,
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
LastFMService* lastfm,
|
||||
#endif
|
||||
QObject* parent)
|
||||
: QObject(parent),
|
||||
art_loader_(new mpris::ArtLoader(this)),
|
||||
mpris1_(NULL),
|
||||
mpris2_(NULL),
|
||||
playlists_(playlists),
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
lastfm_(lastfm),
|
||||
|
@ -62,24 +51,6 @@ Player::Player(MainWindow* main_window, PlaylistManager* playlists,
|
|||
last_state_(Engine::Empty),
|
||||
volume_before_mute_(50)
|
||||
{
|
||||
// Loads album art and saves it to a file in /tmp for MPRIS clients and those
|
||||
// objects which need cover art's filepath, not the image itself
|
||||
connect(playlists, SIGNAL(CurrentSongChanged(Song)),
|
||||
art_loader_, SLOT(LoadArt(Song)));
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
// MPRIS DBus interface.
|
||||
qDBusRegisterMetaType<QImage>();
|
||||
qDBusRegisterMetaType<TrackMetadata>();
|
||||
qDBusRegisterMetaType<TrackIds>();
|
||||
|
||||
//MPRIS 1.0 implementation
|
||||
mpris1_ = new mpris::Mpris1(this, art_loader_, this);
|
||||
|
||||
//MPRIS 2.0 implementation
|
||||
mpris2_ = new mpris::Mpris2(main_window, this, art_loader_, mpris1_, this);
|
||||
#endif
|
||||
|
||||
settings_.beginGroup("Player");
|
||||
|
||||
SetVolume(settings_.value("volume", 50).toInt());
|
||||
|
|
|
@ -37,23 +37,11 @@ class MainWindow;
|
|||
class LastFMService;
|
||||
#endif
|
||||
|
||||
namespace mpris {
|
||||
class Mpris1;
|
||||
class Mpris2;
|
||||
class ArtLoader;
|
||||
}
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
# include <QDBusArgument>
|
||||
QDBusArgument& operator<< (QDBusArgument& arg, const QImage& image);
|
||||
const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image);
|
||||
#endif
|
||||
|
||||
class Player : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Player(MainWindow* main_window, PlaylistManager* playlists,
|
||||
Player(PlaylistManager* playlists,
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
LastFMService* lastfm,
|
||||
#endif
|
||||
|
@ -69,7 +57,6 @@ class Player : public QObject {
|
|||
PlaylistItemPtr GetCurrentItem() const { return current_item_; }
|
||||
PlaylistItemPtr GetItemAt(int pos) const;
|
||||
PlaylistManager* playlists() const { return playlists_; }
|
||||
mpris::ArtLoader* ArtLoader() const { return art_loader_; }
|
||||
|
||||
public slots:
|
||||
void ReloadSettings();
|
||||
|
@ -124,11 +111,6 @@ class Player : public QObject {
|
|||
void NextInternal(Engine::TrackChangeType);
|
||||
|
||||
private:
|
||||
mpris::ArtLoader* art_loader_;
|
||||
|
||||
mpris::Mpris1* mpris1_;
|
||||
mpris::Mpris2* mpris2_;
|
||||
|
||||
PlaylistManager* playlists_;
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
LastFMService* lastfm_;
|
||||
|
|
63
src/main.cpp
63
src/main.cpp
|
@ -33,16 +33,21 @@
|
|||
#include "core/player.h"
|
||||
#include "core/potranslator.h"
|
||||
#include "core/song.h"
|
||||
#include "core/taskmanager.h"
|
||||
#include "core/utilities.h"
|
||||
#include "engines/enginebase.h"
|
||||
#include "library/directory.h"
|
||||
#include "playlist/playlist.h"
|
||||
#include "playlist/playlistmanager.h"
|
||||
#include "radio/radiomodel.h"
|
||||
#include "remote/httpserver.h"
|
||||
#include "remote/zeroconf.h"
|
||||
#include "smartplaylists/generator.h"
|
||||
#include "ui/equalizer.h"
|
||||
#include "ui/iconloader.h"
|
||||
#include "ui/mainwindow.h"
|
||||
#include "ui/systemtrayicon.h"
|
||||
#include "widgets/osd.h"
|
||||
|
||||
#include "qtsingleapplication.h"
|
||||
#include "qtsinglecoreapplication.h"
|
||||
|
@ -59,6 +64,9 @@
|
|||
#include <glib/gutils.h>
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
using boost::scoped_ptr;
|
||||
|
||||
#include <echonest/Config.h>
|
||||
|
||||
#ifdef Q_OS_DARWIN
|
||||
|
@ -70,6 +78,18 @@
|
|||
#include "radio/lastfmservice.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
#include "core/mpris_common.h"
|
||||
#include "core/mpris.h"
|
||||
#include "core/mpris2.h"
|
||||
#include <QDBusArgument>
|
||||
#include <QDBusConnection>
|
||||
#include <QImage>
|
||||
|
||||
QDBusArgument& operator<< (QDBusArgument& arg, const QImage& image);
|
||||
const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image);
|
||||
#endif
|
||||
|
||||
class GstEnginePipeline;
|
||||
|
||||
// Load sqlite plugin on windows and mac.
|
||||
|
@ -267,6 +287,36 @@ int main(int argc, char *argv[]) {
|
|||
// Seed the random number generator
|
||||
srand(time(NULL));
|
||||
|
||||
scoped_ptr<BackgroundThread<Database> > database(
|
||||
new BackgroundThreadImplementation<Database, Database>(NULL));
|
||||
database->Start(true);
|
||||
TaskManager task_manager;
|
||||
PlaylistManager playlists(&task_manager, NULL);
|
||||
|
||||
RadioModel radio_model(database.get(), &task_manager, NULL);
|
||||
Player player(&playlists,
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
radio_model.GetLastFMService()
|
||||
#endif
|
||||
);
|
||||
|
||||
scoped_ptr<SystemTrayIcon> tray_icon(SystemTrayIcon::CreateSystemTrayIcon());
|
||||
OSD osd(tray_icon.get());
|
||||
|
||||
#ifdef HAVE_DBUS
|
||||
qDBusRegisterMetaType<QImage>();
|
||||
qDBusRegisterMetaType<TrackMetadata>();
|
||||
qDBusRegisterMetaType<TrackIds>();
|
||||
|
||||
mpris::ArtLoader art_loader;
|
||||
mpris::Mpris1 mpris1(&player, &art_loader);
|
||||
mpris::Mpris2 mpris2(&player, &art_loader, &mpris1);
|
||||
|
||||
QObject::connect(&playlists, SIGNAL(CurrentSongChanged(Song)), &art_loader, SLOT(LoadArt(Song)));
|
||||
QObject::connect(&art_loader, SIGNAL(ThumbnailLoaded(Song, QString)),
|
||||
&osd, SLOT(CoverArtPathReady(Song, QString)));
|
||||
#endif
|
||||
|
||||
Zeroconf* zeroconf = Zeroconf::GetZeroconf();
|
||||
if (zeroconf) {
|
||||
HttpServer* server = new HttpServer;
|
||||
|
@ -276,8 +326,17 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
// Window
|
||||
MainWindow w;
|
||||
|
||||
MainWindow w(
|
||||
database.get(),
|
||||
&task_manager,
|
||||
&playlists,
|
||||
&radio_model,
|
||||
&player,
|
||||
tray_icon.get(),
|
||||
&osd);
|
||||
#ifdef HAVE_DBUS
|
||||
QObject::connect(&mpris2, SIGNAL(RaiseMainWindow()), &w, SLOT(Raise()));
|
||||
#endif
|
||||
QObject::connect(&a, SIGNAL(messageReceived(QByteArray)), &w, SLOT(CommandlineOptionsReceived(QByteArray)));
|
||||
w.CommandlineOptionsReceived(options);
|
||||
|
||||
|
|
|
@ -55,7 +55,6 @@ IcecastFilterWidget::IcecastFilterWidget(QWidget *parent)
|
|||
MacLineEdit* lineedit = new MacLineEdit(this);
|
||||
ui_->horizontalLayout->insertWidget(1, lineedit);
|
||||
filter_ = lineedit;
|
||||
ui_->clear->setHidden(true);
|
||||
#else
|
||||
filter_ = ui_->filter;
|
||||
#endif
|
||||
|
|
|
@ -136,17 +136,25 @@ const char* MainWindow::kMusicFilterSpec =
|
|||
const char* MainWindow::kAllFilesFilterSpec =
|
||||
QT_TR_NOOP("All Files (*)");
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent)
|
||||
MainWindow::MainWindow(
|
||||
BackgroundThread<Database>* database,
|
||||
TaskManager* task_manager,
|
||||
PlaylistManager* playlist_manager,
|
||||
RadioModel* radio_model,
|
||||
Player* player,
|
||||
SystemTrayIcon* tray_icon,
|
||||
OSD* osd,
|
||||
QWidget* parent)
|
||||
: QMainWindow(parent),
|
||||
ui_(new Ui_MainWindow),
|
||||
tray_icon_(SystemTrayIcon::CreateSystemTrayIcon(this)),
|
||||
osd_(new OSD(tray_icon_, this)),
|
||||
task_manager_(new TaskManager(this)),
|
||||
database_(new BackgroundThreadImplementation<Database, Database>(this)),
|
||||
radio_model_(NULL),
|
||||
tray_icon_(tray_icon),
|
||||
osd_(osd),
|
||||
task_manager_(task_manager),
|
||||
database_(database),
|
||||
radio_model_(radio_model),
|
||||
playlist_backend_(NULL),
|
||||
playlists_(new PlaylistManager(task_manager_, this)),
|
||||
player_(NULL),
|
||||
playlists_(playlist_manager),
|
||||
player_(player),
|
||||
library_(NULL),
|
||||
global_shortcuts_(new GlobalShortcuts(this)),
|
||||
devices_(NULL),
|
||||
|
@ -176,21 +184,12 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
track_position_timer_(new QTimer(this)),
|
||||
was_maximized_(false)
|
||||
{
|
||||
// Wait for the database thread to start - lots of stuff depends on it.
|
||||
database_->Start(true);
|
||||
|
||||
// Create some objects in the database thread
|
||||
playlist_backend_ = new PlaylistBackend;
|
||||
playlist_backend_->moveToThread(database_);
|
||||
playlist_backend_->SetDatabase(database_->Worker());
|
||||
|
||||
// Create stuff that needs the database
|
||||
radio_model_ = new RadioModel(database_, task_manager_, this);
|
||||
player_ = new Player(this, playlists_,
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
radio_model_->GetLastFMService(),
|
||||
#endif
|
||||
this);
|
||||
library_ = new Library(database_, task_manager_, this);
|
||||
devices_ = new DeviceManager(database_, task_manager_, this);
|
||||
|
||||
|
@ -389,8 +388,6 @@ MainWindow::MainWindow(QWidget* parent)
|
|||
connect(playlists_, SIGNAL(SummaryTextChanged(QString)), ui_->playlist_summary, SLOT(setText(QString)));
|
||||
connect(playlists_, SIGNAL(PlayRequested(QModelIndex)), SLOT(PlayIndex(QModelIndex)));
|
||||
|
||||
connect(player_->ArtLoader(), SIGNAL(ThumbnailLoaded(Song,QString)), osd_, SLOT(CoverArtPathReady(Song,QString)));
|
||||
|
||||
connect(ui_->playlist->view(), SIGNAL(doubleClicked(QModelIndex)), SLOT(PlayIndex(QModelIndex)));
|
||||
connect(ui_->playlist->view(), SIGNAL(PlayPauseItem(QModelIndex)), SLOT(PlayIndex(QModelIndex)));
|
||||
connect(ui_->playlist->view(), SIGNAL(RightClicked(QPoint,QModelIndex)), SLOT(PlaylistRightClick(QPoint,QModelIndex)));
|
||||
|
@ -1802,6 +1799,11 @@ void MainWindow::PlaylistCurrentChanged(const QModelIndex& proxy_current) {
|
|||
playlist_menu_index_ = QModelIndex();
|
||||
}
|
||||
|
||||
void MainWindow::Raise() {
|
||||
show();
|
||||
activateWindow();
|
||||
}
|
||||
|
||||
void MainWindow::ShowScriptDialog() {
|
||||
if (!script_dialog_) {
|
||||
script_dialog_.reset(new ScriptDialog);
|
||||
|
|
|
@ -79,7 +79,14 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = 0);
|
||||
MainWindow(BackgroundThread<Database>* database,
|
||||
TaskManager* task_manager,
|
||||
PlaylistManager* playlists,
|
||||
RadioModel* radio_model,
|
||||
Player* player,
|
||||
SystemTrayIcon* tray_icon,
|
||||
OSD* osd,
|
||||
QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
|
||||
static const char* kSettingsGroup;
|
||||
|
@ -216,6 +223,8 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||
|
||||
void DeleteFinished(const SongList& songs_with_errors);
|
||||
|
||||
void Raise();
|
||||
|
||||
private:
|
||||
void AddFilesToPlaylist(bool clear_first, const QList<QUrl>& urls);
|
||||
void AddLibraryItemToPlaylist(bool clear_first, bool enqueue, const QModelIndexList& indexes);
|
||||
|
|
Loading…
Reference in New Issue