file.remove();
}
+void FileStorage::importPlaylist(QString name) {
+ QRegExp forname("^.+\\/([^/]+)\\.[^.]+");
+ QRegExp fordir("(.+)\\/");
+ QString plsnam(name);
+ QString dir(name);
+ if (plsnam.indexOf(forname) == -1) {
+ return;
+ }
+ if (dir.indexOf(fordir) == -1) {
+ return;
+ }
+ dir = fordir.cap(1);
+ plsnam = forname.cap(1);
+ QStringList existed = getPlaylistsNames();
+ if (existed.contains(plsnam)) {
+ return;
+ }
+ QFile plsfile (name);
+ plsfile.open(QFile::ReadOnly);
+ QTextStream stream(&plsfile);
+ QStringList trackfiles;
+ while (!stream.atEnd()) {
+ QString buf = stream.readLine();
+ if (buf.startsWith("#")) {
+ continue;
+ }
+ if (buf.startsWith("/")) {
+ trackfiles.append(buf);
+ } else {
+ trackfiles.append(dir+"/"+buf);
+ }
+ }
+ QList<Track> tracks;
+ TagResolver resover;
+ foreach (QString trackfile, trackfiles) {
+ if (!QFile::exists(trackfile)) {
+ continue;
+ }
+ tracks.append(resover.decodeOne(trackfile));
+ }
+ Playlist playlist;
+ playlist.setName(plsnam);
+ playlist.setTracks(tracks);
+ savePlaylist(playlist);
+}
+
Playlist FileStorage::getCurrentPlaylist() {
return getPlaylist(_CURRENT_PLAYLIST_NAME_);
}
void savePlaylist(Playlist playlist);
void removePlaylist(Playlist playlist);
void removePlaylist(QString name);
+ void importPlaylist(QString name);
Playlist getCurrentPlaylist();
void saveCurrentPlaylist(Playlist playlist);
_playlist_storage->removePlaylist(name);
}
+void Library::importPlaylist(QString name) {
+ _playlist_storage->importPlaylist(name);
+}
+
+void Library::importPlaylists(QStringList files) {
+ foreach (QString name, files) {
+ importPlaylist(name);
+ }
+}
+
+void Library::scanAndImportPlaylists(QString dirpath) {
+ QStringList playlists = _scanner->scanForPlaylists(dirpath);
+ importPlaylists(playlists);
+}
+
Playlist Library::getCurrentPlaylist() {
return _playlist_storage->getCurrentPlaylist();
}
void savePlaylist(const Playlist &playlist);
void removePlaylist(const Playlist &playlist);
void removePlaylist(QString name);
+ void importPlaylist(QString name);
+ void importPlaylists(QStringList files);
+ void scanAndImportPlaylists(QString dirpath);
Playlist getCurrentPlaylist();
void saveCurrentPlaylist(const Playlist &playlist);
connect(_library_form, SIGNAL(refreshPlayer()), this, SLOT(player()));
connect(ui->actionManageLibrary, SIGNAL(triggered()), this, SLOT(_manage_library()));
connect(ui->actionSavePlaylist, SIGNAL(triggered()), this, SLOT(_save_playlist()));
+ connect(ui->actionImport, SIGNAL(triggered()), this, SLOT(_import_playlits()));
connect(_player_form, SIGNAL(clearPlaylist()), this, SLOT(_clear_current_playlist()));
connect(ui->actionSetTimer, SIGNAL(triggered()), this, SLOT(_set_timer()));
connect(ui->actionEqualizer, SIGNAL(triggered()), this, SLOT(_equalizer()));
return true;
}
+
+
+void MainWindow::_import_playlits() {
+ QString directory = QFileDialog::getExistingDirectory (this, tr("Select directory"), "", QFileDialog::ShowDirsOnly );
+ _library->scanAndImportPlaylists(directory);
+}
private slots:
void _manage_library();
void _save_playlist();
+ void _import_playlits();
void _clear_current_playlist();
void _set_timer();
void _timeout();
return _scan_directory(_dir);
}
+QStringList MediaScanner::scanForPlaylists(QString path) {
+ QStringList extensions_backup(REGISTERED_FILE_EXTENSIONS);
+ REGISTERED_FILE_EXTENSIONS.clear();
+ REGISTERED_FILE_EXTENSIONS << "m3u";
+ _dir = path;
+ _foundMedia.clear();
+ QStringList result = _scan_directory(_dir);
+ REGISTERED_FILE_EXTENSIONS.clear();
+ REGISTERED_FILE_EXTENSIONS.append(extensions_backup);
+ return result;
+}
+
QStringList MediaScanner::_scan_directory(QDir dir) {
QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden);
foreach (QFileInfo info, items) {
explicit MediaScanner(QObject *parent = 0);
void run();
QStringList singleScan(QString);
+ QStringList scanForPlaylists(QString);
signals:
void scanFinish(QStringList);
<translation>Lettore</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="66"/>
+ <location filename="../ui/mainwindow.ui" line="67"/>
<source>Help</source>
<translation>Aiuto</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="78"/>
+ <location filename="../ui/mainwindow.ui" line="79"/>
<source>About</source>
<translation>About</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="83"/>
+ <location filename="../ui/mainwindow.ui" line="84"/>
<source>Settings</source>
<translation>Impostazioni</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="88"/>
+ <location filename="../ui/mainwindow.ui" line="89"/>
<source>Manage library</source>
<translation>Gestisci collezione</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="93"/>
+ <location filename="../ui/mainwindow.ui" line="94"/>
<source>Equalizer</source>
<translation>Equalizzatore</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="98"/>
+ <location filename="../ui/mainwindow.ui" line="99"/>
<source>Set timer</source>
<translation>Imposta timer</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="103"/>
+ <location filename="../ui/mainwindow.ui" line="104"/>
<source>Save playlist</source>
<translation>Salva playlist</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="106"/>
+ <location filename="../ui/mainwindow.ui" line="107"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="111"/>
+ <location filename="../ui/mainwindow.ui" line="112"/>
<source>Online help</source>
<translation>Aiuto online</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="224"/>
+ <location filename="../ui/mainwindow.ui" line="117"/>
+ <source>Import playlists</source>
+ <translation>Importa playliste</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="225"/>
<source>Clear playlist?</source>
<translation>Cancellare la playlist?</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="270"/>
+ <location filename="../mainwindow.cpp" line="271"/>
<source>Music off: </source>
<translation>Spegnimento musica:</translation>
</message>
+ <message>
+ <location filename="../mainwindow.cpp" line="484"/>
+ <source>Select directory</source>
+ <translation>Seleziona cartella</translation>
+ </message>
</context>
<context>
<name>ManageLibraryForm</name>
<translation>Плеер</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="66"/>
+ <location filename="../ui/mainwindow.ui" line="67"/>
<source>Help</source>
<translation>Помощь</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="78"/>
+ <location filename="../ui/mainwindow.ui" line="79"/>
<source>About</source>
<translation>О программе</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="83"/>
+ <location filename="../ui/mainwindow.ui" line="84"/>
<source>Settings</source>
<translation>Настройки</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="88"/>
+ <location filename="../ui/mainwindow.ui" line="89"/>
<source>Manage library</source>
<translation>Управление библиотекой</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="93"/>
+ <location filename="../ui/mainwindow.ui" line="94"/>
<source>Equalizer</source>
<translation>Эквалайзер</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="98"/>
+ <location filename="../ui/mainwindow.ui" line="99"/>
<source>Set timer</source>
<translation>Установить таймер</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="103"/>
+ <location filename="../ui/mainwindow.ui" line="104"/>
<source>Save playlist</source>
<translation>Сохранить плейлист</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="106"/>
+ <location filename="../ui/mainwindow.ui" line="107"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
- <location filename="../ui/mainwindow.ui" line="111"/>
+ <location filename="../ui/mainwindow.ui" line="112"/>
<source>Online help</source>
<translation>Онлайн справка</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="224"/>
+ <location filename="../ui/mainwindow.ui" line="117"/>
+ <source>Import playlists</source>
+ <translation>Импорт плейлистов</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="225"/>
<source>Clear playlist?</source>
<translation>Очистить плейлист?</translation>
</message>
<message>
- <location filename="../mainwindow.cpp" line="270"/>
+ <location filename="../mainwindow.cpp" line="271"/>
<source>Music off: </source>
<translation>Отключение: </translation>
</message>
+ <message>
+ <location filename="../mainwindow.cpp" line="484"/>
+ <source>Select directory</source>
+ <translation>Выбрать директорию</translation>
+ </message>
</context>
<context>
<name>ManageLibraryForm</name>
<source>Online help</source>
<translation>在线帮助</translation>
</message>
+ <message>
+ <source>Import playlists</source>
+ <translation>导入播放列表</translation>
+ </message>
+ <message>
+ <source>Select directory</source>
+ <translation>选择目录</translation>
+ </message>
</context>
<context>
<name>ManageLibraryForm</name>
<source>Settings</source>
<translation>設定</translation>
</message>
+ <message>
+ <source>Import playlists</source>
+ <translation>導入播放列表</translation>
+ </message>
+ <message>
+ <source>Select directory</source>
+ <translation>選擇目錄</translation>
+ </message>
</context>
<context>
<name>ManageLibraryForm</name>
<string>Player</string>
</property>
<addaction name="actionSavePlaylist"/>
+ <addaction name="actionImport"/>
</widget>
<widget class="QMenu" name="menuHelp_2">
<property name="title">
<string>Online help</string>
</property>
</action>
+ <action name="actionImport">
+ <property name="text">
+ <string>Import playlists</string>
+ </property>
+ </action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>