From d2349bd713b2946be725f810f581016664809626 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Tue, 14 Sep 2021 12:03:01 +0100 Subject: [PATCH] merge with new options --- CHANGELOG.md | 1 + mRemoteNG/App/Runtime.cs | 4 + mRemoteNG/App/Shutdown.cs | 29 +++- .../ConnectionsBackupFrequencyEnum.cs | 13 ++ .../Connections/SaveConnectionsOnEdit.cs | 13 +- mRemoteNG/Connection/ConnectionsService.cs | 1 + mRemoteNG/Properties/Resources.Designer.cs | 5 +- mRemoteNG/Properties/Resources.resx | 3 + mRemoteNG/Properties/Settings.Designer.cs | 12 ++ mRemoteNG/Properties/Settings.settings | 3 + mRemoteNG/Resources/Backup_Icon.ico | Bin 0 -> 45451 bytes mRemoteNG/Resources/Icons/Backup_Icon.ico | Bin 0 -> 240126 bytes .../Resources/Language/Language.Designer.cs | 132 ++++++++++---- mRemoteNG/Resources/Language/Language.resx | 33 +++- mRemoteNG/Resources/test.ico | Bin 0 -> 45451 bytes .../Forms/OptionsPages/BackupPage.Designer.cs | 164 ++++++++++++++++++ mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs | 149 ++++++++++++++++ .../UI/Forms/OptionsPages/BackupPage.resx | 119 +++++++++++++ .../UI/Forms/OptionsPages/ConnectionsPage.cs | 74 ++++---- .../UI/Forms/OptionsPages/OptionsPage.cs | 11 ++ .../UI/Forms/OptionsPages/StartupExitPage.cs | 3 - mRemoteNG/UI/Forms/frmOptions.cs | 2 + mRemoteNG/app.config | 9 +- mRemoteNG/mRemoteNG.csproj | 14 ++ .../user_interface/options.rst | 39 +++-- 25 files changed, 731 insertions(+), 102 deletions(-) create mode 100644 mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs create mode 100644 mRemoteNG/Resources/Backup_Icon.ico create mode 100644 mRemoteNG/Resources/Icons/Backup_Icon.ico create mode 100644 mRemoteNG/Resources/test.ico create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx diff --git a/CHANGELOG.md b/CHANGELOG.md index 52af0484..8a12522c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] ### Added +- #1476: Configurable backups. Can now edit/set backup frequency, backup path, and max number of backup files. - #1427: Fix RDP local desktop scale not taking effect on remote - #1770: Added missing RDP performance settings - #1332: Added option to hide menu strip container diff --git a/mRemoteNG/App/Runtime.cs b/mRemoteNG/App/Runtime.cs index 23d0e3aa..bf34daf5 100644 --- a/mRemoteNG/App/Runtime.cs +++ b/mRemoteNG/App/Runtime.cs @@ -102,6 +102,10 @@ namespace mRemoteNG.App if (Settings.Default.UseSQLServer) { ConnectionsService.LastSqlUpdate = DateTime.Now; + } + else + { + ConnectionsService.LastFileUpdate = System.IO.File.GetLastWriteTime(connectionFileName); } // re-enable sql update checking after updates are loaded diff --git a/mRemoteNG/App/Shutdown.cs b/mRemoteNG/App/Shutdown.cs index dd06609e..0c99155c 100644 --- a/mRemoteNG/App/Shutdown.cs +++ b/mRemoteNG/App/Shutdown.cs @@ -2,6 +2,7 @@ using System; using System.Diagnostics; using System.Windows.Forms; +using mRemoteNG.Config.Connections; using mRemoteNG.Config.Putty; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; @@ -60,8 +61,34 @@ namespace mRemoteNG.App private static void SaveConnections() { - if (Settings.Default.SaveConsOnExit) + DateTime lastUpdate; + DateTime updateDate; + DateTime currentDate = DateTime.Now; + + //OBSOLETE: Settings.Default.SaveConsOnExit is obsolete and should be removed in a future release + if (Settings.Default.SaveConsOnExit || (Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnExit)) + { Runtime.ConnectionsService.SaveConnections(); + return; + } + lastUpdate = Runtime.ConnectionsService.UsingDatabase ? Runtime.ConnectionsService.LastSqlUpdate : Runtime.ConnectionsService.LastFileUpdate; + + switch (Settings.Default.SaveConnectionsFrequency) + { + case (int)ConnectionsBackupFrequencyEnum.Daily: + updateDate = lastUpdate.AddDays(1); + break; + case (int)ConnectionsBackupFrequencyEnum.Weekly: + updateDate = lastUpdate.AddDays(7); + break; + default: + return; + } + + if (currentDate >= updateDate) + { + Runtime.ConnectionsService.SaveConnections(); + } } private static void SaveSettings(Control quickConnectToolStrip, diff --git a/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs b/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs new file mode 100644 index 00000000..03967d3e --- /dev/null +++ b/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs @@ -0,0 +1,13 @@ +namespace mRemoteNG.Config.Connections +{ + public enum ConnectionsBackupFrequencyEnum + { + Unassigned = 0, + Never = 1, + OnEdit = 2, + OnExit = 3, + Daily = 4, + Weekly = 5, + Custom = 6 + } +} \ No newline at end of file diff --git a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs index e8a31d5e..168d42c9 100644 --- a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs +++ b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs @@ -3,6 +3,7 @@ using System.Collections.Specialized; using System.ComponentModel; using mRemoteNG.Connection; using mRemoteNG.UI.Forms; +using mRemoteNG.Properties; namespace mRemoteNG.Config.Connections { @@ -48,12 +49,14 @@ namespace mRemoteNG.Config.Connections private void SaveConnectionOnEdit(string propertyName = "") { - if (!Properties.Settings.Default.SaveConnectionsAfterEveryEdit) - return; - if (FrmMain.Default.IsClosing) - return; + //OBSOLETE: mRemoteNG.Settings.Default.SaveConnectionsAfterEveryEdit is obsolete and should be removed in a future release + if (mRemoteNG.Properties.Settings.Default.SaveConnectionsAfterEveryEdit || (mRemoteNG.Properties.Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnEdit)) + { + if (FrmMain.Default.IsClosing) + return; - _connectionsService.SaveConnectionsAsync(propertyName); + _connectionsService.SaveConnectionsAsync(propertyName); + } } } } \ No newline at end of file diff --git a/mRemoteNG/Connection/ConnectionsService.cs b/mRemoteNG/Connection/ConnectionsService.cs index ced89190..bb26bd68 100644 --- a/mRemoteNG/Connection/ConnectionsService.cs +++ b/mRemoteNG/Connection/ConnectionsService.cs @@ -37,6 +37,7 @@ namespace mRemoteNG.Connection public string ConnectionFileName { get; private set; } public RemoteConnectionsSyncronizer RemoteConnectionsSyncronizer { get; set; } public DateTime LastSqlUpdate { get; set; } + public DateTime LastFileUpdate { get; set; } public ConnectionTreeModel ConnectionTreeModel { get; private set; } diff --git a/mRemoteNG/Properties/Resources.Designer.cs b/mRemoteNG/Properties/Resources.Designer.cs index a047b0d3..ce1c38bf 100644 --- a/mRemoteNG/Properties/Resources.Designer.cs +++ b/mRemoteNG/Properties/Resources.Designer.cs @@ -8,7 +8,10 @@ // //------------------------------------------------------------------------------ -namespace mRemoteNG.Properties { +namespace mRemoteNG { + using System; + + using System; diff --git a/mRemoteNG/Properties/Resources.resx b/mRemoteNG/Properties/Resources.resx index 14830220..406baadf 100644 --- a/mRemoteNG/Properties/Resources.resx +++ b/mRemoteNG/Properties/Resources.resx @@ -331,4 +331,7 @@ ..\Resources\StartupProject_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\test.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/mRemoteNG/Properties/Settings.Designer.cs b/mRemoteNG/Properties/Settings.Designer.cs index 15db67a9..f1b63a70 100644 --- a/mRemoteNG/Properties/Settings.Designer.cs +++ b/mRemoteNG/Properties/Settings.Designer.cs @@ -2915,6 +2915,18 @@ namespace mRemoteNG.Properties { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int SaveConnectionsFrequency { + get { + return ((int)(this["SaveConnectionsFrequency"])); + } + set { + this["SaveConnectionsFrequency"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("Highest")] diff --git a/mRemoteNG/Properties/Settings.settings b/mRemoteNG/Properties/Settings.settings index 6fb5fd1e..e0552004 100644 --- a/mRemoteNG/Properties/Settings.settings +++ b/mRemoteNG/Properties/Settings.settings @@ -725,6 +725,9 @@ False + + 0 + Highest diff --git a/mRemoteNG/Resources/Backup_Icon.ico b/mRemoteNG/Resources/Backup_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8aa98e515dae1fd85d0df9997de54ed10730c400 GIT binary patch literal 45451 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 I@_Fh10YBW>hyVZp literal 0 HcmV?d00001 diff --git a/mRemoteNG/Resources/Icons/Backup_Icon.ico b/mRemoteNG/Resources/Icons/Backup_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..86340997e61f392e765a650e0f3f19f6099ed5b2 GIT binary patch literal 240126 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

JFF&)+Tv&Y!Ry>z3H&r88B3XolNmKAzI~v17>; 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

