paddel setup new verifier
This commit is contained in:
@@ -22,8 +22,14 @@
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
|
||||
<key>RsyncStudioLicenseAPIBaseURL</key>
|
||||
<string>https://rsync.vm/api/</string>
|
||||
<string>https://rsync.stage.absdev.net/api/</string>
|
||||
<key>RsyncStudioLicensePublicKey</key>
|
||||
<string>8/rlCrS5mVEi4rGNXkw0Z22XkRpSH5+jPnD4f0GyV2k=</string>
|
||||
<string>/QWCMp3he0bUM0VIYYmH9y1/BCncpUo4h/J8sM8gPKg=</string>
|
||||
<key>RsyncStudioPurchaseURL</key>
|
||||
<string>https://rsync.stage.absdev.net/buy</string>
|
||||
<key>RsyncStudioPortalURL</key>
|
||||
<string>https://rsync.stage.absdev.net/portal</string>
|
||||
<key>RsyncStudioSupportURL</key>
|
||||
<string>https://rsync.stage.absdev.net/support</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -64,7 +64,7 @@ final class LicensingManager: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
static let trialLengthDays = 30
|
||||
static let trialLengthDays = 7
|
||||
|
||||
@Published private(set) var state: State = .trial(daysRemaining: trialLengthDays, expiresAt: Date().addingTimeInterval(TimeInterval(trialLengthDays * 86_400)))
|
||||
@Published private(set) var installationID = ""
|
||||
@@ -100,7 +100,7 @@ final class LicensingManager: ObservableObject {
|
||||
case .trial(let days, let expiresAt):
|
||||
return "\(days) day\(days == 1 ? "" : "s") remaining · ends \(expiresAt.formatted(date: .abbreviated, time: .omitted))"
|
||||
case .expired:
|
||||
return "The 30-day evaluation period has ended. Activate a licence to continue using sync jobs."
|
||||
return "The 7-day evaluation period has ended. Activate a licence to continue using sync jobs."
|
||||
case .invalid(let message):
|
||||
return message
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
|
||||
struct LicenseRequiredView: View {
|
||||
@EnvironmentObject private var licensing: LicensingManager
|
||||
@@ -19,9 +20,13 @@ struct LicenseRequiredView: View {
|
||||
.frame(maxWidth: 520)
|
||||
}
|
||||
|
||||
Button("Open Licence Settings") { openSettings() }
|
||||
.buttonStyle(.borderedProminent)
|
||||
.controlSize(.large)
|
||||
HStack(spacing: 12) {
|
||||
Button("Buy Rsync Studio…") { openPurchasePage() }
|
||||
.buttonStyle(.borderedProminent)
|
||||
.controlSize(.large)
|
||||
Button("Open Licence Settings") { openSettings() }
|
||||
.controlSize(.large)
|
||||
}
|
||||
|
||||
Text("Your jobs and history remain on this Mac. Rsync Studio does not delete local data when a trial expires or a licence is removed.")
|
||||
.font(.caption)
|
||||
@@ -33,4 +38,11 @@ struct LicenseRequiredView: View {
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.background(Color(nsColor: .windowBackgroundColor))
|
||||
}
|
||||
|
||||
private func openPurchasePage() {
|
||||
guard let raw = Bundle.main.object(forInfoDictionaryKey: "RsyncStudioPurchaseURL") as? String,
|
||||
let url = URL(string: raw),
|
||||
url.scheme?.lowercased() == "https" else { return }
|
||||
NSWorkspace.shared.open(url)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
|
||||
struct LicenseView: View {
|
||||
@EnvironmentObject private var licensing: LicensingManager
|
||||
@@ -60,7 +61,8 @@ struct LicenseView: View {
|
||||
showingTokenEntry.toggle()
|
||||
}
|
||||
}
|
||||
Text("Online activation will be enabled when the licensing service URL is configured. Signed offline licence tokens can be installed without contacting a server.")
|
||||
Button("Buy Rsync Studio…") { openPurchasePage() }
|
||||
Text("Buy Personal or Professional online, then enter the licence key delivered to your email. Signed offline licence tokens can also be installed without contacting the activation server.")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
@@ -130,4 +132,14 @@ struct LicenseView: View {
|
||||
showingTokenEntry = false
|
||||
} catch { errorMessage = error.localizedDescription }
|
||||
}
|
||||
|
||||
private func openPurchasePage() {
|
||||
guard let raw = Bundle.main.object(forInfoDictionaryKey: "RsyncStudioPurchaseURL") as? String,
|
||||
let url = URL(string: raw),
|
||||
url.scheme?.lowercased() == "https" else {
|
||||
errorMessage = "The Rsync Studio purchase page is not configured in this build."
|
||||
return
|
||||
}
|
||||
NSWorkspace.shared.open(url)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user