├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ └── publish-nuget.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── Directory.Build.props ├── Extras ├── Release Notes Template │ ├── rnotes.css │ └── rnotes.html ├── Sample Appcast.xml ├── Sample Update AppCast │ ├── MetaData │ │ ├── NetSparklTestApp-1.0.1.dsa │ │ ├── NetSparklTestApp-1.0.2.dsa │ │ ├── NetSparkle_DSA.priv │ │ └── NetSparkle_DSA.pub │ └── Server Root │ │ ├── 1.0.1 │ │ ├── rnotes.css │ │ └── rnotes.html │ │ ├── 1.0.2 │ │ ├── rnotes.css │ │ └── rnotes.html │ │ └── versioninfo.xml └── SampleReleaseNotes.md ├── LICENSE.md ├── NetSparkleUpdater.sln ├── OLD_CHANGELOG.md ├── README.md ├── TestAppFiles ├── 2.0-release-notes.md ├── GenerateHashForDemoSoftware.bat ├── GenerateHashForDemoXMLUpdates.bat ├── GenerateHashForReleaseNotes.bat ├── NetSparkle_DSA.priv ├── NetSparkle_DSA.pub └── appcast.xml ├── UPGRADING.md ├── doc ├── Comments.txt ├── Languages.txt ├── Project.txt └── generated │ └── git.folder ├── nuget.config ├── nuget ├── NuGet.exe └── winformsnetframework │ └── NetSparkleUpdater.UI.WinForms.NetFramework.nuspec └── src ├── NetSparkle.Samples.Avalonia.MacOS ├── App.axaml ├── App.axaml.cs ├── Assets │ └── software-update-available.png ├── CustomSparkleUpdater.cs ├── MainWindow.axaml ├── MainWindow.axaml.cs ├── NetSparkle.Samples.Avalonia.MacOS.csproj ├── NetSparkle_DSA.pub ├── Program.cs ├── nuget.config └── software-update-available.ico ├── NetSparkle.Samples.Avalonia.MacOSZip ├── App.axaml ├── App.axaml.cs ├── Assets │ └── software-update-available.png ├── CustomSparkleUpdater.cs ├── MainWindow.axaml ├── MainWindow.axaml.cs ├── NetSparkle.Samples.Avalonia.MacOSZip.csproj ├── Program.cs ├── nuget.config └── software-update-available.ico ├── NetSparkle.Samples.Avalonia.Rollback ├── App.axaml ├── App.axaml.cs ├── Assets │ └── software-update-available.png ├── CustomSparkleUpdater.cs ├── MainWindow.axaml ├── MainWindow.axaml.cs ├── NetSparkle.Samples.Avalonia.Rollback.csproj ├── OSAppCastFilter.cs ├── Program.cs ├── nuget.config └── software-update-available.ico ├── NetSparkle.Samples.Avalonia ├── App.axaml ├── App.axaml.cs ├── Assets │ └── software-update-available.png ├── MainWindow.axaml ├── MainWindow.axaml.cs ├── NetSparkle.Samples.Avalonia.csproj ├── NetSparkle_DSA.pub ├── Program.cs ├── nuget.config └── software-update-available.ico ├── NetSparkle.Samples.DownloadedExe ├── App.config ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── NetSparkle.Samples.UpdateExe.csproj ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── app.manifest ├── NetSparkle.Samples.Forms.Multithread ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── NetSparkle.Samples.Forms.Multithread.csproj ├── NetSparkle.Samples.Forms.Multithread.csproj.user ├── NetSparkle_DSA.pub ├── Program.cs └── software-update-available.ico ├── NetSparkle.Samples.HandleEventsYourself ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── NetSparkle.Samples.HandleEventsYourself.csproj ├── NetSparkle.Samples.HandleEventsYourself.csproj.user └── NetSparkle_DSA.pub ├── NetSparkle.Samples.NetCore.WPF ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── NetSparkle.Samples.NetCore.WPF.csproj ├── NetSparkle.Samples.NetCore.WPF.csproj.user ├── NetSparkle_DSA.pub └── software-update-available.ico ├── NetSparkle.Samples.NetCore.WinForms ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── NetSparkle.Samples.NetCore.WinForms.csproj ├── NetSparkle.Samples.NetCore.WinForms.csproj.user ├── NetSparkle_DSA.pub ├── Program.cs └── software-update-available.ico ├── NetSparkle.Samples.NetFramework.WPF ├── App.xaml ├── App.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── NetSparkle.Samples.NetFramework.WPF.csproj ├── NetSparkleTestAppWPF.csproj.vspscc ├── NetSparkle_DSA.pub ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── app.config └── software-update-available.ico ├── NetSparkle.Samples.NetFramework.WinForms ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── NetSparkle.Samples.NetFramework.WinForms.csproj ├── NetSparkle.Samples.NetFramework.WinForms.csproj.user ├── NetSparkle_DSA.pub ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── app.config ├── app.manifest └── software-update-available.ico ├── NetSparkle.Samples.SimpleConsoleApp ├── .gitignore ├── BuildAppCast.sh ├── CreateAppCast.sh ├── NetSparkle.Samples.SimpleConsoleApp.csproj └── Program.cs ├── NetSparkle.Shared ├── NetSparkle.Shared.shproj ├── NetSparkleUtilities.projitems └── Utilities.cs ├── NetSparkle.Tests.AppCastGenerator ├── AppCastMakerTests.cs ├── AppCastTestCollection.cs ├── EmptyTestDataConfiguration.cs ├── FakeTestDataAssemblyAccessor.cs ├── NetSparkle.Tests.AppCastGenerator.csproj ├── SignatureManagerFixture.cs ├── SignatureManagerTests.cs └── URLEncodeTests.cs ├── NetSparkle.Tests.Trimming ├── NetSparkle.Tests.Trimming.csproj └── Program.cs ├── NetSparkle.Tests ├── AlwaysSucceedSignatureChecker.cs ├── AppCastGeneratorTests.cs ├── AppCastItemTests.cs ├── AppCastReducersTests.cs ├── AssemblyAccessorTests.cs ├── ChannelAppCastFilterTests.cs ├── ConfigurationTests.cs ├── Ed25519Tests.cs ├── EmptyTestDataConfiguration.cs ├── FakeTestDataAssemblyAccessor.cs ├── NetSparkle.Tests.csproj ├── Properties │ └── AssemblyInfo.cs ├── SemVerLikeTests.cs ├── SparkleUpdaterFixture.cs ├── SparkleUpdaterTestCollection.cs ├── SparkleUpdaterTests.cs ├── StringCastDataDownloader.cs ├── UtilitiesTests.cs ├── VersionTrimmersTests.cs ├── appcast_simple.xml └── appcast_with_beta_items.xml ├── NetSparkle.Tools.AppCastGenerator ├── App.config ├── AppCastMaker.cs ├── JsonAppCastMaker.cs ├── NetSparkle.Tools.AppCastGenerator.csproj ├── Options.cs ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── SignatureManager.cs └── XMLAppCastMaker.cs ├── NetSparkle.Tools.DSAHelper ├── NetSparkle.Tools.DSAHelper.csproj ├── NetSparkleDSAHelper.csproj.vspscc ├── Program.cs ├── Properties │ └── AssemblyInfo.cs └── app.config ├── NetSparkle.UI.Avalonia ├── CheckingForUpdatesWindow.axaml ├── CheckingForUpdatesWindow.axaml.cs ├── Controls │ └── BaseWindow.cs ├── DownloadProgressWindow.axaml ├── DownloadProgressWindow.axaml.cs ├── Helpers │ ├── ChangeNotifier.cs │ └── RelayCommand.cs ├── Interfaces │ ├── IBackgroundColorChanger.cs │ ├── IReleaseNotesDisplayer.cs │ └── IUserRespondedToUpdateCheck.cs ├── MessageNotificationWindow.axaml ├── MessageNotificationWindow.axaml.cs ├── NetSparkle.UI.Avalonia.csproj ├── UIFactory.cs ├── UpdateAvailableWindow.axaml ├── UpdateAvailableWindow.axaml.cs └── ViewModels │ ├── DownloadProgressWindowViewModel.cs │ ├── MessageNotificationWindowViewModel.cs │ └── UpdateAvailableWindowViewModel.cs ├── NetSparkle.UI.WPF ├── CheckingForUpdatesWindow.xaml ├── CheckingForUpdatesWindow.xaml.cs ├── Controls │ └── BaseWindow.cs ├── DownloadProgressWindow.xaml ├── DownloadProgressWindow.xaml.cs ├── Helpers │ ├── ChangeNotifier.cs │ └── RelayCommand.cs ├── IconUtilities.cs ├── Interfaces │ ├── IReleaseNotesDisplayer.cs │ └── IUserRespondedToUpdateCheck.cs ├── MessageNotificationWindow.xaml ├── MessageNotificationWindow.xaml.cs ├── NetSparkle.UI.WPF.csproj ├── Properties │ └── AssemblyInfo.cs ├── ToastNotification.xaml ├── ToastNotification.xaml.cs ├── UIFactory.cs ├── UpdateAvailableWindow.xaml ├── UpdateAvailableWindow.xaml.cs └── ViewModels │ ├── DownloadProgressWindowViewModel.cs │ ├── MessageNotificationWindowViewModel.cs │ └── UpdateAvailableWindowViewModel.cs ├── NetSparkle.UI.WinForms.NetCore ├── CheckingForUpdatesWindow.Designer.cs ├── CheckingForUpdatesWindow.cs ├── CheckingForUpdatesWindow.resx ├── DownloadProgressWindow.Designer.cs ├── DownloadProgressWindow.JA.resx ├── DownloadProgressWindow.bg.resx ├── DownloadProgressWindow.cs ├── DownloadProgressWindow.de.resx ├── DownloadProgressWindow.es-MX.resx ├── DownloadProgressWindow.fr.resx ├── DownloadProgressWindow.it.resx ├── DownloadProgressWindow.lt.resx ├── DownloadProgressWindow.nl.resx ├── DownloadProgressWindow.pt-BR.resx ├── DownloadProgressWindow.resx ├── DownloadProgressWindow.ru.resx ├── DownloadProgressWindow.zh-CN.resx ├── DownloadProgressWindow.zh-TW.resx ├── MessageNotificationWindow.Designer.cs ├── MessageNotificationWindow.cs ├── MessageNotificationWindow.resx ├── NetSparkle.UI.WinForms.NetCore.csproj ├── ToastNotifier.cs ├── ToastNotifier.designer.cs ├── ToastNotifier.resx ├── UIFactory.cs ├── UpdateAvailableWindow.Designer.cs ├── UpdateAvailableWindow.JA.resx ├── UpdateAvailableWindow.bg.resx ├── UpdateAvailableWindow.cs ├── UpdateAvailableWindow.de.resx ├── UpdateAvailableWindow.es-MX.resx ├── UpdateAvailableWindow.fr.resx ├── UpdateAvailableWindow.it.resx ├── UpdateAvailableWindow.lt.resx ├── UpdateAvailableWindow.nl.resx ├── UpdateAvailableWindow.pt-BR.resx ├── UpdateAvailableWindow.resx ├── UpdateAvailableWindow.ru.resx ├── UpdateAvailableWindow.zh-CN.resx └── UpdateAvailableWindow.zh-TW.resx ├── NetSparkle.UI.WinForms.NetFramework ├── CheckingForUpdatesWindow.Designer.cs ├── CheckingForUpdatesWindow.cs ├── CheckingForUpdatesWindow.resx ├── DownloadProgressWindow.Designer.cs ├── DownloadProgressWindow.JA.resx ├── DownloadProgressWindow.bg.resx ├── DownloadProgressWindow.cs ├── DownloadProgressWindow.de.resx ├── DownloadProgressWindow.es-MX.resx ├── DownloadProgressWindow.fr.resx ├── DownloadProgressWindow.it.resx ├── DownloadProgressWindow.lt.resx ├── DownloadProgressWindow.nl.resx ├── DownloadProgressWindow.pt-BR.resx ├── DownloadProgressWindow.resx ├── DownloadProgressWindow.ru.resx ├── DownloadProgressWindow.zh-CN.resx ├── DownloadProgressWindow.zh-TW.resx ├── MessageNotificationWindow.Designer.cs ├── MessageNotificationWindow.cs ├── MessageNotificationWindow.resx ├── NetSparkle.UI.WinForms.NetFramework.csproj ├── NetSparkle.UI.WinForms.NetFramework.csproj.user ├── Properties │ └── AssemblyInfo.cs ├── ToastNotifier.cs ├── ToastNotifier.designer.cs ├── ToastNotifier.resx ├── UIFactory.cs ├── UpdateAvailableWindow.Designer.cs ├── UpdateAvailableWindow.JA.resx ├── UpdateAvailableWindow.bg.resx ├── UpdateAvailableWindow.cs ├── UpdateAvailableWindow.de.resx ├── UpdateAvailableWindow.es-MX.resx ├── UpdateAvailableWindow.fr.resx ├── UpdateAvailableWindow.it.resx ├── UpdateAvailableWindow.lt.resx ├── UpdateAvailableWindow.nl.resx ├── UpdateAvailableWindow.pt-BR.resx ├── UpdateAvailableWindow.resx ├── UpdateAvailableWindow.ru.resx ├── UpdateAvailableWindow.zh-CN.resx └── UpdateAvailableWindow.zh-TW.resx ├── NetSparkle.Unused └── AsmResolverAccessor.cs └── NetSparkle ├── AppCast.cs ├── AppCastHandlers ├── AppCastHelper.cs ├── AppCastReducerDelegate.cs ├── AppCastReducers.cs ├── ChannelAppCastFilter.cs ├── JsonAppCastGenerator.cs ├── SemVerLike.cs ├── VersionTrimmerDelegate.cs ├── VersionTrimmers.cs └── XMLAppCastGenerator.cs ├── AppCastItem.cs ├── ArtWork ├── software-update-available-old.ico ├── software-update-available-old.png ├── software-update-available.ico ├── software-update-available.png └── software-update-available.svg ├── AssemblyAccessors ├── AssemblyDiagnosticsAccessor.cs └── AssemblyReflectionAccessor.cs ├── Configurations ├── Configuration.cs ├── DefaultConfiguration.cs ├── JSONConfiguration.cs ├── RegistryConfiguration.cs └── SavedConfigurationData.cs ├── Downloaders ├── AsyncHelper.cs ├── LocalFileAppCastDownloader.cs ├── LocalFileDownloader.cs ├── WebFileDownloader.cs └── WebRequestAppCastDataDownloader.cs ├── Enums ├── FilterItemResult.cs ├── InstallUpdateFailureReason.cs ├── LogWriterOutputMode.cs ├── NextUpdateAction.cs ├── SecurityMode.cs ├── UpdateAvailableResult.cs ├── UpdateStatus.cs ├── UserInteractionMode.cs └── ValidationResult.cs ├── Events ├── DownloadInstallEventArgs.cs ├── ItemDownloadProgressEventArgs.cs ├── UpdateDetectedEventArgs.cs └── UpdateResponseEventArgs.cs ├── Interfaces ├── IAppCastDataDownloader.cs ├── IAppCastFilter.cs ├── IAppCastGenerator.cs ├── IAssemblyAccessor.cs ├── ICheckingForUpdates.cs ├── IDownloadProgress.cs ├── ILogger.cs ├── ISignatureVerifier.cs ├── IUIFactory.cs ├── IUpdateAvailable.cs └── IUpdateDownloader.cs ├── Libraries └── MarkdownSharp.cs ├── LogWriter.cs ├── NetSparkle.csproj ├── NetSparkleDelegates.cs ├── NetSparkleException.cs ├── Properties ├── Resources.Designer.cs └── Resources.resx ├── ReleaseNotesGrabber.cs ├── SignatureVerifiers ├── DSAChecker.cs └── Ed25519Checker.cs ├── SourceGenerationContext.cs ├── SparkleUpdater.cs ├── SparkleUpdaterEvents.cs ├── UpdateInfo.cs └── Utilities.cs /.gitattributes: -------------------------------------------------------------------------------- 1 | # Automatically normalize line endings in the working directory 2 | * text=auto 3 | 4 | # Use CRLF in working directory on all platforms for Visual Studio project files 5 | *.sln text eol=crlf 6 | *.csproj text eol=crlf 7 | *.vbproj text eol=crlf 8 | *.vcxproj text eol=crlf 9 | *.vcproj text eol=crlf 10 | *.dbproj text eol=crlf 11 | *.fsproj text eol=crlf 12 | *.lsproj text eol=crlf 13 | *.wixproj text eol=crlf 14 | *.modelproj text eol=crlf 15 | *.sqlproj text eol=crlf 16 | *.wmaproj text eol=crlf 17 | 18 | *.xproj text eol=crlf 19 | *.props text eol=crlf 20 | *.filters text eol=crlf 21 | *.vcxitems text eol=crlf 22 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | - package-ecosystem: "nuget" # See documentation for possible values 13 | directory: "/src/NetSparkle" # Location of package manifests 14 | schedule: 15 | interval: "daily" 16 | #assignees: 17 | # - "Deadpikle" 18 | target-branch: "develop" 19 | commit-message: 20 | # Prefix all commit messages with "npm" 21 | prefix: "[Dependabot]" 22 | labels: 23 | - "dependabot" 24 | - "awaiting triage" 25 | #reviewers: 26 | # - "Deadpikle" 27 | - package-ecosystem: "nuget" # See documentation for possible values 28 | directory: "/src/NetSparkle.UI.Avalonia" # Location of package manifests 29 | schedule: 30 | interval: "daily" 31 | #assignees: 32 | # - "Deadpikle" 33 | target-branch: "develop" 34 | commit-message: 35 | # Prefix all commit messages with "npm" 36 | prefix: "[Dependabot]" 37 | labels: 38 | - "dependabot" 39 | - "awaiting triage" 40 | #reviewers: 41 | # - "Deadpikle" 42 | - package-ecosystem: "nuget" # See documentation for possible values 43 | directory: "/src/NetSparkle.Samples.Avalonia" # Location of package manifests 44 | schedule: 45 | interval: "daily" 46 | #assignees: 47 | # - "Deadpikle" 48 | target-branch: "develop" 49 | commit-message: 50 | # Prefix all commit messages with "npm" 51 | prefix: "[Dependabot]" 52 | labels: 53 | - "dependabot" 54 | - "awaiting triage" 55 | #reviewers: 56 | # - "Deadpikle" 57 | - package-ecosystem: "nuget" # See documentation for possible values 58 | directory: "/src/NetSparkle.Tools.AppCastGenerator" # Location of package manifests 59 | schedule: 60 | interval: "daily" 61 | #assignees: 62 | # - "Deadpikle" 63 | target-branch: "develop" 64 | commit-message: 65 | # Prefix all commit messages with "npm" 66 | prefix: "[Dependabot]" 67 | labels: 68 | - "dependabot" 69 | - "awaiting triage" 70 | #reviewers: 71 | # - "Deadpikle" 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.suo 2 | *.exe 3 | *.dll 4 | *.obj 5 | *.pdb 6 | NetSparkle.Net40.XML 7 | bin/ 8 | obj/ 9 | _ReSharper*/ 10 | *.ncrunchsolution 11 | /nuget/core/content 12 | /nuget/core/lib 13 | /nuget/core/tools 14 | /nuget/tools/content 15 | /nuget/tools/lib 16 | /nuget/tools/tools 17 | *.nupkg 18 | *.DotSettings.user 19 | TestAppFiles/*.txt 20 | TestAppFiles/*.dsa 21 | .vs/* 22 | src/NetSparkleGenerator/NetSparkleGenerator.csproj.user 23 | !src/NetSparkle.UI.Avalonia/Lib/* 24 | !src/NetSparkle.UI.Avalonia/Lib/** 25 | src/NetSparkle.Tools.AppCastGenerator/NetSparkle.Tools.AppCastGenerator.csproj.user 26 | 27 | # OS generated files # 28 | .DS_Store* 29 | 30 | doc/generated/* 31 | doc/Working Data 32 | !git.folder 33 | 34 | /.idea 35 | UpgradeLog.htm -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": ".NET Core Launch (console)", 9 | "type": "coreclr", 10 | "request": "launch", 11 | "preLaunchTask": "build", 12 | "program": "${workspaceFolder}/src/NetSparkle.Samples.Avalonia.MacOS/bin/Debug/net8.0/NetSparkleUpdater.Samples.Avalonia.dll", 13 | "args": [], 14 | "cwd": "${workspaceFolder}/src/NetSparkle.Samples.Avalonia.MacOS", 15 | "console": "internalConsole", 16 | "stopAtEntry": false 17 | }, 18 | { 19 | "name": ".NET Core Attach", 20 | "type": "coreclr", 21 | "request": "attach" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "build", 6 | "command": "dotnet", 7 | "type": "process", 8 | "args": [ 9 | "build", 10 | "${workspaceFolder}/src/NetSparkle.Samples.Avalonia.MacOS/NetSparkle.Samples.Avalonia.MacOS.csproj", 11 | "/property:GenerateFullPaths=true", 12 | "/consoleloggerparameters:NoSummary" 13 | ], 14 | "problemMatcher": "$msCompile" 15 | }, 16 | { 17 | "label": "publish", 18 | "command": "dotnet", 19 | "type": "process", 20 | "args": [ 21 | "publish", 22 | "${workspaceFolder}/src/NetSparkle.Samples.Avalonia.MacOS/NetSparkle.Samples.Avalonia.MacOS.csproj", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "problemMatcher": "$msCompile" 27 | }, 28 | { 29 | "label": "watch", 30 | "command": "dotnet", 31 | "type": "process", 32 | "args": [ 33 | "watch", 34 | "run", 35 | "--project", 36 | "${workspaceFolder}/src/NetSparkle.Samples.Avalonia.MacOS/NetSparkle.Samples.Avalonia.MacOS.csproj" 37 | ], 38 | "problemMatcher": "$msCompile" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11.2.8 4 | 5 | 6 | -------------------------------------------------------------------------------- /Extras/Release Notes Template/rnotes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | What's new in YOUR APP? 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 17 | 18 | 19 | 20 | 23 | 24 |
15 |

