GSoC 2020 - Saved game manager for RetroPlayer
#1
@garbear  Hi, we were talking with velocity in the irc channel about this https://github.com/xbmc/xbmc/blob/master...e.cpp#L105 method. I wanted to implement this to do some PR for my submission and I have a question about the purpose of the method, should this method just change the label of the save state or it should also rename the stored file. I understand that the way the file is stored will change but for now should I implement this method (and/or the delete method)
Reply
#2
As mentioned on PM, it depends on how the save file and its meta data is going to be stored.

@garbear regarding the project description - do we even need to create/interact with a db for this? Can't we use the filesystem? So like, have a specific dir structure with games as dirs and saves / thumbnails would be placed in there. Or do we need to store more information we can't easily store on the filesystem?
Mostly working on Retroplayer graphics.
GitHub: github.com/VelocityRa
Reply
#3
(2020-03-01, 23:31)NikosSiak Wrote: @garbear  Hi, we were talking with velocity in the irc channel about this https://github.com/xbmc/xbmc/blob/master...e.cpp#L105 method. I wanted to implement this to do some PR for my submission and I have a question about the purpose of the method, should this method just change the label of the save state or it should also rename the stored file. I understand that the way the file is stored will change but for now should I implement this method (and/or the delete method)

@NikosSiak you're uncovering the history behind the current code. Back in 2012 I applied for google summer of code, got rejected, and built the project anyway 6 months later: https://github.com/xbmc/xbmc/pull/1562

The database ended up being too slow and I threw away the code. Then, in 2016, realized I could reuse the slow database for savestates, which are simple don't require much scale: https://github.com/xbmc/xbmc/pull/11034

You'll notice that https://github.com/xbmc/xbmc/pull/11034 was opened the minute after RetroPlayer was merged in https://github.com/xbmc/xbmc/pull/11022

I purposefully left a stubbed savestate database in the RetroPlayer PR. As a result, the diff of the savestate PR is a clean example of implementing the function you linked: https://github.com/xbmc/xbmc/pull/11034/...8b196adR97

Hope that helps.
Reply
#4
(2020-03-02, 01:22)velocity Wrote: @garbear regarding the project description - do we even need to create/interact with a db for this? Can't we use the filesystem? So like, have a specific dir structure with games as dirs and saves / thumbnails would be placed in there. Or do we need to store more information we can't easily store on the filesystem?

I currently avoid a database and use the filesystem as described in https://github.com/xbmc/xbmc/pull/12434 . I consider this the MVP of filesystem usage. A year later I merged the .sav and .xml file using flatbuffers in https://github.com/xbmc/xbmc/pull/14209 

I believe we can define a filesystem structure for all savable data, and then later introduce a thin database layer that indexes the saves. A further step could be to centralize saves in a single location, and allow exporting saves alongside the file, similar to how the video and music dbs can be exported.
Reply
#5
Sad 
(2020-03-05, 08:05)garbear Wrote:
(2020-03-01, 23:31)NikosSiak Wrote: @garbear  Hi, we were talking with velocity in the irc channel about this https://github.com/xbmc/xbmc/blob/master...e.cpp#L105 method. I wanted to implement this to do some PR for my submission and I have a question about the purpose of the method, should this method just change the label of the save state or it should also rename the stored file. I understand that the way the file is stored will change but for now should I implement this method (and/or the delete method)

@NikosSiak you're uncovering the history behind the current code. Back in 2012 I applied for google summer of code, got rejected, and built the project anyway 6 months later: https://github.com/xbmc/xbmc/pull/1562

The database ended up being too slow and I threw away the code. Then, in 2016, realized I could reuse the slow database for savestates, which are simple don't require much scale: https://github.com/xbmc/xbmc/pull/11034

You'll notice that https://github.com/xbmc/xbmc/pull/11034 was opened the minute after RetroPlayer was merged in https://github.com/xbmc/xbmc/pull/11022

I purposefully left a stubbed savestate database in the RetroPlayer PR. As a result, the diff of the savestate PR is a clean example of implementing the function you linked: https://github.com/xbmc/xbmc/pull/11034/...8b196adR97

Hope that helps. 
I implemented the delete method for some PR but now I see you have already done that in the past so there goes my PR
Reply
#6
(2020-03-05, 20:00)NikosSiak Wrote: I implemented the delete method for some PR but now I see you have already done that in the past so there goes my PR 

The implementation I wrote uses a database wrapper I don't think we should use. And keep in mind, adding the delete method means it needs to be accessible from the GUI, so some UI/UX work is going to be needed.
Reply
#7
(2020-03-05, 23:23)garbear Wrote:
(2020-03-05, 20:00)NikosSiak Wrote: I implemented the delete method for some PR but now I see you have already done that in the past so there goes my PR 

The implementation I wrote uses a database wrapper I don't think we should use. And keep in mind, adding the delete method means it needs to be accessible from the GUI, so some UI/UX work is going to be needed. 

Yeah I know but I started from the function, do you suggest to start the UI/UX work now and if so can you direct me to the file/class that the menu of retroplayer is rendered.
Reply
#8
(2020-03-06, 18:41)NikosSiak Wrote: Yeah I know but I started from the function, do you suggest to start the UI/UX work now and if so can you direct me to the file/class that the menu of retroplayer is rendered. 

From my experience, UI/UX work is incredibly difficult (but rewarding!) in Kodi, because the GUI and skinning engine is so massive. If you need a button, menu, dialog, or anything else in the GUI, ask me and I'll create a branch for you with the GUI element present and its implementation stubbed out.
Reply
#9
Smile 
(2020-03-11, 01:23)garbear Wrote:
(2020-03-06, 18:41)NikosSiak Wrote: Yeah I know but I started from the function, do you suggest to start the UI/UX work now and if so can you direct me to the file/class that the menu of retroplayer is rendered. 

From my experience, UI/UX work is incredibly difficult (but rewarding!) in Kodi, because the GUI and skinning engine is so massive. If you need a button, menu, dialog, or anything else in the GUI, ask me and I'll create a branch for you with the GUI element present and its implementation stubbed out. 
great!! now another question... looking around the project to find the UI/UX for the in-game menu I came across this file and I saw the $LOCALIZE string so I searched for a strings file and found this files, but when I searched for the codes that the UI was using (e.g. 35224) they weren't there. So my question is are those truly the UI/UX or I was wrong and if so were are the strings?
Reply
#10
@NikosSiak I believe the strings you are looking for are here.
Learning Linux the hard way !!
Reply
#11
(2020-03-11, 11:47)black_eagle Wrote: @NikosSiak I believe the strings you are looking for are here.
Thank you!
Reply
#12
Test builds are now available! See the links in the development thread: https://forum.kodi.tv/showthread.php?tid=356366
Reply
#13
Thank you for sharing useful information with me
Reply

Logout Mark Read Team Forum Stats Members Help
GSoC 2020 - Saved game manager for RetroPlayer0