qt: partially update model when possible on media deletion/update

This commit is contained in:
Pierre Lamot 2021-12-17 16:44:18 +01:00 committed by Jean-Baptiste Kempf
parent 65ed60190a
commit 9860b13b1b
12 changed files with 182 additions and 67 deletions

View File

@ -63,23 +63,36 @@ void MLAlbumModel::onVlcMlEvent(const MLEvent &event)
switch( event.i_type )
{
case VLC_ML_EVENT_ALBUM_ADDED:
{
emit resetRequested();
return;
}
case VLC_ML_EVENT_ALBUM_DELETED:
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
return;
}
case VLC_ML_EVENT_ALBUM_UPDATED:
m_need_reset = true;
break;
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_ARTIST_DELETED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_ARTIST &&
event.deletion.i_entity_id == m_parent.id )
m_need_reset = true;
break;
emit resetRequested();
return;
case VLC_ML_EVENT_GENRE_DELETED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_GENRE &&
event.deletion.i_entity_id == m_parent.id )
m_need_reset = true;
break;
emit resetRequested();;
return;
default:
break;
}
MLBaseModel::onVlcMlEvent( event );
}

View File

@ -115,30 +115,37 @@ void MLAlbumTrackModel::onVlcMlEvent(const MLEvent &event)
{
case VLC_ML_EVENT_MEDIA_ADDED:
if ( event.creation.media.i_subtype == VLC_ML_MEDIA_SUBTYPE_ALBUMTRACK )
m_need_reset = true;
break;
emit resetRequested();
return;
case VLC_ML_EVENT_MEDIA_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_MEDIA_DELETED:
// FIXME: Not optimal, this will trigger a clean/refresh for video
// media as well, but this needs fixing in the medialibrary
m_need_reset = true;
break;
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
return;
}
case VLC_ML_EVENT_ALBUM_UPDATED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_ALBUM &&
m_parent.id == event.modification.i_entity_id )
m_need_reset = true;
break;
emit resetRequested();
return;
case VLC_ML_EVENT_ALBUM_DELETED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_ALBUM &&
m_parent.id == event.deletion.i_entity_id )
m_need_reset = true;
break;
emit resetRequested();
return;
case VLC_ML_EVENT_GENRE_DELETED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_GENRE &&
m_parent.id == event.deletion.i_entity_id )
m_need_reset = true;
break;
emit resetRequested();
return;
}
MLBaseModel::onVlcMlEvent( event );
}

View File

@ -89,16 +89,27 @@ void MLArtistModel::onVlcMlEvent(const MLEvent &event)
switch (event.i_type)
{
case VLC_ML_EVENT_ARTIST_ADDED:
emit resetRequested();
return;
case VLC_ML_EVENT_ARTIST_UPDATED:
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_ARTIST_DELETED:
m_need_reset = true;
break;
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
return;
}
case VLC_ML_EVENT_GENRE_DELETED:
if ( m_parent.id != 0 && m_parent.type == VLC_ML_PARENT_GENRE &&
m_parent.id == event.deletion.i_entity_id )
m_need_reset = true;
break;
emit resetRequested();
return;
}
MLBaseModel::onVlcMlEvent(event);
}

View File

@ -87,11 +87,22 @@ void MLGenreModel::onVlcMlEvent(const MLEvent &event)
switch (event.i_type)
{
case VLC_ML_EVENT_GENRE_ADDED:
emit resetRequested();
return;
case VLC_ML_EVENT_GENRE_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_GENRE_DELETED:
m_need_reset = true;
break;
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
return;
}
}
MLBaseModel::onVlcMlEvent(event);
}

View File

@ -351,20 +351,33 @@ QString MLPlaylistListModel::getCover(MLPlaylist * playlist) const
void MLPlaylistListModel::onVlcMlEvent(const MLEvent & event) /* override */
{
if (m_transactionPending
&& (event.i_type == VLC_ML_EVENT_PLAYLIST_UPDATED
|| event.i_type == VLC_ML_EVENT_PLAYLIST_DELETED
|| event.i_type == VLC_ML_EVENT_PLAYLIST_ADDED))
{
m_resetAfterTransaction = true;
return;
}
switch (event.i_type)
{
case VLC_ML_EVENT_PLAYLIST_UPDATED:
case VLC_ML_EVENT_PLAYLIST_ADDED:
case VLC_ML_EVENT_PLAYLIST_DELETED:
{
if(m_transactionPending)
m_resetAfterTransaction = true;
else
{
m_need_reset = true;
// NOTE: Maybe we should call this from MLBaseModel ?
emit resetRequested();
}
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_PLAYLIST);
deleteItemInCache(itemId);
return;
}
case VLC_ML_EVENT_PLAYLIST_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_PLAYLIST);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_PLAYLIST_ADDED:
{
emit resetRequested();
break;
}
default:

