{"id":65,"date":"2025-09-01T07:49:29","date_gmt":"2025-09-01T07:49:29","guid":{"rendered":"https:\/\/blogs.scummvm.org\/shivangnagta\/?p=65"},"modified":"2025-09-01T07:49:29","modified_gmt":"2025-09-01T07:49:29","slug":"gsoc-final-blog","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/shivangnagta\/2025\/09\/01\/gsoc-final-blog\/","title":{"rendered":"GSoC: Final Blog"},"content":{"rendered":"<h2><b>Goals of the Project<\/b><\/h2>\n<p><span style=\"font-weight: 400\">The aim of the project was to integrate a File Integrity Service into ScummVM, along with a supporting application for managing the database. The main goals were:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Populating the database with the detection entries used by ScummVM for game detection, followed by existing game file collections containing full MD5 checksums.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Developing a utility for scanning game directories and generating data to further populate the database.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Allowing users to verify their game files through this integrity service, and contribute new game variants.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Building an application for managing the server and the database with role based access.<\/span><\/li>\n<\/ol>\n<h2><b>What I Did<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A large portion of the work involved rewriting the codebase, as the existing logic for filtering and matching the filesets was not correct.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">For ensuring correctness of code while matching old game collections, a lot of manual checking was required for over 100 different engines.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">For the scan utility, I extended support for legacy Mac file formats (AppleDouble, MacBinary, etc.), ensuring proper matching with filesets present in the database.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">For user integrity service, I worked on reporting information like Missing files, Unknown Files, Mismatched Files and Ok files. Further, I built a moderation queue system for user submitted files and also solidified the checks on user submitted data to allow submission of only valid data.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">For the application, I added support for manually merging filesets, updating filesets within the application, improved search filtering and logging. Further, I added a configuration page for customising some user display settings and integrated Github OAuth with role-based access control (Admins, Moderators, and Read-only users).<\/span><\/li>\n<\/ul>\n<h2><b>Current State and What\u2019s Left<\/b><\/h2>\n<p><span style=\"font-weight: 400\">The application is in a complete working state. All the workflows are functioning properly. The remaining step is to populate the database with all existing data so the integrity service can start operating officially.<\/span><\/p>\n<h2><b>Code that got merged<\/b><\/h2>\n<p><span style=\"font-weight: 400\">List of PRs that got merged &#8211;\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Server Side:<\/span><\/p>\n<p><span style=\"font-weight: 400\"><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/36\">Github OAuth<\/a><\/span><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/35\"><span style=\"font-weight: 400\">Extending Web app features <\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/34\"><span style=\"font-weight: 400\">User File Integrity Check, Web App updates and Project Restructuring<\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/32\"><span style=\"font-weight: 400\">Scan Utility and Scanned fileset matching<\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/30\"><span style=\"font-weight: 400\">Ruff formatter and linter<\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/29\"><span style=\"font-weight: 400\">Macfiles support, Initial Seeding and matching with old game collections<\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/28\"><span style=\"font-weight: 400\">Punycode<\/span><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm-sites\/pull\/27\"><span style=\"font-weight: 400\">Readme Update<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400\">ScummVM:<\/span><\/p>\n<p><a href=\"https:\/\/github.com\/scummvm\/scummvm\/pull\/6489\"><span style=\"font-weight: 400\">Freeze issue for Integrity Dialog<\/span><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2><b>Challenges and Learnings<\/b><\/h2>\n<p><span style=\"font-weight: 400\">The most challenging part was handling the variations across engines and game variants, and ensuring correctness in the filtering and matching process while populating the database. This often required manual validation of filesets. Working on this project taught me about the level of care needed to maintain the code and the importance of sharing the thoughts with the team. It was a highly rewarding experience working with ScummVM, and I am very grateful to my mentors Sev and Rvanlaar for their guidance and support throughout the project.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Goals of the Project The aim of the project was to integrate a File Integrity Service into ScummVM, along with a supporting application for managing the database. The main goals were: Populating the database with the detection entries used by ScummVM for game detection, followed by existing game file collections containing full MD5 checksums. Developing [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-final-blog"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":1,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":66,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/posts\/65\/revisions\/66"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/shivangnagta\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}