diff --git a/candy/net.go b/candy/net.go index adb769f..91b7c3a 100644 --- a/candy/net.go +++ b/candy/net.go @@ -54,7 +54,7 @@ func flush() { for _, ws := range n.ipWsMap { if ws.dev.model.Online { hasDeviceOnline = true - ws.dev.model.Save() + ws.dev.model.SaveRxTxOnline() } } if hasDeviceOnline && !refreshedUsers.ContainsOne(n.model.UserID) { diff --git a/candy/websocket.go b/candy/websocket.go index 71abbaf..8f90841 100644 --- a/candy/websocket.go +++ b/candy/websocket.go @@ -82,7 +82,7 @@ func handleWebsocket(c *gin.Context) { if ws.dev != nil && ws.dev.model.Online { ws.dev.model.Online = false - ws.dev.model.Save() + ws.dev.model.SaveRxTxOnline() net.ipWsMapMutex.Lock() defer net.ipWsMapMutex.Unlock() @@ -144,7 +144,7 @@ func (ws *candysocket) handlePingMessage(buffer string) error { } if ws.dev.model.Online { - ws.dev.model.Save() + ws.dev.model.SaveOsVersionHostname() } ws.writePong([]byte(buffer)) @@ -181,7 +181,7 @@ func (ws *candysocket) handleAuthMessage(buffer []byte) error { if oldws, ok := ws.net.ipWsMap[message.IP]; ok { oldws.dev.model.Online = false - oldws.dev.model.Save() + oldws.dev.model.SaveRxTxOnline() oldws.writeCloseMessage("vmac conflict") oldws.conn.Close() } diff --git a/model/device.go b/model/device.go index 26f7d0b..9d428b5 100644 --- a/model/device.go +++ b/model/device.go @@ -39,6 +39,24 @@ func (d *Device) Save() { } } +func (d *Device) SaveRxTxOnline() { + db := storage.Get() + if d.ID == 0 { + db.Create(d) + } else { + db.Model(d).Select("rx", "tx", "online").Updates(d) + } +} + +func (d *Device) SaveOsVersionHostname() { + db := storage.Get() + if d.ID == 0 { + db.Create(d) + } else { + db.Model(d).Select("os", "version", "hostname").Updates(d) + } +} + func (d *Device) Delete() { db := storage.Get() db.Delete(d)