View File

@ -420,17 +420,23 @@ void MLPlaylistModel::onVlcMlEvent(const MLEvent & event) /* override */
{
switch (event.i_type)
{
case VLC_ML_EVENT_MEDIA_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_PLAYLIST_UPDATED:
{
if (m_transactionPending)
m_resetAfterTransaction = true;
else
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_PLAYLIST);
if (m_parent == itemId)
{
m_need_reset = true;
// NOTE: Maybe we should call this from MLBaseModel ?
emit resetRequested();
if (m_transactionPending)
m_resetAfterTransaction = true;
else
emit resetRequested();
}
break;
return;
}
default:
break;

View File

@ -80,13 +80,10 @@ void MLRecentsModel::onVlcMlEvent( const MLEvent &event )
switch ( event.i_type )
{
case VLC_ML_EVENT_HISTORY_CHANGED:
{
emit resetRequested();
break;
case VLC_ML_EVENT_MEDIA_ADDED:
case VLC_ML_EVENT_MEDIA_UPDATED:
case VLC_ML_EVENT_MEDIA_DELETED:
m_need_reset = true;
break;
return;
}
default:
break;
}

View File

@ -53,7 +53,7 @@ void MLRecentsVideoModel::onVlcMlEvent(const MLEvent & event) /* override */
{
case VLC_ML_EVENT_HISTORY_CHANGED:
emit resetRequested();
break;
return;
default:
break;
}

View File

@ -99,8 +99,8 @@ void MLUrlModel::onVlcMlEvent(const MLEvent &event)
{
case VLC_ML_EVENT_MEDIA_UPDATED:
case VLC_ML_EVENT_HISTORY_CHANGED:
m_need_reset = true;
break;
emit resetRequested();
return;
}
MLBaseModel::onVlcMlEvent( event );
}

View File

@ -135,14 +135,21 @@ void MLVideoFoldersModel::onVlcMlEvent(const MLEvent & event) /* override */
switch (type)
{
case VLC_ML_EVENT_FOLDER_ADDED:
{
emit resetRequested();
return;
}
case VLC_ML_EVENT_FOLDER_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_FOLDER);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_FOLDER_DELETED:
{
m_need_reset = true;
emit resetRequested();
break;
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_FOLDER);
deleteItemInCache(itemId);
return;
}
default:
break;

View File

@ -164,18 +164,53 @@ void MLVideoGroupsModel::onVlcMlEvent(const MLEvent & event) /* override */
switch (type)
{
case VLC_ML_EVENT_GROUP_ADDED:
case VLC_ML_EVENT_GROUP_UPDATED:
case VLC_ML_EVENT_GROUP_DELETED:
case VLC_ML_EVENT_GROUP_ADDED:
{
emit resetRequested();
return;
}
case VLC_ML_EVENT_MEDIA_ADDED:
{
if (event.creation.media.i_type == VLC_ML_MEDIA_TYPE_VIDEO)
{
m_need_reset = true;
// NOTE: Maybe we should call this from MLBaseModel ?
emit resetRequested();
break;
return;
}
default:
break;
break;
}
case VLC_ML_EVENT_GROUP_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_GROUP);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_MEDIA_UPDATED:
{
if (event.creation.media.i_type == VLC_ML_MEDIA_TYPE_VIDEO)
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
break;
}
case VLC_ML_EVENT_GROUP_DELETED:
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_GROUP);
deleteItemInCache(itemId);
return;
}
case VLC_ML_EVENT_MEDIA_DELETED:
{
if (event.creation.media.i_type == VLC_ML_MEDIA_TYPE_VIDEO)
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
}
return;
}
default:
break;
}
MLBaseModel::onVlcMlEvent(event);

View File

@ -144,13 +144,28 @@ QByteArray MLVideoModel::criteriaToName(vlc_ml_sorting_criteria_t criteria) cons
void MLVideoModel::onVlcMlEvent(const MLEvent &event)
{
if (event.creation.media.i_type != VLC_ML_MEDIA_TYPE_VIDEO)
return MLBaseModel::onVlcMlEvent( event );
switch (event.i_type)
{
case VLC_ML_EVENT_MEDIA_ADDED:
case VLC_ML_EVENT_MEDIA_UPDATED:
case VLC_ML_EVENT_MEDIA_DELETED:
m_need_reset = true;
{
emit resetRequested();
break;
}
case VLC_ML_EVENT_MEDIA_UPDATED:
{
MLItemId itemId(event.modification.i_entity_id, VLC_ML_PARENT_UNKNOWN);
updateItemInCache(itemId);
return;
}
case VLC_ML_EVENT_MEDIA_DELETED:
{
MLItemId itemId(event.deletion.i_entity_id, VLC_ML_PARENT_UNKNOWN);
deleteItemInCache(itemId);
return;
}
default:
break;
}