--- a/application.cpp
+++ b/application.cpp
@@ -99,10 +99,10 @@
Application::Application(QApplication* qapp, QObject *parent)
- : QObject(parent), m_player(0), m_playlist(0), m_cdb(0), m_rdco(0),
+ : QObject(parent), m_player(0), m_cdb(0), m_rdco(0),
m_avto(0), m_ohtmo(0), m_ohvlo(0), m_ohpro(0),
m_ui_playlist(0), m_sctool(0), m_settings(0), m_app(qapp),
- m_initialized(false),
+ m_initialized(false), m_playlistIsPlaylist(false),
m_ohsourcetype(OHProductQO::OHPR_SourceUnknown)
{
m_settings = CSettingsStorage::getInstance();
@@ -273,14 +273,19 @@
return;
}
int row = dlg.rndsLW->currentRow();
- m_playlist->psl_stop();
+ if (m_playlist) {
+ m_playlist->psl_stop();
+ }
m_player->stopped();
- deleteZ(m_playlist);
if (row == 1) {
QString fn = QDir(Helper::getSharePath()).filePath("radiolist.xml");
- m_playlist = new PlaylistLOCRD(m_avto, fn.toLocal8Bit());
- } else {
- m_playlist = new PlaylistAVT(m_avto, m_rdr->desc()->UDN);
+ m_playlist = shared_ptr<Playlist>(new PlaylistLOCRD(m_avto,
+ fn.toLocal8Bit()));
+ m_playlistIsPlaylist = false;
+ } else {
+ m_playlist = shared_ptr<Playlist>(new PlaylistAVT(m_avto,
+ m_rdr->desc()->UDN));
+ m_playlistIsPlaylist = true;
}
playlist_connections();
}
@@ -317,7 +322,6 @@
bool Application::setupRenderer(const string& uid)
{
- deleteZ(m_playlist);
deleteZ(m_rdco);
deleteZ(m_avto);
deleteZ(m_ohtmo);
@@ -375,7 +379,9 @@
// Keep this after avt object creation !
if (!m_playlist) {
qDebug() <<"Application::setupRenderer: using AVT playlist";
- m_playlist = new PlaylistAVT(m_avto, m_rdr->desc()->UDN);
+ m_playlist = shared_ptr<Playlist>(new PlaylistAVT(m_avto,
+ m_rdr->desc()->UDN));
+ m_playlistIsPlaylist = true;
}
@@ -401,8 +407,6 @@
void Application::createPlaylistForOpenHomeSource()
{
- deleteZ(m_playlist);
-
m_ohsourcetype = m_ohpro->getSourceType();
switch (m_ohsourcetype) {
@@ -416,8 +420,9 @@
return;
}
OHIFH ohif = m_rdr->ohif();
- m_playlist = new PlaylistOHRD(new OHRad(ohrd), ohif ?
- new OHInf(ohif) : 0);
+ m_playlist = shared_ptr<Playlist>(
+ new PlaylistOHRD(new OHRad(ohrd), ohif ? new OHInf(ohif) : 0));
+ m_playlistIsPlaylist = false;
}
break;
@@ -429,8 +434,9 @@
"receiver mode, but can't connect";
return;
}
- m_playlist = new PlaylistOHRCV(ohrc,
- u8s2qs(m_rdr->desc()->friendlyName));
+ m_playlist = shared_ptr<Playlist>(
+ new PlaylistOHRCV(ohrc, u8s2qs(m_rdr->desc()->friendlyName)));
+ m_playlistIsPlaylist = false;
}
break;
@@ -438,14 +444,17 @@
{
OHPLH ohpl = m_rdr->ohpl();
if (ohpl) {
- m_playlist = new PlaylistOHPL(new OHPlayer(ohpl));
+ m_playlist = shared_ptr<Playlist>(
+ new PlaylistOHPL(new OHPlayer(ohpl)));
+ m_playlistIsPlaylist = true;
}
}
break;
default:
{
- m_playlist = new PlaylistNULL();
+ m_playlist = shared_ptr<Playlist>(new PlaylistNULL());
+ m_playlistIsPlaylist = false;
}
break;
}
@@ -503,52 +512,55 @@
// set the playlist connections in a separate function
void Application::playlist_connections()
{
- m_cdb->setPlaylist(m_playlist);
+ if (m_playlistIsPlaylist)
+ m_cdb->setPlaylist(m_playlist);
+ else
+ m_cdb->setPlaylist(shared_ptr<Playlist>());
// Use either ohtime or avt for time updates
if (m_ohtmo) {
CONNECT(m_ohtmo, secsInSongChanged(quint32),
- m_playlist, onRemoteSecsInSong(quint32));
+ m_playlist.get(), onRemoteSecsInSong(quint32));
} else if (m_avto) {
CONNECT(m_avto, secsInSongChanged(quint32),
- m_playlist, onRemoteSecsInSong(quint32));
- }
-
- CONNECT(m_player, play(), m_playlist, psl_play());
- CONNECT(m_player, pause(), m_playlist, psl_pause());
- CONNECT(m_player, stop(), m_playlist, psl_stop());
- CONNECT(m_player, forward(), m_playlist, psl_forward());
- CONNECT(m_player, backward(), m_playlist, psl_backward());
- CONNECT(m_player, sig_load_playlist(), m_playlist, psl_load_playlist());
- CONNECT(m_player, sig_save_playlist(), m_playlist, psl_save_playlist());
- CONNECT(m_player, sig_seek(int), m_playlist, psl_seek(int));
-
- CONNECT(m_playlist, connectionLost(), this, reconnectOrChoose());
- CONNECT(m_playlist, playlistModeChanged(Playlist_Mode),
+ m_playlist.get(), onRemoteSecsInSong(quint32));
+ }
+
+ CONNECT(m_player, play(), m_playlist.get(), psl_play());
+ CONNECT(m_player, pause(), m_playlist.get(), psl_pause());
+ CONNECT(m_player, stop(), m_playlist.get(), psl_stop());
+ CONNECT(m_player, forward(), m_playlist.get(), psl_forward());
+ CONNECT(m_player, backward(), m_playlist.get(), psl_backward());
+ CONNECT(m_player, sig_load_playlist(), m_playlist.get(), psl_load_playlist());
+ CONNECT(m_player, sig_save_playlist(), m_playlist.get(), psl_save_playlist());
+ CONNECT(m_player, sig_seek(int), m_playlist.get(), psl_seek(int));
+
+ CONNECT(m_playlist.get(), connectionLost(), this, reconnectOrChoose());
+ CONNECT(m_playlist.get(), playlistModeChanged(Playlist_Mode),
m_ui_playlist, setPlayerMode(Playlist_Mode));
- CONNECT(m_playlist, sig_track_metadata(const MetaData&),
+ CONNECT(m_playlist.get(), sig_track_metadata(const MetaData&),
m_player, update_track(const MetaData&));
- CONNECT(m_playlist, sig_stopped(), m_player, stopped());
- CONNECT(m_playlist, sig_paused(), m_player, paused());
- CONNECT(m_playlist, sig_playing(), m_player, playing());
- CONNECT(m_playlist, sig_playing_track_changed(int),
+ CONNECT(m_playlist.get(), sig_stopped(), m_player, stopped());
+ CONNECT(m_playlist.get(), sig_paused(), m_player, paused());
+ CONNECT(m_playlist.get(), sig_playing(), m_player, playing());
+ CONNECT(m_playlist.get(), sig_playing_track_changed(int),
m_ui_playlist, track_changed(int));
- CONNECT(m_playlist, sig_playlist_updated(MetaDataList&, int, int),
+ CONNECT(m_playlist.get(), sig_playlist_updated(MetaDataList&, int, int),
m_ui_playlist, fillPlaylist(MetaDataList&, int, int));
CONNECT(m_ui_playlist, selection_min_row(int),
- m_playlist, psl_selection_min_row(int));
+ m_playlist.get(), psl_selection_min_row(int));
CONNECT(m_ui_playlist, playlist_mode_changed(const Playlist_Mode&),
- m_playlist, psl_change_mode(const Playlist_Mode&));
+ m_playlist.get(), psl_change_mode(const Playlist_Mode&));
CONNECT(m_ui_playlist, dropped_tracks(const MetaDataList&, int),
- m_playlist, psl_insert_tracks(const MetaDataList&, int));
+ m_playlist.get(), psl_insert_tracks(const MetaDataList&, int));
CONNECT(m_ui_playlist, sig_rows_removed(const QList<int>&, bool),
- m_playlist, psl_remove_rows(const QList<int>&, bool));
+ m_playlist.get(), psl_remove_rows(const QList<int>&, bool));
CONNECT(m_ui_playlist, sig_sort_tno(),
- m_playlist, psl_sort_by_tno());
+ m_playlist.get(), psl_sort_by_tno());
CONNECT(m_ui_playlist, row_activated(int),
- m_playlist, psl_change_track(int));
+ m_playlist.get(), psl_change_track(int));
CONNECT(m_ui_playlist, clear_playlist(),
- m_playlist, psl_clear_playlist());
+ m_playlist.get(), psl_clear_playlist());
m_playlist->update_state();
}