/* This file is part of Clementine. Clementine 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 3 of the License, or (at your option) any later version. Clementine 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 Clementine. If not, see . */ #ifndef M3UPARSER_H #define M3UPARSER_H #include #include #include #include "gtest/gtest_prod.h" #include "song.h" class QIODevice; class M3UParser : public QObject { Q_OBJECT public: M3UParser(QIODevice* device, const QDir& directory = QDir(), QObject* parent = 0); virtual ~M3UParser() {} // Reference valid as long as the M3UParser instance lives. const SongList& Parse(); struct Metadata { Metadata() : length(-1) {} QString artist; QString title; int length; }; private: enum M3UType { STANDARD = 0, EXTENDED, // Includes extended info (track, artist, etc.) LINK, // Points to a directory. }; bool ParseMetadata(const QString& line, Metadata* metadata) const; bool ParseTrackLocation(const QString& line, Song* song) const; FRIEND_TEST(M3UParserTest, ParsesMetadata); FRIEND_TEST(M3UParserTest, ParsesTrackLocation); FRIEND_TEST(M3UParserTest, ParsesTrackLocationRelative); FRIEND_TEST(M3UParserTest, ParsesTrackLocationHttp); #ifdef Q_OS_WIN32 FRIEND_TEST(M3UParserTest, ParsesTrackLocationAbsoluteWindows); #endif // Q_OS_WIN32 QIODevice* device_; M3UType type_; QDir directory_; Metadata current_metadata_; SongList songs_; }; #endif // M3UPARSER_H