^Y2?80;JZqj7&-l27t z*Wfn#wCDu#HwUq^Q=pXPZJ&ZO8R_Jjtf*==#WRrytBMDP12fXl*zcO^;VOHqIq(K6X-nH5dNSzwN)cenfxeKsaWa z^zp)1_Ug2WZU?`4`iS%T&8PCiJFn7a*}?JL?>#0+%o3|2Tl0W?HoMl!$ESE8UxQ5c zB=uskBjGj1f7ruWUNt8|E+a9b@VaTqtM;XQL5c01{KA}raUNbd=GeM&?8)yVUUjUW zz5j;RHr}C{+#Bu8fh~4w?|M5gpT_AOE4{(&xqWM83$L^@yI0sLwd3OT_zu?pUgFHc zE9;XU(LC|7tt)KPQu!Zywsre=)Zm^rdT1XTF|e1I?e9#!JY=9V3ai5g^>=0mN?Tbc z6Q1ET-C%e?uddE*k4|l`(pZ><zQWJ-#L8?w2oHq>X2wh0huzTF=zq*b^3s3T{~Qli zKpagr{-t& z$?iSOxKE9>0a@dO#(HA-S&uRPli!9K0*nFiu@ZYgT+lvZb2Z;h{KSP%-_@^!|ZGO*4dez ztL(J&^^ACZO*S#ip4+2w?AAqgO13eLm! z2FX~LIkwu>tJ%om!|dbt|Dhj(Z${sP=TK-%*EIiq@zwiznVDnG*c$7X&9SM&yW7l{ zyLsKk`O;a|>4DcFJ=$608d@((^G-cFTy2xP9gZ!Yv611GeQqDCXHFQcr#3wCw~S2% zhK`L+nyTYs?wmbW@v69);FTCBcqJxr!vb_OX`!d+Ck%aN}s{x1Jb7|UMz+}=99&*xI9`Rwa=ZWNcy zUCPHAYXv&DDSZuXbzT)e1h42TF}hn6uY38c4|Sy2*@@+SLBIDUu=H;xzB_ufp7TR? zyndti-#nw^-fhSCZuU7`#zb!%+LW*=Mqg754P#b#^(H&`b=kw`)W0TfPig!L!}uxj zeVp30*48bYYGVd=wLYC%*h@ot+Q|R6z4!3Wv)Phy!R@T+6AY`f zXGljS*>{$3OfK9BZ@e7FC0NDx3H}#ebIGEGdRN9KTEg2Q!K$#~xbSvz9~I=+)r-3f zujHj{D}KxJ1T+?sn`dsw63_6v|N6ehqZb19V(6&L(O}c{V6361oJWrgR>=$c=Ibwq zlP8W?onqgJb;{6HRh2qL9!WdYUwFOyj&c~wf5!2;P2=N0bFpETxf0;hF=}*GIV9nW z!RQjrQC!MgMPVD?&pypl{ImR1&Px8FUqs!h9>ds?Jn}(eU)2SfzRb4cmhI6O-N4#= z^s|4KS*r6)*FnBU*k0)?_VVH}?%xPU zHLn7BZi{rN&{XuP$g33mgU~ZsG1@v`eh9H(!!-Xs(N^p^$gW$&Ll3ssn4RGo^0MfH z*_W(VqOlM4(FCW4)psq<+423`!a?!Bhc!3rs0#W<%JCg5GMI(V9uijZeH#)ljNCe; z0*!S(dH*`;qSh@AyJYKWtttppUVSmlp7eSs&Yl?xvSx(bEMaw?uqmA8&YNik%tA*W zDZ(y%vC&&$6dIeCJtKfm!>F+9x~aKrOWuWlo;_n~m^OKQcul&cU&t@$t!b0O(IW?A z+w1>m3*U73duqqN745`#y%jdET^y>EPnLYotwqWcp!``)1;T65tWZ2-TzKK9KM0dv z{e2iO`PJ|WT^Cm2#qF4MU-*0AhXrqrUiv?O^21P3RvNBfMHfk*e)1A=k$^}24ISp4 zt7pU8$9IPld)9?zn)lEA2=KRDbQW4_coj}psgU!PdBkz*VvkHC)h` zdHv#9@x#~oMJ%Ghe{ZwAAs+I)hgoM|MRgY&cb19{djQ<3kTc{O8Sz zDcCN%;0r&~oNC1$x_IuSJqs=h9ty0&14r6I|Kl6P?|uHnfiNUrLU4La^PZ3GT4TBk zXe(HCydK@QEF4iW%x)SGW(TEn8Zdnmv=-gu!42Y*H!d~ZcCKjO)YtzM3g=A^`NCyU z&K&WgvqN6iEGu9&y$yaJDbQVEmg2lIyl>VV>5XSkF|31AXfJEzUa&nw_#}qMAB7G4 zx+AYY3LZE_vuNdb&3seCYiuXlYRASE%4s*=a>uqP2M?HS5nfx1XNEG(@q6*7-wTsp zdofHIFF9JY9ljjgQtv>@-IX7Ie&PE z$t{b;(+(=G&YSWK-UZm+d zqW=E8Ena87t;;yEz2kR1yl-ddYO0Z*W}W!l?cu`7A)BlHo_tZFOdzbtZ)X3twPBTf zAjqRY-uj4BzD9cSp5~`sl708kuFY20BfB@s|95RTp|~QacCQPkc4>R(%17}k z`U-!{Icz#$6uB0h9+I7B@A|>eQkfg3z43=IZ`!y}mNzGqsFW3C8#cjfx;S20JFR66 zzA4b%bbx@nqxU$+D>Nj2V?gXY zNF3kxYrcI2crBa~S_+i|+KTdgC^u#0+=<~2Kl^@|^7s%yWyi&Psb~AwR}|Hxp3U@x^+cQ7-%UCi&dPyLQl!@ zx~ioxgV*KCM@NhuXzXIepj;-|wX3ece6_JVM!FL5N+0K$)H6!Zw)5Qm;~g@x1Z{41 zoV$`+7l!5i^26J*CY(C3BV3U!2OCYW`P;&@+V{}*^^!3)&kR4l71E=^_ex%+I9~B3 zpg3N4ELFZ;;nm_mOW%ZUY2O;@7TT%;Igft!!*7JiZ^#xYyTarNuUp(2Z+H5u6;av; zcW>JGacXE!IJj$LI4VE!5}&{M}a7|znU>GFj_uhibs7;e6E)%qEIEyfslJbf@6aCMqz%HTDQ#YZJC4D-Xv zaVNYs7m&MsMySc25?=iIk4%1@I{p=tpZN~sUwhdwi@z1IDwtohbK55S9_YC;@xhX3 zYxTq>Vn>%yH*^knZ-lFg-*o=aHlvXPioZeJ?`5Ky&`$8`@pPcCV0ESN3tr)ixz6n1 z8t-f6yJdDfjq|h_3w@kt`hPq4oc-gQ`uDXrLDy^VcrSF$*Ss+KzJu4(icx>#+%fqf zo)R%704M*sXk{SDdr-RovsIxLK$Q#zr145w61 zil#zaPeWf5ygFu&Bg@L)?WAmc=!fxDJs_HTRPzcBZeA`MqOe$_YyyCXe#k--Q6uHMJ?tn&$mT>q{b@9N6(!_IZf!ZGoe_?+B4e^g_jc;S23Z63?|0nt$T z4eXG8W4q?8;-j}q`X=zoTo$+8I9?-G@fDW5Dt}?inJrspb=KtYE5*a6o!^qb?NsX@ zubQvU%voldij$2jPQ_P!ToU}NBnsD`bbC1 z;3>hYc+c~iZ(Nf*Il~X5cOsW8cqKpOE5G|$m?Bm=x8xg7 z41Nd6nV?vR#HPf@tSon??hajLOpDL(KF-?Oly-ei7qdy(Tj*V^Z`?Os)BK9UuxtJD za7wg`cD#F8-|5bka8dSbe3r07?v%gJj={EYP&SVp@}G6zc>LlWukgqe$LrQ5}xg0k7nf#RgknGTZQq z9vHtuVgwb+ck0jq$pWgQK={4^`i8fe#n{UYWaLi&4Lt6)% zL|BV@&$^0`nvEcz=m5Fj#`dk=Bw^lDmu#C z74g9MKR{D6v{n2t^6Cy-N4!F3(MO?w!ry7m_&-`cm49&mY`jSUsg!KW9|H>e+o8BVH4no)vZ};MK7T9R;u0c)iVLb{{|jZu}wd7>i)p}Z(R7UeA{Da=(4vUnVR$aZX*)%+MgL z){75r6m12o#6PZ+g?wGp`PATTIB#inR zJuvu1PGw$;`NoSD?_Ak!Ibpu^>HisiqP(9IB_|Oh54m-!6P+Ad2x}IisFLcrAph-T`&!v>CY5sF!*(vTdwnLJC2?9 zatztl)_GZB+LXy*f@tc><;&E0gipy^(MRdw{^Wfwy?*-M=6H>3o0p<_7)|Bbp)z}X zXeyZ*s`I9V^4v+GIBSyT#pZq_?kMdJV?3SkQFrM=LpYGW8wg19%6-WMF zxRU-7pP0R}oh_)7-ve}2G}Y*;c-^Hc&{u3W6!IYqD$Y7Qvhl*Q`Sdgt8IN{HxVLdB zp`W9-m$!%4==oanPQ!dXJpbLWxVK$-U^>HrEi1x1r!+t2>PgY1HDRO8FITR5=97U< z&D%E23b&3^(=~~%nha}tr$~#5Rkmk!zx+C1RV<^TfKB0-KmW1jMSev-sJ{x+q=TIN z+Dqb#<&QUET$rIXeyLfSkA}|%zAEHqJhpeU@xVq?4~n)XIK4QuErZ(&hqfBMJ-Jty z6;`qDfYmcYJHy81eTsRe`KVJ~H$75=uv%4~uN;`gR>%WXT~QJ$N{X$3Uy5N>c&!$e zD}>DoFshQF!@_79vtZTn%eLvDkbiYuZr1ED?)BHq7IO0VF}1n(A<--8lA>NI_M>#4 zOK-=s@BbgYgy|-nu4s*Jy|uPDlnS2|aN6Be7Iw*wMP5Dhi7_uwlt= z+}HRp!Run1aXXE#!K=>=WzD>FVyEqrk9_Hzi6L+Lo2Cn-Ph7u#(R^ZwYx$z$5X_k} z(d_Zl#=UCuyJzFq^M~Jraq?x|v~rPRN9_s6MPE;Y&4XIQ2SaB?Z_jC;ZTuv_DE3#5 zK}*ffvwL%Bt1C6T;+&~(nh&Al2^~^>O@-kUyjGPLhsv^|SQ5NeCz!2)#;Q2qT%q3@ ze~g@~;}mdQk}o;9v?vrw1}|1D1MUgko+}+1@mU5I_8UF*{-2(MN#9QQHMT#<;@I(f zfW?MN)ir-sSk&1N4)5D6-GpKg1Y-P1ACJxe=~8-W;&OQ%!R^!PySUbVXKx~m2uH>{ zXl=fcl5?1k``){k!s>;sVS#d7p*JE=AG)Qb4LM;&Q@&w!iH<=_Da2Z*fNf;fx+3ZC zO~;hf+3GlqSG~yJ%@W%`dAG!GpE0ja-x9yu3rDtxTW9y#ycNr3jh;w+F#28QoSQ8b z+@?wzuV%MdEIKT#wut|l^zsYgzQ)t2LmG~lNI(9{7d~sTQm2o9J%CquZp%!R!gqS=TeM2BVY<@{e(TnYd}_khiWGw7G8hujkL1X0{dRU9Rjb z(7HnLrr?TtkbjHPZaNn-2rWc61RM92FX~e4MLxMl|`dQtu*Qnn7 zf0~8gx(&*7UQXk=1Ga_-H*L-oIlk}}9%v8^P4eR|Ys?Kxp{c?u7+xZpicf^)%T+Eb zasYN|PWm+Iv59d5?{4yhDt7mN)X6(ZZQi#+fY;T3cUUVE$I{wx?ywL7ruezL@Rfdo~%*d=}nW zx~Z=Dl_nd{#P2t;u^<;?>qIYGkdtkg1xM&=i}NJcflJ|(Qd3?MYAb|ctsT3DS>d!s z@@{Q;krjTE;f*ERf>SHvtMl}XNfXA0PQ@;YF?OPk6%4RIPvLP~myr1;@6%2GlKyD4 zj%P?eWHKb!FUhmFn-r!B ztHeMeo(i#1rc0;1ZS4}9--^HFiG9N9knpSR?xrf6zX?q(65Yf{0USb4iNjzxohzTh zZ22l_4rwf+t@2&K24nV7{RX=Wx?SW`Xr=MTGnUfhsncpYq*V|ZmB zUKsx+a#@3GXsA}!snBN*Im*vF=utB;&xIDuL(vie?9TXRG3G%pf2WKyKzyz*U~T0 zcC@7x4T9LRX-@0I>Kn$>=o>Ra*49;pFMs9p;b%YlNtir&oY{D$$ksD^isCb9t{L_p z@>wih&}K62SV@>S0lZ7meGO2r2k zioQaJ-Cr>66O64CJ1lk{unDbgtS(dRveHm1+(Lhmdy#?Rwdc;95#tl0XVE)3J@qaE zCZVa`{vNj(`kJ=2`t>8%M!z1ylV1@VmGfzQruW%)e?aOG=R85FB39G1p1bmW+}_Fu zi|F7vk6$vh)%3O88GVrWe$AU(vY^FcGeTPjlz)Cf?Od~|4wA!q{ygcJRKyn#2*b#< zN{WSFAMoA6jff&0Qro1@l;q_Uia%#TS107e5Z`mh|bq ze5=S)(LX8PZnoCG@m}J^?yI**j>f9c+dAK34l&=0`QH@cJJ{TD`RBq1!|zhSt{40P)1@d^euiK-InH%#bDV8{ z&p!Mz@@jomdBko_wPAU>_}}{48uKUgdD8S1r)RV`@BdLR-u~3X`+%=Us~hKr3y4jM z#-a?*px0sy_Uodbv%b5@$D)NdFNBSQouO6!;=K(88qaejyXJ*n;k3UoOY}2a_!Mmw zUI*({B+o7qAG~;evFLDd=u+&}f;m&7ektis>AF6t{^{$U$L&Y(st?Fq^p5({aA9b( z#RVj;uHjVrVAjNg1+UsIISvG8wS>pGN z<6#{89jiX}r!mXbTzmS|vGD6({XBg8n_msDC=M@t?Nr%kiB|?@iKQ~>jhAgcwZ}0d zE)wwwJst~lPVuXE%sN)nSah6%RWIO@ZLsM$N2cXk$1~@kyV-MQD<;IWuy*w-t9O*u zhI^3HQI0?hKI$cn*QcoqHBJ|C3?|FQ@2PWor?g%+z9HWkU6#u2%VAaD{LrD;Zpfm2 zqM2Z|PkN<3=xDR}Vqtbr>%Qt)rfcf0o~L~DMWLrwI;Pedi{nfT>@;0{n!5izU6biK z;#)3jZup{(`fz5S{NII7a<3ULEdJJUYw=q&XBE6|?o&Q0VHcck)-htbpl@2;Q5B~B z;s1py#b8ii9&2Cl$9S8J%A+=68n@6` zD!jrwQ_`4a-WoL4=__~~jjn=6KWFq)*mWNWu17`%pVKByG^{RLJU}bPqWYpc^Y;X= zEc~ZWd%w1WAK||Yt}=D_3-QXkpeNMtDZKG*WEo_2mH5r?m>+*{Q>9^*SjXKp*+y4; zYJ^MqKY&%_RCr(3i)ypOf~vWaSA}Wmfjb(CWiOu^d0=!P=&WE4K5+}*N3AMFZR}GI z6kkp8veypC->}0l3Kk8kqN6caM$Ey+@vS-rUWpF@Z8dD`_y)z#nfTiuE4Ik&&?A4M zZEKdQeZ7rie|?&!2Di6v-OA`WupvOa9o3s9j)AtB z`R8NNXy-B)eMlP_`O`+0Ct>yR6{6pu)4r`S>JDTJGgVhbngS}J!#BGXIF!_a_$eva# zySDT|Ep__f@Gp@UcHQISdqF(obP0@N5A-~>>=S>4`8)sm^)Fjaw>b$;p|!+qfW{){ zrVDsYW7cI^$E@?h;1nNz)*OSbnqR+YDt=1N|MqlshCAfwgYQ$Ftk|};63p@@Z1XPZ zW5e&p6(7y=Ebt0_jr@YfVSV5G$f^(2CYmEn{;;Ofd7+~sTeuWft3*fTN7z+0NAhZp z(N*|gXzGHB*lcvvAegg(gV~;!#Zl?yFQv``v{-vV=7h9 zwqy;9*CZeRwSD4$g~OQNly$@`*kv2cg4fN;?Z-C7t`|={@AY4W;;DaL`CoKM_!E}O=2KFTZ)J*nl(5qb?cZnBavyf%3zPbB!tv-> z9f?=_@kjp8zrU|zg=kr8U5ztfk#`ua=wKqJ@OyOn#GAOSe3d6;uW7Ux&D}LQp;z>> zr*e+yrubmt(+hks1>P6FxVuugm0pRQNwvkY=k#^x6D#ht_+Pkg_-wP;sGUEVi`qG% z2jKPg&1>e@v{yNxRx95y^m2>h7aIK(9xZpS=&A9@ItM>YLH|VlFla3Kh9>;>hZc7a z{%28Bd1$RH3`h2ElYkTXS=#z(THNJ4#{_-eb3%g;8)MW@`g*&<*T42C=z@drjX z1x_u_iuhmFhEZV_+`<$4dAHBN6Q>J!rGQs_pulSD{KoK3Dqbgba%_4Zigok7hu7Zk zA3pj~?Kw_;9qaK_c-0qlokH|2)VGx{@Q~&jw=3p&OT}EX)hwvZ3f-ce3llnuE{SdU zU~t=8Ck%_$c2(=T8u?7LDo;qxOwAKot@~lGk9sAr>h@_LOFpVr`{FTkB;D*F4kycEwpw z+Mf5N?f;U+`nf)o$7VM=Yj#>}1^2_=eY-4&;&;FE&45q6`9;XDiMcS&_kvf7(^$tc zx+gGeGAec&`TiSLMN`X)3d0oXlx9wUE5=fC-ZvTNyl=C9-j?Aw5rT$jrSkykcXHW< zW9aswbMVpF$jzn>?<<;0T*H;Jx0Cn4@_GoT_(1ej&5F1LpVhNX_uH>+FpItk-BV|^ z_~quZ&?B8xMd94=_Nl`OR((vSpT;F!H$O(*KN(BJYkc1a;nKO&<{Q6hX=hm1S8Et_ zyn@FJUWHrsy%?5zs|>Hzb6*WJU;3GinS6^beT$`?b)mX&j$%Py6yTJ@57@`Q{6^HM5MK4oLrtjiy(;F>Crqhpz8yDOap4<+N<6 z2{*6HR&V2ag4I!==xy%J8vC#B{XMU}@97-{gtI4(hEDnU6Zf0EVBj&0SLcT}i6^#_ zU=|scf)8T$xZi~Qi7%MHC*Q3{vI{avS8ZX~vSP6wr0*=+#Fzh|3;ieB4Wd2@3{lDz zSLF+z`>f@H!iNF+3MSDRK|@(H->p)9{H{x4ozXXmt`eINy1HTA+Q|1M^c3FQ`^U(B z^FiO|!~VU|S7gBv^vU1P+cU1g4;ZD0H@g2$IB{fG=v55bI>l#$Ms`-r30>v0!a$uc znBWzxLT9@~XWPqXn$8LRZ%N{NL__M#y|K1q9o&1Q79k!TFYZtW`UN?$nZtkr#+_Jr1GA(7Jut_nR%QXpJ@tv6Q z=bwg(nXi~05ZR=oVwUL&55FvBsaUrlLHYJEPnqnlohmRrhqc6nX@1NA{Z!`ZgcQ z@4;$PKj&V(HA$CTCUk<#YMQFIJwLPxqts%^}@t{OJjKVOktJ7EY#4K zPbyx|ojhjo7aXtXkiaWgrL60zv9h5@ysrVB@pwjtEN~nE0(F5)%Q*Q@fLsjwSODdw-oolzZ+QMnCYYL##{i$j~)sC^&kHp zzVpp**gP5d+bqp%1G}yR2A^OS{4zfs*>(BgV#7Qg2E4ky>*;Ixd|Vm%TR5ErpAP{f zp`#BXMxlMgY+2UZBAhBNo#fP3>2=$L&-SueMpyf^4_)mQEnQG4S}Hvg`lfarZx{V- zs?fIhX7m{qitD^teSx?%&{TB5jJY;u=t#zA{}HS{3S#dQ&qu3&kXougW_tXCaP`7D z^Yve|u-WLVVR1o)VG@k4?T%%AcU52?ysqu3$l#TjSkTwH+&4qNY~bDcc81x~8D>*k z)!h^t%Jaf4rXE;%sRa@x}bx`yXw1&$HzX(oVG81_MeqQ?T_Y@1mBDO z28_ZNGp`1pedJc=*Id1*_!nl6k9ehq-Y3Z8>-)CxT>l&H`^Xi>OPHT`f>qHxat;!M zhkPs8QX30rie5^mR6g76sGXIPQxka<-BM@y^w3o?!{k%OX?%s@m6?-{pHj7Ax1iI! zaY;FZjklI8gCC5wcWlgicafJO4Nb3gk&dQIy#AB(|6#n|dFNWF*PKG|x@JMO;dEn9 zc~~z@g3&Zy*>}8d=#ni*GA(hjrvK@`LVezN^WW~Noh@E?X6TVjgAHz=xgvDdmxpz$ zmL@uj;nCvBZJz!{zAeOK)6p(tGI(NPP44XX#IIT(NU#fk`{mDnF8oIE>D})a-IB|! zjWv~_y1dNhtYTkXC4Tz$yNvzPYbCVX9-x0|y6(rG$2B$*)AtIa!#X6jsrcUq%C$m{ zlL5tcsxO|SIO4OEhkd5eQt;Vbrtd0TLPsfJ6xkJD2nsZ}T{a!^HY{$b)IEgtiu`c= z&~7yqV_x)~@$t`iawhiZ@6K)VugAW@$l)dGJowHZe5}_^p2Ou~ypn^nx+L51x>~dp zOoG*Q!s8m1wT4+8<2c(ohrJa(82%W%PJQv;Lqq-qqpPkLwC^bSrdPgY%atd%syHiL zy`*?MHda1Ov+*4@(k3)7{*LdaZ>h1E1)PFg=UwmKPGb4UkJt0MY}v3reDmvH3;*{0 z@7X*WY&FnXbWO~Q1FsF56GvRc8B?biu6JzPnmqT>alsz^-2S8eD4+p5Cpx5C;fnHc zZ&3_@j)t;Ooj)VgD@JjX{7PHPL{CLiJB8CO@k_nsGeS@4Tej{NP31VWwpBQ7E}bR1 zDtSnLh|P+PT30wvvA|?cMGl63C*Kj;$#VM^zN*^Lf%o{HN!2*-SYBKG{|mL5x<>(9DPIA=dh+;EdEX7XYudk>v;5W|G}{PR~U|U&yy!lhF|{T z7vURU`>Ms$2eU5AqA!LoMy745t2R9{xg3cXab)O_9;4@qUK{OB9%}8E)RlVsc;WST zx}UBi$3{DzzUJ9(dwZqUV8-U8D(Cpki{a4jO^S!qWVEz8Z(69!SG@ni>7lh`hVrk^ zwEVEGMbj)7JJ{?{j_3B`DQ0iS=8o={IL6Gs>C!yaI^~-}M%|zoqqnb*L>+@9*XDSA8p^8zn;rfomE$2Aq*z|3VfA~uZrdp=ZbtN60QfE8$6H4 zFfwsQAJ_Z5fA`__)4i`_1zCytKEB{v2xfmK9Wt@kh`EG*7|cRv=hs$Q0k^~^<{I?N z{XN~`%B73LV@pcD_3>u7&hcq!Jp1!My!GgK-Mo59C{oVMvfOE*QZ%(zG5*QTQLi}v zhm|`eG${8D`FEPcCwI&L5Z<{)x+L;IlXp3OQ~H!_ZvSY~q*~-8AfyeEPj_{cHICx4&h+P?cqhX((A1p9+uB)Hc7~ zXl_$|U1(IC7h<(B_jS#xRYt3+hu`1VPwJ0cs*HI? zkwu}Y!m8Rg!#}aD<)a<9tP0QXKlK|H{LXG+`%)VdyQ4{VQs(oo=&Thc%PsFbIEA*7 z$C|>n@x#KZLKMd&D*YV$6@tNFc1-?TvfXZSnev$nWJ^tq>5@ht1Y8saPx+ zh&=1I9%yY#Lv6&Z_~nM$N{dliCf(G|?V8Jw=%Lg86;y4s{^?ldT}CVX?%6J*;8psi z%_|p57xb3-FrX(QPaWfJUG^Jce%>VIZGKbnLB?C&$-2TBmS?h2y5gFGnW1>z)UdF- zC7eD!WZ%x{smA+E+#lxaC*RE9mr>UJ(RAUneZ^10-IDeMuV4h)#yrCvn^%QO zIZ6FDF?D(fuj<%*_rC3&Cu9A$cbE$>EYm;w9;td5tbxm#qu3p-QN^e z4YY;%HHG2a>BD+Hb%^zHy!x6qp{_QzB-Qyr8oqoH=#Ua2w+(Ka5+)Dr;}| z$E~fR&*WbUCq~!UzZ=#Jw3@Dn@ziv_(({5@^h`}9Z-t6^<3q{3i6)n>Q7-Fivh^t0 zjT#RfKw>|YpPGFW^&^Y@t}`AVk##H@H|b|8@%_C%&*bGkIX6+C@rC(qk6C;`%SSIdi{5FeXel@avtX2M=q>9O=@bhl{a!YJx1#(iKXCAhO$WRZ zo06D!3zgq?859F&U$Qpw$tB=?abmIHFIEW<7r#K=?(1}V@8YaD0kWUGe<(+%n4zY z^tj7f%Z0;I!=~l>6IQ{iIa>@g|UtXdgv-nee}#cu1iTd)hy?}fT} zoN(&v--YcDxDvxks zj31NO?ywItme9A;H0pzXH@jbQ6T^?5V|`oCa=j7pn!fOvPg@LC@-#bM;fs-HDV;6z zLsx54Xl<;En3Y`H)z%tX8XGKzOsV3tZQi&+{XX(D_r!zy;{DioNq9z`c$Qe@Igi6D zHnkS{LNK?+Y;U5i_&p%c5<|bTV0My2j#@=5rpFh@D(f-4S`+<^|B2tU9uglzpN;sX zU)>L9l}nDi#;bap!V>YV3c=W`#@e${MVCffo0Pj+V`QHPq!yG(H%86SNh& ziq45VpX6Zxuh7}GJ#}GyuVNf8Y7bkbx16thmN&1-HY>i1QJgrLvDfHOB7;8b#xcz5 z-f>J&8zeg4!9~5{>tFd|_~}o6Wb@wZMPEJt26zRh;1&LuHTZ?rb}JVh#p!K*byYaD zZ?CEyX*l%pI<4z2Xc$DxI6*};=FFW zFZuv4^qX|it`^>Av|=a6{ylXIFecjAIHG@8-;s>Mm+4l%)wXKo-qgJ0!Pc@cFu&0F zS;s3F1+T^@C;92gXTL-_#IW5}%zoW`VZbQkIP{f!P?mO-DSl!>SSk6KvaXw$ZOYxV zsz2;pzf^o@Nx1a(X{!gA&CHoi=+slc=o2mkE6!tZnPb*yobc*8qa%m*Wn|h}(#R_SbQu>!3{4~6}fxNTtg%n8N4PTnJp&-C^as{I$9N@2+P zVcEPF$?vp9{tg}bE{<1xmay$~$_JvVNb{AgA4I&~73hZX>i2Z4vi4)Xj@29us~j6! zp1uWWFXF|*0onp)Ihg6c=z8ub2h5pJC?A+5idnZ%HkidNrOHXKweSc=!7H)tz^u!q zj%l!2E1LkmG0;{DxaB&2zobq0*Y+CCt6iq;^`fzx7Pf?S!tADHJ<1okRz88n(zgz& zV(KaCYY{)%d`2{OBwlF?j)5CwTJyP*Em23qwJVpygmJH$O#8;Ge>Pncx~PWg3fsna z5&8;tp}E~{%|>fkgWulHw$RhAd1<1__)0D8>kAj(#x9b)58oicupNA6{~SN5wdiJV zi+BV15q66A0k8OuLSNgZAM94_--y@9yASJnV>h8ap1#Bvp?jsvGkd*Hz>R1(i^cAE zrJp2?Y5i5lp=l4oyJ7vR0n_OdhpA8T)6hQ|-oP91ylQ^A;Z-uMz8SH) znOjM`Ef%^4n2l{j+mCF2KQ`K$JH&e=UCizmkBy;e4P&osZb%dR3`oq>W3j@AxgNjAFYWZNSp#DGWg*JeuQZlldZL2M$qc+_Rxj-j3m0@~zT^#~5s!}XPk!f7&n7rcpG%s-+JJG3#ju>rrHwfv74Pc! zG0O%2&98hZ%v26(aO!hb$)o5H*T}J0|UK%rcW*_R7@%9r1tNXP72=m z11=ei`9N$m(FSDs&5%Z_kq$c z{E|=1a@%X$@T-0DcVd6-X55x;gX8F$Dafrh4@kNuc;O9wDrDKW>{J3&XC5rt1DY!}>|=HJQ7Q zZG8AGz<2O*QlG`X$fMu+URXKUt5~tQrmG-^+7i*(g~BXzZon!rW%22UjyhfkbetHL zmK#O74X3-y6WJA?$7s)KkbZc+@&vRfKV@6kwzNxmw|c^E;q}0#WnsVau?$HEb?)#U z%k#5o-AdJz{-@q3ULa!|QUB!~cprb4$lu3(kEN(fp16#LSB^PmjW-*XmkbpTesS7-r+W*c)3usupm5#``#9dGxJ~-`HYWzIRjpv+{M<*gM!! zZ8_?hZ-Z|kx?lKTmuDTb&Kr~S$Z{Fg3d_Pcc*Tyhx~saDXxD4t89bU!Ttr7HqO}aTWTypsPv0OYo|}&xZ`|7daO0JGOjOEs*}c@f&+h7@J*Y5r(C!AZ~1D zo%mq+QS^znk}C&Vi=PCvbfK^dektIV(kGmP**?V&?^i4**EOvXFT8F6`R$aW-Dzt= zU-zzE6m|%!`!*~Idp9mO`g&mN+AyS8V8re^dGw&!Om^?k{GLodj`dE{N2jlhN%Y+~ z4*C22_3QWy-4Fg)&p&(mRQUaW|0;a>3;%2~E%GaKd9clP3bTFEGdWhlrpvbQ!{F8N z3!mKA(-FGbo6X;%s-isP=jMc!%a>*1z-2H9-834QAQSwmJo-K3y92z7%FEqSnQOXX zVt-g}j1*qU|2WX!p@xZgO<w9{Pau3Sb7gxOe>15`PUdaEVp3bTuvie=AH ztP1mOO7p_2fHrIJB}T%?u(Cq42AP=pE(|y zE6JBaOmFZixi!HnzG%c@S~j>qSMuE>{k82kBpuPyduxWq8y+aw-;0iv$~epF!*1<52I@umR&nc zcHLpJYk#Dz>j#yWc2zj2TrKFGps~l4^X}-r?cwy$e&t9y8m=h+4|v$PhFE;6SM^9gyioqbi(3M6tI<}`*FCbo?pe1u>=j~;mT-9I#&Gt? zo^VPu7J2rWf=e*#JTZEx#o8Z`?P^g^yL=htd(qxxI0x_D z9W9p2>od}Cec|(;33;Nqt5z=6>xgz{#??qiITm^Uh+~&)P9NPLn#60jgBO?6YCT74daz0&kC~(;dKPY}dDDPCB%fZ%;AYYTxiG+6z{RzsA1Bb5hL2b^XfUp5PVQ3RZWm>I?ffE;YQO zYXY-Jc5e(rJJ*M!@_9P8XG=JHXiqqMcyG9HY$#kleO$Q>&xPC9E{D~M`Q57==vOZg z(=FnOwbNL(Kgg0m()x0m@1}oaqxG@vy5`>4o53-Q-(niG;1-z{teT7~ zto8}3*oDwDLzj_v-L!aWQ`5h*#Rm@k%U`vE}2@0*=>_>ql!R9!v9Pj6c>mOgtav z)mXk)*=LRCCAYosirp2t$a&)~;S{W5|0523Z+*VvSt!rPq9&uS*m8ER?3HeKk@3S| z7Jm4MaC%I5J+67wC--g*XAbNL=ML@;=Z5x%i^mRzE2ocyD`!rGtC}Zp_vZC*Lpde~ z`g-N_w>(_EdevSb@(b~8T$lO~{S|M^;_|6)r}yoc8ptrqPHM5SO?-)AMi)4C3i7kV zKT4(rXU($L^vG7joI7+%=$63i;=Z0pTeXco8QU$s7wDH+|Nb|>44?Wx|I=c_fm7pe z;T7~e=IJe7w8-L0tzNmp=zJVAcpvDb%3b-INbWs5wA>-94vX7p^!h5B8Eju{&?;~%4kvR4Jkrj($ZKPM^bY(1Fv9!9Ib3uhI7^=+_v zWPiAPVklfYeKg!ScSf`zP0jSotNIWtD_^VUcLH}n1=pdj$QWC_~p3s zy!6@3HVqTIvfm=JHf+P2ri(5{PxM9Uj(_yS?}ny2QsTcThJC4tRz!w?2?KI`t<9YXPzrz~|dgK=oeU+||@eZEX z_#WjEMAwABgyB`Tw$`$&a9|fc+j<8ECB~nm#Fu`|i)UJ3Y~#af0mrAWANO2*i0(?K zGkl%Cq2{X|Ik+d3=gPlrewA`?NQYdexjE7^k@M5?9|^A=majL*Xe-CSs^wcLpJV=x zYZb2?+w1Pt{ox>3-MTUyQk<`&8uL%=-E94BBwjBaKNPN?aAf)9Mpe1^d7hIQ)V`x%vBJceR}8$|Wd$VT*EG z9ofG_H)YJx7uMf!TO|*B@~e-X{g7I~@#pKuJ=V{ITjD=N9S+~}et7rlh0t78EW3bY zTID0_k}pkXm1I`ovQsp*O|mQUYr25jSm2X$!iugsv*+wuv&eK#N92omQh6hw4W|!m zi@flmT}EFo9X$}Sdg@5He)eQ|7y5efyh7q$Qy;w|I(seL_54-p)5nh<4Xv%MVeQ(r z55*AocQyK`9oB|7^?w%M_w#n}DgS}h=+6=7=8b#(weU}${=Z?;o8yc(#zqTXDaf^~ zr%W7Yvg)4{o8}$8gUhDWiT1vAM|4w7j(^iV<%x>8$F6zKh>Cf}CXNQ-5|C=!3 zl@~+K^ogNh)?~#-R9r31w?Z}nv&bsUd0ePt4MnrV3CXx4@yczJhs4dX{~v=E;Cqi& z9<7@5#J+a_A?qu$(+)~5tICt?s=RdF%mx6@KYEU={hPRk_XR zPwNNTO@=+VX=OOPRlKk;dq(zGc;WNXHJv}a&t%uDVD-!~ABHCev-fYk z6K=nAL!#R)lk@yd$fwiN(h`<0Uv9W{9FAObJ;(gG|9-T!v5$fZ7&6G{BJkyMv-8^E zx2n3*F#F42{M_cTGp`+b+txHc{O;Gk3ZMGl|I1>NM>$mY6h^6okCkpG=Xjd_a}6=% z;&+6ny`$LZ8^iQTiC&9DE|$3_kJw81d6Gm%*v11={3yg-<(Z5f+kDw##@cd(3a`xXLau@qgV`3vkZ+bO)!$TZv7LsttTvwb^j_(O59|sTgw+e8t?hASFfBt-EZ*P}9b8$FzN--Lf zWi%XsJ@31IU3%?!WymwXUY+#oX(QhT3t)D`y0yj||M0utQJk5IP*+tMe)PTXhA(~Y zvte*x5x=%#brBBD#-<~#=N`VF4r*aP9*e&NU&PRZR+1li{febw*5o(Bt1tXqnEiE_ zKJJCks9aSG)y%7c%w1w&d*$x_%2Uc@K443f7D)bX#9YABDuh7<3`QKn8oL@56_%rea zGY6NLY{z!2565>!TMl|*bWPW#7ruG^wDH2w*E`Y;-;!@JScS$ukd4LO#l{h87#Hy8 z%k}Hm!wStGZ*Fc5LqkIu-4c0sd@OQ|54Vf|I<6hB%$MNB)@0bVPQ)Gsg~Do~!xg@^2!4v*Pf9 zN&MfSsqGcn5v#&0+h7`9WlMRs<@c^HoTZpU@}bh4gPm)ZnD76o{o;#7XTj_{qOG^V zs&M-5CCRVXFH0?Y-S}bj#PGu+HulQ&Z^vGwM|L>#Z}aBOp{=dWbjmkxqFWutTEw`w zP39-Ik;bUcmoeU0&-1Y%P5-?8@MG*ytfyARF@9IPfVHjK*MEa-VjfGM|x1O3LSyAgH!At)M+F(y`R(k z)Ybd9e~#nFkB2_RS|Z-ku_H&K{Y3rup@n@v#<-P?U0jo%J7d4W#=|(L1#FGBjI85m z*Sz1cC*OnT3w8K|i;A9=Kj*T+{!m+0s<}nVOQtz}mK!CFajP@G^YVT*7(4$wwt&+I z`j2B5pFM1&OBeQpGGPxt3*reiSL9g!GjQ7_dfS5DNir<_F*XJ;3tpQ`rIS*rQ%>L- z#mVicEe>lJb%i0#1;7>yX3-N9d;GoIqK)E#;n{iq$bQUz`k2dyURPg}vwh?G^`RZT zvh27QB=Z_Z`F)~4X5a0hqkb!$cY4Zsqg|;nWMo}Ny~i^_rTL4DKvKNw<+zjXeT{A620Np8$d2+d@!7ji55Ca~I2Jj-NQ z_+scVwg?I`E&K4v)j2alW2y27bZB0lXf8faS56(1T}S+}#s(wFr6pr1lFg^p^Y;x1jjd^y9n@_v+&*z;rDk8_!J@CPJo&iS)OoO-6aX^f^Z z$@Y`Z4PX0At21`9kGKWWeGVGyxTT-Qa~ikd4W&bdC%bt5xaQY1gu<-1LPNRY6)U$u zlknLf+|Cy!Gll&T1;=-R@$p*nB2a)m2DVyWiOcQl1Pn^uRj@)f{G@s?tc6KgEo zy(Mv4vTTCiG+wDEbT7>pr?KVl;mr%bykyCe(An7;Hf`DzT-NpTBXR1#XHDU}7yr$N zv5xQjFgBxq=`cM7n_TDD4r7&T#+JXg766ytFVp>$_jF8T`h?Bnyce!sJZo`hO64O} zC!Uviwr%2f>qR@s;aw+Nexv9rHp2R1$+Fr{7x-n)RVycEg>YLb{K9W9Y;O$P)+`OD z5AO{(E}b#C7GGM%3+9lTj@!nMVIB}VlOA^-!dLPRPK)`~u@fgkZ-0O2?CuV0gZ7PGd4O8y;ofvw<+C_I<>unDrgJuVYP-vCdaUevhY6m zVl0zw2p#hZ&mKenYCXyCsXj-z)!MDHlYg5_bwN1 zOS5Jx_sGmpq1E2l)De=i7I}k)ff`-`i{0-MxEvxR%8Cr+u9Mepp|b?=;%?`LLcp_MGRX1)x2# zxJCo4rc35cGFSk+v0PD%zcnicLrodjjdT*+HrJF|E{Qr}8QM#!E6z6jLW3#bHB<7n zpA_(0Dc{Ko*_fDPRGeVAK=D@`$5q7zp{`tcsfp{N7%fW|^;zzLO>0+$UE4Q@gL`&{ zgZp-c<3k6+X~n!af9klcPaGaH-}|HTTN>KGFC0C5IPBTAOFoAKpJ zaKq`Pum6UR8oTv#+X9Z&gx56OK8#g-?qUoa!LKk|Q=s!I&|WZWMf4XMTsEQ< zX3Yr&*>gjI=DTIjo)L0pO%J(qXW2e;;5c8Dn-$6nazjaej%0Alg28-GZT8+*)i*8-#A)sMxOalAgf2Egf;WnU$u7rHNg^+MRU zYpdnJs1{}mvSx+y!W_xE#a8M{3#E5fDatX7R_4wzd}e5@uSwXh#L+^{htMFW!Gf%c|!Vk?@qrwb0i};SnrW>w12}HW)=u<=gD1x509y z=&E5c6KNcJ}GQ_$)6{hTT~n> zOG@=3@bz)IEx$+JgZHD1En_Y4acBYWj}Q0BVa#GHNy}B~>)B4@^v*rm{iWyhdqo*g zcaXnB+SU^3d3^hbXUWgKCE|C%Y^CtqSY2lF za)V@M~t^hGF&7w?-9ZxOSGS1@ZmcNoVR%;^yG)W9wLGQWlXf?MoC zzMr-e`5O=O(cD+Rlies{C3%i$F)^QrNpbo7xo~XgP}sR;b6B}-vBmaoZ)r4a5+4an z=gS_HpEWP!sT5>q**b5Yj%mA4d8=4MPxDk*=gt-O^P>!V{?zHrE5Q#_H^v)p6R-2w zdaMOLsurLx-qpY8IUI32+&>e{m<*cMAN%pRw%85Y)gu%*2bKJ}P6&-$x7lkFjN}1;$!ntOdqeV5|kk zT41aN##&&k1;$!ntOdqeV5|kkT41aN##&&k1;$!ntOdqeV5|kkT41aN##&&k1;$!n KtOcG?3;h2e0$n5k literal 0 HcmV?d00001 diff --git a/mRemoteNG/Resources/Language/Language.Designer.cs b/mRemoteNG/Resources/Language/Language.Designer.cs index e96f1fe6..40091eb1 100644 --- a/mRemoteNG/Resources/Language/Language.Designer.cs +++ b/mRemoteNG/Resources/Language/Language.Designer.cs @@ -8,7 +8,11 @@ // //------------------------------------------------------------------------------ -namespace mRemoteNG.Resources.Language { +namespace mRemoteNG.Resources.Language +{ + using System; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -85,7 +89,7 @@ namespace mRemoteNG.Resources.Language { } /// - /// Looks up a localized string similar to &Warn me when closing connections. + /// Looks up a localized string similar to Warn me when closing connections. /// internal static string _CloseWarnAll { get { @@ -1287,6 +1291,51 @@ namespace mRemoteNG.Resources.Language { } } + /// + /// Looks up a localized string similar to Daily. + /// + internal static string ConnectionsBackupFrequencyDaily { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyDaily", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Never backup connections. + /// + internal static string ConnectionsBackupFrequencyNever { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyNever", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to On Edit. + /// + internal static string ConnectionsBackupFrequencyOnEdit { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyOnEdit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to On Exit. + /// + internal static string ConnectionsBackupFrequencyOnExit { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyOnExit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly. + /// + internal static string ConnectionsBackupFrequencyWeekly { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyWeekly", resourceCulture); + } + } + /// /// Looks up a localized string similar to Couldn't set default port!. /// @@ -4219,7 +4268,7 @@ namespace mRemoteNG.Resources.Language { } /// - /// Looks up a localized string similar to Start Program. + /// Looks up a localized string similar to Start Program/alternate shell. /// internal static string PropertyDescriptionStartProgram { get { @@ -5364,15 +5413,6 @@ namespace mRemoteNG.Resources.Language { } } - /// - /// Looks up a localized string similar to Save connections on exit. - /// - internal static string SaveConsOnExit { - get { - return ResourceManager.GetString("SaveConsOnExit", resourceCulture); - } - } - /// /// Looks up a localized string similar to Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png. /// @@ -5625,15 +5665,6 @@ namespace mRemoteNG.Resources.Language { } } - /// - /// Looks up a localized string similar to Start Program. - /// - internal static string StartProgram { - get { - return ResourceManager.GetString("StartProgram", resourceCulture); - } - } - /// /// Looks up a localized string similar to Socks 5. /// @@ -5849,18 +5880,16 @@ namespace mRemoteNG.Resources.Language { return ResourceManager.GetString("StartMinimized", resourceCulture); } } - + /// - /// Looks up a localized string similar to Start minimized. + /// Looks up a localized string similar to Start Program. /// - internal static string StartFullScreen - { - get - { - return ResourceManager.GetString("StartFullScreen", resourceCulture); + internal static string StartProgram { + get { + return ResourceManager.GetString("StartProgram", resourceCulture); } } - + /// /// Looks up a localized string similar to Startup/Exit. /// @@ -5879,6 +5908,51 @@ namespace mRemoteNG.Resources.Language { } } + /// + /// Looks up a localized string similar to Backup. + /// + internal static string strBackup { + get { + return ResourceManager.GetString("strBackup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Browse.... + /// + internal static string strBrowse { + get { + return ResourceManager.GetString("strBrowse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connection Backup Frequency. + /// + internal static string strConnectionBackupFrequency { + get { + return ResourceManager.GetString("strConnectionBackupFrequency", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Maximum number of backups. + /// + internal static string strConnectionsBackupMaxCount { + get { + return ResourceManager.GetString("strConnectionsBackupMaxCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Location of connection file backup. + /// + internal static string strConnectionsBackupPath { + get { + return ResourceManager.GetString("strConnectionsBackupPath", resourceCulture); + } + } + /// /// Looks up a localized string similar to Support Forum. /// diff --git a/mRemoteNG/Resources/Language/Language.resx b/mRemoteNG/Resources/Language/Language.resx index 62289db3..429b03c5 100644 --- a/mRemoteNG/Resources/Language/Language.resx +++ b/mRemoteNG/Resources/Language/Language.resx @@ -1313,7 +1313,7 @@ If you run into such an error, please create a new connection file! Creating quick connect failed - &Warn me when closing connections + Warn me when closing connections Warn me only when e&xiting mRemoteNG @@ -1483,8 +1483,35 @@ If you run into such an error, please create a new connection file! Do you want to save the current connections file before loading another? - - Save connections on exit + + Daily + + + Connection Backup Frequency + + + Weekly + + + Maximum number of backups + + + Location of connection file backup + + + On Edit + + + On Exit + + + Never backup connections + + + Browse... + + + Backup Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png diff --git a/mRemoteNG/Resources/test.ico b/mRemoteNG/Resources/test.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d06b9f2857b39f0b5d3395e3e7999ba6bcc3a38 GIT binary patch literal 45451 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 literal 0 HcmV?d00001 diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs new file mode 100644 index 00000000..2e28e94d --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs @@ -0,0 +1,164 @@ + + +namespace mRemoteNG.UI.Forms.OptionsPages +{ + + public sealed partial class BackupPage : OptionsPage + { + + //UserControl overrides dispose to clean up the component list. + [System.Diagnostics.DebuggerNonUserCode()]protected override void Dispose(bool disposing) + { + try + { + if (disposing && components != null) + { + components.Dispose(); + } + } + finally + { + base.Dispose(disposing); + } + } + + //Required by the Windows Form Designer + private System.ComponentModel.Container components = null; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough()]private void InitializeComponent() + { + this.tableLayoutPanelBackupFile = new System.Windows.Forms.TableLayoutPanel(); + this.textBoxConnectionBackupPath = new System.Windows.Forms.TextBox(); + this.lblConnectionsBackupPath = new System.Windows.Forms.Label(); + this.lblConnectionsBackupFrequency = new System.Windows.Forms.Label(); + this.lblConnectionsBackupMaxCount = new System.Windows.Forms.Label(); + this.cmbConnectionBackupFrequency = new System.Windows.Forms.ComboBox(); + this.buttonBrowsePath = new System.Windows.Forms.Button(); + this.numMaxBackups = new System.Windows.Forms.NumericUpDown(); + this.tableLayoutPanelBackupFile.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMaxBackups)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanelBackupFile + // + this.tableLayoutPanelBackupFile.ColumnCount = 4; + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.Controls.Add(this.textBoxConnectionBackupPath, 1, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupPath, 0, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupFrequency, 0, 0); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupMaxCount, 0, 1); + this.tableLayoutPanelBackupFile.Controls.Add(this.cmbConnectionBackupFrequency, 1, 0); + this.tableLayoutPanelBackupFile.Controls.Add(this.buttonBrowsePath, 2, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.numMaxBackups, 1, 1); + this.tableLayoutPanelBackupFile.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelBackupFile.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelBackupFile.Name = "tableLayoutPanelBackupFile"; + this.tableLayoutPanelBackupFile.RowCount = 4; + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.Size = new System.Drawing.Size(630, 412); + this.tableLayoutPanelBackupFile.TabIndex = 15; + // + // textBoxConnectionBackupPath + // + this.textBoxConnectionBackupPath.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxConnectionBackupPath.Location = new System.Drawing.Point(195, 58); + this.textBoxConnectionBackupPath.Name = "textBoxConnectionBackupPath"; + this.textBoxConnectionBackupPath.Size = new System.Drawing.Size(250, 22); + this.textBoxConnectionBackupPath.TabIndex = 14; + // + // lblConnectionsBackupPath + // + this.lblConnectionsBackupPath.AutoSize = true; + this.lblConnectionsBackupPath.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupPath.Location = new System.Drawing.Point(3, 55); + this.lblConnectionsBackupPath.Name = "lblConnectionsBackupPath"; + this.lblConnectionsBackupPath.Size = new System.Drawing.Size(186, 29); + this.lblConnectionsBackupPath.TabIndex = 13; + this.lblConnectionsBackupPath.Text = "Location of connection file backup"; + this.lblConnectionsBackupPath.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblConnectionsBackupFrequency + // + this.lblConnectionsBackupFrequency.AutoSize = true; + this.lblConnectionsBackupFrequency.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupFrequency.Location = new System.Drawing.Point(3, 0); + this.lblConnectionsBackupFrequency.Name = "lblConnectionsBackupFrequency"; + this.lblConnectionsBackupFrequency.Size = new System.Drawing.Size(186, 27); + this.lblConnectionsBackupFrequency.TabIndex = 14; + this.lblConnectionsBackupFrequency.Text = "Connection Backup Frequency"; + this.lblConnectionsBackupFrequency.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblConnectionsBackupMaxCount + // + this.lblConnectionsBackupMaxCount.AutoSize = true; + this.lblConnectionsBackupMaxCount.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupMaxCount.Location = new System.Drawing.Point(3, 27); + this.lblConnectionsBackupMaxCount.Name = "lblConnectionsBackupMaxCount"; + this.lblConnectionsBackupMaxCount.Size = new System.Drawing.Size(186, 28); + this.lblConnectionsBackupMaxCount.TabIndex = 13; + this.lblConnectionsBackupMaxCount.Text = "Maximum number of backups"; + this.lblConnectionsBackupMaxCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cmbConnectionBackupFrequency + // + this.cmbConnectionBackupFrequency.Dock = System.Windows.Forms.DockStyle.Fill; + this.cmbConnectionBackupFrequency.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbConnectionBackupFrequency.FormattingEnabled = true; + this.cmbConnectionBackupFrequency.Location = new System.Drawing.Point(195, 3); + this.cmbConnectionBackupFrequency.Name = "cmbConnectionBackupFrequency"; + this.cmbConnectionBackupFrequency.Size = new System.Drawing.Size(250, 21); + this.cmbConnectionBackupFrequency.TabIndex = 13; + // + // buttonBrowsePath + // + this.buttonBrowsePath.Location = new System.Drawing.Point(451, 58); + this.buttonBrowsePath.Name = "buttonBrowsePath"; + this.buttonBrowsePath.Size = new System.Drawing.Size(75, 23); + this.buttonBrowsePath.TabIndex = 15; + this.buttonBrowsePath.Text = "Browse"; + this.buttonBrowsePath.UseVisualStyleBackColor = true; + this.buttonBrowsePath.Click += new System.EventHandler(this.ButtonBrowsePath_Click); + // + // numMaxBackups + // + this.numMaxBackups.Location = new System.Drawing.Point(195, 30); + this.numMaxBackups.Name = "numMaxBackups"; + this.numMaxBackups.Size = new System.Drawing.Size(60, 22); + this.numMaxBackups.TabIndex = 16; + // + // BackupPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.tableLayoutPanelBackupFile); + this.Name = "BackupPage"; + this.Size = new System.Drawing.Size(630, 412); + this.tableLayoutPanelBackupFile.ResumeLayout(false); + this.tableLayoutPanelBackupFile.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMaxBackups)).EndInit(); + this.ResumeLayout(false); + + } + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBackupFile; + private System.Windows.Forms.TextBox textBoxConnectionBackupPath; + private System.Windows.Forms.Label lblConnectionsBackupPath; + private System.Windows.Forms.Label lblConnectionsBackupFrequency; + private System.Windows.Forms.Label lblConnectionsBackupMaxCount; + private System.Windows.Forms.ComboBox cmbConnectionBackupFrequency; + private System.Windows.Forms.Button buttonBrowsePath; + private System.Windows.Forms.NumericUpDown numMaxBackups; + } +} \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs new file mode 100644 index 00000000..6e85520c --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs @@ -0,0 +1,149 @@ +using mRemoteNG.Config; +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using mRemoteNG.App; +using mRemoteNG.Config.Connections; +using mRemoteNG.Security; +using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; + +namespace mRemoteNG.UI.Forms.OptionsPages +{ + public sealed partial class BackupPage + { + private readonly FrmMain _frmMain = FrmMain.Default; + private List _connectionBackup; + + public BackupPage() + { + InitializeComponent(); + ApplyTheme(); + PageIcon = Properties.Resources.Backup_Icon; + } + + public override string PageName + { + get => Language.strBackup; + set { } + } + + public override void ApplyLanguage() + { + base.ApplyLanguage(); + + buttonBrowsePath.Text = Language.strBrowse; + + _connectionBackup = new List + { + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Never, + Language.ConnectionsBackupFrequencyNever) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.OnEdit, + Language.ConnectionsBackupFrequencyOnEdit) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.OnExit, + Language.ConnectionsBackupFrequencyOnExit) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Daily, + Language.ConnectionsBackupFrequencyDaily) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Weekly, + Language.ConnectionsBackupFrequencyWeekly) + }, + //{ new DropdownList( (int)ConnectionsBackupFrequencyEnum.Custom, Language.ConnectionsBackupFrequencyCustom)} + }; + + cmbConnectionBackupFrequency.DataSource = _connectionBackup; + cmbConnectionBackupFrequency.DisplayMember = "DisplayString"; + cmbConnectionBackupFrequency.ValueMember = "Index"; + + lblConnectionsBackupFrequency.Text = Language.strConnectionBackupFrequency; + lblConnectionsBackupMaxCount.Text = Language.strConnectionsBackupMaxCount; + lblConnectionsBackupPath.Text = Language.strConnectionsBackupPath; + } + + public override void LoadSettings() + { + numMaxBackups.Value = Convert.ToDecimal(Settings.Default.BackupFileKeepCount); + + if (Settings.Default.SaveConnectionsFrequency == (int) ConnectionsBackupFrequencyEnum.Unassigned) + { + if (Settings.Default.SaveConnectionsAfterEveryEdit) + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.OnEdit; + } + else if (Settings.Default.SaveConsOnExit) + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.OnExit; + } + else + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.Never; + } + } + + cmbConnectionBackupFrequency.SelectedValue = Settings.Default.SaveConnectionsFrequency; + textBoxConnectionBackupPath.Text = Settings.Default.CustomConsPath; + + } + + public override void SaveSettings() + { + Settings.Default.BackupFileKeepCount = (int) numMaxBackups.Value; + + if (Settings.Default.AutoSaveEveryMinutes > 0) + { + _frmMain.tmrAutoSave.Interval = Settings.Default.AutoSaveEveryMinutes * 60000; + _frmMain.tmrAutoSave.Enabled = true; + } + else + { + _frmMain.tmrAutoSave.Enabled = false; + } + + Settings.Default.SaveConnectionsFrequency = (int) cmbConnectionBackupFrequency.SelectedValue; + + if (textBoxConnectionBackupPath.Text.Trim().Length <= 0) + { + Settings.Default.LoadConsFromCustomLocation = false; + Settings.Default.CustomConsPath = String.Empty; + } + else + { + var newFileName = textBoxConnectionBackupPath.Text; + + Runtime.ConnectionsService.SaveConnections(Runtime.ConnectionsService.ConnectionTreeModel, false, + new SaveFilter(), newFileName); + + if (newFileName == Runtime.ConnectionsService.GetDefaultStartupConnectionFileName()) + { + Settings.Default.LoadConsFromCustomLocation = false; + } + else + { + Settings.Default.LoadConsFromCustomLocation = true; + Settings.Default.CustomConsPath = newFileName; + } + } + + //Obsolete. Set to false + Settings.Default.SaveConnectionsAfterEveryEdit = false; + Settings.Default.SaveConsOnExit = false; + } + + private void ButtonBrowsePath_Click(object sender, EventArgs e) + { + var saveDialog = DialogFactory.ConnectionsSaveAsDialog(); + + var dialogResult = saveDialog.ShowDialog(this); + + textBoxConnectionBackupPath.Text = dialogResult == DialogResult.OK ? saveDialog.FileName : string.Empty; + } + } +} \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx new file mode 100644 index 00000000..392a4fa0 --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs index 2df46cbe..6649cbcb 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs @@ -1,5 +1,7 @@ using mRemoteNG.Config; using System; +using System.Collections.Generic; +using mRemoteNG.Config.Connections; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; @@ -8,6 +10,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages public sealed partial class ConnectionsPage { private readonly FrmMain _frmMain = FrmMain.Default; + private List _connectionWarning; public ConnectionsPage() { @@ -25,12 +28,23 @@ namespace mRemoteNG.UI.Forms.OptionsPages public override void ApplyLanguage() { base.ApplyLanguage(); + + _connectionWarning = new List + { + { new DropdownList((int)ConfirmCloseEnum.Never, Language.RadioCloseWarnMultiple)}, + { new DropdownList((int)ConfirmCloseEnum.Exit, Language.RadioCloseWarnExit)}, + { new DropdownList((int)ConfirmCloseEnum.Multiple, Language.RadioCloseWarnMultiple)}, + { new DropdownList((int)ConfirmCloseEnum.All, Language._CloseWarnAll)} + }; + + //comboBoxConnectionWarning.DataSource = _connectionWarning; + //comboBoxConnectionWarning.DisplayMember = "DisplayString"; + //comboBoxConnectionWarning.ValueMember = "Index"; chkSingleClickOnConnectionOpensIt.Text = Language.SingleClickOnConnectionOpensIt; chkSingleClickOnOpenedConnectionSwitchesToIt.Text = Language.SingleClickOnOpenConnectionSwitchesToIt; chkConnectionTreeTrackActiveConnection.Text = Language.TrackActiveConnectionInConnectionTree; chkHostnameLikeDisplayName.Text = Language.SetHostnameLikeDisplayName; - chkSaveConnectionsAfterEveryEdit.Text = Language.SaveConnectionsAfterEveryEdit; chkUseFilterSearch.Text = Language.FilterSearchMatchesInConnectionTree; chkPlaceSearchBarAboveConnectionTree.Text = Language.PlaceSearchBarAboveConnectionTree; chkDoNotTrimUsername.Text = Language.DoNotTrimUsername; @@ -38,12 +52,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages lblRdpReconnectionCount.Text = Language.RdpReconnectCount; lblRDPConTimeout.Text = Language.RdpOverallConnectionTimeout; lblAutoSave1.Text = Language.AutoSaveEvery; + //ngLabel1.Text = Language.strLabelClosingConnections; - lblClosingConnections.Text = Language.ClosingConnections; - radCloseWarnAll.Text = Language._CloseWarnAll; - radCloseWarnMultiple.Text = Language.RadioCloseWarnMultiple; - radCloseWarnExit.Text = Language.RadioCloseWarnExit; - radCloseWarnNever.Text = Language.RadioCloseWarnNever; } public override void LoadSettings() @@ -52,7 +62,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages chkSingleClickOnOpenedConnectionSwitchesToIt.Checked = Settings.Default.SingleClickSwitchesToOpenConnection; chkConnectionTreeTrackActiveConnection.Checked = Settings.Default.TrackActiveConnectionInConnectionTree; chkHostnameLikeDisplayName.Checked = Settings.Default.SetHostnameLikeDisplayName; - chkSaveConnectionsAfterEveryEdit.Checked = Settings.Default.SaveConnectionsAfterEveryEdit; + chkUseFilterSearch.Checked = Settings.Default.UseFilterSearch; chkPlaceSearchBarAboveConnectionTree.Checked = Settings.Default.PlaceSearchBarAboveConnectionTree; chkDoNotTrimUsername.Checked = Settings.Default.DoNotTrimUsername; @@ -61,20 +71,22 @@ namespace mRemoteNG.UI.Forms.OptionsPages numRDPConTimeout.Value = Convert.ToDecimal(Settings.Default.ConRDPOverallConnectionTimeout); numAutoSave.Value = Convert.ToDecimal(Settings.Default.AutoSaveEveryMinutes); - switch (Settings.Default.ConfirmCloseConnection) + //comboBoxConnectionWarning.SelectedValue = Settings.Default.ConfirmCloseConnection; + + if (Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.Unassigned) { - case (int)ConfirmCloseEnum.Never: - radCloseWarnNever.Checked = true; - break; - case (int)ConfirmCloseEnum.Exit: - radCloseWarnExit.Checked = true; - break; - case (int)ConfirmCloseEnum.Multiple: - radCloseWarnMultiple.Checked = true; - break; - default: - radCloseWarnAll.Checked = true; - break; + if (Settings.Default.SaveConnectionsAfterEveryEdit) + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.OnEdit; + } + else if (Settings.Default.SaveConsOnExit) + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.OnExit; + } + else + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.Never; + } } } @@ -84,7 +96,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages Settings.Default.SingleClickSwitchesToOpenConnection = chkSingleClickOnOpenedConnectionSwitchesToIt.Checked; Settings.Default.TrackActiveConnectionInConnectionTree = chkConnectionTreeTrackActiveConnection.Checked; Settings.Default.SetHostnameLikeDisplayName = chkHostnameLikeDisplayName.Checked; - Settings.Default.SaveConnectionsAfterEveryEdit = chkSaveConnectionsAfterEveryEdit.Checked; + Settings.Default.UseFilterSearch = chkUseFilterSearch.Checked; Settings.Default.PlaceSearchBarAboveConnectionTree = chkPlaceSearchBarAboveConnectionTree.Checked; Settings.Default.DoNotTrimUsername = chkDoNotTrimUsername.Checked; @@ -102,25 +114,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages _frmMain.tmrAutoSave.Enabled = false; } - if (radCloseWarnAll.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.All; - } - - if (radCloseWarnMultiple.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Multiple; - } - - if (radCloseWarnExit.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Exit; - } - - if (radCloseWarnNever.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Never; - } + //Settings.Default.ConfirmCloseConnection = (int)comboBoxConnectionWarning.SelectedValue; } } } \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs index 550ccf3e..8360424a 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs @@ -64,4 +64,15 @@ namespace mRemoteNG.UI.Forms.OptionsPages ResumeLayout(false); } } + internal class DropdownList + { + public int Index { get; set; } + public string DisplayString { get; set; } + + public DropdownList(int argIndex, string argDisplay) + { + Index = argIndex; + DisplayString = argDisplay; + } + } } \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs index 71c76bc5..836dbcb8 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs @@ -23,7 +23,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages { base.ApplyLanguage(); - chkSaveConsOnExit.Text = Language.SaveConsOnExit; chkReconnectOnStart.Text = Language.ReconnectAtStartup; chkSingleInstance.Text = Language.AllowOnlySingleInstance; chkStartMinimized.Text = Language.StartMinimized; @@ -33,7 +32,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages { base.SaveSettings(); - Settings.Default.SaveConsOnExit = chkSaveConsOnExit.Checked; Settings.Default.OpenConsFromLastSession = chkReconnectOnStart.Checked; Settings.Default.SingleInstance = chkSingleInstance.Checked; Settings.Default.StartMinimized = chkStartMinimized.Checked; @@ -42,7 +40,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void StartupExitPage_Load(object sender, EventArgs e) { - chkSaveConsOnExit.Checked = Settings.Default.SaveConsOnExit; chkReconnectOnStart.Checked = Settings.Default.OpenConsFromLastSession; chkSingleInstance.Checked = Settings.Default.SingleInstance; chkStartMinimized.Checked = Settings.Default.StartMinimized; diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index 8743ce10..1b98c03f 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -82,6 +82,8 @@ namespace mRemoteNG.UI.Forms {typeof(ThemePage).Name, new ThemePage {Dock = DockStyle.Fill}}, {typeof(SecurityPage).Name, new SecurityPage {Dock = DockStyle.Fill}}, {typeof(AdvancedPage).Name, new AdvancedPage {Dock = DockStyle.Fill}}, + {typeof(BackupPage).Name, new BackupPage {Dock = DockStyle.Fill}}, + {typeof(ComponentsPage).Name, new ComponentsPage {Dock = DockStyle.Fill}}, }; } diff --git a/mRemoteNG/app.config b/mRemoteNG/app.config index cc4f174b..5519ba5b 100644 --- a/mRemoteNG/app.config +++ b/mRemoteNG/app.config @@ -591,12 +591,6 @@ 20 - - AES - - - GCM - 10000 @@ -747,6 +741,9 @@ False + + 0 + Highest diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index c6fff13d..7c6b1e14 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -74,6 +74,7 @@ + @@ -511,6 +512,15 @@ UserControl + + UserControl + + + BackupPage.cs + + + ComponentsPage.cs + UserControl @@ -876,6 +886,9 @@ AppearancePage.cs + + BackupPage.cs + ConnectionsPage.cs @@ -1088,6 +1101,7 @@ PreserveNewest + PreserveNewest diff --git a/mRemoteNGDocumentation/user_interface/options.rst b/mRemoteNGDocumentation/user_interface/options.rst index 89c28ba8..d1861eb7 100644 --- a/mRemoteNGDocumentation/user_interface/options.rst +++ b/mRemoteNGDocumentation/user_interface/options.rst @@ -18,9 +18,6 @@ Options below are for the various settings for Startup/Exit of mRemoteNG. * - Option - Default - Description - * - Save connection on exit - - On - - Save to connection file/database on exit of mRemoteNG * - Reconnect to previously opened sessions on startup - Off - This option will allow you to open the connection from which you where connected to after last exit of application @@ -109,32 +106,46 @@ Connections * - Set hostname like display name when creating or renaming connections - Off - Will make mRemoteNG try to use the remote host hostname to set the title of the tab in mRemoteNG. - * - Save connections after every exit - - On - - When active mRemoteNG will save the connection tree to the active config after every exit. If inactive then you have to save using **File > Save Connection File** or keyboard shortcut Ctrl+S * - Filter search matches in connection tree - Off - Allows you to filter out the connections to which does not match your filter search in the connection tree. If not active the search will only select the filter to which you do search. * - RDP Reconnect count - 5 - - Value in seconds + - Value in seconds * - RDP Connection Timeout - 20 - - Value in seconds + - Value in seconds * - Auto save time in minutes (0 means disabled) - 0 - Value in minutes - * - When closing connections - - Warn me when closing connections + * - When closing connections Warn me... + - ... when any connection closes - Various options of how mRemoteNG should act when you close connections. The different options are listed below: :: - - Warn me when closing connections - - Warn me only when closing multiple connections - - Warn me only when exiting mRemoteNG - - Do not warn me when closing connections + - ... when any connection closes + - ... when closing multiple connections + - ... only when exiting mRemoteNG + - ... never By default a warning will come up on closing a connection. Change this value based on your prefered settings. + * - Connection Backup Frequency + - On Edit + - Various options of when mRemoteNG should create a backup of the connections file. The different options are listed below: + :: + - Never backup connections + - On Edit + - On Exit + - Daily + - Weekly + By default a backup will be saved every time the connections are edited. Change this value based on your prefered settings. + * - Maximum number of backups + - 10 + - Number of backup copies of the connection file to keep. + * - Location of backup files + - (blank) + - Full path of backup copies of the connection files. + Credentials =========== Options for credentials in mRemoteNG. The main purpose here is that when you have empty username, password or domain field then use below information.