Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat: add auto updater#117

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
deansheather merged 14 commits intomainfromdean/updater
Jun 24, 2025
Merged

feat: add auto updater#117

deansheather merged 14 commits intomainfromdean/updater
Jun 24, 2025

Conversation

deansheather
Copy link
Member

@deansheatherdeansheather commentedJun 4, 2025
edited
Loading

Adds an auto updater utility using NetSparkle.

Most of the UI matches the way it's done in NetSparkle for the built-in UIs (I referenced the Avalonia and WPF ones mostly), including most of the copy and implementation (incl. quirks). I did this in case we ever want to contribute this upstream. The only major difference is how I handle the release notes stuff.

For release notes, I use the<description> tag to generate HTML for the web view. There's a hardcoded """template""" in the source code and a copy ofsindresorhus/github-markdown-css in the repo that gets included as an asset in the binary. This matches what we do on macOS but diverges from the way NetSparkle does release notes rendering using<sparkle:releaseNotesUrl> (or something like that).

  • Adds a button to the right click context menu on the tray icon for checking for updates
  • Adds custom UIs for all parts of the updater
  • Implements "action" notifications with a click handler into UserNotifier
  • Adds Serilog output to the debug output window in VS in DEBUG builds

TODO:

  • App cast generation script
  • Release pipeline modifications
  • Generate secret key and add to repo secrets
  • Publish initial 0.5.0 version manually
  • Set final security and update source related settings in NetSparkle

Follow up:

  • Integrate into the settings UI, add controls for whether it should automatically check for updates etc.

devenv_2vdCHXcF7M
explorer_eLh2FqvWI4

Closes#122
Closescoder/internal#703 (thanks Blink)

public class AppDispatcherQueueManager : IDispatcherQueueManager
{
private static DispatcherQueue? DispatcherQueue =>
((App)Application.Current).TrayWindow?.DispatcherQueue;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I like theIDispatchQueueManager idea, but seems like this could just extend theTrayWindow and have it be theIDispatchQueueManager, rather than having it on the App and having to deal with the fact that it might be null.

We have the TrayWindow as a "transient" in the dependency injection right now, but the App creates an instance that it holds forever, so we are lying to ourselves about it being transient.

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

The problem with this is if we define it as a singleton the DI instance tries to create it outside of the UI thread, which will crash the app. That's why all of the stuff that must be instantiated on the UI thread is marked transient, even if it typically only gets instantiated once.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

This shit is so dumb.

Q: How do you get on the main UI thread?

A: You need a DispatcherQueue.

Q: How do you get a DispatcherQueue?

A: You have to get it from a UI Window

Q: How do you get a UI Window?

A: You have to create it from the main UI thread.

Should we be moving all this initialization of dependencies toOnLaunched instead so it's on the main UI thread?

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

truly a classic Microsoft® Moment™

We could try doing that. I don't know what the DI behavior will be for a singleton<IDispatcherQueueManager, TrayWindow> if it can still be accessed as bothIDispatcherQueueManager andTrayWindow, but I'll give it a shot

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

If I move all the instantiation toOnLaunched then all of the properties inApp need to become nullable which seems worse, so I think I'll just stick to a method like this. I will makeApp itself be theIDispatcherQueueManager though which seems a lot nicer.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Cool cool.

Fixes issue where DownloadWithXOriginalContentLength andDownloadWithMismatchedContentLength tests would hang due toHTTP response streams not being properly flushed after writing data.The tests were causing CI failures with 2-minute timeouts becausethe HTTP client would wait indefinitely for more data when theresponse stream wasn't explicitly flushed.Co-authored-by: ibetitsmike <203725896+ibetitsmike@users.noreply.github.com>
@deansheather
Copy link
MemberAuthor

thanks blink lmfao

@deansheatherdeansheather merged commit46849a5 intomainJun 24, 2025
3 checks passed
@deansheatherdeansheather deleted the dean/updater branchJune 24, 2025 04:15
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@spikecurtisspikecurtisspikecurtis left review comments

@ibetitsmikeibetitsmikeibetitsmike approved these changes

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

flake: Coder Desktop Windows CI Coder Desktop Windows auto update
3 participants
@deansheather@spikecurtis@ibetitsmike

[8]ページ先頭

©2009-2025 Movatter.jp