Activity

dark

Shipped this project!

Hours: 29.67
Cookies: 🍪 548
Multiplier: 18.48 cookies/hr

I have built a tool to make backups of game saves so you can’t lose them or have the bad news that they are suddenly corrupted, the game in question is R.E.P.O hence why the name RepoGuardia, RepoGuardia lets you do the following: Create a backup, manage your created backups by letting you first of all restore the save from the backup in the same state when you first took the snapshot, you can delete the unwanted backups without having to leave the app to find your file manager, and you can also put a customized label on each of them so you can know which one is which so it doesn’t become a mess. Example of using the customized labeling system: You are at the level 5 and the friends you play with are named Xander and Thomson, you can put the following label on the corresponding backup “Level 5 with Xander and Thomson” (That’s how i do it at least).

Now let’s talk about the hardest part of the entire project, it’s the rust backend, i had to learn from start to finish how things worked in rust and how the whole Cargo and Crates system behaved to be able to first understand how to use the tools properly, but also to know how i could make the code do what i had in mind, at first there wasn’t even any GUI, i did had the idea in my head but it was just an idea, then it became obvious that if i wanted to see my project have a chance to be used by actual peoples and not just me i had to dive into finding how to make a GUI for my code, turns out Tauri does it well as it’s combining rust for the back-end and a web framework for the front-end, i took Vue because of its reputation for having a better learning curve than the other available while still being powerful for my needs, as the scripting goes i’ve chosen TypeScript because i had worked with it before already and felt better with it.
But in the end, here we are, everything clicked into place and RepoGuardia is born, i’m so, so, soooo happy how the project turned out ahah, thank you for reading, and thanks to everyone who supported me through the development my project :)

dark

GitHub Full README file: https://github.com/Tr3yWay996/RepoGuardia/blob/GUI/README.md
Since my last devlog the interface and the inner workings of the software has taken a pretty large step up, a glow up if you want to call it like that, goodbye the cluttered main menu, the clunky navigation between each fundamental functions of the software, the fact that Windows users were forced to set their game save directory themselves as well as creating their own backups folder and putting the path in the configuration modal, goodbye to all that and hello to the new way of using RepoGuardia. You now have two buttons, from 6 up to 7 buttons down to 2 that does the exact same task, one is to do the backups, the other one is to manage them, and by manage I mean being able to delete them either using keyboard ‘Del’ key or the HTML button, restoring the saves using the enter key (or the button) and most importantly the label, yes that’s right you can now rename your backups so you can know which one is what, example: You are at the level 5, and you play with two friends named Thomson and the other Xander, well now you can back up the save showing at the top of the list (they are sorted by last modification date) and putting its label to “Level 5 with Thomson and Xander”, cool right ? eh eh
The current latest version of RepoGuardia is the new 0.3.0 release on the GitHub, this is the version that I will ship at, since from what I understood earlier in the month is that we can afterward edit the shipped project, and since the only changes are going to be visual ones (doesn’t mean no major changes though, just don’t have anything big in mind currently)
So after all that very hard work i feel like the project is ready to be published officially for the FlavorTown Hackclub event, I loved working on this project and I will probably keep updating it until it’s polished to the point where nothing can be changed to make it better even in the slighest.

Thank you

0
dark

#It’s usable again :dance:
Restoring function fully working as intended now after many tinkering with formatting and PathBuf handling, the core behavior is the same as how i made the backup function just that here it reads the metadata.json in the parent directory of the save backup to get the correct directory to copy inside the game save directory

0
dark

The old backup logic was unfortunately too intertwined with an interactive CLI direct usage workflow that a simple port was not possible, for the following to work I had to completely rewrite the entire save backup workflow logic, that mean: Rewritten the unique (enough) ID attached to the save original folder passed as a variable to the fillesystem crate in order to create the receiving deduped folder such as if the game save directory is named REPO_SAVE_TEST in the game’s save directory as such ‘AppData/LocalLow/semiwork/Repo/saves/REPO_SAVE_TEST’ a new folder would be created in ‘Repo/backups/REPO_SAVE_TEST.358’.

Then REPO_SAVE_TEST.358 becomes the new root of the backup folder that will receive the actual save folder from earlier (saves/REPO_SAVE_TEST) and be added like this: REPO_SAVE_TEST.358/REPO_SAVE_TEST/REPO_SAVE_TEST.es3 (there are plenty of other files but for devlog purposes I only include this one, not even mentioning the fact that the real R.E.P.O save system also add a prefix containing the current date and timestamp of the creation date of the same)

