2022-06-04 07:41:52 -07:00
//
// U s e r E n t i t y E x t e n s i o n . s w i f t
2023-03-26 09:08:08 -07:00
// M e s h t a s t i c
2022-06-04 07:41:52 -07:00
//
2022-10-17 18:52:49 -07:00
// C o p y r i g h t ( c ) G a r t h V a n d e r H o u w e n 6 / 3 / 2 2 .
2022-06-04 07:41:52 -07:00
//
import Foundation
2024-05-26 12:15:50 -07:00
import CoreData
2024-06-07 22:09:20 -05:00
import MeshtasticProtobufs
2022-06-04 07:41:52 -07:00
extension UserEntity {
2023-03-06 10:33:18 -08:00
2022-06-04 07:41:52 -07:00
var messageList : [ MessageEntity ] {
2024-07-23 19:10:00 -07:00
let context = PersistenceController . shared . container . viewContext
let fetchRequest = MessageEntity . fetchRequest ( )
2024-08-03 07:02:51 -07:00
fetchRequest . sortDescriptors = [ NSSortDescriptor ( key : " messageTimestamp " , ascending : true ) ]
2024-07-23 19:10:00 -07:00
fetchRequest . predicate = NSPredicate ( format : " ((toUser == %@) OR (fromUser == %@)) AND toUser != nil AND fromUser != nil AND isEmoji == false AND admin = false AND portNum != 10 " , self , self )
return ( try ? context . fetch ( fetchRequest ) ) ? ? [ MessageEntity ] ( )
2022-06-04 07:41:52 -07:00
}
2023-03-06 10:33:18 -08:00
2023-09-09 21:23:14 -07:00
var sensorMessageList : [ MessageEntity ] {
2024-07-23 19:10:00 -07:00
let context = PersistenceController . shared . container . viewContext
let fetchRequest = MessageEntity . fetchRequest ( )
2024-08-03 07:02:51 -07:00
fetchRequest . sortDescriptors = [ NSSortDescriptor ( key : " messageTimestamp " , ascending : true ) ]
2024-07-23 19:10:00 -07:00
fetchRequest . predicate = NSPredicate ( format : " (fromUser == %@) AND portNum = 10 " , self )
return ( try ? context . fetch ( fetchRequest ) ) ? ? [ MessageEntity ] ( )
2023-09-09 21:23:14 -07:00
}
2024-05-29 16:40:07 -05:00
2023-08-28 21:46:04 -07:00
var unreadMessages : Int {
2024-05-29 16:40:07 -05:00
let unreadMessages = messageList . filter { ( $0 as AnyObject ) . read = = false }
2023-08-29 07:53:52 -07:00
return unreadMessages . count
2023-08-28 21:46:04 -07:00
}
2024-12-12 22:44:39 -08:00
// / S V G I m a g e s f o r V e n d o r s w h o a r e s i g n e d p r o j e c t b a c k e r s
2024-07-15 22:48:26 -05:00
var hardwareImage : String ? {
guard let hwModel else { return nil }
switch hwModel {
2024-12-12 08:53:10 -08:00
// / H e l t e c
2024-12-12 22:44:39 -08:00
case " HELTECHT62 " :
return " HELTECHT62 "
case " HELTECMESHNODET114 " :
return " HELTECMESHNODET114 "
case " HELTECV3 " :
return " HELTECV3 "
case " HELTECVISIONMASTERE213 " :
return " HELTECVISIONMASTERE213 "
case " HELTECVISIONMASTERE290 " :
return " HELTECVISIONMASTERE290 "
case " HELTECWIRELESSPAPER " , " HELTECWIRELESSPAPERV10 " :
return " HELTECWIRELESSPAPER "
case " HELTECWIRELESSTRACKER " , " HELTECWIRELESSTRACKERV10 " :
return " HELTECWIRELESSTRACKER "
case " HELTECWSLV3 " :
return " HELTECWSLV3 "
2024-12-12 08:53:10 -08:00
// / L i l y G O
2024-12-12 16:06:48 -08:00
case " TDECK " :
return " TDECK "
case " TECHO " :
return " TECHO "
case " TWATCHS3 " :
return " TWATCHS3 "
case " LILYGOTBEAMS3CORE " :
return " LILYGOTBEAMS3CORE "
2024-12-12 08:53:10 -08:00
case " TBEAM " , " TBEAM_V0P7 " :
return " TBEAM "
case " TLORAC6 " :
return " TLORAC6 "
2024-12-12 16:06:48 -08:00
case " TLORAT3S3EPAPER " :
return " TLORAT3S3EPAPER "
case " TLORAT3S3V1 " :
return " TLORAT3S3V1 "
case " TLORAV2116 " :
return " TLORAV2116 "
case " TLORAV2118 " :
return " TLORAV2118 "
2024-12-13 09:34:32 -08:00
// / S e e e d S t u d i o
case " SENSECAPINDICATOR " :
2024-12-19 23:08:14 -08:00
return " SENSECAPINDICATOR "
2024-12-13 09:34:32 -08:00
case " TRACKERT1000E " :
2024-12-19 23:08:14 -08:00
return " TRACKERT1000E "
2024-12-13 09:34:32 -08:00
case " SEEEDXIAOS3 " :
2024-12-19 23:08:14 -08:00
return " SEEEDXIAOS3 "
2024-12-13 09:34:32 -08:00
case " WIOWM1110 " :
2024-12-19 23:08:14 -08:00
return " WIOWM1110 "
2024-12-13 09:34:32 -08:00
// / R A K W i r e l e s s
case " RAK4631 " :
2024-12-19 23:08:14 -08:00
return " RAK4631 "
2024-12-13 09:34:32 -08:00
case " RAK11310 " :
2024-12-19 23:08:14 -08:00
return " RAK11310 "
2024-12-13 09:34:32 -08:00
case " WISMESHTAP " :
2024-12-19 23:08:14 -08:00
return " WISMESHTAP "
2024-12-12 16:06:48 -08:00
// / B & Q C o n s u l t i n g
2024-07-15 22:48:26 -05:00
case " NANOG1 " , " NANOG1EXPLORER " :
2024-12-13 09:49:03 -08:00
return " NANOG1 "
2024-07-15 22:48:26 -05:00
case " NANOG2ULTRA " :
2024-12-13 09:49:03 -08:00
return " NANOG2ULTRA "
2024-12-12 08:53:10 -08:00
case " STATIONG2 " :
2024-12-13 09:49:03 -08:00
return " STATIONG2 "
2024-12-13 09:34:32 -08:00
// / D I Y D e v i c e s
case " RPIPICO " :
return " RPIPICO "
2024-07-15 22:48:26 -05:00
default :
return " UNSET "
}
}
2022-06-04 07:41:52 -07:00
}
2024-05-26 12:15:50 -07:00
public func createUser ( num : Int64 , context : NSManagedObjectContext ) -> UserEntity {
let newUser = UserEntity ( context : context )
newUser . num = Int64 ( num )
2024-05-29 16:40:07 -05:00
let userId = String ( format : " %2X " , num )
2024-05-26 12:15:50 -07:00
newUser . userId = " ! \( userId ) "
let last4 = String ( userId . suffix ( 4 ) )
newUser . longName = " Meshtastic \( last4 ) "
newUser . shortName = last4
newUser . hwModel = " UNSET "
return newUser
}