From bbd48adebaf9c39572df96f1f35e795d9d9e1abd Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Thu, 24 Mar 2011 23:36:26 +0600 Subject: [PATCH] M3U playlists import --- src/filestorage.cpp | 46 +++++++++++++++++++++++++++++++++++++ src/filestorage.h | 1 + src/library.cpp | 15 ++++++++++++ src/library.h | 3 +++ src/mainwindow.cpp | 7 ++++++ src/mainwindow.h | 1 + src/mediascanner.cpp | 12 ++++++++++ src/mediascanner.h | 1 + src/resources/someplayer_it.ts | 32 +++++++++++++++++--------- src/resources/someplayer_ru.ts | 32 +++++++++++++++++--------- src/resources/someplayer_zh_CN.ts | 8 +++++++ src/resources/someplayer_zh_TW.ts | 8 +++++++ src/ui/mainwindow.ui | 6 +++++ 13 files changed, 150 insertions(+), 22 deletions(-) diff --git a/src/filestorage.cpp b/src/filestorage.cpp index 1938143..076530a 100644 --- a/src/filestorage.cpp +++ b/src/filestorage.cpp @@ -213,6 +213,52 @@ void FileStorage::removePlaylist(QString name) { 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 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_); } diff --git a/src/filestorage.h b/src/filestorage.h index f6dad99..1bdbc09 100644 --- a/src/filestorage.h +++ b/src/filestorage.h @@ -56,6 +56,7 @@ namespace SomePlayer { void savePlaylist(Playlist playlist); void removePlaylist(Playlist playlist); void removePlaylist(QString name); + void importPlaylist(QString name); Playlist getCurrentPlaylist(); void saveCurrentPlaylist(Playlist playlist); diff --git a/src/library.cpp b/src/library.cpp index 576440f..4c0047e 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -137,6 +137,21 @@ void Library::removePlaylist(QString name) { _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(); } diff --git a/src/library.h b/src/library.h index 1803c02..608d627 100644 --- a/src/library.h +++ b/src/library.h @@ -73,6 +73,9 @@ namespace SomePlayer { 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); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b888452..5c5d787 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -66,6 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : 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())); @@ -477,3 +478,9 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) { return true; } + + +void MainWindow::_import_playlits() { + QString directory = QFileDialog::getExistingDirectory (this, tr("Select directory"), "", QFileDialog::ShowDirsOnly ); + _library->scanAndImportPlaylists(directory); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 8f49a71..54a396d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -72,6 +72,7 @@ public slots: private slots: void _manage_library(); void _save_playlist(); + void _import_playlits(); void _clear_current_playlist(); void _set_timer(); void _timeout(); diff --git a/src/mediascanner.cpp b/src/mediascanner.cpp index 7270745..3d1017f 100644 --- a/src/mediascanner.cpp +++ b/src/mediascanner.cpp @@ -45,6 +45,18 @@ QStringList MediaScanner::singleScan(QString path) { 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) { diff --git a/src/mediascanner.h b/src/mediascanner.h index 151bf3d..d5c8a97 100644 --- a/src/mediascanner.h +++ b/src/mediascanner.h @@ -37,6 +37,7 @@ namespace SomePlayer { explicit MediaScanner(QObject *parent = 0); void run(); QStringList singleScan(QString); + QStringList scanForPlaylists(QString); signals: void scanFinish(QStringList); diff --git a/src/resources/someplayer_it.ts b/src/resources/someplayer_it.ts index eed354b..13aa2eb 100644 --- a/src/resources/someplayer_it.ts +++ b/src/resources/someplayer_it.ts @@ -412,60 +412,70 @@ MrClon (maemoworld.ru)<br />hxka (maemoworld.ru)<br />jerich0 (maemo Lettore - + Help Aiuto - + About About - + Settings Impostazioni - + Manage library Gestisci collezione - + Equalizer Equalizzatore - + Set timer Imposta timer - + Save playlist Salva playlist - + Ctrl+S Ctrl+S - + Online help Aiuto online - + + Import playlists + Importa playliste + + + Clear playlist? Cancellare la playlist? - + Music off: Spegnimento musica: + + + Select directory + Seleziona cartella + ManageLibraryForm diff --git a/src/resources/someplayer_ru.ts b/src/resources/someplayer_ru.ts index 026e2a4..f4a04ef 100644 --- a/src/resources/someplayer_ru.ts +++ b/src/resources/someplayer_ru.ts @@ -412,60 +412,70 @@ MrClon (maemoworld.ru)<br />hxka (maemoworld.ru)<br />jerich0 (maemo Плеер - + Help Помощь - + About О программе - + Settings Настройки - + Manage library Управление библиотекой - + Equalizer Эквалайзер - + Set timer Установить таймер - + Save playlist Сохранить плейлист - + Ctrl+S Ctrl+S - + Online help Онлайн справка - + + Import playlists + Импорт плейлистов + + + Clear playlist? Очистить плейлист? - + Music off: Отключение: + + + Select directory + Выбрать директорию + ManageLibraryForm diff --git a/src/resources/someplayer_zh_CN.ts b/src/resources/someplayer_zh_CN.ts index 6d2b949..9b883b5 100644 --- a/src/resources/someplayer_zh_CN.ts +++ b/src/resources/someplayer_zh_CN.ts @@ -375,6 +375,14 @@ MrClon (maemoworld.ru)<br />hxka (maemoworld.ru)<br />jerich0 (maemo Online help 在线帮助 + + Import playlists + 导入播放列表 + + + Select directory + 选择目录 + ManageLibraryForm diff --git a/src/resources/someplayer_zh_TW.ts b/src/resources/someplayer_zh_TW.ts index 38f5338..8c57a38 100644 --- a/src/resources/someplayer_zh_TW.ts +++ b/src/resources/someplayer_zh_TW.ts @@ -375,6 +375,14 @@ By Nikolay Tischenko (somebody)</p><p align="center"><b Settings 設定 + + Import playlists + 導入播放列表 + + + Select directory + 選擇目錄 + ManageLibraryForm diff --git a/src/ui/mainwindow.ui b/src/ui/mainwindow.ui index a672aa9..c3256b8 100644 --- a/src/ui/mainwindow.ui +++ b/src/ui/mainwindow.ui @@ -60,6 +60,7 @@ Player + @@ -111,6 +112,11 @@ Online help + + + Import playlists + + -- 1.7.9.5