ludusavi icon indicating copy to clipboard operation
ludusavi copied to clipboard

Expose manifest file tags in the json api

Open sharkusmanch opened this issue 3 months ago • 1 comments

What's your idea?

It would be useful to be able to programmatically differentiate config and save files for games.

In my case, I am working on some automation to automatically swap game config files based on streaming client for https://github.com/ClassicOldSong/ApolloProfileManager

The file types are already tagged in the manifest:

Example with Persona 3 Reload:

Persona 3 Reload:
  cloud:
    steam: true
  files:
    "<winAppData>/SEGA/P3R/Steam/<storeUserId>":
      tags:
        - save
      when:
        - os: windows
          store: steam
    "<winLocalAppData>/P3R/Saved/Config/WinGDK":
      tags:
        - config
      when:
        - os: windows
          store: microsoft
    "<winLocalAppData>/P3R/Saved/Config/WindowsNoEditor":
      tags:
        - config
      when:
        - os: windows
          store: steam
    "<winLocalAppData>/Packages/SEGAofAmericaInc.L0cb6b3aea_s751p9cej88mt/SystemAppData/wgs/<storeUserId>":
      tags:
        - save
      when:
        - os: windows
          store: microsoft

Would be really helpful to have the JSON api result return the corresponding tags for the matching files as well via a new tags field:

Example desired output using above manifest:

> ludusavi backup --api --preview "Persona 3 Reload"
{
  "overall": {
    "totalGames": 1,
    "totalBytes": 20601027,
    "processedGames": 1,
    "processedBytes": 20601027,
    "changedGames": {
      "new": 0,
      "different": 0,
      "same": 1
    }
  },
  "games": {
    "Persona 3 Reload": {
      "decision": "Processed",
      "change": "Same",
      "files": {
        "C:/Users/theme/AppData/Local/P3R/Saved/Config/WinGDK/GameUserSettings.ini": {
          "change": "Same",
          "bytes": 1043,
          "redirectedPath": "L:/AppData/Local/P3R/Saved/Config/WinGDK/GameUserSettings.ini",
          "tags": [
            "config"
          ]
        },
        "C:/Users/theme/AppData/Roaming/Sega/P3R/Steam/76561198046971326/SaveData1001.sav": {
          "change": "Same",
          "bytes": 1038232,
          "redirectedPath": "L:/AppData/Roaming/Sega/P3R/Steam/76561198046971326/SaveData1001.sav",
          "tags": [
            "save"
          ]
        },
      },
      "registry": {}
    }
  }
}

sharkusmanch avatar Sep 10 '25 18:09 sharkusmanch

Hi! I'm open to adding this :)

For what it's worth, there may be some false positive tags when paths overlap, so just be careful if you're trying to fully automate this. For example, I often see a pattern on PCGamingWiki like:

  • Config: %APPDATA%\Game
  • Save: %APPDATA%\Game\Save

In that case, files found in %APPDATA%\Game\Save would get both tags.

mtkennerly avatar Sep 13 '25 03:09 mtkennerly