Result: REPO_SAVE_TEST secured inside the backup folder REPO_SAVE_TEST.358 and ready to be moved back to its original game save directory.

Now i need to work on the reverse, the backup restore function, see you soon! (hopefully)

0
dark

I’m finally back to work

Currently working on converting the CLI terminal interface into a proper bare-metal Rust backend, one that simply takes data in and outputs data out depending on what the frontend gives it, rather than the backend driving its own input. That’s not how backends work, after all.

I’m also separating each major function into its own Rust source file, as seen in the attached screenshot. The main.rs shouldn’t (not that it’s impossible) hold all the backend logic. It should be the place where you define the barebone functions and expose them to Vue, or whichever frontend framework you’re using inside your Tauri app. Not the other way around.

What I’m showing here is exactly that. You have the list_backup and list_saves logic hidden behind external functions named accordingly. These get defined for Tauri and then added as command proxies using the [tauri::command] flag in front of a small wrapper function, in this case simply fn list_saves, returning the same data type as the real some_listing_action.rs source file and calling its publicly exposed list_saves function.

Thank you for reading this devlog! I hope to stay more focused on this project so I can finally finish it, it’s already taken quite a while. The hardest parts are still ahead though, like the logic for creating backups and restoring from them. Those will likely need a full rewrite.

Attachment
0
dark

I have made great UI advancements since last time, looking way better I bet, doesn’t it? Ahah.
First of all, I have added a whole bunch of theming to the main interface background and buttons (Can you guess/find what image I took and applied a heavy Gaussian blur to ? Little hint: it’s the main topic of this tool :] ) so they have a bright green border when interacting with it, added a way to return to the main menu, to the tool settings (placeholder for now, but there’s no logic behind its page buttons for now), where you will be able to set the game save path, backup path, and game version (will probably do so it asks the version at every start while reminding the last used version, like how it was on its older brother, the CLI tool).
So yeahhh this is what I did so far eheh.
Also I need to refactor how most of the original code is to work as a backend with Tauri though so it’ll take quite some time to inish it i think

0
dark

After having nearly finished the tool with all the needed features and functionality needed for the tool to be usable in its current state, an idea came to my mind, an idea that would make my entire project take a complete turn on how I see it and how others will see and experience it.
It’s no longer just a fun Rust learning project; it is now a visually pleasing and fun Rust, Vue, TypeScript, and Tauri project to form a good UX and UI

So excited to show you what I can do next!!

Attachment
0
dark

Took back the development of the tool, currently transforming it into a Tauri SPA using Typescript + Vue as the frontend because apparently it’s easier to learn than React and PNPM as the packet manager because I know how it works and have used it quite a lot in the past for other things already.
I feel like this will be long and hard..

Attachment
Attachment
0
dark

Polished the following functions and features:
1 - Isolating save backups by the selected version for all options that asks for it
2 - Ability to list all backups with their respective information
3 - Ability to create incremental backups by game versions
4 - Ability to restore backups to their original save
5 - Ability to delete backups

What still needs to be done:
1 - handling Ctrl + C keyboard actions to return to the main menu if inside an option, and to quit the program if already in the main menu
2 - handling of user input errors retry instead of returning to the main menu
3 - better TUI user experience

Attachment
Attachment
0
dark

Finally finished writing the backup deletion function, yay!

Attachment
0
dark

These frequent micro burn-outs from dev work are annoying… but i’m back with some updates!
I have fixed an issue with the save unique number assignment system that relies on :chrono crate to get a timestamp of the amount of milliseconds that has passed whiting the last second

Attachment
Attachment
1

Comments

chefpenguino
chefpenguino 2 months ago

burnout is real 💔

dark

Making my own way ot printing colored segments of strings so i can write smth like “Type ‘togo’ to choose the to-go configuration file, otherwise just press enter for the default one” where “togo” would be one color, “press enter” another one and the whole text another one. We’ll see how it goes

Attachment
0
dark

Modified how each options gather the config, now it can support multiple ones with a prompt asking which one to use at the start of the program

Attachment
Attachment
Attachment
Attachment
0
dark

Making the backup delete functionality, but also more like doing side-quests for now

Attachment
0