NEW THING.

16 |
THIS IS MY NEW SOMETHING 21 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

22 |
25 |
26 | 27 | 28 | 31 | 32 | 33 | 34 | 37 | 38 |
29 |

NEW THING #2.

30 |
THIS IS MY NEW SOMETHING 35 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

36 |
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Extras/Sample Appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Your Great App's Changelog 5 | http://you.com/app/appcast.xml 6 | Most recent changes with links to updates. 7 | en 8 | 9 | Version 2.0 (2 bugs fixed; 3 new features) 10 | 11 | file://../../../Extras/SampleReleaseNotes.md 12 | 13 | Wed, 09 Jan 2006 19:20:11 +0000 14 | 15 | 16 | 17 | 18 | Version 1.5 (8 bugs fixed; 2 new features) 19 | 20 | http://you.com/app/1.5.html 21 | 22 | Wed, 01 Jan 2006 12:20:11 +0000 23 | 24 | 25 | 26 | 27 | 28 | Version 1.4 (5 bugs fixed; 2 new features) 29 | 30 | http://you.com/app/1.4.html 31 | 32 | Wed, 25 Dec 2005 12:20:11 +0000 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Extras/Sample Update AppCast/MetaData/NetSparklTestApp-1.0.1.dsa: -------------------------------------------------------------------------------- 1 | ngnGYS1ELmGWlhWp0FAzwjmc8VdAFkyIuoybSUwPkpmt+HusArTINQ== -------------------------------------------------------------------------------- /Extras/Sample Update AppCast/MetaData/NetSparklTestApp-1.0.2.dsa: -------------------------------------------------------------------------------- 1 | R0Umm343UUfeJ15fV0nDQ2Gg0AsHbGUU76GpsWv2H+agMWXADXpg2g== -------------------------------------------------------------------------------- /Extras/Sample Update AppCast/MetaData/NetSparkle_DSA.priv: -------------------------------------------------------------------------------- 1 |

