Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36a8f0b97b | ||
|
|
33b9cab8a8 |
@@ -1397,7 +1397,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 29;
|
CURRENT_PROJECT_VERSION = 30;
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1416,7 +1416,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
CODE_SIGN_ENTITLEMENTS = main/main.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 29;
|
CURRENT_PROJECT_VERSION = 30;
|
||||||
INFOPLIST_FILE = main/Info.plist;
|
INFOPLIST_FILE = main/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1435,7 +1435,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 29;
|
CURRENT_PROJECT_VERSION = 30;
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
@@ -1453,7 +1453,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
CODE_SIGN_ENTITLEMENTS = GlassVPN/GlassVPN.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 29;
|
CURRENT_PROJECT_VERSION = 30;
|
||||||
INFOPLIST_FILE = GlassVPN/Info.plist;
|
INFOPLIST_FILE = GlassVPN/Info.plist;
|
||||||
MARKETING_VERSION = 1.0.0;
|
MARKETING_VERSION = 1.0.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
PRODUCT_BUNDLE_IDENTIFIER = "de.uni-bamberg.psi.AppCheck.VPN";
|
||||||
|
|||||||
@@ -33,11 +33,13 @@ extension FilterOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension Recording {
|
extension Recording {
|
||||||
|
static let minTimeLongTerm: Timestamp = .hours(1)
|
||||||
|
|
||||||
var fallbackTitle: String { get {
|
var fallbackTitle: String { get {
|
||||||
isLongTerm ? "Background Recording" : "Unnamed Recording #\(id)"
|
isLongTerm ? "Background Recording" : "Unnamed Recording #\(id)"
|
||||||
} }
|
} }
|
||||||
var duration: Timestamp { get { (stop ?? .now()) - start } }
|
var duration: Timestamp { get { (stop ?? .now()) - start } }
|
||||||
var isLongTerm: Bool { duration > Timestamp.hours(1) }
|
var isLongTerm: Bool { duration > Recording.minTimeLongTerm }
|
||||||
var isShared: Bool { uploadkey?.count ?? 0 > 0}
|
var isShared: Bool { uploadkey?.count ?? 0 > 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,14 +87,21 @@ struct TimeFormat {
|
|||||||
|
|
||||||
/// Duration string with format `mm:ss` or `mm:ss.SSS`
|
/// Duration string with format `mm:ss` or `mm:ss.SSS`
|
||||||
static func from(_ duration: TimeInterval, millis: Bool = false, hours: Bool = false) -> String {
|
static func from(_ duration: TimeInterval, millis: Bool = false, hours: Bool = false) -> String {
|
||||||
let t = Int(duration)
|
var t = Int(duration)
|
||||||
let min = t / 60
|
var min = t / 60
|
||||||
let sec = t % 60
|
var sec = t % 60
|
||||||
if millis {
|
if millis {
|
||||||
let mil = Int(duration * 1000) % 1000
|
let mil = Int(duration * 1000) % 1000
|
||||||
return String(format: "%02d:%02d.%03d", min, sec, mil)
|
return String(format: "%02d:%02d.%03d", min, sec, mil)
|
||||||
} else if hours {
|
} else if hours {
|
||||||
return String(format: "%02d:%02d:%02d", min / 60, min % 60, sec)
|
if t < Recording.minTimeLongTerm {
|
||||||
|
t = Int(Recording.minTimeLongTerm) - t
|
||||||
|
min = t / 60
|
||||||
|
sec = t % 60
|
||||||
|
return String(format: "-%02d:%02d:%02d", min / 60, min % 60, sec)
|
||||||
|
} else {
|
||||||
|
return String(format: "%02d:%02d:%02d", min / 60, min % 60, sec)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return String(format: "%02d:%02d", min, sec)
|
return String(format: "%02d:%02d", min, sec)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user