Skip to content

Commit c36d642

Browse files
authored
v3.0.3
**В этой версии** - [x] _Улучшено поведение HTTP-клиента:_ Теперь он не будет поддерживать TCP соединение после получения ответа от сервера. Это улучшение снизит потребление траффика и заряда аккумулятора. - [x] _Адаптивный интервал обновления показаний температуры:_ Сокращает энергопотребление, а также количество используемого траффика, что актуально для пользователей лимитированных тарифов. Интервал выбирается таким образом, что загружаются только видимые пользователем обновления. > Например, если показания изменяются на 0.01°, это изменение не будет заметно в интерфейсе, так как показания округляются до десятых, соответственно нет смысла загружать такие изменения с сервера. **В следующей версии** - [ ] _Адаптивные интервалы обновления остальных показаний:_ Сейчас все показания обновляются вместе с температурой, а будут обновляться независимо, и для каждого показания будет свой отдельный интервал. Это существенно снизит объем передачи данных при обновлениях. - [ ] _Улучшеный алгоритм запроса местоположения:_ Сейчас местоположение запрашивается раз в полчаса. После обновления оно будет запрашиваться на основе частоты и расстояний перемещения устройства.
2 parents f23f774 + 37f1c1b commit c36d642

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

NarodMonMenubarApp/AppDelegate.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
2121
locationManager!.desiredAccuracy = kCLLocationAccuracyHundredMeters
2222
locationManager!.distanceFilter = 1000
2323

24+
userDefaults.register(defaults: ["UpdateAfterWake": 15,
25+
"UpdateSensorsValues": 7.5 * 60])
26+
2427
controller = StatusMenuController()
2528

2629
NSWorkspace.shared().notificationCenter.addObserver(self, selector: #selector(AppDelegate.wakeListener(_:)), name: NSNotification.Name.NSWorkspaceDidWake, object: nil)

NarodMonMenubarApp/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>3.0.3</string>
2121
<key>CFBundleVersion</key>
22-
<string>450</string>
22+
<string>474</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.weather</string>
2525
<key>LSMinimumSystemVersion</key>

NarodMonMenubarApp/NarodMonAPI.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class NarodMonAPI {
6060
public init(withAPIKey key: String) {
6161
API_KEY = key
6262
request.httpMethod = "POST"
63+
request.httpShouldUsePipelining = false
6364
}
6465

6566

NarodMonMenubarApp/StatusMenuController.swift

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class StatusMenuController: NSObject {
3434
var latestLocation: Date? = nil
3535

3636
var nearbySensors: [Sensor] = []
37+
var readingsByTypes: [Int : Float] = [:]
3738
var offline: Bool = true
3839
var supressUpdateDialog: Bool = false
3940
var app: App?
@@ -100,7 +101,7 @@ class StatusMenuController: NSObject {
100101
}
101102

102103
func requestSensorsValuesUpdate(force: Bool = true) {
103-
if !(force || Date().timeIntervalSince(latestValues ?? Date(timeIntervalSince1970: 0)) > 7.5 * 60) {return}
104+
if !(force || Date().timeIntervalSince(latestValues ?? Date(timeIntervalSince1970: 0)) > userDefaults.double(forKey: "UpdateSensorsValues")) {return}
104105
narodMon.sensorsValues(sensors: self.querySensors)
105106
}
106107

@@ -184,12 +185,8 @@ extension StatusMenuController: NarodMonAPIDelegate {
184185
NSLog("\"sensorsValues\" failed")
185186
goOffline()
186187
return
187-
} else {
188-
NSLog("\"sensorsValues\" success")
189-
latestValues = Date()
190-
goOnline()
191188
}
192-
189+
NSLog("\"sensorsValues\" success")
193190

194191
var summs = [Int:Float]()
195192
var counters = [Int:Int]()
@@ -209,11 +206,35 @@ extension StatusMenuController: NarodMonAPIDelegate {
209206
for item in readingsMenuItems {
210207
statusMenu.removeItem(item)
211208
}
209+
212210
readingsMenuItems.removeAll()
213211

212+
var newReadings: [Int : Float] = [:];
213+
214214
for summ in summs {
215-
if summ.key == 1 {continue}
216-
readingsMenuItems.append(NSMenuItem(title: String(format: "%@\t%.1f%@", narodMon.types[summ.key].name, summ.value / Float(counters[summ.key]!), narodMon.types[summ.key].unit), action: nil, keyEquivalent: ""))
215+
newReadings.updateValue(summ.value / Float(counters[summ.key]!), forKey: summ.key)
216+
}
217+
218+
if readingsByTypes.keys.contains(1) {
219+
let delta = Double(abs(newReadings[1]! - self.readingsByTypes[1]!))
220+
let currentInterval = -latestValues!.timeIntervalSinceNow
221+
let newInterval = 0.1 / (delta / currentInterval)
222+
223+
if delta != 0.0 {
224+
NSLog("\"sensorsValues\" interval: \(currentInterval)s, new interval: \(newInterval)s, delta: \(delta)")
225+
userDefaults.set(newInterval, forKey: "UpdateSensorsValues")
226+
userDefaults.synchronize()
227+
}
228+
}
229+
230+
readingsByTypes = newReadings
231+
232+
latestValues = Date()
233+
goOnline()
234+
235+
for reading in readingsByTypes {
236+
if reading.key == 1 {continue}
237+
readingsMenuItems.append(NSMenuItem(title: String(format: "%@\t%.1f%@", narodMon.types[reading.key].name, reading.value, narodMon.types[reading.key].unit), action: nil, keyEquivalent: ""))
217238
statusMenu.insertItem(readingsMenuItems.last!, at: 3)
218239
}
219240

0 commit comments

Comments
 (0)