@@ -197,17 +197,24 @@ func (s *MessageService) SendMessage(ctx context.Context, req *models.SendMessag
197197
198198 var content * event.MessageEventContent
199199
200- // Check if this is a file transfer message
201- if models .IsFileTransferContentType (req .ContentType ) {
202- logger .Debug ().Str ("content_type" , req .ContentType ).Msg ("processing file transfer message" )
200+ // Always expect file transfer format
201+ logger .Debug ().Str ("content_type" , req .ContentType ).Msg ("processing file transfer message" )
203202
204- // Parse the file transfer JSON from the body
205- ftMsg , err := models .ParseFileTransferMessage (req .Body )
206- if err != nil {
207- logger .Warn ().Err (err ).Str ("body" , req .Body ).Msg ("failed to parse file transfer message" )
208- return nil , fmt .Errorf ("invalid file transfer message: %w" , err )
209- }
203+ // Parse the file transfer JSON from the body
204+ ftMsg , err := models .ParseFileTransferMessage (req .Body )
205+ if err != nil {
206+ logger .Warn ().Err (err ).Str ("body" , req .Body ).Msg ("failed to parse file transfer message" )
207+ return nil , fmt .Errorf ("invalid file transfer message: %w" , err )
208+ }
210209
210+ // Check if attachments are empty - if so, treat as text message
211+ if len (ftMsg .Attachments ) == 0 {
212+ logger .Debug ().Msg ("file transfer message has empty attachments, sending as text message" )
213+ content = & event.MessageEventContent {
214+ MsgType : event .MsgText ,
215+ Body : ftMsg .Body ,
216+ }
217+ } else {
211218 // Convert to Matrix event content
212219 msgType , rawContent , err := models .FileTransferToMatrixEventContent (ftMsg )
213220 if err != nil {
@@ -253,12 +260,6 @@ func (s *MessageService) SendMessage(ctx context.Context, req *models.SendMessag
253260 }
254261
255262 logger .Debug ().Str ("msg_type" , msgType ).Str ("url" , string (content .URL )).Msg ("converted file transfer to Matrix media message" )
256- } else {
257- // Regular text message
258- content = & event.MessageEventContent {
259- MsgType : event .MsgText ,
260- Body : req .Body ,
261- }
262263 }
263264
264265 resp , err := s .matrixClient .SendMessage (ctx , senderMatrix , roomID , content )
@@ -353,53 +354,18 @@ func (s *MessageService) FetchMessages(ctx context.Context, req *models.FetchMes
353354
354355 logger .Debug ().Str ("event_id" , string (evt .ID )).Str ("room_id" , string (eventRoomID )).Msg ("processing message event" )
355356
356- // Get message type from content
357- msgType := ""
358- if mt , ok := evt .Content .Raw ["msgtype" ].(string ); ok {
359- msgType = mt
357+ body := ""
358+ if b , ok := evt .Content .Raw ["body" ].(string ); ok {
359+ body = b
360360 }
361-
362- // Initialize SMS with common fields
363361 sms := models.SMS {
364362 SMSID : string (evt .ID ),
365363 SendingDate : time .UnixMilli (evt .Timestamp ).UTC ().Format (time .RFC3339 ),
364+ SMSText : body ,
365+ ContentType : "text/plain" ,
366366 StreamID : string (roomID ),
367367 }
368368
369- // Handle different message types
370- switch msgType {
371- case "m.image" , "m.video" , "m.audio" , "m.file" :
372- // Convert Matrix media message to Acrobits file transfer format
373- body := ""
374- if b , ok := evt .Content .Raw ["body" ].(string ); ok {
375- body = b
376- }
377-
378- url , mimeType , filename , size , thumbnailURL , thumbnailMimeType := models .ExtractMatrixMediaInfo (evt .Content .Raw )
379-
380- // Convert to file transfer JSON
381- ftJSON , err := models .MatrixMediaToFileTransfer (msgType , body , url , mimeType , filename , size , thumbnailURL , thumbnailMimeType )
382- if err != nil {
383- logger .Warn ().Err (err ).Str ("event_id" , string (evt .ID )).Msg ("failed to convert Matrix media to file transfer" )
384- // Fall back to text message with URL
385- sms .SMSText = url
386- sms .ContentType = "text/plain"
387- } else {
388- sms .SMSText = ftJSON
389- sms .ContentType = models .FileTransferContentType
390- logger .Debug ().Str ("event_id" , string (evt .ID )).Str ("msg_type" , msgType ).Str ("url" , url ).Msg ("converted Matrix media message to file transfer" )
391- }
392-
393- default :
394- // Regular text message
395- body := ""
396- if b , ok := evt .Content .Raw ["body" ].(string ); ok {
397- body = b
398- }
399- sms .SMSText = body
400- sms .ContentType = "text/plain"
401- }
402-
403369 // Determine if I sent the message
404370 senderMatrixID := string (evt .Sender )
405371 isSent := isSentBy (senderMatrixID , string (userID ))
@@ -423,7 +389,6 @@ func (s *MessageService) FetchMessages(ctx context.Context, req *models.FetchMes
423389 Str ("sender" , sms .Sender ).
424390 Str ("recipient" , sms .Recipient ).
425391 Bool ("is_sent" , isSent ).
426- Str ("content_type" , sms .ContentType ).
427392 Interface ("sms" , sms ).
428393 Msg ("processed message from sync" )
429394
0 commit comments