m_movieItem->m_dateTime = m_movieItem->GetVideoInfoTag()->m_premiered;
if(m_movieItem->GetVideoInfoTag()->m_iYear == 0 && m_movieItem->m_dateTime.IsValid())
m_movieItem->GetVideoInfoTag()->m_iYear = m_movieItem->m_dateTime.GetYear();
- m_movieItem->SetProperty("totalepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode);
- m_movieItem->SetProperty("numepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); // info view has no concept of current watched/unwatched filter as we could come here from files view, but set for consistency
- m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount);
- m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount);
- m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0;
+ if (!m_movieItem->HasProperty("totalepisodes"))
+ {
+ m_movieItem->SetProperty("totalepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode);
+ m_movieItem->SetProperty("numepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode); // info view has no concept of current watched/unwatched filter as we could come here from files view, but set for consistency
+ m_movieItem->SetProperty("watchedepisodes", m_movieItem->GetVideoInfoTag()->m_playCount);
+ m_movieItem->SetProperty("unwatchedepisodes", m_movieItem->GetVideoInfoTag()->m_iEpisode - m_movieItem->GetVideoInfoTag()->m_playCount);
+ m_movieItem->GetVideoInfoTag()->m_playCount = (m_movieItem->GetVideoInfoTag()->m_iEpisode == m_movieItem->GetVideoInfoTag()->m_playCount) ? 1 : 0;
+ }
}
else if (type == VIDEODB_CONTENT_EPISODES)
{
//Add change a title's name
bool CGUIDialogVideoInfo::UpdateVideoItemTitle(const CFileItemPtr &pItem)
{
- if (!pItem->HasVideoInfoTag())
+ if (pItem == NULL || !pItem->HasVideoInfoTag())
return false;
// dont allow update while scanning
bool CGUIDialogVideoInfo::MarkWatched(const CFileItemPtr &item, bool bMark)
{
- if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases())
+ if (item == NULL || !CProfilesManager::Get().GetCurrentProfile().canWriteDatabases())
return false;
// dont allow update while scanning
return params.GetMovieId() != -1 ||
params.GetEpisodeId() != -1 ||
params.GetMVideoId() != -1 ||
+ params.GetSetId() != -1 ||
(params.GetTvShowId() != -1 && params.GetSeason() <= -1 &&
!CVideoDatabaseDirectory::IsAllItem(item->GetPath()));
}
bool CGUIDialogVideoInfo::DeleteVideoItemFromDatabase(const CFileItemPtr &item, bool unavailable /* = false */)
{
- if (!item->HasVideoInfoTag() || !CanDeleteVideoItem(item))
+ if (item == NULL || !item->HasVideoInfoTag() ||
+ !CanDeleteVideoItem(item))
return false;
// dont allow update while scanning
case VIDEODB_CONTENT_MUSICVIDEOS:
heading = 20392;
break;
+ case VIDEODB_CONTENT_MOVIE_SETS:
+ heading = 646;
+ break;
default:
return false;
if (!pDialog->IsConfirmed())
return false;
- CStdString path;
CVideoDatabase database;
database.Open();
+ if (type == VIDEODB_CONTENT_MOVIE_SETS)
+ {
+ database.DeleteSet(item->GetVideoInfoTag()->m_iDbId);
+ return true;
+ }
+
+ CStdString path;
database.GetFilePathById(item->GetVideoInfoTag()->m_iDbId, path, type);
if (path.empty())
return false;
bool CGUIDialogVideoInfo::DeleteVideoItem(const CFileItemPtr &item, bool unavailable /* = false */)
{
+ if (item == NULL)
+ return false;
+
// delete the video item from the database
if (!DeleteVideoItemFromDatabase(item, unavailable))
return false;
- bool result = true;
// check if the user is allowed to delete the actual file as well
if ((CProfilesManager::Get().GetCurrentProfile().getLockMode() == LOCK_MODE_EVERYONE ||
!CProfilesManager::Get().GetCurrentProfile().filesLocked() ||
// HACK: stacked files need to be treated as folders in order to be deleted
if (item->IsStack())
item->m_bIsFolder = true;
- result = CFileUtils::DeleteItem(item);
+ CFileUtils::DeleteItem(item);
}
}
CUtil::DeleteVideoDatabaseDirectoryCache();
- return result;
+ return true;
}
bool CGUIDialogVideoInfo::ManageMovieSets(const CFileItemPtr &item)
bool CGUIDialogVideoInfo::GetMoviesForSet(const CFileItem *setItem, CFileItemList &originalMovies, CFileItemList &selectedMovies)
{
+ if (setItem == NULL || !setItem->HasVideoInfoTag())
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
bool CGUIDialogVideoInfo::GetSetForMovie(const CFileItem *movieItem, CFileItemPtr &selectedSet)
{
+ if (movieItem == NULL || !movieItem->HasVideoInfoTag())
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
CFileItemList listItems;
CStdString baseDir = "videodb://movies/sets/";
- if (!CDirectory::GetDirectory(baseDir, listItems) || listItems.Size() <= 0)
+ if (!CDirectory::GetDirectory(baseDir, listItems))
return false;
listItems.Sort(SortByLabel, SortOrderAscending, SortAttributeIgnoreArticle);
bool CGUIDialogVideoInfo::SetMovieSet(const CFileItem *movieItem, const CFileItem *selectedSet)
{
+ if (movieItem == NULL || !movieItem->HasVideoInfoTag() ||
+ selectedSet == NULL || !selectedSet->HasVideoInfoTag())
+ return false;
+
CVideoDatabase videodb;
if (!videodb.Open())
return false;
bool CGUIDialogVideoInfo::AddItemsToTag(const CFileItemPtr &tagItem)
{
- if (tagItem == NULL)
+ if (tagItem == NULL || !tagItem->HasVideoInfoTag())
return false;
CVideoDbUrl videoUrl;
bool CGUIDialogVideoInfo::RemoveItemsFromTag(const CFileItemPtr &tagItem)
{
- if (tagItem == NULL)
+ if (tagItem == NULL || !tagItem->HasVideoInfoTag())
return false;
CVideoDbUrl videoUrl;
}
int iSelectedLabel = 0;
- if (list.Size() > 1)
+ if (list.Size() > 1 || (!bRemove && !list.IsEmpty()))
{
list.Sort(SortByLabel, SortOrderAscending, CSettings::Get().GetBool("filelists.ignorethewhensorting") ? SortAttributeIgnoreArticle : SortAttributeNone);
CGUIDialogSelect* pDialog = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT);
iSelectedLabel = pDialog->GetSelectedLabel();
}
- if (iSelectedLabel > -1)
+ if (iSelectedLabel > -1 && iSelectedLabel < list.Size())
return database.LinkMovieToTvshow(dbId, list[iSelectedLabel]->GetVideoInfoTag()->m_iDbId, bRemove);
return false;