diff options
author | Arne Morten Kvarving <spiff@xbmc.org> | 2013-04-06 12:38:08 -0700 |
---|---|---|
committer | Arne Morten Kvarving <spiff@xbmc.org> | 2013-04-06 12:38:08 -0700 |
commit | 8ec86585655ee66f618aac9fa572f00ec81a2555 (patch) | |
tree | 6218c521fb36d33f0143ded2b14462f1268b3824 | |
parent | d55df9a89c7dfca161c2b6b7442fd5f380cae5c6 (diff) | |
parent | 4fc00e8ae14266fa39597ca63dd2495da8a13243 (diff) |
Merge pull request #2147 from Fice/quick_bookmarks
Bookmarks via Keypress
-rw-r--r-- | language/English/strings.po | 12 | ||||
-rw-r--r-- | xbmc/Application.cpp | 10 | ||||
-rw-r--r-- | xbmc/guilib/Key.h | 3 | ||||
-rw-r--r-- | xbmc/input/ButtonTranslator.cpp | 2 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp | 118 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoBookmarks.h | 30 |
6 files changed, 146 insertions, 29 deletions
diff --git a/language/English/strings.po b/language/English/strings.po index f356471ec9..27b68d2cf5 100644 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -9541,7 +9541,17 @@ msgctxt "#21361" msgid "Look for remote UPnP players" msgstr "" -#empty strings from id 21362 to 21363 +#: xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp +msgctx "#21362" +msgid "Bookmark created" +msgstr "" + +#: xbmc/video/dialogs/GUIDialogVideoBookmarks.cpp +msgctxt "#21363" +msgid "Episode Bookmark created" +msgstr "" + + msgctxt "#21364" msgid "Edit media share" diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 092b0fd28c..d69427ff29 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2659,6 +2659,16 @@ bool CApplication::OnAction(const CAction &action) if (action.IsMouse()) g_Mouse.SetActive(true); + + if (action.GetID() == ACTION_CREATE_EPISODE_BOOKMARK) + { + CGUIDialogVideoBookmarks::OnAddEpisodeBookmark(); + } + if (action.GetID() == ACTION_CREATE_BOOKMARK) + { + CGUIDialogVideoBookmarks::OnAddBookmark(); + } + // The action PLAYPAUSE behaves as ACTION_PAUSE if we are currently // playing or ACTION_PLAYER_PLAY if we are not playing. if (action.GetID() == ACTION_PLAYER_PLAYPAUSE) diff --git a/xbmc/guilib/Key.h b/xbmc/guilib/Key.h index 4734ce3069..bc1acb8a09 100644 --- a/xbmc/guilib/Key.h +++ b/xbmc/guilib/Key.h @@ -190,6 +190,9 @@ #define ACTION_VOLAMP_UP 93 #define ACTION_VOLAMP_DOWN 94 +#define ACTION_CREATE_EPISODE_BOOKMARK 95 //Creates an episode bookmark on the currently playing video file containing more than one episode +#define ACTION_CREATE_BOOKMARK 96 //Creates a bookmark of the currently playing video file + #define ACTION_MOUSE_START 100 #define ACTION_MOUSE_LEFT_CLICK 100 #define ACTION_MOUSE_RIGHT_CLICK 101 diff --git a/xbmc/input/ButtonTranslator.cpp b/xbmc/input/ButtonTranslator.cpp index 5a4adb8f47..7bd458981a 100644 --- a/xbmc/input/ButtonTranslator.cpp +++ b/xbmc/input/ButtonTranslator.cpp @@ -218,6 +218,8 @@ static const ActionMapping actions[] = {"decreasepar" , ACTION_DECREASE_PAR}, {"volampup" , ACTION_VOLAMP_UP}, {"volampdown" , ACTION_VOLAMP_DOWN}, + {"createbookmark" , ACTION_CREATE_BOOKMARK}, + {"createepisodebookmark" , ACTION_CREATE_EPISODE_BOOKMARK}, // PVR actions {"channelup" , ACTION_CHANNEL_UP}, 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; } diff --git a/xbmc/video/dialogs/GUIDialogVideoBookmarks.h b/xbmc/video/dialogs/GUIDialogVideoBookmarks.h index c467e2a493..75dd52ed1f 100644 --- a/xbmc/video/dialogs/GUIDialogVideoBookmarks.h +++ b/xbmc/video/dialogs/GUIDialogVideoBookmarks.h @@ -35,13 +35,37 @@ public: virtual void OnWindowLoaded(); virtual void OnWindowUnload(); + /*! + \brief Creates a bookmark of the currently playing video file. + + NOTE: sends a GUI_MSG_REFRESH_LIST message to DialogVideoBookmark on success + \return True if creation of bookmark was succesful + \sa OnAddEpisodeBookmark + */ + static bool OnAddBookmark(); + + /*! + \brief Creates an episode bookmark of the currently playing file + + An episode bookmark specifies the end/beginning of episodes on files like: S01E01E02 + Fails if the current video isn't a multi-episode file + NOTE: sends a GUI_MSG_REFRESH_LIST message to DialogVideoBookmark on success + \return True, if bookmark was successfully created + \sa OnAddBookmark + **/ + static bool OnAddEpisodeBookmark(); + + + void Update(); protected: void GotoBookmark(int iItem); void ClearBookmarks(); - void AddBookmark(CVideoInfoTag* tag=NULL); + static bool AddEpisodeBookmark(); + static bool AddBookmark(CVideoInfoTag *tag=NULL); + void Clear(); - void Update(); - void AddEpisodeBookmark(); + void OnRefreshList(); + CGUIControl *GetFirstFocusableControl(int id); |