Преминете към основното съдържание

Автоматично обновяване

Модулът updater/ осигурява автоматични обновления чрез GitHub Releases с SHA256 верификация и механизъм за безопасен rollback. При инсталация от Microsoft Store (MSIX), auto-updater-ът е деактивиран -- Store-ът се грижи за обновленията.

Поток на обновяването

Компоненти

github.rs -- GitHub Releases API

Извлича последния release от GitHub:

pub struct Release {
pub tag_name: String, // напр. "v0.2.0"
pub assets: Vec<Asset>,
}

pub struct Asset {
pub name: String,
pub size: u64,
pub browser_download_url: String,
pub digest: Option<String>, // "sha256:abcdef..."
}
ПараметърСтойност
Timeout10 секунди
Retries1 (при connection/timeout грешка, 2s delay)
User-Agentdictaro-client
Rate limitОбработва 403 (GitHub rate limit)

Версионно сравнение: Използва semver crate за парсване и сравнение на версии. Tag-ът може да има v prefix (напр. v0.2.0).

download.rs -- Download + SHA256 верификация

ПараметърСтойност
Download timeout300 секунди (5 минути)
Buffer size8192 bytes
Digest formatsha256:<hex> (GitHub asset digest)
Intermediate filedictaro-client.exe.tmp
Final filedictaro-client.exe.new

swap.rs -- Self-Replace + Rollback

Прилагане на обновление (при стартиране)

Файлова конвенция

ФайлРоля
dictaro-client.exeТекущ изпълним файл
dictaro-client.exe.newСвален нов exe, чакащ прилагане
dictaro-client.exe.oldBackup на предишния exe (създаден от self-replace)
dictaro-client.exe.tmpВременен файл при download
.update_okSentinel файл -- маркира успешно стартиране след обновление

Sentinel механизъм за безопасност

MSIX детекция

pub fn is_msix_packaged() -> bool {
let result = GetCurrentPackageFullName(&mut length, null_mut());
// APPMODEL_ERROR_NO_PACKAGE (15700) = NOT packaged
result != 15700
}

Когато приложението е инсталирано от Microsoft Store:

  • is_msix_packaged() връща true
  • GitHub auto-updater-ът се пропуска
  • Store-ът управлява обновленията автоматично
  • Логва се: "Running as MSIX package -- skipping GitHub updater"

Repository

Releases се публикуват в GitHub repository djok/whisper-keyboard-releases. Текущата версия се взима от Cargo.toml чрез env!("CARGO_PKG_VERSION").