├── .editorconfig
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ ├── feature_request.yml
│ └── help_wanted.yml
├── dependabot.yml
└── workflows
│ └── build.yml
├── .gitignore
├── CHANGELOG.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE.txt
├── MuseDashModTools.sln
├── MuseDashModTools.sln.DotSettings
├── MuseDashModTools.slnx
├── README.md
├── Settings.XamlStyler
├── assets
├── Analysis.png
├── Charts.png
├── Developers.png
├── MainView.png
├── Setting.png
├── Translator1.png
└── Translator2.png
├── global.json
├── src
├── MuseDashModTools.Abstractions
│ ├── DownloadServices
│ │ ├── ICustomDownloadService.cs
│ │ ├── IDownloadManager.cs
│ │ ├── IDownloadService.cs
│ │ ├── IGitHubDownloadService.cs
│ │ ├── IGitHubMirrorDownloadService.cs
│ │ └── IGiteeDownloadService.cs
│ ├── GlobalUsings.cs
│ ├── IFileSystemPickerService.cs
│ ├── IFileSystemService.cs
│ ├── ILocalService.cs
│ ├── IMessageBoxService.cs
│ ├── IModManageService.cs
│ ├── IPlatformService.cs
│ ├── IResourceService.cs
│ ├── ISettingService.cs
│ ├── IUpdateService.cs
│ ├── MuseDashModTools.Abstractions.csproj
│ ├── MuseDashModTools.Abstractions.csproj.DotSettings
│ └── Serializations
│ │ ├── IJsonSerializationService.cs
│ │ └── ISerializationService.cs
├── MuseDashModTools.Common
│ ├── Attributes
│ │ └── LazyProxyAttribute.cs
│ ├── AvaloniaResources.cs
│ ├── BuildInfo.cs
│ ├── Collections
│ │ ├── BiDictionary.cs
│ │ └── FrozenBiDictionary.cs
│ ├── Extensions
│ │ └── StringExtensions.cs
│ ├── GitHub
│ │ ├── GitHubConstants.cs
│ │ └── GitHubResources.cs
│ ├── MuseDashModTools.Common.csproj
│ ├── MuseDashModTools.Common.csproj.DotSettings
│ └── PageNames.cs
├── MuseDashModTools.Core.Generators
│ ├── BuildInfo.cs
│ ├── Generators
│ │ ├── LazyProxyExtensionsGenerator.cs
│ │ └── LazyProxyGenerator.cs
│ ├── GlobalUsings.cs
│ ├── IndentedStringBuilder.cs
│ ├── MuseDashModTools.Core.Generators.csproj
│ ├── MuseDashModTools.Core.Generators.csproj.DotSettings
│ ├── Properties
│ │ └── launchSettings.json
│ └── SourceGenerationText.cs
├── MuseDashModTools.Core
│ ├── BannedSymbols.txt
│ ├── Extensions
│ │ ├── ByteExtensions.cs
│ │ └── CoreServiceExtensions.cs
│ ├── GlobalUsings.cs
│ ├── Logger
│ │ ├── AnsiEscapeColors.cs
│ │ ├── LogConsoleFormatter.cs
│ │ └── LogFileFormatter.cs
│ ├── MuseDashModTools.Core.csproj
│ ├── MuseDashModTools.Core.csproj.DotSettings
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Proxies
│ │ └── TopLevelProxy.cs
│ ├── Services
│ │ ├── DownloadServices
│ │ │ ├── CustomDownloadService.cs
│ │ │ ├── DownloadManager.cs
│ │ │ ├── GitHubMirrorDownloadService
│ │ │ │ ├── GitHubMirrorDownloadService.Private.cs
│ │ │ │ └── GitHubMirrorDownloadService.cs
│ │ │ ├── GiteeDownloadService.cs
│ │ │ └── GithubDownloadService
│ │ │ │ ├── GitHubDownloadService.Private.cs
│ │ │ │ └── GitHubDownloadService.cs
│ │ ├── FileSystemPickerService.cs
│ │ ├── FileSystemService.cs
│ │ ├── JsonSerializationService.cs
│ │ ├── LocalService
│ │ │ ├── LocalService.Private.cs
│ │ │ └── LocalService.cs
│ │ ├── MessageBoxService.cs
│ │ ├── ModManageService
│ │ │ ├── ModManageService.Private.cs
│ │ │ └── ModManageService.cs
│ │ ├── PlatformServices
│ │ │ ├── LinuxService.cs
│ │ │ ├── MacOSService.cs
│ │ │ └── WindowsService.cs
│ │ ├── ResourceService.cs
│ │ ├── SavingService
│ │ │ ├── SavingService.Private.cs
│ │ │ └── SettingService.cs
│ │ └── UpdateService
│ │ │ ├── UpdateService.Private.cs
│ │ │ └── UpdateService.cs
│ ├── SourceGenerationContext.cs
│ └── Utils
│ │ ├── DesktopUtils.cs
│ │ └── HashUtils.cs
├── MuseDashModTools.Generators
│ ├── BuildInfo.cs
│ ├── Generators
│ │ ├── PageNavigateGenerator.cs
│ │ └── ServiceExtensionsGenerator.cs
│ ├── GlobalUsings.cs
│ ├── IndentedStringBuilder.cs
│ ├── MuseDashModTools.Generators.csproj
│ ├── MuseDashModTools.Generators.csproj.DotSettings
│ ├── Properties
│ │ └── launchSettings.json
│ └── SourceGenerationText.cs
├── MuseDashModTools.Localization
│ ├── General
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.de.resx
│ │ ├── Resources.es.resx
│ │ ├── Resources.fr.resx
│ │ ├── Resources.hr.resx
│ │ ├── Resources.hu.resx
│ │ ├── Resources.ja.resx
│ │ ├── Resources.ko.resx
│ │ ├── Resources.resx
│ │ ├── Resources.ru.resx
│ │ ├── Resources.zh-Hans.resx
│ │ └── Resources.zh-Hant.resx
│ ├── ModDescription
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.de.resx
│ │ ├── Resources.es.resx
│ │ ├── Resources.fr.resx
│ │ ├── Resources.hr.resx
│ │ ├── Resources.hu.resx
│ │ ├── Resources.ja.resx
│ │ ├── Resources.ko.resx
│ │ ├── Resources.resx
│ │ ├── Resources.ru.resx
│ │ ├── Resources.zh-Hans.resx
│ │ └── Resources.zh-Hant.resx
│ ├── MsgBox
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.de.resx
│ │ ├── Resources.es.resx
│ │ ├── Resources.fr.resx
│ │ ├── Resources.hr.resx
│ │ ├── Resources.hu.resx
│ │ ├── Resources.ja.resx
│ │ ├── Resources.ko.resx
│ │ ├── Resources.resx
│ │ ├── Resources.ru.resx
│ │ ├── Resources.zh-Hans.resx
│ │ └── Resources.zh-Hant.resx
│ ├── MuseDashModTools.Localization.csproj
│ └── XAML
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.de.resx
│ │ ├── Resources.es.resx
│ │ ├── Resources.fr.resx
│ │ ├── Resources.hr.resx
│ │ ├── Resources.hu.resx
│ │ ├── Resources.ja.resx
│ │ ├── Resources.ko.resx
│ │ ├── Resources.resx
│ │ ├── Resources.ru.resx
│ │ ├── Resources.zh-Hans.resx
│ │ └── Resources.zh-Hant.resx
├── MuseDashModTools.Models
│ ├── AppState.cs
│ ├── Chart
│ │ ├── Analytic.cs
│ │ ├── Chart.cs
│ │ ├── InfoJson.cs
│ │ └── MapInfo.cs
│ ├── Config.cs
│ ├── Controls
│ │ ├── ContributorCardItem.cs
│ │ ├── ContributorGroup.cs
│ │ ├── ContributorLink.cs
│ │ ├── DropDownButtonItem.cs
│ │ ├── DropDownMenuItem.cs
│ │ └── NavItem.cs
│ ├── DTOs
│ │ ├── LibDto.cs
│ │ └── ModDto.cs
│ ├── Enums
│ │ ├── AskType.cs
│ │ ├── ChartFilterType.cs
│ │ ├── ChartSortOptions.cs
│ │ ├── DeleteOption.cs
│ │ ├── DownloadSource.cs
│ │ ├── ModFilterType.cs
│ │ ├── ModState.cs
│ │ └── UpdateSource.cs
│ ├── GitHub
│ │ ├── GitHubRSS.cs
│ │ ├── GitHubRelease.cs
│ │ ├── GitHubReleaseAsset.cs
│ │ ├── GitHubRepoContent.cs
│ │ ├── GitHubRepoContentLinks.cs
│ │ └── ReadmeContent.cs
│ ├── GlobalUsings.cs
│ ├── Language.cs
│ ├── Lib.cs
│ ├── Mapper.cs
│ ├── Mod.cs
│ ├── MuseDashModTools.Models.csproj
│ └── MuseDashModTools.Models.csproj.DotSettings
├── MuseDashModTools.Styles
│ ├── ExtendControls
│ │ ├── DifficultyFilter.axaml
│ │ ├── DifficultyFilter.axaml.cs
│ │ ├── ImageButton.axaml
│ │ ├── ImageButton.axaml.cs
│ │ ├── NaviPanelListControl.axaml
│ │ └── NaviPanelListControl.axaml.cs
│ ├── GlobalUsing.cs
│ ├── ModToolsStyles.axaml
│ ├── MuseDashModTools.Styles.csproj
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Resources
│ │ ├── DarkResource.axaml
│ │ ├── LightResource.axaml
│ │ └── SharedResource.axaml
│ ├── Styles
│ │ ├── BorderStyles.axaml
│ │ ├── ButtonStyles.axaml
│ │ ├── ImageStyles.axaml
│ │ ├── LabelStyles.axaml
│ │ ├── SplitButtonStyles.axaml
│ │ ├── StackPanelStyles.axaml
│ │ └── TextBlockStyles.axaml
│ └── TemplatedControls
│ │ ├── ContributorCardControl.axaml
│ │ ├── ContributorCardControl.axaml.cs
│ │ ├── Difficulty.axaml
│ │ ├── Difficulty.axaml.cs
│ │ ├── NaviButtonsControl.axaml
│ │ └── NaviButtonsControl.axaml.cs
├── MuseDashModTools.Updater
│ ├── Contracts
│ │ └── ILocalService.cs
│ ├── GlobalUsings.cs
│ ├── MuseDashModTools.Updater.csproj
│ ├── Program.cs
│ └── Services
│ │ └── LocalService.cs
└── MuseDashModTools
│ ├── App.axaml
│ ├── App.axaml.cs
│ ├── Assets
│ ├── Avalonia_Logo.png
│ ├── Background-Dark.webp
│ ├── Background-Light.webp
│ ├── Contributors
│ │ ├── Balint.webp
│ │ ├── Bigbeesushi.webp
│ │ ├── KARPED1EM.webp
│ │ ├── MEMOLie.webp
│ │ ├── MNight4.webp
│ │ ├── Ronner.webp
│ │ ├── Shiron Lee.webp
│ │ ├── Super Pig.webp
│ │ ├── Ultra Rabbit.webp
│ │ ├── aquawtf.webp
│ │ ├── lxy.webp
│ │ ├── lxymahatma.webp
│ │ └── taypexx.webp
│ ├── Difficulties
│ │ ├── Easy.png
│ │ ├── Hard.png
│ │ ├── Hidden.png
│ │ └── Master.png
│ ├── DonationQRs
│ │ ├── Alipay.webp
│ │ ├── Paypal.webp
│ │ └── Wechat.webp
│ ├── DotNet_Logo.png
│ ├── Genshin.webp
│ ├── Icon.ico
│ ├── MDMC_Title.webp
│ ├── MDMC_Title_Dark.webp
│ ├── MDMC_Title_Light.webp
│ ├── MIT_Logo.png
│ ├── ML_Icon.png
│ ├── ML_Text.png
│ ├── Melon.webp
│ ├── Melon_Blur.webp
│ ├── Neko_Blur.webp
│ ├── Raw
│ │ ├── Avalonia
│ │ │ ├── Avalonia_Logo.png
│ │ │ ├── Avalonia_Logo.psd
│ │ │ └── Avalonia_Logo.svg
│ │ ├── Background
│ │ │ ├── Background-Dark.png
│ │ │ ├── Background-Light.png
│ │ │ └── Original.png
│ │ ├── Blur
│ │ │ ├── Melon_Blur.png
│ │ │ ├── Melon_Blur.psd
│ │ │ ├── Neko_Blur.png
│ │ │ └── Neko_Blur.psd
│ │ ├── Contributors
│ │ │ ├── Balint.png
│ │ │ ├── Bigbeesushi.jpg
│ │ │ ├── KARPED1EM.png
│ │ │ ├── MEMOLie.png
│ │ │ ├── MNight4.png
│ │ │ ├── Ronner.jpg
│ │ │ ├── Shiron_Lee.jpg
│ │ │ ├── Super_Pig.png
│ │ │ ├── Ultra_Rabbit.jpg
│ │ │ ├── aquawtf.png
│ │ │ ├── lxy.png
│ │ │ ├── lxymahatma.jpg
│ │ │ └── taypexx.jpg
│ │ ├── DotNet
│ │ │ ├── DotNet_Logo.png
│ │ │ ├── DotNet_Logo.psd
│ │ │ └── DotNet_Logo.svg
│ │ ├── Genshin
│ │ │ ├── Genshin.png
│ │ │ ├── Genshin.psd
│ │ │ └── Genshin.webp
│ │ ├── Icon.ico
│ │ ├── MDMC_Logo.png
│ │ ├── MDMC_Title.png
│ │ ├── MIT
│ │ │ ├── MIT_Logo.png
│ │ │ ├── MIT_Logo.psd
│ │ │ └── MIT_Logo.svg
│ │ ├── ML_Icon.png
│ │ ├── ML_Text.png
│ │ ├── Melon.png
│ │ ├── Melon_With_Mod.png
│ │ ├── MuseDash.png
│ │ ├── Neko.png
│ │ ├── QR
│ │ │ ├── Alipay.png
│ │ │ ├── QR.psd
│ │ │ └── Wechat.png
│ │ └── Title
│ │ │ ├── Title-Dark.png
│ │ │ ├── Title-Light.png
│ │ │ └── Title.psd
│ ├── Title-Dark.webp
│ ├── Title-Light.webp
│ └── classdata.tpk
│ ├── BannedSymbols.txt
│ ├── Converters
│ └── FuncValueConverters.cs
│ ├── Extensions
│ ├── JsonNodeExtensions.cs
│ ├── ServiceExtensions.cs
│ ├── StreamReaderExtensions.cs
│ ├── StringExtensions.cs
│ └── VisualExtensions.cs
│ ├── GlobalUsings.cs
│ ├── LangKeys.cs
│ ├── MuseDashModTools.csproj
│ ├── MuseDashModTools.csproj.DotSettings
│ ├── Program.cs
│ ├── Properties
│ └── AssemblyInfo.cs
│ ├── Services
│ └── NavigationService.cs
│ ├── TrimAssemblyConfig.xml
│ ├── Utils
│ └── ModDescriptionProvider.cs
│ ├── ViewModels
│ ├── Dialogs
│ │ └── DonationDialogViewModel.cs
│ ├── MainWindowViewModel.cs
│ ├── NavViewModelBase.cs
│ ├── Pages
│ │ ├── ChartingPageViewModel.cs
│ │ ├── HomePageViewModel.cs
│ │ ├── LogAnalysisPageViewModel.cs
│ │ ├── ModdingPageViewModel.cs
│ │ └── SettingPageViewModel.cs
│ ├── Panels
│ │ ├── Charting
│ │ │ ├── CharterPanelViewModel.cs
│ │ │ └── ChartsPanelViewModel.cs
│ │ ├── Modding
│ │ │ ├── DevelopPanelViewModel.cs
│ │ │ ├── MelonLoaderPanelViewModel.cs
│ │ │ └── ModsPanelViewModel.cs
│ │ └── Setting
│ │ │ ├── AboutPanelViewModel.cs
│ │ │ ├── AdvancedPanelViewModel.cs
│ │ │ ├── AppearancePanelViewModel.cs
│ │ │ ├── DownloadPanelViewModel.cs
│ │ │ ├── ExperiencePanelViewModel.cs
│ │ │ └── FileManagementPanelViewModel.cs
│ └── ViewModelBase.cs
│ └── Views
│ ├── Dialogs
│ ├── DonationDialog.axaml
│ └── DonationDialog.axaml.cs
│ ├── MainWindow.axaml
│ ├── MainWindow.axaml.cs
│ ├── Pages
│ ├── ChartingPage.axaml
│ ├── ChartingPage.axaml.cs
│ ├── HomePage.axaml
│ ├── HomePage.axaml.cs
│ ├── LogAnalysisPage.axaml
│ ├── LogAnalysisPage.axaml.cs
│ ├── ModdingPage.axaml
│ ├── ModdingPage.axaml.cs
│ ├── SettingPage.axaml
│ └── SettingPage.axaml.cs
│ └── Panels
│ ├── Charting
│ ├── CharterPanel.axaml
│ ├── CharterPanel.axaml.cs
│ ├── ChartsPanel.axaml
│ └── ChartsPanel.axaml.cs
│ ├── Modding
│ ├── DevelopPanel.axaml
│ ├── DevelopPanel.axaml.cs
│ ├── MelonLoaderPanel.axaml
│ ├── MelonLoaderPanel.axaml.cs
│ ├── ModsPanel.axaml
│ └── ModsPanel.axaml.cs
│ └── Setting
│ ├── AboutPanel.axaml
│ ├── AboutPanel.axaml.cs
│ ├── AdvancedPanel.axaml
│ ├── AdvancedPanel.axaml.cs
│ ├── AppearancePanel.axaml
│ ├── AppearancePanel.axaml.cs
│ ├── DownloadPanel.axaml
│ ├── DownloadPanel.axaml.cs
│ ├── ExperiencePanel.axaml
│ ├── ExperiencePanel.axaml.cs
│ ├── FileManagementPanel.axaml
│ └── FileManagementPanel.axaml.cs
└── tests
├── MuseDashModTools.Generators.Tests
└── MuseDashModTools.Generators.Tests.csproj
└── MuseDashModTools.Tests
├── .gitignore
├── CurrentFile.cs
├── GlobalUsings.cs
├── JsonSerializationServiceTest.cs
├── MuseDashModTools.Tests.csproj
├── VerifyChecksTests.cs
├── VerifyGlobalSettings.cs
└── snapshots
├── JsonSerializationServiceTest.DeserializeAsyncTest.verified.txt
├── JsonSerializationServiceTest.DeserializeIndentedTest.verified.txt
├── JsonSerializationServiceTest.DeserializeTest.verified.txt
├── JsonSerializationServiceTest.SerializeAsyncTest.verified.txt
├── JsonSerializationServiceTest.SerializeIndentedTest.verified.txt
└── JsonSerializationServiceTest.SerializeTest.verified.txt
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: Tell us a bug
3 | title: "[Bug]: "
4 | labels: "bug"
5 | body:
6 | - type: checkboxes
7 | id: checking1
8 | attributes:
9 | label: I'm using the latest build release of Muse Dash Mod Tools and this problem still exists.
10 | options:
11 | - label: "Yes"
12 | required: true
13 |
14 | - type: checkboxes
15 | id: checking2
16 | attributes:
17 | label: There are no similar issues on the issue list
18 | description: https://github.com/MDModsDev/MuseDashModToolsUI/issues
19 | options:
20 | - label: "Yes"
21 | required: true
22 |
23 | - type: dropdown
24 | id: os
25 | attributes:
26 | label: Operating system
27 | description: which OS you are using ?
28 | options:
29 | - Windows 10 and below
30 | - Windows 11
31 | - Ubuntu
32 | - Other Linux distribution
33 | validations:
34 | required: true
35 |
36 | - type: textarea
37 | id: bug_detail
38 | attributes:
39 | label: Bug Detail
40 | placeholder: Please describe your problem in detail
41 | validations:
42 | required: true
43 |
44 | - type: textarea
45 | id: screenshot
46 | attributes:
47 | label: Screenshots (Optional)
48 | placeholder: |-
49 | Clicking on this box and drag your screenshots or videos here to upload.
50 | Make sure the screenshots or videos are displayed normally after submitting the issue
51 | validations:
52 | required: false
53 |
54 | - type: textarea
55 | id: logs
56 | attributes:
57 | label: Logs
58 | placeholder: |-
59 | 1. Go to Logs folder under the application folder (usually MuseDashModToolsUI\Logs) and choose the bottom file.
60 | 2. If the application crashed, it should automatically open the folder and select the log file
61 | 3. Drag and drop the log file (*.log) here
62 | validations:
63 | required: true
64 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Discord
4 | url: https://discord.gg/mdmc
5 | about: If you have any questions, you can ask them on MDMC Discord server.
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: What things do you think is needed to add into Muse Dash Mod Tools UI
3 | title: "[Feature Request]: "
4 | labels: "enhancement"
5 | body:
6 | - type: textarea
7 | id: introduction
8 | attributes:
9 | label: Brief Introduction
10 | placeholder: Briefly describes the functions you want to add
11 | validations:
12 | required: true
13 |
14 | - type: textarea
15 | id: detail
16 | attributes:
17 | label: Details
18 | placeholder: More details like method parameters or what specifically the variables could do
19 | validations:
20 | required: true
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/help_wanted.yml:
--------------------------------------------------------------------------------
1 | name: Help Wanted
2 | description: You've met a problem and need help
3 | title: "[Help Wanted]: "
4 | labels: "help wanted"
5 | body:
6 | - type: dropdown
7 | id: os
8 | attributes:
9 | label: Operating system
10 | description: which OS you are using ?
11 | options:
12 | - Windows 10 and below
13 | - Windows 11
14 | - Ubuntu
15 | - Other Linux distribution
16 | validations:
17 | required: true
18 |
19 | - type: textarea
20 | id: problem_detail
21 | attributes:
22 | label: Problem Detail (Optional)
23 | placeholder: Please describe your problem
24 | validations:
25 | required: false
26 |
27 | - type: textarea
28 | id: screenshot
29 | attributes:
30 | label: Screenshots (Optional)
31 | placeholder: |-
32 | Clicking on this box and drag your screenshots or videos here to upload.
33 | Make sure the screenshots or videos are displayed normally after submitting the issue
34 | validations:
35 | required: false
36 |
37 | - type: textarea
38 | id: logs
39 | attributes:
40 | label: Logs
41 | placeholder: |-
42 | 1. Go to Logs folder under the application folder (usually MuseDashModToolsUI\Logs) and choose the bottom file.
43 | 2. If the application crashed, it should automatically open the folder and select the log file
44 | 3. Drag and drop the log file (*.log) here
45 | validations:
46 | required: true
47 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "nuget"
4 | target-branch: "dev/rewrite"
5 | directory: "/"
6 | schedule:
7 | interval: "daily"
8 | open-pull-requests-limit: 10
9 |
10 | - package-ecosystem: "github-actions"
11 | target-branch: "dev/rewrite"
12 | directory: "/"
13 | schedule:
14 | interval: "daily"
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build and Test Project
2 |
3 | on:
4 | push:
5 | branches:
6 | - 'master'
7 | - 'dev'
8 | tags:
9 | - 'v?[0-9]+.[0-9]+.[0-9]+'
10 | paths:
11 | - src/**
12 | - tests/**
13 | pull_request:
14 | branches:
15 | - 'master'
16 | - 'dev'
17 | workflow_dispatch:
18 |
19 | defaults:
20 | run:
21 | shell: bash
22 |
23 | jobs:
24 | build:
25 | strategy:
26 | fail-fast: false
27 | matrix:
28 | build-type:
29 | - Debug
30 | - Release
31 | target-platform:
32 | - { os: ubuntu-latest, name: linux }
33 | - { os: windows-latest, name: win }
34 | target-arch:
35 | - x64
36 | - arm64
37 | dotnet-version:
38 | - '9.0'
39 | runs-on: ${{ matrix.target-platform.os }}
40 | steps:
41 | - name: Checkout
42 | uses: actions/checkout@v4
43 |
44 | - name: Setup dotnet
45 | uses: actions/setup-dotnet@v4
46 | with:
47 | dotnet-version: ${{ matrix.dotnet-version }}
48 |
49 | - name: Build Project
50 | run: |
51 | dotnet publish -a ${{ matrix.target-arch }} -c ${{ matrix.build-type }}
52 |
53 | - name: Test Project
54 | run: |
55 | dotnet test -c ${{ matrix.build-type }}
56 |
57 | - name: List Result
58 | working-directory: ./
59 | run: |
60 | ls -l bin/${{ matrix.build-type }}/net${{ matrix.dotnet-version }}/${{matrix.target-platform.name}}-${{ matrix.target-arch }}/publish
61 |
62 | - name: Upload Artifacts
63 | uses: actions/upload-artifact@v4
64 | with:
65 | name: MuseDashModTools-${{ matrix.build-type }}-${{matrix.target-platform.name}}-net${{ matrix.dotnet-version }}-${{ matrix.target-arch }}
66 | path: bin/${{ matrix.build-type }}/net${{ matrix.dotnet-version }}/${{matrix.target-platform.name}}-${{ matrix.target-arch }}/publish/*
67 |
--------------------------------------------------------------------------------
/Directory.Build.props:
--------------------------------------------------------------------------------
1 |
2 |
3 | net9.0
4 | enable
5 | preview
6 | enable
7 | true
8 |
9 |
10 |
11 | none
12 |
13 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024-2025 MDModsDev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/MuseDashModTools.sln.DotSettings:
--------------------------------------------------------------------------------
1 |
4 | True
--------------------------------------------------------------------------------
/MuseDashModTools.slnx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Settings.XamlStyler:
--------------------------------------------------------------------------------
1 | {
2 | "AttributesTolerance": 2,
3 | "KeepFirstAttributeOnSameLine": true,
4 | "MaxAttributeCharactersPerLine": 0,
5 | "MaxAttributesPerLine": 1,
6 | "NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter",
7 | "SeparateByGroups": true,
8 | "AttributeIndentation": 0,
9 | "AttributeIndentationStyle": 1,
10 | "RemoveDesignTimeReferences": false,
11 | "IgnoreDesignTimeReferencePrefix": false,
12 | "EnableAttributeReordering": true,
13 | "AttributeOrderingRuleGroups": [
14 | "xmlns, xmlns:x",
15 | "xmlns:*",
16 | "x:Class, x:DataType",
17 | "DataContext",
18 | "x:Key, Key, x:Name, Name, x:Uid, Uid, x:*, Title",
19 | "Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, DockPanel.Dock, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
20 | "Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
21 | "Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
22 | "PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
23 | "mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText, d:*",
24 | "Storyboard.*, From, To, Duration",
25 | "*:*, *"
26 | ],
27 | "FirstLineAttributes": "Name, x:Name, Grid.Row, Grid.Column",
28 | "OrderAttributesByName": true,
29 | "PutEndingBracketOnNewLine": false,
30 | "RemoveEndingTagOfEmptyElement": true,
31 | "SpaceBeforeClosingSlash": true,
32 | "RootElementLineBreakRule": 0,
33 | "ReorderVSM": 2,
34 | "ReorderGridChildren": true,
35 | "ReorderCanvasChildren": false,
36 | "ReorderSetters": 3,
37 | "FormatMarkupExtension": true,
38 | "NoNewLineMarkupExtensions": "x:Bind, Binding, TemplateBinding",
39 | "ThicknessSeparator": 2,
40 | "ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin",
41 | "FormatOnSave": true,
42 | "CommentPadding": 2
43 | }
--------------------------------------------------------------------------------
/assets/Analysis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Analysis.png
--------------------------------------------------------------------------------
/assets/Charts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Charts.png
--------------------------------------------------------------------------------
/assets/Developers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Developers.png
--------------------------------------------------------------------------------
/assets/MainView.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/MainView.png
--------------------------------------------------------------------------------
/assets/Setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Setting.png
--------------------------------------------------------------------------------
/assets/Translator1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Translator1.png
--------------------------------------------------------------------------------
/assets/Translator2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MDModsDev/MuseDashModTools/a340199c9dbd3d79ffcebefa2d5b1d4478c06fe3/assets/Translator2.png
--------------------------------------------------------------------------------
/global.json:
--------------------------------------------------------------------------------
1 | {
2 | "sdk": {
3 | "version": "9.0.0",
4 | "rollForward": "latestMajor",
5 | "allowPrerelease": true
6 | }
7 | }
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/ICustomDownloadService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface ICustomDownloadService : IDownloadService;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/IDownloadManager.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IDownloadManager : IDownloadService;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/IDownloadService.cs:
--------------------------------------------------------------------------------
1 | using Downloader;
2 |
3 | namespace MuseDashModTools.Abstractions;
4 |
5 | public interface IDownloadService
6 | {
7 | Task DownloadMelonLoaderAsync(
8 | EventHandler onDownloadStarted,
9 | IProgress downloadProgress,
10 | CancellationToken cancellationToken = default);
11 |
12 | Task DownloadModAsync(ModDto mod, CancellationToken cancellationToken = default);
13 | Task DownloadLibAsync(LibDto lib, CancellationToken cancellationToken = default);
14 | Task DownloadReleaseByTagAsync(string tag, CancellationToken cancellationToken = default);
15 | Task FetchReadmeAsync(string repoId, CancellationToken cancellationToken = default);
16 | IAsyncEnumerable GetModListAsync(CancellationToken cancellationToken = default);
17 | IAsyncEnumerable GetLibListAsync(CancellationToken cancellationToken = default);
18 | }
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/IGitHubDownloadService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IGitHubDownloadService : IDownloadService;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/IGitHubMirrorDownloadService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IGitHubMirrorDownloadService : IDownloadService;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/DownloadServices/IGiteeDownloadService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IGiteeDownloadService : IDownloadService;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/GlobalUsings.cs:
--------------------------------------------------------------------------------
1 | global using System.Diagnostics.CodeAnalysis;
2 | global using MuseDashModTools.Models;
3 | global using MuseDashModTools.Models.Enums;
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/IFileSystemPickerService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IFileSystemPickerService
4 | {
5 | Task GetSingleFolderPathAsync(string dialogTitle);
6 | Task> GetMultipleFolderPathAsync(string dialogTitle);
7 | Task GetSingleFilePathAsync(string dialogTitle);
8 | Task> GetMultipleFilePathAsync(string dialogTitle);
9 | }
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/IFileSystemService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface IFileSystemService
4 | {
5 | bool CheckFileExists(string filePath);
6 | bool TryDeleteFile(string filePath, DeleteOption deleteOption = DeleteOption.FailIfNotFound);
7 | bool CheckDirectoryExists(string directoryPath);
8 | bool TryDeleteDirectory(string directoryPath, DeleteOption deleteOption = DeleteOption.FailIfNotFound);
9 | }
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/ILocalService.cs:
--------------------------------------------------------------------------------
1 | namespace MuseDashModTools.Abstractions;
2 |
3 | public interface ILocalService
4 | {
5 | Task CheckDotNetRuntimeInstallAsync();
6 | Task GetMuseDashFolderAsync();
7 | IEnumerable GetModFilePaths();
8 | IEnumerable GetLibFilePaths();
9 | Task InstallMelonLoaderAsync();
10 | Task UninstallMelonLoaderAsync();
11 | ModDto? LoadModFromPath(string filePath);
12 | LibDto LoadLibFromPath(string filePath);
13 | void LaunchGame(bool isModded);
14 | ValueTask ReadGameVersionAsync();
15 | bool ExtractZipFile(string zipPath, string extractPath);
16 | }
--------------------------------------------------------------------------------
/src/MuseDashModTools.Abstractions/IMessageBoxService.cs:
--------------------------------------------------------------------------------
1 | using Ursa.Controls;
2 |
3 | namespace MuseDashModTools.Abstractions;
4 |
5 | public interface IMessageBoxService
6 | {
7 | #region Confirm MessageBox
8 |
9 | public Task WarningConfirmMessageBoxAsync(string message, string title = "Warning");
10 |
11 | public Task FormatWarningConfirmMessageBoxAsync(string message, params ReadOnlySpan