2 Commits 6cbb50dc36 ... f91a0b4a4f

Autor SHA1 Mensagem Data
  Pi f91a0b4a4f support other possible image types 1 mês atrás
  Pi 47d80f9bb1 use db message id instead of 3rd party message id and ensure attachment primary key is unique 1 mês atrás
4 arquivos alterados com 21 adições e 10 exclusões
  1. 3 2
      init.sql
  2. 13 4
      site/messages.sql
  3. 1 1
      site/send.sql
  4. 4 3
      webhook.py

+ 3 - 2
init.sql

@@ -20,8 +20,9 @@ CREATE TABLE contacts (
 );
 
 CREATE TABLE attachments (
-    id INTEGER PRIMARY KEY,
+    id INTEGER,
     seq INTEGER NOT NULL,
     hint TEXT NOT NULL,
-    data BLOB NOT NULL
+    data BLOB NOT NULL,
+    PRIMARY KEY (id, seq)
 )

+ 13 - 4
site/messages.sql

@@ -40,11 +40,16 @@ SELECT CASE WHEN COALESCE(a.seq, 0) = 0 AND payload->>'$.payload.text' <> '' THE
 , CASE WHEN COALESCE(a.seq, 0) = 0 AND payload->>'$.payload.text' <> '' THEN datetime(received, 'localtime') ELSE NULL END AS footer
 , CASE WHEN COALESCE(a.seq, 0) = 0 AND payload->>'$.payload.text' <> '' THEN payload->>'$.payload.text' ELSE NULL END AS description
 -- TODO: add support for more MMS attachment types
-, CASE WHEN a.hint = '/media.jpeg' THEN a.data ELSE NULL END AS top_image
+, CASE WHEN a.hint IN (
+	'/media.jpeg',
+	'/media.jpg',
+	'/media.png',
+	'/media.gif'
+) THEN a.data ELSE NULL END AS top_image
 , 'blue' AS color
 FROM inbox i
 LEFT JOIN contacts c ON c.number = i."from"
-LEFT JOIN attachments a ON a.id = payload->>'$.payload.id'
+LEFT JOIN attachments a ON a.id = i.id
 WHERE '+1'||:peer = "from" AND '+1'||:me = "to"
 UNION
 SELECT COALESCE(c.name, SUBSTR("from", 3, LENGTH("from"))) AS title
@@ -53,11 +58,15 @@ SELECT COALESCE(c.name, SUBSTR("from", 3, LENGTH("from"))) AS title
 , CASE WHEN COALESCE(a.seq, 0) = 0 AND payload <> '' THEN datetime(sent, 'localtime') ELSE NULL END AS footer
 , CASE WHEN COALESCE(a.seq, 0) = 0 AND payload <> '' THEN payload ELSE NULL END AS description
 -- TODO: add support for more MMS attachment types
-, CASE WHEN a.hint = 'image/jpeg' THEN a.data ELSE NULL END AS top_image
+, CASE WHEN a.hint IN (
+	'image/jpeg',
+	'image/png',
+	'image/gif'
+) THEN a.data ELSE NULL END AS top_image
 , 'green' AS color
 FROM outbox o
 LEFT JOIN contacts c ON c.number = o."from"
-LEFT JOIN attachments a ON a.id = o.id
+LEFT JOIN attachments a ON a.id = -o.id
 WHERE '+1'||:peer = "to" AND '+1'||:me = "from"
 ORDER BY _cardinal DESC, _seq DESC
 ;

+ 1 - 1
site/send.sql

@@ -13,7 +13,7 @@ WHERE :mime_type IS NULL OR :mime_type = ''
 SET ":id" = (SELECT id FROM outbox ORDER BY id DESC LIMIT 1);
 INSERT INTO attachments (id, seq, hint, data)
 -- readfile() is provided by fileio sqlite extension
-VALUES (:id, 0, :mime_type, readfile(:file_path))
+VALUES (-:id, 0, :mime_type, readfile(:file_path))
 ;
 SELECT 'redirect' AS component, '/conv?me='||:from||'&peer='||:to AS link
 ;

+ 4 - 3
webhook.py

@@ -42,12 +42,13 @@ def inbound_sms():
     from_number = data["payload"]["from"]["phone_number"]
     to_number = data["payload"]["to"][0]["phone_number"]
 
-    cur.execute("""
+    msg_id, *_ = cur.execute("""
 INSERT INTO inbox (payload, received, "from", "to")
 VALUES (?, CURRENT_TIMESTAMP, ?, ?)
-""", (payload, from_number, to_number))
+RETURNING id
+""", (payload, from_number, to_number)).fetchone()
     for _seq, a in enumerate(data["payload"]["media"]):
-        insert_attachment(data["id"], _seq, a)
+        insert_attachment(msg_id, _seq, a)
     conn.commit()
 
     response.status = 200