Adding files from filesystem to current playlist
authorNikolay Tischenko <niktischenko@gmail.com>
Wed, 22 Sep 2010 15:30:04 +0000 (22:30 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Wed, 22 Sep 2010 15:30:04 +0000 (22:30 +0700)
src/mainwindow.cpp
src/mainwindow.h
src/playerform.cpp
src/playerform.h
src/tagresolver.cpp
src/track.cpp

index 0570563..a7d59d0 100644 (file)
@@ -50,11 +50,13 @@ MainWindow::MainWindow(QWidget *parent) :
        QAction *add_directory = ui->menuLibrary->addAction("Add directory");
        QAction *save_playlist = ui->menuLibrary->addAction("Save playlist");
        QAction *clear_playlist = ui->menuLibrary->addAction("Clear current playlist");
        QAction *add_directory = ui->menuLibrary->addAction("Add directory");
        QAction *save_playlist = ui->menuLibrary->addAction("Save playlist");
        QAction *clear_playlist = ui->menuLibrary->addAction("Clear current playlist");
+       QAction *add_files = ui->menuLibrary->addAction("Add file to current playlist");
        connect(_player_form, SIGNAL(library()), this, SLOT(library()));
        connect(_library_form, SIGNAL(player()), this, SLOT(player()));
        connect(add_directory, SIGNAL(triggered()), this, SLOT(_add_directory()));
        connect(save_playlist, SIGNAL(triggered()), this, SLOT(_save_playlist()));
        connect(clear_playlist, SIGNAL(triggered()), this, SLOT(_clear_current_playlist()));
        connect(_player_form, SIGNAL(library()), this, SLOT(library()));
        connect(_library_form, SIGNAL(player()), this, SLOT(player()));
        connect(add_directory, SIGNAL(triggered()), this, SLOT(_add_directory()));
        connect(save_playlist, SIGNAL(triggered()), this, SLOT(_save_playlist()));
        connect(clear_playlist, SIGNAL(triggered()), this, SLOT(_clear_current_playlist()));
+       connect(add_files, SIGNAL(triggered()), this, SLOT(_add_files()));
        connect(_library, SIGNAL(done()), this, SLOT(library()));
        connect(_library_form, SIGNAL(done()), this, SLOT(library()));
        connect(_library_form, SIGNAL(busy(QString)), this, SLOT(showBusyWidget(QString)));
        connect(_library, SIGNAL(done()), this, SLOT(library()));
        connect(_library_form, SIGNAL(done()), this, SLOT(library()));
        connect(_library_form, SIGNAL(busy(QString)), this, SLOT(showBusyWidget(QString)));
@@ -197,3 +199,8 @@ void MainWindow::_toggle_full_screen() {
                showFullScreen();
        }
 }
                showFullScreen();
        }
 }
+
+void MainWindow::_add_files() {
+       QStringList files = QFileDialog::getOpenFileNames(this, "Add file");
+       if (!files.isEmpty()) _player_form->addFiles(files);
+}
index 4bce733..e2036e4 100644 (file)
@@ -56,6 +56,7 @@ private slots:
        void _add_directory();
        void _save_playlist();
        void _clear_current_playlist();
        void _add_directory();
        void _save_playlist();
        void _clear_current_playlist();
+       void _add_files();
        void _toggle_search_line();
        void _search(QString);
        void _nextItem();
        void _toggle_search_line();
        void _search(QString);
        void _nextItem();
index 6c85347..c00332c 100644 (file)
@@ -74,6 +74,8 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) :
        _track_renderer = new TrackRenderer(this);
        ui->playlistView->setItemDelegateForColumn(0, _track_renderer);
 
        _track_renderer = new TrackRenderer(this);
        ui->playlistView->setItemDelegateForColumn(0, _track_renderer);
 
+       _tag_resolver = new TagResolver(this);
+
        connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library()));
        connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view()));
        connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex)));
        connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library()));
        connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view()));
        connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex)));
