From 962b52bd5b8a45f854bca064c6934d57593acfb4 Mon Sep 17 00:00:00 2001 From: Maxime Haselbauer Date: Sun, 13 Mar 2022 11:28:17 +0100 Subject: [PATCH] Add save all playlists action --- data/icons.qrc | 5 +++++ data/icons/128x128/document-save-all.png | Bin 0 -> 9474 bytes data/icons/22x22/document-save-all.png | Bin 0 -> 921 bytes data/icons/32x32/document-save-all.png | Bin 0 -> 1351 bytes data/icons/48x48/document-save-all.png | Bin 0 -> 2585 bytes data/icons/64x64/document-save-all.png | Bin 0 -> 3707 bytes data/icons/full/document-save-all.png | Bin 0 -> 9474 bytes src/core/mainwindow.cpp | 4 ++-- src/core/mainwindow.ui | 6 ++++++ src/playlist/playlistcontainer.cpp | 3 ++- src/playlist/playlistcontainer.h | 2 +- src/playlist/playlistmanager.cpp | 12 ++++++++++++ src/playlist/playlistmanager.h | 2 ++ 13 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 data/icons/128x128/document-save-all.png create mode 100644 data/icons/22x22/document-save-all.png create mode 100644 data/icons/32x32/document-save-all.png create mode 100644 data/icons/48x48/document-save-all.png create mode 100644 data/icons/64x64/document-save-all.png create mode 100644 data/icons/full/document-save-all.png diff --git a/data/icons.qrc b/data/icons.qrc index eb488f7b..59e94625 100644 --- a/data/icons.qrc +++ b/data/icons.qrc @@ -24,6 +24,7 @@ icons/128x128/document-open-folder.png icons/128x128/document-open.png icons/128x128/document-save.png + icons/128x128/document-save-all.png icons/128x128/document-search.png icons/128x128/download.png icons/128x128/edit-clear-list.png @@ -120,6 +121,7 @@ icons/64x64/document-open-folder.png icons/64x64/document-open.png icons/64x64/document-save.png + icons/64x64/document-save-all.png icons/64x64/document-search.png icons/64x64/download.png icons/64x64/edit-clear-list.png @@ -218,6 +220,7 @@ icons/48x48/document-open-remote.png icons/48x48/document-open.png icons/48x48/document-save.png + icons/48x48/document-save-all.png icons/48x48/document-search.png icons/48x48/download.png icons/48x48/edit-clear-list.png @@ -319,6 +322,7 @@ icons/32x32/document-open-remote.png icons/32x32/document-open.png icons/32x32/document-save.png + icons/32x32/document-save-all.png icons/32x32/document-search.png icons/32x32/download.png icons/32x32/edit-clear-list.png @@ -420,6 +424,7 @@ icons/22x22/document-open-remote.png icons/22x22/document-open.png icons/22x22/document-save.png + icons/22x22/document-save-all.png icons/22x22/document-search.png icons/22x22/download.png icons/22x22/edit-clear-list.png diff --git a/data/icons/128x128/document-save-all.png b/data/icons/128x128/document-save-all.png new file mode 100644 index 0000000000000000000000000000000000000000..d925be45a6ecae478440f0a981df60f16a68c11b GIT binary patch literal 9474 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 literal 0 HcmV?d00001 diff --git a/data/icons/22x22/document-save-all.png b/data/icons/22x22/document-save-all.png new file mode 100644 index 0000000000000000000000000000000000000000..159857f5000f95181d6c27231dad24d8deb6b7f1 GIT binary patch literal 921 zcmV;K17`e*P)-fuK??h*qix1^)yUq|&2cZ+@Jlg7m|KA|BM*G*%N@o2Djd_Pu$}H!qv)rm=_x zhYT}2@9l4XzuC80LrMw%!@OGyiA3UgsZ{Frm>%Q8<&k!;iU4+V!vGTu6;z3Swll`% zy}NgoQJ`#TZvOamYU*emFlW4f=;Tl+yS4@g`wl^q-v@3p%J_Bzm750Siv|B*3c7EDe~LT@Yvjeb9bf=%#Z{xfW6#|FB9%L1fQDL_Q9tdcW|cs%}0$?s9} z;nJ1Skk_QLgxS}xh*z1WY1(WJ9WBn`(Zl=jKnUpSjuNPLA*2J090!JnheJPCR-v!| zFa#SLYvmi{l^K(KAo=kA?HmXN{AOkb_O`ZaU@3$HO!6O3OhD{F417Kx1OmJMD&InY zrKKeT*77;$I!8CKE^t&u1dnNe-)F+{!7lq@IVPmkQaPe>q4x_E%B2RDwC)C$YI8Ii z)ti{|qQ&9m`~qxeM|wMfaRL-&`LYtF@*2j@0^_LXH`o&aZM0cO00Amjv9QU&;#iem zEEaT5hUf;iJL-8c0eOSLyDu5o&bmAI5P=%`0ujpU>ly2#WO1hFx4*rmLbx1lwgg0s zg}|yxp`3D?q#M{-7`u1|{?(A9YZNG*hi6OKsYyX^oJA=$sGsppjYi27aBEu|ooyE| zifX6v+qdWq(?>864A4;Zb;YvTESx`k4%A-&bVMR$`D(Aln0>y{0Y-GBWY^bWeC(!f zbnV7<2!%pmo37>ac?hc-?W^2_oN3126kBwSf-Y#mk;Pc`jMB}NQ;ob(D3o6Wm;A+K zQvS%KH#MNA;Zqfu3xtwo(QzZNDo`$$qgdm`Vo{F)1(JMfLit8&c{yDF1rhLMWp(9L zcy~z8aAfo^&~+W-qH-eA;PFCoaj`1D4tOE?^>k;XgQqi@6LYh(LBli+0(H40 vW@N1K~#9!wO31T97PbWdF*R;S9b7Y?KRj3q=^5(1q25`{0}Y& zZiYzV7|4YqaOWp*@*(0aaYhM(I5`j@Z&rQ~>|O8f^lPZ9ac|E|@8*)ElyX02y6fxj ztKO*uS(ZW7KH1+N7;U!g`1Lp5hF7n@2DK;xsJtHp0RVc49t0tebLWTLhUhdWrGh{1 z{SH5We+S4~t=2Gx1$J?Mv3>X6UFh|Cu(`1bNv8uZt*t||UWY{%@E`tXgBSbc3~-VP z=ybX;9*==cO1ZTVfH4Nz?GDu98ufXD2#=w(UL1T5fCJjG3w{MA3l+*J z!G|A%K>#-IsEwW8Td;{QC8*Kb+6FZ0wdbujN@&1n$AC5(;#}`G>K*fg5D|vYLvQpd z-CCn(g*hBEfYp`Nx!z<^6hOQ2Yflpg8)sR*5qi0u2??1g>&-ckm1OY&m<(USg=41B zw~YTdTsEKu0{NKtz<4FSrJ_90PX|ClsSW)Ixg@he9Zil#avoC~%vngK_JS!*bNGA? zO6NIHG>s?~`i1cra6n3(A_G^RPg2JFIY8{>bJY3_D5E)B8)39KJ|!V<5ZIIFO!1Th zCh4@MtoKiM4&d(xe=V25qLNC3KnfR|JyBug7_fZ?rBzviUk<)2@5I-z0zk7?1|oZ@ zt+_yKK8WJ2;C(1)N$=ue-7le+0~sfwf+gkxIZ$@&ZUl8ay{oZ|S&#$2{rV#eheMc7 zCa@I4(!_M~w2}lKJuK^ea(v9E?rrv#OYrEyee!a}D|V{Mx?2qgfG^d z-pmlPx^~|gD}itCy!S5b?d>@_-N%ZZE2S{BpI&};c6J8eeDyU| zPxRc=o8}tLCahw$b$WVA)5|63@9aRc)q>l%KA&rLd3g!9ZhztBhXwe`?k-ij5XUiP zyr;KTitCQqbjp3ABxXH)dX zu#Iy)e4EZ@5Z7v;3k(S0iiYnB5@k%1ZlFoov| z0n88>8ZRyzpO6@!H6($jx0H%=;pphd6(oA81Oh}|lujTW1LX9qn3N1kQ6WN77~|=U z@7r}2fQ;2L1_UyY*2(~sq#P*fPF|FNKvGNdp58}~2j8+V`Fg~q{vig2INtIY5P~;5 zK0Tp6(Ms2jC9tQh7|#hQAkrZL@bv!g{QRZ`aMh;q#pvSwq?H^XqV?)65LhXHdgF%8 zcn-{943}2kRg9ttq(BC+#j&S1+7t9?5k&mw;o$%i<;&fjmp{V|lHzG_%q&#Q>TcgF zekY2z#M2v_Yv>c~&#zXDK0<1Kn5F5pW}~r9@AmtBb$I{qdNXM?@g_8|KCI&%uSZc> z!+yzPBItb=rn(<-1-w1iIYjiH0^Itq5#`w4F}|Bk1=x zU_9Q1Y@9zc{o1WtU!O`qE2U|!JkR0q;X{z+8MUI2gjq-e40gvb&Q&7=hl+uQ-ULQGr>9%~m(2S;P9Wb3hQFvgzUJo`mH$iLDAi+qgz)B*;Gg=UJTs&9?9G)!;Q6ZI( z;JA^%YPW8{h7D5*6uMwgtyT*jK70tRcAF;>5?d{S-dq=^B~h(crO%Uja=w4OH9!y% zfxT*gzsQr#&(D>)BQfKklBExONfxFBUIp*{puD!t_|cIGu?F^PLUFK?QiHJ0mPom0 z>4TSk)Xrcvm)e2n^$V7~CKB};xO(;K=Pq5k^u3M88yyz{DIGj?2u_}UrT5_DJ1nPi zpFq%?j~~PCU ze>&KO-~aBnuy*SvlvA&_0N+kKMhl!9qR?Pxr=SZp$( zin#Z-VQ~h*!U;QwjtQ_6TO#p3P$nQ?Wo5-Pqb6?UD8s65mc9q?fLG&t<=GRU(t&Bx z0NZ~(frP z>)Ot#6anLBD(g(hW+phv2Wsrkcn|cS4&l8I@4)m_g#TOy^1kXCZT;*kCk)+s4Orlg zz{Duj#2%oPCh)~mpPB~TfpU@$nh3yyme}msU#z2g91+MsAR^~|pw@b|vrjskchbr5 z!{imvu4LF2cu`>F9$nBW6K)P^u7kmpE5?nwawWMv`x#6D4g zvZkSR{XX#aA1*<^--nr*8UAh@g+knq3D}8qr9tY+_ygE#ogoL{H3W3DQH9iMrKtU` z3tN+%7#d9|SBf^Yi42Nbvzic*_}N7uEF1R$9@Ti%kN1I?07s#}eRTJkSYJnZI>90$ z`{gsskR$@MYKTGbU1AQqi=UQ z@bQi75kN}aZihqYcsvGKxjjf!5*;NXocC_ufd6j_;j#c-dy|o-segYiCrzg9Y^i|f zGcj`K6%3rok2f)ISgV&2e99gE7Hgovc*&qbr*5Z?OrTO3u`EUaYP?GAK1o!Eqw z3FZ89t8rbd4~IiO+9bJhhAb;&a^~vJn>*VBdLmpR zb>XNGO*V@Im2w*Jpj^uGoSe!6^I^_CmtV^1*=2hRZL-@&m2NO0|9uBiTLI-sNdxr^ zRFRjDm4QHLpt1HUyh8Zz4o9QQ4?p?jqw-yW0HKjUAN}B6 zZ$eE;=+X~(yq&8ME&Q#5rnpWKBA7+6dnz3{9+zcI!bc${s4yprByW%Knxsr8(LeS# zH-A}k%+1Li0)Yk}kXnLFB`s)wP06V4-*;7zJ_5@k+jo(t+?HiyZsTOmId;e8cW>J4 zuwUVh+os624gfcyKIzmsPcwmn9hG-ZZQ}5gtu1>ULfP2k&dv_Z&dxfiJFw+QhI!UIQUYC8=rByG$U@S*y}s(CbD5fB)bg*I!y*`7ZuC z^BW{_u)6suqX8z+TUdbCzOfoPD*>}-lqh^!=PWxj6A4utWEP)X{E)0B#;EYf~)d_oy12l4(5;{VD9_2gg6Sv226~NjX7h`0WzmB z7%=5H<@_6=;yA>KV^bC5REVogxr{&{gU(&;HR*nH?3*`lcV_idN{^bInKz@^>Cfx# zZ@-yE0hg`0srl2v!T7{@JnoSlj}63NW&H-|8;C>LUj(Yl>naNSv~DYU4_hnxiN;yN z-M}ezWD}R63pZCX-3PHGZiAfk41K z-ajw^huTg2*9y+7(@UMl!o1VfUu`< z9f|-*X0*|3>tg`=7=RrwZ-NpDfar)Q6b#^-e}4lN6%}yr-aV+SsDyAhtb0H|G#xv` zJYZC$BsMR#A7iIzyP$Ic%K0nU6!St3xblPQxVUR8SDT;JFdX3d%Y0wd12d@4HyCv z0ObV$*x0y%*>e5A*WuxZ9){bUoe)8)1^^0ymXl{$2vkH%;9hUc<(2KXpvb&}4+kL> ztU$Dnk&zH|{Md^g;DfE38>Km*AOIWIH!=Vnw>lt`!NiuyKvh*0W>c>T;K=E73_xYH z)a_**3>OlmzQK<&Z?vcqH@kXR2yETdD9r%{0cdPkpEsljFdW+2KVSf=Mhp>vuww}a zLHa}m(K3d1i}b0gDtZ9s01N^0fD+wPZ2*RwzWaPdP*+z66DLi=9MI1IY}>rv3{@L| z;i&IbW2)edw|2AhCieGkzk|+h0_8&wXn=6Y0l;w6_ucyr!rh)214SVq z%K>F&WuOdKeSZr9{Mf4j*q$Q?FaX0<-{0JO5bpOO0KX5mZ)%VNh+qO$hO55s+;afB z`v;-e@67`MJz%)%`|Ix>+@i& z2Ga)#uBzW90dS-5J9h7fzF3k0*tTgMg0g!`B!VH(@KU`afMf4pfWcH6sz*kkt7o8K z2%1^;1R!P!m9H<F`lvUCT4JU|C9c4Vn7q2;n&m3C(j zSVvivgWy1^#&O(mqwlZ0xsT;74ZvEaY+|DtLV0QJI@bWI^c>*CK$UF?-@=b}mVs(H zHK z^nJ_DeUM6LmU6d zetj?2H3Xmtwl=PUvPhX6z?xO7oju^(C5)#OtHKItmQaweG2EIrnuj6g2?K;1ec!la z5Bs|i<$(38SXf8_tX{dwu@E}01BjLe3)cWu(kBZC9)<%5H~QYVV=qhCp{F+Em+)nj`3~ z4_<9p0nxH@Ie?YRSL6qPbAc1*KVq612?bzCO%+BTBreZ3RH;{p9^ppc*KOYeMP77) zR04Lr(g@LVJAkko0R8>_aQyu5A)ZJw`mPHhRWv!*VO0V{tP8B?xzYFUzyF>+;YuVD z;KQ;xB1wXjKa>^Amgfb~*WZU8@G$~NVL~Z#XM8ThMeP?1G(T0jR~YBH(f7M|?>gQe z1F(GQvit!05Wt0xncGp^QTz?HsgiF}CGsFGnf1S?k$0o-t^q7tveX&C#Xmr7FvVtI zX3G@`YVJ-^8LWv=7XR`&gByMCasePj0G2LZk{3X4Z!etu@Dl`(1fSRAc+tE}ETe24 za;xz|{*cTPo%G!ufDi&$v^Xz-9u9!VQz!sc>h@N{1RObF@aMbH_pYukX8<7tuw>yP z2LL^A^3oq!2++L@eKMRIiaj)PPnD^;(RT{nWGV$2RD!$!7B5(s7eIGU4>X;+0G^@% zWNgF9Kd{PgwrG&0TPB&go*CfcM&GYqy~?gjQWy*dp|YYv4q%Z30LlT0#2|a+M0)D= z`q%?gTKIk1R&Zn}OgxH*J=jz{ini@hw0+}Yf~rq!aLK3{Z9AiH>+1|=`gA%4sZ^R7 zp)J{cCw;&1-FIxj=#3W@bG0=!+3(jIfl(IDU*Ps-k1+Q64!VBlDszY2hg@EQ0NlED zi-Aoh6BrKtQV(DN7R;MJBmn=02p^u~VX8q2;WgF3kWWnwGOWB!v&^q&{8WmK z9xX{@8{?T`+Ks*w08#0MHjNS-uR$j~{RA zH%As1qp;z(jdKhGjN`NzCAKO^AbHoeSGQ^-W!4a?D}84wfB;hTs~4<8N=qYHlPF9P zEC6QD{B=PduxRNLsI9Fv4QM-Zl)0E;2(2@jGz<<7q5*z*XYU^KT)r9mJP@PNb*Rtp z_rn`IcS1NAVjgGA7~Sam?c2AtLJRMO+^i%NW}z4x$iCY16M$JWW)=is;gZD+fMLMl zcMsXl(K7D<8>ORdZRY6nhAWa{N%R~7u>0+|+3PRSo1FCBD1_4J1#I$!5GiNTV3{6( z*H>oNy-*N<`HL1>0JI!#k^-Qcqu6UbdcRV!QUM?h#?SUA;6#Sr0*Ra9r_$2!~T|3%9yK=GME7BrcNsez^pkh zT5`a#qiwcx$Z(pDCUBHmT3an4z>hG$mU#vx!RAAUO%JdDaM1UTn>Sg$pd7#+pcDsL z2=FSv08D#+N-!G~z_=C}ZT#+$Z*+a-`R9H$ zBmhP`EdszsbM>B{9tPrYbCYef`A2Ia5dK`c!M4^T+N6b70T=pi05Cizh+ZK!s$iAL z&rT``K;6ulP*YoDx@)@tfQ<$MxQ_s6RGQHPa>YAuaMppcUP2``<(Ocw*y;f;^!+C0 z07n2mpQ=1J@!7%v%$UId7{;7!KO>xhA&^MI{qFm0O#lpo$QAjuY}Ae8ucApfaE02?;A{5yQ60)1K%+<)MJEyMGpZR7-5wMhN# zCr_CG_)v1v_sf6zbYTt?=pu9?C5<1IXMXWyK>(&qpANO-YRwyZ59b0TcgBNF!#!Ca z?(f~dkNuq?Ke9PNMt5gXCP}v`#3-pzqT_!r;H2+={_AJs^O%v*A;guRKmNoeyg63VU$tabhD+1+Zk&7kalGSbiOrA;rs?8f>wRnz+4H-y3 zznAsP>H%3^xbVRTS^_h^LbYBem%jh~%YTN81I3BH{=PIo?gz>Wj(!L)G~%Ig+^R zy(M#Vbw58dG`9JiVC-MIa8aw-B?VJHeZTtkzvkiY7r68|0ifT#(EBAa`f*&IejpnC zsmJ3DKsNF+fq-AFsv6_L_z#7{Ve~F9o`N5WLTi*(#fw|G);{o#v5Vcchrelh0;;lV zmT4yrB1@lXwpLZrXH4+v4A%K+)OGdS>(`Ta?%c(aBB6ruKWJR&JC??uVAp@#cmVzC zfsCbjz%9JV52@@ui;|$D)nb}7a(A|o>TBCg*TJNO=|HjKu zAP5emN`_L?jin_;3x)*SHX0h7!udq%+O=!lmoHzw*V);b)?w!RX@;rqxOC#ujZ5Af Z@IRejytEu4xkvy2002ovPDHLkV1kuA=-B`O literal 0 HcmV?d00001 diff --git a/data/icons/full/document-save-all.png b/data/icons/full/document-save-all.png new file mode 100644 index 0000000000000000000000000000000000000000..d925be45a6ecae478440f0a981df60f16a68c11b GIT binary patch literal 9474 zcmXw9byO5@7k)Qbnx&*;2`OooZV5qJKtQA8Y**B^vNyI$oNlDC?>SgBc2RK39+Z& zIElo%UpTg(?K`%MFiMQd^ttf3iYGWxvqE5>)Ejm*$)V7;vH6;dw%lOPdCT1&Z-dX4RyYK>tUy-mOJU=*Lv8! zT2WR;Gw**Pa5!03l$Iemz@3|y=vy#Bl8z&HZQ#6k=M+w+cb8|m#1-@$#6aIGr0JGA z-0ATsElXeFJS=0sk`UnIQwaXgnnPlf6pSrbmX*qvV6UN zXuN#A4%T(_#Y6Aj{GF+>g&59d(WfWJrQbe0@I5K08i^*RF|_e2TCH1OdiI<>vBaXz zxn#b@zk^u@u$fF!gPEfI_w916 zx|5*gE62zYcwuR=2lR(}@$~SxIwszaZ?R0M;MZQMIb6u)_%^+ zg5B1r2@{r|(T{thA_q5jb~H11^f|leh|$<%*4a@5>(iGSuqlAeFk=Y_xR>|XzxHP? z2_H#GqQd=P`T6DDg!f7_=};9h1lBL{mp#xuCIiLi=Rvy^xn|97M+J0`FmfUS0^DtE zhLe+%aWk{>Bef-Jqf4Dp9_!3Zw({qbMV1glqx&xI@LibPpL-N8Z^j*=X8Ef%jm+|; zcOwV6XhE&j^At#}w^A;e(G8=|4j3koVCrm0-`(qW?YH4uva+(}CygIJQZFOBDT=hN zzch!rFGduW0owrqM({z)(=*W>U99atMlCo0p2+%Ds7nDCulzu$C`5;D=)@6<**sT+ zZO^okRvq0jxqCOZD^1k3=L);G+GFJCc%8}QCk4>Vy#5yeA2lDPp+8#nk-AH7d=w7- zTVh8;c<_eA}9kH0IWP0`K zH&stF1@|kyLFeqjNS}aTo%-c3863zX$=Mr4ET#ZaMu7B$zU@sjds~ zcIpHc>`FslAviwUy^w#PVh{m#%$vUbg5`e^P^M0xrd7L?W7}0V9x9C7KREDMrvckj z5n%`*lL^IAl3)Z=pqYdPrN_A$Dy9mw+SJZAC_h|{ISk7d{Wi14!eb;=<^D4{e z4K^h5I=$vcK+@AO0u>KBP`i1Y2?4f*LCeb3fT0_PxzkKP7V;kzSW<4NeeH^M|6)sY z&p`1t!J(W#^lcO7tC>v#PZu9Hju-{Z--nz@8o$Xs^%+F?*&OM`ou)j?Pj`jxdx`@#aGvTIDfBE>{pw)OT~ z-3YNhyD%!#ENR(oOZm9+K1=^cb%hLj9>76(^bd)FI~1{hLR6rAb`iW|qtlR5Up{n$ zC!+X9d{PLc7~%HcTMlGjTV7oiUa+B(gQ_zLffR%RsKb06i2hr=RWi<+xOB}(0gA!w zpPbA!W_{dyL;|LS`Qw@Niw$T*?;!qrtd0>kHtWdPR=j`Wwj-&F-D?o8YyE_giwJ{= zKIR_7+aUaZ`pgTi?M}|Qy};1Wfi*iCZ`s^{y8tlsE^-A5s#dIN{Jso@XLfWXx?(c^ z+$FDthhThxXlh5csch)M2@jBK9^9vPh4K{oWr={KRERAqTts$7@)inmYvk;rrM)%l zi}5{vpc3%%3%neLq0+*~hg8x;K|ka2@1_VdQ*ph-O9&Bo*UnP#lLmZ&ldbJuW6>Y~ zZ}IK*7$k^2+>9=$Mi7y#YRxY8_ZOcYC* z9^NpUD-;9%09cGaA?8a&>k0~-o5hTdlvnNRSp*0oFu ziU`5k@pkyT!!|c|_6CqEik;Bn8w8lmVPfDps@n7-?W6PSE6%*zjl}sEToMq~pSxZ* z_GB=Fqr+T!VIlDlOl+(e-vZ6aKnhqo{&_9JeEjV)d_o-wo@$W8Ro6Ua%t&4pjM$Q0~Bvrcc^HQx3 zVbI=BGr`YTD%0yZwMVyZVtRyiN~C?{yUHbJKT1-u2qdFsLbzXG@OjlQ1~AS~6eKf~ z0La6P+IOeQ=2|~I#Vu=DKAPRf-{g283K6;5oTMWcEq$5;cqeBfe0K?bTGhz7q3^M^8{9#~P3B>l>i&<{tLg*-<1Lm3#4My)H&F21R zwzf-F=TWE>@7qGN{)afSkfDI4JYrw>rl+k#)T{~U`sbT zOu&v6q5$Q-y_cyw{_m_*8p=Mf4Q5&fHEiatl$$}g|BFlsQ*on+T^0?n4LkDlbGTDu z#v~PDjsXE1*Er}6e~Yr6xKh$`9(ngX{0?O(6#P;9i`3DF0I+ zFcJgJoF>8}cTfYj*2rY^y)jNC!7lLL89_iiQ;@N7HFN`l}h5a1NFA{b2Wr9#ZS z%3J6*pZQ(NM^P7AqoE|i;o+ZMSHGrmKPkIr4!fTM0X=_P!==$g0Gr4Wesxep4DQJS zlgu?|>;!La|X)a>Bo^2>Ad7b;1~$v%mP*12C3<@Aj-& zmMsk?E@EOL;C@Yv!T~89XlQ7-oD|MGFt~)uqMfSpgb|mE#ll8g6qgQa^8Q+PrnQd} z?@yiKBcJ_F9IX<+wUPNX76~F)0}6(3kTc4`A4)F<7y~e+hE^e!f^0W@BeBQxNPS_9 zpxIv06sN`S;L|fS$tI<5g{rvx>t_Np2bjS>AI`GVuoSJ|w=!eNhyjR+iE$Zj*}X%K z4Q!4HWc1d{@RjyhR+He17HoKeG#}vPM;~*av+~p@# zk0jXeSkN1TXdmMSw%CY%x(9%)6Z9UzFr8X0kEY3UU`u~b5|G$9`NRiC4?~p$de^#r z*LOCkQTr=oLB@ZRBEKz)JYYhV+r=4h?P1E|j?4UzVKE^!{7eY}zoZ$^Dz8BN&-F5- zQUJRf#%#3j_&E)ch_XZ8Wpr49Z?v3oh0f{JSz@arg#*48C{8WY@sCc%DanViOeC>v z=)kbj?Bawfg0V`c{e-ljvRG5q`WS-Z^2)hc@89bX?}BjQ{=topL|m{kH~(ULJKTbo zI&|%Cm$@~Wsfo#{Yn3X%Fu$|Oq5@0uPjE`hq>;qEDY1PsJ>`4gEUF4YbICi8@Beg9*hcL#u&tFbal#M6l96J`zxPuQP4xip*g8(QJQ$#E>1C^ zK<#j`kY!M)6NuLwjk`E5UAGCEfMQzXZ4+C==7=jNYHg@v*52$i-K_j(wm*{Q;J5?N z>F|=92b2k#BkiFVL_pt=9YiyeGlM1P&rStn&#uc1kl^xssr7}+IQH__V9VS?iia=KqCu8$lQ0)hSz5+#W4^#~K8rr)_deL%?DRDCYt*|qYbNC_ z8nVTQ4<)JMXzKV2V76&wc$8@X<^I8Em=b>hb3^VuLO&7N>V3xYd!6S!f~0u(=DxF- zNR+<04Y2h(AD|dtW#uB`Ge)Iz(-S8>-g=RrcJ2h39bTRk6aaT*_NSQ)0*DYT+)%9E zNlWMFTjo9Qdr8?ZP8Tdb`M2{|R)xgiv5JGjRR|#16*mbeCKfU>M+O4OLt`Pf?WF~8 z)!S8EUk|OGc2bGnO}Jp>e5!#@e9PIH-bUsN{HQeYiGaN81h8^zp{4P1N92uDrgHv+j($G_gm;cYUr8^<^&mw_4jH zce?W+qfo0hXTsLjQkI94PDG$MD~s;?=(H*ug3j9=+tA6RBs1uhAvuj4Z9ZhkR~wRU zunS?~Y~xXSxXB!(Es`XrMt*~Mi;5}Fx_IQ%)wsXK~ zAQ^w)enxHI8jCa(Y%g{UV|1zm>$(i%p9WxNRoQ;XuEh9vkdA=>njPy}ZYUc*#e-AeW_5dplrDe={pa3om_ zwPzDVLkkoi?SHl|gcu@#d9619&P1wLg+<8JXac3NRAUsPOQL z%ADAWr49P&>gHJjZ`>pp*oP;rXB!8KKSe=GA+kMU{OD0pG2>CnkzW z0cwH$nYz|F^P9mDZ|)fijn`i_Gyf;QSmnJtEtdM_1qiR_?U`lx&dWPN|!DJAM>z#8qQ+A^WuFspHy$@hIoxc7qQWt7&{(6 ze)52rH#ji$?BbPL+?_rlPukRCRCJ2}e{1 zJD(hdcCt;eux*yATFDJJvkzP1VILl&q~|1M=ZVCbD-#9HTn(#I^C;6 zJ(3B2gOPj1IRK8!WkUiGKQ59%=gbU7%rjo+C%?1!7+<0KtLa;G_p|r1kFDV^Z;Z7j zF@P7qk$WL-yIGKR(1zxCIoo8n*-_Tp3t-$1_{rcW|B0%{N;~w$R zZyn^S!I3otz*| zXL4G4?u@C^rBhwFB;pB3TY_1fR5vkec&kN)!*a2&&U28IhF3~QPO195m9~bX<|;}E z6*RSE4Z+D838qT8gR@ErE4yA4=QLdC@zAB++4Fu!XJ(u}`wxblL#728I#Kj2jir>% z+0)1jN%1YkH6|!!0JioZ=lB7fX{lXgQ74EA0%{=Kmyx}Tb%wRqnY8{sWdJA^u^RFN z@>zMg=a*0S{yJX+-dyWe-bzvspK<|)UL-IdgVB}d?sW`WHps|j>nn!{rCTaGiNCM_ zB0+ybPx1h!q)PATKqM8B+Ck`%bDnU|o*}P1PJpu0@q8MeAaI>v$=e> zPiff~9WO-x)E)p~F2B=kq3VQ2{z?+a?ekLm9#Y*`8VPRs@!yG&+6WBay&;2jF z+HLD>b1tIMoJ^o@y0$N@{q~;&F63x8>^)=e_9vP0wYXewHW{Pve@|?#gZMk-wij(E zyNcY0SM6ys5tS;8Nk?Vo6Hz!0*87-xu*-$9AX&cHObbb)MZfT${+jK;3Vdo2hHV5b zdwWNPr<4=K3ld?eGDnbNjvrogE>g8mr(_D>el4b`+j7rScG5L!bORMg{Uzm)qpI>a z)!_`;2s%Gjm8&b%zZgn{)&PC`BoUjk%k?mBDCV~bJc4zG#+j4aE=51 zB^DR#t@b_9z1A}$jLe}#4UNiGA;7MfZ=yRLo@Zu0PnU{J6|MFo6uJex_hRTBuK}9j zLS3lpgDCL`kFTo%(kqaW`Oj#T$o!6t1YSWu6GijuwiXqW{9ni%bw_YHb2Z_A+?@Dc zXh5g`n*ZQ?aj6JUnS3vc$I{N8GV3x$P^r?oMR{f~a(yENA$AKf(*)QxZ8~-pvd^Bu zkE`TqnACUyW|<-Z#$DS?TB4U{3@8bN`ib^O6&}g-e*04Y`){2Gz?P*{OTSV}KZ(Pj7-Dah&0&BT%=evU5@(3Ct_a9!hvFT?RWXIhjU;hC; z@`HA$r5a4>__sYjJH~*}$9~TwM^-3XBepX!b?Xjzw0ZPy z);SHQ2Tj-hO(G;mK|yS!EfhnV2&;heBq9UeHz}l^o@{9hh^q`k+2z7rr^)3TM0{DX|+ESZQgt$Eb53m^dQ?mafcE*?B)YZ zeGC!!HkBm)tEctfJ!UfI`ldQ3e9c_tNxCJ06HP5z>y(dNJYInr@`@5**f`0S>K`6B z>8wKgzPGz-{r-Af7qp^&%>~;t`Ialg^z(gg!$MLbp72FJS1_X_XwP&&1OnJTIeQEZ zSm2f1943POQiwXho@PO8|8|q7Z{9r`&X*9A!tPd4tBT)BJrgg6pi(t-RivjxHNA0#gZ6P1Z$yV5Ho3g;TXuKOX?~$Dh%R4&vgwR(Pd8ZJA4+ z?FcVJh6?2q%DY^bemdeUcKkZ%d(T#%9To}&J`QAOq0^V$s44` z2Nzf#Whv(;1oItxz4J;bx0yq{Cj*}zF@SMB4xB%AR`~hCiB(`~VH7j@KCrU-4o@}0 z#IjkR#Pcgy+)YvLCQYH2vrK%($z|Pwn^lL|f>@uVZ1bCI(|7D_jYXfGT@bCqqWj`% zG1&s)|3+`If7ScJMqHTM&{Bx<5y)t33k?;DO9?qomy+lQ4Dw+L5KQ$66$tr9_@R;i z6GHtiJ3s>hpfGbzz9kfC`gPZ_?&;ZuAvyC|PJgQpu?lA4$u zSJfB-PnXdBujql6Tl>M0sUbl>rE5ZOL4YaOrf&oy>LW@tmO+e6`k9NwEB$^s;53kL z*I!rH9YS{jvi3e4Qr!WzkARd!zP{*{1ps&df;#FB&u(?)N* z2XPo);|Sk<-U$P(=d+8|`zYU84=xy}6$Mz0nU9S0x`Q8x8Qk_DU%KIdyU8W%sE_QZ z?@nQ=B8>7&pAJuVjkn_Ah?-MmEIT5Ibs^yk?;8fxmlGO>h&KzzYZ=|5sSuUN$#|W% z=I>6&FOGlemoCkRV+3K#RhD^SR|NPR{_*)#Gdga*;itCxA8LB#N#j?~b;>^QPb4^W zZ710D;49p3ZgBTjHE-lCsVAuq84*MPM1SZ@d`Ao3xZ!uj{|0x%rIpCVL?r;SPZuKC zHuLddXjlMfN++orzcy$b>~eG?g1^@;)Z}`f&G$CYS1Pt4Y5o0Y_%7={_c7ZjOU3>_ zeVW@}o2yv>ZeVdJ>UDy1ZpXhrTOI5x#_;CaK{P~+c!prT@Ps6+S_hWi zn7rAOq&dz9zL<6NKCgXiIk;WO!Qw!2UwZc0L->5P+SL;Cx+Fk~itY1xR<(v$V@s7$ z`eXzV;U_t}<@qW~lnxTky<*|Wnc{x6tE(qot=0qY4`&1Y?6h51nY$m@{_Kd4W6ySg zfntc0w?yQZrc>q69a&%7e-NMTcdx6JOI<_>il~!}%1TNgLN@QaIB9vf+2AYX`d7&) z|NQyvO+uDaFS@!5%-`1y9$bs^JWLqE^nprpRQSIO<<_(m$&^C+DloHsb~A+rD?+8WZ$*0fkizsNvdMRaVMr z#0*eAI{{Z8+!8Q$OiP4|7lmgfZW{y65Tcx4yEgxJm1&=6XGWas7jACeUNNHD8VpOw zFC%})M5{DC6IsOZ`cp~RcOP>G`d6L0+QpDpkIKL(Ew0U^L5R!L_SVmUzUZE~@`Bh9 z@whZ;e$l6P$BX?)7029;@Ku9w!Opx;jTnuo`3*f^zbAEZI{n$>B%~yqtOW%)IWaes{HD zZoLq=Axc|`s5-42e?85Vg(Q|h^*%oLyioaY_V+^wKnm~(Qs%pV>hVfc6)bE&Ao~G0 zc0sZ3_|W3Nz3>I5WN8k&k(khDh0$Wt&myqW%j;wNxIq;X;$ouBmt@KVwMO-RDNA{I zsT9VAOx?-#XFy-=hLS^nG@t&?VeYig1r|<8x)85lwk@|(Z7W0g3*CjhnT9kC90iEg zj|V4Sf2NeK?Xsz9^3kIqaKCti)Mp_}+RGHB0sQI+uw?bJ^OR$2%gt@lmf19e!d{cy zo>>>f`ya zs0*Hiwgv-{o;0elm=R&P@|ZXb$31cZ0ZYmF&2>TLS0wsf`zwErW12UY;!Y;YLFim1 zpI8rphRHpdMVHbIL*iRfi$&|hZm=zbF>{z{R_vVt@gOG7h;3s(C6MZQ6?Ss5`}RxT z?#fRh@s%^&58iR`5HGAC%>a#IboS#`vMwDV>+aP!CR6DTPD}{ZN}FFQ6I{27`;1?` zAir@z^!!`@FJ|3_;qHUWk)enCaeOZRLK9>U#13z?Tp5I4(wuvAvFMmjCXWp+{&W1- zUbD2K7;r{Q0LO@0fv2sEnBDB;P94QC?3>(8s`UrKrdL9Dc7V~(8-#h*^M)V4|Moh24cdg3MLXqhoOIOLe4C%wST?J_e zze};Ji|2nb$VFbamEk?pEk0$5Slg91C^(lCUQ8rYMp4oLv&cu}E>Kae0a|S0mMux_ z%FE|aIEK1(eGjQ6{EXSOr@>H!pI@7TT}k0}bF*Acbv0R(j7TIa13CL=*6Y0L3GPci z15i)q+Kedr2K#rCYOdwbm#GoNZYSdpAE**0jMsY_Mp|Zw&tbJ23>xh+mnO|Ai9bY{ zO{HjcuRdyf`&Lgm=+I>)!$2v4UEaUCrL3$Bd16xF#{NFJ6?BP(r(~z#9y1X9hR4Dw zYpEbFq8>D_joUZr1B^9Nz-^>hwdv^S=zVi@bJzakY}c_-UM;i*w;lT#Fy0t}^(4n}D{4zWTeHwvqn>Wf40Z literal 0 HcmV?d00001 diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 8ba25112..a3e0967a 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -458,6 +458,7 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic ui_->action_remove_duplicates->setIcon(IconLoader::Load("list-remove")); ui_->action_remove_unavailable->setIcon(IconLoader::Load("list-remove")); ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove")); + ui_->action_save_all_playlists->setIcon(IconLoader::Load("document-save-all")); // Configure @@ -563,8 +564,7 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic ui_->button_scrobble->setDefaultAction(ui_->action_toggle_scrobbling); ui_->button_love->setDefaultAction(ui_->action_love); - ui_->playlist->SetActions(ui_->action_new_playlist, ui_->action_load_playlist, ui_->action_save_playlist, ui_->action_clear_playlist, ui_->action_next_playlist, /* These two actions aren't associated */ ui_->action_previous_playlist /* to a button but to the main window */ ); - + ui_->playlist->SetActions(ui_->action_new_playlist, ui_->action_load_playlist, ui_->action_save_playlist, ui_->action_clear_playlist, ui_->action_next_playlist, /* These two actions aren't associated */ ui_->action_previous_playlist /* to a button but to the main window */, ui_->action_save_all_playlists); // Add the shuffle and repeat action groups to the menu ui_->action_shuffle_mode->setMenu(ui_->playlist_sequence->shuffle_menu()); ui_->action_repeat_mode->setMenu(ui_->playlist_sequence->repeat_menu()); diff --git a/src/core/mainwindow.ui b/src/core/mainwindow.ui index 37fb9ae5..f9e2aa83 100644 --- a/src/core/mainwindow.ui +++ b/src/core/mainwindow.ui @@ -483,6 +483,7 @@ + @@ -747,6 +748,11 @@ Ctrl+Shift+O + + + &Save all playlists + + Go to next playlist tab diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index 443b5b22..f2541c19 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -132,7 +132,7 @@ PlaylistContainer::~PlaylistContainer() { delete ui_; } PlaylistView *PlaylistContainer::view() const { return ui_->playlist; } -void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist) { +void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist, QAction *save_all_playlists) { ui_->create_new->setDefaultAction(new_playlist); ui_->load->setDefaultAction(load_playlist); @@ -148,6 +148,7 @@ void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist QObject::connect(next_playlist, &QAction::triggered, this, &PlaylistContainer::GoToNextPlaylistTab); QObject::connect(previous_playlist, &QAction::triggered, this, &PlaylistContainer::GoToPreviousPlaylistTab); QObject::connect(clear_playlist, &QAction::triggered, this, &PlaylistContainer::ClearPlaylist); + QObject::connect(save_all_playlists, &QAction::triggered, manager_, &PlaylistManager::SaveAllPlaylists); } diff --git a/src/playlist/playlistcontainer.h b/src/playlist/playlistcontainer.h index 23dbb609..eacab439 100644 --- a/src/playlist/playlistcontainer.h +++ b/src/playlist/playlistcontainer.h @@ -53,7 +53,7 @@ class PlaylistContainer : public QWidget { static const char *kSettingsGroup; - void SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist); + void SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist, QAction *save_all_playlists); void SetManager(PlaylistManager *manager); void ReloadSettings(); diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 49f7ba01..1fc6d93d 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -650,3 +650,15 @@ void PlaylistManager::RateCurrentSong(const float rating) { void PlaylistManager::RateCurrentSong2(const int rating) { RateCurrentSong(static_cast(rating) / 5.0F); } + +void PlaylistManager::SaveAllPlaylists() { + + const QString path = QFileDialog::getExistingDirectory(nullptr, tr("Select directory for the playlists"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + for (QMap::const_iterator it = playlists_.constBegin(); it != playlists_.constEnd(); ++it) { + const Data &data = *it; + const QString filepath = path + "/" + data.name + ".m3u"; + Save(it.key(), filepath, Playlist::Path_Absolute); + } + +} diff --git a/src/playlist/playlistmanager.h b/src/playlist/playlistmanager.h index 7764ad71..6c696224 100644 --- a/src/playlist/playlistmanager.h +++ b/src/playlist/playlistmanager.h @@ -222,6 +222,8 @@ class PlaylistManager : public PlaylistManagerInterface { // Rate current song using 0 - 5 scale. void RateCurrentSong2(const int rating) override; + void SaveAllPlaylists(); + private slots: void SetActivePlaying() override; void SetActivePaused() override;