mirror of
https://github.com/confirmedcode/Lockdown-iOS.git
synced 2025-12-21 12:14:02 +01:00
90 lines
2.4 KiB
Swift
90 lines
2.4 KiB
Swift
//
|
|
// BlockDayLog.swift
|
|
// Lockdown
|
|
//
|
|
// Created by Oleg Dreyman on 22.05.2020.
|
|
// Copyright © 2020 Confirmed Inc. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
final class BlockDayLog {
|
|
|
|
static let shared = BlockDayLog()
|
|
|
|
static let dateFormatter: DateFormatter = {
|
|
let formatter = DateFormatter()
|
|
formatter.dateFormat = "h:mm a_"
|
|
return formatter
|
|
}()
|
|
|
|
private let processingQueue = DispatchQueue(label: "LockdownBlockDayLogQueue")
|
|
|
|
private static let kIsBlockLogDisabled = "LockdownIsBlockLogDisabled"
|
|
|
|
private static let userDefaultsKey = "LockdownDayLogs"
|
|
private static let maxSize = 5000
|
|
private static let maxReduction = 4500
|
|
|
|
private init() { }
|
|
|
|
var isDisabled: Bool {
|
|
return defaults.bool(forKey: BlockDayLog.kIsBlockLogDisabled)
|
|
}
|
|
|
|
var isEnabled: Bool {
|
|
return !isDisabled
|
|
}
|
|
|
|
private var _dayLog: [Any]? {
|
|
#if DEBUG
|
|
dispatchPrecondition(condition: .onQueue(processingQueue))
|
|
#endif
|
|
return defaults.array(forKey: BlockDayLog.userDefaultsKey)
|
|
}
|
|
|
|
var strings: [String]? {
|
|
return processingQueue.sync {
|
|
self._dayLog as? [String]
|
|
}
|
|
}
|
|
|
|
func clear() {
|
|
processingQueue.async {
|
|
defaults.set([], forKey: BlockDayLog.userDefaultsKey)
|
|
}
|
|
}
|
|
|
|
func disable(shouldClear: Bool) {
|
|
defaults.set(true, forKey: BlockDayLog.kIsBlockLogDisabled)
|
|
if shouldClear {
|
|
clear()
|
|
}
|
|
}
|
|
|
|
func enable() {
|
|
defaults.set(false, forKey: BlockDayLog.kIsBlockLogDisabled)
|
|
}
|
|
|
|
func append(host: String, date: Date) {
|
|
guard isDisabled == false else {
|
|
// block log is disabled
|
|
return
|
|
}
|
|
|
|
processingQueue.async {
|
|
let logString = BlockDayLog.dateFormatter.string(from: date) + host
|
|
// reduce log size if it's over the maxSize
|
|
if var dayLog = self._dayLog {
|
|
if dayLog.count > BlockDayLog.maxSize {
|
|
dayLog = dayLog.suffix(BlockDayLog.maxReduction)
|
|
}
|
|
dayLog.append(logString)
|
|
defaults.set(dayLog, forKey: BlockDayLog.userDefaultsKey)
|
|
} else {
|
|
defaults.set([logString], forKey: BlockDayLog.userDefaultsKey)
|
|
}
|
|
}
|
|
}
|
|
}
|