diff --git a/src/tomahawk/CMakeLists.txt b/src/tomahawk/CMakeLists.txt index 8c28fe596..66d170f0f 100644 --- a/src/tomahawk/CMakeLists.txt +++ b/src/tomahawk/CMakeLists.txt @@ -34,7 +34,7 @@ ENDIF( LIBLASTFM_FOUND ) SET( tomahawkSourcesGui ${tomahawkSourcesGui} dialogs/DiagnosticsDialog.cpp - dialogs/LoadXSPFDialog.cpp + dialogs/LoadPlaylistDialog.cpp dialogs/SettingsDialog.cpp sourcetree/SourcesModel.cpp @@ -74,7 +74,7 @@ SET( tomahawkSourcesGui ${tomahawkSourcesGui} SET( tomahawkUI ${tomahawkUI} dialogs/DiagnosticsDialog.ui dialogs/HostDialog.ui - dialogs/LoadXSPFDialog.ui + dialogs/LoadPlaylistDialog.ui dialogs/ProxyDialog.ui dialogs/Settings_Accounts.ui dialogs/Settings_Advanced.ui diff --git a/src/tomahawk/TomahawkWindow.cpp b/src/tomahawk/TomahawkWindow.cpp index 593b66c63..14465f179 100644 --- a/src/tomahawk/TomahawkWindow.cpp +++ b/src/tomahawk/TomahawkWindow.cpp @@ -48,6 +48,7 @@ #include "utils/ProxyStyle.h" #include "utils/WidgetDragFilter.h" #include "utils/NetworkAccessManager.h" +#include "utils/M3uLoader.h" #include "widgets/AccountsToolButton.h" #include "widgets/AnimatedSplitter.h" #include "widgets/ContainedMenuButton.h" @@ -79,7 +80,7 @@ #include "SourceList.h" #include "TomahawkTrayIcon.h" #include "TomahawkApp.h" -#include "dialogs/LoadXSPFDialog.h" +#include "dialogs/LoadPlaylistDialog.h" #include "utils/ImageRegistry.h" #include "utils/Logger.h" @@ -1166,46 +1167,54 @@ TomahawkWindow::fullScreenExited() void -TomahawkWindow::loadSpiff() +TomahawkWindow::loadPlaylist() { - LoadXSPFDialog* diag = new LoadXSPFDialog( this, Qt::Sheet ); + LoadPlaylistDialog* diag = new LoadPlaylistDialog( this, Qt::Sheet ); #ifdef Q_OS_MAC - connect( diag, SIGNAL( finished( int ) ), this, SLOT( loadXspfFinished( int ) ) ); + connect( diag, SIGNAL( finished( int ) ), this, SLOT( loadPlaylistFinished( int ) ) ); diag->show(); #else - QPointer< LoadXSPFDialog > safe( diag ); + QPointer< LoadPlaylistDialog > safe( diag ); int ret = diag->exec(); if ( !safe.isNull() && ret == QDialog::Accepted ) { - QUrl url = QUrl::fromUserInput( safe.data()->xspfUrl() ); - bool autoUpdate = safe.data()->autoUpdate(); - - XSPFLoader* loader = new XSPFLoader( true, autoUpdate ); - connect( loader, SIGNAL( error( XSPFLoader::XSPFErrorCode ) ), SLOT( onXSPFError( XSPFLoader::XSPFErrorCode ) ) ); - connect( loader, SIGNAL( ok( Tomahawk::playlist_ptr ) ), SLOT( onXSPFOk( Tomahawk::playlist_ptr ) ) ); - loader->load( url ); + importPlaylist( safe->url(), safe->autoUpdate() ); } #endif } void -TomahawkWindow::loadXspfFinished( int ret ) +TomahawkWindow::loadPlaylistFinished( int ret ) { - LoadXSPFDialog* d = qobject_cast< LoadXSPFDialog* >( sender() ); + LoadPlaylistDialog* d = qobject_cast< LoadPlaylistDialog* >( sender() ); Q_ASSERT( d ); if ( ret == QDialog::Accepted ) { - QUrl url = QUrl::fromUserInput( d->xspfUrl() ); - bool autoUpdate = d->autoUpdate(); + importPlaylist( d->url(), d->autoUpdate() ); + } + d->deleteLater(); +} + +void +TomahawkWindow::importPlaylist( const QString& url, bool autoUpdate ) +{ + const QUrl u = QUrl::fromUserInput( url ); + + if ( u.toString().toLower().endsWith( ".m3u" ) ) + { + M3uLoader* loader = new M3uLoader( u.toString(), true ); + loader->parse(); + } + else + { XSPFLoader* loader = new XSPFLoader( true, autoUpdate ); connect( loader, SIGNAL( error( XSPFLoader::XSPFErrorCode ) ), SLOT( onXSPFError( XSPFLoader::XSPFErrorCode ) ) ); connect( loader, SIGNAL( ok( Tomahawk::playlist_ptr ) ), SLOT( onXSPFOk( Tomahawk::playlist_ptr ) ) ); - loader->load( url ); + loader->load( u ); } - d->deleteLater(); } diff --git a/src/tomahawk/TomahawkWindow.h b/src/tomahawk/TomahawkWindow.h index 4ff770b04..95625f955 100644 --- a/src/tomahawk/TomahawkWindow.h +++ b/src/tomahawk/TomahawkWindow.h @@ -99,7 +99,7 @@ protected: public slots: void createStation(); void createPlaylist(); - void loadSpiff(); + void loadPlaylist(); void showSettingsDialog(); void showDiagnosticsDialog(); void legalInfo(); @@ -137,7 +137,7 @@ private slots: void onSearch( const QString& search ); void onFilterEdited(); - void loadXspfFinished( int ); + void loadPlaylistFinished( int ); void minimize(); void maximize(); @@ -166,6 +166,8 @@ private: void setupShortcuts(); void setupUpdateCheck(); + void importPlaylist( const QString& url, bool autoUpdate ); + #ifdef Q_OS_WIN bool setupWindowsButtons(); #if QT_VERSION < QT_VERSION_CHECK( 5, 2, 0 ) diff --git a/src/tomahawk/dialogs/LoadPlaylistDialog.cpp b/src/tomahawk/dialogs/LoadPlaylistDialog.cpp index dcac669db..e3de21d7c 100644 --- a/src/tomahawk/dialogs/LoadPlaylistDialog.cpp +++ b/src/tomahawk/dialogs/LoadPlaylistDialog.cpp @@ -1,6 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2011, Leo Franchi + * Copyright 2014, Christian Muehlhaeuser * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,53 +17,70 @@ * along with Tomahawk. If not, see . */ -#include "LoadXSPFDialog.h" -#include "ui_LoadXSPFDialog.h" +#include "LoadPlaylistDialog.h" +#include "ui_LoadPlaylistDialog.h" #include "TomahawkSettings.h" #include "Source.h" #include -LoadXSPFDialog::LoadXSPFDialog( QWidget* parent, Qt::WindowFlags f ) +LoadPlaylistDialog::LoadPlaylistDialog( QWidget* parent, Qt::WindowFlags f ) : QDialog( parent, f ) - , m_ui( new Ui_LoadXSPF ) + , m_ui( new Ui_LoadPlaylist ) { m_ui->setupUi( this ); #ifdef Q_WS_MAC m_ui->horizontalLayout->setContentsMargins( 0, 0, 0, 0 ); m_ui->horizontalLayout->setSpacing( 5 ); - m_ui->verticalLayout->setContentsMargins( 0, 10, 0, 0 ); - m_ui->verticalLayout->setSpacing( 0 ); #endif + setMinimumSize( sizeHint() ); + m_ui->autoUpdate->setEnabled( false ); + connect( m_ui->navigateButton, SIGNAL( clicked( bool ) ), this, SLOT( getLocalFile() ) ); + connect( m_ui->lineEdit, SIGNAL( textChanged( QString ) ), this, SLOT( onUrlChanged() ) ); } -LoadXSPFDialog::~LoadXSPFDialog() + +LoadPlaylistDialog::~LoadPlaylistDialog() { } + void -LoadXSPFDialog::getLocalFile() +LoadPlaylistDialog::getLocalFile() { - const QString path = TomahawkSettings::instance()->importXspfPath(); - QString url = QFileDialog::getOpenFileName( this, tr( "Load XSPF File" ), path, tr( "XSPF Files (*.xspf)" ) ); + const QString path = TomahawkSettings::instance()->importPlaylistPath(); + QString url = QFileDialog::getOpenFileName( this, tr( "Load Playlist" ), path, tr( "Playlists (*.xspf *.m3u)" ) ); + if ( !url.isEmpty() ) - TomahawkSettings::instance()->setImportXspfPath( QFileInfo( url ).absoluteDir().absolutePath() ); + { + const QFileInfo fi( url ); + TomahawkSettings::instance()->setImportPlaylistPath( fi.absoluteDir().absolutePath() ); + } m_ui->lineEdit->setText( url ); } + +void +LoadPlaylistDialog::onUrlChanged() +{ + m_ui->autoUpdate->setEnabled( m_ui->lineEdit->text().trimmed().startsWith( "http://" ) ); +} + + QString -LoadXSPFDialog::xspfUrl() const +LoadPlaylistDialog::url() const { return m_ui->lineEdit->text(); } + bool -LoadXSPFDialog::autoUpdate() const +LoadPlaylistDialog::autoUpdate() const { return m_ui->autoUpdate->isChecked(); } diff --git a/src/tomahawk/dialogs/LoadPlaylistDialog.h b/src/tomahawk/dialogs/LoadPlaylistDialog.h index 47066286c..00aa891a1 100644 --- a/src/tomahawk/dialogs/LoadPlaylistDialog.h +++ b/src/tomahawk/dialogs/LoadPlaylistDialog.h @@ -1,6 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2011, Leo Franchi + * Copyright 2014, Christian Muehlhaeuser * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,28 +17,31 @@ * along with Tomahawk. If not, see . */ -#ifndef LOADXSPFDIALOG_H -#define LOADXSPFDIALOG_H +#ifndef LOADPLAYLISTDIALOG_H +#define LOADPLAYLISTDIALOG_H #include -class Ui_LoadXSPF; +class Ui_LoadPlaylist; -class LoadXSPFDialog : public QDialog +class LoadPlaylistDialog : public QDialog { Q_OBJECT public: - explicit LoadXSPFDialog( QWidget* parent = 0, Qt::WindowFlags f = 0 ); - virtual ~LoadXSPFDialog(); + explicit LoadPlaylistDialog( QWidget* parent = 0, Qt::WindowFlags f = 0 ); + virtual ~LoadPlaylistDialog(); - QString xspfUrl() const; + QString url() const; bool autoUpdate() const; public slots: void getLocalFile(); +private slots: + void onUrlChanged(); + private: - Ui_LoadXSPF* m_ui; + Ui_LoadPlaylist* m_ui; }; -#endif // LOADXSPFDIALOG_H +#endif // LOADPLAYLISTDIALOG_H diff --git a/src/tomahawk/dialogs/LoadPlaylistDialog.ui b/src/tomahawk/dialogs/LoadPlaylistDialog.ui index e8008fbc3..e7525e04b 100644 --- a/src/tomahawk/dialogs/LoadPlaylistDialog.ui +++ b/src/tomahawk/dialogs/LoadPlaylistDialog.ui @@ -1,17 +1,17 @@ - LoadXSPF - + LoadPlaylist + 0 0 - 444 - 241 + 481 + 199 - Load XSPF + Load Playlist @@ -19,6 +19,9 @@ Enter the URL of the hosted playlist (e.g. .xspf format) or click the button to select a local M3U of XSPF playlist to import. + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + true @@ -75,6 +78,9 @@ To import a playlist from Spotify, Rdio, Beats, etc. - simply drag the link into Tomahawk. + + Qt::AlignCenter + true @@ -97,7 +103,7 @@ buttonBox accepted() - LoadXSPF + LoadPlaylist accept() @@ -113,7 +119,7 @@ buttonBox rejected() - LoadXSPF + LoadPlaylist reject()