7Pdtp3UvfCNy9gzcUnpuB0YbCcqhkhtdsRkyp+LRmzwoNMcXSUf2kN02XmMZM2nOr0hGTJxFWEk353tUP6d3UDxO2+1yoo5NX4Nsx+BKSAviab1t/HoDxKEIkLjNvYq+inIIIwNxUsZXyDrNmuuMTwwJDL+A0Nzyupp2CkeEa/s=

zNQzrJNIZrJPaa8yRV0l9LPdB3M=IDVPPVuHxe85068vbpf54IpnTKF181D/THpc1/TsOVh3+TTV5xriCUZrfHksLujZjRkXbVpcjuiamrWpb8hYAXqeHRcPqC1dPo4Dwwbh/5oASEn3NEkrSDFag7kqh+RlS6xjh1VAY9YR5LTt4iGSRLxTeteRLcK/e7Lfl63MbCI=jHF2xEGl0pWQVGssr4ugj4VgLdTh+FfeNDm4ESRDmoLG2vT5TjReSLM4ZU7H++5FAdr4qzpbsb06k9XkQBypY73Sw1si33tCXpR6P1pBqwSkooR/HnWVStggluze3LfY+fE8S885P5GwlQSltloZvsWBooh4Xt4YShON76eJhik=AAAAASgqlNfrkwju6RyZ7I4pPMP+awEKZ8EcPLAiueXhyCYLo9ngJEvIpkWW8kZPh1F3hBOWGlNeTrJBt0wlbMNZbRc75kJyswpEav4BRWuCzlZ4Ne8QmAftXgQIvZok7v44ghTh8/4FSzZl60whng==mioCbtAjjcvTU1puBFQSsuI4AGE=A08=cJGpQIGW3/u1DvguAO3SG3yrm7c=
-------------------------------------------------------------------------------- /Extras/Sample Update AppCast/MetaData/NetSparkle_DSA.pub: -------------------------------------------------------------------------------- 1 |

