From 41c7c2dfefdd7b2c2270d21b8d73c850e01abeb9 Mon Sep 17 00:00:00 2001 From: Carlo Herrera <18-10451@usb.ve> Date: Mon, 14 Oct 2024 21:08:55 -0400 Subject: [PATCH] Translating topics/bookmarks from JS to TS --- dump.rdb | Bin 0 -> 54980 bytes src/topics/bookmarks.ts | 67 ++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 8 +++++ 3 files changed, 75 insertions(+) create mode 100644 dump.rdb create mode 100644 src/topics/bookmarks.ts create mode 100644 tsconfig.json diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..c324d203be72a699d3640ccee20c15269d9a1c17 GIT binary patch literal 54980 zcmeHw31Az?b@nVS-Xy@A6eTP{Qluz?1b9h=Wo04iv?W`%WIK)zoC^{X2q0KM65Sl| zDeFEgUx}U2vEv+VQa5SrByCd2Y||V)(lkxe9L?HE8|Qc0Bn|r~antC3GqV5&s|83& zmX!XD705AmXEFQc&3oTF=jKftx9xH`oQ^jt5@Ikc+4qSF)0#oYpmXevO8SjIoRl)c z8^%B~JR`nb`~7pFH_B6z7_`rbGcRYpv=Y5h?u&)&exD>}&~MOx2|v_XR!=2jskkc; z4!TBN@kDrEI3iAol8byTx#FqBl<0!-ela1}TMZ$>nJ5KmAwt_3CzGh_#@d_an%ro00>`>6( zm^M`l|9KnCmycIf90CF*c88M@u~J@nBv~G&}{1Gu|LEMp`C+$^4hMr`w2b2(l4hl(IKx+JOmQVzKv}3|b zmWBVul;%(ws-R56FR#clP5E2r+Ro>f8am^V{7ke+qs$~IM#N;EL4}>Arm~8XiJ3}y zb}B;|jhQI4>!34%{T2>|voDr?`-TR1aUD={Vf9PO7C2{VS9Z_7uoMPPQtl;OGdM^# z5W7q09O@CL-c=kd$Y`Dnn){P*e=xQ`x-Yh5I&3RWhnuwMKzFdAc7HfHCBiP9B0HR` zmBK;M?@QQ2G5GDoy!+^e{+2r`D}JxCqQXY+wYhlPbaEzQ8xR`Gg1)5B#=CfdM-}N7 z-deqm4&=kZYwxtBtIF=Q@qvg>l6bQz5Q`>#;V5rSx0mrjdnh6v-~~goJrIkeW}>_= z5}u0M!?5Eddq9i|+pSZ+xZTOm`0c}Y+ScD0y)(H^iu^QMgdbK z9NlY|M1D_Y(3hCylj4D-J;>Kq!79Kex2K{(F~N5sk$+5=^dlJvBBS6`1(zL{Q7-MeSKXK zP4pE1VE*;%a+(M=oW^eK)XErIx_IVCjo8~4Q!d8*p%cN0R;LeC`EFCU&)6=G3fUN_PR!!5qD-v zjEV^`BmhPSQj!G9*)`mRL35ig>Wj=KF%XUWrbMFMTr&U|rWHajpq1-36Kg~Vx~`cL zT8&KSh0h7ET3=;|eLi@7K+=IZAy>8(Qv7G1Qjp#uVKhteit8}NI~JvQ9km_6Vo+=c zzJilx`Nt604hqF*i&0!{JunbiON%Q!NX?$S@V+d9k+JSnyP1^&bSm?LtYzJ)#uZ2b zIBWnR8ZYtN2ovste_O=*4dr#;@v<2@+l<1w+KY`780O2hzYRjQVH-r{-LE3fWe4b z?8@S>BIrjojI|mlLdc^Z?7&gbkCxT&3qq1BfPNSU&iPh@Wvnz$C?Z%2OpC!(&Jj?` zk@ju;Ucf#Yj0jnWPE*7{n6-iL_IqGCwGkD(e6 zRm&GXlbwNV?$v?p;d{~NGQH?ox$Z^-d7t#4u6yCnGK1)Ya`PYx@OK-M;>v|g#(|!b zn;m7uIn=Z8a%Kp9KyDr~CVf*~3x6)R+N&vpfb%lhweW?ET{iz|+Fqf!{8lb}G2_7B zILZ}HSoo5>Vn~mTNnr?m1)lc2T=(NSj}Cktf>YPK@YflqY<~HfkEc)TRxbQ4{Q8IF zI{%!bGE3~fg>Phr(MRRF;q;>h3=%x)DSdGD!Z$Nx=xNzJX2Q<36${_W^!cAe!>^jp zq94hvy*9t?EP6fD>pv@3-8lD(fZz4UnL(dht{;5)Ec*A1!*7u59UnN0ev%o2o9f{& z^fP$7dn5OqML$>G>Q!_W{ipIi_kKawv+xUe7a0CaGNuY%1K;rm`v$*;C&O>T8@$S$ z<+!&#_iOy0F!xuDXOTWL2LDw(20vkh`JP21c)rar-wmgA%NJS-=i8Q_Z+m{e9r^h# z&(7D%%$HZ@d*2|;*GA{tT`=F3?0kFK`J&aCVP?Aa{B#G&bVu=YUD@egQ#jpq`RT6D zPxmeP=?dBDx|!)tveVs2r@N_Ox?9-kZY`MZ_JZl&ke}|2nLf+$LQh}a!tI$h-N{r` zHZIdy7VgL_GZ0vw8PU}&+?i?7W8Apvzd13HS*Euv{OnWDZ#QOLom|4#zk&~QgD+`$ zI-Qx0fFC)&U+FgycfrC4?6Z$-TO(KX8dLE|%op?xmb=0;0CM{m#xkSm8M$t>Dz7{j z#xnzct6b$XOQJ6kn08^W8G!8Gg*6#x;BVx5XV-eY)V;7aGw7Fre|^uO9+?{oJS|rZ zZD>r}bzKV+nY(23>t4HXSZ7Q$v|691X?#7AEJ0vFXm>LY3^# ztH2yIEgoJd&)PUe-Ni$BL0l51WPeN$1c3eqEeFQ>mlP4K;iO&In7w$esxC=1dngu( zU@xOose>ni=!TEko}Z2i*OK>E>4kaWU){adUIsOM2%`qo$TqE^eH1?o>g?Du9t8ZL zd}K6O2qLxT^AHa--ba?~oJ3diJ7wbMum*J(-rC2EF1^z^yE)0_Rm-GCO ztdmPC-ob*aEDz6LmT*U()$ ztWmg!g=VAV!YVvdWy;1Ph1&(uD#C6nFR_Q4QHACvX04u01y;{yYW4Kxr&4@1Fp|N> zY^$}E;m{9Y4pj|mWH^-IAIhDpboLS0wX1+T;o~KrLguuRO}nR%IhRE-a}HiAbAFgV zqRE{9bRKiErjP2)=!;<}RmAjB-LGl-U?LPTeFg~uuD0pJ;(V3x(GtqJ4O)CdEUwWi z#2H^W;!1^s?d`zkI&{Lh*6wtSjyZ*tw=(kfwPq zfQjx^S?Jf`?ag1Bg>J~X#0tad7hs_?2C7PTGW##C!Sim1z`ux=Kcw{tj#Hg0zBMEdSeDG3@WLBLCF_k^ci4 zWn#RkC8kKV-4cm)!ILDa&|Il_(q~p*V!h&$dm5gO!jxLsr!jAjvX_JB%Sry2e_CxQD@~Pf~0u5cgm#0TFkT zo_hdC=8b92bTXQnxmgVG+blOjo(Y5#EFAYBNenO@=Z_lgGeP?ZFO-*$*BvId(WI~p zRq-E2`}i%!Lt$x`7;y9a1C?i_lz)a4n*MxF8f`KU8itGTE%cR0YCsjX3wram-Aefz>wB-z6y z(nK%U*u3yA;c@HZ@WZv}K}d*8il&E#h@Y+OL6To#di;(%rm9Kai)$K)EG7oM%dL0a z)p}5QM)?EDL`nqygZ(p!lUOPbhJ45_^cc$z;T)56L)D?6Ju+pF#-d{7140ur%I4d2 z!2NtkZ!*GbF|I_F7P?4?v3O1%gL1V{P2OKu1m&s*6-T+)nOg$o{u~Q){;H$gRZG&9 zbWgtGUS?g!p#Enu)2a4k6T5JDST}|J{S@~11MF8m-u}Yv*+#Z!q!9LZ#4+q2S}N=> zwmm<}AI-!5(qU{yC2FxG1?T%xQEh258xOIU5HqB7ZuCA6vPb}em+7o&(a z{Tx|{tFKLo{KB3Rns$n_Fy>vtjZHTajrw$9(zZ)B*4C~-+_N;Dlb?ZX#E(*$yXvnx)R;OS5|WzDIOvTeU)=I zwAL7IO}s6_e2Haqx*E!ojtFg#nBc9|1Gg5SIV~%SD!$S+c&c$FYw(y{ZLJ!- zNn+$)0W`;`0*x9xMpdd_j@fHCXqVq;fn_OsJI_E%7R&n55*Fxna;|}-LRTGuQTq4auo0d55W@y zys)|+{}>;M#r8^kB)nG~1m`f{Qp*=u2m`{M93SAD%kazd$!XC$UVdk<#1n@Y?`RJ4 z%ESgMcgJ|h(N4x@!jdSgMTztS`T>3_#_#uD%iZCY^>=gpB=4$8#3KAoUsR0T)i*de z#Ou8G>Q@c&x6j?v2*yV^Gz)cI5#A@o#XwTxVnGMd8>Y~va*XuI^G@RzsavOLI%stqQrl)EFemimHqr3 z&ulhqj0I9N{CBlLEpD{DxYwfv+Y@;)wn#rhSZ81D-Q^+!`t43(fP4+>&y6wm2F zc=4wCaz*Mr0gh9}Z_2OMf!{Q}0{o_J#r>uahkRA`aMT|=P(eMXjput#Ew^(IP4P#T z#ig<{ci7aa{kFTBuwV6{-h_o7V~P|<`z34LRKwVypt{x#yWC4;t#@IQP6TOss!zl6QKcNRkbMlXi` zy^BJBjk*aVQ*-?u{((I7FX^r_H&8DL2n$-|PP`;SO8C2`zXQImM(XrGxvY+6|8*jZ zTwzg?|JuRXtf4SFo0-Du514oXJJH7MPi+pe5l(g&=Bo<7KIO(UOrP z^TIoYGuAV}OSxFmgF`q4!=y;W$FM}K!c7vgp(LRLL}E*Ekw`;H-6cXvb+?jGQcw?p z)N`zZL$zZGiAa72^(C6=s!hcCx^+25ThOFVf+;qHWd#CW~PI~(95I3+n~n{D`b5`ZMIOTVu2J0@$0H94r7#0 z^Zcu1uBrSXFawe)sqCS2o3-qIK!{**JRFBu<9>*tSNv)Bu&>)W+&y+6dSKV6b$tKL ziCt40H^^M-~t0&QmF4L1`Zbs&lRAuBE|PANm$aM!-VIw96DblqVTFabeNVoTDrWj zRwm2f!X?*(up+qFb}Ax*Rkv%!6tFL?NKE0H-wF}@>rdW$$5S{*3-w5%B)J@p>kjPP zHafMU$G2|>xN&1}dLq6(?B3xn|2=+(}6llA1&F*2R3;s7UIygSI=54kC=rWXy-x!U| z+FUpfYrq!wC8uG;5L}V~bM1m&LGYj3eFtps9IyqXL}+(xuNZ}|0uy4uH#WLvVtia2 zU+eb|hs5zUfq*#d7+vca3yk{x&OpHD93J@%O zy(;(VO=Te582PNV$#6Z}o4B=@Gz2YepxAsgHy7usX*7>hjVnk)pab)12-u5LkcPmt z7icHD?Q#jZCASw~5~@|wgSCP$Kuun-+nQCAT5WsGi9=%5{!pJ4Cmr^th16_{K0%KzCRU-Ove(@Y(joD&d3i1eIuiOl97*0d|f^v|AceM zC+p7|%p@EC%Qce)+4%e`<;m(?Hhzmnv| zU8QANie&pTWS62uH`&GenHJ>uLzlvQ`UJMTh=C>%)k0lP+1`iPy~H3F)jE*b7OKoE zotjpQgP7r{kkMBd>?H$X{UDpjGF=TPE6Q?BJ_+*MUqzNnKjpG zhB)nvXrJ~aKqJgTzpTgRTIMDyW_*dgIG?A5lgryGp+^9;(~??r+!J#n6|_~S9YDLV z%;bwmZF=s>xn-t=xE}EEV*pz&nv&>%2>Y?SY_L0e0oGVxdS61l7nzdLZD{E7b$x z8)OBqdJhDxxY0PSL3(f9dttBV;zkFDrug#qxTFzFr!`1Rh^0dw=1OC!NID4|h4m)b z#pXfkh0=iCWXV|69fC&T^TPje_gniJ#QtH8p_cQ<^6kb|6tE9bz&-?kUHJ&`Z|_hc z6x@L20l%*huy@{r0sH8pfPInB@gMW2mI~M_!g1(*jaxcia}BJM4t?0^a5}}1PXxQ) zIWjWgnDF`5ifeomVX@y=gEN@wxXFV+tK}8LlbNpuDh{cjal%*(D&ZC-asq{uBIYcYH zv4eOPu6BB(r2(RDkoT>$wF!C(>nx}7PNbTdsUB2GX|mzzis9U`BGrScLB*>Fu~aWn zJ@^H}z*oC^kPULH-i%du1wrnTO8Mf_BYqvbv$4Ppn;hRVd|>~ryGL(|PF#2EJ!9kH ztur3yq&l4wjR``HJ(wCDS!!Hho1kL-R|?t$mDJ(cR?DeqVFx{pR?F&J zEJa!^-+^@^RyP;XYFTmAmTGQYwAHe@xiw>RX$g0#>(n`CmqENU-pG-82%^2i`VOFu z;*EqJ8aThm_}~WIUfV>SkY&p0H6IWftUQ?~A4JM^oWXLbPxV#*D zBLO)VdLy&FL4-`v&LGh7WJ#St(#1N1JjMDVCrbJvnPt|JxpbK?$h5xT>;qcwUPJT8 zTqFZa8XhLr#`{$bpj=Egxnr%%$uIQf(3!=IpFoc4NkP^axO;N>Zn&3 zGReP0K<^bW7D^M13CybAjoJW9JiuzvuE*v@5;PfC|Gc2tn?t2(X>Sf@SiUz0R<#Aa zISN(nTB2$%tv5%p3f2qg&B4SzR9mqS9xgeD>w+Z}8vrhnCq;J@q_%soTRp$2e0e#= zq;qR|GYdldOT@Vs9LlC`w-(8?r@|j&GY=JT#cHNiud#T|G|ufQRWp495s+8CW|}D) z*5Wt?11W8@iWCj229_=w#(JYv(eO$_m#bYgY*~}{T&aW%*@>*vl=Lgha`Bsxa>ke+ zDz0ON02r-BTrjFZ75P!TsSNtI=gbexqKf&EhJOpI3T2`|R^ke{U`pE`3^`N|()^1_ zxE*E@a;OFsCkJ+^mLSK^h;qK#ZzBezu3Zl*M0wxfgK*;D7? zSvUmo9INWJFh$NMi(BJqs(RI^5^cCJ$SP3vg>AV0jI86OsrpNA!^I}5t2QiM#}eIl zRrhNqs^h&~BvJiFvahdtqB?^SRBOxb>nmY?YenuH^TLC|^Va9t$lZ~l{ApO#wC>Ad zdMaNEOT%|EXM@78oof;KlVOocW;SMNm_wSlYP7noB%WpP=O; zi8l&RD>z4s4bZ5#ijgKPJjzLw;$4szZ&AqLeyv|!To|ZEl@JDaACwRV>&RZX+QNX^ z^$?%Q)*wi$RuN(PSibroS7SapG15ZI$wB5* z3KL)0wizGCVjNT8ev#D76}UfC{K4>Y$pSLfFxHZ%Xn4_sq?vGTaqMw{(qhq`>6)4Jqw~VO!qe8LS@HbvP&^h-MSO`0 zr6%{uJ8E-n3aD(Jvw~=DUqm!R0i;-5G}qrwMDrfK369ogTXLzaAcp5yiWF(dr5e1r zd5O)aQs$+dFyK`;FB`Qgpyq|o3*WJR2i7ioB&Pb1Y;2;SDY?AKT5u|6?!bxs0q>|% zF58S#M%oum8L>_h$8`RbMhGI%ZUb=EJ3bc^T*~{4WsR`01FVx<^V*iSfWrM5af0Gx){@4US!fRfNFM)=Rzq6VsB*$-c-UN(QPbfi^v_k*cNb7{9p3!>rRlw5v8AQ^ zyQ-FHv4;!14XTrO7#pwzRxEAEtB}qiS2OJZNMg?TEXarQfpUEq2@ht zIo){9QpMb=b%U`2=jzS)w#TM~lb!g`R-8ntIKw=-{|0^Sxd;A2>HB~GEj_av+5jzh zQqh@kG#mh9i(q4|%armOhoer5PV#u5tM!eL@|)Ax92cyJZJ1hoY$HlxWX(_qStX7+wsDLZkWd zZMn;kcw?t|twB2>Xq--4Y<$?)?SjJV1>5&&s{T< zYl&EF#zVI$66hdH!JrvTcjZc*&p#>w>2?8-o=CaWl)pq_DDb-WL8FJ zAMJ~WJxN?mC}l4-(b4LGKYcgd5XxeZDN!EtO#7s1Q9@s(cQnDo?8IS0cm&Re1}@26 zT@Fnl5~3%|{6X?=k|!LcZ=Rvg=%Z}viHM;juxkRgTx!NId3+&YNtiD*0`rg(cccu! zKT4?Kp>tAJK)KqI5NW4-dzN5!2r>gTUQk{t-&WtQw8V!bbn;Tl9S!t1aRv=U1C&La zQ(idFf_P$*2kR&aDOdZmIl`XYp7TJ1Gmm%xEMr(tk1`sLia;mn19>_JAPR0AhUHH- zCBZ{Os@WUsf-n`xp7(^{SOC};+3zjNY%$R&U!ydAbTgbQk^eytgu*?zS}S|GKKCkQ z$5Ba0N7iOJhAst))30lCBQR~U-`3NkzsZV79-{oRml^{RIPZ_HUJz(W4#_}X`n1N} zi{gdKj@(Hv)+_4{n*pXxY9o+xsUZYKMr6v=$n#(kF3@2Om^E^<4B(JIY*~5@cpZyF z543KJ?f2l+0#6F?kwdwvob=(508l{~h!!toueSJtkYDJ7!=sWOkYT`;o=^nSKp73Y zkUSfIiQf}f+rujnn)37qEU;!$EE2|NEGvVRD@{b2(eFI|S><<-nT}hAWoIxO$$^LC ztX{e;B!uWa?Ww3J1t8hMlV@(QjFJ)Hv!A|;?B&)1$`JRy2ee!yn7yHcCC_HanZAV_ z>YpOV{p63_{E6u`uX{Z6m8;pL8|;vUdL9#$etD5H!gcTgEeR~T=-?A4Yj zs3h?~_bJ#7p;&$op%>_AGaXHc?4O1FjO+!Hgx~=$5}nQ*y}dORC&Z?egdkjrZUBQF zDK|9aelNFOVJp+Y7FOs<;d}6orB~W;do1N?@RA}UB$PXvv%Ex^2((Tz0kR_dfDXDV zvf_#EbC1%^GJ6v}4BkW4Dnp7iokTNj)kVZl{wnBpdO5q8aOO2g;GhQ#U|2}lN%%)m zoZggE&mKi*K>CH4z1T{NZQuu>MLPj3bZdjAR(^tEwW2rGgMId4k5%R}ktP+pn<0ASQC%BNog zOpA!XUpbk@E4LF|k!NNz{koo7IDkYV61)u7S4g?k!Dv{5BFRLuAPUj(%uV#3a5S3Z zV5Ho%T;WV8gQU1Q0(_gob`Y>MfC&1i766t|@eTb)i1-7WU@tDl1O)L8A^~i;LLzHK z)3>Coo8yPvt$EFog)7)}Ql4W`Zx9K|^cS)yDhd_oWOe<(gw$xr-qI?Gkevxs0%DPU zoHZ`cSLri4LH9y)UrB*e1m-DOFv`Bp-nk596o@nWEv%ytGZAE(Mnu@t%F|k~&Y+@| zU{In%!Q4d|`fK%sJ1Nx4E?@Q%9x7oN1Tur5K7cE9R0EOD5&GP$si$1CC~Ku~F2=9Q z6;dngVMsDZpVmTL6!01zT8gVcS3olKI%C}`cFsw9p_&LJMeU(9{nAne_!gh00LYuE zbIn&v7Dnz0Yi{x>h-@29l^>Y6_NbI{QFxP!zg?E90If*q@Vs!p+SPt=h%zfv!&pNX zBisFQu_DI9AzzI>06<}{Jyu0q0yk^41iphf+xO~CI&ii#UceG`D((eT4Jz&h#Lo2+ znIOxFZ~dx!0oihS!h*SEVBAiTA(kqv#Y84b6mqEs6))ssvWUDuG_NX)$bF@V#pJY} zf7r35J`cgOCj|EPLIlE$Pj=_5q_;mp(4_-A}NyYqZ(Br!jIFoN<{d7OkDPt7U_5s(tVhIJF1;Uc&J3b z9o6kx{dVvc%=M8gOyYBq?RT~N?O2$^W>xr#ygo4)UBqC_?w&Ux13@`@ehcYT&+nkF z2tWz*!aoVWvi^#RKWZGj^neLR0F0-myseyl2Kq7;h9aHW=y^UA$yJ_|%eHeC2u5}k z3r0S=8K2?6?+@#OA}@1$TAGj0j0+l@%$GIs6*UF1$$fmj==!e0gh^FslBp&do_B}b z@3+1`UrnS_s)1jh{ z$E4}le%udpx6s@M2T{RRCJ~VBV7*p9C`RpDHkb}YV!XR-qi^eUY7+h6+n1cY?+z;ba88`2crP7}0GChGpc@TcD4T%&nC5 zZHAV=G3!nXgS=k{{(#JZ@&?46BEcT-ZKkc@e2FDyJMHzy$sXE395T_pQXR(~6V^3M z`XGS43p}T_KSxO5j7Pw#71otcf}nzyXeR@FnXFIoC(vo3K`u`MMBULTbUwv*@UreN zzp9)2tgv0yx7W1%N9OCC;nA!!X|H~l7!7*I_08+JC(}PQ+>Cu}-VXilX*d_=yZT75 zU4QQ_45w5`ppnHaqsmG>D!-&{^>7u@}2)y z1NsNrmu7X6ZRcEr?ylZv<+2UsH;DUh0Xz6+kzdP&0~>ldsav*gNACxvV%P!aP9-}( zu8RglA%%F^x)q(Wy`BjTIW*T{xuosl~U)fnjzXVLQwGU}gesI23TKu{;P8&V6p+AFJn zX71IWA#NY}u{c7t2d@(?)BXMB;eCtx|t+;MO*fhjL^ zqP9#YI_=$MbO*3g-~(yYVEd*8V@XgWx6r6b9pWDK_QHWgn*ls;I?#Fd}=4ay3 zsewK5sR92?d?0xsIj~>!#|1;x%)m^1bYLnRvOSUVZbUcpH*nj--SJn^0exE~_qc3Y z#!bd-CruEYZe7Qn^2Rqb8MeX!T|2wDt~h$c+lY2_r)$FTh`7NQ1kW9`#6R)OwZc=A z`wiwVBHghK*OkXNy>;8>jo@wV{%rNhSRxLt%T2gl?d-;nb?rk>cImr5#BH15?>5|q zo%Aw#3bl8IJ8zSX%XOBQezO%x|jCC&~-RYV8eovgbkJC5kxzlt1DC?W_nRB{F=LXyzItby-4e6V8 z+@o_tvZ)oB`PTH^WjmEq0@6NxvkAX?t8P~^;s2Gsm4gmp+sk$-9_YCcYT?u9%v?L? z_S@crcFeWvo918BWk!UwPTCgT_-xtD5S?#9&^c^asDJLo^aH4kA4g9@n=oMr-5{f{ zbM3?Y2kvjjrz3@I?|^>3@ry(rIhSbeZ;wV%!~x2!HFnyFzM5+|j9EJmKl~uBslC= z`oW(f*YgjeVE2>g)MQYPbr!VfMD;@BL(jj0eu^Z%k$X})`x}$wnuY+t#;!lwe7CPc zcPtebHg5cR*G_$HBL@vQ&F5Z zwlwr@*fiv=%Q(9}jgDu!(s5MR>&{pmUFBZJ*~L|#l1;1Ris!gcY)i9jdJZ_Q`ne4^ zp?2B$EXcj;zUf`iC4!fYgXn3wd@$Xw3rF|a+R+NxIDnp#YX^)FMBOJYmyN5@N95Yo z`h@uQ)T(A^U@6Y{dv@!m!|{IExE4Jjm#^*q@zx5|CL4R@iqE)Te3*w5^kma#(0k?b z-M$n2VO>h>kd3#Y_sQk`!foEc4WC3-d6|8~Pvk255wBqvcJ+5})k$^hx~nIOJmnD_^(aZXF$0%a>x9~GiG3%qr%BdoxY}#JGI(o5CJNNgQtb9`ubt+3E`k| z7sUAk(_Po}i5Z8XZJ2vR^0uIjN6(e-f-v!h*~UYOfnK!lx-hC7cuiO{XVq_unvcv} zha~TQuKJ8@T5h^26%OoedI-*AD*MZE@!$TH`}LMRU-)lt`)j%~Lu()RzWB;(I{%Na zcJ&W?e!;mzonK!4B8u?eK-P`#(u-nH`it-H_)Fc4FW!w$Xf?FxZr-)4=O%P)+1_UwYL^VZi5Tf2YJ8-;66D2&{TH7E z+lXs8eBGVBUouRI!K&k(pS}KWv@Njyx@mOAegD>f$h^2?75_C8b{BwQ}XkDSM@9R47kxqJjz3A30pVhZ>+*ADPb58d= zx!D{3P4}QtTF!Cr4a*hdXxqSZD6#susbd{?0vws0Uqm}z{uVO#Jmy+1rjL z@B0{oD#y4o3BuA%o zCirdqyY)?#+-X_ga)j46v~o}Luk}`Xx5@gi9x6vG2EK=+K`*+s{~u5=GVASIeGEO$ z|JZ;tT5j2P_ux@Z40_v;)EhuYywj`thknIXbB_CX!3#Y=VjFzX==4K)gTM%0ER?-zU(?2YueBy;06m)_1F|UN^fjyz246LwfP;=KEK5=nRL0UUT_Yh*?xw zxYO~E{@gpU_m_Pwrl$glm?YV|&N)7d?3><(f`jkx{#4(0(Cpw3ptZ2Us*lCRsEn5D zmK~A$-#6z%)v|Fb|NDFj1^RAHZvS9Tadl;rGZFU_0Q8IuW-f_-g@W5Trg&P zf{RLBest7Z-}S8>v$hx0bzh$8x-anaitVvjd~#Y0?A>(uA+DK|b*;MXzNyy`h@xQE z#Ks=MdG3Q7GIbiC_VXwuf!xlyQJ_4m5RQgPec%EVg|k=w$_=}oUzY>NiP11%hP zCcyWh*s31nn*1Ut_DFoU&p%WNLI$-2PM!XauwwO*P1kkpKr!1?nE%?nx>h4+|Gdn# z^jv51&DQ_LcXW?Edp$Rqa{e^(_h=XYBP0#{weE0oy4%3Hl0$pBst1QZr}srn52x!5 z;b6s?sN;2=-*5MtD{>7$Pk3uNm(=6z`IsS`FsHe>`ksB=@96$-9-2(g^%xU@$~1R; z_4jo+!!5!e(ATBGi@8X52<(B%`d$_}801YaDrcK8s4O~SJF^uk*brP{T>&nQZ1VVX z8je|7y1|aimu}!z07~hGR>wBl3Lsk0b!T}3rB5{jrbq%$BN~b1OAz7 zF5iyT8Q5dz*fLL5@-m?a@%Ov30loaXU5@TFOo@1j#Q{?i!okUT;Ro(+Yd5nz&uc6X zEfH6iM;X~m>yquXEs|0qo`!#C?1iTK8e*znT7`HqQ~d@0#8Ov?sb5q%tC}SgCipzdBi7vOTix=fC z+Kh*-64mk=-p`OY_f-${GR^i>qM6wYM^Qt$5J{4=EWCVk(=8;$a2V74fKy2VINt~nnvIeROYcmTN$GkpHU>mDlqC8?q?d+Nw(#ZLGAy>X z_&0EWqTG2k7x^<6o@U@8@H~Hb zi8d*lcBQqJOq$K*j;DWu5ac4$t`-phOD`}lh^Mch@pPp*gjVF-T0C+Nxdae7H~fzZ zop&gqbI2EX^Frs~e-(chJpcbDcy8DphUAjpMbGombJW^n`(GM7*FoaI|Az3n?I)96 z5aY{-&u`ZbpRfO2`22U_^WTNf|7VBK_0=4AO8B1@J~u$l=ThV6ea}Mz#$^bfn`rp_ z6#oVLKkFd-wDV?k%g#^OU)b|Qh^L46pZ`00H$UC~Lx`t;1>)&Ic#@$@u~r+=*=p6*06p3d3h zkg^hs`kIt@`sSXObMf>e-KTo$3*+g(B=Pinm3TVq=+m;baKT`a6O>iAQ%4`Ze>pWb zyQsNY#L@R2Vp(0Jqi+$*>M8!grJ9;deVOWg@+LHK8(ii?a$Y3lxTHgJiUor&;E)_9 zxk8H?Y$C#CPhj{cp~%H0Ff76!OHW{6gL@??a^joa`sza00zxn*-Z z8km!W=|RG{fYwB7bnEMhZ~0&pD)={rgXOqj?@jF1nw=ust@Ue|`rv!Zb!%m#d?om! z!11^we;`wNSmL?Z&A2od*u|eI@^Qj(SKS4+h=Vj2dBEK!m+BzR4bpUw%ACqOI!7pR zk>1fo_THQ49VK30TD@@@J8ypeQn+G~{IaDxM%nzb65B)(&sop^Qa0d4pPaFzhcDLo zGACz>b-rY7u+X(u8Y|#ln)AXxy1#AxHpr<)^pr+)fFPSd1x9KM6o&P26(5o7dK=gp zaMHl3f8puOD0)V&8?DN3mW8>@0D4|F57dzqa91|-ZQ(;1Cwfk9c9s!&*R$}^%n*83 zZXPmWIn}-Jak+KSpj5RPaaG&GCo+TR19IJ6dd#%xBf74I7c=%(% literal 0 HcmV?d00001 diff --git a/src/topics/bookmarks.ts b/src/topics/bookmarks.ts new file mode 100644 index 0000000000..58c4fb67f2 --- /dev/null +++ b/src/topics/bookmarks.ts @@ -0,0 +1,67 @@ +'use strict'; + +import async from 'async'; +import db from '../database'; +import user from '../user'; + +export function bookmarks(Topics: any) { + Topics.getUserBookmark = async function (tid: [number], uid: number) { + if (parseInt(uid.toString(), 10) <= 0) { + return null; + } + return await db.sortedSetScore(`tid:${tid}:bookmarks`, uid); + }; + + Topics.getUserBookmarks = async function (tids: [number], uid: number) { + if (parseInt(uid.toString(), 10) <= 0) { + return tids.map(() => null); + } + return await db.sortedSetsScore(tids.map(tid => `tid:${tid}:bookmarks`), uid); + }; + + Topics.setUserBookmark = async function (tid: [number], uid: number, index: any) { + if (parseInt(uid.toString(), 10) <= 0) { + return; + } + await db.sortedSetAdd(`tid:${tid}:bookmarks`, index, uid); + }; + + Topics.getTopicBookmarks = async function (tid: [number]) { + return await db.getSortedSetRangeWithScores(`tid:${tid}:bookmarks`, 0, -1); + }; + + Topics.updateTopicBookmarks = async function (tid: number , pids: string) { + const maxIndex = await Topics.getPostCount(tid); + const indices = await db.sortedSetRanks(`tid:${tid}:posts`, pids); + const postIndices = indices.map(i => (i === null ? 0 : i + 1)); + const minIndex = Math.min(...postIndices); + + const bookmarks = await Topics.getTopicBookmarks(tid); + + const uidData = bookmarks.map(b => ({ uid: b.value, bookmark: parseInt(b.score, 10) })) + .filter(data => data.bookmark >= minIndex); + + await async.eachLimit(uidData, 50, async (data) => { + let bookmark = Math.min(data.bookmark, maxIndex); + + postIndices.forEach((i) => { + if (i < data.bookmark) { + bookmark -= 1; + } + }); + + // make sure the bookmark is valid if we removed the last post + bookmark = Math.min(bookmark, maxIndex - pids.length); + if (bookmark === data.bookmark) { + return; + } + + const settings = await user.getSettings(data.uid); + if (settings.topicPostSort === 'most_votes') { + return; + } + + await Topics.setUserBookmark(tid, data.uid, bookmark); + }); + }; +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..03a6e64df4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "outDir": "./built", + "allowJs": true, + "target": "es2017" + }, + "include": ["./src/**/*"] + } \ No newline at end of file