mirror of https://github.com/KDE/kasts.git
Fix and prevent nullptr dereferences in AudioManager
This would happen when the current track is changed to "no track". Signals from the backend KMediaSession would still trigger duration() calls which would try to dereference the pointer to the current track entry.
This commit is contained in:
parent
c3ca038af7
commit
af6e581bee
|
@ -390,9 +390,14 @@ void AudioManager::play()
|
|||
if (isStreaming()) {
|
||||
if (!NetworkConnectionManager::instance().streamingAllowed()) {
|
||||
qCDebug(kastsAudio) << "Refusing to play: no connection or streaming on metered connection not allowed";
|
||||
QString feedUrl, entryId;
|
||||
if (d->m_entry) {
|
||||
feedUrl = d->m_entry->feed()->url();
|
||||
entryId = d->m_entry->id();
|
||||
}
|
||||
Q_EMIT logError(Error::Type::MeteredStreamingNotAllowed,
|
||||
d->m_entry->feed()->url(),
|
||||
d->m_entry->id(),
|
||||
feedUrl,
|
||||
entryId,
|
||||
0,
|
||||
i18n("No connection or streaming on metered connection not allowed"),
|
||||
QString());
|
||||
|
@ -484,7 +489,7 @@ bool AudioManager::canGoNext() const
|
|||
// check if there is a next track
|
||||
if (index < DataManager::instance().queue().count() - 1) {
|
||||
Entry *next_entry = DataManager::instance().getEntry(DataManager::instance().queue()[index + 1]);
|
||||
if (next_entry->enclosure()) {
|
||||
if (next_entry && next_entry->enclosure()) {
|
||||
qCDebug(kastsAudio) << "Enclosure status" << next_entry->enclosure()->path() << next_entry->enclosure()->status();
|
||||
if (next_entry->enclosure()->status() == Enclosure::Downloaded) {
|
||||
return true;
|
||||
|
@ -543,10 +548,13 @@ void AudioManager::playerDurationChanged(qint64 duration)
|
|||
qCDebug(kastsAudio) << "AudioManager::playerDurationChanged" << duration;
|
||||
|
||||
// Check if duration mentioned in enclosure corresponds to real duration
|
||||
if (d->m_entry && d->m_entry->enclosure()) {
|
||||
if (duration > 0 && (duration / 1000) != d->m_entry->enclosure()->duration()) {
|
||||
qCDebug(kastsAudio) << "Correcting duration of" << d->m_entry->id() << "to" << duration / 1000 << "(was" << d->m_entry->enclosure()->duration() << ")";
|
||||
qCDebug(kastsAudio) << "Correcting duration of" << d->m_entry->id() << "to" << duration / 1000 << "(was" << d->m_entry->enclosure()->duration()
|
||||
<< ")";
|
||||
d->m_entry->enclosure()->setDuration(duration / 1000);
|
||||
}
|
||||
}
|
||||
|
||||
qint64 correctedDuration = duration;
|
||||
QTimer::singleShot(0, this, [this, correctedDuration]() {
|
||||
|
@ -580,7 +588,7 @@ void AudioManager::savePlayPosition()
|
|||
checkForPendingSeek();
|
||||
|
||||
if (!d->m_lockPositionSaving) {
|
||||
if (d->m_entry) {
|
||||
if (d->m_entry && d->m_entry->enclosure()) {
|
||||
if (d->m_entry->enclosure()) {
|
||||
d->m_entry->enclosure()->setPlayPosition(position());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue