scancontroller.h

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C头文件 代码 · 共 142 行

H
142
字号
/*************************************************************************** *   Copyright (C) 2003-2005 by The Amarok Developers                      * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   51 Franklin Steet, Fifth Floor, Boston, MA  02111-1307, USA.          * ***************************************************************************/#ifndef AMAROK_SCANCONTROLLER_H#define AMAROK_SCANCONTROLLER_H#include <qmutex.h>#include <qxml.h>         //baseclass#include "threadmanager.h" //baseclassclass CollectionDB;class KProcIO;/** * @class ScanController * @short Starts and controls the external amarokcollectionscanner application. * @author Mark Kretschmann <markey@web.de> * * The collection scanner itself is run in an external process, unlike before, where it * used to be thread. The advantage is that the scanner cannot crash the Amarok main * application any more. If it crashes we can simply restart it. * * Amarok communicates with the scanner via the ScanController class, which processes * XML entities written to stdout by the scanner process. For XML parsing an event * driven SAX2 parser is used, which can process the entities as they arrive, without * the need for a DOM document structure. */class ScanController : public ThreadManager::DependentJob, public QXmlDefaultHandler{    Q_OBJECT    public:        static const int RestartEventType = 8891;        class RestartEvent : public QCustomEvent {            public:                RestartEvent() : QCustomEvent( RestartEventType ) {}        };        static const int PlaylistFoundEventType = 8890;        class PlaylistFoundEvent : public QCustomEvent {            public:                PlaylistFoundEvent( QString path )                    : QCustomEvent( PlaylistFoundEventType )                    , m_path( path ) {}                QString path() { return m_path; }            private:                QString m_path;        };    public:        ScanController( CollectionDB* parent, bool incremental, const QStringList& folders = QStringList() );        ~ScanController();        static ScanController* instance();                virtual void completeJob( void );        bool isIncremental() const { return m_incremental; }        bool hasChanged() const { return m_hasChanged; }        void notifyThisBundle( MetaBundle* bundle );        bool isPaused() { return m_isPaused; }        bool tablesCreated() { return m_tablesCreated; }    signals:        void scannerAcknowledged();        void scanDone( bool changed );    public slots:        bool requestPause();        bool requestUnpause();        void requestAcknowledged();        void slotFileMoved( const QString &src, const QString &dest );    private slots:        void slotReadReady();    private:        void initIncremental();        virtual bool doJob();        static void setInstance( ScanController* instance );        bool startElement( const QString&, const QString &localName, const QString&, const QXmlAttributes &attrs );        void customEvent( QCustomEvent* );        // Member variables:        static const uint MAX_RESTARTS = 80;        static const uint MAX_FAILURE_PERCENTAGE = 5;        KProcIO* m_scanner;        QStringList m_folders;        QStringList m_foldersToRemove;        bool m_incremental;        bool m_hasChanged;        QString m_xmlData;        QMutex m_dataMutex;        QXmlInputSource* m_source;        QXmlSimpleReader* m_reader;        QStringList m_crashedFiles;        // Every file that the collection scanner finds is marked        // here, as well as the source of all files that the AFT code        // detects as having been moved.  These are the files that        // have definitely not been deleted.  The key is the absolute        // path.        QMap<QString,QString> m_filesAdded;        QMap<QString,QString> m_filesDeleted;        QMutex             m_fileMapsMutex;        static ScanController* currController;        MetaBundle* m_waitingBundle;        bool m_lastCommandPaused;        bool m_isPaused;        bool m_tablesCreated;        int m_scanCount;};#endif // AMAROK_SCANCONTROLLER_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?