7Pdtp3UvfCNy9gzcUnpuB0YbCcqhkhtdsRkyp+LRmzwoNMcXSUf2kN02XmMZM2nOr0hGTJxFWEk353tUP6d3UDxO2+1yoo5NX4Nsx+BKSAviab1t/HoDxKEIkLjNvYq+inIIIwNxUsZXyDrNmuuMTwwJDL+A0Nzyupp2CkeEa/s=

zNQzrJNIZrJPaa8yRV0l9LPdB3M=IDVPPVuHxe85068vbpf54IpnTKF181D/THpc1/TsOVh3+TTV5xriCUZrfHksLujZjRkXbVpcjuiamrWpb8hYAXqeHRcPqC1dPo4Dwwbh/5oASEn3NEkrSDFag7kqh+RlS6xjh1VAY9YR5LTt4iGSRLxTeteRLcK/e7Lfl63MbCI=jHF2xEGl0pWQVGssr4ugj4VgLdTh+FfeNDm4ESRDmoLG2vT5TjReSLM4ZU7H++5FAdr4qzpbsb06k9XkQBypY73Sw1si33tCXpR6P1pBqwSkooR/HnWVStggluze3LfY+fE8S885P5GwlQSltloZvsWBooh4Xt4YShON76eJhik=AAAAASgqlNfrkwju6RyZ7I4pPMP+awEKZ8EcPLAiueXhyCYLo9ngJEvIpkWW8kZPh1F3hBOWGlNeTrJBt0wlbMNZbRc75kJyswpEav4BRWuCzlZ4Ne8QmAftXgQIvZok7v44ghTh8/4FSzZl60whng==mioCbtAjjcvTU1puBFQSsuI4AGE=A08=
-------------------------------------------------------------------------------- /Extras/Sample Update AppCast/Server Root/1.0.1/rnotes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | What's new in YOUR APP? 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 17 | 18 | 19 | 20 | 23 | 24 |
15 |

