From 252b1dbb2dbe90b6a0f26934bdaa27feb2c42abf Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 24 Jan 2025 10:38:16 -0500 Subject: [PATCH] Fix backup export/import of quote mentions. --- ...em_standard_message_with_quote_00.binproto | Bin 652 -> 659 bytes ...em_standard_message_with_quote_01.binproto | Bin 869 -> 949 bytes ...em_standard_message_with_quote_02.binproto | Bin 1389 -> 1383 bytes ...em_standard_message_with_quote_03.binproto | Bin 884 -> 879 bytes ...em_standard_message_with_quote_04.binproto | Bin 626 -> 714 bytes ...em_standard_message_with_quote_05.binproto | Bin 965 -> 985 bytes ...em_standard_message_with_quote_06.binproto | Bin 929 -> 661 bytes ...em_standard_message_with_quote_07.binproto | Bin 849 -> 833 bytes ...em_standard_message_with_quote_08.binproto | Bin 952 -> 926 bytes ...em_standard_message_with_quote_09.binproto | Bin 946 -> 985 bytes ...em_standard_message_with_quote_10.binproto | Bin 915 -> 942 bytes ...em_standard_message_with_quote_11.binproto | Bin 968 -> 920 bytes ...em_standard_message_with_quote_12.binproto | Bin 852 -> 908 bytes ...em_standard_message_with_quote_13.binproto | Bin 931 -> 886 bytes ...em_standard_message_with_quote_14.binproto | Bin 677 -> 820 bytes ...em_standard_message_with_quote_15.binproto | Bin 0 -> 969 bytes ...em_standard_message_with_quote_16.binproto | Bin 0 -> 606 bytes .../v2/exporters/ChatItemArchiveExporter.kt | 4 +- .../v2/importer/ChatItemArchiveImporter.kt | 45 ++++++++++-------- 19 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_15.binproto create mode 100644 app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_16.binproto diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto index 15414b3e21849deb73ba00c86ef0241b9f9bf5b6..684bbc7eabdb888d70c825319bfb451e550e12c4 100644 GIT binary patch delta 162 zcmeBSoy@x77h}DGk{kz<0E+~p6B`Gk0HXwB6rT_e7ngydk+F%XnYo2!xl$=u!TPhy z-fuK;65_af=KtZNh5`%!v|OBRBEhJ@7!|@L0@TYQg`!V`QOJhNDmO7FwYW4fB~hWU yG&3bJS0OPavmmoLIa8r1wV)_9Ln<{dr8KWZAu%VjuoNg=mRSZA$ydnB&jSE-?k|V{ delta 155 zcmbQt+QYix7h}DYk^~2n0E+~p6B`Gk0HXwB6o(KS7fWJsN?Msx30P|RlX=_TnK=n@ z+&%OE@KHm7g@0Nu&Nh)?RA7t>=HdhDVv&OC&|nmDZIhX`kBp998I2Z*OB^aYR7=={0xC{)9j7?0<%q=X1#5mXl zn4|<4xCGBJFgP$YFn|H$WKpK1`q@lMGnl{zY&g5@{YC>PK8|~5{vSSSD6r^H%f;Cy zQNI|u&NBi{W|1PwP^AToTwIyCiRr2OSp})-QWF`u`WTgvL>#&VJzg_L$@rxCWSE6b zzQH73AH$_!XlR;ZZfR^{ZU}O5qCv8mxj~9~l8LdUxskbXiV4X5Uk+!o_Z42yulj#! z%f;(WFO&oXV=GMx(>oU&E4aSJvZ(lq#?lS5zAzebxu++&`MG6BIR{%XXfO&1a|!09 oCZ`q`XO<+EWG0msE0m-f339P~m_Mlj7-Agf)-9bf*+hX606SA*IRF3v delta 252 zcmdnW{*-OQFGlGar78|40Tu~HCpHd70Y(YNs4O8iE|$dNl(flaOi7V%7?oZ!f>o?| zGH=^EGbcWdduRS1K58hi=ugYV*(On^8M)Rn0=2S8LA5E(VdUb<%uP&B)z2zOO_%Cr zHlp+B_uzBOM;$=zhy>fyvS@UhP%9uJL!z%u6eU*u&L=NJicv3!_6sR8J>o&)bsZZuV31OQ6UQFj0U diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto index c593c22905a1e03377cbf3057757418bd3d5613b..00daa86160cd396b25e54507c9e20bf7d66bd4ef 100644 GIT binary patch delta 338 zcmaFM^_*+NFGiC?EK2)XIG6-jBp998I2Z*OB^aaDu?WdX{OB*Oae^l%bApxFadQkN^Cs4?EOXqFE%a~4i+hfs6HmH(~Ll)SfucpqO^pO ziz_oXF+Ej3s~|O9YAPew1V$w!5r@~p9(P10SF*_0$8jl`rCFL9n;Kgr8YEemq#7F~ z8X1|In;9h;B_$grnIxGCFiQy>%#FEcVc4~B;swc1C)N8nlmzmpnp!N_;b*i+wM<+4 z(3Y(lv)6A~!)(M;#)2!6d<`!6+obC6-uFkXn*jl&X+hnw(i$tdL(& ol9``pB&fp0@?rj@2B25Zty?-}vWWttkswHDVlOb<&O?Nl0Pq=GQ~&?~ delta 344 zcmaFP^_FYHFGjgFEJ`a`IG6-jBp998I2Z*OB^aY-un4hnu_P9!q;1w?5?~5E%%pUH z38;oqV&#*0+uoUZ0cAN@q!^-BF>!5S1ZrZDf~r?q%*e%+nVXoNs-IPmnl3ekk*l9k z2}#7^4V%Y0vB?_D^7XM?3Pz@>W=V;bsm4jhsTOI5X+{?2X@+J=CW*$DW=3XdX#&hr z0?J(?uhKV8(>gwTvck(ovmzw{)n~irS=;r?Yt)NvSv*bczs9erXPQ}!xFh}2BB}zD z+#?G7Etn)2H5i4wxjaiUQu7NkiV}-UN{bazGSl-ii;FXJ6%up8G7C#nOB70zK(s<} zVtQstNoKJ^QEGBYDo7+hxwNP#wFsyL$jwYi%{3C_V)-zCQUfp;dJeolxzSXC5h66P L7Z`fI5FsW26g+Nw diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto index 56a3771a87840c631ff33cfb0d12a78497a125ee..de8c2c0614521d681727dfa632c2d8ab4646f25f 100644 GIT binary patch delta 199 zcmV;&0672j2JZ&2ZvrF!0V4YW2m%lR7_!Z#@3AmS4+;$k1Q6Jx>$R>mA_52jTHKS8 z0xAX65=fE(lfeQae>gcbWi&7|Gd5#oGGsV1WMeWoF=S?9Ibk(5GGRA2W)J`x5Dc|Y zCrQNh#*#lx@DL-g3?dMTPCzqk;@B<1f#12MQm20?^_K9E2Pgp&JPJB(VQgh{bzx*- zAaQkRWMOR}VPt7=X>(&~AaZ4Ja%E^`Ze(?CbRc1DX>oO74Q(KHX?A69WN#pDZ*D2+ BN4Ed~ delta 204 zcmaFQ_JwUjK9h1YlTrf{2a^D!#HuIrw!Jg+;^*S!U=g^n`1RIxrb3MbQZq7>OLG#TiUHJU BNG$*W diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto index 6fcaf713b43e88f7c000ef572689ca8db1bd0937..57c7445e3aa72c4c8d34f83f6f8234350f6747c3 100644 GIT binary patch delta 217 zcmeywa*B1sFUEQgB{vQx0Tu~HCpHd70Y(YNC^I1wE-nK@BV!X&Gjj_|Au$d%0VXK{ z1}?#K3=9qo4GdtwD8$CWAi$ykqnTP6m6{lVMlnikKD+GwMguQiE^ZDMf%S7wEnRJ> z#1NInWdpQ;MGDpMKq5`oU=$MO63k0YPAx9ZEJ-ZMOe!r_C`mOErfqCh2o zpeja*)lcSaduQgw%f-#XBCvk$simt8l^CLoxx|2aS)};5c)+?8AeuB7h1j@Q@-mBa Xj0Cw@KFpug05qZJ!26RMO%)gc>#rg& diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto index 8cdad8dad106a66b84b8ab88eed53729da118601..71f1682c9419ad2aee7329b851b541159f35b5ec 100644 GIT binary patch delta 490 zcmX@gev^H}FUI;Uj7l3BIhX`kBp998I2Z*OB^aX?FbdglaTypI8Jn1znOj&2fh1TJ zn1M8t0Fwd>kY)qYtU_WST1tR{OYj^6g9AeY0~jz$C2++kab@Nvrl;y>6{Mzf`Ee;& zB&DS#C7D^6TclVfr4 zDhYJ|-IXJ#MBX@a0rWdFSsti<6l5 zD^5;y7j@JUSUcbMuAL9hlrv{;mXs%5Ib*Q<$n4Fm8jL~`Tw;j@1*s*eMX3t8rOBD4 q#R~ZaC7JnoMuJ={ALdVL0EWW3bxWsAHc?=N2uqhx$MeXSt<8 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto index 4b8fa54d51bf4b10a6517fceeedd61bfcc94fe02..8dd6f3871786c61013fcb08b1c9f12d90fd028fd 100644 GIT binary patch delta 164 zcmZ3;K9zODFUERRC1nmK0Tu~HCpHd70Y(YNBw;Q=E`Bc7fYg%IA|bYb#G>rfq7tPd zpeja*t!J0L-)P{)%f-#XB5-5z>#gfdwHTtpxWs^ZS)};5c)+?8AeuB7g>1O2auah> zi%Szz5)}$dGgA_C6%tc23o?t7GZl(b3yNe?Gg9+XO7lt-5_2*OOM%j5nPotce1*LH FJOI=~FrWYc delta 434 zcmbQrx{!UtFUI<_j7p~%IhX`kBp998I2Z*OB^a}IGIDKW#6q3Sh%@BOtCee=(@O_Azf#@n^G;kVxw88MR|H){-(SU$|3*sE2g#Fd$w zn4YSiSdf=)#Z#2;7m!>Wm=+jRs~|O9Dw-=C=4ue%;SHO|Ix!(5l;0cMG5 zTkbb@87T=YY?$>>?X&MJ(FK#<%)j(vaPL^pRwfBX z4MrhHF8kudg4Cka5`~n~%wmP2(vqUmT!kd9oW#78%o2sX%;HQ1pnP#^a%oAXLSbos Qib7dxMrLwpP9jt>0B7%=(f|Me diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto index a6cc7cbe0ae74fc4509e301eed4709694dd89b7c..22432ca7790968814f2b2e0d06df50276c0cbbd8 100644 GIT binary patch delta 274 zcmV+t0qy?L2Ehif`T>8g0V1mb2m%lU7y&{C2mufQ7y)XU0ScD^3J@xxoG7m<904fN z9A?ohT@w-@fFc$(O(g#jt7+yjhIHv_Fj0{rvI{x;v|Q8W3$h3)A_VZCl7K2(A_-}2 zVP|D8aBgP`P6{A2F)?L0H#amgH#Rq8GBhw^H#jh4FgG=0GC5Qs7>0SE#R0T{N;rth&Z zN)HMR2m}zXoyw)FF){)O0a|pE>H;MN)DlRN0h1I1BPSCI5pHE;Wpi_BbYXO9Vs&#M YbY(IT3Iy<8-0V2o&2m%lU7y&{C2mufQ7y)Xx0SdGM3J`ZLHfZg6Zv{Av z2~z_rbUYFu6V^HB-}Px1(H*uMg1+8;#>{JSGf(gQ#*ulJtR8!%A_VZCk&Y^OA_{43 zVP|D8cV%L5ItD{waC%5kK*tYA+6)R@3Lr6MHaRzCW-vK8HDZ5cVq`KoVl*{0H(@tp zWH@6tH#s*D0~!#lSwr>zfX5WzfyJS3ywaK?5FTlM@R(cM(wjv`r_GFamni3tpqT_R z3UN|SZfbOGT1Hkl0*C=3g#icx5CIsj+5s5#GBeR;adk#`eD3?RS1}h-sOp#PVVO#9pl$C9cfe z#Pn4C#DctZEB5@1ln9T|N{2s;9+!l;;<*%(QVlIE%`D7~lFaKZQZ39=EtAYGEX)io zlT0m54a|)U1(>7+o>m=jl*uLvj7EZBv5CFFC^!!hV*&sJv66lO delta 420 zcmbQozJq=jk7gK5|@(9VuhmA z`a-smUlt4}T%V?c+mK*)X_Q@yDA3mofaE;@g$A)9|I)@{o!lkClp3?ZV zy7?NL5x1LfW=giNPl=;Tp#@V9lTs%W&_|3CJI*e9ztO;ppNp4+Mc~Hb*IU<_S}}1j zM!jO>TFD6XD~r+sRYoqTTeAvM)1@Xda`iF7Tn`d)=o0jJ%{cihlYD&)mx7_8X^Od} zv5C2%nYo2!BFOCqDdtHg#+K$r=Ef-|0!&f@Uk+!o_Z42yulj#!%f;(WFO&oXV=GMx z(>oU&E4aSJvZ(lq#?lS5zAzebxu++&`MG6BIR{%XXfO)da9QOh=A;&vCZ;4R6qaVD vB<3n4reqdm7AI#a6s5`)6s2aQ=B1S8l_(_UWEPeJrOPtQfFk({dHHz&<1wQC delta 427 zcmcb~zKMOqFUI=ij7m!wIhX`kBp998I2Z*OB^a|NGjdH}v`dG8@(aDX5*$2B0AHG@G&Tv)DElnrLUUijDZKsVA_lNltS3YX!{V;#h zZY^IWuFTxT^i=)Cg1mGqo}zrefaK!9w7{Sue<4FIR-c0GB=3490n_k+wX!RGz9j0b z;)z@`Q&&r%E5x(7Y-gN1yTi;kNphN@2J>(4+s4|QLh=fmNEkUz@jvVkqc^fRzYgIR4*e}7bDCyAQ6XFQIAucQ8GT0 z6_{n}Be)cdjf|2Fk`0YblPuDVEtAYl4b6-VlTs~G6O&Sm3{%Vnn4|>!U6+Y0p1g{) z`~1a+QQxo4QxY)J;SrARx7-$(EdAouUd8JgfA`G1&SJz?lqL5OWS*%c0T2fS+tB{nFn3s}SqL7zaoGGsWlrK(AE-lGaC@jrSQ7B8z$V@KH INrWl}02hLltpET3 diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto index 3d2bd0ab68652de5bf1871d648ea8de78a33707c..13dc200968ebdcc33c1c762ac04afec32c01fbac 100644 GIT binary patch delta 421 zcmbQtzK(svFUI;Ej7nP>IhX`kBp998I2Z*OB^a}oFmf$qFL{(V}B zN}QRwiRr2O1$pTXzd1av33B;yDHt0i8Ce(@8d#bdn3|hgB%0Kl8=5AjCZ{B&B^o7} zrWgw_NC^Zy@0FQTP{VmlXZeF7rs6Io0i#U~0#jMbyWBt&6DQ#LoT|6o-5 z3UWH5#LlzJ-fuMU;^pGzU=dh9_tetWhE@zwHyF9rG6KECq6G917sNGL1*z#$QyIA? zFe-sXcvAI2LJqHmJ?@B1{>~&{AIGI&mS$;cY-((gXpm%Kl4@*}Xk=t+ZU%IEQnFE! zNs_4mvy{NW+?ab7hFuFMUXc8BQoWBuNg#i!sl|dFenyK_%e1u*ZP}_Zd;OL*%tky_ zu3qU8?%t7+MZSd=OcIP5j6%X(f_bUQsl~;aC5a`ONu|XKC8wJ+N+#9o3zoGT}PJz((@%8UCH#48nV)K5QpP8e?@?rj@2CWDsuFTxT z^i=)w)T9C{Hs{2GDvtn%R&kHxl0r6I?D@_)scsd{0!$L!@9WQB-e9OC@c-?HgThNV z4bKXTbgXE7U#ul?Y5r^RkTjdpAWMbge6k(?4KA&ie3kJPqtbJbYZ)arKAE@eotYOe z7dHos!1}qTmaaCmVu(7$$hC$M=nEF5#f)4~M`RVGrb_|+)6WQV7D&Y54V%Y0v8Z|( zA9r`HG#%Ycy&TczG!o~HI+ z$V<0k&(BDS@CdCGGU8&3aB@qmNK+E1YWSk865e)W-ilrMx`$xS29ZMI=k%sMguQ4E*1_JCx)nd zjFY!BX|i4s@|eUp`6-i9y@jPos)>QIu~~AeQHq68O0toKVM`o{UD&cfk#Q8)6c;;=g|$_Lyh-$E)7~ zsU@jJsS3HJ$(g0a3i$;knfZA}f?O;>Up4@pbZ*_!DU(eU7(qh(zyRn42IhH)7!v?} C$b=yP delta 407 zcmbQieu90&FUI->j7oDEIhX`kBp998I2Z*OB^a}M7`ZwbxdhbaScsTw3tHKhY`K5? z>|_ohh09A1xU@t&uzx-3Y%2QZXy*<6<3F3{Db3kh(Yj0Q!Y^SZmJjnM_GQj)NhLP}8bkVsYwM^oPqffiN&GiRf!IN7(Fft2{~|a7nMXs_*4{?rqzc<2{1`~oU!28VRIz` z0sCX;-5t|c2|66Pdh*d9CM|)xd{!OOPfyI|ly<39&DnFtpzqM?UdB6&N;g4{W|Y`{ zcG>%l241{e+#DG{d;#iiLo|{@2t|TBell|DzU;PZbbFx?JE&kQ11$5!j^y0fO-ZaiM-O?nj z!)VanKcSmlf>DD}$cD=*H!&x*xHK^(QK7IjGbJ%sAu%PhAhS3*Q=urepeQvXH7}(! YuS6j+C$q2=C|j0U1{BFx$ji?I011hXEdT%j delta 318 zcmeBSzrwcR7h`>)Qa%Th0E+~p6B`Gk0HXwBRyd7#5`pE~sHy1*z#$SzKw8UodIcTXFGuI5|3cdpLz8dKUO)dn*a7 zms}RW(0hYZnPIPRy32=!S^}biEQSq1N<{%{O2q#91aumlxxTZHU4l`AQOJ?YzBsWU zwJ5bjA*D34SfQx2q^LAkAt@&@FD0`?AuqEyQvoPloSIx(lBrNwnxCRjmYR{7T$+;z JQp*ff3;=8CZukHI diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto index 8f9bb7f94854b3d9ac781586bc865e37c5a90004..0ed95dab8160bee2165fbf9b8d65ae020e8d4b3a 100644 GIT binary patch delta 390 zcmZ3?{*7(JFUI->j7oDEIhX`kBp998I2Z*OB^a}M7`Zwbxdi6!pYrrm&8(cq@@KY4 z)depQQuzKW%T~pFhgicxMGhNh?djS9U)vnJvi8bh!dFc)l*gW2d3R!WnML4-7R-_3qOWfVC@{prmXrsiGnjeGcQfN2~C?`Q2bxxuJ(734%li9KhRz29iy#m~jd!6LAJ?y04# z4ZWB+7^Ai^a&dmwsy4{U!d|y7 z&POlBB-URqFWWo5sMOOwKSjuai#yE4JFzq~z|FnHNq|YBYwok&<7P?%UrwczcmBS! zn0deAN#1q`1_4M2~aTeoz|WD^BO0CI(oDF6Tf delta 436 zcmeyywwQgxFUI=EOiB-!IG6-jBp998I2Z*OB^bLH&oObGWMcTi*RkW>Y#U*z%M~Vj zlqFK1JbL>1&+R4C1#iCOHQ+55O<8H(U)JUM)+*Duv^%F`VLJ%)!KKKXjK_WgpctXXS1HIJF@Ti^OPw&3LPhxenz76@&X zXkdVVtIzFM6rJj0y6vW4F*V|6%`&aD)^)e}BLht&f^O&Z>pOV?FT>_d^o zfx3#>atVAtbWN%b+^?S-o2O$ApeYvd^3I4W#>x*aC|0Fs@lSo7Md6KV~+lI~W+DjMBnR5zdxlm)*Ck zFaB-w%1waLS;-L?$cz$Op3K|!&diISio$$4HQi<-`0*4M0sj2i~9DXsW;n0Q-Kff&c&j diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto index 1a4638c7785372832db1dce40a3f238f88d5424b..396e345e56f49800b1dd4126edc9bffdb134f8be 100644 GIT binary patch delta 324 zcmZ3=x`l1SFUI;@rECr+0Tu~HCpHd70Y(YNtZ1%CE`if|>*RDxGK<6Yc6!dXPGT2Q z5IHj;)auo%!+Rv;H7-90$rfNfC@<8T>b3N>+`V^4V^Wn^KFpukrzNYzm6@BEo~oZ% zke6=7o}ZBt;SpNt@SDTqnxGWJDMqE^j6nMsCH9_O_I{&*S3L(88wZOQ69-e&dPc5X zpc7b>Qn{c;WEG^QONDaeaJ4QxqTm;OkFYo4@G!Pb~r4l@~T0{OS2r?$dUiI@tpc3|^k-KF%h=sKF>C!6jys zSWu8!l3J9ikXxFZSz4@+Ur>^npJyb<1@z9O2B1UFty?-}vWWsCL}+3!Fs#l)gqQ&D C{BrjI delta 180 zcmdnOwv=_lFUERdB|#1*0Tu~HCpHd70Y(YNNsJ6r8I>k60!0}mwmzA+?VXty2NxR$ zix(3IQ&csO#VEj{!7Sv>K*>m9i$&IE8 Pj1ZxTy+F71LWGzAbtO2j diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_15.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_15.binproto new file mode 100644 index 0000000000000000000000000000000000000000..f5285d88899a33b0fea1a9e158ce4f8f7b7c829e GIT binary patch literal 969 zcmea}U=+CVYr*{QhEfXsyKEj#$*x#(ig%Lc-3T4SDnN=53x$z@T~eE!J@?C1T;m9#SLhTl_rk?tZezH8@o%F+$t_T-1YmD}2wTN(wQD2D?ZwdU*l8%qYRAz^K7!z-Tc+#)&b} zi80BEG1-GLfH8tGfiZ)zfU$zHfswI;k!cnqI|rjE0|Uc<5Q_=O`VVF?i!%IY_|GQ9 z!ojG;0HTmKnoIB;1A_xY14I#{5V{DH z!qi81{#$z~T#qfqi=tQ^b25`tlURduGfOgx6j@)DwyyTieK^tT8|(bctz4IKLf5NT zK9;^0aqq+~u{be5D+UfJHV!5MmH@`bOiB-!KuifnCpJisbTOV|;yTI1uwhEMo@=t2 zqju`_8Ic>fKKgXeEm55pZE8RJvbMtyrho-=XFTQV_IBTL>bJnLd8#`qY>(YIU=r{v z`GfQ?Ph%&Cfr=x(YSld4se`gJGoLgUEtH3 zJc~)^`Hh}Qyjb`#Aul75y|epc$=$g;)eTRDnDr|XHty#M&|6USxk{1w_2Ob@3k z)vAi+^4@;(fQ5NQ+>(Ue=FhVZ9o+m<$2f{*>Gt@WoSHK{qk@GK-Tl6^c>|ic&LD^HNHIxi2v%v#=B>Tb5Y{ L6vT4SDnN=53x$z@T~eE!J@?C1T;m9#SLhTl_rk?tZezH8@o%F+$t_T-1YmD}2wTN(wQD2D?ZwdU*l8%qYRAz^K7!z-Tc+#)&b} zi80BEG1-GLfH8tGfiZ)zfU$zHfswI;k!cnqI|rjE0|Uc<5Q_=O`VVF?i!%IY_|GQ9 z!ojG;0HTmKnoIB;1A_xY14I#{5V{DH z!qi81{#$z~T#qfqi=tQ^b25`tlURduGfOgx6j@)DwyyTieK^tT8|(bctz4IKLf5NT zK9;^0aqq+~u{be5D+UfJHV!5MmHx$7f30K2D6YbmtbCMa%ypLW=Ud6W>RUfLP@HTAQ#Jr`I8!e OfqQP<(kYWo6c_=_slXfn literal 0 HcmV?d00001 diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index 431ce20549..0d383b51b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -940,13 +940,15 @@ private fun BackupMessageRecord.toRemoteQuote(mediaArchiveEnabled: Boolean, atta QuoteModel.Type.GIFT_BADGE -> Quote.Type.GIFT_BADGE } + val bodyRanges = this.quoteBodyRanges?.toRemoteBodyRanges(dateSent) ?: emptyList() + return Quote( targetSentTimestamp = this.quoteTargetSentTimestamp.takeIf { !this.quoteMissing && it != MessageTable.QUOTE_TARGET_MISSING_ID }?.clampToValidBackupRange(), authorId = this.quoteAuthor, text = this.quoteBody?.let { body -> Text( body = body, - bodyRanges = this.quoteBodyRanges?.toRemoteBodyRanges(this.dateSent) ?: emptyList() + bodyRanges = bodyRanges ) }, attachments = if (remoteType == Quote.Type.VIEW_ONCE) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt index 1643da8ed9..b7d2e10968 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt @@ -383,23 +383,10 @@ class ChatItemArchiveImporter( } if (this.standardMessage != null) { - val bodyRanges = this.standardMessage.text?.bodyRanges - if (!bodyRanges.isNullOrEmpty()) { - val mentions = bodyRanges.filter { it.mentionAci != null && it.start != null && it.length != null } - .mapNotNull { - val aci = ServiceId.ACI.parseOrNull(it.mentionAci!!) - - if (aci != null && !aci.isUnknown) { - val id = RecipientId.from(aci) - Mention(id, it.start!!, it.length!!) - } else { - null - } - } - if (mentions.isNotEmpty()) { - followUps += { messageId -> - SignalDatabase.mentions.insert(threadId, messageId, mentions) - } + val mentions = this.standardMessage.text?.bodyRanges.filterToLocalMentions() + if (mentions.isNotEmpty()) { + followUps += { messageId -> + SignalDatabase.mentions.insert(threadId, messageId, mentions) } } val linkPreviews = this.standardMessage.linkPreview.map { it.toLocalLinkPreview() } @@ -929,7 +916,7 @@ class ChatItemArchiveImporter( this.put(MessageTable.QUOTE_AUTHOR, importState.requireLocalRecipientId(quote.authorId).serialize()) this.put(MessageTable.QUOTE_BODY, quote.text?.body) this.put(MessageTable.QUOTE_TYPE, quote.type.toLocalQuoteType()) - this.put(MessageTable.QUOTE_BODY_RANGES, quote.text?.bodyRanges?.toLocalBodyRanges()?.encode()) + this.put(MessageTable.QUOTE_BODY_RANGES, quote.text?.bodyRanges?.toLocalBodyRanges(includeMentions = true)?.encode()) this.put(MessageTable.QUOTE_MISSING, (quote.targetSentTimestamp == null).toInt()) } @@ -983,13 +970,13 @@ class ChatItemArchiveImporter( } } - private fun List.toLocalBodyRanges(): BodyRangeList? { + private fun List.toLocalBodyRanges(includeMentions: Boolean = false): BodyRangeList? { if (this.isEmpty()) { return null } return BodyRangeList( - ranges = this.filter { it.mentionAci == null }.map { bodyRange -> + ranges = this.filter { includeMentions || it.mentionAci == null }.map { bodyRange -> BodyRangeList.BodyRange( mentionUuid = bodyRange.mentionAci?.let { UuidUtil.fromByteString(it) }?.toString(), style = bodyRange.style?.let { @@ -1135,6 +1122,24 @@ class ChatItemArchiveImporter( } } + private fun List?.filterToLocalMentions(): List { + if (this == null) { + return emptyList() + } + + return this.filter { it.mentionAci != null && it.start != null && it.length != null } + .mapNotNull { + val aci = ServiceId.ACI.parseOrNull(it.mentionAci!!) + + if (aci != null && !aci.isUnknown) { + val id = RecipientId.from(aci) + Mention(id, it.start!!, it.length!!) + } else { + null + } + } + } + private class MessageInsert( val contentValues: ContentValues, val followUp: ((Long) -> Unit)?,