diff --git a/components/AuthLinking/Registration.brs b/components/AuthLinking/Registration.brs index 6ea8a5d..71ebad0 100644 --- a/components/AuthLinking/Registration.brs +++ b/components/AuthLinking/Registration.brs @@ -110,7 +110,11 @@ End Sub Sub onCheckAuth(event as object) print "Registration.brs [onCheckAuth]" status = -1 ' 0 => Finished (got tokens), < 0 => Retry needed, > 0 => fatal error - + + 'Stop the screensaver from starting + m.keyResetTask = createObject("roSGNode", "KeyReset") + m.keyResetTask.control = "RUN" + errorMsg = "" pollData = m.UriHandler.poll_token_response diff --git a/components/InfoPopup/InfoPopup.brs b/components/InfoPopup/InfoPopup.brs index 05b8169..ea3d62e 100644 --- a/components/InfoPopup/InfoPopup.brs +++ b/components/InfoPopup/InfoPopup.brs @@ -42,11 +42,12 @@ End Sub Sub setFeaturesText() m.itemLabelHeader.text = "New Channel Features" - m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "1. Major re-write, moving to Googles Photos new API. We're now an offical 'Google Photos Partner'" + m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "1. Major re-write, moving to Google Photos new API. We're now an offical 'Google Photos Partner'" m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "2. Introducing 'This Time in History' playback. See the new Dynamic Albums option." - m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "3. TIP: Screensaver can show specific albums. See 'Linked Users' in screensaver options." + m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "3. Usage Optimizations" m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + chr(10) + "Bug fixes:" - m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + " - Empty albums caused error in screensaver" + m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + " - Screensaver album selection crash" + m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + " - Addressing Google API change, removing account name" m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + " - Other minor bugs" m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + chr(10) + "Thank you for using the PhotoView Channel." @@ -71,7 +72,7 @@ End Sub Sub setAboutText() m.itemLabelHeader.text = "About Channel" - m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "The 'PhotoView for Google Photos' channel was developed by Chris Taylor. It's dedicated to his 3-year-old daughter, who goes nuts every time she herself on TV." + m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + "The 'PhotoView for Google Photos' channel was developed by Chris Taylor. It's dedicated to his 3-year-old daughter, who goes nuts every time she sees herself on TV." m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + chr(10) + "We're committed to making this one of the best Photo Apps on the Roku platform." m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + chr(10) + "If you have any questions or comments, please see [Tips and Tricks > Bugs / Feature Request]" m.itemLabelMain.text = m.itemLabelMain.text + chr(10) + chr(10) + "Please remember to rate us, this helps spread the word and drive development!" diff --git a/components/MainMenu/MainMenu.brs b/components/MainMenu/MainMenu.brs index 05d7561..f23078f 100644 --- a/components/MainMenu/MainMenu.brs +++ b/components/MainMenu/MainMenu.brs @@ -14,6 +14,9 @@ Sub init() ' Load in the OAuth Registry entries loadReg() + 'Load common variables + loadCommon() + 'Define SG nodes m.markupgrid = m.top.findNode("homeGrid") m.itemLabelMain1 = m.top.findNode("itemLabelMain1") @@ -30,7 +33,7 @@ Sub init() m.readMarkupGridTask.observeField("content", "showmarkupgrid") m.readMarkupGridTask.control = "RUN" - makeRequest({}, "https://www.roku-photoview.com/status/roku_status_v3.xml" + "?" + getRandomString(10), "GET", "", 7, []) + makeRequest({}, "https://www.roku-photoview.com/status/roku_status_v" + m.releaseVersion + ".xml" + "?" + getRandomString(10), "GET", "", 7, []) End Sub @@ -93,7 +96,7 @@ Sub onItemSelected() m.noticeDialog.visible = true buttons = [ "OK" ] m.noticeDialog.title = "Notice" - m.noticeDialog.message = "Google Photos new API does not currently have image searching available. A feature request is opened and hope to then have this re-enabled soon." + m.noticeDialog.message = "Google Photos new API does not currently have image searching available. A feature request is opened with Google and hope to have this re-enabled soon." m.noticeDialog.buttons = buttons m.noticeDialog.setFocus(true) m.noticeDialog.observeField("buttonSelected","noticeClose") diff --git a/components/Screensaver/Screensaver.brs b/components/Screensaver/Screensaver.brs index a692484..e8bdaf9 100644 --- a/components/Screensaver/Screensaver.brs +++ b/components/Screensaver/Screensaver.brs @@ -370,7 +370,7 @@ Sub onApiTimerTrigger() print "API CALLS LEFT: "; m.apiPending; " - Image Count: "; m.photoItems.Count() if m.apiPending = 0 then - if m.albumActiveObject.Count() = 0 then + if (m.albumActiveObject.Count() = 0) and (m.userCount <> 0) then processAlbums() else execScreensaver() diff --git a/components/Settings/Settings.brs b/components/Settings/Settings.brs index 7825e1b..11141e8 100644 --- a/components/Settings/Settings.brs +++ b/components/Settings/Settings.brs @@ -87,7 +87,7 @@ Sub doGetAlbumSelection(pageNext="" As String) if selectedUser <> usersLoaded then m.loadingSpinner.visible = true - m.infoLabel.text = m.infoLabel.text + chr(10) + chr(10) + "Current user selected: " + m.userInfoName[selectedUser] + m.infoLabel.text = m.infoLabel.text + chr(10) + chr(10) + "Current user selected: " + m.userInfoEmail[selectedUser] doGetAlbumList(selectedUser, pageNext) else @@ -187,7 +187,7 @@ Sub printAlbumSelection(albumList As Object) parsedString = regAlbums.Split("|") for each item in parsedString albumUser = item.Split(":") - if (albumUser[0] = "GP_LIBRARY") and (albumUser[1] = response.post_data[1].Tostr()) then + if (albumUser[0] = "GP_LIBRARY") then 'Check selected album saved = 1 end if @@ -414,7 +414,7 @@ Sub storeLinkedUsers() addItem(m.content, "No users linked", "0", "") else for i = 0 to usersLoaded-1 - addItem(m.content, m.userInfoName[i] + " - (" + m.userInfoEmail[i] + ")", m.userInfoEmail[i], regStore) + addItem(m.content, m.userInfoEmail[i], m.userInfoEmail[i], regStore) if regSelection = m.userInfoEmail[i] then radioSelection = i end for if usersLoaded > 1 then @@ -526,7 +526,7 @@ Sub showselected() 'UNREGISTER USER m.confirmDialog.visible = true buttons = [ "Confirm", "Cancel" ] - m.confirmDialog.message = "Are you sure you want to unregister " + m.userInfoName[m.global.selectedUser] + " from this device?" + m.confirmDialog.message = "Are you sure you want to unregister " + m.userInfoEmail[m.global.selectedUser] + " from this device?" m.confirmDialog.buttons = buttons m.confirmDialog.setFocus(true) end if diff --git a/components/Slideshow/Albums/Albums.brs b/components/Slideshow/Albums/Albums.brs index 7e202cb..1c6815b 100644 --- a/components/Slideshow/Albums/Albums.brs +++ b/components/Slideshow/Albums/Albums.brs @@ -283,17 +283,11 @@ Sub onItemSelected() m.itemLabelMain2.text = m.albumName m.itemLabelMain3.text = "" - if m.albumActiveObject[albumid].GetImageCount > 1000 then - lastPopup = RegRead("ThousandPopup","Settings") - if (lastPopup=invalid or lastPopup<>"v3.0true") then showThousandPopup() - else - - 'Display Loading Spinner - showLoadingSpinner(3, "GP_LOADING") + 'Display Loading Spinner + showLoadingSpinner(3, "GP_LOADING") - 'API CALL: Get album image listing - doGetAlbumImages(albumid, m.global.selectedUser) - end if + 'API CALL: Get album image listing + doGetAlbumImages(albumid, m.global.selectedUser) else if selection.id = "GP_PULL_NEXT" then print "GP_PULL_NEXT" diff --git a/components/Slideshow/Browse/Browse.brs b/components/Slideshow/Browse/Browse.brs index dd2a703..03b5f06 100644 --- a/components/Slideshow/Browse/Browse.brs +++ b/components/Slideshow/Browse/Browse.brs @@ -10,6 +10,11 @@ Sub init() m.itemLabelMain1 = m.top.findNode("itemLabelMain1") m.itemLabelMain2 = m.top.findNode("itemLabelMain2") m.settingsIcon = m.top.findNode("settingsIcon") + m.mediaPageList = m.top.findNode("mediaPageList") + m.mediaPageThumb = m.top.findNode("mediaPageThumb") + m.mediaPageInfo1 = m.top.findNode("mediaPageInfo1") + m.mediaPageInfo2 = m.top.findNode("mediaPageInfo2") + m.VideoPlayer = m.top.findNode("VideoPlayer") m.regStore = "positions" @@ -17,36 +22,134 @@ Sub init() m.itemLabelMain2.font.size = 25 m.videoPlayingindex = 0 + m.pageSelected = 0 + m.itemsPerPage = 100 + m.itemsStart = 0 + m.itemsEnd = 0 m.showVideoPlayback = RegRead("VideoContinuePlay", "Settings") - m.top.observeField("content","loadImageList") + m.top.observeField("content","loadPageList") +End Sub + + +Sub loadPageList() + print "Browse.brs [loadPageList]" + + m.metaData = m.top.metaData + m.mediaPages = createObject("RoSGNode","ContentNode") + totalPages = m.metaData.Count() / m.itemsPerPage + currentCount = m.metaData.Count() + page_start = 0 + page_end = 0 + + if (ceiling(totalPages) = 1) then + buildMediaList(0) + else + for i = 1 to ceiling(totalPages) + page_start = 1 + page_end + if currentCount > m.itemsPerPage then + page_end=page_end + m.itemsPerPage + currentCount = currentCount - m.itemsPerPage + else + page_end=page_end + currentCount + end if + + page_start_dply = str(page_start) + page_start_dply = page_start_dply.Replace(" ", "") + + page_end_dply = str(page_end) + page_end_dply = page_end_dply.Replace(" ", "") + + addItem(m.mediaPages, "GP_MEDIA_PAGES", "", "Media Page " + str(i), "Items: "+page_start_dply+" thru "+page_end_dply) + end for + + m.mediaPageList.content = m.mediaPages + displayMediaPages() + end if +End Sub + + +Sub displayMediaPages() + print "Browse.brs [displaymediaPages]" + + m.mediaPageList.visible = true + hideMarkupGrid() + + m.mediaPageList.setFocus(true) + + 'Watch for events - Unobserve first to make sure we're not already monitoring + m.mediaPageList.unobserveField("itemFocused") + m.mediaPageList.unobserveField("itemSelected") + m.mediaPageList.observeField("itemFocused", "onMediaPageFocused") + m.mediaPageList.observeField("itemSelected", "onMediaPageSelected") +End Sub + + +Sub onMediaPageFocused() + 'Item focused + focusedItem = m.mediaPageList.content.getChild(m.mediaPageList.itemFocused) + m.mediaPageInfo2.text = focusedItem.shortdescriptionline2 +End Sub + + +Sub onMediaPageSelected() + 'Item selected + 'print "SELECTED: "; m.mediaPageList.itemSelected + + buildMediaList(m.mediaPageList.itemSelected) + +End Sub + + +Sub buildMediaList(index as integer) + m.pageSelected = index + selected = index + 1 + totalPages = m.metaData.Count() / m.itemsPerPage + page_end = 0 + page_start = m.pageSelected * m.itemsPerPage + 1 + currentCount = m.metaData.Count() - page_start + if currentCount > m.itemsPerPage then + page_end=page_start + m.itemsPerPage - 1 + else + page_end=page_start + page_end + currentCount + end if + + m.imageThumbList = createObject("RoSGNode","ContentNode") + for i = page_start-1 to page_end-1 + addItem(m.imageThumbList, "GP_BROWSE", m.metaData[i].url+getResolution("SD"), "", "") + end for + + m.itemLabelMain1.text = m.top.albumName+" (page "+selected.ToStr()+" of "+ceiling(totalPages).ToStr()+")" + loadImageList() End Sub Sub loadImageList() print "Browse.brs [loadImageList]" - m.ImageGrid.content = m.top.content - m.itemLabelMain1.text = m.top.albumName + m.ImageGrid.content = m.imageThumbList if m.top.id = "GP_VIDEO_BROWSE" then 'Copy original list since we can't change origin m.originalList = m.top.content end if + showMarkupGrid() + print "Done" + End Sub Sub onItemFocused() 'Item selected - 'print "FOCUSED: "; m.top.metaData[m.ImageGrid.itemFocused] + 'print "FOCUSED: "; m.metaData[m.ImageGrid.itemFocused] - if (m.top.metaData[m.ImageGrid.itemFocused].timestamp <> invalid) then - mypath = CreateObject("roPath", m.top.metaData[m.ImageGrid.itemFocused].url) + if (m.metaData[m.ImageGrid.itemFocused].timestamp <> invalid) then + mypath = CreateObject("roPath", m.metaData[m.ImageGrid.itemFocused].url) fileObj = myPath.Split() - timestamp = friendlyDate(m.top.metaData[m.ImageGrid.itemFocused].timestamp) - m.itemLabelMain2.text = m.top.metaData[m.ImageGrid.itemFocused].filename + " - " + timestamp + timestamp = friendlyDate(m.metaData[m.ImageGrid.itemFocused].timestamp) + m.itemLabelMain2.text = m.metaData[m.ImageGrid.itemFocused].filename + " - " + timestamp end if End Sub @@ -57,7 +160,7 @@ Sub onItemSelected() if m.top.id = "GP_IMAGE_BROWSE" then m.screenActive = createObject("roSGNode", "DisplayPhotos") - m.screenActive.startIndex = m.ImageGrid.itemSelected + m.screenActive.startIndex = m.ImageGrid.itemSelected + (m.pageSelected * m.itemsPerPage) m.screenActive.predecessor = m.top.predecessor m.screenActive.albumobject = m.top.albumobject m.screenActive.content = m.top.metaData @@ -72,8 +175,8 @@ Sub onItemSelected() if m.global.SlideshowOrder <> "" m.showOrder = m.global.SlideshowOrder if m.global.VideoContinuePlay <> "" m.showVideoPlayback = m.global.VideoContinuePlay - m.videoPlayingindex = m.ImageGrid.itemSelected - doVideoShow(m.top.metaData[m.ImageGrid.itemSelected]) + m.videoPlayingindex = m.ImageGrid.itemSelected + (m.pageSelected * m.itemsPerPage) + doVideoShow(m.metaData[m.ImageGrid.itemSelected + (m.pageSelected * m.itemsPerPage)]) end if End Sub @@ -96,9 +199,9 @@ Sub doVideoShow(videoStore as object) videoContent.streamformat = "mp4" videoContent.Title = friendlyDate(videoStore.timestamp) if videoStore.description <> "" then - videoContent.TitleSeason = videoStore.description + " - " + thumbnailObj.filename + videoContent.TitleSeason = videoStore.description + " - " + videoStore.filename else - videoContent.TitleSeason = thumbnailObj.filename + videoContent.TitleSeason = videoStore.filename end if m.VideoPlayer.visible = true @@ -121,20 +224,20 @@ Sub onVideoStateChange() if m.showVideoPlayback = "Continuous Video Playback" then if m.showOrder = "Random Order" then 'Create image display list - RANDOM - m.videoPlayingindex = GetRandom(m.top.metaData) + m.videoPlayingindex = GetRandom(m.metaData) else if m.showOrder = "Reverse Album Order" 'Create image display list - REVERSE ALBUM ORDER m.videoPlayingindex = m.videoPlayingindex-1 - if (m.top.metaData[m.videoPlayingindex]=invalid) m.videoPlayingindex = m.top.metaData.Count()-1 + if (m.metaData[m.videoPlayingindex]=invalid) m.videoPlayingindex = m.metaData.Count()-1 else 'Create image display list - ALBUM ORDER m.videoPlayingindex = m.videoPlayingindex+1 - if (m.top.metaData[m.videoPlayingindex]=invalid) m.videoPlayingindex = 0 + if (m.metaData[m.videoPlayingindex]=invalid) m.videoPlayingindex = 0 end if - if m.top.metaData[m.videoPlayingindex]<>invalid + if m.metaData[m.videoPlayingindex]<>invalid 'Continue playing the next video inline - doVideoShow(m.top.metaData[m.videoPlayingindex]) + doVideoShow(m.metaData[m.videoPlayingindex]) end if else 'Close video screen @@ -207,6 +310,7 @@ End Sub Sub showMarkupGrid() + m.mediaPageList.visible = false m.ImageGrid.visible = true m.itemLabelMain1.visible = true m.itemLabelMain2.visible = true @@ -227,6 +331,16 @@ Sub showTempSetting() End Sub +Sub addItem(store as object, id as string, hdgridposterurl as string, shortdescriptionline1 as string, shortdescriptionline2 as string) + item = store.createChild("ContentNode") + item.id = id + item.title = shortdescriptionline1 + item.hdgridposterurl = hdgridposterurl + item.shortdescriptionline1 = shortdescriptionline1 + item.shortdescriptionline2 = shortdescriptionline2 +End Sub + + Function onKeyEvent(key as String, press as Boolean) as Boolean if press then if key = "back" @@ -242,6 +356,9 @@ Function onKeyEvent(key as String, press as Boolean) as Boolean m.VideoPlayer.unobserveField("state") writeVideoPosition(m.VideoPlayer.position) return true + else if (m.mediaPageList.visible = false) and (ceiling(m.metaData.Count() / m.itemsPerPage) > 1) + displayMediaPages() + return true end if else if (key = "options") and (m.screenActive = invalid) showTempSetting() diff --git a/components/Slideshow/Browse/Browse.xml b/components/Slideshow/Browse/Browse.xml index 0f6d9ed..33f7571 100644 --- a/components/Slideshow/Browse/Browse.xml +++ b/components/Slideshow/Browse/Browse.xml @@ -61,6 +61,43 @@ + + + + 0 then - m.imageDisplay = m.albumActiveObject["SearchResults"].imagesMetaData + 'Copy original list since we can't change origin + originalList = m.albumActiveObject["SearchResults"].imagesMetaData + + for i = 0 to m.albumActiveObject["SearchResults"].imagesMetaData.Count()-1 + + if m.top.startIndex <> -1 then + 'If coming from browsing, only show in Album Order + nxt = 0 + else + if m.showOrder = "Random Order" then + 'Create image display list - RANDOM + nxt = GetRandom(originalList) + else if m.showOrder = "Reverse Album Order" + 'Create image display list - REVERSE ALBUM ORDER + nxt = originalList.Count()-1 + else + 'Create image display list - ALBUM ORDER + nxt = 0 + end if + end if + + originalList[nxt].url = originalList[nxt].url+getResolution(m.showRes) + m.imageDisplay.push(originalList[nxt]) + originalList.Delete(nxt) + end for end if end if End Sub diff --git a/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.brs b/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.brs index f6552a4..23a0369 100644 --- a/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.brs +++ b/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.brs @@ -441,12 +441,9 @@ End Function Sub onLoadMonitor(event as object) print "Status: "; event.getdata() if event.getdata() = "failed" then - print "ERROR TRIGGERED" if m.URLRefreshTimer.control <> "start" then onURLRefreshTigger() m.URLRefreshTimer.control = "start" - else - print "NO TRIGGER" end if end if @@ -470,10 +467,27 @@ Sub onApiTimerTrigger() print "API CALLS LEFT: "; m.apiPending if m.apiPending = 0 then - m.apiTimer.control = "stop" - + m.apiTimer.control = "stop" if m.albumActiveObject["SearchResults"].showcountend > 0 then - m.imageDisplay = m.albumActiveObject["SearchResults"].imagesMetaData + 'Copy original list since we can't change origin + originalList = m.albumActiveObject["SearchResults"].imagesMetaData + + for i = 0 to m.albumActiveObject["SearchResults"].imagesMetaData.Count()-1 + if m.top.showorder = "Random Order" then + 'Create image display list - RANDOM + nxt = GetRandom(originalList) + else if m.top.showorder = "Reverse Album Order" + 'Create image display list - REVERSE ALBUM ORDER + nxt = originalList.Count()-1 + else + 'Create image display list - ALBUM ORDER + nxt = 0 + end if + + originalList[nxt].url = originalList[nxt].url+getResolution(m.top.showres) + m.imageDisplay.push(originalList[nxt]) + originalList.Delete(nxt) + end for end if end if End Sub diff --git a/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.xml b/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.xml index 5ff75c7..ac30ffc 100755 --- a/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.xml +++ b/components/Slideshow/DisplayPhotos/MultiScroll/MultiScroll.xml @@ -7,6 +7,7 @@ + diff --git a/components/Slideshow/Tasks/ImageCacher.xml b/components/Slideshow/Tasks/ImageCacher.xml index 9acc3d8..3d96c2a 100644 --- a/components/Slideshow/Tasks/ImageCacher.xml +++ b/components/Slideshow/Tasks/ImageCacher.xml @@ -30,26 +30,31 @@ for i = 0 to m.top.remotearray.Count()-1 item = m.top.remotearray[i] - - unique = Rnd(10000) - mypath = CreateObject("roPath", item.url) - fileObj = myPath.Split() - - fname = "tmp:/" + itostr(unique) + "_" + item.filename - - 'print "Fname: "; fname - 'print "Caching Image: "; item.url - - httpObj.setUrl(item.url) - httpObj.AsyncGetToFile( fname ) - - msg = wait(0, port) - - 'print " -- download result ["; fname; "] - Result ["; msg.GetResponseCode(); "]" - if msg.GetResponseCode() = 403 then - response["ACCESS ERROR"] = "403" + + rxLocal = CreateObject("roRegex", "pkg:/", "i") + if rxLocal.IsMatch(item.url) then + response[item.url] = item.url else - response[item.url] = fname + unique = Rnd(10000) + mypath = CreateObject("roPath", item.url) + fileObj = myPath.Split() + + fname = "tmp:/" + itostr(unique) + "_" + item.filename + + 'print "Fname: "; fname + 'print "Caching Image: "; item.url + + httpObj.setUrl(item.url) + httpObj.AsyncGetToFile( fname ) + + msg = wait(0, port) + + 'print " -- download result ["; fname; "] - Result ["; msg.GetResponseCode(); "]" + if msg.GetResponseCode() = 403 then + response["ACCESS ERROR"] = "403" + else + response[item.url] = fname + end if end if end for diff --git a/components/Utils/Common.brs b/components/Utils/Common.brs index 30114e5..bfb6e13 100644 --- a/components/Utils/Common.brs +++ b/components/Utils/Common.brs @@ -13,7 +13,7 @@ Function loadCommon() ' Common varables for needed for Oauth and GooglePhotos API - m.releaseVersion = "3.0" + m.releaseVersion = "3.2" m.gp_scope = "https://photoslibrary.googleapis.com" m.gp_prefix = m.gp_scope + "/v1" diff --git a/data/TipsAndTricks/tipsContent.xml b/data/TipsAndTricks/tipsContent.xml index 1da5f19..9a21089 100644 --- a/data/TipsAndTricks/tipsContent.xml +++ b/data/TipsAndTricks/tipsContent.xml @@ -5,6 +5,6 @@ - + diff --git a/images/screensaver_splash.png b/images/screensaver_splash.png index 0dded2d..2f1d936 100644 Binary files a/images/screensaver_splash.png and b/images/screensaver_splash.png differ diff --git a/manifest b/manifest index b6dcecf..097b728 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ title=PhotoView for Google Photos # major_version=5 -minor_version=203 -build_version=20190319 +minor_version=226 +build_version=20190419 # mm_icon_focus_fhd=pkg:/images/mm_icon_focus_hd.png mm_icon_focus_hd=pkg:/images/mm_icon_focus_hd.png @@ -18,3 +18,4 @@ screensaver_private=0 # splash_min_time=2000 ui_resolutions=fhd +confirm_partner_button=1