@@ -92,6 +94,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) :
        connect(add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites()));
        connect(_player, SIGNAL(stateChanged(PlayerState)), this, SLOT(_state_changed(PlayerState)));
        connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track)));
        connect(add_to_favorites, SIGNAL(triggered()), this, SLOT(_add_to_favorites()));
        connect(_player, SIGNAL(stateChanged(PlayerState)), this, SLOT(_state_changed(PlayerState)));
        connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track)));
+       connect(_tag_resolver, SIGNAL(decoded(Track)), this, SLOT(_track_decoded(Track)));
 }
 
 PlayerForm::~PlayerForm()
 }
 
 PlayerForm::~PlayerForm()
@@ -272,3 +275,14 @@ void PlayerForm::cancelSearch() {
        ui->playlistView->hide();
        ui->playlistView->show();
 }
        ui->playlistView->hide();
        ui->playlistView->show();
 }
+
+void PlayerForm::addFiles(QList<QString> files) {
+       _tag_resolver->decode(files);
+}
+
+void PlayerForm::_track_decoded(Track track) {
+       _current_playlist.addTrack(track);
+       __fill_list(_model, _current_playlist);
+       _lib->saveCurrentPlaylist(_current_playlist);
+       _player->setPlaylist(_current_playlist);
+}
index 0267e0b..d03878a 100644 (file)
@@ -29,6 +29,7 @@
 #include <QMenu>
 #include <QTime>
 #include "trackrenderer.h"
 #include <QMenu>
 #include <QTime>
 #include "trackrenderer.h"
+#include "tagresolver.h"
 
 namespace Ui {
     class PlayerForm;
 
 namespace Ui {
     class PlayerForm;
@@ -39,6 +40,7 @@ using SomePlayer::DataObjects::Playlist;
 using SomePlayer::DataObjects::Track;
 using SomePlayer::Playback::Player;
 using SomePlayer::Playback::PlayerState;
 using SomePlayer::DataObjects::Track;
 using SomePlayer::Playback::Player;
 using SomePlayer::Playback::PlayerState;
+using SomePlayer::DataObjects::TagResolver;
 
 class PlayerForm : public QWidget
 {
 
 class PlayerForm : public QWidget
 {
@@ -58,6 +60,7 @@ public slots:
        void nextItem();
        void prevItem();
        void cancelSearch();
        void nextItem();
        void prevItem();
        void cancelSearch();
+       void addFiles(QList<QString> files);
 
 private slots:
        void _library();
 
 private slots:
        void _library();
@@ -73,6 +76,7 @@ private slots:
        void _state_changed(PlayerState);
        void _toggle_repeat();
        void _toggle_random();
        void _state_changed(PlayerState);
        void _toggle_repeat();
        void _toggle_random();
+       void _track_decoded(Track);
 
 private:
     Ui::PlayerForm *ui;
 
 private:
     Ui::PlayerForm *ui;
@@ -86,6 +90,7 @@ private:
        QString _search_pattern;
 
        TrackRenderer *_track_renderer;
        QString _search_pattern;
 
        TrackRenderer *_track_renderer;
+       TagResolver *_tag_resolver;
        void _display_track(Track);
        int _search_current_id;
 };
        void _display_track(Track);
        int _search_current_id;
 };
index b100a2f..85634d7 100644 (file)
@@ -48,6 +48,7 @@ void TagResolver::metaStateChanged(Phonon::State newState, Phonon::State /*oldSt
                Track track(0, metadata, source.fileName());
                int index = _sources.indexOf(source)+1;
                emit decoded(track);
                Track track(0, metadata, source.fileName());
                int index = _sources.indexOf(source)+1;
                emit decoded(track);
+               _metaObject->stop();
                if (index != _sources.size()) {
                        Phonon::MediaSource newSource = _sources.at(index);
                        _metaObject->clear();
                if (index != _sources.size()) {
                        Phonon::MediaSource newSource = _sources.at(index);
                        _metaObject->clear();
index 5572dfd..363e9a4 100644 (file)
@@ -46,7 +46,7 @@ Track::Track(QString source) :QObject() {
        foo << source;
        _resolver->decode(foo);
        _count = 0;
        foo << source;
        _resolver->decode(foo);
        _count = 0;
-       _id = 0;
+       _id = -1;
 }
 
 TrackMetadata Track::metadata() const {
 }
 
 TrackMetadata Track::metadata() const {