NEW THING.

16 |
THIS IS MY NEW SOMETHING 21 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

22 |
25 |
26 | 27 | 28 | 31 | 32 | 33 | 34 | 37 | 38 |
29 |

NEW THING #2.

30 |
THIS IS MY NEW SOMETHING 35 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

36 |
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Extras/Sample Update AppCast/Server Root/1.0.2/rnotes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | What's new in YOUR APP? 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 17 | 18 | 19 | 20 | 23 | 24 |
15 |

NEW THING.

16 |
THIS IS MY NEW SOMETHING 21 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

22 |
25 |
26 | 27 | 28 | 31 | 32 | 33 | 34 | 37 | 38 |
29 |

NEW THING #2.

30 |
THIS IS MY NEW SOMETHING 35 |

Fusce lorem risus, eleifend et, gravida a, consectetuer venenatis, neque. In hac habitasse platea dictumst. Etiam scelerisque tempus nulla. Mauris vitae pede in mi luctus accumsan. Suspendisse potenti. Sed at pede. Quisque luctus. Nullam diam velit, ultrices quis, sodales vitae, iaculis sit amet, neque. Nam ut diam. Donec consectetuer. Nulla a sapien.

36 |
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Extras/Sample Update AppCast/Server Root/versioninfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NetSparkle TestCase 6 | http://update.applimit.com/netsparkle/versioninfo.xml 7 | 8 | en 9 | 10 | Version 1.0.1 11 | http://update.applimit.com/netsparkle/1.0.1/rnotes.html 12 | Sun, 31 Oct 2010 10:21:11 +0000 13 | 20 | 21 | 22 | Version 1.0.2 23 | http://update.applimit.com/netsparkle/1.0.2/rnotes.html 24 | Sun, 31 Dec 2010 10:31:11 +0000 25 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Extras/SampleReleaseNotes.md: -------------------------------------------------------------------------------- 1 | # Sample Application Release Notes 2 | 3 | ## 104.1 4 | 5 | * Fixed bug where ExecuteAsync sometimes doesn't send data 6 | 7 | ## 104.0 8 | 9 | * Fixed Windows Phone and Silverlight to use culture when calling Convert.ChangeType() (thanks trydis) 10 | * Added support for non-standard HTTP methods (thanks jhoerr) 11 | New API methods include: 12 | * `IRestClient.ExecuteAsyncGet()` 13 | * `IRestClient.ExecuteAsyncPost()` 14 | * `IRestClient.ExecuteAsyncGet()` 15 | * `IRestClient.ExecuteAsyncPost()` 16 | 17 | See [groups discussion](https://groups.google.com/forum/?fromgroups=#!topic/restsharp/FCLGE5By7AU) for more info 18 | 19 | * Resolved an xAuth support issue in the OAuth1Authenticator (thanks artema) 20 | * Change AddDefaultParameter methods to be extension methods (thanks haacked) 21 | Added `RestClientExtensions.AddDefaultParameter()` with 4 overloads. See pull request [#311](https://github.com/restsharp/RestSharp/pull/311) for more info 22 | 23 | * Adding support for deserializing enums from integer representations (thanks dontjee) -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2025 Deadpikle 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 13 | all 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 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /TestAppFiles/2.0-release-notes.md: -------------------------------------------------------------------------------- 1 | # Sample Application Release Notes 2 | 3 | ## 104.1 4 | 5 | * Fixed bug where ExecuteAsync sometimes doesn't send data 6 | 7 | ## 104.0 8 | 9 | * Fixed Windows Phone and Silverlight to use culture when calling Convert.ChangeType() (thanks trydis) 10 | * Added support for non-standard HTTP methods (thanks jhoerr) 11 | New API methods include: 12 | * `IRestClient.ExecuteAsyncGet()` 13 | * `IRestClient.ExecuteAsyncPost()` 14 | * `IRestClient.ExecuteAsyncGet()` 15 | * `IRestClient.ExecuteAsyncPost()` 16 | 17 | See [groups discussion](https://groups.google.com/forum/?fromgroups=#!topic/restsharp/FCLGE5By7AU) for more info 18 | 19 | * Resolved an xAuth support issue in the OAuth1Authenticator (thanks artema) 20 | * Change AddDefaultParameter methods to be extension methods (thanks haacked) 21 | Added `RestClientExtensions.AddDefaultParameter()` with 4 overloads. See pull request [#311](https://github.com/restsharp/RestSharp/pull/311) for more info 22 | 23 | * Adding support for deserializing enums from integer representations (thanks dontjee) -------------------------------------------------------------------------------- /TestAppFiles/GenerateHashForDemoSoftware.bat: -------------------------------------------------------------------------------- 1 | echo This file needs its paths fixed. TODO: 2 | @echo off 3 | if exist "../bin/Release/DSAHelper/NetSparkle.DSAHelper.exe" ( 4 | if exist "../bin/Release/DSAHelper/SampleDownloadedExecutable/NetSparkleUpdate.exe" ( 5 | "../bin/Release/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "../bin/Release/SampleDownloadedExecutable/NetSparkleUpdate.exe" NetSparkle_DSA.priv > hash-demo-file-release.txt 6 | ) 7 | if exist "../bin/Debug/DSAHelper/SampleDownloadedExecutable/NetSparkleUpdate.exe" ( 8 | "../bin/Release/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "../bin/Debug/SampleDownloadedExecutable/NetSparkleUpdate.exe" NetSparkle_DSA.priv > hash-demo-file-debug.txt 9 | ) 10 | ) else if exist "../bin/Debug/DSAHelper/NetSparkle.DSAHelper.exe" ( 11 | if exist "../bin/Release/DSAHelper/SampleDownloadedExecutable/NetSparkleUpdate.exe" ( 12 | "../bin/Debug/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "../bin/Release/SampleDownloadedExecutable/NetSparkleUpdate.exe" NetSparkle_DSA.priv > hash-demo-file-release.txt 13 | ) 14 | if exist "../bin/Debug/SampleDownloadedExecutable/NetSparkleUpdate.exe" ( 15 | "../bin/Debug/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "../bin/Debug/SampleDownloadedExecutable/NetSparkleUpdate.exe" NetSparkle_DSA.priv > hash-demo-file-debug.txt 16 | ) 17 | ) -------------------------------------------------------------------------------- /TestAppFiles/GenerateHashForDemoXMLUpdates.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | if exist "../bin/Debug/NetSparkle.Tools.DSAHelper/netcoreapp3.0/NetSparkle.DSAHelper.exe" ( 3 | "../bin/Debug/NetSparkle.Tools.DSAHelper/netcoreapp3.0/NetSparkle.DSAHelper.exe" /sign_update "appcast.xml" NetSparkle_DSA.priv > appcast.xml.dsa 4 | echo appcast.xml.dsa generated 5 | ) else ( 6 | if exist "../bin/Debug/NetSparkle.Tools.DSAHelper/netcoreapp3.0/NetSparkle.DSAHelper.exe" ( 7 | "../bin/Debug/NetSparkle.Tools.DSAHelper/netcoreapp3.0/NetSparkle.DSAHelper.exe" /sign_update "appcast.xml" NetSparkle_DSA.priv > appcast.xml.dsa 8 | echo appcast.xml.dsa generated 9 | ) else ( 10 | echo Error: cannot find NetSparkle.DSAHelper.exe 11 | ) 12 | ) -------------------------------------------------------------------------------- /TestAppFiles/GenerateHashForReleaseNotes.bat: -------------------------------------------------------------------------------- 1 | echo This file needs its paths fixed. TODO: 2 | @echo off 3 | if exist "../bin/Release/DSAHelper/NetSparkle.DSAHelper.exe" ( 4 | "../bin/Release/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "2.0-release-notes.md" NetSparkle_DSA.priv > 2.0-release-notes.md.dsa 5 | ) else ( 6 | if exist "../bin/Debug/DSAHelper/NetSparkle.DSAHelper.exe" ( 7 | "../bin/Debug/DSAHelper/NetSparkle.DSAHelper.exe" /sign_update "2.0-release-notes.md" NetSparkle_DSA.priv > 2.0-release-notes.md.dsa 8 | ) 9 | ) -------------------------------------------------------------------------------- /TestAppFiles/NetSparkle_DSA.priv: -------------------------------------------------------------------------------- 1 |

