/src/libtomahawk/widgets/SocialPlaylistWidget.cpp

http://github.com/tomahawk-player/tomahawk · C++ · 153 lines · 69 code · 29 blank · 55 comment · 0 complexity · 0075cf68296c84638141d5e89b02bc01 MD5 · raw file

  1. /* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
  2. *
  3. * Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
  4. * Copyright 2010-2011, Jeff Mitchell <jeff@tomahawk-player.org>
  5. *
  6. * Tomahawk is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * Tomahawk is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #include "SocialPlaylistWidget.h"
  20. #include "ui_SocialPlaylistWidget.h"
  21. #include "database/DatabaseCommand_LoadDynamicPlaylist.h"
  22. #include "database/Database.h"
  23. #include "SourceList.h"
  24. #include "playlist/PlayableModel.h"
  25. #include "playlist/dynamic/GeneratorInterface.h"
  26. #include "playlist/dynamic/database/DatabaseGenerator.h"
  27. #include "utils/Logger.h"
  28. #include "database/DatabaseCommand_GenericSelect.h"
  29. #include "widgets/OverlayWidget.h"
  30. using namespace Tomahawk;
  31. QString SocialPlaylistWidget::s_popularAlbumsQuery = "SELECT * from album";
  32. QString SocialPlaylistWidget::s_mostPlayedPlaylistsQuery = "asd";
  33. QString SocialPlaylistWidget::s_topForeignTracksQuery = "select track.name, artist.name, count(*) as counter from (select track from playback_log group by track, source), track, artist where track not in (select track from playback_log where source is null group by track) and track.id = track and artist.id = track.artist group by track order by counter desc";
  34. SocialPlaylistWidget::SocialPlaylistWidget ( QWidget* parent )
  35. : QWidget( parent )
  36. , ui( new Ui_SocialPlaylistWidget )
  37. , m_topForeignTracksModel( 0 )
  38. , m_popularNewAlbumsModel( 0 )
  39. {
  40. ui->setupUi( this );
  41. ui->splitter_2->setStretchFactor( 0, 2 );
  42. ui->splitter_2->setStretchFactor( 0, 1 );
  43. /*
  44. WelcomePlaylistModel* model = new WelcomePlaylistModel( this );
  45. model->setMaxPlaylists( HISTORY_PLAYLIST_ITEMS );
  46. */
  47. ui->mostPlayedPlaylists->setFrameShape( QFrame::NoFrame );
  48. ui->mostPlayedPlaylists->setAttribute( Qt::WA_MacShowFocusRect, 0 );
  49. TomahawkUtils::unmarginLayout( layout() );
  50. TomahawkUtils::unmarginLayout( ui->verticalLayout->layout() );
  51. TomahawkUtils::unmarginLayout( ui->verticalLayout_2->layout() );
  52. TomahawkUtils::unmarginLayout( ui->verticalLayout_3->layout() );
  53. TomahawkUtils::unmarginLayout( ui->verticalLayout_4->layout() );
  54. // ui->mostPlayedPlaylists->setItemDelegate( new PlaylistDelegate() );
  55. // ui->mostPlayedPlaylists->setModel( model );
  56. // ui->mostPlayedPlaylists->overlay()->resize( 380, 86 );
  57. // connect( model, SIGNAL( emptinessChanged( bool) ), this, SLOT( updatePlaylists() ) );
  58. m_topForeignTracksModel = new PlaylistModel( ui->newTracksView );
  59. ui->newTracksView->setPlaylistModel( m_topForeignTracksModel );
  60. ui->newTracksView->proxyModel()->setStyle( PlayableProxyModel::Short );
  61. ui->newTracksView->overlay()->setEnabled( false );
  62. m_popularNewAlbumsModel = new PlayableModel( ui->newAlbumsView );
  63. ui->newAlbumsView->setPlayableModel( m_popularNewAlbumsModel );
  64. // TODO run the genericselect command
  65. // m_recentAlbumsModel->addFilteredCollection( collection_ptr(), 20, DatabaseCommand_AllAlbums::ModificationTime );
  66. /*
  67. m_timer = new QTimer( this );
  68. connect( m_timer, SIGNAL( timeout() ), SLOT( checkQueries() ) );
  69. connect( SourceList::instance(), SIGNAL( ready() ), SLOT( updateRecentTracks() ) );
  70. connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) );
  71. connect( ui->playlistWidget, SIGNAL( activated( QModelIndex ) ), SLOT( onPlaylistActivated( QModelIndex ) ) );
  72. connect( AudioEngine::instance() ,SIGNAL( playlistChanged( Tomahawk::playlistinterface_ptr ) ), this, SLOT( updatePlaylists() ), Qt::QueuedConnection );
  73. */
  74. fetchFromDB();
  75. }
  76. SocialPlaylistWidget::~SocialPlaylistWidget()
  77. {
  78. }
  79. void
  80. SocialPlaylistWidget::fetchFromDB()
  81. {
  82. // Load the pre-baked custom playlists that we are going to show.
  83. QSharedPointer<DatabaseCommand_GenericSelect> albumsCmd = QSharedPointer<DatabaseCommand_GenericSelect>( new DatabaseCommand_GenericSelect( s_popularAlbumsQuery, DatabaseCommand_GenericSelect::Album, 30, 0 ) );
  84. connect( albumsCmd.data(), SIGNAL( albums( QList<Tomahawk::album_ptr> ) ), this, SLOT( popularAlbumsFetched( QList<Tomahawk::album_ptr> ) ) );
  85. Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( albumsCmd ) );
  86. // QSharedPointer<DatabaseCommand_GenericSelect> plCmd = QSharedPointer<DatabaseCommand_GenericSelect>( new DatabaseCommand_GenericSelect( s_mostPlayedPlaylistsQuery, DatabaseCommand_GenericSelect::, 30, 0 ) );
  87. // connect( albumsCmd.data(), SIGNAL( albums( QList<Tomahawk::album_ptr> ) ), this, SLOT( popularAlbumsFetched( QList<Tomahawk::album_ptr> ) ) );
  88. // Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( albumsCmd ) );
  89. QSharedPointer<DatabaseCommand_GenericSelect> trackCmd = QSharedPointer<DatabaseCommand_GenericSelect>( new DatabaseCommand_GenericSelect( s_topForeignTracksQuery, DatabaseCommand_GenericSelect::Track, 50, 0 ) );
  90. connect( trackCmd.data(), SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( topForeignTracksFetched( QList<Tomahawk::query_ptr> ) ) );
  91. Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( trackCmd ) );
  92. }
  93. Tomahawk::playlistinterface_ptr
  94. SocialPlaylistWidget::playlistInterface() const
  95. {
  96. return Tomahawk::playlistinterface_ptr();
  97. }
  98. /*
  99. void
  100. SocialPlaylistWidget::createPlaylist()
  101. {
  102. // Ok, lets create our playlist
  103. * select count(*) as counter, track.name, artist.name from (select track from playback_log group by track, source), track, artist where track.id = track and artist.id = track.artist group by track order by counter desc limit 0,20;
  104. s elect count(*) as counter, playback_log.track, track.name, artist.name from playback_log, track, artist where track.id = playback_log.track and artist.id = track.artist group by playback_log.track order by counter desc limit 0,10; *
  105. select count(*) as counter, track.name, artist.name from (select track from playback_log group by track, source), track, artist where track not in (select track from playback_log where source is null group by track) and track.id = track and artist.id = track.artist group by track order by counter desc limit 0,20;
  106. select count(*) as counter, track.name, artist.name from (select track from playback_log where source > 0 group by track, source), track, artist where track.id = track and artist.id = track.artist group by track order by counter desc limit 0,20;
  107. m_coolQuery1 = DynamicPlaylist::create( SourceList::instance()->getLocal(), COOLPLAYLIST_GUID, "Cool Playlist!", QString(), QString(), Static, false, "database", false );
  108. connect( m_coolQuery1.data(), SIGNAL( created() ), this, SLOT( playlist1Created() ) );
  109. }*/
  110. void
  111. SocialPlaylistWidget::popularAlbumsFetched( QList< album_ptr > albums )
  112. {
  113. m_popularNewAlbumsModel->clear();
  114. m_popularNewAlbumsModel->appendAlbums( albums );
  115. }
  116. void
  117. SocialPlaylistWidget::topForeignTracksFetched( QList< query_ptr > tracks )
  118. {
  119. m_topForeignTracksModel->clear();
  120. m_topForeignTracksModel->appendQueries( tracks );
  121. }