Magnatune context menu

This commit is contained in:
David Sansome 2010-05-09 18:36:10 +00:00
parent 8b76cfa19d
commit 8d3353520a
30 changed files with 203 additions and 26 deletions

View File

@ -27,6 +27,8 @@
#include <QXmlStreamReader>
#include <QtIOCompressor>
#include <QSortFilterProxyModel>
#include <QMenu>
#include <QDesktopServices>
#include <QtDebug>
@ -34,10 +36,12 @@ const char* MagnatuneService::kServiceName = "Magnatune";
const char* MagnatuneService::kDatabaseUrl =
"http://magnatune.com/info/song_info2_xml.gz";
const char* MagnatuneService::kSongsTable = "magnatune_songs";
const char* MagnatuneService::kHomepage = "http://magnatune.com";
MagnatuneService::MagnatuneService(RadioModel* parent)
: RadioService(kServiceName, parent),
root_(NULL),
context_menu_(new QMenu),
library_backend_(new LibraryBackend(parent->db(), kSongsTable,
QString::null, QString::null, this)),
library_model_(new LibraryModel(library_backend_, this)),
@ -53,9 +57,19 @@ MagnatuneService::MagnatuneService(RadioModel* parent)
library_sort_model_->setDynamicSortFilter(true);
library_sort_model_->sort(0);
add_to_playlist_ = context_menu_->addAction(
QIcon(":media-playback-start.png"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
context_menu_->addSeparator();
context_menu_->addAction(QIcon(":web.png"), tr("Open magnatune.com in browser"), this, SLOT(Homepage()));
context_menu_->addAction(QIcon(":refresh.png"), tr("Refresh catalogue"), this, SLOT(ReloadDatabase()));
library_model_->Init();
}
MagnatuneService::~MagnatuneService() {
delete context_menu_;
}
RadioItem* MagnatuneService::CreateRootItem(RadioItem *parent) {
root_ = new RadioItem(this, RadioItem::Type_Service, kServiceName, parent);
root_->icon = QIcon(":magnatune.png");
@ -154,7 +168,22 @@ Song MagnatuneService::ReadTrack(QXmlStreamReader& reader) {
return song;
}
void MagnatuneService::ShowContextMenu(RadioItem* item, const QModelIndex& index,
void MagnatuneService::ShowContextMenu(RadioItem*, const QModelIndex& index,
const QPoint& global_pos) {
if (index.model() == library_sort_model_)
context_item_ = index;
else
context_item_ = QModelIndex();
add_to_playlist_->setEnabled(context_item_.isValid());
context_menu_->popup(global_pos);
}
void MagnatuneService::AddToPlaylist() {
emit AddItemsToPlaylist(library_model_->GetChildSongs(
library_sort_model_->mapToSource(context_item_)));
}
void MagnatuneService::Homepage() {
QDesktopServices::openUrl(QUrl(kHomepage));
}

View File

@ -32,10 +32,12 @@ class MagnatuneService : public RadioService {
public:
MagnatuneService(RadioModel* parent);
~MagnatuneService();
static const char* kServiceName;
static const char* kDatabaseUrl;
static const char* kSongsTable;
static const char* kHomepage;
RadioItem* CreateRootItem(RadioItem* parent);
void LazyPopulate(RadioItem* item);
@ -50,11 +52,19 @@ class MagnatuneService : public RadioService {
void ReloadDatabase();
void ReloadDatabaseFinished();
void AddToPlaylist();
void Homepage();
private:
Song ReadTrack(QXmlStreamReader& reader);
private:
RadioItem* root_;
QMenu* context_menu_;
QModelIndex context_item_;
QAction* add_to_playlist_;
LibraryBackend* library_backend_;
LibraryModel* library_model_;
QSortFilterProxyModel* library_sort_model_;

View File

@ -347,6 +347,7 @@ MainWindow::MainWindow(QNetworkAccessManager* network, Engine::Type engine, QWid
connect(radio_model_, SIGNAL(StreamReady(QUrl,QUrl)), player_, SLOT(StreamReady(QUrl,QUrl)));
connect(radio_model_, SIGNAL(StreamMetadataFound(QUrl,Song)), playlist_, SLOT(SetStreamMetadata(QUrl,Song)));
connect(radio_model_, SIGNAL(AddItemToPlaylist(RadioItem*)), SLOT(InsertRadioItem(RadioItem*)));
connect(radio_model_, SIGNAL(AddItemsToPlaylist(SongList)), SLOT(InsertRadioItems(SongList)));
connect(radio_model_->GetLastFMService(), SIGNAL(ScrobblingEnabledChanged(bool)), SLOT(ScrobblingEnabledChanged(bool)));
connect(radio_model_->GetLastFMService(), SIGNAL(ButtonVisibilityChanged(bool)), SLOT(LastFMButtonVisibilityChanged(bool)));
connect(ui_.radio_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(RadioDoubleClick(QModelIndex)));
@ -705,6 +706,13 @@ void MainWindow::InsertRadioItem(RadioItem* item) {
player_->PlayAt(first_song.row(), Engine::First, true);
}
void MainWindow::InsertRadioItems(const SongList& items) {
QModelIndex first_song = playlist_->InsertSongs(items);
if (first_song.isValid() && player_->GetState() != Engine::Playing)
player_->PlayAt(first_song.row(), Engine::First, true);
}
void MainWindow::PlaylistRightClick(const QPoint& global_pos, const QModelIndex& index) {
playlist_menu_index_ = index;

View File

@ -119,6 +119,7 @@ class MainWindow : public QMainWindow {
void RadioDoubleClick(const QModelIndex& index);
void InsertRadioItem(RadioItem*);
void InsertRadioItems(const SongList& songs);
void ScrobblingEnabledChanged(bool value);
void LastFMButtonVisibilityChanged(bool value);
void Love();

View File

@ -307,5 +307,5 @@ QModelIndex MergedProxyModel::FindSourceParent(const QModelIndex& proxy_index) c
QModelIndex source_index = mapToSource(proxy_index);
if (source_index.model() == sourceModel())
return source_index;
return merge_points_.value(proxy_index.model());
return merge_points_.value(source_index.model());
}

View File

@ -63,7 +63,7 @@ QString MultiLoadingIndicator::TaskTypeToString(TaskType type) {
case GettingChannels: return tr("Getting channels");
case LoadingStream: return tr("Loading stream");
case LoadingLastFM: return tr("Loading Last.fm radio");
case LoadingMagnatune: return tr("Downloading Magnatune database");
case LoadingMagnatune: return tr("Downloading Magnatune catalogue");
default: return QString::null;
}

View File

@ -55,6 +55,7 @@ void RadioModel::AddService(RadioService *service) {
connect(service, SIGNAL(StreamError(QString)), SIGNAL(StreamError(QString)));
connect(service, SIGNAL(StreamMetadataFound(QUrl,Song)), SIGNAL(StreamMetadataFound(QUrl,Song)));
connect(service, SIGNAL(AddItemToPlaylist(RadioItem*)), SIGNAL(AddItemToPlaylist(RadioItem*)));
connect(service, SIGNAL(AddItemsToPlaylist(SongList)), SIGNAL(AddItemsToPlaylist(SongList)));
}
RadioService* RadioModel::ServiceByName(const QString& name) {

View File

@ -20,10 +20,10 @@
#include "radioitem.h"
#include "simpletreemodel.h"
#include "multiloadingindicator.h"
#include "song.h"
class RadioService;
class LastFMService;
class Song;
class MergedProxyModel;
class Database;
@ -67,6 +67,7 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
void StreamMetadataFound(const QUrl& original_url, const Song& song);
void AddItemToPlaylist(RadioItem* item);
void AddItemsToPlaylist(const SongList& items);
protected:
void LazyPopulate(RadioItem* parent);

View File

@ -23,8 +23,8 @@
#include "radioitem.h"
#include "multiloadingindicator.h"
#include "song.h"
class Song;
class RadioModel;
class RadioService : public QObject {
@ -68,6 +68,7 @@ class RadioService : public QObject {
void StreamMetadataFound(const QUrl& original_url, const Song& song);
void AddItemToPlaylist(RadioItem* item);
void AddItemsToPlaylist(const SongList& items);
private:
RadioModel* model_;

View File

@ -329,7 +329,7 @@ msgstr "Načítám kanál"
msgid "Loading Last.fm radio"
msgstr "Načítám rádio Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Různí umělci"

View File

@ -329,7 +329,7 @@ msgstr "Indlæser stream"
msgid "Loading Last.fm radio"
msgstr "Indlæser Last.fm-radio"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -626,6 +626,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Diverse kunstnere"

View File

@ -328,7 +328,7 @@ msgstr "Lade Stream"
msgid "Loading Last.fm radio"
msgstr "Last.fm Radio wird geladen"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -622,6 +622,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Verschiedene Interpreten"

View File

@ -330,7 +330,7 @@ msgstr "Φόρτωμα ροής (stream)"
msgid "Loading Last.fm radio"
msgstr "Φόρτωμα Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -624,6 +624,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Διάφοροι καλλιτέχνες"

View File

@ -328,7 +328,7 @@ msgstr "Loading stream"
msgid "Loading Last.fm radio"
msgstr "Loading Last.fm radio"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -622,6 +622,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Various Artists"

View File

@ -329,7 +329,7 @@ msgstr "Cargando flujo"
msgid "Loading Last.fm radio"
msgstr "Cargando radio de Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -624,6 +624,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Varios Artistas"

View File

@ -328,7 +328,7 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -621,6 +621,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Useita artisteja"

View File

@ -331,7 +331,7 @@ msgstr "Chargement du flux"
msgid "Loading Last.fm radio"
msgstr "Chargement de la radio Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -625,6 +625,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Compilations d'artistes"

View File

@ -329,7 +329,7 @@ msgstr "A carregar a stream"
msgid "Loading Last.fm radio"
msgstr "Carregando a rádio da Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Vários Artistas"

View File

@ -329,7 +329,7 @@ msgstr "Caricamento flusso"
msgid "Loading Last.fm radio"
msgstr "Caricamento radio Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -624,6 +624,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr "Aggiungi file da convertire"
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Artisti vari"

View File

@ -328,7 +328,7 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr ""

View File

@ -328,7 +328,7 @@ msgstr "Lader lydstrøm"
msgid "Loading Last.fm radio"
msgstr "Laster inn Last.fm radio"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Diverse artister"

View File

@ -329,7 +329,7 @@ msgstr "Ładowanie strumienia"
msgid "Loading Last.fm radio"
msgstr "Ładowanie radia Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Różni wykonawcy"

View File

@ -330,7 +330,7 @@ msgstr "A carregar a stream"
msgid "Loading Last.fm radio"
msgstr "Carregando a rádio da Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -624,6 +624,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Vários Artistas"

View File

@ -328,7 +328,7 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -621,6 +621,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Vários artistas"

View File

@ -328,7 +328,7 @@ msgstr "Se încarcă fluxul"
msgid "Loading Last.fm radio"
msgstr "Se încarcă radio Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -622,6 +622,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Diferiți artiști"

View File

@ -327,7 +327,7 @@ msgstr "Загрузка потока"
msgid "Loading Last.fm radio"
msgstr "Загрузка радио Last.fm"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -622,6 +622,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr "Добавить файлы для перекодирования"
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Разные исполнители"

View File

@ -329,7 +329,7 @@ msgstr "Načítava sa stream"
msgid "Loading Last.fm radio"
msgstr "Načítava sa Last.fm rádio"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -623,6 +623,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Rôzni interpréti"

View File

@ -328,7 +328,7 @@ msgstr "Laddar ström"
msgid "Loading Last.fm radio"
msgstr "Laddar Last.fm radio"
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -622,6 +622,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr "Diverse artister"

View File

@ -328,7 +328,7 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -621,6 +621,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr ""

View File

@ -319,7 +319,7 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Downloading Magnatune database"
msgid "Downloading Magnatune catalogue"
msgstr ""
msgid "Open somafm.com in browser"
@ -612,6 +612,12 @@ msgstr ""
msgid "Add files to transcode"
msgstr ""
msgid "Open magnatune.com in browser"
msgstr ""
msgid "Refresh catalogue"
msgstr ""
msgid "Various Artists"
msgstr ""