diff options
Diffstat (limited to 'xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp')
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp | 118 |
1 files changed, 93 insertions, 25 deletions
diff --git a/xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp b/xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp index 5fa58f627c..2c1b889438 100644 --- a/xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp @@ -30,9 +30,11 @@ #include "dialogs/GUIDialogContextMenu.h" #include "view/ViewState.h" #include "profiles/ProfilesManager.h" +#include "dialogs/GUIDialogKaiToast.h" #include "settings/AdvancedSettings.h" #include "FileItem.h" #include "guilib/Texture.h" +#include "guilib/GUIWindowManager.h" #include "utils/Crc32.h" #include "guilib/Key.h" #include "guilib/LocalizeStrings.h" @@ -92,6 +94,7 @@ bool CGUIDialogVideoBookmarks::OnMessage(CGUIMessage& message) if (iControl == CONTROL_ADD_BOOKMARK) { AddBookmark(); + Update(); } else if (iControl == CONTROL_CLEAR_BOOKMARKS) { @@ -100,6 +103,7 @@ bool CGUIDialogVideoBookmarks::OnMessage(CGUIMessage& message) else if (iControl == CONTROL_ADD_EPISODE_BOOKMARK) { AddEpisodeBookmark(); + Update(); } else if (m_viewControl.HasControl(iControl)) // list/thumb control { @@ -133,17 +137,21 @@ bool CGUIDialogVideoBookmarks::OnMessage(CGUIMessage& message) } } break; + case GUI_MSG_REFRESH_LIST: + { + OnRefreshList(); + } } return CGUIDialog::OnMessage(message); } -void CGUIDialogVideoBookmarks::Update() +void CGUIDialogVideoBookmarks::OnRefreshList() { m_bookmarks.clear(); CBookmark resumemark; - - // open the d/b and retrieve the bookmarks for the current movie + + // open the d/b and retrieve the bookmarks for the current movie CStdString path = g_application.CurrentFile(); if (g_application.CurrentFileItem().HasProperty("original_listitem_url") && !URIUtils::IsVideoDb(g_application.CurrentFileItem().GetProperty("original_listitem_url").asString())) @@ -155,6 +163,32 @@ void CGUIDialogVideoBookmarks::Update() /* push in the resume mark first */ if( videoDatabase.GetResumeBookMark(path, resumemark) ) m_bookmarks.push_back(resumemark); + + videoDatabase.Close(); + m_vecItems->Clear(); + // cycle through each stored bookmark and add it to our list control + for (unsigned int i = 0; i < m_bookmarks.size(); ++i) + { + if (m_bookmarks[i].type == CBookmark::RESUME) + m_bookmarks[i].thumbNailImage = "bookmark-resume.png"; + + CStdString bookmarkTime; + if (m_bookmarks[i].type == CBookmark::EPISODE) + bookmarkTime.Format("%s %i %s %i", g_localizeStrings.Get(20373), m_bookmarks[i].seasonNumber, g_localizeStrings.Get(20359).c_str(), m_bookmarks[i].episodeNumber); + else + bookmarkTime = StringUtils::SecondsToTimeString((long)m_bookmarks[i].timeInSeconds, TIME_FORMAT_HH_MM_SS); + + CFileItemPtr item(new CFileItem(bookmarkTime)); + item->SetArt("thumb", m_bookmarks[i].thumbNailImage); + m_vecItems->Add(item); + } + m_viewControl.SetItems(*m_vecItems); +} + +void CGUIDialogVideoBookmarks::Update() +{ + CVideoDatabase videoDatabase; + videoDatabase.Open(); if (g_application.CurrentFileItem().HasVideoInfoTag() && g_application.CurrentFileItem().GetVideoInfoTag()->m_iEpisode > -1) { @@ -174,7 +208,6 @@ void CGUIDialogVideoBookmarks::Update() CONTROL_DISABLE(CONTROL_ADD_EPISODE_BOOKMARK); } - videoDatabase.Close(); // lock our display, as this window is rendered from the player thread g_graphicsContext.Lock(); @@ -183,24 +216,11 @@ void CGUIDialogVideoBookmarks::Update() // empty the list ready for population Clear(); - // cycle through each stored bookmark and add it to our list control - for (unsigned int i = 0; i < m_bookmarks.size(); ++i) - { - if (m_bookmarks[i].type == CBookmark::RESUME) - m_bookmarks[i].thumbNailImage = "bookmark-resume.png"; - - CStdString bookmarkTime; - if (m_bookmarks[i].type == CBookmark::EPISODE) - bookmarkTime.Format("%s %i %s %i", g_localizeStrings.Get(20373), m_bookmarks[i].seasonNumber, g_localizeStrings.Get(20359).c_str(), m_bookmarks[i].episodeNumber); - else - bookmarkTime = StringUtils::SecondsToTimeString((long)m_bookmarks[i].timeInSeconds, TIME_FORMAT_HH_MM_SS); - - CFileItemPtr item(new CFileItem(bookmarkTime)); - item->SetArt("thumb", m_bookmarks[i].thumbNailImage); - m_vecItems->Add(item); - } - m_viewControl.SetItems(*m_vecItems); + OnRefreshList(); + g_graphicsContext.Unlock(); + + videoDatabase.Close(); } void CGUIDialogVideoBookmarks::Clear() @@ -234,7 +254,7 @@ void CGUIDialogVideoBookmarks::ClearBookmarks() Update(); } -void CGUIDialogVideoBookmarks::AddBookmark(CVideoInfoTag* tag) +bool CGUIDialogVideoBookmarks::AddBookmark(CVideoInfoTag* tag) { CVideoDatabase videoDatabase; CBookmark bookmark; @@ -273,7 +293,7 @@ void CGUIDialogVideoBookmarks::AddBookmark(CVideoInfoTag* tag) { Crc32 crc; crc.ComputeFromLowerCase(g_application.CurrentFile()); - bookmark.thumbNailImage.Format("%08x_%i.jpg", (unsigned __int32) crc, m_vecItems->Size() + 1); + bookmark.thumbNailImage.Format("%08x_%i.jpg", (unsigned __int32) crc, bookmark.timeInSeconds); bookmark.thumbNailImage = URIUtils::AddFileToFolder(CProfilesManager::Get().GetBookmarksThumbFolder(), bookmark.thumbNailImage); if (!CPicture::CreateThumbnailFromSurface(thumbnail->GetPixels(), width, height, thumbnail->GetWidth() * 4, bookmark.thumbNailImage)) @@ -298,7 +318,7 @@ void CGUIDialogVideoBookmarks::AddBookmark(CVideoInfoTag* tag) videoDatabase.AddBookMarkToFile(path, bookmark, CBookmark::STANDARD); } videoDatabase.Close(); - Update(); + return true; } void CGUIDialogVideoBookmarks::OnWindowLoaded() @@ -322,7 +342,7 @@ CGUIControl *CGUIDialogVideoBookmarks::GetFirstFocusableControl(int id) return CGUIWindow::GetFirstFocusableControl(id); } -void CGUIDialogVideoBookmarks::AddEpisodeBookmark() +bool CGUIDialogVideoBookmarks::AddEpisodeBookmark() { vector<CVideoInfoTag> episodes; CVideoDatabase videoDatabase; @@ -341,8 +361,56 @@ void CGUIDialogVideoBookmarks::AddEpisodeBookmark() int pressed = CGUIDialogContextMenu::ShowAndGetChoice(choices); if (pressed >= 0) + { AddBookmark(&episodes[pressed]); + return true; + } + } + return false; +} + + + +bool CGUIDialogVideoBookmarks::OnAddBookmark() +{ + if (!g_application.CurrentFileItem().IsVideo()) + return false; + + if (CGUIDialogVideoBookmarks::AddBookmark()) + { + g_windowManager.SendMessage(GUI_MSG_REFRESH_LIST, 0, WINDOW_DIALOG_VIDEO_BOOKMARKS); + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, + g_localizeStrings.Get(298), //"Bookmarks" + g_localizeStrings.Get(21362));//"Bookmark created" + return true; + } + return false; +} + +bool CGUIDialogVideoBookmarks::OnAddEpisodeBookmark() +{ + bool bReturn = false; + if (g_application.CurrentFileItem().HasVideoInfoTag() && g_application.CurrentFileItem().GetVideoInfoTag()->m_iEpisode > -1) + { + CVideoDatabase videoDatabase; + videoDatabase.Open(); + vector<CVideoInfoTag> episodes; + videoDatabase.GetEpisodesByFile(g_application.CurrentFile(),episodes); + if (episodes.size() > 1) + { + bReturn = CGUIDialogVideoBookmarks::AddEpisodeBookmark(); + if(bReturn) + { + g_windowManager.SendMessage(GUI_MSG_REFRESH_LIST, 0, WINDOW_DIALOG_VIDEO_BOOKMARKS); + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, + g_localizeStrings.Get(298), //"Bookmarks" + g_localizeStrings.Get(21363));//"Episode Bookmark created" + + } + } + videoDatabase.Close(); } + return bReturn; } |