1
0
mirror of https://github.com/clementine-player/Clementine synced 2024-12-16 11:19:18 +01:00

Don't crash when doing stuff after clearing the playlist

This commit is contained in:
David Sansome 2010-02-03 14:21:53 +00:00
parent dd972ff58b
commit b4313e3410
3 changed files with 16 additions and 5 deletions

View File

@ -302,9 +302,9 @@ void MainWindow::MediaPlaying() {
ui_.action_play_pause->setText("Pause");
ui_.action_play_pause->setEnabled(
! (playlist_->current_item_options() & PlaylistItem::PauseDisabled));
! (player_->GetCurrentItemOptions() & PlaylistItem::PauseDisabled));
bool is_lastfm = (playlist_->current_item_options() & PlaylistItem::LastFMControls);
bool is_lastfm = (player_->GetCurrentItemOptions() & PlaylistItem::LastFMControls);
LastFMService* lastfm = radio_model_->GetLastFMService();
ui_.action_ban->setEnabled(lastfm->IsScrobblingEnabled() && is_lastfm);
@ -320,7 +320,7 @@ void MainWindow::ScrobblingEnabledChanged(bool value) {
if (!player_->GetState() == Engine::Idle)
return;
bool is_lastfm = (playlist_->current_item_options() & PlaylistItem::LastFMControls);
bool is_lastfm = (player_->GetCurrentItemOptions() & PlaylistItem::LastFMControls);
ui_.action_ban->setEnabled(value && is_lastfm);
ui_.action_love->setEnabled(value);
}
@ -406,7 +406,7 @@ void MainWindow::FilePathChanged(const QString& path) {
void MainWindow::UpdateTrackPosition() {
// Track position in seconds
const int position = std::floor(float(player_->GetEngine()->position()) / 1000.0 + 0.5);
const int length = playlist_->current_item()->Metadata().length();
const int length = player_->GetCurrentItem().length();
if (length <= 0) {
// Probably a stream that we don't know the length of

View File

@ -9,6 +9,7 @@ Player::Player(Playlist* playlist, LastFMService* lastfm, QObject* parent)
: QObject(parent),
playlist_(playlist),
lastfm_(lastfm),
current_item_options_(PlaylistItem::Default),
engine_(new XineEngine)
{
if (!engine_->init()) {
@ -57,7 +58,7 @@ void Player::PlayPause() {
case Engine::Playing:
// We really shouldn't pause last.fm streams
if (playlist_->current_item()->options() & PlaylistItem::PauseDisabled)
if (current_item_options_ & PlaylistItem::PauseDisabled)
break;
qDebug() << "Pausing";
@ -122,6 +123,8 @@ void Player::PlayAt(int index) {
playlist_->set_current_index(index);
PlaylistItem* item = playlist_->item_at(index);
current_item_options_ = item->options();
current_item_ = item->Metadata();
if (item->options() & PlaylistItem::SpecialPlayBehaviour)
item->StartLoading();

View File

@ -5,6 +5,8 @@
#include <QSettings>
#include "engine_fwd.h"
#include "playlistitem.h"
#include "song.h"
class Playlist;
class Settings;
@ -20,6 +22,9 @@ class Player : public QObject {
Engine::State GetState() const;
int GetVolume() const;
PlaylistItem::Options GetCurrentItemOptions() const { return current_item_options_; }
Song GetCurrentItem() const { return current_item_; }
public slots:
void PlayAt(int index);
void PlayPause();
@ -47,6 +52,9 @@ class Player : public QObject {
LastFMService* lastfm_;
QSettings settings_;
PlaylistItem::Options current_item_options_;
Song current_item_;
EngineBase* engine_;
};