diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2011-07-02 09:09:24 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2011-07-02 09:09:24 +0000 |
| commit | 87208d0c0953b953136b22e3d4f342984f0c138a (patch) | |
| tree | 84c8ea7d1e80b7358b653275b34482c697723554 /src/app | |
| parent | 34faa3ac3680c23df0c851fded8df2181dcb1e99 (diff) | |
| download | qmmp-87208d0c0953b953136b22e3d4f342984f0c138a.tar.gz qmmp-87208d0c0953b953136b22e3d4f342984f0c138a.tar.bz2 qmmp-87208d0c0953b953136b22e3d4f342984f0c138a.zip | |
fixed playback resume feature
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2258 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/qmmpstarter.cpp | 61 | ||||
| -rw-r--r-- | src/app/qmmpstarter.h | 14 |
2 files changed, 52 insertions, 23 deletions
diff --git a/src/app/qmmpstarter.cpp b/src/app/qmmpstarter.cpp index c24bd5789..e30036ee4 100644 --- a/src/app/qmmpstarter.cpp +++ b/src/app/qmmpstarter.cpp @@ -22,6 +22,7 @@ #include <QDir> #include <QLocalServer> #include <QLocalSocket> +#include <QSettings> #include <cstdlib> #include <iostream> #include <unistd.h> @@ -46,6 +47,9 @@ using namespace std; QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent) { + m_player = 0; + m_core = 0; + m_ui = 0; m_option_manager = new BuiltinCommandLineOption(this); QStringList tmp; for (int i = 1;i < argc;i++) @@ -84,7 +88,7 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent if(!noStart && m_server->listen (UDS_PATH)) //trying to create server { - startMainWindow(); + startPlayer(); } else if(QFile::exists(UDS_PATH)) { @@ -102,7 +106,7 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent if(noStart) exit(0); else if(m_server->listen (UDS_PATH)) - startMainWindow(); + startPlayer(); else { qWarning("QMMPStarter: server error: %s", qPrintable(m_server->errorString())); @@ -118,35 +122,58 @@ QMMPStarter::QMMPStarter(int argc,char **argv, QObject* parent) : QObject(parent QMMPStarter::~QMMPStarter() { - /*if (mw) - delete mw;*/ + if (m_ui) + delete m_ui; + + //qDebug("=%d", (int)SoundCore::instance()->state()); } -void QMMPStarter::startMainWindow() +void QMMPStarter::startPlayer() { connect(m_server, SIGNAL(newConnection()), SLOT(readCommand())); QStringList args = argString.split("\n", QString::SkipEmptyParts); - //prepare libqmmp and libqmmpui libraries for playing - /*m_player = */new MediaPlayer(this); - //m_core = */SoundCore::instance(); - /*m_pl_manager = */PlayListManager::instance(); + //prepare libqmmp and libqmmpui libraries for usage + m_player = new MediaPlayer(this); + m_core = SoundCore::instance(); + //additional featuries new PlaylistParser(this); - /*m_generalHandler = */new GeneralHandler(this); + new GeneralHandler(this); + //interface UiFactory *factory = UiLoader::currentUiFactory(); if(factory) + m_ui = factory->create(); + else { - QObject *ui = factory->create(); - //ui->setParent(this); + qWarning("QMMPStarter: no user interface found"); + exit(1); + return; } - - - /*mw = new MainWindow(); + connect(qApp, SIGNAL(aboutToQuit()), SLOT(savePosition())); processCommandArgs(args, QDir::currentPath()); if(args.isEmpty()) - mw->resume();*/ + { + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("General"); + if(settings.value("resume_playback", false).toBool()) + { + qint64 pos = settings.value("resume_playback_time").toLongLong(); + m_player->play(pos); + } + } +} + +void QMMPStarter::savePosition() +{ + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("General"); + settings.setValue("resume_playback", m_core->state() == Qmmp::Playing && + settings.value("resume_on_startup", false).toBool()); + settings.setValue("resume_playback_time", m_core->totalTime() > 0 ? m_core->elapsed() : 0); + settings.endGroup(); + m_core->stop(); } void QMMPStarter::writeCommand() @@ -208,7 +235,7 @@ QString QMMPStarter::processCommandArgs(const QStringList &slist, const QString& } if(!paths.isEmpty()) { - m_option_manager->executeCommand(QString(), paths, cwd/*, mw*/); //add paths only + m_option_manager->executeCommand(QString(), paths, cwd); //add paths only return QString(); } QHash<QString, QStringList> commands = m_option_manager->splitArgs(slist); diff --git a/src/app/qmmpstarter.h b/src/app/qmmpstarter.h index 95596ea49..6758b1557 100644 --- a/src/app/qmmpstarter.h +++ b/src/app/qmmpstarter.h @@ -27,7 +27,8 @@ class QLocalServer; class QLocalSocket; -class MainWindow; +class MediaPlayer; +class SoundCore; class BuiltinCommandLineOption; /*! @@ -44,12 +45,13 @@ public: ~QMMPStarter(); -protected slots: +private slots: /*! * Passes command args to the running application */ void writeCommand(); void readCommand(); + void savePosition(); private: QString processCommandArgs(const QStringList &list,const QString& cwd); @@ -57,16 +59,16 @@ private: * Prints usage */ void printUsage(); - /*! * Prints version of program */ void printVersion(); - - void startMainWindow(); + void startPlayer(); private: - //MainWindow* mw; + MediaPlayer *m_player; + SoundCore *m_core; + QObject *m_ui; QString argString; BuiltinCommandLineOption* m_option_manager; QLocalServer *m_server; |
