aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalP <crystalp@kodi.tv>2024-04-18 09:42:48 -0400
committerCrystalP <crystalp@kodi.tv>2024-07-07 14:10:57 -0400
commit35a5f956576b9316c61c9119f1e2119299e2597a (patch)
treecb75161084e83404eec545d4ec5ed362ea135271
parentd212b0a65700fdfa958f87c9617be3117bd89f16 (diff)
[videodb] Remove KeepId from DeleteMovie
DeleteMovie behaves very differently with KeepId=true and turns it into a "DeleteStreams" function. To simplify the logic, remove the parameter and make the only caller do the stream deletion directly.
-rw-r--r--xbmc/video/VideoDatabase.cpp68
-rw-r--r--xbmc/video/VideoDatabase.h1
-rw-r--r--xbmc/video/jobs/VideoLibraryRefreshingJob.cpp2
3 files changed, 31 insertions, 40 deletions
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp
index 686dbbbe3d..432135b41c 100644
--- a/xbmc/video/VideoDatabase.cpp
+++ b/xbmc/video/VideoDatabase.cpp
@@ -2624,7 +2624,10 @@ int CVideoDatabase::SetDetailsForMovie(CVideoInfoTag& details,
idMovie = GetMovieId(filePath);
if (idMovie > -1)
- DeleteMovie(idMovie, true); // true to keep the table entry
+ {
+ const int idFile{GetDbId(PrepareSQL("SELECT idFile FROM movie WHERE idMovie=%i", idMovie))};
+ DeleteStreamDetails(idFile);
+ }
else
{
// only add a new movie if we don't already have a valid idMovie
@@ -3701,9 +3704,7 @@ void CVideoDatabase::DeleteBookMarkForEpisode(const CVideoInfoTag& tag)
}
//********************************************************************************************************************************
-void CVideoDatabase::DeleteMovie(int idMovie,
- bool bKeepId /* = false */,
- DeleteMovieCascadeAction ca /* = ALL_ASSETS */)
+void CVideoDatabase::DeleteMovie(int idMovie, DeleteMovieCascadeAction ca /* = ALL_ASSETS */)
{
if (idMovie < 0)
return;
@@ -3717,55 +3718,46 @@ void CVideoDatabase::DeleteMovie(int idMovie,
BeginTransaction();
- int idFile = GetDbId(PrepareSQL("SELECT idFile FROM movie WHERE idMovie=%i", idMovie));
+ const int idFile{GetDbId(PrepareSQL("SELECT idFile FROM movie WHERE idMovie=%i", idMovie))};
DeleteStreamDetails(idFile);
- // keep the movie table entry, linking to tv shows, and bookmarks
- // so we can update the data in place
- // the ancillary tables are still purged
- if (!bKeepId)
- {
- const std::string path = GetSingleValue(PrepareSQL(
- "SELECT strPath FROM path JOIN files ON files.idPath=path.idPath WHERE files.idFile=%i",
- idFile));
- if (!path.empty())
- InvalidatePathHash(path);
+ const std::string path = GetSingleValue(PrepareSQL(
+ "SELECT strPath FROM path JOIN files ON files.idPath=path.idPath WHERE files.idFile=%i",
+ idFile));
+ if (!path.empty())
+ InvalidatePathHash(path);
- const std::string strSQL = PrepareSQL("delete from movie where idMovie=%i", idMovie);
- m_pDS->exec(strSQL);
+ const std::string strSQL{PrepareSQL("DELETE FROM movie WHERE idMovie=%i", idMovie)};
+ m_pDS->exec(strSQL);
- if (ca == DeleteMovieCascadeAction::ALL_ASSETS)
- {
- // The default version of the movie was removed by a delete trigger.
- // Clean up the other assets attached to the movie, if any.
+ if (ca == DeleteMovieCascadeAction::ALL_ASSETS)
+ {
+ // The default version of the movie was removed by a delete trigger.
+ // Clean up the other assets attached to the movie, if any.
- // need local dataset due to nested DeleteVideoAsset query
- std::unique_ptr<Dataset> pDS{m_pDB->CreateDataset()};
+ // need local dataset due to nested DeleteVideoAsset query
+ const std::unique_ptr<Dataset> pDS{m_pDB->CreateDataset()};
- pDS->query(
- PrepareSQL("SELECT idFile FROM videoversion WHERE idMedia=%i AND media_type='%s'",
- idMovie, MediaTypeMovie));
+ pDS->query(PrepareSQL("SELECT idFile FROM videoversion WHERE idMedia=%i AND media_type='%s'",
+ idMovie, MediaTypeMovie));
- while (!pDS->eof())
+ while (!pDS->eof())
+ {
+ if (!DeleteVideoAsset(pDS->fv(0).get_asInt()))
{
- if (!DeleteVideoAsset(pDS->fv(0).get_asInt()))
- {
- RollbackTransaction();
- pDS->close();
- return;
- }
- pDS->next();
+ RollbackTransaction();
+ pDS->close();
+ return;
}
- pDS->close();
+ pDS->next();
}
+ pDS->close();
}
//! @todo move this below CommitTransaction() once UPnP doesn't rely on this anymore
- if (!bKeepId)
- AnnounceRemove(MediaTypeMovie, idMovie);
+ AnnounceRemove(MediaTypeMovie, idMovie);
CommitTransaction();
-
}
catch (...)
{
diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h
index 9c220a47b7..59d7dc5f9e 100644
--- a/xbmc/video/VideoDatabase.h
+++ b/xbmc/video/VideoDatabase.h
@@ -604,7 +604,6 @@ public:
int UpdateDetailsForMovie(int idMovie, CVideoInfoTag& details, const std::map<std::string, std::string> &artwork, const std::set<std::string> &updatedDetails);
void DeleteMovie(int idMovie,
- bool bKeepId = false,
DeleteMovieCascadeAction action = DeleteMovieCascadeAction::ALL_ASSETS);
void DeleteTvShow(int idTvShow, bool bKeepId = false);
void DeleteTvShow(const std::string& strPath);
diff --git a/xbmc/video/jobs/VideoLibraryRefreshingJob.cpp b/xbmc/video/jobs/VideoLibraryRefreshingJob.cpp
index 958a6f970c..35b5c09445 100644
--- a/xbmc/video/jobs/VideoLibraryRefreshingJob.cpp
+++ b/xbmc/video/jobs/VideoLibraryRefreshingJob.cpp
@@ -333,7 +333,7 @@ bool CVideoLibraryRefreshingJob::Work(CVideoDatabase &db)
if (origDbId > 0)
{
if (scraper->Content() == CONTENT_MOVIES)
- db.DeleteMovie(origDbId, false, DeleteMovieCascadeAction::DEFAULT_VERSION);
+ db.DeleteMovie(origDbId, DeleteMovieCascadeAction::DEFAULT_VERSION);
else if (scraper->Content() == CONTENT_MUSICVIDEOS)
db.DeleteMusicVideo(origDbId);
else if (scraper->Content() == CONTENT_TVSHOWS)