fix: updater network timeout safety and instant state notifications
This commit is contained in:
parent
a938dc196f
commit
715b5b26f2
2 changed files with 27 additions and 3 deletions
|
|
@ -35,6 +35,12 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
name: BluetoothTracker.didUpdateNotification,
|
name: BluetoothTracker.didUpdateNotification,
|
||||||
object: nil
|
object: nil
|
||||||
)
|
)
|
||||||
|
NotificationCenter.default.addObserver(
|
||||||
|
self,
|
||||||
|
selector: #selector(handleTrackerUpdate),
|
||||||
|
name: UpdaterService.didUpdateStateNotification,
|
||||||
|
object: nil
|
||||||
|
)
|
||||||
|
|
||||||
// Initial render
|
// Initial render
|
||||||
updateStatusItem()
|
updateStatusItem()
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import AppKit
|
||||||
|
|
||||||
public final class UpdaterService: ObservableObject {
|
public final class UpdaterService: ObservableObject {
|
||||||
public static let shared = UpdaterService()
|
public static let shared = UpdaterService()
|
||||||
|
public static let didUpdateStateNotification = Notification.Name("UpdaterServiceDidUpdateStateNotification")
|
||||||
|
|
||||||
@Published public var isUpdating: Bool = false
|
@Published public var isUpdating: Bool = false
|
||||||
@Published public var updateStatusMessage: String = ""
|
@Published public var updateStatusMessage: String = ""
|
||||||
|
|
@ -15,12 +16,20 @@ public final class UpdaterService: ObservableObject {
|
||||||
|
|
||||||
isUpdating = true
|
isUpdating = true
|
||||||
updateStatusMessage = "Проверка обновлений на GitHub..."
|
updateStatusMessage = "Проверка обновлений на GitHub..."
|
||||||
|
NotificationCenter.default.post(name: UpdaterService.didUpdateStateNotification, object: self)
|
||||||
|
|
||||||
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
|
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
|
||||||
let projectDir = "/Users/autli/Documents/blts_tracker"
|
let projectDir = "/Users/autli/Documents/blts_tracker"
|
||||||
let updateScript = """
|
let updateScript = """
|
||||||
cd "\(projectDir)"
|
cd "\(projectDir)"
|
||||||
git fetch origin main 2>&1
|
git -c http.timeout=8 fetch origin main 2>&1
|
||||||
|
FETCH_STATUS=$?
|
||||||
|
|
||||||
|
if [ $FETCH_STATUS -ne 0 ]; then
|
||||||
|
echo "NETWORK_ERROR"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
LOCAL=$(git rev-parse HEAD)
|
LOCAL=$(git rev-parse HEAD)
|
||||||
REMOTE=$(git rev-parse origin/main)
|
REMOTE=$(git rev-parse origin/main)
|
||||||
|
|
||||||
|
|
@ -64,6 +73,7 @@ public final class UpdaterService: ObservableObject {
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self?.isUpdating = false
|
self?.isUpdating = false
|
||||||
|
NotificationCenter.default.post(name: UpdaterService.didUpdateStateNotification, object: self)
|
||||||
|
|
||||||
if output.contains("SUCCESS") {
|
if output.contains("SUCCESS") {
|
||||||
self?.sendNotification(
|
self?.sendNotification(
|
||||||
|
|
@ -78,13 +88,17 @@ public final class UpdaterService: ObservableObject {
|
||||||
try? p.run()
|
try? p.run()
|
||||||
exit(0)
|
exit(0)
|
||||||
}
|
}
|
||||||
|
} else if output.contains("NETWORK_ERROR") {
|
||||||
|
self?.sendNotification(
|
||||||
|
title: "⚠️ Ошибка сети",
|
||||||
|
body: "Не удалось связаться с GitHub. Проверьте интернет или отключите VPN."
|
||||||
|
)
|
||||||
} else if output.contains("UP_TO_DATE") {
|
} else if output.contains("UP_TO_DATE") {
|
||||||
self?.sendNotification(
|
self?.sendNotification(
|
||||||
title: "✅ У вас последняя версия",
|
title: "✅ У вас последняя версия",
|
||||||
body: "Обновлений на GitHub нет, установлена актуальная версия."
|
body: "Обновлений на GitHub нет, установлена актуальная версия."
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
print("Update output: \(output)")
|
|
||||||
self?.sendNotification(
|
self?.sendNotification(
|
||||||
title: "ℹ️ Проверка завершена",
|
title: "ℹ️ Проверка завершена",
|
||||||
body: "Репозиторий проверен. Код актуален."
|
body: "Репозиторий проверен. Код актуален."
|
||||||
|
|
@ -94,7 +108,11 @@ public final class UpdaterService: ObservableObject {
|
||||||
} catch {
|
} catch {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self?.isUpdating = false
|
self?.isUpdating = false
|
||||||
print("Failed to run update: \(error)")
|
NotificationCenter.default.post(name: UpdaterService.didUpdateStateNotification, object: self)
|
||||||
|
self?.sendNotification(
|
||||||
|
title: "⚠️ Ошибка",
|
||||||
|
body: "Не удалось выполнить проверку: \(error.localizedDescription)"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue