RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login

    Mausberry Shutdown Script Doesn't Save Metadata

    Scheduled Pinned Locked Moved ControlBlock, PowerBlock & Co.
    mausberry
    251 Posts 10 Posters 95.7k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • pjftP
      pjft @hansolo77
      last edited by

      @hansolo77 I assume, though, that what you're experiencing is that the gamelist file's date also isn't updated, though, could you confirm?

      It only saves the actual gamelists when completely exiting ES, that is correct, what I was hoping was that it was saving it, but just not recording the last game as it hadn't yet even updated it.

      cyperghostC 1 Reply Last reply Reply Quote 0
      • cyperghostC
        cyperghost @pjft
        last edited by cyperghost

        @pjft @hansolo77
        There might be a way but please do it on your own. Because that are dirty tricks....

        And this should not the intention here in this forum nor will I write a script for this becasue it does not work 100% for all usecases. To make it work to 100% there will be much maintaining in and I think version 1.2 is the one that should be used ...

        Shotgun method:

        # End Emulationstation if condition of running binary is true (Shotgun-version - no support!)
        # v1.0 07/21/17 by cyperghost - Inital run 
        # v1.1 07/22/17 - Added chown command to set right user permission for creating es-shutdown
        # v1.2 07/23/17 - Some small improvments, easier to maintain, removed echo, removed else branch 
        # v1.3 07/24/17 - Shotgun method to terminate retroarch (not maintained, use v1.2 for support)
        # greetings @pjft for his famous favorits and @meleu for the RegEx sniplet 
        espid=$( pgrep -f "/opt/retropie/supplementary/.*/emulationstation([^.]|$)" ) # detect PID of ES binary only
        if [ "$espid" ]; then                                                         # Condition: PID is not equal 0 or empty then use ES shutdown
           pkill retroarch > /dev/null 2>&1                                           # v1.3 Shotgun method to kill running emulator (untested
           sleep 2                                                                    # v1.3 Sleeptimer to give ES chance to save XML filestate (untestested)
           touch /tmp/es-shutdown && chown pi:pi /tmp/es-shutdown                     # v1.1 Change file permission of es-shutdown to user:group pi:pi
           kill $espid                                                                # v1.2 use kill@detected PID - easier to maintain now!
           exit
        fi
        # End Emulationstation if condition of running binary is true (Shotgun-version - no support!)
        

        This will end any retroarch emulator (I think Ports, advMAME, fba... and other non librettro cores won't work). Therefore I will not maintain this. After retroarch is killed by default it waits 2 seconds for ES shutdown. Then it may happen that ES updates the XML files and you will see your alst played games. Maybe it won't work, maybe you must set sleeptime higher. I can not tell you if there are any other sideeffects.

        pjftP meleuM 2 Replies Last reply Reply Quote 1
        • pjftP
          pjft @cyperghost
          last edited by

          @cyperghost thanks.

          Just to confirm, I don't expect this to be in any way to be encouraged. I'm looking at this more as an angle on how to help @hansolo77 's use case.

          Best.

          cyperghostC 1 Reply Last reply Reply Quote 0
          • meleuM
            meleu @cyperghost
            last edited by meleu

            @cyperghost @pjft
            Hey guys, I didn't read what you guys already tried, sorry. But I'm afraid it's not possible to get the results expected in the OP by killing ES. As far as I understood this part of ES code must be executed to update the gamelists: https://github.com/retropie/EmulationStation/blob/master/es-app/src/SystemData.cpp#L51

            I'm not used to ES code (maybe @pjft can help with this), but I think that that line won't be executed by killing ES while an emulator is running.

            • Useful topics
            • joystick-selection tool
            • rpie-art tool
            • achievements I made
            cyperghostC 1 Reply Last reply Reply Quote 0
            • cyperghostC
              cyperghost @pjft
              last edited by

              @pjft I see it as encourgement that @hansolo77 got now his toolbox to write a script that is intented for his usecase. All commands are given in this sniplet. If this will work?? I don't know.

              From first version up to 1.2 - I was 100% sure that this works. And this works for every user here in the forum... Any other method is simply try and error.

              1 Reply Last reply Reply Quote 1
              • cyperghostC
                cyperghost @meleu
                last edited by cyperghost

                @meleu Hi mate :)

                No problem. We know that a proper exit via pkill/kill works(remember this thread my friend?) . @hansolo77 confirmed this. It won't work if the emulator is running. So my shotgun method is to always kill emulator (retroarch) wait 2-3 seconds and then it may work becasue ES can write XML data. But I think version 1.2 of the script posted here works for all users out here. So this version should be maintained.

                meleuM 1 Reply Last reply Reply Quote 1
                • meleuM
                  meleu @cyperghost
                  last edited by

                  @cyperghost ha! good catch! can I give a suggestion?

                  your script only works properly if the user is running retroarch. I believe you can kill any emulator program launched by runcommand using this (please, test it before using!!):

                  pkill -f "$(sed -n 4p /dev/shm/runcommand.info)"
                  

                  Note: the 4th line of runcommand.info has the exact command line launched by runcommand, as you can see in this line of runcommand.sh code.

                  • Useful topics
                  • joystick-selection tool
                  • rpie-art tool
                  • achievements I made
                  1 Reply Last reply Reply Quote 1
                  • cyperghostC
                    cyperghost
                    last edited by cyperghost

                    Yes I kill only retroarch ... but I'm not sure if this is enough. If your script can find out all running emulators then the usecase works for all. But I haven't tested out now if killing emulator ... waiting 2 seconds ... hoping that ES writes XML file ... does work.

                    I think that's @hansolo77 job and then it would nice not to always kill the emulator process (=shotgun method) rather if it running, so you need a new if-then branch or make use of case selection. But I believe that is not our job :)

                    But you know I really appreciate your help, always!

                    meleuM 1 Reply Last reply Reply Quote 0
                    • meleuM
                      meleu @cyperghost
                      last edited by

                      @cyperghost said in Mausberry Shutdown Script Doesn't Save Metadata:

                      If your script can find out all running emulators

                      AFAIK EmulationStation isn't able to launch more than one emulator. You must exit the emulator, then go back to ES and then launch another emulator. Then killing the command that stays in the 4th line of /dev/shm/runcommand.info looks like a good approach for me.

                      • Useful topics
                      • joystick-selection tool
                      • rpie-art tool
                      • achievements I made
                      1 Reply Last reply Reply Quote 1
                      • cyperghostC
                        cyperghost
                        last edited by cyperghost

                        That will work. Indeed ....
                        in runcommand.info is everything stored but not if an emulator is currently running or not.
                        I would rather use runcommand.log runcommand.info, too

                        4th line
                        /opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-fceumm/fceumm_libretro.so --confi....
                        

                        and check pgrep /opt/retropie/emulators/retroarch/bin/retroarch for ex. if PID > 0
                        if yes, then an emulator seems to be running if PID empty or 0 then there is no emulator.

                        So it is surly possible to detect every emulator-run proper initiated by runcommand.sh

                        Thank you

                        @hansolo77 got his toolbox now ;) He should use it :)

                        meleuM 1 Reply Last reply Reply Quote 0
                        • meleuM
                          meleu @cyperghost
                          last edited by

                          @cyperghost Wow! You really confused me! PID > 0? Also, why are you so obsessed in killing retroarch? Is it your next victim after you killed EmulationStation so many times like it was Kenny (Sourth Park)? :)

                          If you pkill an inexistent process it doesn't hurt anything, then IMHO there's no need to check if that command is still running.

                          [PROMPT]$ pkill -f blablabla
                          [PROMPT]$ # see? nothing happens! :)
                          
                          • Useful topics
                          • joystick-selection tool
                          • rpie-art tool
                          • achievements I made
                          1 Reply Last reply Reply Quote 0
                          • cyperghostC
                            cyperghost
                            last edited by cyperghost

                            PID > 0 means it is running or not ;)
                            Okay than the approach is easy if pkill does not hurt :)

                            pkill -f "$(sed -n 4p /dev/shm/runcommand.info)"
                            

                            @hansolo77? There is a new toy ;)
                            Please instead of pkill retroarch use line above. Can you please test?
                            If all proper runs it can be pushed to version 1.3

                            ES is not a victim, it behaves like a sqarehead but with a few tricks it can be calmed down ;)
                            Knowledge is power and thank you @meleu to share your knowledge with us.

                            I think thats our passion not obsession, that would be bad!

                            1 Reply Last reply Reply Quote 1
                            • hansolo77H
                              hansolo77
                              last edited by

                              Wow guys. My email inbox is spammed. :) I'm actually not too worried about getting it to save if I'm in the middle of a game. That situation rarely comes up, and to my memory only recently while troubleshooting all this. :)

                              I will test v1.3 (adding the retroarch pkill) here in a little while. I'm suffering a massive migraine. Have had it the last 3 days. Every now and then it act's like it's feeling a little better and I can get some work done with this. I'm honestly thrilled that I've got you guys pulling your hair out on all this and have a working solution already. :)

                              Who's Scruffy Looking?

                              meleuM cyperghostC lostlessL 3 Replies Last reply Reply Quote 1
                              • meleuM
                                meleu @hansolo77
                                last edited by

                                @hansolo77 said in Mausberry Shutdown Script Doesn't Save Metadata:

                                I'm honestly thrilled that I've got you guys pulling your hair out

                                Which hair? :-)

                                • Useful topics
                                • joystick-selection tool
                                • rpie-art tool
                                • achievements I made
                                1 Reply Last reply Reply Quote 1
                                • cyperghostC
                                  cyperghost @hansolo77
                                  last edited by cyperghost

                                  @hansolo77 Please test like you want pkill retroarch works just for libretro-cores, the sniplet of @meleu works with all things that were started through runcommand.sh - so it's the more versatile way

                                  Which hair :-)

                                  nose hair! What an awful torture!

                                  1 Reply Last reply Reply Quote 1
                                  • lostlessL
                                    lostless @hansolo77
                                    last edited by

                                    The 1.2 script is working great for me as well.
                                    @hansolo77 I've solved the saving issue by having retroarch to check and write to disk the srm files every 10 seconds if its new. Its an option in retroarch under the saving menu. I learned a hard lesson powering off in the middle of a game and losing about an hours worth of gameplay.

                                    meleuM 1 Reply Last reply Reply Quote 1
                                    • meleuM
                                      meleu @lostless
                                      last edited by

                                      @lostless said in Mausberry Shutdown Script Doesn't Save Metadata:

                                      I learned a hard lesson powering off in the middle of a game and losing about an hours worth of gameplay

                                      Can you share with us what is the exact option for this? I'm highly interested.

                                      I had a similar issue while playing Terranigma after freeing 4 continents. I was playing on my GPD XD (Android device) and left the device in standby but the battery was over. And then the srm file wasn't saved... :( You know, RPGs are very time consuming...

                                      @cyperghost that's why you don't see me talking about Terranigma recently. But I'll try it again!

                                      • Useful topics
                                      • joystick-selection tool
                                      • rpie-art tool
                                      • achievements I made
                                      cyperghostC 1 Reply Last reply Reply Quote 1
                                      • cyperghostC
                                        cyperghost @meleu
                                        last edited by

                                        Can you share with us what is the exact option for this? I'm highly interested.

                                        I'm also highly interested

                                        @cyperghost that's why you don't see me talking about Terranigma recently. But I'll try it again!

                                        Do that! I'm just stick in the middle of the game. You need so much time for RPG but it makes real fun.

                                        meleuM 1 Reply Last reply Reply Quote 0
                                        • meleuM
                                          meleu @cyperghost
                                          last edited by meleu

                                          @cyperghost I think I've found it!

                                          The option is autosave_interval. Look here: https://github.com/libretro/RetroArch/blob/master/retroarch.cfg#L785

                                          300 should be a good value. 300 seconds = 5 minutes

                                          EDIT: via menu it's Settings -> Saving -> SaveRAM Autosave Interval.

                                          • Useful topics
                                          • joystick-selection tool
                                          • rpie-art tool
                                          • achievements I made
                                          lostlessL 1 Reply Last reply Reply Quote 1
                                          • lostlessL
                                            lostless @meleu
                                            last edited by

                                            @meleu that's it. I did some testing a while ago and it only writes a new file if it's been changed. So 10 seconds works good for me.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                                            Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.