{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":138127034,"defaultBranch":"rewrite","name":"nxdumptool","ownerLogin":"DarkMatterCore","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-06-21T06:12:20.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/5520707?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1697409607.0","currentOid":""},"activityList":{"items":[{"before":"503ce4c1a74e9b0cc45792961254f175e5e71976","after":"d64c4de09227d719f3fd542ae7943a7131c56dee","ref":"refs/heads/rewrite","pushedAt":"2024-05-26T11:31:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"utils: report IsT flag at startup","shortMessageHtmlLink":"utils: report IsT flag at startup"}},{"before":"7d5b90483591663599f478fc38987c5002fdf432","after":"503ce4c1a74e9b0cc45792961254f175e5e71976","ref":"refs/heads/rewrite","pushedAt":"2024-05-20T21:06:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"gamecard: add proper validation of root HFS partition headers in Terra gamecards","shortMessageHtmlLink":"gamecard: add proper validation of root HFS partition headers in Terr…"}},{"before":"b97fb24005ca3470d377893f5e3b5848c78be35e","after":"7d5b90483591663599f478fc38987c5002fdf432","ref":"refs/heads/rewrite","pushedAt":"2024-05-19T18:56:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"gamecard: disable hash checks on Terra gamecards","shortMessageHtmlLink":"gamecard: disable hash checks on Terra gamecards"}},{"before":"b0ce6fc618f280cf78578a4a34bd9dd0ec577cda","after":"b97fb24005ca3470d377893f5e3b5848c78be35e","ref":"refs/heads/rewrite","pushedAt":"2024-05-10T22:09:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"poc: fix crash if no user titles are available\n\nThanks to @piplup55 for testing the changes.","shortMessageHtmlLink":"poc: fix crash if no user titles are available"}},{"before":"6acdb38d11dfc6ba741e7c0118341ebb0e52d7c2","after":"b0ce6fc618f280cf78578a4a34bd9dd0ec577cda","ref":"refs/heads/rewrite","pushedAt":"2024-05-10T10:24:51.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"LayeredErrorFrame: use focus stack references\n\nOther changes include:\n\n* Codebase: remove `_i18n` operators from strings used in brls::i18n::getStr() calls.\n\n* GameCardStatusTask: rename first_notification -> skip_notification.\n* GameCardStatusTask: fire event before displaying a notification.\n\n* libs: update borealis fork.\n\n* TitlesTab: store application metadata pointer array and size into local variables.","shortMessageHtmlLink":"LayeredErrorFrame: use focus stack references"}},{"before":"7dc0f762243ecfb1135ba9d902f33a3ce0d7b983","after":"6acdb38d11dfc6ba741e7c0118341ebb0e52d7c2","ref":"refs/heads/rewrite","pushedAt":"2024-05-03T13:14:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"FileWriter: remove call to ftruncate()\n\nftruncate() may severely delay the start of a dump process for certain UMS devices, and the write speed differences when using the SD card seem to be negligible.\n\nOther changes include:\n\n* FileWriter: add log messages throughout all class methods.\n\n* log: update generic log macros to use __PRETTY_FUNCTION__ instead of __func__.\n* log: add logFormatFunctionName() function, which takes an input __PRETTY_FUNCTION__ string and parses the info we need from it.\n* log: update _logWriteFormattedStringToLogFile() and logWriteFormattedStringToBuffer() functions to reflect the other changes.","shortMessageHtmlLink":"FileWriter: remove call to ftruncate()"}},{"before":"daacdde44f02f54b871bba899a1c6f5848b90dbc","after":"7dc0f762243ecfb1135ba9d902f33a3ce0d7b983","ref":"refs/heads/rewrite","pushedAt":"2024-05-02T13:38:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Remove all references to NSWDB.\n\nOther changes include:\n\n* config: remove ConfigChecksumLookupMethod enum.\n* config: remove \"gamecard/checksum_lookup_method\" integer field.\n* config: add \"gamecard/lookup_checksum\" boolean field.\n* config: update default configuration file.\n* defines: remove all NSWDB macros.\n\n* GameCardImageDumpTask: update class to reflect the changes made to the configuration interface.\n\n* GameCardImageDumpOptionsFrame: update class to reflect the changes made to the configuration interface.\n\n* OptionsTab: remove OptionsTabUpdateFileDialog class.\n* OptionsTab: remove \"Update NSWDB XML\" element.\n\n* i18n: update localization files to reflect the rest of the changes.","shortMessageHtmlLink":"Remove all references to NSWDB."}},{"before":"34ada96e2f91a97382e1695a2aeb3572a07fb73d","after":"daacdde44f02f54b871bba899a1c6f5848b90dbc","ref":"refs/heads/rewrite","pushedAt":"2024-05-02T12:27:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"workflow: fix issues + remove ccache support\n\nProps to @Whovian9369 for helping me get the workflow to a working state once more.\n\nThis is only a temporary measure. We don't want any more people with broken nxdumptool builds. We'll reintroduce ccache support at a later time.","shortMessageHtmlLink":"workflow: fix issues + remove ccache support"}},{"before":"3356bfa89ce18c3056830518275c4800577ebda9","after":"34ada96e2f91a97382e1695a2aeb3572a07fb73d","ref":"refs/heads/rewrite","pushedAt":"2024-05-01T19:18:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] Update Makefile","shortMessageHtmlLink":"[ci skip] Update Makefile"}},{"before":"9cdbbf096b2eddd25c42d3dac191c22eeaf9edc2","after":"3356bfa89ce18c3056830518275c4800577ebda9","ref":"refs/heads/rewrite","pushedAt":"2024-05-01T18:24:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Update Makefile","shortMessageHtmlLink":"Update Makefile"}},{"before":"21f16ef0205470d55b89801e18f427c644569407","after":"9cdbbf096b2eddd25c42d3dac191c22eeaf9edc2","ref":"refs/heads/rewrite","pushedAt":"2024-05-01T16:40:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Update rewrite.yml","shortMessageHtmlLink":"Update rewrite.yml"}},{"before":"1ff3df4ecaeea7ab345710dfbf53b491d68a193d","after":"21f16ef0205470d55b89801e18f427c644569407","ref":"refs/heads/rewrite","pushedAt":"2024-05-01T11:56:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"OptionsTab: reset cached output storage value while resetting settings.\n\nOther changes include:\n\n* workflow: try manually cloning the repository instead of using the checkout action.","shortMessageHtmlLink":"OptionsTab: reset cached output storage value while resetting settings."}},{"before":"50deeeb41b876f02fb4844f6053d7ce48abc7697","after":"1ff3df4ecaeea7ab345710dfbf53b491d68a193d","ref":"refs/heads/rewrite","pushedAt":"2024-05-01T10:50:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"OptionsTab: add reset settings option.\n\nOther changes include:\n\n* gamecard: set GameCardStatus_Processing as the current gamecard status before calling gamecardLoadInfo().\n\n* workflow: try to fix the missing commit tag issue.","shortMessageHtmlLink":"OptionsTab: add reset settings option."}},{"before":"3e10421ec9abb8ab516a89cd639cf83cf5bacbfd","after":"50deeeb41b876f02fb4844f6053d7ce48abc7697","ref":"refs/heads/rewrite","pushedAt":"2024-04-30T21:02:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Improve directory layout while we still can.\n\nThe directory layout is partially based on the C++ namespaces we're currently using.\n\nOther changes include:\n\n* devoptab: move directory into \"core\".\n\n* fatfs: move directory into \"core\".\n\n* GameCardTab: move portions of logic from PopulateList() into their own methods.\n* GameCardTab: use a macro to generate the properties table.\n* GameCardTab: use a macro to add ListItem elements.\n* GameCardTab: update AddApplicationMetadataItems() method to also display the number of DLCs available in the inserted gamecard for each application whenever possible.\n\n* Makefile: remove all extra entries from the INCLUDES variable.\n\n* nxdt_includes: move HOS version structs into their own header file.\n\n* tasks: move code for each individual task into its own file(s).\n\n* title: update titleGetGameCardApplicationMetadataEntries() to also count the number of DLCs available in the inserted gamecard for any given base application.\n* title: reorder gamecard application metadata entries by name before returning the buffer in titleGetGameCardApplicationMetadataEntries().","shortMessageHtmlLink":"Improve directory layout while we still can."}},{"before":"32c097c0556784662c07533e00fade046aa2397b","after":"3e10421ec9abb8ab516a89cd639cf83cf5bacbfd","ref":"refs/heads/rewrite","pushedAt":"2024-04-29T13:26:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Add DataTransferTaskFrame and GameCardImageDumpTaskFrame classes\n\nDataTransferTaskFrame is a template class that's derived from brls::AppletFrame, which automatically starts a background task using an internal object belonging to a class derived from DataTransferTask. A DataTransferProgressDisplay view is used to show progress updates. If the background task hits an error, the class takes care of switching to an ErrorFrame view with the corresponding error message.\n\nGameCardImageDumpTaskFrame is a derived class of DataTransferTaskFrame that uses a GameCardImageDumpTask object as its background task. In layman's terms, this provides a way to fully dump gamecard images using the new UI.\n\nDataTransferTaskFrame depends on the newly added is_base_template helper from goneskiing to check if the class for the provided task is derived from DataTransferTask.\n\nOther changes include:\n\n* DataTransferProgressDisplay: rename setProgress() method to SetProgress().\n\n* DataTransferTask: move post-task-execution code into its own new private method, PostExecutionCallback(), and update both OnCancelled() and OnPostExecute() callbacks to invoke it.\n* DataTransferTask: update OnProgressUpdate() to allow sending a last progress update to all event subscribers even if the background task was cancelled.\n* DataTransferTask: update OnProgressUpdate() to allow sending a first progress update if no data has been transferred but the total transfer size is already known.\n* DataTransferTask: update OnProgressUpdate() to avoid calculating the ETA if the speed isn't greater than 0.\n\n* DumpOptionsFrame: remove UpdateOutputStorages() method.\n* DumpOptionsFrame: update class to use the cached output storage value from our RootView.\n* DumpOptionsFrame: add GenerateOutputStoragesVector() method, which is used to avoid setting dummy options while initializing the output storages SelectListItem.\n* DumpOptionsFrame: update UMS task callback to add the rest of the leftover logic from UpdateOutputStorages().\n* DumpOptionsFrame: update RegisterButtonListener() to use a wrapper callback around the user-provided callback to check if the USB host was selected as the output storage but no USB host connection is available.\n\n* ErrorFrame: use const references for all input string arguments.\n\n* FileWriter: fix a localization stirng name typo.\n* FileWriter: fix an exception that was previously being thrown by a fmt::format() call because of a wrong format specifier.\n\n* FocusableItem: add a static assert to check if the provided ViewType is derived from brls::View.\n\n* gamecard: redefine global gamecard status variable as an atomic unsigned 8-bit integer, which fixes a \"status-hopping\" issue previously experienced by repeating tasks running under other threads that periodically call gamecardGetStatus().\n\n* GameCardImageDumpOptionsFrame: define GAMECARD_TOGGLE_ITEM macro, which is used to initialize all ToggleListItem elements from the view.\n* GameCardImageDumpOptionsFrame: update button callback to push a GameCardImageDumpTaskFrame view onto the borealis stack.\n\n* GameCardImageDumpTask: move class into its own header and module files.\n* GameCardImageDumpTask: update class to also take in the checksum lookup method (not yet implemented).\n* GameCardImageDumpTask: update class to send its first progress update as soon as the gamecard image size is known.\n* GameCardImageDumpTask: update class to avoid returning a string if the task was cancelled -- DataTransferTaskFrame offers logic to display the appropiate cancel message on its own.\n\n* GameCardTab: update PopulateList() method to display the new version information available in TitleGameCardApplicationMetadataEntry elements as part of the generated TitlesTabItem objects.\n\n* i18n: add new localization strings.\n\n* OptionsTab: update background task callback logic to handle task cancellation, reflecting the changes made to DataTransferTask.\n* OptionsTab: reflect changes made to DataTransferProgressDisplay.\n\n* RootView: cache the currently selected output storage value at all times, which is propagated throughout different parts of the UI. Getter and setter helpers have been added to operate with this value.\n* RootView: add GetUsbHostSpeed() helper, which can be used by child views to retrieve the USB host speed on demand.\n* RootView: update UMS task callback to automatically reset the cached output storage value back to the SD card if a UMS device was previously selected.\n\n* title: define TitleGameCardApplicationMetadataEntry struct, which also holds version-specific information retrieved from the gamecard titles.\n* title: refactor titleGetGameCardApplicationMetadataEntries() to return a dynamically allocated array of TitleGameCardApplicationMetadataEntry elements.\n\n* usb: redefine global endpoint max packet size variable as an atomic unsigned 16-bit integer, which fixes a \"status-hopping\" issue previously experienced by repeating tasks running under other threads that periodically call usbIsReady().\n\n* UsbHostTask: add GetUsbHostSpeed() method.","shortMessageHtmlLink":"Add DataTransferTaskFrame and GameCardImageDumpTaskFrame classes"}},{"before":"56053e81050a15e38b768b0798727404bf852e7a","after":"32c097c0556784662c07533e00fade046aa2397b","ref":"refs/heads/rewrite","pushedAt":"2024-04-24T23:49:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] Add GameCardImageDumpTask and FileWriter classes\n\nGameCardImageDumpTask is a derived class of DataTransferTask, and it's designed to dump a gamecard image using the options selected by the user (which must be passed from a GameCardImageDumpOptionsFrame object). It uses std::optional as its return type -- the idea behind this is to return error strings that may later be displayed by an ErrorFrame during the dump process (views not yet implemented).\n\nFileWriter is a class that encapsulates write operations to different storage mediums (SD card, USB host and UMS devices), based on the provided input path. It is used by GameCardImageDumpTask to painlessly write data to the right output storage without explicitly having to implement multiple code paths for all storage types as part of the actual dump code. Furthermore, FileWriter also supports writing split files to FAT-formatted UMS devices if an output file is >= 4 GiB -- part file handling is completely abstracted away from any callers.\n\nOther changes include:\n\n* AsyncTask: rename all class methods to use PascalCase naming.\n* AsyncTask: rename get() -> GetResult().\n\n* DataTransferTask: reflect the changes made to AsyncTask.\n* DataTransferTask: pause the RepeatingTask right after LoopCallback() returns true instead of pausing it in the cancel/post-execute callbacks.\n* DataTransferTask: add private FormatTimeString() method.\n* DataTransferTask: remove superfluous override for DoInBackground() -- classes derived from DataTransferTask must provide it on their own, anyway.\n* DataTransferTask: add public GetDurationString() method.\n\n* defines: update FAT32_FILESIZE_LIMIT macro to use UINT32_MAX.\n* defines: add CONCATENATION_FILE_PART_SIZE macro (used by the new FileWriter class).\n\n* DownloadTask: reflect the changes made to AsyncTask.\n\n* DumpOptionsFrame: file extension is no longer stored as a class member, nor required by the class constructor.\n* DumpOptionsFrame: change the return type for GetOutputFilePath() to bool. The method now saves its output to a variable passed by reference.\n\n* GameCardImageDumpOptionsFrame: reflect the changes made to DumpOptionsFrame.\n\n* i18n: update localization strings where applicable.\n\n* nxdt_utils: fix a potential buffer overflow in utilsGetFileSystemStatsByPath().\n\n* OptionsTab: reflect the changes made to AsyncTask.\n\n* usb: add const qualifier to the input buffer required by usbSendFileData().\n* usb: add const qualifier to the input buffer required by usbSendNspHeader().","shortMessageHtmlLink":"[ci skip] Add GameCardImageDumpTask and FileWriter classes"}},{"before":"ec993864fd49250c0fc57cd991e6d34d185b9200","after":"56053e81050a15e38b768b0798727404bf852e7a","ref":"refs/heads/rewrite","pushedAt":"2024-04-21T11:27:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"gamecard: add smarter delay to detection thread\n\nLets us respond in a better way to sudden gamecard status changes during the 3 second wait period.","shortMessageHtmlLink":"gamecard: add smarter delay to detection thread"}},{"before":"1181a95d178bf1afd6bf82b7db249e77d1e8c73b","after":"ec993864fd49250c0fc57cd991e6d34d185b9200","ref":"refs/heads/rewrite","pushedAt":"2024-04-21T11:05:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] GameCardImageDumpOptionsFrame: add gamecard task subscription\n\nLets us pop the frame itself from the view stack as soon as the gamecard is ejected. We're all about making this as fool-proof as possible.","shortMessageHtmlLink":"[ci skip] GameCardImageDumpOptionsFrame: add gamecard task subscription"}},{"before":"17ec42d812d8f9be7c8f71cec68339263a9f74db","after":"1181a95d178bf1afd6bf82b7db249e77d1e8c73b","ref":"refs/heads/rewrite","pushedAt":"2024-04-20T21:53:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] DumpOptionsFrame: add GetOutputFilePath method\n\nOther changes include:\n\n* DumpOptionsFrame: update contructors to also take a base output path string.\n\n* GameCardImageDumpOptionsFrame: simplify constructor by letting it take care of retrieving the title on its own.\n\n* nxdt_utils: remove utilsCreateOutputDirectories() function -- we'll be using utilsCreateDirectoryTree() anyway, so it's okay.","shortMessageHtmlLink":"[ci skip] DumpOptionsFrame: add GetOutputFilePath method"}},{"before":"4af144486ae79be6796f7984032fc372bec3db6b","after":"17ec42d812d8f9be7c8f71cec68339263a9f74db","ref":"refs/heads/rewrite","pushedAt":"2024-04-19T22:42:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] Add GameCardImageDumpOptionsFrame class\n\nThis commit turns DumpOptionsFrame into a non-polymorphic, non-instantiable class with an overloaded constructor, and moves most of the generic logic from its header file into a proper C++ module.\n\nGameCardImageDumpOptionsFrame is an inherited class of DumpOptionsFrame, which adds the extra option items it needs on its own.","shortMessageHtmlLink":"[ci skip] Add GameCardImageDumpOptionsFrame class"}},{"before":"6dfbb301df270274425d573b412518bad964d907","after":"4af144486ae79be6796f7984032fc372bec3db6b","ref":"refs/heads/rewrite","pushedAt":"2024-04-19T13:58:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"gamecard: add support for Header2-related areas\n\nThese changes include:\n\n* gamecard: add GAMECARD_HEADER2_OFFSET and GAMECARD_HEADER2_CERT_OFFSET macros.\n* gamecard: rename GAMECARD_CERTIFICATE_OFFSET macro to GAMECARD_CERT_OFFSET.\n* gamecard: add GameCardFlags2 enum.\n* gamecard: update GameCardHeader struct to reflect the new Flags2 field.\n* gamecard: add GameCardHeader2, GameCardHeader2EncryptedData and GameCardHeader2Certificate structs.\n* gamecard: update gamecardReadHeader() to check if the `Has10Certificate` flag is set in the gamecard header. If it is, the function will read and log both Header2 and Header2Certificate areas, and it will also attempt to verify the RSA signature from the Header2 area.\n* gamecard: if a Header2 area is detected, an error will always be triggered for the time being. If anyone comes across this error, please get in touch me.\n\n* gamecard, fs_ext: fix signature field comments.","shortMessageHtmlLink":"gamecard: add support for Header2-related areas"}},{"before":"de7176838075bb5b3d0cef749f231f3a49c4053d","after":"6dfbb301df270274425d573b412518bad964d907","ref":"refs/heads/rewrite","pushedAt":"2024-04-19T10:08:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] Remove void keyword from C++ ctors/dtors","shortMessageHtmlLink":"[ci skip] Remove void keyword from C++ ctors/dtors"}},{"before":"17e0edb61ccf00f94735755cf27eb7e2e6388823","after":"de7176838075bb5b3d0cef749f231f3a49c4053d","ref":"refs/heads/rewrite","pushedAt":"2024-04-18T20:20:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] Improve UI element spacing","shortMessageHtmlLink":"[ci skip] Improve UI element spacing"}},{"before":"7d7f2d58a8d00619ef49be1a42b372baac8c0363","after":"17e0edb61ccf00f94735755cf27eb7e2e6388823","ref":"refs/heads/rewrite","pushedAt":"2024-04-18T19:58:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] OptionsTab: add option to unmount UMS devices\n\nUses a SelectListItem element with displayValue set to false to avoid displaying a value string. Furthermore, the default click event callback is replaced to check if any UMS devices are mounted before attempting to display the dropdown menu.\n\nOther changes include:\n\n* UmsTask: define UmsDeviceVectorEntry.\n* UmsTask: redefine UmsDeviceVector as a UmsDeviceVectorEntry vector.\n* UmsTask: migrate UMS device string generation logic from DumpOptionsFrame::UpdateStorages() to UmsTask::PopulateUmsDeviceVector().\n\n* DumpOptionsFrame: simplify UpdateStorages() to reflect the changes made to UmsTask.","shortMessageHtmlLink":"[ci skip] OptionsTab: add option to unmount UMS devices"}},{"before":"bd5fea1fb70ec961f646de9dc139b621bf5af27a","after":"7d7f2d58a8d00619ef49be1a42b372baac8c0363","ref":"refs/heads/rewrite","pushedAt":"2024-04-18T08:46:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] UI code quality improvements\n\n* Always use value references for periodic Borealis tasks.\n* Always use nullptr instead of NULL in C++ headers and modules (except when dealing with functions with C name mangling).\n* Update StatusInfoData to use a char array for the IP address instead of directly using the pointer returned by inet_ntoa().","shortMessageHtmlLink":"[ci skip] UI code quality improvements"}},{"before":"65b86393c2221866ecfcc64333509e97c3d684ec","after":"bd5fea1fb70ec961f646de9dc139b621bf5af27a","ref":"refs/heads/rewrite","pushedAt":"2024-04-17T19:32:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"[ci skip] DumpOptionsFrame: use SelectListItem::updateValues method","shortMessageHtmlLink":"[ci skip] DumpOptionsFrame: use SelectListItem::updateValues method"}},{"before":"101ae0a3617c45383c6628ad80f05bef1ba74d11","after":"65b86393c2221866ecfcc64333509e97c3d684ec","ref":"refs/heads/rewrite","pushedAt":"2024-04-15T13:17:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Update build.sh","shortMessageHtmlLink":"Update build.sh"}},{"before":"87daaf6a407ed442278766230edad0cd10dc63da","after":"101ae0a3617c45383c6628ad80f05bef1ba74d11","ref":"refs/heads/rewrite","pushedAt":"2024-04-15T12:47:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Update build.sh","shortMessageHtmlLink":"Update build.sh"}},{"before":"bfe301ad25097146be9cce71a2e4955e81215175","after":"87daaf6a407ed442278766230edad0cd10dc63da","ref":"refs/heads/rewrite","pushedAt":"2024-04-15T12:43:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Silly permissions","shortMessageHtmlLink":"Silly permissions"}},{"before":"27465434d479aa19854c2fba96e05933e30e70fe","after":"bfe301ad25097146be9cce71a2e4955e81215175","ref":"refs/heads/rewrite","pushedAt":"2024-04-15T12:30:51.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"DarkMatterCore","name":"Pablo Curiel","path":"/DarkMatterCore","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5520707?s=80&v=4"},"commit":{"message":"Workflow improvements.\n\nBased on the suggestions mentioned by @TSRBerry in #144.\n\nSpeeds up compilation time by using ccache + fallbacks to the latest libnx commit if the build process fails with the libnx build available in the devkitPro image.","shortMessageHtmlLink":"Workflow improvements."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEVB2SPwA","startCursor":null,"endCursor":null}},"title":"Activity · DarkMatterCore/nxdumptool"}