#ifndef PARSER_H #define PARSER_H /** * @todo write docs */ #include #include #include #include #include #include #include #include #include #include "audiotag.h" #include "audioid.h" class Parser: public QObject { Q_OBJECT public: Parser(const W::Socket* p_socket, W::Dispatcher* p_dp, ResourceCache* p_audio, ResourceCache* p_images); ~Parser(); void parse(const W::String& p_path); signals: void serviceMessage(const QString& msg); void done(const W::String& path); private: enum State { idle, waitingForCollections, parsingDirectory, updatingMusicDataBase, updatingImageDataBase }; const W::Socket* socket; W::Dispatcher* dp; C::Collection songs; C::Collection albums; C::Collection artists; ResourceCache* audio; ResourceCache* images; W::String path; bool songsReady; bool albumsReady; bool artistsReady; State state; std::map foundImages; std::map foundAudios; void checkState(); void parseDirectory(); void updateMusicDataBase(); void updateImageDataBase(); private slots: void onSongsReady(); void onAlbumsReady(); void onArtistsReady(); }; #endif // PARSER_H