2IX45gCGAGjNXBg3/spd03M2oMsmghmul/H5ePY9AN9URjAOYUcwfi3kQ/KM8i2eD1V/cBKkMJX4xx3kpt39n2Vt+7tyWfXjzMb+3qPapPHMMJL5DDS9cw6FgG3H0tT/LSm7Qn7JLA6w8FOiVIjC+x61u5WqFK0I0vFnc8T1YZs=

xXaw/HrlbsRqg7WD5g1xlkVblys=P2bv3DOTGnyjVnDC5j6Pwd4U6VtRzhPsww9COnwlRWmyNFcf0F/3H5S9YJrO7P+CgIvef30eqUYPHUauLbZ2UK0rItwepz45SfysLvVUb6PU6z/j7gEYiGO/lKd13GfhxmL1mS+XasDSw5brRMxePidiom8H/AB7VVQgELcgutQ=mxJD6rwuJe532PpS9HKjlhvcY1ssBEOFf3HmiYot4d670y0+5nICF3YO8vLxndHA4RqgU/Hux9KtKKg/2hi7c/88j5YyTDWX86n8aPIxHWklKsreP24ul87uuktfhDlhltpfd8AlXxn2SpxQ1Fy/Ktid3E1+uDb64HKf9a35CwE=q/C5yP0VC0Y0ZUPzSD5+O5Rt5X8=sg==tBCt8EG+AffLD2HGCGRhSW82dqE=
-------------------------------------------------------------------------------- /TestAppFiles/NetSparkle_DSA.pub: -------------------------------------------------------------------------------- 1 |

