Include sim metadata with outgoing messages

This commit is contained in:
Tulir Asokan 2023-08-30 19:35:02 +03:00
parent e0eb5b8e3f
commit 2f8af9b6eb
12 changed files with 327 additions and 137 deletions

View file

@ -1,4 +1,4 @@
-- v0 -> v4: Latest revision -- v0 -> v5: Latest revision
CREATE TABLE "user" ( CREATE TABLE "user" (
-- only: postgres -- only: postgres
@ -11,6 +11,7 @@ CREATE TABLE "user" (
session jsonb, session jsonb,
self_participant_ids jsonb NOT NULL DEFAULT '[]', self_participant_ids jsonb NOT NULL DEFAULT '[]',
sim_metadata jsonb NOT NULL DEFAULT '{}',
management_room TEXT, management_room TEXT,
space_room TEXT, space_room TEXT,

View file

@ -0,0 +1,2 @@
-- v5: Store more SIM metadata for users
ALTER TABLE "user" ADD COLUMN sim_metadata jsonb NOT NULL DEFAULT '{}';

View file

@ -29,6 +29,7 @@ import (
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"go.mau.fi/mautrix-gmessages/libgm" "go.mau.fi/mautrix-gmessages/libgm"
"go.mau.fi/mautrix-gmessages/libgm/gmproto"
) )
type UserQuery struct { type UserQuery struct {
@ -46,19 +47,19 @@ func (uq *UserQuery) getDB() *Database {
} }
func (uq *UserQuery) GetAllWithSession(ctx context.Context) ([]*User, error) { func (uq *UserQuery) GetAllWithSession(ctx context.Context) ([]*User, error) {
return getAll[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, management_room, space_room, access_token FROM "user" WHERE session IS NOT NULL`) return getAll[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, sim_metadata, management_room, space_room, access_token FROM "user" WHERE session IS NOT NULL`)
} }
func (uq *UserQuery) GetAllWithDoublePuppet(ctx context.Context) ([]*User, error) { func (uq *UserQuery) GetAllWithDoublePuppet(ctx context.Context) ([]*User, error) {
return getAll[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, management_room, space_room, access_token FROM "user" WHERE access_token<>''`) return getAll[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, sim_metadata, management_room, space_room, access_token FROM "user" WHERE access_token<>''`)
} }
func (uq *UserQuery) GetByRowID(ctx context.Context, rowID int) (*User, error) { func (uq *UserQuery) GetByRowID(ctx context.Context, rowID int) (*User, error) {
return get[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, management_room, space_room, access_token FROM "user" WHERE rowid=$1`, rowID) return get[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, sim_metadata, management_room, space_room, access_token FROM "user" WHERE rowid=$1`, rowID)
} }
func (uq *UserQuery) GetByMXID(ctx context.Context, userID id.UserID) (*User, error) { func (uq *UserQuery) GetByMXID(ctx context.Context, userID id.UserID) (*User, error) {
return get[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, management_room, space_room, access_token FROM "user" WHERE mxid=$1`, userID) return get[*User](uq, ctx, `SELECT rowid, mxid, phone_id, session, self_participant_ids, sim_metadata, management_room, space_room, access_token FROM "user" WHERE mxid=$1`, userID)
} }
type User struct { type User struct {
@ -75,13 +76,16 @@ type User struct {
SelfParticipantIDs []string SelfParticipantIDs []string
selfParticipantIDsLock sync.RWMutex selfParticipantIDsLock sync.RWMutex
simMetadata map[string]*gmproto.SIMCard
simMetadataLock sync.RWMutex
AccessToken string AccessToken string
} }
func (user *User) Scan(row dbutil.Scannable) (*User, error) { func (user *User) Scan(row dbutil.Scannable) (*User, error) {
var phoneID, session, managementRoom, spaceRoom, accessToken sql.NullString var phoneID, session, managementRoom, spaceRoom, accessToken sql.NullString
var selfParticipantIDs string var selfParticipantIDs, simMetadata string
err := row.Scan(&user.RowID, &user.MXID, &phoneID, &session, &selfParticipantIDs, &managementRoom, &spaceRoom, &accessToken) err := row.Scan(&user.RowID, &user.MXID, &phoneID, &session, &selfParticipantIDs, &simMetadata, &managementRoom, &spaceRoom, &accessToken)
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return nil, nil return nil, nil
} else if err != nil { } else if err != nil {
@ -101,6 +105,12 @@ func (user *User) Scan(row dbutil.Scannable) (*User, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse self participant IDs: %w", err) return nil, fmt.Errorf("failed to parse self participant IDs: %w", err)
} }
user.simMetadataLock.Lock()
err = json.Unmarshal([]byte(simMetadata), &user.simMetadata)
user.simMetadataLock.Unlock()
if err != nil {
return nil, fmt.Errorf("failed to parse SIM metadata: %w", err)
}
user.PhoneID = phoneID.String user.PhoneID = phoneID.String
user.AccessToken = accessToken.String user.AccessToken = accessToken.String
user.ManagementRoom = id.RoomID(managementRoom.String) user.ManagementRoom = id.RoomID(managementRoom.String)
@ -130,7 +140,13 @@ func (user *User) sqlVariables() []any {
user.selfParticipantIDsLock.RLock() user.selfParticipantIDsLock.RLock()
selfParticipantIDs, _ := json.Marshal(user.SelfParticipantIDs) selfParticipantIDs, _ := json.Marshal(user.SelfParticipantIDs)
user.selfParticipantIDsLock.RUnlock() user.selfParticipantIDsLock.RUnlock()
return []any{user.MXID, phoneID, session, string(selfParticipantIDs), managementRoom, spaceRoom, accessToken} user.simMetadataLock.RLock()
simMetadata, err := json.Marshal(user.simMetadata)
if err != nil {
panic(err)
}
user.simMetadataLock.RUnlock()
return []any{user.MXID, phoneID, session, string(selfParticipantIDs), string(simMetadata), managementRoom, spaceRoom, accessToken}
} }
func (user *User) IsSelfParticipantID(id string) bool { func (user *User) IsSelfParticipantID(id string) bool {
@ -139,6 +155,70 @@ func (user *User) IsSelfParticipantID(id string) bool {
return slices.Contains(user.SelfParticipantIDs, id) return slices.Contains(user.SelfParticipantIDs, id)
} }
type bridgeStateSIMMeta struct {
CarrierName string `json:"carrier_name"`
ColorHex string `json:"color_hex"`
ParticipantID string `json:"participant_id"`
RCSEnabled bool `json:"rcs_enabled"`
}
func (user *User) GetSIMsForBridgeState() []bridgeStateSIMMeta {
user.simMetadataLock.RLock()
data := make([]bridgeStateSIMMeta, 0, len(user.simMetadata))
for _, sim := range user.simMetadata {
data = append(data, bridgeStateSIMMeta{
CarrierName: sim.GetSIMData().GetCarrierName(),
ColorHex: sim.GetSIMData().GetHexHash(),
ParticipantID: sim.GetSIMParticipant().GetID(),
RCSEnabled: sim.GetRCSChats().GetEnabled(),
})
}
user.simMetadataLock.RUnlock()
return data
}
func (user *User) GetSIM(participantID string) *gmproto.SIMCard {
user.simMetadataLock.Lock()
defer user.simMetadataLock.Unlock()
return user.simMetadata[participantID]
}
func simsAreEqualish(a, b *gmproto.SIMCard) bool {
return a.GetRCSChats().GetEnabled() != b.GetRCSChats().GetEnabled() ||
a.GetSIMData().GetCarrierName() != b.GetSIMData().GetCarrierName() ||
a.GetSIMData().GetSIMPayload().GetSIMNumber() != b.GetSIMData().GetSIMPayload().GetSIMNumber() ||
a.GetSIMData().GetSIMPayload().GetTwo() != b.GetSIMData().GetSIMPayload().GetTwo()
}
func (user *User) SetSIMs(sims []*gmproto.SIMCard) bool {
user.simMetadataLock.Lock()
defer user.simMetadataLock.Unlock()
user.selfParticipantIDsLock.Lock()
defer user.selfParticipantIDsLock.Unlock()
newMap := make(map[string]*gmproto.SIMCard)
participantIDsChanged := false
for _, sim := range sims {
participantID := sim.GetSIMParticipant().GetID()
newMap[sim.GetSIMParticipant().GetID()] = sim
if !slices.Contains(user.SelfParticipantIDs, participantID) {
user.SelfParticipantIDs = append(user.SelfParticipantIDs, participantID)
participantIDsChanged = true
}
}
oldMap := user.simMetadata
user.simMetadata = newMap
if participantIDsChanged || len(newMap) != len(oldMap) {
return true
}
for participantID, sim := range newMap {
existing, ok := oldMap[participantID]
if !ok || !simsAreEqualish(existing, sim) {
return true
}
}
return false
}
func (user *User) AddSelfParticipantID(ctx context.Context, id string) error { func (user *User) AddSelfParticipantID(ctx context.Context, id string) error {
user.selfParticipantIDsLock.Lock() user.selfParticipantIDsLock.Lock()
defer user.selfParticipantIDsLock.Unlock() defer user.selfParticipantIDsLock.Unlock()
@ -153,12 +233,12 @@ func (user *User) AddSelfParticipantID(ctx context.Context, id string) error {
func (user *User) Insert(ctx context.Context) error { func (user *User) Insert(ctx context.Context) error {
err := user.db.Conn(ctx). err := user.db.Conn(ctx).
QueryRowContext(ctx, `INSERT INTO "user" (mxid, phone_id, session, self_participant_ids, management_room, space_room, access_token) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING rowid`, user.sqlVariables()...). QueryRowContext(ctx, `INSERT INTO "user" (mxid, phone_id, session, self_participant_ids, sim_metadata, management_room, space_room, access_token) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING rowid`, user.sqlVariables()...).
Scan(&user.RowID) Scan(&user.RowID)
return err return err
} }
func (user *User) Update(ctx context.Context) error { func (user *User) Update(ctx context.Context) error {
_, err := user.db.Conn(ctx).ExecContext(ctx, `UPDATE "user" SET phone_id=$2, session=$3, self_participant_ids=$4, management_room=$5, space_room=$6, access_token=$7 WHERE mxid=$1`, user.sqlVariables()...) _, err := user.db.Conn(ctx).ExecContext(ctx, `UPDATE "user" SET phone_id=$2, session=$3, self_participant_ids=$4, sim_metadata=$5, management_room=$6, space_room=$7, access_token=$8 WHERE mxid=$1`, user.sqlVariables()...)
return err return err
} }

View file

@ -186,7 +186,9 @@ func (c *Client) handleUpdatesEvent(msg *IncomingRPCMessage) {
c.triggerEvent(evt.UserAlertEvent) c.triggerEvent(evt.UserAlertEvent)
case *gmproto.UpdateEvents_SettingsEvent: case *gmproto.UpdateEvents_SettingsEvent:
c.logContent(msg, "", nil) c.Logger.Debug().
Str("data", base64.StdEncoding.EncodeToString(msg.DecryptedData)).
Msg("Got settings event")
c.triggerEvent(evt.SettingsEvent) c.triggerEvent(evt.SettingsEvent)
case *gmproto.UpdateEvents_ConversationEvent: case *gmproto.UpdateEvents_ConversationEvent:

View file

@ -2419,6 +2419,7 @@ type SendMessageRequest struct {
ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID,omitempty"` ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID,omitempty"`
MessagePayload *MessagePayload `protobuf:"bytes,3,opt,name=messagePayload,proto3" json:"messagePayload,omitempty"` MessagePayload *MessagePayload `protobuf:"bytes,3,opt,name=messagePayload,proto3" json:"messagePayload,omitempty"`
SIMPayload *SIMPayload `protobuf:"bytes,4,opt,name=SIMPayload,proto3" json:"SIMPayload,omitempty"`
TmpID string `protobuf:"bytes,5,opt,name=tmpID,proto3" json:"tmpID,omitempty"` TmpID string `protobuf:"bytes,5,opt,name=tmpID,proto3" json:"tmpID,omitempty"`
IsReply bool `protobuf:"varint,6,opt,name=isReply,proto3" json:"isReply,omitempty"` // not sure IsReply bool `protobuf:"varint,6,opt,name=isReply,proto3" json:"isReply,omitempty"` // not sure
Reply *ReplyPayload `protobuf:"bytes,8,opt,name=reply,proto3" json:"reply,omitempty"` Reply *ReplyPayload `protobuf:"bytes,8,opt,name=reply,proto3" json:"reply,omitempty"`
@ -2470,6 +2471,13 @@ func (x *SendMessageRequest) GetMessagePayload() *MessagePayload {
return nil return nil
} }
func (x *SendMessageRequest) GetSIMPayload() *SIMPayload {
if x != nil {
return x.SIMPayload
}
return nil
}
func (x *SendMessageRequest) GetTmpID() string { func (x *SendMessageRequest) GetTmpID() string {
if x != nil { if x != nil {
return x.TmpID return x.TmpID
@ -3204,9 +3212,10 @@ var file_client_proto_goTypes = []interface{}{
(*Conversation)(nil), // 63: conversations.Conversation (*Conversation)(nil), // 63: conversations.Conversation
(*ContactNumber)(nil), // 64: conversations.ContactNumber (*ContactNumber)(nil), // 64: conversations.ContactNumber
(ConversationStatus)(0), // 65: conversations.ConversationStatus (ConversationStatus)(0), // 65: conversations.ConversationStatus
(*MessageInfo)(nil), // 66: conversations.MessageInfo (*SIMPayload)(nil), // 66: settings.SIMPayload
(*MessageContent)(nil), // 67: conversations.MessageContent (*MessageInfo)(nil), // 67: conversations.MessageInfo
(*ReactionData)(nil), // 68: conversations.ReactionData (*MessageContent)(nil), // 68: conversations.MessageContent
(*ReactionData)(nil), // 69: conversations.ReactionData
} }
var file_client_proto_depIdxs = []int32{ var file_client_proto_depIdxs = []int32{
57, // 0: client.ReceiveMessagesRequest.auth:type_name -> authentication.AuthMessage 57, // 0: client.ReceiveMessagesRequest.auth:type_name -> authentication.AuthMessage
@ -3241,20 +3250,21 @@ var file_client_proto_depIdxs = []int32{
1, // 29: client.UpdateConversationData.mute:type_name -> client.ConversationMuteStatus 1, // 29: client.UpdateConversationData.mute:type_name -> client.ConversationMuteStatus
63, // 30: client.GetConversationResponse.conversation:type_name -> conversations.Conversation 63, // 30: client.GetConversationResponse.conversation:type_name -> conversations.Conversation
46, // 31: client.SendMessageRequest.messagePayload:type_name -> client.MessagePayload 46, // 31: client.SendMessageRequest.messagePayload:type_name -> client.MessagePayload
45, // 32: client.SendMessageRequest.reply:type_name -> client.ReplyPayload 66, // 32: client.SendMessageRequest.SIMPayload:type_name -> settings.SIMPayload
47, // 33: client.MessagePayload.messagePayloadContent:type_name -> client.MessagePayloadContent 45, // 33: client.SendMessageRequest.reply:type_name -> client.ReplyPayload
66, // 34: client.MessagePayload.messageInfo:type_name -> conversations.MessageInfo 47, // 34: client.MessagePayload.messagePayloadContent:type_name -> client.MessagePayloadContent
67, // 35: client.MessagePayloadContent.messageContent:type_name -> conversations.MessageContent 67, // 35: client.MessagePayload.messageInfo:type_name -> conversations.MessageInfo
68, // 36: client.SendReactionRequest.reactionData:type_name -> conversations.ReactionData 68, // 36: client.MessagePayloadContent.messageContent:type_name -> conversations.MessageContent
4, // 37: client.SendReactionRequest.action:type_name -> client.SendReactionRequest.Action 69, // 37: client.SendReactionRequest.reactionData:type_name -> conversations.ReactionData
56, // 38: client.TypingUpdateRequest.data:type_name -> client.TypingUpdateRequest.Data 4, // 38: client.SendReactionRequest.action:type_name -> client.SendReactionRequest.Action
53, // 39: client.ReceiveMessagesRequest.UnknownEmptyObject2.unknown:type_name -> client.ReceiveMessagesRequest.UnknownEmptyObject1 56, // 39: client.TypingUpdateRequest.data:type_name -> client.TypingUpdateRequest.Data
59, // 40: client.AckMessageRequest.Message.device:type_name -> authentication.Device 53, // 40: client.ReceiveMessagesRequest.UnknownEmptyObject2.unknown:type_name -> client.ReceiveMessagesRequest.UnknownEmptyObject1
41, // [41:41] is the sub-list for method output_type 59, // 41: client.AckMessageRequest.Message.device:type_name -> authentication.Device
41, // [41:41] is the sub-list for method input_type 42, // [42:42] is the sub-list for method output_type
41, // [41:41] is the sub-list for extension type_name 42, // [42:42] is the sub-list for method input_type
41, // [41:41] is the sub-list for extension extendee 42, // [42:42] is the sub-list for extension type_name
0, // [0:41] is the sub-list for field type_name 42, // [42:42] is the sub-list for extension extendee
0, // [0:42] is the sub-list for field type_name
} }
func init() { file_client_proto_init() } func init() { file_client_proto_init() }
@ -3264,6 +3274,7 @@ func file_client_proto_init() {
} }
file_conversations_proto_init() file_conversations_proto_init()
file_authentication_proto_init() file_authentication_proto_init()
file_settings_proto_init()
file_util_proto_init() file_util_proto_init()
if !protoimpl.UnsafeEnabled { if !protoimpl.UnsafeEnabled {
file_client_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {

Binary file not shown.

View file

@ -5,6 +5,7 @@ option go_package = "../gmproto";
import "conversations.proto"; import "conversations.proto";
import "authentication.proto"; import "authentication.proto";
import "settings.proto";
import "util.proto"; import "util.proto";
message NotifyDittoActivityRequest { message NotifyDittoActivityRequest {
@ -249,6 +250,7 @@ message IsBugleDefaultResponse {
message SendMessageRequest { message SendMessageRequest {
string conversationID = 2; string conversationID = 2;
MessagePayload messagePayload = 3; MessagePayload messagePayload = 3;
settings.SIMPayload SIMPayload = 4;
string tmpID = 5; string tmpID = 5;
bool isReply = 6; // not sure bool isReply = 6; // not sure
ReplyPayload reply = 8; ReplyPayload reply = 8;

View file

@ -27,9 +27,9 @@ type Settings struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Data *Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` SIMCards []*SIMCard `protobuf:"bytes,2,rep,name=SIMCards,proto3" json:"SIMCards,omitempty"`
OpCodeData *SomeData `protobuf:"bytes,3,opt,name=opCodeData,proto3" json:"opCodeData,omitempty"` OpCodeData *SomeData `protobuf:"bytes,3,opt,name=opCodeData,proto3" json:"opCodeData,omitempty"`
RcsSettings *RCSSettings `protobuf:"bytes,4,opt,name=rcsSettings,proto3" json:"rcsSettings,omitempty"` RCSSettings *RCSSettings `protobuf:"bytes,4,opt,name=RCSSettings,proto3" json:"RCSSettings,omitempty"`
BugleVersion string `protobuf:"bytes,5,opt,name=bugleVersion,proto3" json:"bugleVersion,omitempty"` BugleVersion string `protobuf:"bytes,5,opt,name=bugleVersion,proto3" json:"bugleVersion,omitempty"`
Bool1 bool `protobuf:"varint,7,opt,name=bool1,proto3" json:"bool1,omitempty"` Bool1 bool `protobuf:"varint,7,opt,name=bool1,proto3" json:"bool1,omitempty"`
BoolFields2 *BooleanFields2 `protobuf:"bytes,8,opt,name=boolFields2,proto3" json:"boolFields2,omitempty"` BoolFields2 *BooleanFields2 `protobuf:"bytes,8,opt,name=boolFields2,proto3" json:"boolFields2,omitempty"`
@ -69,9 +69,9 @@ func (*Settings) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{0} return file_settings_proto_rawDescGZIP(), []int{0}
} }
func (x *Settings) GetData() *Data { func (x *Settings) GetSIMCards() []*SIMCard {
if x != nil { if x != nil {
return x.Data return x.SIMCards
} }
return nil return nil
} }
@ -83,9 +83,9 @@ func (x *Settings) GetOpCodeData() *SomeData {
return nil return nil
} }
func (x *Settings) GetRcsSettings() *RCSSettings { func (x *Settings) GetRCSSettings() *RCSSettings {
if x != nil { if x != nil {
return x.RcsSettings return x.RCSSettings
} }
return nil return nil
} }
@ -125,19 +125,19 @@ func (x *Settings) GetBoolFields3() *BooleanFields3 {
return nil return nil
} }
type Data struct { type SIMCard struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
RcsChats *RCSChats `protobuf:"bytes,3,opt,name=rcsChats,proto3" json:"rcsChats,omitempty"` RCSChats *RCSChats `protobuf:"bytes,3,opt,name=RCSChats,proto3,oneof" json:"RCSChats,omitempty"`
SimData *SimData `protobuf:"bytes,5,opt,name=simData,proto3" json:"simData,omitempty"` SIMData *SIMData `protobuf:"bytes,5,opt,name=SIMData,proto3" json:"SIMData,omitempty"`
Bool1 bool `protobuf:"varint,6,opt,name=bool1,proto3" json:"bool1,omitempty"` Bool1 bool `protobuf:"varint,6,opt,name=bool1,proto3" json:"bool1,omitempty"`
NoClue *NoClue `protobuf:"bytes,7,opt,name=noClue,proto3" json:"noClue,omitempty"` SIMParticipant *SIMParticipant `protobuf:"bytes,7,opt,name=SIMParticipant,proto3" json:"SIMParticipant,omitempty"`
} }
func (x *Data) Reset() { func (x *SIMCard) Reset() {
*x = Data{} *x = SIMCard{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[1] mi := &file_settings_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -145,13 +145,13 @@ func (x *Data) Reset() {
} }
} }
func (x *Data) String() string { func (x *SIMCard) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*Data) ProtoMessage() {} func (*SIMCard) ProtoMessage() {}
func (x *Data) ProtoReflect() protoreflect.Message { func (x *SIMCard) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[1] mi := &file_settings_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -163,35 +163,35 @@ func (x *Data) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use Data.ProtoReflect.Descriptor instead. // Deprecated: Use SIMCard.ProtoReflect.Descriptor instead.
func (*Data) Descriptor() ([]byte, []int) { func (*SIMCard) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{1} return file_settings_proto_rawDescGZIP(), []int{1}
} }
func (x *Data) GetRcsChats() *RCSChats { func (x *SIMCard) GetRCSChats() *RCSChats {
if x != nil { if x != nil {
return x.RcsChats return x.RCSChats
} }
return nil return nil
} }
func (x *Data) GetSimData() *SimData { func (x *SIMCard) GetSIMData() *SIMData {
if x != nil { if x != nil {
return x.SimData return x.SIMData
} }
return nil return nil
} }
func (x *Data) GetBool1() bool { func (x *SIMCard) GetBool1() bool {
if x != nil { if x != nil {
return x.Bool1 return x.Bool1
} }
return false return false
} }
func (x *Data) GetNoClue() *NoClue { func (x *SIMCard) GetSIMParticipant() *SIMParticipant {
if x != nil { if x != nil {
return x.NoClue return x.SIMParticipant
} }
return nil return nil
} }
@ -290,20 +290,17 @@ func (x *BoolMsg) GetBool1() bool {
return false return false
} }
type SimData struct { type SIMPayload struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
UnknownMessage *UnknownMessage `protobuf:"bytes,1,opt,name=unknownMessage,proto3" json:"unknownMessage,omitempty"` Two int32 `protobuf:"varint,1,opt,name=two,proto3" json:"two,omitempty"`
Bool1 bool `protobuf:"varint,2,opt,name=bool1,proto3" json:"bool1,omitempty"` SIMNumber int32 `protobuf:"varint,2,opt,name=SIMNumber,proto3" json:"SIMNumber,omitempty"`
CarrierName string `protobuf:"bytes,3,opt,name=carrierName,proto3" json:"carrierName,omitempty"`
HexHash string `protobuf:"bytes,4,opt,name=hexHash,proto3" json:"hexHash,omitempty"`
Int1 int64 `protobuf:"varint,5,opt,name=int1,proto3" json:"int1,omitempty"`
} }
func (x *SimData) Reset() { func (x *SIMPayload) Reset() {
*x = SimData{} *x = SIMPayload{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[4] mi := &file_settings_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -311,13 +308,13 @@ func (x *SimData) Reset() {
} }
} }
func (x *SimData) String() string { func (x *SIMPayload) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*SimData) ProtoMessage() {} func (*SIMPayload) ProtoMessage() {}
func (x *SimData) ProtoReflect() protoreflect.Message { func (x *SIMPayload) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[4] mi := &file_settings_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -329,40 +326,98 @@ func (x *SimData) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use SimData.ProtoReflect.Descriptor instead. // Deprecated: Use SIMPayload.ProtoReflect.Descriptor instead.
func (*SimData) Descriptor() ([]byte, []int) { func (*SIMPayload) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{4} return file_settings_proto_rawDescGZIP(), []int{4}
} }
func (x *SimData) GetUnknownMessage() *UnknownMessage { func (x *SIMPayload) GetTwo() int32 {
if x != nil { if x != nil {
return x.UnknownMessage return x.Two
}
return 0
}
func (x *SIMPayload) GetSIMNumber() int32 {
if x != nil {
return x.SIMNumber
}
return 0
}
type SIMData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SIMPayload *SIMPayload `protobuf:"bytes,1,opt,name=SIMPayload,proto3" json:"SIMPayload,omitempty"`
Bool1 bool `protobuf:"varint,2,opt,name=bool1,proto3" json:"bool1,omitempty"`
CarrierName string `protobuf:"bytes,3,opt,name=carrierName,proto3" json:"carrierName,omitempty"`
HexHash string `protobuf:"bytes,4,opt,name=hexHash,proto3" json:"hexHash,omitempty"`
Int1 int64 `protobuf:"varint,5,opt,name=int1,proto3" json:"int1,omitempty"`
}
func (x *SIMData) Reset() {
*x = SIMData{}
if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SIMData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SIMData) ProtoMessage() {}
func (x *SIMData) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SIMData.ProtoReflect.Descriptor instead.
func (*SIMData) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{5}
}
func (x *SIMData) GetSIMPayload() *SIMPayload {
if x != nil {
return x.SIMPayload
} }
return nil return nil
} }
func (x *SimData) GetBool1() bool { func (x *SIMData) GetBool1() bool {
if x != nil { if x != nil {
return x.Bool1 return x.Bool1
} }
return false return false
} }
func (x *SimData) GetCarrierName() string { func (x *SIMData) GetCarrierName() string {
if x != nil { if x != nil {
return x.CarrierName return x.CarrierName
} }
return "" return ""
} }
func (x *SimData) GetHexHash() string { func (x *SIMData) GetHexHash() string {
if x != nil { if x != nil {
return x.HexHash return x.HexHash
} }
return "" return ""
} }
func (x *SimData) GetInt1() int64 { func (x *SIMData) GetInt1() int64 {
if x != nil { if x != nil {
return x.Int1 return x.Int1
} }
@ -381,7 +436,7 @@ type UnknownMessage struct {
func (x *UnknownMessage) Reset() { func (x *UnknownMessage) Reset() {
*x = UnknownMessage{} *x = UnknownMessage{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[5] mi := &file_settings_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -394,7 +449,7 @@ func (x *UnknownMessage) String() string {
func (*UnknownMessage) ProtoMessage() {} func (*UnknownMessage) ProtoMessage() {}
func (x *UnknownMessage) ProtoReflect() protoreflect.Message { func (x *UnknownMessage) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[5] mi := &file_settings_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -407,7 +462,7 @@ func (x *UnknownMessage) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnknownMessage.ProtoReflect.Descriptor instead. // Deprecated: Use UnknownMessage.ProtoReflect.Descriptor instead.
func (*UnknownMessage) Descriptor() ([]byte, []int) { func (*UnknownMessage) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{5} return file_settings_proto_rawDescGZIP(), []int{6}
} }
func (x *UnknownMessage) GetInt1() int64 { func (x *UnknownMessage) GetInt1() int64 {
@ -424,31 +479,31 @@ func (x *UnknownMessage) GetInt2() int64 {
return 0 return 0
} }
type NoClue struct { type SIMParticipant struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Count string `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
} }
func (x *NoClue) Reset() { func (x *SIMParticipant) Reset() {
*x = NoClue{} *x = SIMParticipant{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[6] mi := &file_settings_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
} }
func (x *NoClue) String() string { func (x *SIMParticipant) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*NoClue) ProtoMessage() {} func (*SIMParticipant) ProtoMessage() {}
func (x *NoClue) ProtoReflect() protoreflect.Message { func (x *SIMParticipant) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[6] mi := &file_settings_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -459,14 +514,14 @@ func (x *NoClue) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use NoClue.ProtoReflect.Descriptor instead. // Deprecated: Use SIMParticipant.ProtoReflect.Descriptor instead.
func (*NoClue) Descriptor() ([]byte, []int) { func (*SIMParticipant) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{6} return file_settings_proto_rawDescGZIP(), []int{7}
} }
func (x *NoClue) GetCount() string { func (x *SIMParticipant) GetID() string {
if x != nil { if x != nil {
return x.Count return x.ID
} }
return "" return ""
} }
@ -486,7 +541,7 @@ type SomeData struct {
func (x *SomeData) Reset() { func (x *SomeData) Reset() {
*x = SomeData{} *x = SomeData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[7] mi := &file_settings_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -499,7 +554,7 @@ func (x *SomeData) String() string {
func (*SomeData) ProtoMessage() {} func (*SomeData) ProtoMessage() {}
func (x *SomeData) ProtoReflect() protoreflect.Message { func (x *SomeData) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[7] mi := &file_settings_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -512,7 +567,7 @@ func (x *SomeData) ProtoReflect() protoreflect.Message {
// Deprecated: Use SomeData.ProtoReflect.Descriptor instead. // Deprecated: Use SomeData.ProtoReflect.Descriptor instead.
func (*SomeData) Descriptor() ([]byte, []int) { func (*SomeData) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{7} return file_settings_proto_rawDescGZIP(), []int{8}
} }
func (x *SomeData) GetField7() bool { func (x *SomeData) GetField7() bool {
@ -564,7 +619,7 @@ type RCSSettings struct {
func (x *RCSSettings) Reset() { func (x *RCSSettings) Reset() {
*x = RCSSettings{} *x = RCSSettings{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[8] mi := &file_settings_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -577,7 +632,7 @@ func (x *RCSSettings) String() string {
func (*RCSSettings) ProtoMessage() {} func (*RCSSettings) ProtoMessage() {}
func (x *RCSSettings) ProtoReflect() protoreflect.Message { func (x *RCSSettings) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[8] mi := &file_settings_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -590,7 +645,7 @@ func (x *RCSSettings) ProtoReflect() protoreflect.Message {
// Deprecated: Use RCSSettings.ProtoReflect.Descriptor instead. // Deprecated: Use RCSSettings.ProtoReflect.Descriptor instead.
func (*RCSSettings) Descriptor() ([]byte, []int) { func (*RCSSettings) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{8} return file_settings_proto_rawDescGZIP(), []int{9}
} }
func (x *RCSSettings) GetIsEnabled() bool { func (x *RCSSettings) GetIsEnabled() bool {
@ -636,7 +691,7 @@ type BooleanFields2 struct {
func (x *BooleanFields2) Reset() { func (x *BooleanFields2) Reset() {
*x = BooleanFields2{} *x = BooleanFields2{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[9] mi := &file_settings_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -649,7 +704,7 @@ func (x *BooleanFields2) String() string {
func (*BooleanFields2) ProtoMessage() {} func (*BooleanFields2) ProtoMessage() {}
func (x *BooleanFields2) ProtoReflect() protoreflect.Message { func (x *BooleanFields2) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[9] mi := &file_settings_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -662,7 +717,7 @@ func (x *BooleanFields2) ProtoReflect() protoreflect.Message {
// Deprecated: Use BooleanFields2.ProtoReflect.Descriptor instead. // Deprecated: Use BooleanFields2.ProtoReflect.Descriptor instead.
func (*BooleanFields2) Descriptor() ([]byte, []int) { func (*BooleanFields2) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{9} return file_settings_proto_rawDescGZIP(), []int{10}
} }
func (x *BooleanFields2) GetBool1() bool { func (x *BooleanFields2) GetBool1() bool {
@ -718,7 +773,7 @@ type BooleanFields3 struct {
func (x *BooleanFields3) Reset() { func (x *BooleanFields3) Reset() {
*x = BooleanFields3{} *x = BooleanFields3{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_settings_proto_msgTypes[10] mi := &file_settings_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -731,7 +786,7 @@ func (x *BooleanFields3) String() string {
func (*BooleanFields3) ProtoMessage() {} func (*BooleanFields3) ProtoMessage() {}
func (x *BooleanFields3) ProtoReflect() protoreflect.Message { func (x *BooleanFields3) ProtoReflect() protoreflect.Message {
mi := &file_settings_proto_msgTypes[10] mi := &file_settings_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -744,7 +799,7 @@ func (x *BooleanFields3) ProtoReflect() protoreflect.Message {
// Deprecated: Use BooleanFields3.ProtoReflect.Descriptor instead. // Deprecated: Use BooleanFields3.ProtoReflect.Descriptor instead.
func (*BooleanFields3) Descriptor() ([]byte, []int) { func (*BooleanFields3) Descriptor() ([]byte, []int) {
return file_settings_proto_rawDescGZIP(), []int{10} return file_settings_proto_rawDescGZIP(), []int{11}
} }
func (x *BooleanFields3) GetBool1() bool { func (x *BooleanFields3) GetBool1() bool {
@ -820,30 +875,31 @@ func file_settings_proto_rawDescGZIP() []byte {
return file_settings_proto_rawDescData return file_settings_proto_rawDescData
} }
var file_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_settings_proto_goTypes = []interface{}{ var file_settings_proto_goTypes = []interface{}{
(*Settings)(nil), // 0: settings.Settings (*Settings)(nil), // 0: settings.Settings
(*Data)(nil), // 1: settings.Data (*SIMCard)(nil), // 1: settings.SIMCard
(*RCSChats)(nil), // 2: settings.RCSChats (*RCSChats)(nil), // 2: settings.RCSChats
(*BoolMsg)(nil), // 3: settings.BoolMsg (*BoolMsg)(nil), // 3: settings.BoolMsg
(*SimData)(nil), // 4: settings.SimData (*SIMPayload)(nil), // 4: settings.SIMPayload
(*UnknownMessage)(nil), // 5: settings.UnknownMessage (*SIMData)(nil), // 5: settings.SIMData
(*NoClue)(nil), // 6: settings.NoClue (*UnknownMessage)(nil), // 6: settings.UnknownMessage
(*SomeData)(nil), // 7: settings.SomeData (*SIMParticipant)(nil), // 7: settings.SIMParticipant
(*RCSSettings)(nil), // 8: settings.RCSSettings (*SomeData)(nil), // 8: settings.SomeData
(*BooleanFields2)(nil), // 9: settings.BooleanFields2 (*RCSSettings)(nil), // 9: settings.RCSSettings
(*BooleanFields3)(nil), // 10: settings.BooleanFields3 (*BooleanFields2)(nil), // 10: settings.BooleanFields2
(*BooleanFields3)(nil), // 11: settings.BooleanFields3
} }
var file_settings_proto_depIdxs = []int32{ var file_settings_proto_depIdxs = []int32{
1, // 0: settings.Settings.data:type_name -> settings.Data 1, // 0: settings.Settings.SIMCards:type_name -> settings.SIMCard
7, // 1: settings.Settings.opCodeData:type_name -> settings.SomeData 8, // 1: settings.Settings.opCodeData:type_name -> settings.SomeData
8, // 2: settings.Settings.rcsSettings:type_name -> settings.RCSSettings 9, // 2: settings.Settings.RCSSettings:type_name -> settings.RCSSettings
9, // 3: settings.Settings.boolFields2:type_name -> settings.BooleanFields2 10, // 3: settings.Settings.boolFields2:type_name -> settings.BooleanFields2
10, // 4: settings.Settings.boolFields3:type_name -> settings.BooleanFields3 11, // 4: settings.Settings.boolFields3:type_name -> settings.BooleanFields3
2, // 5: settings.Data.rcsChats:type_name -> settings.RCSChats 2, // 5: settings.SIMCard.RCSChats:type_name -> settings.RCSChats
4, // 6: settings.Data.simData:type_name -> settings.SimData 5, // 6: settings.SIMCard.SIMData:type_name -> settings.SIMData
6, // 7: settings.Data.noClue:type_name -> settings.NoClue 7, // 7: settings.SIMCard.SIMParticipant:type_name -> settings.SIMParticipant
5, // 8: settings.SimData.unknownMessage:type_name -> settings.UnknownMessage 4, // 8: settings.SIMData.SIMPayload:type_name -> settings.SIMPayload
3, // 9: settings.BooleanFields2.boolMsg1:type_name -> settings.BoolMsg 3, // 9: settings.BooleanFields2.boolMsg1:type_name -> settings.BoolMsg
3, // 10: settings.BooleanFields2.boolMsg2:type_name -> settings.BoolMsg 3, // 10: settings.BooleanFields2.boolMsg2:type_name -> settings.BoolMsg
11, // [11:11] is the sub-list for method output_type 11, // [11:11] is the sub-list for method output_type
@ -872,7 +928,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Data); i { switch v := v.(*SIMCard); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -908,7 +964,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SimData); i { switch v := v.(*SIMPayload); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -920,7 +976,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UnknownMessage); i { switch v := v.(*SIMData); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -932,7 +988,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NoClue); i { switch v := v.(*UnknownMessage); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -944,7 +1000,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SomeData); i { switch v := v.(*SIMParticipant); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -956,7 +1012,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RCSSettings); i { switch v := v.(*SomeData); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -968,7 +1024,7 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BooleanFields2); i { switch v := v.(*RCSSettings); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -980,6 +1036,18 @@ func file_settings_proto_init() {
} }
} }
file_settings_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_settings_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BooleanFields2); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_settings_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BooleanFields3); i { switch v := v.(*BooleanFields3); i {
case 0: case 0:
return &v.state return &v.state
@ -992,13 +1060,14 @@ func file_settings_proto_init() {
} }
} }
} }
file_settings_proto_msgTypes[1].OneofWrappers = []interface{}{}
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_settings_proto_rawDesc, RawDescriptor: file_settings_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 11, NumMessages: 12,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

Binary file not shown.

View file

@ -5,9 +5,9 @@ option go_package = "../gmproto";
message Settings { message Settings {
Data data = 2; repeated SIMCard SIMCards = 2;
SomeData opCodeData = 3; SomeData opCodeData = 3;
RCSSettings rcsSettings = 4; RCSSettings RCSSettings = 4;
string bugleVersion = 5; string bugleVersion = 5;
bool bool1 = 7; bool bool1 = 7;
BooleanFields2 boolFields2 = 8; BooleanFields2 boolFields2 = 8;
@ -15,11 +15,11 @@ message Settings {
BooleanFields3 boolFields3 = 10; BooleanFields3 boolFields3 = 10;
} }
message Data { // i think its simdata? no clue message SIMCard {
RCSChats rcsChats = 3; optional RCSChats RCSChats = 3;
SimData simData = 5; SIMData SIMData = 5;
bool bool1 = 6; bool bool1 = 6;
NoClue noClue = 7; SIMParticipant SIMParticipant = 7;
} }
message RCSChats { message RCSChats {
@ -30,8 +30,13 @@ message BoolMsg {
bool bool1 = 1; bool bool1 = 1;
} }
message SimData { message SIMPayload {
UnknownMessage unknownMessage = 1; int32 two = 1;
int32 SIMNumber = 2;
}
message SIMData {
SIMPayload SIMPayload = 1;
bool bool1 = 2; bool bool1 = 2;
string carrierName = 3; string carrierName = 3;
string hexHash = 4; string hexHash = 4;
@ -43,8 +48,8 @@ message UnknownMessage {
int64 int2 = 2; int64 int2 = 2;
} }
message NoClue { // just a guess lol message SIMParticipant {
string count = 1; string ID = 1;
} }
message SomeData { message SomeData {

View file

@ -1628,6 +1628,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, co
TmpID2: txnID, TmpID2: txnID,
ParticipantID: portal.OutgoingID, ParticipantID: portal.OutgoingID,
}, },
SIMPayload: sender.GetSIM(portal.OutgoingID).GetSIMData().GetSIMPayload(),
} }
replyToMXID := content.RelatesTo.GetReplyTo() replyToMXID := content.RelatesTo.GetReplyTo()

17
user.go
View file

@ -617,6 +617,8 @@ func (user *User) syncHandleEvent(event any) {
portal.messages <- PortalMessage{evt: v.Message, source: user, raw: v.Data} portal.messages <- PortalMessage{evt: v.Message, source: user, raw: v.Data}
case *gmproto.UserAlertEvent: case *gmproto.UserAlertEvent:
user.handleUserAlert(v) user.handleUserAlert(v)
case *gmproto.Settings:
user.handleSettings(v)
default: default:
user.zlog.Trace().Any("data", v).Type("data_type", v).Msg("Unknown event") user.zlog.Trace().Any("data", v).Type("data_type", v).Msg("Unknown event")
} }
@ -735,11 +737,26 @@ func (user *User) handleUserAlert(v *gmproto.UserAlertEvent) {
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
} }
func (user *User) handleSettings(settings *gmproto.Settings) {
if settings.SIMCards == nil {
return
}
ctx := context.TODO()
if user.SetSIMs(settings.SIMCards) {
err := user.Update(ctx)
if err != nil {
user.zlog.Err(err).Msg("Failed to save SIM details")
}
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
}
}
func (user *User) FillBridgeState(state status.BridgeState) status.BridgeState { func (user *User) FillBridgeState(state status.BridgeState) status.BridgeState {
if state.Info == nil { if state.Info == nil {
state.Info = make(map[string]any) state.Info = make(map[string]any)
} }
if state.StateEvent == status.StateConnected { if state.StateEvent == status.StateConnected {
state.Info["sims"] = user.GetSIMsForBridgeState()
state.Info["battery_low"] = user.batteryLow state.Info["battery_low"] = user.batteryLow
state.Info["mobile_data"] = user.mobileData state.Info["mobile_data"] = user.mobileData
state.Info["browser_active"] = user.browserInactiveType == "" state.Info["browser_active"] = user.browserInactiveType == ""