void NewstuffModel::cancel( int index ) { if ( !d->isTransitioning( index ) ) { return; } { // <-- do not remove, mutex locker scope QMutexLocker locker( &d->m_mutex ); if ( d->m_currentAction.first == index ) { if ( d->m_currentAction.second == NewstuffModelPrivate::Install ) { if ( d->m_currentReply ) { d->m_currentReply->abort(); d->m_currentReply->deleteLater(); d->m_currentReply = nullptr; } if ( d->m_unpackProcess ) { d->m_unpackProcess->terminate(); d->m_unpackProcess->deleteLater(); d->m_unpackProcess = nullptr; } if ( d->m_currentFile ) { d->m_currentFile->deleteLater(); d->m_currentFile = nullptr; } d->m_items[d->m_currentAction.first].m_downloadedSize = 0; emit installationFailed( d->m_currentAction.first, tr( "Installation aborted by user." ) ); d->m_currentAction = NewstuffModelPrivate::Action( -1, NewstuffModelPrivate::Install ); } else { // Shall we interrupt this? } } else { if ( d->m_currentAction.second == NewstuffModelPrivate::Install ) { NewstuffModelPrivate::Action install( index, NewstuffModelPrivate::Install ); d->m_actionQueue.removeAll( install ); emit installationFailed( index, tr( "Installation aborted by user." ) ); } else { NewstuffModelPrivate::Action uninstall( index, NewstuffModelPrivate::Uninstall ); d->m_actionQueue.removeAll( uninstall ); emit uninstallationFinished( index ); // do we need failed here? } } } d->processQueue(); }
void NewstuffModel::mapInstalled( int exitStatus ) { if ( d->m_unpackProcess ) { d->m_unpackProcess->deleteLater(); d->m_unpackProcess = nullptr; } if ( d->m_currentFile ) { d->m_currentFile->deleteLater(); d->m_currentFile = nullptr; } emit installationProgressed( d->m_currentAction.first, 1.0 ); d->m_items[d->m_currentAction.first].m_downloadedSize = 0; if ( exitStatus == 0 ) { emit installationFinished( d->m_currentAction.first ); } else { mDebug() << "Process exit status " << exitStatus << " indicates an error."; emit installationFailed( d->m_currentAction.first , QString( "Unable to unpack file. Process exited with status code %1." ).arg( exitStatus ) ); } QModelIndex const affected = index( d->m_currentAction.first ); { // <-- do not remove, mutex locker scope QMutexLocker locker( &d->m_mutex ); d->m_currentAction = NewstuffModelPrivate::Action( -1, NewstuffModelPrivate::Install ); } emit dataChanged( affected, affected ); d->processQueue(); }
void OfflineDataModel::handleInstallationFailed( int index, const QString &error ) { emit installationFailed( fromSource( index ), error ); }