2IX45gCGAGjNXBg3/spd03M2oMsmghmul/H5ePY9AN9URjAOYUcwfi3kQ/KM8i2eD1V/cBKkMJX4xx3kpt39n2Vt+7tyWfXjzMb+3qPapPHMMJL5DDS9cw6FgG3H0tT/LSm7Qn7JLA6w8FOiVIjC+x61u5WqFK0I0vFnc8T1YZs=

xXaw/HrlbsRqg7WD5g1xlkVblys=P2bv3DOTGnyjVnDC5j6Pwd4U6VtRzhPsww9COnwlRWmyNFcf0F/3H5S9YJrO7P+CgIvef30eqUYPHUauLbZ2UK0rItwepz45SfysLvVUb6PU6z/j7gEYiGO/lKd13GfhxmL1mS+XasDSw5brRMxePidiom8H/AB7VVQgELcgutQ=mxJD6rwuJe532PpS9HKjlhvcY1ssBEOFf3HmiYot4d670y0+5nICF3YO8vLxndHA4RqgU/Hux9KtKKg/2hi7c/88j5YyTDWX86n8aPIxHWklKsreP24ul87uuktfhDlhltpfd8AlXxn2SpxQ1Fy/Ktid3E1+uDb64HKf9a35CwE=q/C5yP0VC0Y0ZUPzSD5+O5Rt5X8=sg==
-------------------------------------------------------------------------------- /TestAppFiles/appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetSparkle Test App 5 | https://netsparkleupdater.github.io/NetSparkle/files/sample-app/appcast.xml 6 | Most recent changes with links to updates. 7 | en 8 | 9 | Version 2.0 (2 bugs fixed; 3 new features) 10 | https://netsparkleupdater.github.io/NetSparkle/files/sample-app/2.0-release-notes.md 11 | 12 | Thu, 27 Oct 2016 10:30:00 +0000 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/generated/git.folder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetSparkleUpdater/NetSparkle/bfce0066ae22cfbe6efb117c41f9fc88e1fb0eaf/doc/generated/git.folder -------------------------------------------------------------------------------- /nuget.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetSparkleUpdater/NetSparkle/bfce0066ae22cfbe6efb117c41f9fc88e1fb0eaf/nuget/NuGet.exe -------------------------------------------------------------------------------- /src/NetSparkle.Samples.Avalonia.MacOS/App.axaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/NetSparkle.Samples.Avalonia.MacOS/App.axaml.cs: -------------------------------------------------------------------------------- 1 | using Avalonia; 2 | using Avalonia.Controls.ApplicationLifetimes; 3 | using Avalonia.Markup.Xaml; 4 | 5 | namespace NetSparkleUpdater.Samples.Avalonia 6 | { 7 | public class App : Application 8 | { 9 | public override void Initialize() 10 | { 11 | AvaloniaXamlLoader.Load(this); 12 | } 13 | 14 | public override void OnFrameworkInitializationCompleted() 15 | { 16 | if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) 17 | { 18 | desktop.MainWindow = new MainWindow(); 19 | } 20 | 21 | base.OnFrameworkInitializationCompleted(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/NetSparkle.Samples.Avalonia.MacOS/Assets/software-update-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetSparkleUpdater/NetSparkle/bfce0066ae22cfbe6efb117c41f9fc88e1fb0eaf/src/NetSparkle.Samples.Avalonia.MacOS/Assets/software-update-available.png -------------------------------------------------------------------------------- /src/NetSparkle.Samples.Avalonia.MacOS/MainWindow.axaml: -------------------------------------------------------------------------------- 1 |  11 | 13 | 14 |