Compare commits

...
Author SHA1 Message Date
kenneth@hexad.dk 34891251db Tagged 1.3.1 final
git-svn-id: https://duplicati.googlecode.com/svn/tags/1.3.1 final@1265 59da171f-624f-0410-aa54-27559c288bec
2012-05-09 07:51:13 +00:00
kenneth@hexad.dk c5fac3354e Reverted branch 1.3.1 to r1209 as that was the released version
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1217 59da171f-624f-0410-aa54-27559c288bec
2012-04-30 18:34:05 +00:00
kenneth@hexad.dk 29b3bb4dad Reverted branch 1.3.1 to r1209 as that was the released version
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1216 59da171f-624f-0410-aa54-27559c288bec
2012-04-30 18:32:56 +00:00
kenneth@hexad.dk a7628566b6 Update issue #288
Checking of the updated/fixed French translation

git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1212 59da171f-624f-0410-aa54-27559c288bec
2012-04-27 17:14:52 +00:00
kenneth@hexad.dk 3f80700fb4 Fixed a minor issue with the LocalizationTool
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1211 59da171f-624f-0410-aa54-27559c288bec
2012-04-27 17:13:22 +00:00
kenneth@hexad.dk 244e502121 Merged r1208 and r1209 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1210 59da171f-624f-0410-aa54-27559c288bec
2012-04-21 21:24:39 +00:00
kenneth@hexad.dk 3fc896daa3 Updated version number, should fix it so it does not require a commit
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1205 59da171f-624f-0410-aa54-27559c288bec
2012-04-15 19:47:39 +00:00
kenneth@hexad.dk 7a466f937c Fixed that I committed the wrong translation files (they were empty)
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1204 59da171f-624f-0410-aa54-27559c288bec
2012-04-15 19:45:20 +00:00
kenneth@hexad.dk 04f1874080 Updated version number, should fix it so it does not require a commit
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1203 59da171f-624f-0410-aa54-27559c288bec
2012-04-13 21:00:08 +00:00
kenneth@hexad.dk 8c46d4c0bf Updated translations on 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1201 59da171f-624f-0410-aa54-27559c288bec
2012-04-13 20:53:52 +00:00
kenneth@hexad.dk d07c45dc62 Merged r1199 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1200 59da171f-624f-0410-aa54-27559c288bec
2012-04-11 19:42:52 +00:00
kenneth@hexad.dk 9c54afe136 Merged r1197 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1198 59da171f-624f-0410-aa54-27559c288bec
2012-04-09 18:40:48 +00:00
kenneth@hexad.dk 9cd14e0e61 Merged r1189, r1190, r1191 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1193 59da171f-624f-0410-aa54-27559c288bec
2012-03-29 05:55:41 +00:00
kenneth@hexad.dk fce00f1cc9 Merged r1182 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1183 59da171f-624f-0410-aa54-27559c288bec
2012-03-22 19:29:10 +00:00
kenneth@hexad.dk d3d1362d5b Improved error messages from the SharpSSH library
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1178 59da171f-624f-0410-aa54-27559c288bec
2012-03-21 19:40:47 +00:00
rstach@gmail.com a0bbedba5a Reworded and shortened a few strings in German localization.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1177 59da171f-624f-0410-aa54-27559c288bec
2012-03-21 16:51:52 +00:00
kenneth@hexad.dk d5d27c5800 Rebuild of the LocalizationTool
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1175 59da171f-624f-0410-aa54-27559c288bec
2012-03-20 21:21:26 +00:00
kenneth@hexad.dk 66d855798b Merged r1173 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1174 59da171f-624f-0410-aa54-27559c288bec
2012-03-20 20:23:39 +00:00
kenneth@hexad.dk c66bf181f6 Merged r1169, r1170, r1171 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1172 59da171f-624f-0410-aa54-27559c288bec
2012-03-20 19:51:32 +00:00
kenneth@hexad.dk b63ec454b2 Merged r1166 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1167 59da171f-624f-0410-aa54-27559c288bec
2012-03-17 21:28:33 +00:00
kenneth@hexad.dk 58095c3fab Updated LocalizationTool.exe to work better on 64bit windows
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1164 59da171f-624f-0410-aa54-27559c288bec
2012-03-17 20:11:14 +00:00
kenneth@hexad.dk 75f3f15022 Merged r1162 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1163 59da171f-624f-0410-aa54-27559c288bec
2012-03-17 20:02:33 +00:00
kenneth@hexad.dk f6a7a74214 Merged r1159 and 1160 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1161 59da171f-624f-0410-aa54-27559c288bec
2012-03-17 19:49:49 +00:00
kenneth@hexad.dk 50558f116a Merged r1152 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1153 59da171f-624f-0410-aa54-27559c288bec
2012-02-29 10:52:17 +00:00
kenneth@hexad.dk 5cfe801e78 Merged r1150 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1151 59da171f-624f-0410-aa54-27559c288bec
2012-02-27 14:38:11 +00:00
birunthan.mohanathas 38f29f3877 Minor changes.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1149 59da171f-624f-0410-aa54-27559c288bec
2012-02-24 13:44:54 +00:00
rstach@gmail.com 5a9492740e Added James Colton as contributor in acknowledgements.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1147 59da171f-624f-0410-aa54-27559c288bec
2012-02-22 09:46:01 +00:00
kenneth@hexad.dk 9e9a80c23b Merged r1142 into 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1143 59da171f-624f-0410-aa54-27559c288bec
2012-02-21 10:29:30 +00:00
kenneth@hexad.dk a068521c23 Update issue #491
Status: Fixed

Updated default buffer size to 64kB for copying, gives drastically improved speed for FTP, and possibly all backends.


git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1140 59da171f-624f-0410-aa54-27559c288bec
2012-02-21 09:46:43 +00:00
kenneth@hexad.dk 073b755ef5 Updated 1.3.1 branch to not include Duplicati.Scheduler in the build, as it is only maintained in trunk
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1139 59da171f-624f-0410-aa54-27559c288bec
2012-02-21 09:28:21 +00:00
kenneth@hexad.dk 914e50b1dd Merged r1136 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1138 59da171f-624f-0410-aa54-27559c288bec
2012-02-20 20:37:19 +00:00
rstach@gmail.com 1ca1cb257c Set max port to 65535
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1134 59da171f-624f-0410-aa54-27559c288bec
2012-02-12 10:29:17 +00:00
rstach@gmail.com 893927306c Set max port to 65535
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1133 59da171f-624f-0410-aa54-27559c288bec
2012-02-12 10:28:49 +00:00
rstach@gmail.com f8d99f842d Set max port to 65535
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1132 59da171f-624f-0410-aa54-27559c288bec
2012-02-12 10:28:21 +00:00
rstach@gmail.com 3bf5a74a76 Set max port to 65535
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1131 59da171f-624f-0410-aa54-27559c288bec
2012-02-12 10:27:45 +00:00
kenneth@hexad.dk 324f6a85ea Merged r1123 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1124 59da171f-624f-0410-aa54-27559c288bec
2012-02-03 07:49:41 +00:00
kenneth@hexad.dk f0a49bc242 Updated 1.3.1 branch with fixes for Chinese translation, FTP backend and minor adjustments (r1117,r1118,r1119 and r1120)
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1122 59da171f-624f-0410-aa54-27559c288bec
2012-02-03 07:43:44 +00:00
rstach@gmail.com 5ed8856f01 Added Chinese translator "Born Kanas" to acknowledgements.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1116 59da171f-624f-0410-aa54-27559c288bec
2012-02-03 07:27:14 +00:00
kenneth@hexad.dk 0feb65efbd Applied Chinese translation update r1114, to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1115 59da171f-624f-0410-aa54-27559c288bec
2012-02-02 08:46:38 +00:00
kenneth@hexad.dk 7b314fc182 Merged FTP warning text from r1111 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1112 59da171f-624f-0410-aa54-27559c288bec
2012-01-29 16:40:08 +00:00
kenneth@hexad.dk 856f45dbf8 Merged Integer overflow changes r1109 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1110 59da171f-624f-0410-aa54-27559c288bec
2012-01-29 16:09:46 +00:00
kenneth@hexad.dk a466ea1ac0 Merged FTP changes r1105 and r1106 to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1108 59da171f-624f-0410-aa54-27559c288bec
2012-01-19 19:28:01 +00:00
rstach@gmail.com 97eaa3295f Translation changes checked in over WebUI using copy&paste from CVS export opened with text editor on Windows
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1104 59da171f-624f-0410-aa54-27559c288bec
2012-01-18 12:00:04 +00:00
kenneth@hexad.dk d15ef2dcf9 Applied German translation update r1100
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1101 59da171f-624f-0410-aa54-27559c288bec
2012-01-16 08:05:11 +00:00
kenneth@hexad.dk 4caa9cc17a Applied backend logging option from r1098
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1099 59da171f-624f-0410-aa54-27559c288bec
2012-01-15 22:21:26 +00:00
kenneth@hexad.dk 79e17d6439 Applied updated translations (r1096) to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1097 59da171f-624f-0410-aa54-27559c288bec
2012-01-12 09:46:08 +00:00
rstach@gmail.com fc98ffd6c7 Added Italian translator and sorted list alphabetically
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1090 59da171f-624f-0410-aa54-27559c288bec
2012-01-11 10:13:17 +00:00
kenneth@hexad.dk 88a2caae3b Applied updated translations (r1086 + r1087) to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1088 59da171f-624f-0410-aa54-27559c288bec
2012-01-11 08:49:50 +00:00
kenneth@hexad.dk e8baf7e8b7 Applied patch from #529 (r1084) to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1085 59da171f-624f-0410-aa54-27559c288bec
2012-01-10 08:41:29 +00:00
birunthan.mohanathas 4a5e66bb1b [1.3.1] Fixed Options dialog tab order.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1082 59da171f-624f-0410-aa54-27559c288bec
2012-01-07 16:18:02 +00:00
birunthan.mohanathas b72721569c [1.3.1] Updated Options dialog UI.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1081 59da171f-624f-0410-aa54-27559c288bec
2012-01-07 16:03:28 +00:00
kenneth@hexad.dk 98ce976c64 Applied patch from #523 (r1079) to 1.3.1 branch
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1080 59da171f-624f-0410-aa54-27559c288bec
2011-12-27 09:51:29 +00:00
rstach@gmail.com 0a7e0a3e13 Updated for 1.3.1.
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1075 59da171f-624f-0410-aa54-27559c288bec
2011-12-15 12:33:44 +00:00
kenneth@hexad.dk b0916a8d48 Created branch for 1.3.1
git-svn-id: https://duplicati.googlecode.com/svn/branches/1.3.1@1072 59da171f-624f-0410-aa54-27559c288bec
2011-12-15 09:37:03 +00:00
101 changed files with 11170 additions and 6409 deletions
@@ -50,17 +50,28 @@ namespace LocalizationTool
resgenexe = ExecuteAndRead("which", "resgen");
alexe = ExecuteAndRead("which", "al");
}
else
else //Windows
{
//Order of these paths is also the search order
string[] known_sdk_paths =
{
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v2.0.50727\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft.NET\\SDK\\v2.0\\bin\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v3.0\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v4.0\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v4.0.30319\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v3.5\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v6.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v3.0\\"),
Environment.ExpandEnvironmentVariables("%WINDIR%\\Microsoft.Net\\Framework\\v2.0.50727\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v8.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v7.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v8.0A\\bin\\")
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft SDKs\\Windows\\v6.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES%\\Microsoft.NET\\SDK\\v2.0\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES(X86)%\\Microsoft SDKs\\Windows\\v8.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES(X86)%\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES(X86)%\\Microsoft SDKs\\Windows\\v7.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES(X86)%\\Microsoft SDKs\\Windows\\v6.0A\\bin\\"),
Environment.ExpandEnvironmentVariables("%PROGRAMFILES(X86)%\\Microsoft.NET\\SDK\\v2.0\\bin\\"),
};
+6 -108
View File
@@ -55,19 +55,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Backend.S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Backend.GoogleDocs", "Duplicati\Library\Backend\GoogleDocs\Duplicati.Library.Backend.GoogleDocs.csproj", "{42C91180-11EB-4590-82EA-80FE9D4DEBEC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Scheduler.Data", "Duplicati\Scheduler\Data\Duplicati.Scheduler.Data.csproj", "{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Scheduler", "Duplicati\Scheduler\Duplicati.Scheduler.csproj", "{D1D503E8-5CF7-413B-81FB-403D65B43AAB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Scheduler.Utility", "Duplicati\Scheduler\Utility\Duplicati.Scheduler.Utility.csproj", "{0E3DF716-5657-4B51-9BF2-3791880930E1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Scheduler.RunBackup", "Duplicati\Scheduler\RunBackup\Duplicati.Scheduler.RunBackup.csproj", "{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Scheduler.Monitor.SQL", "Duplicati\Scheduler\Monitor.SQL\Duplicati.Scheduler.Monitor.SQL.csproj", "{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ObjectListView2010", "thirdparty\ObjectListView\ObjectListView\ObjectListView2010.csproj", "{18FEDA0C-D147-4286-B39A-01204808106A}"
EndProject
Global
GlobalSection(SubversionScc) = preSolution
Svn-Managed = True
Manager = AnkhSVN - Subversion Support for Visual Studio
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
@@ -411,8 +403,8 @@ Global
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Debug|x86.Build.0 = Debug|x86
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Any CPU.Build.0 = Release|Any CPU
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Mixed Platforms.ActiveCfg = Release|x86
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Mixed Platforms.Build.0 = Release|x86
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.ActiveCfg = Release|x86
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Release|x86.Build.0 = Release|x86
{0CA86ECF-5BEC-4909-B4F6-110A03B30B92}.Test|Any CPU.ActiveCfg = Release|x86
@@ -535,102 +527,8 @@ Global
{42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{42C91180-11EB-4590-82EA-80FE9D4DEBEC}.Test|x86.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Debug|x86.ActiveCfg = Debug|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Release|Any CPU.Build.0 = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Release|x86.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Test|Any CPU.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Test|Any CPU.Build.0 = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{C8F0DD19-E242-4E9C-A707-2FFADE8D7970}.Test|x86.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Debug|x86.ActiveCfg = Debug|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Release|Any CPU.Build.0 = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Release|x86.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Test|Any CPU.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Test|Any CPU.Build.0 = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{D1D503E8-5CF7-413B-81FB-403D65B43AAB}.Test|x86.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Release|Any CPU.Build.0 = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Release|x86.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Test|Any CPU.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Test|Any CPU.Build.0 = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{0E3DF716-5657-4B51-9BF2-3791880930E1}.Test|x86.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Debug|x86.ActiveCfg = Debug|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Release|Any CPU.Build.0 = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Release|x86.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Test|Any CPU.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Test|Any CPU.Build.0 = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{520FA2BD-1C59-40D9-BCB5-EDA11327B7F0}.Test|x86.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Debug|x86.ActiveCfg = Debug|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Release|Any CPU.Build.0 = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Release|x86.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Test|Any CPU.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Test|Any CPU.Build.0 = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{ECA674A3-CC59-4C75-90E3-5AACA591EC5D}.Test|x86.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Debug|x86.ActiveCfg = Debug|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Release|Any CPU.Build.0 = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Release|x86.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Test|Any CPU.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Test|Any CPU.Build.0 = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Test|Mixed Platforms.Build.0 = Release|Any CPU
{18FEDA0C-D147-4286-B39A-01204808106A}.Test|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(SubversionScc) = preSolution
Svn-Managed = True
Manager = AnkhSVN - Subversion Support for Visual Studio
EndGlobalSection
EndGlobal
@@ -134,7 +134,10 @@ namespace Duplicati.CommandLine.BackendTester
curlist = backend.List();
}
catch { }
catch (Exception ex)
{
Console.WriteLine("Autocreate folder failed with message: " + ex.Message);
}
}
if (curlist == null)
@@ -152,14 +152,38 @@
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<Content Include="..\..\thirdparty\gpg\gpg.exe">
<Link>win-tools\gpg.exe</Link>
<Content Include="..\..\thirdparty\gpg\gpg2.exe">
<Link>win-tools\gpg2.exe</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\gpg\gpg.exe">
<Link>win-tools\gpg\gpg.exe</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\iconv.dll">
<Link>win-tools\iconv.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\libadns-1.dll">
<Link>win-tools\libadns-1.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\libassuan-0.dll">
<Link>win-tools\libassuan-0.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\libgcrypt-11.dll">
<Link>win-tools\libgcrypt-11.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\libgpg-error-0.dll">
<Link>win-tools\libgpg-error-0.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\gpg\zlib1.dll">
<Link>win-tools\zlib1.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\thirdparty\Putty\pscp.exe">
<Link>win-tools\pscp.exe</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+12 -10
View File
@@ -35,13 +35,6 @@ namespace Duplicati.CommandLine
string filter = Duplicati.Library.Utility.FilenameFilter.EncodeAsFilter(Duplicati.Library.Utility.FilenameFilter.ParseCommandLine(cargs, true));
Dictionary<string, string> options = CommandLineParser.ExtractOptions(cargs);
foreach (string internaloption in Library.Main.Options.InternalOptions)
if (options.ContainsKey(internaloption))
{
Console.WriteLine(Strings.Program.InternalOptionUsedError, internaloption);
return;
}
if (!string.IsNullOrEmpty(filter))
options["filter"] = filter;
@@ -49,12 +42,13 @@ namespace Duplicati.CommandLine
//We add it last, to allow the user to override with other versions
if (!Library.Utility.Utility.IsClientLinux)
{
string wintools = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "win-tools");
Environment.SetEnvironmentVariable("PATH",
Environment.GetEnvironmentVariable("PATH") +
System.IO.Path.PathSeparator.ToString() +
System.IO.Path.Combine(
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
"win-tools")
wintools +
System.IO.Path.PathSeparator.ToString() +
System.IO.Path.Combine(wintools, "gpg") //GPG needs to be in a subfolder for wrapping reasons
);
}
@@ -92,6 +86,14 @@ namespace Duplicati.CommandLine
}
}
//AFTER converting options to commands, we check for internal switches
foreach (string internaloption in Library.Main.Options.InternalOptions)
if (options.ContainsKey(internaloption))
{
Console.WriteLine(Strings.Program.InternalOptionUsedError, internaloption);
return;
}
if (cargs.Count == 1)
{
switch (cargs[0].Trim().ToLower())
+31 -7
View File
@@ -112,16 +112,22 @@ namespace Duplicati.CommandLine
options["backup-prefix"] = "duplicati_unittest";
//This would break the test, because the data is not modified the normal way
options["disable-filetime-check"] = null;
options["disable-filetime-check"] = "true";
//We do not use the same folder, so we need this option
options["allow-sourcefolder-change"] = null;
options["allow-sourcefolder-change"] = "true";
//We want all messages in the log
options["log-level"] = LogMessageType.Profiling.ToString();
//We cannot rely on USN numbering, but we can use USN enumeration
//options["disable-usn-diff-check"] = null;
//options["disable-usn-diff-check"] = "true";
//We use precise times
options["disable-time-tolerance"] = "true";
options["verification-level"] = "full";
//We need all sets, even if they are unchanged
options["upload-unchanged-backups"] = "true";
using(new Timer("Total unittest"))
using(TempFolder tf = new TempFolder())
{
@@ -343,6 +349,22 @@ namespace Duplicati.CommandLine
Log.CurrentLog = null;
}
/// <summary>
/// Returns the index of a given string, using the file system case sensitivity
/// </summary>
/// <returns>The index of the entry or -1 if no entry was found</returns>
/// <param name='lst'>The list to search</param>
/// <param name='m'>The string to find</param>
private static int IndexOf(List<string> lst, string m)
{
StringComparison sc = Duplicati.Library.Utility.Utility.ClientFilenameStringComparision;
for(int i = 0; i < lst.Count; i++)
if (lst[i].Equals(m, sc))
return i;
return -1;
}
/// <summary>
/// Verifies the existence of all files and folders, and ensures that all
/// files are binary equal.
@@ -361,13 +383,14 @@ namespace Duplicati.CommandLine
{
string relpath = s.Substring(f1.Length);
string target = System.IO.Path.Combine(f2, relpath);
if (!folders2.Contains(target))
int ix = IndexOf(folders2, target);
if (ix < 0)
{
Log.WriteMessage("Missing folder: " + relpath, LogMessageType.Error);
Console.WriteLine("Missing folder: " + relpath);
}
else
folders2.Remove(target);
folders2.RemoveAt(ix);
}
foreach (string s in folders2)
@@ -382,14 +405,15 @@ namespace Duplicati.CommandLine
{
string relpath = s.Substring(f1.Length);
string target = System.IO.Path.Combine(f2, relpath);
if (!files2.Contains(target))
int ix = IndexOf(files2, target);
if (ix < 0)
{
Log.WriteMessage("Missing file: " + relpath, LogMessageType.Error);
Console.WriteLine("Missing file: " + relpath);
}
else
{
files2.Remove(target);
files2.RemoveAt(ix);
if (!CompareFiles(s, target, relpath))
{
Log.WriteMessage("File differs: " + relpath, LogMessageType.Error);
+7 -1
View File
@@ -1,3 +1,9 @@
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
+77 -107
View File
@@ -35,11 +35,9 @@ namespace Duplicati.GUI
this.BalloonNotificationLevel = new System.Windows.Forms.ComboBox();
this.label8 = new System.Windows.Forms.Label();
this.HideDonateButton = new System.Windows.Forms.CheckBox();
this.StartupDelayDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.label7 = new System.Windows.Forms.Label();
this.LanguageSelection = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.RecentDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.CacheSizeLabel = new System.Windows.Forms.Label();
this.ClearCacheButton = new System.Windows.Forms.Button();
@@ -49,42 +47,39 @@ namespace Duplicati.GUI
this.TempPathBrowse = new System.Windows.Forms.Button();
this.TempPath = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.OKBtn = new System.Windows.Forms.Button();
this.CancelBtn = new System.Windows.Forms.Button();
this.BrowseTempPath = new System.Windows.Forms.FolderBrowserDialog();
this.PasswordDefaultsGroup = new System.Windows.Forms.GroupBox();
this.PasswordPanel = new System.Windows.Forms.Panel();
this.EncryptionModule = new System.Windows.Forms.ComboBox();
this.EncryptionMethod = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.CommonPassword = new Duplicati.Winforms.Controls.PasswordControl();
this.EncryptionModule = new System.Windows.Forms.ComboBox();
this.UseCommonPassword = new System.Windows.Forms.CheckBox();
this.CommonPassword = new Duplicati.Winforms.Controls.PasswordControl();
this.BrowseSignatureCachePath = new System.Windows.Forms.FolderBrowserDialog();
this.CacheSizeCalculator = new System.ComponentModel.BackgroundWorker();
this.TabContainer = new System.Windows.Forms.TabControl();
this.BasicTab = new System.Windows.Forms.TabPage();
this.AdvancedTab = new System.Windows.Forms.TabPage();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.Bandwidth = new Duplicati.GUI.HelperControls.BandwidthLimit();
this.ThreadPriorityPicker = new Duplicati.GUI.HelperControls.ThreadPriorityPicker();
this.LicenseTab = new System.Windows.Forms.TabPage();
this.LicenseLink = new System.Windows.Forms.LinkLabel();
this.label6 = new System.Windows.Forms.Label();
this.LicenseText = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.LicenseSections = new System.Windows.Forms.ListBox();
this.panel1 = new System.Windows.Forms.Panel();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.OKBtn = new System.Windows.Forms.Button();
this.CancelBtn = new System.Windows.Forms.Button();
this.StartupDelayDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.RecentDuration = new Duplicati.GUI.HelperControls.DurationEditor();
this.Bandwidth = new Duplicati.GUI.HelperControls.BandwidthLimit();
this.ThreadPriorityPicker = new Duplicati.GUI.HelperControls.ThreadPriorityPicker();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.PasswordDefaultsGroup.SuspendLayout();
this.PasswordPanel.SuspendLayout();
this.TabContainer.SuspendLayout();
this.BasicTab.SuspendLayout();
this.AdvancedTab.SuspendLayout();
this.groupBox4.SuspendLayout();
this.LicenseTab.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// label1
@@ -107,6 +102,7 @@ namespace Duplicati.GUI
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
this.groupBox1.Enter += new System.EventHandler(this.groupBox1_Enter);
//
// BalloonNotificationLevel
//
@@ -127,18 +123,9 @@ namespace Duplicati.GUI
//
resources.ApplyResources(this.HideDonateButton, "HideDonateButton");
this.HideDonateButton.Name = "HideDonateButton";
this.toolTip.SetToolTip(this.HideDonateButton, resources.GetString("HideDonateButton.ToolTip"));
this.HideDonateButton.UseVisualStyleBackColor = true;
this.HideDonateButton.CheckedChanged += new System.EventHandler(this.HideDonateButton_CheckedChanged);
//
// StartupDelayDuration
//
resources.ApplyResources(this.StartupDelayDuration, "StartupDelayDuration");
this.StartupDelayDuration.Name = "StartupDelayDuration";
this.toolTip.SetToolTip(this.StartupDelayDuration, resources.GetString("StartupDelayDuration.ToolTip"));
this.StartupDelayDuration.Value = "";
this.StartupDelayDuration.ValueChanged += new System.EventHandler(this.StartupDelayDuration_ValueChanged);
//
// label7
//
resources.ApplyResources(this.label7, "label7");
@@ -160,14 +147,6 @@ namespace Duplicati.GUI
this.label3.Name = "label3";
this.toolTip.SetToolTip(this.label3, resources.GetString("label3.ToolTip"));
//
// RecentDuration
//
resources.ApplyResources(this.RecentDuration, "RecentDuration");
this.RecentDuration.Name = "RecentDuration";
this.toolTip.SetToolTip(this.RecentDuration, resources.GetString("RecentDuration.ToolTip"));
this.RecentDuration.Value = "";
this.RecentDuration.ValueChanged += new System.EventHandler(this.RecentDuration_ValueChanged);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.CacheSizeLabel);
@@ -186,7 +165,6 @@ namespace Duplicati.GUI
//
resources.ApplyResources(this.CacheSizeLabel, "CacheSizeLabel");
this.CacheSizeLabel.Name = "CacheSizeLabel";
this.toolTip.SetToolTip(this.CacheSizeLabel, resources.GetString("CacheSizeLabel.ToolTip"));
//
// ClearCacheButton
//
@@ -237,38 +215,22 @@ namespace Duplicati.GUI
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
this.toolTip.SetToolTip(this.label4, resources.GetString("label4.ToolTip"));
//
// OKBtn
//
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// CancelBtn
//
resources.ApplyResources(this.CancelBtn, "CancelBtn");
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// PasswordDefaultsGroup
//
this.PasswordDefaultsGroup.Controls.Add(this.PasswordPanel);
this.PasswordDefaultsGroup.Controls.Add(this.EncryptionMethod);
this.PasswordDefaultsGroup.Controls.Add(this.EncryptionModule);
this.PasswordDefaultsGroup.Controls.Add(this.UseCommonPassword);
this.PasswordDefaultsGroup.Controls.Add(this.CommonPassword);
resources.ApplyResources(this.PasswordDefaultsGroup, "PasswordDefaultsGroup");
this.PasswordDefaultsGroup.Name = "PasswordDefaultsGroup";
this.PasswordDefaultsGroup.TabStop = false;
//
// PasswordPanel
// EncryptionMethod
//
this.PasswordPanel.Controls.Add(this.EncryptionModule);
this.PasswordPanel.Controls.Add(this.EncryptionMethod);
this.PasswordPanel.Controls.Add(this.label5);
this.PasswordPanel.Controls.Add(this.CommonPassword);
resources.ApplyResources(this.PasswordPanel, "PasswordPanel");
this.PasswordPanel.Name = "PasswordPanel";
resources.ApplyResources(this.EncryptionMethod, "EncryptionMethod");
this.EncryptionMethod.Name = "EncryptionMethod";
this.toolTip.SetToolTip(this.EncryptionMethod, resources.GetString("EncryptionMethod.ToolTip"));
//
// EncryptionModule
//
@@ -280,17 +242,13 @@ namespace Duplicati.GUI
this.EncryptionModule.SelectedIndexChanged += new System.EventHandler(this.EncryptionModule_SelectedIndexChanged);
this.EncryptionModule.TextChanged += new System.EventHandler(this.EncryptionModule_SelectedIndexChanged);
//
// EncryptionMethod
// UseCommonPassword
//
resources.ApplyResources(this.EncryptionMethod, "EncryptionMethod");
this.EncryptionMethod.Name = "EncryptionMethod";
this.toolTip.SetToolTip(this.EncryptionMethod, resources.GetString("EncryptionMethod.ToolTip"));
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
this.toolTip.SetToolTip(this.label5, resources.GetString("label5.ToolTip"));
resources.ApplyResources(this.UseCommonPassword, "UseCommonPassword");
this.UseCommonPassword.Name = "UseCommonPassword";
this.toolTip.SetToolTip(this.UseCommonPassword, resources.GetString("UseCommonPassword.ToolTip"));
this.UseCommonPassword.UseVisualStyleBackColor = true;
this.UseCommonPassword.CheckedChanged += new System.EventHandler(this.UseCommonPassword_CheckedChanged);
//
// CommonPassword
//
@@ -304,14 +262,6 @@ namespace Duplicati.GUI
this.toolTip.SetToolTip(this.CommonPassword, resources.GetString("CommonPassword.ToolTip"));
this.CommonPassword.TextChanged += new System.EventHandler(this.CommonPassword_TextChanged);
//
// UseCommonPassword
//
resources.ApplyResources(this.UseCommonPassword, "UseCommonPassword");
this.UseCommonPassword.Name = "UseCommonPassword";
this.toolTip.SetToolTip(this.UseCommonPassword, resources.GetString("UseCommonPassword.ToolTip"));
this.UseCommonPassword.UseVisualStyleBackColor = true;
this.UseCommonPassword.CheckedChanged += new System.EventHandler(this.UseCommonPassword_CheckedChanged);
//
// CacheSizeCalculator
//
this.CacheSizeCalculator.WorkerSupportsCancellation = true;
@@ -326,6 +276,7 @@ namespace Duplicati.GUI
resources.ApplyResources(this.TabContainer, "TabContainer");
this.TabContainer.Name = "TabContainer";
this.TabContainer.SelectedIndex = 0;
this.TabContainer.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
//
// BasicTab
//
@@ -351,25 +302,6 @@ namespace Duplicati.GUI
this.groupBox4.Name = "groupBox4";
this.groupBox4.TabStop = false;
//
// Bandwidth
//
this.Bandwidth.DownloadLimit = null;
this.Bandwidth.DownloadLimitInBytes = ((long)(0));
resources.ApplyResources(this.Bandwidth, "Bandwidth");
this.Bandwidth.Name = "Bandwidth";
this.toolTip.SetToolTip(this.Bandwidth, resources.GetString("Bandwidth.ToolTip"));
this.Bandwidth.UploadLimit = null;
this.Bandwidth.UploadLimitInBytes = ((long)(0));
this.Bandwidth.DownloadLimitChanged += new System.EventHandler(this.Bandwidth_DownloadLimitChanged);
this.Bandwidth.UploadLimitChanged += new System.EventHandler(this.Bandwidth_UploadLimitChanged);
//
// ThreadPriorityPicker
//
resources.ApplyResources(this.ThreadPriorityPicker, "ThreadPriorityPicker");
this.ThreadPriorityPicker.Name = "ThreadPriorityPicker";
this.toolTip.SetToolTip(this.ThreadPriorityPicker, resources.GetString("ThreadPriorityPicker.ToolTip"));
this.ThreadPriorityPicker.SelectedPriorityChanged += new System.EventHandler(this.ThreadPriorityPicker_SelectedPriorityChanged);
//
// LicenseTab
//
this.LicenseTab.Controls.Add(this.LicenseLink);
@@ -396,6 +328,7 @@ namespace Duplicati.GUI
//
// LicenseText
//
this.LicenseText.BackColor = System.Drawing.SystemColors.Window;
resources.ApplyResources(this.LicenseText, "LicenseText");
this.LicenseText.Name = "LicenseText";
this.LicenseText.ReadOnly = true;
@@ -413,41 +346,81 @@ namespace Duplicati.GUI
this.toolTip.SetToolTip(this.LicenseSections, resources.GetString("LicenseSections.ToolTip"));
this.LicenseSections.SelectedIndexChanged += new System.EventHandler(this.LicenseSections_SelectedIndexChanged);
//
// panel1
// OKBtn
//
this.panel1.Controls.Add(this.OKBtn);
this.panel1.Controls.Add(this.CancelBtn);
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// CancelBtn
//
resources.ApplyResources(this.CancelBtn, "CancelBtn");
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// StartupDelayDuration
//
resources.ApplyResources(this.StartupDelayDuration, "StartupDelayDuration");
this.StartupDelayDuration.Name = "StartupDelayDuration";
this.toolTip.SetToolTip(this.StartupDelayDuration, resources.GetString("StartupDelayDuration.ToolTip"));
this.StartupDelayDuration.Value = "";
this.StartupDelayDuration.ValueChanged += new System.EventHandler(this.StartupDelayDuration_ValueChanged);
//
// RecentDuration
//
resources.ApplyResources(this.RecentDuration, "RecentDuration");
this.RecentDuration.Name = "RecentDuration";
this.toolTip.SetToolTip(this.RecentDuration, resources.GetString("RecentDuration.ToolTip"));
this.RecentDuration.Value = "";
this.RecentDuration.ValueChanged += new System.EventHandler(this.RecentDuration_ValueChanged);
//
// Bandwidth
//
this.Bandwidth.DownloadLimit = null;
this.Bandwidth.DownloadLimitInBytes = ((long)(0));
resources.ApplyResources(this.Bandwidth, "Bandwidth");
this.Bandwidth.Name = "Bandwidth";
this.toolTip.SetToolTip(this.Bandwidth, resources.GetString("Bandwidth.ToolTip"));
this.Bandwidth.UploadLimit = null;
this.Bandwidth.UploadLimitInBytes = ((long)(0));
this.Bandwidth.DownloadLimitChanged += new System.EventHandler(this.Bandwidth_DownloadLimitChanged);
this.Bandwidth.UploadLimitChanged += new System.EventHandler(this.Bandwidth_UploadLimitChanged);
//
// ThreadPriorityPicker
//
resources.ApplyResources(this.ThreadPriorityPicker, "ThreadPriorityPicker");
this.ThreadPriorityPicker.Name = "ThreadPriorityPicker";
this.toolTip.SetToolTip(this.ThreadPriorityPicker, resources.GetString("ThreadPriorityPicker.ToolTip"));
this.ThreadPriorityPicker.SelectedPriorityChanged += new System.EventHandler(this.ThreadPriorityPicker_SelectedPriorityChanged);
//
// ApplicationSetup
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.CancelBtn;
this.Controls.Add(this.CancelBtn);
this.Controls.Add(this.OKBtn);
this.Controls.Add(this.TabContainer);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ApplicationSetup";
this.Load += new System.EventHandler(this.ApplicationSetup_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ApplicationSetup_FormClosing);
this.Load += new System.EventHandler(this.ApplicationSetup_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.PasswordDefaultsGroup.ResumeLayout(false);
this.PasswordDefaultsGroup.PerformLayout();
this.PasswordPanel.ResumeLayout(false);
this.PasswordPanel.PerformLayout();
this.TabContainer.ResumeLayout(false);
this.BasicTab.ResumeLayout(false);
this.AdvancedTab.ResumeLayout(false);
this.groupBox4.ResumeLayout(false);
this.LicenseTab.ResumeLayout(false);
this.LicenseTab.PerformLayout();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -457,8 +430,6 @@ namespace Duplicati.GUI
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button OKBtn;
private System.Windows.Forms.Button CancelBtn;
private Duplicati.GUI.HelperControls.DurationEditor RecentDuration;
private System.Windows.Forms.Button TempPathBrowse;
private System.Windows.Forms.TextBox TempPath;
@@ -467,8 +438,6 @@ namespace Duplicati.GUI
private System.Windows.Forms.GroupBox PasswordDefaultsGroup;
private Duplicati.Winforms.Controls.PasswordControl CommonPassword;
private System.Windows.Forms.CheckBox UseCommonPassword;
private System.Windows.Forms.Panel PasswordPanel;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckBox SignatureCacheEnabled;
private System.Windows.Forms.Button SignatureCachePathBrowse;
private System.Windows.Forms.TextBox SignatureCachePath;
@@ -486,7 +455,6 @@ namespace Duplicati.GUI
private System.Windows.Forms.GroupBox groupBox4;
private Duplicati.GUI.HelperControls.BandwidthLimit Bandwidth;
private Duplicati.GUI.HelperControls.ThreadPriorityPicker ThreadPriorityPicker;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label EncryptionMethod;
private System.Windows.Forms.ComboBox EncryptionModule;
private System.Windows.Forms.CheckBox HideDonateButton;
@@ -499,5 +467,7 @@ namespace Duplicati.GUI
private System.Windows.Forms.TextBox LicenseText;
private System.Windows.Forms.ComboBox BalloonNotificationLevel;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Button OKBtn;
private System.Windows.Forms.Button CancelBtn;
}
}
}
+19 -2
View File
@@ -124,6 +124,12 @@ namespace Duplicati.GUI
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Font = SystemFonts.MessageBoxFont;
}
private void RecentDuration_TextChanged(object sender, EventArgs e)
{
if (m_isUpdating || m_settings == null)
@@ -324,7 +330,8 @@ namespace Duplicati.GUI
private void UseCommonPassword_CheckedChanged(object sender, EventArgs e)
{
PasswordPanel.Enabled = UseCommonPassword.Checked;
CommonPassword.Enabled = UseCommonPassword.Checked;
EncryptionModule.Enabled = UseCommonPassword.Checked;
if (m_isUpdating)
return;
@@ -561,5 +568,15 @@ namespace Duplicati.GUI
if (BalloonNotificationLevel.SelectedItem as ComboBoxItemPair<ApplicationSettings.NotificationLevel> != null)
m_settings.BallonNotificationLevel = (BalloonNotificationLevel.SelectedItem as ComboBoxItemPair<ApplicationSettings.NotificationLevel>).Value;
}
private void groupBox1_Enter(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}
}
File diff suppressed because it is too large Load Diff
+3
View File
@@ -229,6 +229,7 @@
</EmbeddedResource>
<EmbeddedResource Include="HelperControls\TestSearchSelection.resx">
<DependentUpon>TestSearchSelection.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@@ -890,6 +891,7 @@
<EmbeddedResource Include="HelperControls\Strings\SizeSelector.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>SizeSelector.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="HelperControls\ThreadPriorityPicker.resx">
<DependentUpon>ThreadPriorityPicker.cs</DependentUpon>
@@ -1068,6 +1070,7 @@
<EmbeddedResource Include="Strings\WizardHandler.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>WizardHandler.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
@@ -127,7 +127,7 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="DownloadLimitCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 32</value>
<value>0, 30</value>
</data>
<data name="DownloadLimitCheckbox.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 17</value>
@@ -157,7 +157,7 @@
<value>NoControl</value>
</data>
<data name="UploadLimitCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<value>0, 2</value>
</data>
<data name="UploadLimitCheckbox.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
@@ -214,7 +214,7 @@
<value>False</value>
</data>
<data name="DownloadLimitPicker.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 32</value>
<value>152, 28</value>
</data>
<data name="DownloadLimitPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 21</value>
@@ -241,7 +241,7 @@
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>321, 54</value>
<value>321, 50</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>BandwidthLimit</value>
+1
View File
@@ -53,6 +53,7 @@ namespace Duplicati.GUI.HelperControls
// CustomDuration
//
this.errorProvider.SetError(this.CustomDuration, resources.GetString("CustomDuration.Error"));
this.errorProvider.SetIconPadding(this.CustomDuration, ((int)(resources.GetObject("CustomDuration.IconPadding"))));
resources.ApplyResources(this.CustomDuration, "CustomDuration");
this.CustomDuration.Name = "CustomDuration";
this.CustomDuration.TextChanged += new System.EventHandler(this.CustomDuration_TextChanged);
@@ -182,11 +182,14 @@
<data name="CustomDuration.Error" xml:space="preserve">
<value>s</value>
</data>
<data name="CustomDuration.IconPadding" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="CustomDuration.Location" type="System.Drawing.Point, System.Drawing">
<value>136, 0</value>
<value>118, 0</value>
</data>
<data name="CustomDuration.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 20</value>
<value>102, 20</value>
</data>
<data name="CustomDuration.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -145,7 +145,7 @@
<value>Top, Left, Right</value>
</data>
<data name="Number.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<value>0, 1</value>
</data>
<data name="Number.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 20</value>
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -79,7 +79,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to gb.
/// Looks up a localized string similar to GB.
/// </summary>
internal static string GBName {
get {
@@ -88,7 +88,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to gb/s.
/// Looks up a localized string similar to GB/s.
/// </summary>
internal static string GBPerSecond {
get {
@@ -97,7 +97,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to kb.
/// Looks up a localized string similar to kB.
/// </summary>
internal static string KBName {
get {
@@ -106,7 +106,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to kb/s.
/// Looks up a localized string similar to kB/s.
/// </summary>
internal static string KBPerSecond {
get {
@@ -115,7 +115,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to mb.
/// Looks up a localized string similar to MB.
/// </summary>
internal static string MBName {
get {
@@ -124,7 +124,7 @@ namespace Duplicati.GUI.HelperControls.Strings {
}
/// <summary>
/// Looks up a localized string similar to mb/s.
/// Looks up a localized string similar to MB/s.
/// </summary>
internal static string MBPerSecond {
get {
@@ -124,21 +124,21 @@
<value>bytes/s</value>
</data>
<data name="GBName" xml:space="preserve">
<value>gb</value>
<value>GB</value>
</data>
<data name="GBPerSecond" xml:space="preserve">
<value>gb/s</value>
<value>GB/s</value>
</data>
<data name="KBName" xml:space="preserve">
<value>kb</value>
<value>kB</value>
</data>
<data name="KBPerSecond" xml:space="preserve">
<value>kb/s</value>
<value>kB/s</value>
</data>
<data name="MBName" xml:space="preserve">
<value>mb</value>
<value>MB</value>
</data>
<data name="MBPerSecond" xml:space="preserve">
<value>mb/s</value>
<value>MB/s</value>
</data>
</root>
</root>
+40 -113
View File
@@ -33,10 +33,10 @@ namespace Duplicati.GUI.HelperControls {
this.miIncludeFileName = new System.Windows.Forms.ToolStripMenuItem();
this.miIncludeFileExt = new System.Windows.Forms.ToolStripMenuItem();
this.miIncludeFilePath = new System.Windows.Forms.ToolStripMenuItem();
this.miExlude = new System.Windows.Forms.ToolStripMenuItem();
this.miExclude = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFileName = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFileExt = new System.Windows.Forms.ToolStripMenuItem();
this.miExludeFilePath = new System.Windows.Forms.ToolStripMenuItem();
this.miExcludeFilePath = new System.Windows.Forms.ToolStripMenuItem();
this.imageList = new System.Windows.Forms.ImageList(this.components);
this.label1 = new System.Windows.Forms.Label();
this.btnCancel = new System.Windows.Forms.Button();
@@ -67,9 +67,9 @@ namespace Duplicati.GUI.HelperControls {
//
this.ctxSelection.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miInclude,
this.miExlude});
this.miExclude});
this.ctxSelection.Name = "ctxSelection";
this.ctxSelection.Size = new System.Drawing.Size(110, 48);
resources.ApplyResources(this.ctxSelection, "ctxSelection");
this.ctxSelection.Opened += new System.EventHandler(this.ctxSelection_Opened);
//
// miInclude
@@ -79,60 +79,52 @@ namespace Duplicati.GUI.HelperControls {
this.miIncludeFileExt,
this.miIncludeFilePath});
this.miInclude.Name = "miInclude";
this.miInclude.Size = new System.Drawing.Size(109, 22);
this.miInclude.Text = "Include";
resources.ApplyResources(this.miInclude, "miInclude");
//
// miIncludeFileName
//
this.miIncludeFileName.Name = "miIncludeFileName";
this.miIncludeFileName.Size = new System.Drawing.Size(195, 22);
resources.ApplyResources(this.miIncludeFileName, "miIncludeFileName");
this.miIncludeFileName.Tag = "1";
this.miIncludeFileName.Text = "Add filename filer";
this.miIncludeFileName.Click += new System.EventHandler(this.miIncludeFileName_Click);
//
// miIncludeFileExt
//
this.miIncludeFileExt.Name = "miIncludeFileExt";
this.miIncludeFileExt.Size = new System.Drawing.Size(195, 22);
this.miIncludeFileExt.Text = "Add file extension filter";
resources.ApplyResources(this.miIncludeFileExt, "miIncludeFileExt");
this.miIncludeFileExt.Click += new System.EventHandler(this.miIncludeFileExt_Click);
//
// miIncludeFilePath
//
this.miIncludeFilePath.Name = "miIncludeFilePath";
this.miIncludeFilePath.Size = new System.Drawing.Size(195, 22);
this.miIncludeFilePath.Text = "File path";
resources.ApplyResources(this.miIncludeFilePath, "miIncludeFilePath");
//
// miExlude
// miExclude
//
this.miExlude.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miExclude.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.miExcludeFileName,
this.miExcludeFileExt,
this.miExludeFilePath});
this.miExlude.Name = "miExlude";
this.miExlude.Size = new System.Drawing.Size(109, 22);
this.miExlude.Text = "Exlude";
this.miExcludeFilePath});
this.miExclude.Name = "miExclude";
resources.ApplyResources(this.miExclude, "miExclude");
//
// miExcludeFileName
//
this.miExcludeFileName.Name = "miExcludeFileName";
this.miExcludeFileName.Size = new System.Drawing.Size(195, 22);
this.miExcludeFileName.Text = "Add filename filter";
resources.ApplyResources(this.miExcludeFileName, "miExcludeFileName");
this.miExcludeFileName.Click += new System.EventHandler(this.addFilenameFilterToolStripMenuItem_Click);
//
// miExcludeFileExt
//
this.miExcludeFileExt.Name = "miExcludeFileExt";
this.miExcludeFileExt.Size = new System.Drawing.Size(195, 22);
this.miExcludeFileExt.Text = "Add file extension filter";
resources.ApplyResources(this.miExcludeFileExt, "miExcludeFileExt");
this.miExcludeFileExt.Click += new System.EventHandler(this.addFileExtensionFilterToolStripMenuItem1_Click);
//
// miExludeFilePath
// miExcludeFilePath
//
this.miExludeFilePath.Name = "miExludeFilePath";
this.miExludeFilePath.Size = new System.Drawing.Size(195, 22);
this.miExludeFilePath.Text = "File Path";
this.miExludeFilePath.Click += new System.EventHandler(this.addFilePathFilerToolStripMenuItem_Click);
this.miExcludeFilePath.Name = "miExcludeFilePath";
resources.ApplyResources(this.miExcludeFilePath, "miExcludeFilePath");
this.miExcludeFilePath.Click += new System.EventHandler(this.addFilePathFilerToolStripMenuItem_Click);
//
// imageList
//
@@ -151,48 +143,30 @@ namespace Duplicati.GUI.HelperControls {
//
// label1
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(9, 272);
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(37, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Filters:";
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(397, 418);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 3;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnClose_Click);
//
// label2
//
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label2.AutoSize = true;
resources.ApplyResources(this.label2, "label2");
this.label2.ForeColor = System.Drawing.Color.DimGray;
this.label2.Location = new System.Drawing.Point(12, 242);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(212, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Use context menu to add and remove filters";
//
// lvFilters
//
this.lvFilters.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.lvFilters, "lvFilters");
this.lvFilters.ContextMenuStrip = this.ctxFilters;
this.lvFilters.FullRowSelect = true;
this.lvFilters.Location = new System.Drawing.Point(12, 289);
this.lvFilters.Name = "lvFilters";
this.lvFilters.Size = new System.Drawing.Size(461, 123);
this.lvFilters.SmallImageList = this.imageList;
this.lvFilters.TabIndex = 5;
this.lvFilters.UseCompatibleStateImageBehavior = false;
this.lvFilters.View = System.Windows.Forms.View.List;
//
@@ -201,13 +175,12 @@ namespace Duplicati.GUI.HelperControls {
this.ctxFilters.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.removeFilterToolStripMenuItem});
this.ctxFilters.Name = "ctxFilters";
this.ctxFilters.Size = new System.Drawing.Size(147, 26);
resources.ApplyResources(this.ctxFilters, "ctxFilters");
//
// removeFilterToolStripMenuItem
//
this.removeFilterToolStripMenuItem.Name = "removeFilterToolStripMenuItem";
this.removeFilterToolStripMenuItem.Size = new System.Drawing.Size(146, 22);
this.removeFilterToolStripMenuItem.Text = "Remove Filter";
resources.ApplyResources(this.removeFilterToolStripMenuItem, "removeFilterToolStripMenuItem");
this.removeFilterToolStripMenuItem.Click += new System.EventHandler(this.removeFilterToolStripMenuItem_Click);
//
// scanWorker
@@ -218,60 +191,37 @@ namespace Duplicati.GUI.HelperControls {
//
// lbTotalSize
//
this.lbTotalSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lbTotalSize.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
this.lbTotalSize.Location = new System.Drawing.Point(324, 242);
resources.ApplyResources(this.lbTotalSize, "lbTotalSize");
this.lbTotalSize.Name = "lbTotalSize";
this.lbTotalSize.Size = new System.Drawing.Size(148, 18);
this.lbTotalSize.TabIndex = 11;
this.lbTotalSize.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 11);
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(101, 13);
this.label3.TabIndex = 12;
this.label3.Text = "Files to be included:";
//
// tbSearch
//
this.tbSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.tbSearch.Location = new System.Drawing.Point(321, 4);
resources.ApplyResources(this.tbSearch, "tbSearch");
this.tbSearch.Name = "tbSearch";
this.tbSearch.Size = new System.Drawing.Size(156, 20);
this.tbSearch.TabIndex = 13;
this.tbSearch.TextChanged += new System.EventHandler(this.tbSearch_TextChanged);
//
// btnSearch
//
this.btnSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnSearch.Image = ((System.Drawing.Image)(resources.GetObject("btnSearch.Image")));
this.btnSearch.Location = new System.Drawing.Point(291, 1);
resources.ApplyResources(this.btnSearch, "btnSearch");
this.btnSearch.Name = "btnSearch";
this.btnSearch.Size = new System.Drawing.Size(25, 25);
this.btnSearch.TabIndex = 14;
this.btnSearch.TabStop = false;
//
// btnClearSearch
//
this.btnClearSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.btnClearSearch, "btnClearSearch");
this.btnClearSearch.BackColor = System.Drawing.SystemColors.Window;
this.btnClearSearch.Image = ((System.Drawing.Image)(resources.GetObject("btnClearSearch.Image")));
this.btnClearSearch.Location = new System.Drawing.Point(458, 6);
this.btnClearSearch.Name = "btnClearSearch";
this.btnClearSearch.Size = new System.Drawing.Size(16, 16);
this.btnClearSearch.TabIndex = 15;
this.btnClearSearch.TabStop = false;
this.btnClearSearch.Visible = false;
this.btnClearSearch.Click += new System.EventHandler(this.btnClearSearch_Click);
//
// lvFiles
//
this.lvFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.lvFiles, "lvFiles");
this.lvFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chFile,
this.chFileExt,
@@ -279,11 +229,8 @@ namespace Duplicati.GUI.HelperControls {
this.chPath});
this.lvFiles.ContextMenuStrip = this.ctxSelection;
this.lvFiles.FullRowSelect = true;
this.lvFiles.Location = new System.Drawing.Point(15, 32);
this.lvFiles.Name = "lvFiles";
this.lvFiles.Size = new System.Drawing.Size(462, 205);
this.lvFiles.SmallImageList = this.imageList;
this.lvFiles.TabIndex = 16;
this.lvFiles.UseCompatibleStateImageBehavior = false;
this.lvFiles.View = System.Windows.Forms.View.Details;
this.lvFiles.VirtualMode = true;
@@ -293,55 +240,39 @@ namespace Duplicati.GUI.HelperControls {
//
// chFile
//
this.chFile.Text = "Filename";
this.chFile.Width = 116;
resources.ApplyResources(this.chFile, "chFile");
//
// chFileExt
//
this.chFileExt.Text = "Ext";
this.chFileExt.Width = 47;
resources.ApplyResources(this.chFileExt, "chFileExt");
//
// chSize
//
this.chSize.Text = "Size";
this.chSize.Width = 76;
resources.ApplyResources(this.chSize, "chSize");
//
// chPath
//
this.chPath.Text = "Path";
this.chPath.Width = 192;
resources.ApplyResources(this.chPath, "chPath");
//
// lbLoading
//
this.lbLoading.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.lbLoading, "lbLoading");
this.lbLoading.BackColor = System.Drawing.SystemColors.Control;
this.lbLoading.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbLoading.Location = new System.Drawing.Point(28, 98);
this.lbLoading.Name = "lbLoading";
this.lbLoading.Size = new System.Drawing.Size(427, 36);
this.lbLoading.TabIndex = 17;
this.lbLoading.Text = "Scanning files, please wait....";
this.lbLoading.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnOK
//
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
resources.ApplyResources(this.btnOK, "btnOK");
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnOK.Location = new System.Drawing.Point(312, 418);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 18;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// TestSearchSelection
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(486, 453);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.lbLoading);
this.Controls.Add(this.label3);
@@ -354,14 +285,10 @@ namespace Duplicati.GUI.HelperControls {
this.Controls.Add(this.lbTotalSize);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnCancel);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(400, 400);
this.Name = "TestSearchSelection";
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Test Search Selection";
this.Load += new System.EventHandler(this.dlgTestSearchSelection_Load);
this.ctxSelection.ResumeLayout(false);
this.ctxFilters.ResumeLayout(false);
@@ -379,7 +306,7 @@ namespace Duplicati.GUI.HelperControls {
private System.Windows.Forms.ToolStripMenuItem miInclude;
private System.Windows.Forms.ToolStripMenuItem miIncludeFileName;
private System.Windows.Forms.ToolStripMenuItem miIncludeFileExt;
private System.Windows.Forms.ToolStripMenuItem miExlude;
private System.Windows.Forms.ToolStripMenuItem miExclude;
private System.Windows.Forms.ToolStripMenuItem miExcludeFileName;
private System.Windows.Forms.ToolStripMenuItem miExcludeFileExt;
private System.Windows.Forms.Button btnCancel;
@@ -389,7 +316,7 @@ namespace Duplicati.GUI.HelperControls {
private System.ComponentModel.BackgroundWorker scanWorker;
private System.Windows.Forms.ContextMenuStrip ctxFilters;
private System.Windows.Forms.ToolStripMenuItem removeFilterToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem miExludeFilePath;
private System.Windows.Forms.ToolStripMenuItem miExcludeFilePath;
private System.Windows.Forms.Label lbTotalSize;
private System.Windows.Forms.ToolStripMenuItem miIncludeFilePath;
private System.Windows.Forms.Label label3;
@@ -78,7 +78,7 @@ namespace Duplicati.GUI.HelperControls {
long iA = (_ascending ? a : b).Size;
long iB = (_ascending ? b : a).Size;
return Convert.ToInt32(iA - iB);
return Math.Sign(iA - iB);
}
return 0;
@@ -371,7 +371,7 @@ namespace Duplicati.GUI.HelperControls {
miExcludeFileExt.Text = fileExt;
// Add Path items
miExludeFilePath.DropDownItems.Clear();
miExcludeFilePath.DropDownItems.Clear();
miIncludeFilePath.DropDownItems.Clear();
string fullpath = Utility.AppendDirSeparator(itm.Path);
@@ -395,14 +395,14 @@ namespace Duplicati.GUI.HelperControls {
string filter = string.Format(@"*\{0}", fullpath.Substring(s.Length));
miIncludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = true;
miExludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
miExcludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
}
foreach (string s in folderlist)
{
string filter = string.Format(@"{0}", s);
miIncludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = true;
miExludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
miExcludeFilePath.DropDownItems.Add(filter, null, FilterFilePath_Click).Tag = false;
}
}
@@ -120,6 +120,64 @@
<metadata name="ctxSelection.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="miIncludeFileName.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miIncludeFileName.Text" xml:space="preserve">
<value>Add filename filer</value>
</data>
<data name="miIncludeFileExt.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miIncludeFileExt.Text" xml:space="preserve">
<value>Add file extension filter</value>
</data>
<data name="miIncludeFilePath.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miIncludeFilePath.Text" xml:space="preserve">
<value>File path</value>
</data>
<data name="miInclude.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 22</value>
</data>
<data name="miInclude.Text" xml:space="preserve">
<value>Include</value>
</data>
<data name="miExcludeFileName.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miExcludeFileName.Text" xml:space="preserve">
<value>Add filename filter</value>
</data>
<data name="miExcludeFileExt.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miExcludeFileExt.Text" xml:space="preserve">
<value>Add file extension filter</value>
</data>
<data name="miExcludeFilePath.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 22</value>
</data>
<data name="miExcludeFilePath.Text" xml:space="preserve">
<value>File Path</value>
</data>
<data name="miExclude.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 22</value>
</data>
<data name="miExclude.Text" xml:space="preserve">
<value>Exclude</value>
</data>
<data name="ctxSelection.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 48</value>
</data>
<data name="&gt;&gt;ctxSelection.Name" xml:space="preserve">
<value>ctxSelection</value>
</data>
<data name="&gt;&gt;ctxSelection.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>120, 17</value>
</metadata>
@@ -127,143 +185,353 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACy
HQAAAk1TRnQBSQFMAgEBCgEAAbQBAAG0AQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8A/wD/ABkAASgBpAEoAf8BKAGkASgB/wwAAS0BmgEuAfYBKAGkASgB/wEq
AaIBKwH9ASgBpAEoAf8BIgEmASIBMQgAAwgBCwEoAaQBKAH/ASgBpAEoAf8EAAIoAaQB/wIoAaQB/wwA
Ai0BnQH2AigBpAH/AioBowH9AigBpAH/AiIBJgExCAACCAEJAQsCKAGkAf8CKAGkAf+EAAFCAcgBZQH/
AU0B2AF+Af8IAAEmASsBJgE4AUYB0QFpAf8BPgHFAVcB/wEvAZYBMwHuAU0B3AF4Af8BKgGnAS0B/wgA
ASoBogErAf0BWwHrAZ8B/wEoAaQBKAH/BAACSgHIAf8CWwHaAf8IAAImASsBOAJQAdMB/wJFAcYB/wEv
ATEBmAHuAlkB3QH/AisBpwH/CAACKgGjAf0CbQHsAf8CKQGiAf6EAAFBAccBYgH/AUwB1gF5Af8IAAEo
AaQBKAH/AUoB2QFxAf8BMAGYATMB8QQAAS0BrAE0Af8BSwHaAXMB/wE6AYcBPQHOAUABYQFEAYwBUgHg
AYgB/wE8AcABVgH/AQwBDQEMARAEAAJKAcgB/wJaAdgB/wgAAigBpAH/AVUBVAHaAf8BMAExAZoB8QQA
Ai8BrQH/AlcB3AH/AToBPQGIAc4BQAFCAWEBjAJiAeMB/wJEAcIB/wIMAQ0BEIQAAUEBxgFhAf8BSwHV
AXcB/wEpATEBKQI/AXQBRQGvAUYB0gFoAf8BOgHAAU0B/wEOAQ8BDgETBAABNQFCATcBWgFBAcwBXgH/
AT0BxQFWAf8BNQG3AUUB/wFSAeABhwH/AUEBbQFFAaEIAAJKAcgB/wJYAdcB/wIpATECPwFCAXYBrwJP
AdQB/wI/AcIB/wIOAQ8BEwQAATUBNgFDAVoCSgHOAf8CRQHHAf8COgG4Af8CYgHjAf8BQQFEAW8BoYgA
AUABxgFgAf8BVQHlAY8B/wFRAeABhAH/AU0B3AF4Af8BQwHOAWAB/wE0AZMBNwHmDAABMgGWATUB6wFL
AdkBcgH/AU8B3gF9Af8BKAGkASgB/wwAAkoBxwH/AmcB5wH/AmAB4gH/AlkB3gH/AUwBSwHQAf8BNAE2
AZQB5gwAATIBNQGXAesCVwHbAf8CXQHgAf8CKAGkAf+MAAFAAcYBYAH/AUoB1QF1Af8BKAGkASgB/wEo
AaUBKQH/AUcB1QFpAf8BOAG/AUoB/wMJAQwIAAE/AVwBRAGFAUcB1AFqAf8BTwHeAXwB/wEtAZ4BLwH3
DAACSgHHAf8CVwHWAf8CKAGkAf8CKQGlAf8BUgFRAdcB/wI+AcEB/wMJAQwIAAE/AUEBXgGFAlIB1gH/
Al0B4AH/AS0BLgGfAfeMAAFBAcYBYAH/AUoB1QF2Af8IAAExAbMBPAH/AUYB1QFmAf8BNgFGATgBXwQA
AwQBBgExAbMBPAH/AUoB2AFwAf8BOwHBAVMB/wFOAdsBfQH/AT0BVgFBAXkIAAJKAcgB/wJYAdcB/wgA
AjUBtAH/AlAB1wH/ATYBNwFHAV8EAAMEAQYCNQG0Af8CVwHbAf8CQwHDAf8CXQHeAf8BPQFAAVcBeYgA
AUEBxwFiAf8BSwHWAXgB/wFBAXEBQQGfAToBhgFAAdABQwHOAWMB/wFGAdMBZwH/ASYBKwEmATgEAAEp
AZ0BKwH7AUoB2QFxAf8BKAGkASgB/wE/AXgBRAG0AVQB4wGMAf8BNQG2AUUB/wMDAQQEAAJKAcgB/wJa
AdgB/wJBAXEBnwE6AT4BiQHQAk4B0AH/AlEB1QH/AiYBKwE4BAABKQEqAZ4B+wJXAdwB/wIoAaQB/wE/
AUIBegG0AmYB5gH/AjoBtwH/AwMBBIQAAUIByAFkAf8BWQHpAZkB/wFVAeUBjwH/AVIB4QGGAf8BTgHc
AXsB/wEpAaABKgH+BAABPwFdAUMBhAFIAdYBbgH/ATgBvAFLAf8BDgEPAQ4BEwQAASgBpQEpAf8BWwHq
AZ0B/wEqAZ0BKwH5BAACSgHIAf8CbAHrAf8CaAHoAf8CYwHkAf8CXQHgAf8CKQGiAf4EAAE/AUEBXgGE
AlUB2QH/Aj8BvgH/Ag4BDwETBAACKQGlAf8CbQHsAf8BKgErAZ4B+YQAAT4BgQE+AbsBPgGEAT4BvwE+
AYQBPgG/AT4BfAFDAbsBOAFKAToBZQgAATEBPQEzAVEBPgGCAT4BvwE9AVYBQAF4CAABEQESAREBFwE+
AYIBPgG/AUEBdgFCAawEAAI+AYEBuwI+AYQBvwI+AYQBvwE+AUABfwG7ATgBOQFKAWUIAAExATIBPQFR
Aj4BggG/AT0BPwFXAXgIAAIRARIBFwI+AYIBvwJBAXgBrP8A/wD/AIoAAQEDIQEwAyMBMwMjATMDIQEw
DAADHwEsAyMBMwMjATMDIwEzAyMBMwMjATMDIQEwDAADIwEzAyMBMxAAAx8BLAMjATMDIwEzAyEBMFsA
BAEBAgMDAQQDBQQHAQkDBgEIAwQBBgMDAQQDAQECAwABARAAAwIBAwGGAW8BUwHxAbcBgwE7Af8BtwGD
ATwB/wGJAW8BTgHyDAABWwFjAVsB4QFBAYUBQwH/AUIBhAFCAf8BQgGEAUIB/wFDAYQBQwH/AUMBhQFF
Af8BVwFyAVkB8ggAAyMBMwG3AYMBPAH/AbcBgwE8Af8DIwEzDAABWwFjAVsB4QFBAYUBRAH/AUIBhQFE
Af8BVwFyAVkB8lwAAwQBBQMJAQwDDQERAzEBTgMaASQDDwEUAw0BEQMJAQwDBAEFFAABtwGCATsB/wH7
Ac4BiAH/AfkBygGAAf8BuQGDATsB/wwAAUABhAFDAf8BngHoAckB/wFIAcgBkgH/AUoByAGTAf8BSwHI
AZQB/wFNAcwBmQH/AUIBhQFEAf8EAAMjATMBtQGBATkB/wH0AcQBcgH/AfQBxAFyAf8BtQGBATkB/wMj
ATMIAAE/AYQBQwH/AZ4B6QHKAf8BSwHMAZgB/wFCAYUBRAH/ZAADNwFbA5IB9ANaAcUDAQECIAABtgGB
ATkB/wH0AcsBigH/AfEBwAFtAf8BuAGCAToB/wwAAT8BhAFCAf8BuwHqAd0B/wG4AeYB2AH/AbkB5gHY
Af8BugHnAdkB/wG9AesB3gH/AUABhQFDAf8DIwEzAbUBgQE5Af8B8gHBAW4B/wHuAbwBagH/Ae4BvQFr
Af8B8gHBAW4B/wG4AYEBOQH/AyMBMwQAAT0BhAFCAf8BvAHrAd4B/wG9AesB3wH/AUABhQFDAf9gAAMW
AR4BagFrAWoB4gG8AcMBwAH/AakBrwGtAfsDTAGQIAABtgGBATkB/wHxAcoBkAH/AesBuAFlAf8BuAGC
AToB/wwAA1QBrgE/AYQBQgH/AT0BggE/Af8BPQGCAT8B/wE9AYIBPwH/AT8BhAFCAf8BVwFaAVcBxQG4
AYQBPAH/AfcBzgGPAf8B8gHJAYkB/wHtAcIBggH/AesBuQFnAf8B8gHJAYoB/wH5Ac4BjwH/AcIBhAE7
Af8EAAFUAVYBVAGrAT8BhAFCAf8BPwGEAUIB/wFWAVgBVgHBXAADAwEEA10BygHDAckBxgH/AbYBvQG6
Af8BugHBAb4B/wGLAY4BiwHxAy4BSBwAAbYBgQE4Af8B7wHNAZgB/wHmAbIBXgH/AbgBggE7Af8MAAMZ
BCMBMwMjATMDIwEzAxgBIggAAVwBWgFXAcUBtwGCAToB/wGzAXUBNQH/AfAByAGOAf8B6QG4AWQB/wGz
AXYBNwH/AbgBggE6Af8CWwFZAcQEAAMZBCMBMwMjATMDIwEzAxkBIxMAAQEDAgEDAwUBBwMIBAsBDwMN
ARIDDQESAwoBDgMIAQsDBQEHAwIBAxwAA1ABmwG0AbcBtgH8AbYBvQG6Af8BuwHCAb8B/wHHAc0BywH/
AdUB2QHXAf8DcAHkAw8BFBgAAbYBgQE4Af8B7gHPAaEB/wHgAawBVgH/AbkBgwE8Af8MAAFWAVkBVgG+
AUEBhQFDAf8BQgGEAUIB/wFDAYUBRQH/AVcBWgFXAb0QAAG2AYABOAH/AfABywGWAf8B5wG0AWEB/wG2
AYIBOgH/DAABVwFaAVcBvQFAAYUBQwH/AUIBhAFCAf8BQwGFAUUB/wFXAVkBVwG/HwABAQMEAQUDBgEI
AwYBCAMFAQcDAgEDIAADNQFXAYsBjgGLAfEBuQHAAb0B/wG9AcMBwAH/AcMByAHGAf8BxwHNAcsB/wHN
AdIB0AH/AdsB3gHdAf8DWwHHAwABARQAAbYBgQE3Af8B7wHTAaoB/wHaAaUBTwH/AbkBgwE8Af8MAAE/
AYQBQwH/AZ4B6AHJAf8BSQHJAZMB/wFNAcwBmAH/AUIBhQFEAf8QAAG2AYEBOAH/Ae8BzgGdAf8B5AGx
AVwB/wG4AYIBOwH/DAABPgGFAUMB/wGeAegByQH/AUkByQGTAf8BTQHMAZgB/wFCAYUBRAH/DAADSAGD
A2MB1QNjAdUDYwHUA18B0wNfAdMDXwHSA2AB0QNgAdEDYAHRA2AB0QNfAdIDXwHRAxIBGQwAAxQBGwFr
AmwB4AG+AcQBwQH/AbcBvgG7Af8BuwHCAb8B/wHAAcYBxAH/AcUBywHJAf8BywHQAc0B/wHQAdQB0gH/
Ab8BwgHBAfwDSgGNFAABtgGBATcB/wHwAdkBtAH/AdYBnwFIAf8BuAGEATwB/wwAAT0BhAFCAf8BuwHq
Ad0B/wG5AecB2QH/Ab0B6wHeAf8BQAGFAUMB/xAAAbYBgQE3Af8B8AHRAaQB/wHgAawBVgH/AbgBgwE7
Af8MAAE/AYQBQgH/AbsB6gHdAf8BuQHnAdkB/wG9AesB3gH/AUABhQFDAf8MAAMdASkDhAHuAdsB3gHd
Af8B0gHXAdUB/wHOAdMB0QH/AckBzgHMAf8BxQHKAcgB/wHAAcYBwwH/Ab0BwwHBAf8BvQHDAcEB/wG9
AcMBwQH/AcwB0QHPAf8DVwG3DAADAgEDA1wByQHFAcoByAH/AbcBvgG7Af8BtwG+AbsB/wG5AcABvQH/
Ab4BxQHCAf8BwwHJAcYB/wHJAc4BzAH/Ac0B0gHQAf8B1QHZAdcB/wOVAfMDLAFDCAADIQEwAyMBMwG3
AYEBNwH/Ae8B2wG9Af8B0AGaAUEB/wG4AYQBPQH/AyMBMwMhATAEAAFTAVUBUwGtAT4BhAFCAf8BPQGC
AUAB/wE/AYQBQgH/AVQBbAFUAe4QAAG2AYEBNwH/Ae8B1AGtAf8B3QGoAVIB/wG5AYMBPAH/DAADVAGu
AT8BhAFCAf8BPQGCAUAB/wE/AYQBQgH/AVkBawFZAesQAAM/AWwBsAKzAfoB0gHWAdQB/wHMAdEBzwH/
AccBzAHKAf8BwgHIAcUB/wG9AcMBwAH/AbcBvgG7Af8BtwG+AbsB/wHBAccBxQH/A2YB2gMKAQ4MAANM
AZMBtQG5AbcB/AHFAcsByAH/AcUBywHIAf8BxQHLAcgB/wHFAcsByAH/AcgBzgHLAf8BzAHRAc4B/wHP
AdQB0gH/AdMB1wHVAf8B1gHaAdgB/wHfAeIB4QH/A2oB4gMDAQQEAAGIAW8BTgHyAbkBhAE7Af8BtwGB
ATgB/wHaAbcBhwH/AcYBjwE9Af8BuAGDATwB/wG6AYQBOwH/AYsBbwFTAfEEAAMYASIDIwEzAyMBMwMY
ASIUAAG2AYEBNwH/AfAB2AG1Af8B2QGjAUwB/wG5AYMBPAH/DAADGQQjATMDIwEzAyMBMwMjATMDIwEz
AxkBIwwAA1QBrgHMAdABzgH+Ac4B0wHRAf8ByQHOAcwB/wHEAcoBxwH/Ab8BxQHCAf8BugHAAb4B/wG6
AcEBvgH/A38B7QMoATwQAAMgAS4DPwFsAz8BbAM/AWwDPgFrAz4BagM+AWoDPgFqAz0BaQM9AWkDPQFo
Az0BaAM7AWQDBAEGBAABuQGEATwB/wHoAdEBrAH/AcYBjwE2Af8BxgGPATgB/wHGAZABOQH/AcYBjwE2
Af8B7AHVAbIB/wHDAYQBOgH/BAABVgFYAVYBvAFBAYUBRAH/AUIBhQFEAf8BVwFaAVcBvRQAAbYBgAE2
Af8B8QHcAbwB/wHVAZ8BRwH/AbkBhAE8Af8MAAFWAVkBVgG+AUEBhQFDAf8BQgGEAUIB/wFCAYQBQgH/
AUMBhAFDAf8BQwGFAUUB/wFYAVoBWAHADAADBQEHA2MC2QHcAdsB/wHLAdABzgH/AcYBywHJAf8BvQHE
AcEB/wG4Ab8BvAH/AaYBqQGoAfoDSAGDVAABuAGCATgB/wHoAdABrQH/AcIBiwEwAf8BwgGLATAB/wHo
AdABrQH/AbkBggE4Af8IAAE+AYUBQwH/AZ4B6QHKAf8BSwHMAZgB/wFCAYUBRAH/FAABtwGBATYB/wHw
AdsBuwH/AdABmQFAAf8BugGDATsB/wwAAUABhAFDAf8BngHoAckB/wFIAcgBkgH/AUoByAGTAf8BSwHI
AZQB/wFNAcwBmQH/AUIBhQFEAf8QAAMcAScBfwGAAX8B6wHLAdABzgH/AbkBwAG9Af8BtgG9AboB/wHF
AcoByAH/A1kBv1wAAbcBgQE4Af8B6AHRAbAB/wHoAdEBsAH/AbgBgQE4Af8MAAE+AYQBQgH/AbwB6wHe
Af8BvQHrAd8B/wFAAYUBQwH/FAABuAGCATgB/wHvAdsBuwH/AeoB0AGpAf8BugGDAToB/wwAAT8BhAFC
Af8BuwHqAd0B/wG4AeYB2AH/AbkB5gHYAf8BugHnAdkB/wG9AesB3gH/AUABhQFDAf8UAAM9AWgBkgGX
AZQB9QG3Ab4BuwH/Ab4BxQHCAf8DZgHeAw0BEmAAAbgBgwE6Af8BuAGDAToB/xAAAVMBVQFTAbABPwGE
AUIB/wE/AYQBQgH/AVYBawFYAe8UAAJVAVMBsAG4AYIBOQH/AbgBgwE5Af8CVQFTAbAMAAFTAVUBUwGw
AT8BhAFCAf8BPQGCAT8B/wE9AYIBPwH/AT0BggE/Af8BPwGEAUIB/wFWAWsBWAHvGAADUgGpAbkBvgG8
Af4BggGDAYIB7wMtAUbwAAMFAQcDWwHEA0YBfv8AdQADEwEaASwCKwFDASwCKwFDASwCKwFD8AADVQGy
AUMB4gGMAf8BQgHhAYkB/wE0AcgBXAH/8AADVQGyATcB1AFXAf8BLgHLAT4B/wE0AckBXAH/sAADDAEQ
Az0BaAMqAUA0AANVAbIBPwHaAWEB/wEvAcwBQAH/ATQBygFcAf9cAAMQARYDFwEgAxcBIAMXASADFwEg
AxcBIAMXASADFwEgAxcBIAMXASADFwEgAxcBIAMXASADCQEMGAADCgEOAygBPANeAdUDTAGQAxMBGgMD
AQQsAANVAbIBSwHjAYEB/wE7AdQBTQH/ATUBywFdAf9cAANIAYMDWQG/A1kBvwNZAb8DWQG/A1kBvwNZ
Ab8DWQG/A1kBvwNZAb8DWQG/A1kBvwNZAb8DLgFIGAADNAFUA1kBxwNfAfMDXAHfA1ABmwMSARgcAAE+
AX8BPAH+AT4B0wFjAf8BPgHUAWUB/wE/AdQBZQH/AT4B0wFkAf8BVwHqAYQB/wFKAd8BXQH/AUgB4wGQ
Af8BNQHKAVsB/wEzAcgBWgH/ATIBxgFYAf8BMgHFAVgB/wMwAUwMAANIAYQCOgHTAf8CPAHUAf8CPgHU
Af8CPwHTAf8CPgHQAf8COwHMAf8CNwHHAf8CMwHDAf8CMQHCAf8CMQHCAf8CIAGoAf8MAAM/AW0DWwHD
A14B/wNeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNeAf8DXgH/A2QB5wNTAaUDKAE8EAADBAEGAy4BSANU
AaYDXgH/A14B/wNeAf8DYQHhA0IBdAMdASoYAAFBAYEBQQH+AVMB2gFmAf8BXAHkAYEB/wFiAewBhgH/
AWUB8AGKAf8BYgHvAYcB/wFZAeoBgQH/AUwB4QFgAf8BPwHXAVEB/wEzAc4BRAH/AS4BywE+Af8BQQHg
AYcB/wMwAUwMAANIAYQCTAHXAf8CUwHWAf8CXwHkAf8CZwHuAf8CZwHwAf8CWwHpAf8CSAHcAf8COAHQ
Af8CMwHMAf8CMwHMAf8CKgG3Af8QAAM6AWADXgH/A14B/wNeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNe
Af8DWQG/AwwBEBQAAwwBEANZAb8DXgH/A14B/wNeAf8DXgH/A14B/wNeAf8DQAFwGAABQQGCAUEB/gFM
AdYBgQH/AVQB3wGFAf8BWwHnAY0B/wFgAe4BkwH/AWUB7wGKAf8BYwHwAYgB/wFbAewBhgH/AVAB5wGC
Af8BRQHeAWcB/wE7AdcBXAH/AUIB4QGKAf8DMAFMDAADSAGEAk0B2gH/AlQB3QH/Al4B6AH/AmQB8AH/
AmQB8gH/AlsB7AH/AkwB4gH/Aj4B2AH/AjkB1AH/AjkB1AH/AioBtwH/EAADGgEkAz4BagNdAdcDXgH/
A14B/wNeAf8DXgH/A14B/wNeAf8DVAGmAy4BSAMEAQYQAAMoATwDUwGlA2QB5wNeAf8DXgH/A14B/wNe
Af8DXgH/A14B/wNcAckDQwF3AwcBChAAAVYCVQGxA1UBtQNVAbUDVQG1A1cB6AFgAe0BkwH/AWUB7wGJ
Af8BQQHWAYEB/wNVAbUDVQG1A1UBtQNVAbUDGAEhDAADLQFGA1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1
A1UBtQNVAbUDVQG1A1UBtQFWAlUBtBQAAwkBDANMAY8DXwHbA14B/wNeAf8DXgH/A18B8wNZAccDNAFU
FAADHwEsA0kBiANeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNcAc8DMAFMAxIBGBwA
A1UBsgFZAeUBiwH/AWAB6AGDAf8BQQHWAYEB/2QAAwEBAgMSARgDRwGCA14B/wNeAf8DXgH/A14B1QMo
ATwDCgEOFAADTgGZA2AB6wNeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNeAf8DXgH/A14B/wNmAfcDYQHh
AzQBVBwAA1UBsgFQAdsBgQH/AVcB3gGAAf8BQAHVAWkB/2wAAyYBOANMAZADZAHnA1oBwAM9AWgDDAEQ
GAADNgFYA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAAyEBMBwA
A1UBsgFHAdIBaAH/AUwB0wFfAf8BPwHUAWcB/3AAAxQBHANVAbUDQAFwdAADVAGrASIBuQEnAf8BIgG4
AScB/wEgAbUBIwH/cAADBgEIAyMBNAMXASD/AP8AXgABQgFNAT4HAAE+AwABKAMAAUADAAEwAwABAQEA
AQEFAAGAAQEWAAP/AQAE/wQABP8EAAT/BAABnAEYAZwBGAQAAZgBGAGYARgEAAGYAYABmAGABAABgAGB
AYABgQQAAYEBwwGBAcMEAAGAAcMBgAHDBAABmAGBAZgBgQQABIAEAAGBAQgBgQEIBAABgwEYAYMBGAQA
BP8EAAT/BAAE/wQAAYMBgAHnAYcC/wHgAQcBgwGAAcMBhwL/AfABBwHDAYABgQGHAv8B/AE/AcMBgAEA
AYcC/wH4AT8BwwGAAQABhwL/AfABHwHDAYMBAAGDAcABBwHwAQ8BwwGDAcMBgwH4AR8B4AEHAcMBgwHD
AYMBgAEBAcABBwHDAYMBwwGDAYABAwGAAQMBAAGDAcMBgwHAAQMBgAEBAQABhwHDAYAB4AEHAYABAQEA
AYcBwwGAAeABDwL/AYEBhwHDAYAB8AEfAv8BwwGHAcMBgAH4AR8C/wHnAYcBwwGAAfwBPwb/AfwBfwr/
AfwBPwb/AfwBPwb/AfwBPwT/AfwBfwH8AT8C/wGAAQEB+AEfAfwBPwL/AYABAQH4AR8BwAEBAcABAwGA
AQEB4AEPAcABAQHAAQMBwAEDAeABDwHAAQEBwAEDAcABAwHAAQMBwAEBAcABAwHgAQ8BgAEBAfwBPwL/
AeABDwGAAQEB/AE/Av8B+AEfAYABAQH8AT8C/wH8AX8C/wH8AT8C/wH8AX8S/ws=
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB4
HQAAAk1TRnQBSQFMAgEBCgEAAbwBAAG8AQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8A/wD/ABkAAScBpAEnAf8BJwGkAScB/wwAAS8BlgEwAfYBJwGkAScB/wEr
AaIBLAH9AScBpAEnAf8DIgExCAADCAELAScBpAEnAf8BJwGkAScB/wQAAicBpAH/AicBpAH/DAACLwGX
AfYCJwGkAf8CKwGjAf0CJwGkAf8DIgExCAADCAELAicBpAH/AicBpAH/hAABQQHIAWQB/wFMAdgBfQH/
CAADJgE4AUUB0QFoAf8BPQHFAVYB/wE1AY8BOQHuAUwB3AF3Af8BKQGnASwB/wgAASsBogEsAf0BWgHr
AZ8B/wEnAaQBJwH/BAACSQHIAf8CWgHaAf8IAAMmATgCTwHTAf8CRAHGAf8BNQE3AZEB7gJYAd0B/wIq
AacB/wgAAisBowH9AmwB7AH/AikBoAH+hAABQAHHAWEB/wFLAdYBeAH/CAABJwGkAScB/wFJAdkBcAH/
ATQBkwE3AfEEAAEsAawBMwH/AUoB2gFyAf8BRgF4AUcBzgFHAVEBSAGMAVEB4AGIAf8BOwHAAVUB/wMM
ARAEAAJJAcgB/wJZAdgB/wgAAicBpAH/AVQBUwHaAf8BNAE1AZUB8QQAAi4BrQH/AlYB3AH/AUYBRwF6
Ac4BRwFIAVEBjAJhAeMB/wJDAcIB/wMMARCEAAFAAcYBYAH/AUoB1QF2Af8BKQEqASkBPwFKAWQBTQGv
AUUB0gFnAf8BOQHAAUwB/wMOARMEAAE3ATgBNwFaAUABzAFdAf8BPAHFAVUB/wE0AbcBRAH/AVEB4AGH
Af8BSgFdAUwBoQgAAkkByAH/AlcB1wH/AikBKgE/AUoBSwFlAa8CTgHUAf8CPgHCAf8DDgETBAACNwE4
AVoCSQHOAf8CRAHHAf8COQG4Af8CYQHjAf8BSgFMAV0BoYgAAT8BxgFfAf8BVAHlAY8B/wFQAeABhAH/
AUwB3AF3Af8BQgHOAV8B/wE9AYsBPwHmDAABOAGOATwB6wFKAdkBcQH/AU4B3gF8Af8BJwGkAScB/wwA
AkkBxwH/AmYB5wH/Al8B4gH/AlgB3gH/AUsBSgHQAf8BPQE+AYsB5gwAATgBPAGPAesCVgHbAf8CXAHg
Af8CJwGkAf+MAAE/AcYBXwH/AUkB1QF0Af8BJwGkAScB/wEnAaUBKAH/AUYB1QFoAf8BNwG/AUkB/wMJ
AQwIAAFGAU0BRwGFAUYB1AFpAf8BTgHeAXsB/wExAZoBMwH3DAACSQHHAf8CVgHWAf8CJwGkAf8CKAGl
Af8BUQFQAdcB/wI9AcEB/wMJAQwIAAJGAU4BhQJRAdYB/wJcAeAB/wExATIBmwH3jAABQAHGAV8B/wFJ
AdUBdQH/CAABMAGzATsB/wFFAdUBZQH/ATgBOwE5AV8EAAMEAQYBMAGzATsB/wFJAdgBbwH/AToBwQFS
Af8BTQHbAXwB/wFCAUgBQwF5CAACSQHIAf8CVwHXAf8IAAI0AbQB/wJPAdcB/wI4ATsBXwQAAwQBBgI0
AbQB/wJWAdsB/wJCAcMB/wJcAd4B/wFCAUMBSAF5iAABQAHHAWEB/wFKAdYBdwH/AUoBXQFKAZ8BRQF4
AUkB0AFCAc4BYgH/AUUB0wFmAf8DJgE4BAABKQGbASsB+wFJAdkBcAH/AScBpAEnAf8BSgFoAUwBtAFT
AeMBjAH/ATQBtgFEAf8DAwEEBAACSQHIAf8CWQHYAf8CSgFdAZ8BRQFJAXsB0AJNAdAB/wJQAdUB/wMm
ATgEAAEpASoBnAH7AlYB3AH/AicBpAH/AUoBTAFoAbQCZQHmAf8COQG3Af8DAwEEhAABQQHIAWMB/wFY
AekBmQH/AVQB5QGPAf8BUQHhAYYB/wFNAdwBegH/ASkBngEqAf4EAAFGAU0BRwGEAUcB1gFtAf8BNwG8
AUoB/wMOARMEAAEnAaUBKAH/AVoB6gGdAf8BKwGZAS0B+QQAAkkByAH/AmsB6wH/AmcB6AH/AmIB5AH/
AlwB4AH/AikBoAH+BAACRgFOAYQCVAHZAf8CPgG+Af8DDgETBAACKAGlAf8CbAHsAf8BKwEtAZoB+YQA
AUkBbwFJAbsBSQFyAUkBvwFJAXIBSQG/AUkBbAFLAbsBOwE9ATsBZQgAATIBMwEyAVEBSQFwAUkBvwFC
AUcBQwF4CAADEQEXAUkBcAFJAb8BSwFkAUwBrAQAAkkBbwG7AkkBcgG/AkkBcgG/AUkBSwFsAbsCOwE9
AWUIAAIyATMBUQJJAXABvwFCAUMBSAF4CAADEQEXAkkBcAG/AksBZQGs/wD/AP8AigABAQMhATADIwEz
AyMBMwMhATAMAAMfASwDIwEzAyMBMwMjATMDIwEzAyMBMwMhATAMAAMjATMDIwEzEAADHwEsAyMBMwMj
ATMDIQEwWwAEAQECAwMBBAMFBAcBCQMGAQgDBAEGAwMBBAMBAQIDAAEBEAADAgEDAYMBbgFTAfEBtwGD
AToB/wG3AYMBOwH/AYUBbAFPAfIMAAFbAWEBWwHhAUABhQFCAf8BQQGEAUEB/wFBAYQBQQH/AUIBhAFC
Af8BQgGFAUQB/wFYAW8BWQHyCAADIwEzAbcBgwE7Af8BtwGDATsB/wMjATMMAAFbAWEBWwHhAUABhQFD
Af8BQQGFAUMB/wFYAW8BWQHyXAADBAEFAwkBDAMNAREDMQFOAxoBJAMPARQDDQERAwkBDAMEAQUUAAG3
AYIBOgH/AfsBzgGIAf8B+QHKAYAB/wG5AYMBOgH/DAABPwGEAUIB/wGeAegByQH/AUcByAGSAf8BSQHI
AZMB/wFKAcgBlAH/AUwBzAGZAf8BQQGFAUMB/wQAAyMBMwG1AYEBOAH/AfQBxAFxAf8B9AHEAXEB/wG1
AYEBOAH/AyMBMwgAAT4BhAFCAf8BngHpAcoB/wFKAcwBmAH/AUEBhQFDAf9kAAM3AVsDjgH0A1oBxQMB
AQIgAAG2AYEBOAH/AfQBywGKAf8B8QHAAWwB/wG4AYIBOQH/DAABPgGEAUEB/wG7AeoB3QH/AbgB5gHY
Af8BuQHmAdgB/wG6AecB2QH/Ab0B6wHeAf8BPwGFAUIB/wMjATMBtQGBATgB/wHyAcEBbQH/Ae4BvAFp
Af8B7gG9AWoB/wHyAcEBbQH/AbgBgQE4Af8DIwEzBAABPAGEAUEB/wG8AesB3gH/Ab0B6wHfAf8BPwGF
AUIB/2AAAxYBHgFoAWkBaAHiAbwBwwHAAf8BpQGrAakB+wNMAZAgAAG2AYEBOAH/AfEBygGQAf8B6wG4
AWQB/wG4AYIBOQH/DAADVAGuAT4BhAFBAf8BPAGCAT4B/wE8AYIBPgH/ATwBggE+Af8BPgGEAUEB/wFX
AVoBVwHFAbgBhAE7Af8B9wHOAY8B/wHyAckBiQH/Ae0BwgGCAf8B6wG5AWYB/wHyAckBigH/AfkBzgGP
Af8BwgGEAToB/wQAAVQBVgFUAasBPgGEAUEB/wE+AYQBQQH/AVYBWAFWAcFcAAMDAQQDXQHKAcMByQHG
Af8BtgG9AboB/wG6AcEBvgH/AYYBiQGGAfEDLgFIHAABtgGBATcB/wHvAc0BmAH/AeYBsgFdAf8BuAGC
AToB/wwAAxkEIwEzAyMBMwMjATMDGAEiCAACWgFXAcUBtwGCATkB/wGzAXQBNAH/AfAByAGOAf8B6QG4
AWMB/wGzAXUBNgH/AbgBggE5Af8CWwFZAcQEAAMZBCMBMwMjATMDIwEzAxkBIxMAAQEDAgEDAwUBBwMI
BAsBDwMNARIDDQESAwoBDgMIAQsDBQEHAwIBAxwAA1ABmwGyAbUBtAH8AbYBvQG6Af8BuwHCAb8B/wHH
Ac0BywH/AdUB2QHXAf8DawHkAw8BFBgAAbYBgQE3Af8B7gHPAaEB/wHgAawBVQH/AbkBgwE7Af8MAAFW
AVkBVgG+AUABhQFCAf8BQQGEAUEB/wFCAYUBRAH/AVcBWgFXAb0QAAG2AYABNwH/AfABywGWAf8B5wG0
AWAB/wG2AYIBOQH/DAABVwFaAVcBvQE/AYUBQgH/AUEBhAFBAf8BQgGFAUQB/wFXAVkBVwG/HwABAQME
AQUDBgEIAwYBCAMFAQcDAgEDIAADNQFXAYYBiQGGAfEBuQHAAb0B/wG9AcMBwAH/AcMByAHGAf8BxwHN
AcsB/wHNAdIB0AH/AdsB3gHdAf8DWgHHAwABARQAAbYBgQE2Af8B7wHTAaoB/wHaAaUBTgH/AbkBgwE7
Af8MAAE+AYQBQgH/AZ4B6AHJAf8BSAHJAZMB/wFMAcwBmAH/AUEBhQFDAf8QAAG2AYEBNwH/Ae8BzgGd
Af8B5AGxAVsB/wG4AYIBOgH/DAABPQGFAUIB/wGeAegByQH/AUgByQGTAf8BTAHMAZgB/wFBAYUBQwH/
DAADSAGDA2IB1QNiAdUDYAHUA14B0wNeAdMDXQHSA18B0QNfAdEDXwHRA18B0QNdAdIDXgHRAxIBGQwA
AxQBGwNpAeABvgHEAcEB/wG3Ab4BuwH/AbsBwgG/Af8BwAHGAcQB/wHFAcsByQH/AcsB0AHNAf8B0AHU
AdIB/wG9Ab8BvgH8A0oBjRQAAbYBgQE2Af8B8AHZAbQB/wHWAZ8BRwH/AbgBhAE7Af8MAAE8AYQBQQH/
AbsB6gHdAf8BuQHnAdkB/wG9AesB3gH/AT8BhQFCAf8QAAG2AYEBNgH/AfAB0QGkAf8B4AGsAVUB/wG4
AYMBOgH/DAABPgGEAUEB/wG7AeoB3QH/AbkB5wHZAf8BvQHrAd4B/wE/AYUBQgH/DAADHQEpA38B7gHb
Ad4B3QH/AdIB1wHVAf8BzgHTAdEB/wHJAc4BzAH/AcUBygHIAf8BwAHGAcMB/wG9AcMBwQH/Ab0BwwHB
Af8BvQHDAcEB/wHMAdEBzwH/A1cBtwwAAwIBAwNcAckBxQHKAcgB/wG3Ab4BuwH/AbcBvgG7Af8BuQHA
Ab0B/wG+AcUBwgH/AcMByQHGAf8ByQHOAcwB/wHNAdIB0AH/AdUB2QHXAf8DkQHzAywBQwgAAyEBMAMj
ATMBtwGBATYB/wHvAdsBvQH/AdABmgFAAf8BuAGEATwB/wMjATMDIQEwBAABUwFVAVMBrQE9AYQBQQH/
ATwBggE/Af8BPgGEAUEB/wFUAWoBVAHuEAABtgGBATYB/wHvAdQBrQH/Ad0BqAFRAf8BuQGDATsB/wwA
A1QBrgE+AYQBQQH/ATwBggE/Af8BPgGEAUEB/wFZAWoBWQHrEAADPwFsAa0CrwH6AdIB1gHUAf8BzAHR
Ac8B/wHHAcwBygH/AcIByAHFAf8BvQHDAcAB/wG3Ab4BuwH/AbcBvgG7Af8BwQHHAcUB/wNjAdoDCgEO
DAADTAGTAbMBtwG1AfwBxQHLAcgB/wHFAcsByAH/AcUBywHIAf8BxQHLAcgB/wHIAc4BywH/AcwB0QHO
Af8BzwHUAdIB/wHTAdcB1QH/AdYB2gHYAf8B3wHiAeEB/wNoAeIDAwEEBAABhAFsAU8B8gG5AYQBOgH/
AbcBgQE3Af8B2gG3AYcB/wHGAY8BPAH/AbgBgwE7Af8BugGEAToB/wGGAW4BUwHxBAADGAEiAyMBMwMj
ATMDGAEiFAABtgGBATYB/wHwAdgBtQH/AdkBowFLAf8BuQGDATsB/wwAAxkEIwEzAyMBMwMjATMDIwEz
AyMBMwMZASMMAANUAa4BygHOAcwB/gHOAdMB0QH/AckBzgHMAf8BxAHKAccB/wG/AcUBwgH/AboBwAG+
Af8BugHBAb4B/wN7Ae0DKAE8EAADIAEuAz8BbAM/AWwDPwFsAz4BawM+AWoDPgFqAz4BagM9AWkDPQFp
Az0BaAM9AWgDOwFkAwQBBgQAAbkBhAE7Af8B6AHRAawB/wHGAY8BNQH/AcYBjwE3Af8BxgGQATgB/wHG
AY8BNQH/AewB1QGyAf8BwwGEATkB/wQAAVYBWAFWAbwBQAGFAUMB/wFBAYUBQwH/AVcBWgFXAb0UAAG2
AYABNQH/AfEB3AG8Af8B1QGfAUYB/wG5AYQBOwH/DAABVgFZAVYBvgFAAYUBQgH/AUEBhAFBAf8BQQGE
AUEB/wFCAYQBQgH/AUIBhQFEAf8BWAFaAVgBwAwAAwUBBwNgAtkB3AHbAf8BywHQAc4B/wHGAcsByQH/
Ab0BxAHBAf8BuAG/AbwB/wGkAqYB+gNIAYNUAAG4AYIBNwH/AegB0AGtAf8BwgGLAS8B/wHCAYsBLwH/
AegB0AGtAf8BuQGCATcB/wgAAT0BhQFCAf8BngHpAcoB/wFKAcwBmAH/AUEBhQFDAf8UAAG3AYEBNQH/
AfAB2wG7Af8B0AGZAT8B/wG6AYMBOgH/DAABPwGEAUIB/wGeAegByQH/AUcByAGSAf8BSQHIAZMB/wFK
AcgBlAH/AUwBzAGZAf8BQQGFAUMB/xAAAxwBJwF7AXwBewHrAcsB0AHOAf8BuQHAAb0B/wG2Ab0BugH/
AcUBygHIAf8DWQG/XAABtwGBATcB/wHoAdEBsAH/AegB0QGwAf8BuAGBATcB/wwAAT0BhAFBAf8BvAHr
Ad4B/wG9AesB3wH/AT8BhQFCAf8UAAG4AYIBNwH/Ae8B2wG7Af8B6gHQAakB/wG6AYMBOQH/DAABPgGE
AUEB/wG7AeoB3QH/AbgB5gHYAf8BuQHmAdgB/wG6AecB2QH/Ab0B6wHeAf8BPwGFAUIB/xQAAz0BaAGN
AZIBjwH1AbcBvgG7Af8BvgHFAcIB/wNkAd4DDQESYAABuAGDATkB/wG4AYMBOQH/EAABUwFVAVMBsAE+
AYQBQQH/AT4BhAFBAf8BVwFoAVgB7xQAAlUBUwGwAbgBggE4Af8BuAGDATgB/wJVAVMBsAwAAVMBVQFT
AbABPgGEAUEB/wE8AYIBPgH/ATwBggE+Af8BPAGCAT4B/wE+AYQBQQH/AVcBaAFYAe8YAANSAakBtwG8
AboB/gF+AX8BfgHvAy0BRvAAAwUBBwNbAcQDRgF+/wB1AAMTARoBLAIrAUMBLAIrAUMBLAIrAUPwAANV
AbIBQgHiAYwB/wFBAeEBiQH/ATMByAFbAf/wAANVAbIBNgHUAVYB/wEtAcsBPQH/ATMByQFbAf+wAAMM
ARADPQFoAyoBQDQAA1UBsgE+AdoBYAH/AS4BzAE/Af8BMwHKAVsB/1wAAxABFgMXASADFwEgAxcBIAMX
ASADFwEgAxcBIAMXASADFwEgAxcBIAMXASADFwEgAxcBIAMJAQwYAAMKAQ4DKAE8A14B1QNMAZADEwEa
AwMBBCwAA1UBsgFKAeMBgQH/AToB1AFMAf8BNAHLAVwB/1wAA0gBgwNZAb8DWQG/A1kBvwNZAb8DWQG/
A1kBvwNZAb8DWQG/A1kBvwNZAb8DWQG/A1kBvwMuAUgYAAM0AVQDWQHHA18B8wNcAd8DUAGbAxIBGBwA
AT4BfwE8Af4BPQHTAWIB/wE9AdQBZAH/AT4B1AFkAf8BPQHTAWMB/wFWAeoBhAH/AUkB3wFcAf8BRwHj
AZAB/wE0AcoBWgH/ATIByAFZAf8BMQHGAVcB/wExAcUBVwH/AzABTAwAA0gBhAI5AdMB/wI7AdQB/wI9
AdQB/wI+AdMB/wI9AdAB/wI6AcwB/wI2AccB/wIyAcMB/wIwAcIB/wIwAcIB/wIfAagB/wwAAz8BbQNb
AcMDXQH/A10B/wNdAf8DXQH/A10B/wNdAf8DXQH/A10B/wNdAf8DZAHnA1MBpQMoATwQAAMEAQYDLgFI
A1QBpgNdAf8DXQH/A10B/wNhAeEDQgF0Ax0BKhgAAUEBfwFBAf4BUgHaAWUB/wFbAeQBgQH/AWEB7AGG
Af8BZAHwAYoB/wFhAe8BhwH/AVgB6gGBAf8BSwHhAV8B/wE+AdcBUAH/ATIBzgFDAf8BLQHLAT0B/wFA
AeABhwH/AzABTAwAA0gBhAJLAdcB/wJSAdYB/wJeAeQB/wJmAe4B/wJmAfAB/wJaAekB/wJHAdwB/wI3
AdAB/wIyAcwB/wIyAcwB/wIpAbcB/xAAAzoBYANdAf8DXQH/A10B/wNdAf8DXQH/A10B/wNdAf8DXQH/
A10B/wNZAb8DDAEQFAADDAEQA1kBvwNdAf8DXQH/A10B/wNdAf8DXQH/A10B/wNAAXAYAAFBAYABQQH+
AUsB1gGBAf8BUwHfAYUB/wFaAecBjQH/AV8B7gGTAf8BZAHvAYoB/wFiAfABiAH/AVoB7AGGAf8BTwHn
AYIB/wFEAd4BZgH/AToB1wFbAf8BQQHhAYoB/wMwAUwMAANIAYQCTAHaAf8CUwHdAf8CXQHoAf8CYwHw
Af8CYwHyAf8CWgHsAf8CSwHiAf8CPQHYAf8COAHUAf8COAHUAf8CKQG3Af8QAAMaASQDPgFqA10B1wNd
Af8DXQH/A10B/wNdAf8DXQH/A10B/wNUAaYDLgFIAwQBBhAAAygBPANTAaUDZAHnA10B/wNdAf8DXQH/
A10B/wNdAf8DXQH/A1wByQNDAXcDBwEKEAABVgJVAbEDVQG1A1UBtQNVAbUDVwHoAV8B7QGTAf8BZAHv
AYkB/wFAAdYBgQH/A1UBtQNVAbUDVQG1A1UBtQMYASEMAAMtAUYDVQG1A1UBtQNVAbUDVQG1A1UBtQNV
AbUDVQG1A1UBtQNVAbUDVQG1AVYCVQG0FAADCQEMA0wBjwNfAdsDXQH/A10B/wNdAf8DXwHzA1kBxwM0
AVQUAAMfASwDSQGIA10B/wNdAf8DXQH/A10B/wNdAf8DXQH/A10B/wNdAf8DXQH/A1wBzwMwAUwDEgEY
HAADVQGyAVgB5QGLAf8BXwHoAYMB/wFAAdYBgQH/ZAADAQECAxIBGANHAYIDXQH/A10B/wNdAf8DXgHV
AygBPAMKAQ4UAANOAZkDYAHrA10B/wNdAf8DXQH/A10B/wNdAf8DXQH/A10B/wNdAf8DXQH/A2YB9wNh
AeEDNAFUHAADVQGyAU8B2wGBAf8BVgHeAYAB/wE/AdUBaAH/bAADJgE4A0wBkANkAecDWgHAAz0BaAMM
ARAYAAM2AVgDRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADIQEw
HAADVQGyAUYB0gFnAf8BSwHTAV4B/wE+AdQBZgH/cAADFAEcA1UBtQNAAXB0AANUAasBIQG5ASYB/wEh
AbgBJgH/AR8BtQEiAf9wAAMGAQgDIwE0AxcBIP8A/wBeAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEB
AQABAQUAAYABARYAA/8BAAT/BAAE/wQABP8EAAGcARgBnAEYBAABmAEYAZgBGAQAAZgBgAGYAYAEAAGA
AYEBgAGBBAABgQHDAYEBwwQAAYABwwGAAcMEAAGYAYEBmAGBBAAEgAQAAYEBCAGBAQgEAAGDARgBgwEY
BAAE/wQABP8EAAT/BAABgwGAAecBhwL/AeABBwGDAYABwwGHAv8B8AEHAcMBgAGBAYcC/wH8AT8BwwGA
AQABhwL/AfgBPwHDAYABAAGHAv8B8AEfAcMBgwEAAYMBwAEHAfABDwHDAYMBwwGDAfgBHwHgAQcBwwGD
AcMBgwGAAQEBwAEHAcMBgwHDAYMBgAEDAYABAwEAAYMBwwGDAcABAwGAAQEBAAGHAcMBgAHgAQcBgAEB
AQABhwHDAYAB4AEPAv8BgQGHAcMBgAHwAR8C/wHDAYcBwwGAAfgBHwL/AecBhwHDAYAB/AE/Bv8B/AF/
Cv8B/AE/Bv8B/AE/Bv8B/AE/BP8B/AF/AfwBPwL/AYABAQH4AR8B/AE/Av8BgAEBAfgBHwHAAQEBwAED
AYABAQHgAQ8BwAEBAcABAwHAAQMB4AEPAcABAQHAAQMBwAEDAcABAwHAAQEBwAEDAeABDwGAAQEB/AE/
Av8B4AEPAYABAQH8AT8C/wH4AR8BgAEBAfwBPwL/AfwBfwL/AfwBPwL/AfwBfxL/Cw==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 272</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Filters:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>397, 418</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 242</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 13</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Use context menu to add and remove filters</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="lvFilters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<metadata name="ctxFilters.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>332, 17</value>
</metadata>
<data name="removeFilterToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 22</value>
</data>
<data name="removeFilterToolStripMenuItem.Text" xml:space="preserve">
<value>Remove Filter</value>
</data>
<data name="ctxFilters.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 26</value>
</data>
<data name="&gt;&gt;ctxFilters.Name" xml:space="preserve">
<value>ctxFilters</value>
</data>
<data name="&gt;&gt;ctxFilters.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lvFilters.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 289</value>
</data>
<data name="lvFilters.Size" type="System.Drawing.Size, System.Drawing">
<value>461, 123</value>
</data>
<data name="lvFilters.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;lvFilters.Name" xml:space="preserve">
<value>lvFilters</value>
</data>
<data name="&gt;&gt;lvFilters.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lvFilters.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvFilters.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<metadata name="scanWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>220, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbTotalSize.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="lbTotalSize.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopLeft</value>
</data>
<data name="lbTotalSize.Location" type="System.Drawing.Point, System.Drawing">
<value>324, 242</value>
</data>
<data name="lbTotalSize.Size" type="System.Drawing.Size, System.Drawing">
<value>148, 18</value>
</data>
<data name="lbTotalSize.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="lbTotalSize.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopRight</value>
</data>
<data name="&gt;&gt;lbTotalSize.Name" xml:space="preserve">
<value>lbTotalSize</value>
</data>
<data name="&gt;&gt;lbTotalSize.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbTotalSize.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lbTotalSize.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 11</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 13</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Files to be included:</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="tbSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="tbSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>321, 4</value>
</data>
<data name="tbSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 20</value>
</data>
<data name="tbSearch.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="&gt;&gt;tbSearch.Name" xml:space="preserve">
<value>tbSearch</value>
</data>
<data name="&gt;&gt;tbSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tbSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tbSearch.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="btnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@@ -299,6 +567,30 @@
DjIHM32Q3wAAAAAASUVORK5CYII=
</value>
</data>
<data name="btnSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>291, 1</value>
</data>
<data name="btnSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>25, 25</value>
</data>
<data name="btnSearch.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;btnSearch.Name" xml:space="preserve">
<value>btnSearch</value>
</data>
<data name="&gt;&gt;btnSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnSearch.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="btnClearSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="btnClearSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
R0lGODlhEAAQAIZ1AP75+f3j4/jFxv7k5P/u7v74+OovMfddYPhfYv/6+v7k5f/7+/93evhiZP97fv9b
@@ -314,6 +606,147 @@
yDFjQMDAMiFIYK1T4E3lgjY2CyxgWazpgQEBADs=
</value>
</data>
<data name="btnClearSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>458, 6</value>
</data>
<data name="btnClearSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="btnClearSearch.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="btnClearSearch.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;btnClearSearch.Name" xml:space="preserve">
<value>btnClearSearch</value>
</data>
<data name="&gt;&gt;btnClearSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnClearSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnClearSearch.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="lvFiles.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="chFile.Text" xml:space="preserve">
<value>Filename</value>
</data>
<data name="chFile.Width" type="System.Int32, mscorlib">
<value>116</value>
</data>
<data name="chFileExt.Text" xml:space="preserve">
<value>Ext</value>
</data>
<data name="chFileExt.Width" type="System.Int32, mscorlib">
<value>47</value>
</data>
<data name="chSize.Text" xml:space="preserve">
<value>Size</value>
</data>
<data name="chSize.Width" type="System.Int32, mscorlib">
<value>76</value>
</data>
<data name="chPath.Text" xml:space="preserve">
<value>Path</value>
</data>
<data name="chPath.Width" type="System.Int32, mscorlib">
<value>192</value>
</data>
<data name="lvFiles.Location" type="System.Drawing.Point, System.Drawing">
<value>15, 32</value>
</data>
<data name="lvFiles.Size" type="System.Drawing.Size, System.Drawing">
<value>462, 205</value>
</data>
<data name="lvFiles.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;lvFiles.Name" xml:space="preserve">
<value>lvFiles</value>
</data>
<data name="&gt;&gt;lvFiles.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lvFiles.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvFiles.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="lbLoading.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="lbLoading.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 15.75pt</value>
</data>
<data name="lbLoading.Location" type="System.Drawing.Point, System.Drawing">
<value>28, 98</value>
</data>
<data name="lbLoading.Size" type="System.Drawing.Size, System.Drawing">
<value>427, 36</value>
</data>
<data name="lbLoading.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="lbLoading.Text" xml:space="preserve">
<value>Scanning files, please wait....</value>
</data>
<data name="lbLoading.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="&gt;&gt;lbLoading.Name" xml:space="preserve">
<value>lbLoading</value>
</data>
<data name="&gt;&gt;lbLoading.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbLoading.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lbLoading.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="btnOK.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>312, 418</value>
</data>
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="btnOK.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>486, 453</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
@@ -817,4 +1250,109 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==
</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>400, 400</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Test Search Selection</value>
</data>
<data name="&gt;&gt;miInclude.Name" xml:space="preserve">
<value>miInclude</value>
</data>
<data name="&gt;&gt;miInclude.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miIncludeFileName.Name" xml:space="preserve">
<value>miIncludeFileName</value>
</data>
<data name="&gt;&gt;miIncludeFileName.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miIncludeFileExt.Name" xml:space="preserve">
<value>miIncludeFileExt</value>
</data>
<data name="&gt;&gt;miIncludeFileExt.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miIncludeFilePath.Name" xml:space="preserve">
<value>miIncludeFilePath</value>
</data>
<data name="&gt;&gt;miIncludeFilePath.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miExclude.Name" xml:space="preserve">
<value>miExclude</value>
</data>
<data name="&gt;&gt;miExclude.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miExcludeFileName.Name" xml:space="preserve">
<value>miExcludeFileName</value>
</data>
<data name="&gt;&gt;miExcludeFileName.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miExcludeFileExt.Name" xml:space="preserve">
<value>miExcludeFileExt</value>
</data>
<data name="&gt;&gt;miExcludeFileExt.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;miExcludeFilePath.Name" xml:space="preserve">
<value>miExcludeFilePath</value>
</data>
<data name="&gt;&gt;miExcludeFilePath.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;removeFilterToolStripMenuItem.Name" xml:space="preserve">
<value>removeFilterToolStripMenuItem</value>
</data>
<data name="&gt;&gt;removeFilterToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;scanWorker.Name" xml:space="preserve">
<value>scanWorker</value>
</data>
<data name="&gt;&gt;scanWorker.Type" xml:space="preserve">
<value>System.ComponentModel.BackgroundWorker, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chFile.Name" xml:space="preserve">
<value>chFile</value>
</data>
<data name="&gt;&gt;chFile.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chFileExt.Name" xml:space="preserve">
<value>chFileExt</value>
</data>
<data name="&gt;&gt;chFileExt.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chSize.Name" xml:space="preserve">
<value>chSize</value>
</data>
<data name="&gt;&gt;chSize.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chPath.Name" xml:space="preserve">
<value>chPath</value>
</data>
<data name="&gt;&gt;chPath.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>TestSearchSelection</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
@@ -169,7 +169,7 @@
<value>NoControl</value>
</data>
<data name="ThreadPriorityEnabled.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<value>0, 2</value>
</data>
<data name="ThreadPriorityEnabled.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 17</value>
+4 -3
View File
@@ -117,12 +117,13 @@ namespace Duplicati.GUI
//We add it last, to allow the user to override with other versions
if (!Library.Utility.Utility.IsClientLinux)
{
string wintools = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "win-tools");
Environment.SetEnvironmentVariable("PATH",
Environment.GetEnvironmentVariable("PATH") +
System.IO.Path.PathSeparator.ToString() +
System.IO.Path.Combine(
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
"win-tools")
wintools +
System.IO.Path.PathSeparator.ToString() +
System.IO.Path.Combine(wintools, "gpg") //GPG needs to be in a subfolder for wrapping reasons
);
}
+1 -2
View File
@@ -48,8 +48,7 @@ namespace Duplicati.GUI
//If we run on windows with MS.Net we can use the mixed mode assemblies
if (!Duplicati.Library.Utility.Utility.IsClientLinux && !Duplicati.Library.Utility.Utility.IsMono)
{
//On my x64 system, 32bit appears to work correctly as 32 bit, where loading the 64bit dll fails
if (IntPtr.Size == 8 /*|| (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor())*/)
if (Library.Utility.Utility.Is64BitProcess)
{
if (System.IO.File.Exists(System.IO.Path.Combine(System.IO.Path.Combine(basePath, "win64"), filename)))
assemblyPath = System.IO.Path.Combine(basePath, "win64");
+8 -8
View File
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -61,7 +61,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to While backup is running (and on errors/warnings).
/// Looks up a localized string similar to During backup, errors, warnings.
/// </summary>
internal static string BalloonNotification_Continous {
get {
@@ -70,7 +70,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to On backup errors.
/// Looks up a localized string similar to Errors.
/// </summary>
internal static string BalloonNotification_Errors {
get {
@@ -79,7 +79,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to No balloon notifications.
/// Looks up a localized string similar to No notifications.
/// </summary>
internal static string BalloonNotification_Off {
get {
@@ -88,7 +88,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to On backup start (and errors/warnings).
/// Looks up a localized string similar to Start, errors, warnings.
/// </summary>
internal static string BalloonNotification_Start {
get {
@@ -97,7 +97,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to On backup start and stop (and errors/warnings).
/// Looks up a localized string similar to Start, stop, errors, warnings.
/// </summary>
internal static string BalloonNotification_StartAndStop {
get {
@@ -106,7 +106,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to On backup errors and warnings.
/// Looks up a localized string similar to Errors, warnings.
/// </summary>
internal static string BalloonNotification_Warnings {
get {
@@ -152,7 +152,7 @@ namespace Duplicati.GUI.Strings {
}
/// <summary>
/// Looks up a localized string similar to Duplicati Setup, version {0}.
/// Looks up a localized string similar to Duplicati Options, version {0}.
/// </summary>
internal static string DialogTitle {
get {
+7 -7
View File
@@ -118,22 +118,22 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BalloonNotification_Continous" xml:space="preserve">
<value>While backup is running (and on errors/warnings)</value>
<value>While running, and on errors, warnings</value>
</data>
<data name="BalloonNotification_Errors" xml:space="preserve">
<value>On backup errors</value>
<value>On errors</value>
</data>
<data name="BalloonNotification_Off" xml:space="preserve">
<value>No balloon notifications</value>
<value>No notifications</value>
</data>
<data name="BalloonNotification_Start" xml:space="preserve">
<value>On backup start (and errors/warnings)</value>
<value>On start, errors, warnings</value>
</data>
<data name="BalloonNotification_StartAndStop" xml:space="preserve">
<value>On backup start and stop (and errors/warnings)</value>
<value>On start, stop, errors, warnings</value>
</data>
<data name="BalloonNotification_Warnings" xml:space="preserve">
<value>On backup errors and warnings</value>
<value>On errors, warnings</value>
</data>
<data name="CacheSize" xml:space="preserve">
<value>Cache size: {0}</value>
@@ -153,7 +153,7 @@
<comment>A string displayed to denote the current default language</comment>
</data>
<data name="DialogTitle" xml:space="preserve">
<value>Duplicati Setup, version {0}</value>
<value>Duplicati Options, version {0}</value>
<comment>The dialog title with version number</comment>
</data>
<data name="EncryptionModuleLoadError" xml:space="preserve">
+48 -11
View File
@@ -28,11 +28,12 @@ namespace Duplicati.Library.Backend
public class FTP : IBackend_v2, IStreamingBackend, IBackendGUI
{
private System.Net.NetworkCredential m_userInfo;
private string m_url;
private readonly string m_url;
private bool m_useSSL = false;
private bool m_defaultPassive = true;
private bool m_passive = false;
private readonly bool m_useSSL = false;
private readonly bool m_defaultPassive = true;
private readonly bool m_passive = false;
private readonly bool m_listVerify = true;
public FTP()
{
@@ -85,9 +86,7 @@ namespace Duplicati.Library.Backend
m_useSSL = Utility.Utility.ParseBoolOption(options, "use-ssl");
//HACK: We modify the commandline options to alter the setting it the ftp backend is loaded
if (!options.ContainsKey("list-verify-uploads"))
options.Add("list-verify-uploads", "true");
m_listVerify = !Utility.Utility.ParseBoolOption(options, "disable-upload-verify");
if (Utility.Utility.ParseBoolOption(options, "ftp-passive"))
{
@@ -171,7 +170,12 @@ namespace Duplicati.Library.Backend
public List<IFileEntry> List()
{
System.Net.FtpWebRequest req = CreateRequest("");
return List("");
}
public List<IFileEntry> List(string filename)
{
System.Net.FtpWebRequest req = CreateRequest(filename);
req.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;
req.UseBinary = false;
@@ -209,9 +213,32 @@ namespace Duplicati.Library.Backend
req = CreateRequest(remotename);
req.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
req.UseBinary = true;
long streamLen = -1;
try { streamLen = input.Length; }
catch {}
using (System.IO.Stream rs = req.GetRequestStream())
Utility.Utility.CopyStream(input, rs, true);
if (m_listVerify)
{
List<IFileEntry> files = List(remotename);
StringBuilder sb = new StringBuilder();
foreach(IFileEntry fe in files)
if (fe.Name.Equals(remotename) || fe.Name.EndsWith("/" + remotename) || fe.Name.EndsWith("\\" + remotename))
{
if (fe.Size < 0 || streamLen < 0 || fe.Size == streamLen)
return;
throw new Exception(string.Format(Strings.FTPBackend.ListVerifySizeFailure, remotename, fe.Size, streamLen));
}
else
sb.AppendLine(fe.Name);
throw new Exception(string.Format(Strings.FTPBackend.ListVerifyFailure, remotename, sb.ToString()));
}
}
catch (System.Net.WebException wex)
{
@@ -263,6 +290,7 @@ namespace Duplicati.Library.Backend
new CommandLineArgument("ftp-password", CommandLineArgument.ArgumentType.String, Strings.FTPBackend.DescriptionFTPPasswordShort, Strings.FTPBackend.DescriptionFTPPasswordLong),
new CommandLineArgument("ftp-username", CommandLineArgument.ArgumentType.String, Strings.FTPBackend.DescriptionFTPUsernameShort, Strings.FTPBackend.DescriptionFTPUsernameLong),
new CommandLineArgument("use-ssl", CommandLineArgument.ArgumentType.Boolean, Strings.FTPBackend.DescriptionUseSSLShort, Strings.FTPBackend.DescriptionUseSSLLong),
new CommandLineArgument("disable-upload-verify", CommandLineArgument.ArgumentType.Boolean, Strings.FTPBackend.DescriptionDisableUploadVerifyShort, Strings.FTPBackend.DescriptionDisableUploadVerifyLong),
});
}
}
@@ -286,10 +314,19 @@ namespace Duplicati.Library.Backend
}
#endregion
private System.Net.FtpWebRequest CreateRequest(string remotename)
{
System.Net.FtpWebRequest req = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(m_url + remotename);
return CreateRequest(remotename, false);
}
private System.Net.FtpWebRequest CreateRequest(string remotename, bool createFolder)
{
string url = m_url;
if (createFolder && url.EndsWith("/"))
url = url.Substring(0, url.Length - 1);
System.Net.FtpWebRequest req = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(url + remotename);
if (m_userInfo != null)
req.Credentials = m_userInfo;
@@ -317,7 +354,7 @@ namespace Duplicati.Library.Backend
public void CreateFolder()
{
System.Net.FtpWebRequest req = CreateRequest("");
System.Net.FtpWebRequest req = CreateRequest("", true);
req.Method = System.Net.WebRequestMethods.Ftp.MakeDirectory;
req.KeepAlive = false;
using (req.GetResponse())
+237 -229
View File
@@ -1,229 +1,237 @@
namespace Duplicati.Library.Backend
{
partial class FTPUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FTPUI));
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.Servername = new System.Windows.Forms.TextBox();
this.Path = new System.Windows.Forms.TextBox();
this.Username = new System.Windows.Forms.TextBox();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.Port = new System.Windows.Forms.NumericUpDown();
this.TestConnection = new System.Windows.Forms.Button();
this.PassiveConnection = new System.Windows.Forms.CheckBox();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Password
//
resources.ApplyResources(this.Password, "Password");
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65500,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
21,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// PassiveConnection
//
resources.ApplyResources(this.PassiveConnection, "PassiveConnection");
this.PassiveConnection.Name = "PassiveConnection";
this.PassiveConnection.UseVisualStyleBackColor = true;
this.PassiveConnection.CheckedChanged += new System.EventHandler(this.PassiveConnection_CheckedChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// FTPUI
//
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.Username);
this.Controls.Add(this.Password);
this.Controls.Add(this.label4);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.label3);
this.Controls.Add(this.PassiveConnection);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "FTPUI";
resources.ApplyResources(this, "$this");
this.Load += new System.EventHandler(this.FTPUI_Load);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Username;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.CheckBox PassiveConnection;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.GroupBox SSLGroup;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.CheckBox AcceptAnyHash;
}
}
namespace Duplicati.Library.Backend
{
partial class FTPUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FTPUI));
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.Servername = new System.Windows.Forms.TextBox();
this.Path = new System.Windows.Forms.TextBox();
this.Username = new System.Windows.Forms.TextBox();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.Port = new System.Windows.Forms.NumericUpDown();
this.TestConnection = new System.Windows.Forms.Button();
this.PassiveConnection = new System.Windows.Forms.CheckBox();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
this.label6 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Password
//
resources.ApplyResources(this.Password, "Password");
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
21,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// PassiveConnection
//
resources.ApplyResources(this.PassiveConnection, "PassiveConnection");
this.PassiveConnection.Name = "PassiveConnection";
this.PassiveConnection.UseVisualStyleBackColor = true;
this.PassiveConnection.CheckedChanged += new System.EventHandler(this.PassiveConnection_CheckedChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.Name = "label6";
//
// FTPUI
//
this.Controls.Add(this.label6);
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.Username);
this.Controls.Add(this.Password);
this.Controls.Add(this.label4);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.label3);
this.Controls.Add(this.PassiveConnection);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "FTPUI";
resources.ApplyResources(this, "$this");
this.Load += new System.EventHandler(this.FTPUI_Load);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Username;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.CheckBox PassiveConnection;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.GroupBox SSLGroup;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.CheckBox AcceptAnyHash;
private System.Windows.Forms.Label label6;
}
}
+39 -18
View File
@@ -144,7 +144,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>14</value>
<value>15</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -171,7 +171,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>13</value>
<value>14</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -198,7 +198,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -225,7 +225,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -252,7 +252,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;label5.ZOrder" xml:space="preserve">
<value>12</value>
<value>13</value>
</data>
<data name="Servername.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 16</value>
@@ -273,7 +273,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;Servername.ZOrder" xml:space="preserve">
<value>11</value>
<value>12</value>
</data>
<data name="Path.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 40</value>
@@ -294,7 +294,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;Path.ZOrder" xml:space="preserve">
<value>10</value>
<value>11</value>
</data>
<data name="Username.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 64</value>
@@ -315,14 +315,11 @@
<value>$this</value>
</data>
<data name="&gt;&gt;Username.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="Password.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 88</value>
</data>
<data name="Password.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
<value>*</value>
</data>
<data name="Password.Size" type="System.Drawing.Size, System.Drawing">
<value>176, 20</value>
</data>
@@ -339,7 +336,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;Password.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="Port.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 112</value>
@@ -360,7 +357,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;Port.ZOrder" xml:space="preserve">
<value>9</value>
<value>10</value>
</data>
<data name="TestConnection.Location" type="System.Drawing.Point, System.Drawing">
<value>368, 184</value>
@@ -384,7 +381,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;TestConnection.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="PassiveConnection.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -411,7 +408,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;PassiveConnection.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="CreateFolderButton.Location" type="System.Drawing.Point, System.Drawing">
<value>392, 40</value>
@@ -435,7 +432,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;CreateFolderButton.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="UseSSL.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -466,7 +463,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;UseSSL.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="AcceptSpecifiedHash.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -574,7 +571,31 @@
<value>$this</value>
</data>
<data name="&gt;&gt;SSLGroup.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 176</value>
</data>
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
<value>344, 56</value>
</data>
<data name="label6.TabIndex" type="System.Int32, mscorlib">
<value>31</value>
</data>
<data name="label6.Text" xml:space="preserve">
<value>Note: Some FTP servers have trouble dealing with more than 2000 files. For this reason, you are advised to select a large volume size so the number of files is low.</value>
</data>
<data name="&gt;&gt;label6.Name" xml:space="preserve">
<value>label6</value>
</data>
<data name="&gt;&gt;label6.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label6.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
+37 -1
View File
@@ -194,5 +194,41 @@ namespace Duplicati.Library.Backend.Strings {
return ResourceManager.GetString("MissingFolderError", resourceCulture);
}
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} was uploaded but not found afterwards, the file listing returned {1}.
/// </summary>
internal static string ListVerifyFailure {
get {
return ResourceManager.GetString("ListVerifyFailure", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} was uploaded but the returned size was {1} and it was expected to be {2}.
/// </summary>
internal static string ListVerifySizeFailure {
get {
return ResourceManager.GetString("ListVerifySizeFailure", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Disable upload verification.
/// </summary>
internal static string DescriptionDisableUploadVerifyShort {
get {
return ResourceManager.GetString("DescriptionDisableUploadVerifyShort", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to To protect against network failures, every upload will be attempted verified. Use this option to disable this verfication to make the upload faster by more unsafe..
/// </summary>
internal static string DescriptionDisableUploadVerifyLong {
get {
return ResourceManager.GetString("DescriptionDisableUploadVerifyLong", resourceCulture);
}
}
}
}
@@ -162,4 +162,16 @@
<data name="MissingFolderError" xml:space="preserve">
<value>The folder {0} was not found, message: {1}</value>
</data>
<data name="ListVerifyFailure" xml:space="preserve">
<value>The file {0} was uploaded but not found afterwards, the file listing returned {1}</value>
</data>
<data name="ListVerifySizeFailure" xml:space="preserve">
<value>The file {0} was uploaded but the returned size was {1} and it was expected to be {2}</value>
</data>
<data name="DescriptionDisableUploadVerifyShort" xml:space="preserve">
<value>Disable upload verification</value>
</data>
<data name="DescriptionDisableUploadVerifyLong" xml:space="preserve">
<value>To protect against network failures, every upload will be attempted verified. Use this option to disable this verfication to make the upload faster by more unsafe.</value>
</data>
</root>
+19 -7
View File
@@ -47,17 +47,29 @@ namespace Duplicati.Library.Backend
if (m_path.IndexOf("@") > 0)
{
m_username = m_path.Substring(0, m_path.IndexOf("@"));
m_path = m_path.Substring(m_path.IndexOf("@") + 1);
if (m_username.IndexOf(":") > 0)
//Bugfix: cannot access paths with @ in the path
if (m_username.Contains("/") || m_username.Contains("\\") || m_username.Contains(System.IO.Path.DirectorySeparatorChar.ToString()))
{
m_password = m_username.Substring(0, m_username.IndexOf(":"));
m_username = m_username.Substring(m_username.IndexOf(":") + 1);
m_username = null;
if (options.ContainsKey("ftp-username"))
m_username = options["ftp-username"];
if (options.ContainsKey("ftp-password"))
m_password = options["ftp-password"];
}
else
{
if (options.ContainsKey("ftp-password"))
m_password = options["ftp-password"];
m_path = m_path.Substring(m_path.IndexOf("@") + 1);
if (m_username.IndexOf(":") > 0)
{
m_password = m_username.Substring(0, m_username.IndexOf(":"));
m_username = m_username.Substring(m_username.IndexOf(":") + 1);
}
else
{
if (options.ContainsKey("ftp-password"))
m_password = options["ftp-password"];
}
}
}
else
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
@@ -152,7 +152,13 @@ namespace Duplicati.Library.Backend
Dictionary<string, Google.Documents.Document> dict = new Dictionary<string, Google.Documents.Document>();
foreach (Google.Documents.Document d in data)
parentlookup.Add(d.AtomEntry.EditUri.Content, d);
{
// note: some files have no Edit Uri (for ex. shared by different user)
if (d.AtomEntry.EditUri != null && d.AtomEntry.EditUri.Content != null)
{
parentlookup.Add(d.AtomEntry.EditUri.Content, d);
}
}
foreach (Google.Documents.Document d in parentlookup.Values)
{
@@ -433,7 +439,9 @@ namespace Duplicati.Library.Backend
//This is a blank marker request
req.ContentLength = 0;
req.ContentType = "text/plain";
//Bad... docs say "text/plain" or "text/xml", but really needs to be content type, otherwise overwrite fails
//req.ContentType = "text/plain";
req.ContentType = "application/octet-stream";
//Authenticate our request
m_cla.ApplyAuthenticationToRequest(req);
@@ -503,8 +511,6 @@ namespace Duplicati.Library.Backend
using (System.IO.Stream s = resp.GetResponseStream())
xml.Load(s);
string tmp = xml.ToString();
System.Xml.XmlNamespaceManager mgr = new XmlNamespaceManager(xml.NameTable);
mgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
mgr.AddNamespace("gd", "http://schemas.google.com/g/2005");
@@ -130,6 +130,7 @@
<EmbeddedResource Include="Strings\S3SettingsControl.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>S3SettingsControl.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Strings\S3UI.resx">
<Generator>ResXFileCodeGenerator</Generator>
+5 -5
View File
@@ -46,10 +46,10 @@
//
// CredentialGroup
//
resources.ApplyResources(this.CredentialGroup, "CredentialGroup");
this.CredentialGroup.Controls.Add(this.RemoveSelectedButton);
this.CredentialGroup.Controls.Add(this.RemoveAllButton);
this.CredentialGroup.Controls.Add(this.CredentialList);
resources.ApplyResources(this.CredentialGroup, "CredentialGroup");
this.CredentialGroup.Name = "CredentialGroup";
this.CredentialGroup.TabStop = false;
//
@@ -69,26 +69,26 @@
//
// CredentialList
//
resources.ApplyResources(this.CredentialList, "CredentialList");
this.CredentialList.FormattingEnabled = true;
resources.ApplyResources(this.CredentialList, "CredentialList");
this.CredentialList.Name = "CredentialList";
this.CredentialList.SelectedIndexChanged += new System.EventHandler(this.CredentialList_SelectedIndexChanged);
//
// groupBox2
//
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.DefaultServername);
this.groupBox2.Controls.Add(this.label2);
this.groupBox2.Controls.Add(this.DefaultBucketRegion);
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Controls.Add(this.UseRRS);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// DefaultServername
//
resources.ApplyResources(this.DefaultServername, "DefaultServername");
this.DefaultServername.FormattingEnabled = true;
resources.ApplyResources(this.DefaultServername, "DefaultServername");
this.DefaultServername.Name = "DefaultServername";
this.DefaultServername.SelectedIndexChanged += new System.EventHandler(this.DefaultServername_SelectedIndexChanged);
//
@@ -99,8 +99,8 @@
//
// DefaultBucketRegion
//
resources.ApplyResources(this.DefaultBucketRegion, "DefaultBucketRegion");
this.DefaultBucketRegion.FormattingEnabled = true;
resources.ApplyResources(this.DefaultBucketRegion, "DefaultBucketRegion");
this.DefaultBucketRegion.Name = "DefaultBucketRegion";
this.DefaultBucketRegion.SelectedIndexChanged += new System.EventHandler(this.DefaultBucketRegion_SelectedIndexChanged);
//
@@ -117,29 +117,22 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="CredentialGroup.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="RemoveSelectedButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="RemoveSelectedButton.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="RemoveSelectedButton.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 107</value>
<value>328, 19</value>
</data>
<data name="RemoveSelectedButton.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 23</value>
<value>96, 23</value>
</data>
<data name="RemoveSelectedButton.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="RemoveSelectedButton.Text" xml:space="preserve">
<value>Remove selected</value>
<value>Remove</value>
</data>
<data name="&gt;&gt;RemoveSelectedButton.Name" xml:space="preserve">
<value>RemoveSelectedButton</value>
@@ -153,17 +146,14 @@
<data name="&gt;&gt;RemoveSelectedButton.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="RemoveAllButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="RemoveAllButton.Location" type="System.Drawing.Point, System.Drawing">
<value>158, 107</value>
<value>328, 48</value>
</data>
<data name="RemoveAllButton.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<value>96, 23</value>
</data>
<data name="RemoveAllButton.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>2</value>
</data>
<data name="RemoveAllButton.Text" xml:space="preserve">
<value>Remove all</value>
@@ -180,17 +170,14 @@
<data name="&gt;&gt;RemoveAllButton.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="CredentialList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="CredentialList.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 24</value>
<value>9, 18</value>
</data>
<data name="CredentialList.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 69</value>
<value>313, 108</value>
</data>
<data name="CredentialList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<value>1</value>
</data>
<data name="&gt;&gt;CredentialList.Name" xml:space="preserve">
<value>CredentialList</value>
@@ -205,13 +192,13 @@
<value>2</value>
</data>
<data name="CredentialGroup.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 32</value>
<value>5, 32</value>
</data>
<data name="CredentialGroup.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 139</value>
<value>434, 138</value>
</data>
<data name="CredentialGroup.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<value>2</value>
</data>
<data name="CredentialGroup.Text" xml:space="preserve">
<value>Stored credentials</value>
@@ -228,20 +215,14 @@
<data name="&gt;&gt;CredentialGroup.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="DefaultServername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="DefaultServername.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 24</value>
<value>103, 18</value>
</data>
<data name="DefaultServername.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 21</value>
<value>321, 21</value>
</data>
<data name="DefaultServername.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>1</value>
</data>
<data name="&gt;&gt;DefaultServername.Name" xml:space="preserve">
<value>DefaultServername</value>
@@ -258,20 +239,21 @@
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 24</value>
<value>6, 21</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 13</value>
<value>70, 13</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>0</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Servername</value>
<value>Server name:</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
@@ -285,17 +267,14 @@
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="DefaultBucketRegion.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="DefaultBucketRegion.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 48</value>
<value>103, 45</value>
</data>
<data name="DefaultBucketRegion.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 21</value>
<value>321, 21</value>
</data>
<data name="DefaultBucketRegion.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>2</value>
</data>
<data name="&gt;&gt;DefaultBucketRegion.Name" xml:space="preserve">
<value>DefaultBucketRegion</value>
@@ -313,16 +292,16 @@
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 48</value>
<value>6, 48</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 13</value>
<value>76, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Bucket region</value>
<value>Bucket region:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
@@ -343,13 +322,13 @@
<value>NoControl</value>
</data>
<data name="UseRRS.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 72</value>
<value>9, 72</value>
</data>
<data name="UseRRS.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 17</value>
</data>
<data name="UseRRS.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>3</value>
</data>
<data name="UseRRS.Text" xml:space="preserve">
<value>Use Reduced Redundancy Storage</value>
@@ -367,13 +346,13 @@
<value>4</value>
</data>
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 179</value>
<value>5, 181</value>
</data>
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 100</value>
<value>434, 100</value>
</data>
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>3</value>
</data>
<data name="groupBox2.Text" xml:space="preserve">
<value>Default settings</value>
@@ -397,13 +376,13 @@
<value>NoControl</value>
</data>
<data name="AllowCredentialStorage.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
<value>5, 10</value>
</data>
<data name="AllowCredentialStorage.Size" type="System.Drawing.Size, System.Drawing">
<value>186, 17</value>
</data>
<data name="AllowCredentialStorage.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>1</value>
</data>
<data name="AllowCredentialStorage.Text" xml:space="preserve">
<value>Store new S3 account information</value>
@@ -430,7 +409,7 @@
<value>True</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 284</value>
<value>445, 283</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>S3CommonOptions</value>
@@ -46,6 +46,7 @@ namespace Duplicati.Library.Backend
cfg.ServiceURL = servername;
cfg.UserAgent = "Duplicati v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + " S3 client with AWS SDK v" + cfg.GetType().Assembly.GetName().Version.ToString();
cfg.UseSecureStringForAwsSecretKey = false;
cfg.BufferSize = (int)Duplicati.Library.Utility.Utility.DEFAULT_BUFFER_SIZE;
m_client = new Amazon.S3.AmazonS3Client(awsID, awsKey, cfg);
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -70,7 +70,7 @@ namespace Duplicati.Library.Backend.Strings {
}
/// <summary>
/// Looks up a localized string similar to S3 Options.
/// Looks up a localized string similar to S3.
/// </summary>
internal static string PageTitle {
get {
@@ -121,6 +121,6 @@
<value>Displays various options related to the S3 backend</value>
</data>
<data name="PageTitle" xml:space="preserve">
<value>S3 Options</value>
<value>S3</value>
</data>
</root>
</root>
@@ -154,6 +154,7 @@
<EmbeddedResource Include="Strings\SSHSettingsControl.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>SSHSettingsControl.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Strings\SSHUI.resx">
<Generator>ResXFileCodeGenerator</Generator>
+122 -66
View File
@@ -560,38 +560,44 @@ namespace Duplicati.Library.Backend
if (changeDir && m_con != null)
return m_con;
SFTPCon con;
string keyfile;
m_options.TryGetValue(SSH_KEYFILE_OPTION, out keyfile);
if ((keyfile ?? "").Trim().Length > 0)
{
ValidateKeyFile(m_options[SSH_KEYFILE_OPTION]);
con = new SFTPCon(m_server, m_username);
con.AddIdentityFile(m_options[SSH_KEYFILE_OPTION], m_password);
}
else
con = new SFTPCon(m_server, m_username, m_password);
con.Connect(m_port);
try
{
if (!m_noCdCommand && !string.IsNullOrEmpty(m_path) && changeDir)
con.SetCurrenDir(m_path);
}
catch (Exception ex)
{
throw new Interface.FolderMissingException(string.Format(Strings.SSHBackend.FolderNotFoundManagedError, m_path, ex.Message), ex);
}
SFTPCon con;
string keyfile;
m_options.TryGetValue(SSH_KEYFILE_OPTION, out keyfile);
//If the connection is initialized to the right folder, we cache it
if (changeDir)
m_con = con;
if ((keyfile ?? "").Trim().Length > 0)
{
ValidateKeyFile(m_options[SSH_KEYFILE_OPTION]);
return con;
con = new SFTPCon(m_server, m_username);
con.AddIdentityFile(m_options[SSH_KEYFILE_OPTION], m_password);
}
else
con = new SFTPCon(m_server, m_username, m_password);
con.Connect(m_port);
try
{
if (!m_noCdCommand && !string.IsNullOrEmpty(m_path) && changeDir)
con.SetCurrenDir(m_path);
}
catch (Exception ex)
{
throw new Interface.FolderMissingException(string.Format(Strings.SSHBackend.FolderNotFoundManagedError, m_path, ex.Message), ex);
}
//If the connection is initialized to the right folder, we cache it
if (changeDir)
m_con = con;
return con;
}
catch (Tamir.SharpSsh.jsch.SftpException sx)
{
throw ReshapeSharpSSHException(sx);
}
}
private string getFullPath(string path)
@@ -610,11 +616,18 @@ namespace Duplicati.Library.Backend
string path = m_noCdCommand ? m_path : ".";
foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry ls in CreateManagedConnection(true).ListFiles(path))
if (ls.getFilename().ToString() != "." && ls.getFilename().ToString() != "..")
files.Add(new FileEntry(ls.getFilename().ToString(), ls.getAttrs().getSize(), epochOffset.Add(new TimeSpan(ls.getAttrs().getATime() * TimeSpan.TicksPerSecond)), epochOffset.Add(new TimeSpan(ls.getAttrs().getMTime() * TimeSpan.TicksPerSecond))));
return files;
try
{
foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry ls in CreateManagedConnection(true).ListFiles(path))
if (ls.getFilename().ToString() != "." && ls.getFilename().ToString() != "..")
files.Add(new FileEntry(ls.getFilename().ToString(), ls.getAttrs().getSize(), epochOffset.Add(new TimeSpan(ls.getAttrs().getATime() * TimeSpan.TicksPerSecond)), epochOffset.Add(new TimeSpan(ls.getAttrs().getMTime() * TimeSpan.TicksPerSecond))));
return files;
}
catch (Tamir.SharpSsh.jsch.SftpException sx)
{
throw ReshapeSharpSSHException(sx);
}
}
private void PutManaged(string remotename, string filename)
@@ -631,43 +644,52 @@ namespace Duplicati.Library.Backend
private void DeleteManaged(string remotename)
{
CreateManagedConnection(true).Delete(remotename);
try { CreateManagedConnection(true).Delete(remotename); }
catch (Tamir.SharpSsh.jsch.SftpException sx) { throw ReshapeSharpSSHException(sx); }
}
private void CreateFolderManaged()
{
string p = m_path;
using (SFTPCon con = CreateManagedConnection(false))
{
try
{
//Some SSH implementations fail if the folder name has a trailing slash
if (p.EndsWith ("/"))
p = p.Substring (0, p.Length - 1);
con.Mkdir(p);
}
catch
{
//For backwards compatibility, we also try to create the folder WITH a trailing slash,
// this should never work, but in case there is a SSH implementation that relies
// on this we try that too
if (p != m_path)
{
try
{
//If this succeeds, we continue
con.Mkdir(m_path);
return;
}
catch { }
}
//We report the original error
throw;
}
}
try
{
using (SFTPCon con = CreateManagedConnection(false))
{
try
{
//Some SSH implementations fail if the folder name has a trailing slash
if (p.EndsWith("/"))
p = p.Substring(0, p.Length - 1);
con.Mkdir(p);
}
catch
{
//For backwards compatibility, we also try to create the folder WITH a trailing slash,
// this should never work, but in case there is a SSH implementation that relies
// on this we try that too
if (p != m_path)
{
try
{
//If this succeeds, we continue
con.Mkdir(m_path);
return;
}
catch { }
}
//We report the original error
throw;
}
}
}
catch (Tamir.SharpSsh.jsch.SftpException sx)
{
throw ReshapeSharpSSHException(sx);
}
}
#endregion
@@ -712,7 +734,8 @@ namespace Duplicati.Library.Backend
if (!m_useManaged)
throw new Exception(Strings.SSHBackend.StreamingNotSupportedError);
CreateManagedConnection(true).Put(getFullPath(remotename), stream);
try { CreateManagedConnection(true).Put(getFullPath(remotename), stream); }
catch (Tamir.SharpSsh.jsch.SftpException sx) { throw ReshapeSharpSSHException(sx); }
}
public void Get(string remotename, System.IO.Stream stream)
@@ -720,11 +743,44 @@ namespace Duplicati.Library.Backend
if (!m_useManaged)
throw new Exception(Strings.SSHBackend.StreamingNotSupportedError);
CreateManagedConnection(true).Get(getFullPath(remotename), stream);
try { CreateManagedConnection(true).Get(getFullPath(remotename), stream); }
catch (Tamir.SharpSsh.jsch.SftpException sx) { throw ReshapeSharpSSHException(sx); }
}
#endregion
/// <summary>
/// Helper function that extracts error messages from SharpSSH style exceptions and converts them into regular .Net exception messages
/// </summary>
/// <param name="sx">The exception to convert</param>
/// <returns>The converted exception</returns>
private static Exception ReshapeSharpSSHException(Tamir.SharpSsh.jsch.SftpException sx)
{
string idstr;
if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_OK)
idstr = "OK";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_EOF)
idstr = "EOF";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_NO_SUCH_FILE)
idstr = "NO_SUCH_FILE";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_PERMISSION_DENIED)
idstr = "PERMISSION_DENIED";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_FAILURE)
idstr = "FAILURE";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_BAD_MESSAGE)
idstr = "BAD_MESSAGE";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_NO_CONNECTION)
idstr = "NO_CONNECTION";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_CONNECTION_LOST)
idstr = "CONNECTION_LOST";
else if (sx.id == Tamir.SharpSsh.jsch.ChannelSftp.SSH_FX_OP_UNSUPPORTED)
idstr = "UNSUPPORTED";
else
idstr = "UNKNOWN";
return new Exception(string.Format("{0} - {1}: {2}", sx.id, idstr, sx.message), sx);
}
/// <summary>
/// A helper function for validating SSH key files, as the support for those is limited in the SharpSSH library
/// </summary>
@@ -123,16 +123,16 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
<value>8, 12</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 13</value>
<value>61, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Path to SFTP</value>
<value>SFTP path:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
@@ -150,16 +150,16 @@
<value>True</value>
</data>
<data name="UseManagedAsDefault.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 40</value>
<value>11, 35</value>
</data>
<data name="UseManagedAsDefault.Size" type="System.Drawing.Size, System.Drawing">
<value>166, 17</value>
</data>
<data name="UseManagedAsDefault.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>3</value>
</data>
<data name="UseManagedAsDefault.Text" xml:space="preserve">
<value>Use managed SSH as default</value>
<value>Use managed SSH by default</value>
</data>
<data name="&gt;&gt;UseManagedAsDefault.Name" xml:space="preserve">
<value>UseManagedAsDefault</value>
@@ -178,13 +178,13 @@
<value>Top, Right</value>
</data>
<data name="BrowseForSFTPButton.Location" type="System.Drawing.Point, System.Drawing">
<value>184, 8</value>
<value>415, 9</value>
</data>
<data name="BrowseForSFTPButton.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 20</value>
</data>
<data name="BrowseForSFTPButton.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>2</value>
</data>
<data name="BrowseForSFTPButton.Text" xml:space="preserve">
<value>...</value>
@@ -201,17 +201,14 @@
<data name="&gt;&gt;BrowseForSFTPButton.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="SFTPPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="SFTPPath.Location" type="System.Drawing.Point, System.Drawing">
<value>80, 8</value>
<value>130, 9</value>
</data>
<data name="SFTPPath.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 21</value>
<value>279, 21</value>
</data>
<data name="SFTPPath.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>1</value>
</data>
<data name="&gt;&gt;SFTPPath.Name" xml:space="preserve">
<value>SFTPPath</value>
@@ -241,7 +238,7 @@
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 67</value>
<value>445, 283</value>
</data>
<data name="&gt;&gt;BrowseForSFTPDialog.Name" xml:space="preserve">
<value>BrowseForSFTPDialog</value>
+230 -230
View File
@@ -1,230 +1,230 @@
namespace Duplicati.Library.Backend
{
partial class SSHUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SSHUI));
this.TestConnection = new System.Windows.Forms.Button();
this.Port = new System.Windows.Forms.NumericUpDown();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.Username = new System.Windows.Forms.TextBox();
this.Path = new System.Windows.Forms.TextBox();
this.Servername = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.UsePassword = new System.Windows.Forms.CheckBox();
this.GenerateDebugOutput = new System.Windows.Forms.CheckBox();
this.UseUnmanagedSSH = new System.Windows.Forms.CheckBox();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.Keyfile = new System.Windows.Forms.TextBox();
this.Keyfilelabel = new System.Windows.Forms.Label();
this.BrowseForKeyFileButton = new System.Windows.Forms.Button();
this.OpenSSHKeyFileDialog = new System.Windows.Forms.OpenFileDialog();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SuspendLayout();
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65500,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
22,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// Password
//
this.Password.AskToEnterNewPassword = false;
this.Password.IsPasswordVisible = false;
resources.ApplyResources(this.Password, "Password");
this.Password.MaximumSize = new System.Drawing.Size(5000, 20);
this.Password.MinimumSize = new System.Drawing.Size(150, 20);
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// UsePassword
//
resources.ApplyResources(this.UsePassword, "UsePassword");
this.UsePassword.Checked = true;
this.UsePassword.CheckState = System.Windows.Forms.CheckState.Checked;
this.UsePassword.Name = "UsePassword";
this.UsePassword.UseVisualStyleBackColor = true;
this.UsePassword.CheckedChanged += new System.EventHandler(this.UsePassword_CheckedChanged);
//
// GenerateDebugOutput
//
resources.ApplyResources(this.GenerateDebugOutput, "GenerateDebugOutput");
this.GenerateDebugOutput.Name = "GenerateDebugOutput";
this.GenerateDebugOutput.UseVisualStyleBackColor = true;
//
// UseUnmanagedSSH
//
resources.ApplyResources(this.UseUnmanagedSSH, "UseUnmanagedSSH");
this.UseUnmanagedSSH.Name = "UseUnmanagedSSH";
this.UseUnmanagedSSH.UseVisualStyleBackColor = true;
this.UseUnmanagedSSH.CheckedChanged += new System.EventHandler(this.UseUnmanagedSSH_CheckedChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// Keyfile
//
resources.ApplyResources(this.Keyfile, "Keyfile");
this.Keyfile.Name = "Keyfile";
this.Keyfile.TextChanged += new System.EventHandler(this.Keyfile_TextChanged);
//
// Keyfilelabel
//
resources.ApplyResources(this.Keyfilelabel, "Keyfilelabel");
this.Keyfilelabel.Name = "Keyfilelabel";
//
// BrowseForKeyFileButton
//
resources.ApplyResources(this.BrowseForKeyFileButton, "BrowseForKeyFileButton");
this.BrowseForKeyFileButton.Name = "BrowseForKeyFileButton";
this.BrowseForKeyFileButton.UseVisualStyleBackColor = true;
this.BrowseForKeyFileButton.Click += new System.EventHandler(this.BrowseForKeyFileButton_Click);
//
// OpenSSHKeyFileDialog
//
resources.ApplyResources(this.OpenSSHKeyFileDialog, "OpenSSHKeyFileDialog");
//
// SSHUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BrowseForKeyFileButton);
this.Controls.Add(this.Keyfile);
this.Controls.Add(this.Keyfilelabel);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.UseUnmanagedSSH);
this.Controls.Add(this.GenerateDebugOutput);
this.Controls.Add(this.UsePassword);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.Password);
this.Controls.Add(this.Username);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "SSHUI";
this.Load += new System.EventHandler(this.SSHUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.NumericUpDown Port;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.TextBox Username;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.CheckBox UsePassword;
private System.Windows.Forms.CheckBox GenerateDebugOutput;
private System.Windows.Forms.CheckBox UseUnmanagedSSH;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.TextBox Keyfile;
private System.Windows.Forms.Label Keyfilelabel;
private System.Windows.Forms.Button BrowseForKeyFileButton;
private System.Windows.Forms.OpenFileDialog OpenSSHKeyFileDialog;
}
}
namespace Duplicati.Library.Backend
{
partial class SSHUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SSHUI));
this.TestConnection = new System.Windows.Forms.Button();
this.Port = new System.Windows.Forms.NumericUpDown();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.Username = new System.Windows.Forms.TextBox();
this.Path = new System.Windows.Forms.TextBox();
this.Servername = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.UsePassword = new System.Windows.Forms.CheckBox();
this.GenerateDebugOutput = new System.Windows.Forms.CheckBox();
this.UseUnmanagedSSH = new System.Windows.Forms.CheckBox();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.Keyfile = new System.Windows.Forms.TextBox();
this.Keyfilelabel = new System.Windows.Forms.Label();
this.BrowseForKeyFileButton = new System.Windows.Forms.Button();
this.OpenSSHKeyFileDialog = new System.Windows.Forms.OpenFileDialog();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SuspendLayout();
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
22,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// Password
//
this.Password.AskToEnterNewPassword = false;
this.Password.IsPasswordVisible = false;
resources.ApplyResources(this.Password, "Password");
this.Password.MaximumSize = new System.Drawing.Size(5000, 20);
this.Password.MinimumSize = new System.Drawing.Size(150, 20);
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// UsePassword
//
resources.ApplyResources(this.UsePassword, "UsePassword");
this.UsePassword.Checked = true;
this.UsePassword.CheckState = System.Windows.Forms.CheckState.Checked;
this.UsePassword.Name = "UsePassword";
this.UsePassword.UseVisualStyleBackColor = true;
this.UsePassword.CheckedChanged += new System.EventHandler(this.UsePassword_CheckedChanged);
//
// GenerateDebugOutput
//
resources.ApplyResources(this.GenerateDebugOutput, "GenerateDebugOutput");
this.GenerateDebugOutput.Name = "GenerateDebugOutput";
this.GenerateDebugOutput.UseVisualStyleBackColor = true;
//
// UseUnmanagedSSH
//
resources.ApplyResources(this.UseUnmanagedSSH, "UseUnmanagedSSH");
this.UseUnmanagedSSH.Name = "UseUnmanagedSSH";
this.UseUnmanagedSSH.UseVisualStyleBackColor = true;
this.UseUnmanagedSSH.CheckedChanged += new System.EventHandler(this.UseUnmanagedSSH_CheckedChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// Keyfile
//
resources.ApplyResources(this.Keyfile, "Keyfile");
this.Keyfile.Name = "Keyfile";
this.Keyfile.TextChanged += new System.EventHandler(this.Keyfile_TextChanged);
//
// Keyfilelabel
//
resources.ApplyResources(this.Keyfilelabel, "Keyfilelabel");
this.Keyfilelabel.Name = "Keyfilelabel";
//
// BrowseForKeyFileButton
//
resources.ApplyResources(this.BrowseForKeyFileButton, "BrowseForKeyFileButton");
this.BrowseForKeyFileButton.Name = "BrowseForKeyFileButton";
this.BrowseForKeyFileButton.UseVisualStyleBackColor = true;
this.BrowseForKeyFileButton.Click += new System.EventHandler(this.BrowseForKeyFileButton_Click);
//
// OpenSSHKeyFileDialog
//
resources.ApplyResources(this.OpenSSHKeyFileDialog, "OpenSSHKeyFileDialog");
//
// SSHUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BrowseForKeyFileButton);
this.Controls.Add(this.Keyfile);
this.Controls.Add(this.Keyfilelabel);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.UseUnmanagedSSH);
this.Controls.Add(this.GenerateDebugOutput);
this.Controls.Add(this.UsePassword);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.Password);
this.Controls.Add(this.Username);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "SSHUI";
this.Load += new System.EventHandler(this.SSHUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.NumericUpDown Port;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.TextBox Username;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.CheckBox UsePassword;
private System.Windows.Forms.CheckBox GenerateDebugOutput;
private System.Windows.Forms.CheckBox UseUnmanagedSSH;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.TextBox Keyfile;
private System.Windows.Forms.Label Keyfilelabel;
private System.Windows.Forms.Button BrowseForKeyFileButton;
private System.Windows.Forms.OpenFileDialog OpenSSHKeyFileDialog;
}
}
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -452,7 +452,7 @@ namespace Duplicati.Library.Backend.Strings {
/// <summary>
/// Looks up a localized string similar to Failed to start the SSH application ({0}).
///Make sure that &quot;putty&quot; is installed, and you have set the correct path.
///Make sure that &quot;PuTTY&quot; is installed, and you have set the correct path.
///Error message: {1}.
/// </summary>
internal static string LaunchErrorWindows {
@@ -245,7 +245,7 @@ Error message: {1}</value>
</data>
<data name="LaunchErrorWindows" xml:space="preserve">
<value>Failed to start the SSH application ({0}).
Make sure that "putty" is installed, and you have set the correct path.
Make sure that "PuTTY" is installed, and you have set the correct path.
Error message: {1}</value>
</data>
<data name="PasswordMissingError" xml:space="preserve">
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -70,7 +70,7 @@ namespace Duplicati.Library.Backend.Strings {
}
/// <summary>
/// Looks up a localized string similar to SSH Settings.
/// Looks up a localized string similar to SSH.
/// </summary>
internal static string PageTitle {
get {
@@ -121,6 +121,6 @@
<value>Settings for the SSH backend</value>
</data>
<data name="PageTitle" xml:space="preserve">
<value>SSH Settings</value>
<value>SSH</value>
</data>
</root>
</root>
+187 -187
View File
@@ -1,187 +1,187 @@
namespace Duplicati.Library.Backend
{
partial class TahoeUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TahoeUI));
this.TestConnection = new System.Windows.Forms.Button();
this.Port = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.Path = new System.Windows.Forms.TextBox();
this.Servername = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65500,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
3456,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
this.SpecifiedHash.TextChanged += new System.EventHandler(this.SpecifiedHash_TextChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// TahoeUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.label1);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Name = "TahoeUI";
this.Load += new System.EventHandler(this.TahoeUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.CheckBox AcceptAnyHash;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.GroupBox SSLGroup;
}
}
namespace Duplicati.Library.Backend
{
partial class TahoeUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TahoeUI));
this.TestConnection = new System.Windows.Forms.Button();
this.Port = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.Path = new System.Windows.Forms.TextBox();
this.Servername = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
3456,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
this.SpecifiedHash.TextChanged += new System.EventHandler(this.SpecifiedHash_TextChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// TahoeUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.label1);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Name = "TahoeUI";
this.Load += new System.EventHandler(this.TahoeUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.CheckBox AcceptAnyHash;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.GroupBox SSLGroup;
}
}
+257 -257
View File
@@ -1,257 +1,257 @@
namespace Duplicati.Library.Backend
{
partial class WebDAVUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebDAVUI));
this.UseIntegratedAuth = new System.Windows.Forms.CheckBox();
this.TestConnection = new System.Windows.Forms.Button();
this.Username = new System.Windows.Forms.TextBox();
this.Port = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.Path = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.Servername = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.PasswordSettings = new System.Windows.Forms.GroupBox();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.DigestAuth = new System.Windows.Forms.CheckBox();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.PasswordSettings.SuspendLayout();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// UseIntegratedAuth
//
resources.ApplyResources(this.UseIntegratedAuth, "UseIntegratedAuth");
this.UseIntegratedAuth.Name = "UseIntegratedAuth";
this.UseIntegratedAuth.UseVisualStyleBackColor = true;
this.UseIntegratedAuth.CheckedChanged += new System.EventHandler(this.UseIntegratedAuth_CheckedChanged);
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65500,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
80,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// PasswordSettings
//
this.PasswordSettings.Controls.Add(this.Username);
this.PasswordSettings.Controls.Add(this.Password);
this.PasswordSettings.Controls.Add(this.label4);
this.PasswordSettings.Controls.Add(this.label3);
resources.ApplyResources(this.PasswordSettings, "PasswordSettings");
this.PasswordSettings.Name = "PasswordSettings";
this.PasswordSettings.TabStop = false;
//
// Password
//
this.Password.AskToEnterNewPassword = false;
this.Password.IsPasswordVisible = false;
resources.ApplyResources(this.Password, "Password");
this.Password.MaximumSize = new System.Drawing.Size(5000, 20);
this.Password.MinimumSize = new System.Drawing.Size(150, 20);
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// DigestAuth
//
resources.ApplyResources(this.DigestAuth, "DigestAuth");
this.DigestAuth.Name = "DigestAuth";
this.DigestAuth.UseVisualStyleBackColor = true;
this.DigestAuth.CheckedChanged += new System.EventHandler(this.DigestAuth_CheckedChanged);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
this.SpecifiedHash.TextChanged += new System.EventHandler(this.SpecifiedHash_TextChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// WebDAVUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.DigestAuth);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.UseIntegratedAuth);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.label1);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Controls.Add(this.PasswordSettings);
this.Name = "WebDAVUI";
this.Load += new System.EventHandler(this.WebDAVUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.PasswordSettings.ResumeLayout(false);
this.PasswordSettings.PerformLayout();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.CheckBox UseIntegratedAuth;
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.TextBox Username;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.GroupBox PasswordSettings;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox DigestAuth;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.CheckBox AcceptAnyHash;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.GroupBox SSLGroup;
}
}
namespace Duplicati.Library.Backend
{
partial class WebDAVUI
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebDAVUI));
this.UseIntegratedAuth = new System.Windows.Forms.CheckBox();
this.TestConnection = new System.Windows.Forms.Button();
this.Username = new System.Windows.Forms.TextBox();
this.Port = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.Path = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.Servername = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.PasswordSettings = new System.Windows.Forms.GroupBox();
this.Password = new Duplicati.Winforms.Controls.PasswordControl();
this.CreateFolderButton = new System.Windows.Forms.Button();
this.DigestAuth = new System.Windows.Forms.CheckBox();
this.UseSSL = new System.Windows.Forms.CheckBox();
this.AcceptAnyHash = new System.Windows.Forms.CheckBox();
this.AcceptSpecifiedHash = new System.Windows.Forms.CheckBox();
this.SpecifiedHash = new System.Windows.Forms.TextBox();
this.SSLGroup = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.Port)).BeginInit();
this.PasswordSettings.SuspendLayout();
this.SSLGroup.SuspendLayout();
this.SuspendLayout();
//
// UseIntegratedAuth
//
resources.ApplyResources(this.UseIntegratedAuth, "UseIntegratedAuth");
this.UseIntegratedAuth.Name = "UseIntegratedAuth";
this.UseIntegratedAuth.UseVisualStyleBackColor = true;
this.UseIntegratedAuth.CheckedChanged += new System.EventHandler(this.UseIntegratedAuth_CheckedChanged);
//
// TestConnection
//
resources.ApplyResources(this.TestConnection, "TestConnection");
this.TestConnection.Name = "TestConnection";
this.TestConnection.UseVisualStyleBackColor = true;
this.TestConnection.Click += new System.EventHandler(this.TestConnection_Click);
//
// Username
//
resources.ApplyResources(this.Username, "Username");
this.Username.Name = "Username";
this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged);
//
// Port
//
resources.ApplyResources(this.Port, "Port");
this.Port.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.Port.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.Port.Name = "Port";
this.Port.Value = new decimal(new int[] {
80,
0,
0,
0});
this.Port.ValueChanged += new System.EventHandler(this.Port_ValueChanged);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// Path
//
resources.ApplyResources(this.Path, "Path");
this.Path.Name = "Path";
this.Path.TextChanged += new System.EventHandler(this.Path_TextChanged);
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// Servername
//
resources.ApplyResources(this.Servername, "Servername");
this.Servername.Name = "Servername";
this.Servername.TextChanged += new System.EventHandler(this.Servername_TextChanged);
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// PasswordSettings
//
this.PasswordSettings.Controls.Add(this.Username);
this.PasswordSettings.Controls.Add(this.Password);
this.PasswordSettings.Controls.Add(this.label4);
this.PasswordSettings.Controls.Add(this.label3);
resources.ApplyResources(this.PasswordSettings, "PasswordSettings");
this.PasswordSettings.Name = "PasswordSettings";
this.PasswordSettings.TabStop = false;
//
// Password
//
this.Password.AskToEnterNewPassword = false;
this.Password.IsPasswordVisible = false;
resources.ApplyResources(this.Password, "Password");
this.Password.MaximumSize = new System.Drawing.Size(5000, 20);
this.Password.MinimumSize = new System.Drawing.Size(150, 20);
this.Password.Name = "Password";
this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged);
//
// CreateFolderButton
//
resources.ApplyResources(this.CreateFolderButton, "CreateFolderButton");
this.CreateFolderButton.Name = "CreateFolderButton";
this.CreateFolderButton.UseVisualStyleBackColor = true;
this.CreateFolderButton.Click += new System.EventHandler(this.CreateFolderButton_Click);
//
// DigestAuth
//
resources.ApplyResources(this.DigestAuth, "DigestAuth");
this.DigestAuth.Name = "DigestAuth";
this.DigestAuth.UseVisualStyleBackColor = true;
this.DigestAuth.CheckedChanged += new System.EventHandler(this.DigestAuth_CheckedChanged);
//
// UseSSL
//
resources.ApplyResources(this.UseSSL, "UseSSL");
this.UseSSL.Name = "UseSSL";
this.UseSSL.UseVisualStyleBackColor = true;
this.UseSSL.CheckedChanged += new System.EventHandler(this.UseSSL_CheckedChanged);
//
// AcceptAnyHash
//
resources.ApplyResources(this.AcceptAnyHash, "AcceptAnyHash");
this.AcceptAnyHash.Name = "AcceptAnyHash";
this.AcceptAnyHash.UseVisualStyleBackColor = true;
this.AcceptAnyHash.CheckedChanged += new System.EventHandler(this.AcceptAnyHash_CheckedChanged);
//
// AcceptSpecifiedHash
//
resources.ApplyResources(this.AcceptSpecifiedHash, "AcceptSpecifiedHash");
this.AcceptSpecifiedHash.Name = "AcceptSpecifiedHash";
this.AcceptSpecifiedHash.UseVisualStyleBackColor = true;
this.AcceptSpecifiedHash.CheckedChanged += new System.EventHandler(this.AcceptSpecifiedHash_CheckedChanged);
//
// SpecifiedHash
//
resources.ApplyResources(this.SpecifiedHash, "SpecifiedHash");
this.SpecifiedHash.Name = "SpecifiedHash";
this.SpecifiedHash.TextChanged += new System.EventHandler(this.SpecifiedHash_TextChanged);
//
// SSLGroup
//
this.SSLGroup.Controls.Add(this.AcceptSpecifiedHash);
this.SSLGroup.Controls.Add(this.SpecifiedHash);
this.SSLGroup.Controls.Add(this.AcceptAnyHash);
resources.ApplyResources(this.SSLGroup, "SSLGroup");
this.SSLGroup.Name = "SSLGroup";
this.SSLGroup.TabStop = false;
//
// WebDAVUI
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.UseSSL);
this.Controls.Add(this.SSLGroup);
this.Controls.Add(this.DigestAuth);
this.Controls.Add(this.CreateFolderButton);
this.Controls.Add(this.UseIntegratedAuth);
this.Controls.Add(this.TestConnection);
this.Controls.Add(this.Port);
this.Controls.Add(this.label1);
this.Controls.Add(this.Path);
this.Controls.Add(this.Servername);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Controls.Add(this.PasswordSettings);
this.Name = "WebDAVUI";
this.Load += new System.EventHandler(this.WebDAVUI_PageLoad);
((System.ComponentModel.ISupportInitialize)(this.Port)).EndInit();
this.PasswordSettings.ResumeLayout(false);
this.PasswordSettings.PerformLayout();
this.SSLGroup.ResumeLayout(false);
this.SSLGroup.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.CheckBox UseIntegratedAuth;
private System.Windows.Forms.Button TestConnection;
private System.Windows.Forms.TextBox Username;
private System.Windows.Forms.NumericUpDown Port;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Path;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox Servername;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.GroupBox PasswordSettings;
private Duplicati.Winforms.Controls.PasswordControl Password;
private System.Windows.Forms.Button CreateFolderButton;
private System.Windows.Forms.CheckBox DigestAuth;
private System.Windows.Forms.CheckBox UseSSL;
private System.Windows.Forms.CheckBox AcceptAnyHash;
private System.Windows.Forms.CheckBox AcceptSpecifiedHash;
private System.Windows.Forms.TextBox SpecifiedHash;
private System.Windows.Forms.GroupBox SSLGroup;
}
}
@@ -234,6 +234,8 @@ namespace Duplicati.Library.Encryption
public ProtectedCryptoStream(System.IO.Stream stream, Exception reportException, bool defaultFallback)
: base(stream)
{
m_reportException = reportException;
m_defaultFallback = defaultFallback;
}
/// <summary>
@@ -122,6 +122,7 @@
<ItemGroup>
<EmbeddedResource Include="GPGCommonOptions.resx">
<DependentUpon>GPGCommonOptions.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Strings\AESEncryption.resx">
<SubType>Designer</SubType>
@@ -145,6 +146,7 @@
<EmbeddedResource Include="Strings\GPGSettingsControl.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>GPGSettingsControl.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Strings\GPGStreamWrapper.resx">
<SubType>Designer</SubType>
@@ -70,7 +70,6 @@
this.Controls.Add(this.BrowseForGPGPathButton);
this.Controls.Add(this.GPGPath);
this.Controls.Add(this.label1);
this.MinimumSize = new System.Drawing.Size(283, 32);
this.Name = "GPGCommonOptions";
this.Load += new System.EventHandler(this.GPGCommonOptions_Load);
this.ResumeLayout(false);
@@ -123,16 +123,16 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
<value>8, 12</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 13</value>
<value>57, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>GPG executable path</value>
<value>GPG path:</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
@@ -151,10 +151,10 @@
<value>Top, Left, Right</value>
</data>
<data name="GPGPath.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 8</value>
<value>130, 9</value>
</data>
<data name="GPGPath.Size" type="System.Drawing.Size, System.Drawing">
<value>138, 21</value>
<value>279, 21</value>
</data>
<data name="GPGPath.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -175,7 +175,7 @@
<value>Top, Right</value>
</data>
<data name="BrowseForGPGPathButton.Location" type="System.Drawing.Point, System.Drawing">
<value>258, 8</value>
<value>415, 9</value>
</data>
<data name="BrowseForGPGPathButton.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 20</value>
@@ -217,7 +217,7 @@
<value>True</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>283, 32</value>
<value>445, 283</value>
</data>
<data name="&gt;&gt;BrowseForGPGDialog.Name" xml:space="preserve">
<value>BrowseForGPGDialog</value>
@@ -60,12 +60,12 @@ namespace Duplicati.Library.Encryption
/// <summary>
/// Always present commandline options (--passphrase-fd 0)
/// </summary>
private const string GPG_COMMANDLINE_STANDARD_OPTIONS = "--passphrase-fd 0";
private const string GPG_COMMANDLINE_STANDARD_OPTIONS = "--batch --passphrase-fd 0";
/// <summary>
/// The options that are supplied as default when encrypting (--symmetric --local-user)
/// </summary>
private const string GPG_ENCRYPTION_DEFAULT_OPTIONS = "--symmetric --local-user";
private const string GPG_ENCRYPTION_DEFAULT_OPTIONS = "--batch --symmetric --local-user";
/// <summary>
/// The options that are supplied as default when encrypting (default is empty)
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -97,7 +97,7 @@ namespace Duplicati.Library.Encryption.Strings {
}
/// <summary>
/// Looks up a localized string similar to AES-256 encryption, built in.
/// Looks up a localized string similar to AES-256 encryption, built-in.
/// </summary>
internal static string DisplayName {
get {
@@ -130,6 +130,6 @@
<value>This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption.</value>
</data>
<data name="DisplayName" xml:space="preserve">
<value>AES-256 encryption, built in</value>
<value>AES-256 encryption, built-in</value>
</data>
</root>
</root>
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.235
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -70,7 +70,7 @@ namespace Duplicati.Library.Encryption.Strings {
}
/// <summary>
/// Looks up a localized string similar to GPG Settings.
/// Looks up a localized string similar to GPG.
/// </summary>
internal static string PageTitle {
get {
@@ -121,6 +121,6 @@
<value>Settings for the GPG encryption module</value>
</data>
<data name="PageTitle" xml:space="preserve">
<value>GPG Settings</value>
<value>GPG</value>
</data>
</root>
</root>
@@ -93,6 +93,7 @@
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="IBackendInteraction.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Strings\CommandLineArgument.resx">
@@ -0,0 +1,82 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
namespace Duplicati.Library.Interface
{
/// <summary>
/// An interface for logging interactions with the backend
/// </summary>
public interface IBackendInteraction
{
/// <summary>
/// Signals the start of a operation on the backend, such as cleanup or backup
/// </summary>
/// <param name='name'>The name of the operation</param>
void BeginOperation(string name);
/// <summary>
/// Signals the end of the operation
/// </summary>
void EndOperation();
/// <summary>
/// Registers a get operation
/// </summary>
/// <param name='entry'>The entry involved</param>
/// <param name='success'>True if the operation succeeeded, false otherwise</param>
/// <param name='errorMessage'>An error message if the operation did not succeeed</param>
void RegisterGet(IFileEntry entry, bool success, String errorMessage);
/// <summary>
/// Registers a put operation
/// </summary>
/// <param name='entry'>The entry involved</param>
/// <param name='success'>True if the operation succeeeded, false otherwise</param>
/// <param name='errorMessage'>An error message if the operation did not succeeed</param>
void RegisterPut(IFileEntry entry, bool success, String errorMessage);
/// <summary>
/// Registers a delete operation
/// </summary>
/// <param name='entry'>The entry involved</param>
/// <param name='success'>True if the operation succeeeded, false otherwise</param>
/// <param name='errorMessage'>An error message if the operation did not succeeed</param>
void RegisterDelete(IFileEntry entry, bool success, String errorMessage);
/// <summary>
/// Registers a create folder operation
/// </summary>
/// <param name='success'>True if the operation succeeeded, false otherwise</param>
/// <param name='errorMessage'>An error message if the operation did not succeeed</param>
void RegisterCreateFolder(bool success, String errorMessage);
/// <summary>
/// Registers a list operation
/// </summary>
/// <param name='files'>The entries returned, if the operation suceeded, null otherwise</param>
/// <param name='success'>True if the operation succeeeded, false otherwise</param>
/// <param name='errorMessage'>An error message if the operation did not succeeed</param>
void RegisterList(List<Duplicati.Library.Interface.IFileEntry> files, bool success, String errorMessage);
}
}
+68 -10
View File
@@ -170,7 +170,12 @@ namespace Duplicati.Library.Main
/// Gets the communication statistics assigned to the wrapper
/// </summary>
public CommunicationStatistics Statistics { get { return m_statistics; } }
/// <summary>
/// Recorder for remote operations
/// </summary>
private Duplicati.Library.Interface.IBackendInteraction m_backendInterfaceLogger;
/// <summary>
/// Class to represent hash failures
/// </summary>
@@ -223,7 +228,13 @@ namespace Duplicati.Library.Main
if (!string.IsNullOrEmpty(m_options.SignatureCachePath) && !System.IO.Directory.Exists(m_options.SignatureCachePath))
System.IO.Directory.CreateDirectory(m_options.SignatureCachePath);
if (!string.IsNullOrEmpty(m_options.Backendlogdatabase))
{
m_backendInterfaceLogger = new StateVerification.StateDatabase(m_options.Backendlogdatabase, statistics);
m_backendInterfaceLogger.BeginOperation(m_options.MainAction.ToString());
}
m_async = m_options.AsynchronousUpload;
if (m_async)
{
@@ -953,16 +964,23 @@ namespace Duplicati.Library.Main
{
ResetBackend();
m_statistics.AddNumberOfRemoteCalls(1);
return m_backend.List();
List<Duplicati.Library.Interface.IFileEntry> res = m_backend.List();
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterList(res, true, null);
return res;
}
catch (System.Threading.ThreadAbortException)
catch (System.Threading.ThreadAbortException tex)
{
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterList(null, false, tex.ToString());
throw;
}
catch (Exception ex)
{
lastEx = ex;
m_statistics.LogRetryAttempt(ex.Message, ex);
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterList(null, false, ex.ToString());
DisposeBackend();
if (ex is Library.Interface.FolderMissingException && m_backendSupportsCreateFolder && m_options.AutocreateFolders)
@@ -990,15 +1008,21 @@ namespace Duplicati.Library.Main
m_statistics.AddNumberOfRemoteCalls(1);
m_backend.Delete(remote.Filename);
lastEx = null;
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterDelete(remote.Fileentry, true, null);
}
catch (System.Threading.ThreadAbortException)
catch (System.Threading.ThreadAbortException tex)
{
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterDelete(remote.Fileentry, false, tex.ToString());
throw;
}
catch (Exception ex)
{
lastEx = ex;
m_statistics.LogRetryAttempt(ex.Message, ex);
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterDelete(remote.Fileentry, false, ex.ToString());
DisposeBackend();
retries--;
@@ -1206,6 +1230,15 @@ namespace Duplicati.Library.Main
lastEx = null;
tempfile.Protected = true; //Don't delete it
if (m_backendInterfaceLogger != null)
{
if (remote is ManifestEntry)
m_backendInterfaceLogger.RegisterGet(remote.Fileentry, true, System.IO.File.ReadAllText(tempfile));
else
m_backendInterfaceLogger.RegisterGet(remote.Fileentry, true, null);
}
}
finally
{
@@ -1219,14 +1252,18 @@ namespace Duplicati.Library.Main
}
}
}
catch (System.Threading.ThreadAbortException)
catch (System.Threading.ThreadAbortException tex)
{
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterGet(remote.Fileentry, false, tex.ToString());
throw;
}
catch (Exception ex)
{
lastEx = ex;
m_statistics.LogRetryAttempt(ex.Message, ex);
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterGet(remote.Fileentry, false, ex.ToString());
DisposeBackend();
retries--;
@@ -1250,6 +1287,8 @@ namespace Duplicati.Library.Main
{
string remotename = remote.Filename;
m_statusmessage = string.Format(Strings.BackendWrapper.StatusMessageUploading, remotename, Utility.Utility.FormatSizeString(new System.IO.FileInfo(filename).Length));
Duplicati.Library.Interface.IFileEntry log_fe = new Duplicati.Library.Interface.FileEntry(remote.Filename, remote.Filesize, DateTime.Now, DateTime.Now);
long sourceFileSize = new System.IO.FileInfo(filename).Length;
try
{
@@ -1329,13 +1368,19 @@ namespace Duplicati.Library.Main
success = true;
lastEx = null;
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterPut(log_fe, true, null);
}
catch (System.Threading.ThreadAbortException)
catch (System.Threading.ThreadAbortException tex)
{
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterPut(log_fe, false, tex.ToString());
throw;
}
catch (Exception ex)
{
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterPut(log_fe, false, ex.ToString());
DisposeBackend();
//Even if we can create the folder, we still count it as an error to prevent trouble with backends
@@ -1364,7 +1409,7 @@ namespace Duplicati.Library.Main
if (!success)
throw new Exception(string.Format(Strings.BackendWrapper.FileUploadError2, remotename, lastEx == null ? "<null>" : lastEx.Message), lastEx);
m_statistics.AddBytesUploaded(new System.IO.FileInfo(filename).Length);
m_statistics.AddBytesUploaded(sourceFileSize);
}
finally
{
@@ -1391,8 +1436,18 @@ namespace Duplicati.Library.Main
private void CreateFolderInternal()
{
ResetBackend();
(m_backend as Library.Interface.IBackend_v2).CreateFolder();
try
{
ResetBackend();
(m_backend as Library.Interface.IBackend_v2).CreateFolder();
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterCreateFolder(true, null);
} catch (Exception ex) {
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.RegisterCreateFolder(false, ex.ToString());
throw;
}
}
public void CreateFolder()
@@ -1624,6 +1679,9 @@ namespace Duplicati.Library.Main
ProtectedInvoke("DisposeInternal");
if (m_encryption != null)
m_encryption.Dispose();
if (m_backendInterfaceLogger != null)
m_backendInterfaceLogger.EndOperation();
}
#endregion
@@ -41,6 +41,7 @@ namespace Duplicati.Library.Main
private long m_tooLargeFiles;
private long m_filesWithError;
private bool m_full = false;
private string m_typeReason = null;
public BackupStatistics(DuplicatiOperationMode operationMode)
: base(operationMode)
@@ -149,12 +150,18 @@ namespace Duplicati.Library.Main
set { m_filesWithError = value; }
}
public void SetTypeReason(string reason)
{
m_typeReason = reason;
}
public override string ToString()
{
//TODO: Figure out how to translate this without breaking the output parser
StringBuilder sb = new StringBuilder();
sb.Append("BackupType : " + (this.Full ? "Full" : "Incremental") + "\r\n");
if (this.m_typeReason != null)
sb.Append("TypeReason : " + this.m_typeReason + "\r\n");
sb.Append("BeginTime : " + this.BeginTime.ToString(System.Globalization.CultureInfo.InvariantCulture) + "\r\n");
sb.Append("EndTime : " + this.EndTime.ToString(System.Globalization.CultureInfo.InvariantCulture) + "\r\n");
sb.Append("Duration : " + this.Duration.ToString() + "\r\n");
@@ -108,6 +108,8 @@
<DependentUpon>RSyncDir.resx</DependentUpon>
</Compile>
<Compile Include="VerificationFile.cs" />
<Compile Include="StateVerification\StateDatabase.cs" />
<Compile Include="StateVerification\LogEntryClasses.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Compression\Duplicati.Library.Compression.csproj">
@@ -190,4 +192,7 @@
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<Folder Include="StateVerification\" />
</ItemGroup>
</Project>
+58 -4
View File
@@ -183,8 +183,14 @@ namespace Duplicati.Library.Main
/// The number of restore patches
/// </summary>
private int m_restorePatches = 0;
/// <summary>
/// Cache of the last progress message
/// </summary>
private string m_lastProgressMessage = "";
/// <summary>
/// A flag indicating if logging has been set, used to dispose the logging
/// </summary>
private bool m_hasSetLogging = false;
/// <summary>
/// A flag toggling if the upload progress is reported,
@@ -335,7 +341,8 @@ namespace Duplicati.Library.Main
m_asyncReserved = ASYNC_RESERVED;
m_allowUploadProgress = false;
}
//Unused, but triggers errors in the encryption setup here
Library.Interface.IEncryption encryptionModule = m_options.NoEncryption ? null : DynamicLoader.EncryptionLoader.GetModule(m_options.EncryptionModule, m_options.Passphrase, m_options.RawOptions);
using (new Logging.Timer("Backup from " + string.Join(";", sources) + " to " + m_backend))
@@ -349,6 +356,8 @@ namespace Duplicati.Library.Main
CheckLiveControl();
bool full = m_options.Full;
if (full)
bs.SetTypeReason(string.Format(Strings.Interface.FullBecauseFlagWasSet, "full"));
backend = new BackendWrapper(bs, m_backend, m_options);
backend.ProgressEvent += new Duplicati.Library.Main.RSync.RSyncDir.ProgressEventDelegate(BackupTransfer_ProgressEvent);
@@ -364,6 +373,8 @@ namespace Duplicati.Library.Main
if (backupsets.Count == 0)
{
if (!full)
bs.SetTypeReason(Strings.Interface.FullBecauseBackendIsEmpty);
full = true;
}
else
@@ -400,11 +411,39 @@ namespace Duplicati.Library.Main
}
}
string fullCriteria1 = null;
string fullCriteria2 = null;
if (!full)
{
full = DateTime.Now > m_options.FullIfOlderThan(backupsets[backupsets.Count - 1].Time);
if (!full && m_options.FullIfMoreThanNInvcrementals > 0)
full = backupsets[backupsets.Count - 1].Incrementals.Count >= m_options.FullIfMoreThanNInvcrementals;
if (full)
bs.SetTypeReason(string.Format(Strings.Interface.FullBecauseLastFullIsFrom, backupsets[backupsets.Count - 1].Time, m_options.FullIfOlderThanValue));
else if (!string.IsNullOrEmpty(m_options.FullIfOlderThanValue))
fullCriteria1 = string.Format(Strings.Interface.IncrementalBecauseLastFullIsFrom, backupsets[backupsets.Count - 1].Time, m_options.FullIfOlderThanValue);
}
if (!full && m_options.FullIfMoreThanNIncrementals > 0)
{
full = backupsets[backupsets.Count - 1].Incrementals.Count >= m_options.FullIfMoreThanNIncrementals;
if (full)
bs.SetTypeReason(string.Format(Strings.Interface.FullBecauseThereAreNIncrementals, backupsets[backupsets.Count - 1].Incrementals.Count, m_options.FullIfMoreThanNIncrementals));
else
fullCriteria2 = string.Format(Strings.Interface.IncrementalBecauseThereAreNIncrementals, backupsets[backupsets.Count - 1].Incrementals.Count, m_options.FullIfMoreThanNIncrementals);
}
bs.Full = full;
if (!full)
{
if (fullCriteria1 == null && fullCriteria2 == null)
bs.SetTypeReason(Strings.Interface.IncrementalBecauseNoFlagsWereSet);
else if (fullCriteria2 == null)
bs.SetTypeReason(fullCriteria1);
else if (fullCriteria1 == null)
bs.SetTypeReason(fullCriteria2);
else
bs.SetTypeReason(fullCriteria1 + ". " + fullCriteria2);
}
List<string> controlfiles = new List<string>();
if (!string.IsNullOrEmpty(m_options.SignatureControlFiles))
@@ -448,6 +487,8 @@ namespace Duplicati.Library.Main
if (m_options.FullIfSourceFolderChanged)
{
Logging.Log.WriteMessage("Source folder count changed, issuing full backup", Duplicati.Library.Logging.LogMessageType.Information);
if (!full)
bs.SetTypeReason(Strings.Interface.FullBecauseSourceFoldersChanged);
full = true;
}
else
@@ -473,6 +514,8 @@ namespace Duplicati.Library.Main
if (m_options.FullIfSourceFolderChanged)
{
Logging.Log.WriteMessage("Source folders changed, issuing full backup", Duplicati.Library.Logging.LogMessageType.Information);
if (!full)
bs.SetTypeReason(Strings.Interface.FullBecauseSourceFoldersChanged);
full = true;
break; //Exit the folder loop
}
@@ -1811,7 +1854,10 @@ namespace Duplicati.Library.Main
OperationRunning(true);
if (!string.IsNullOrEmpty(m_options.Logfile))
{
m_hasSetLogging = true;
Library.Logging.Log.CurrentLog = new Library.Logging.StreamLog(m_options.Logfile);
}
if (stats != null)
{
@@ -2501,6 +2547,14 @@ namespace Duplicati.Library.Main
m_options.LoadedModules.Clear();
OperationRunning(false);
}
if (m_hasSetLogging && Logging.Log.CurrentLog is Logging.StreamLog)
{
Logging.StreamLog sl = (Logging.StreamLog)Logging.Log.CurrentLog;
Logging.Log.CurrentLog = null;
sl.Dispose();
m_hasSetLogging = false;
}
}
#endregion
+33 -1
View File
@@ -203,6 +203,7 @@ namespace Duplicati.Library.Main
new CommandLineArgument("allow-sleep", CommandLineArgument.ArgumentType.Boolean, Strings.Options.AllowsleepShort, Strings.Options.AllowsleepShort, "false"),
new CommandLineArgument("no-connection-reuse", CommandLineArgument.ArgumentType.Boolean, Strings.Options.NoconnectionreuseShort, Strings.Options.NoconnectionreuseLong, "false"),
new CommandLineArgument("backend-log-database", CommandLineArgument.ArgumentType.Path, Strings.Options.BackendlogdatabaseShort, Strings.Options.BackendlogdatabaseLong),
});
}
}
@@ -288,10 +289,26 @@ namespace Duplicati.Library.Main
}
}
/// <summary>
/// Gets the string describing when a full backup should be performed
/// </summary>
public string FullIfOlderThanValue
{
get
{
string v;
if (!m_options.TryGetValue("full-if-older-than", out v))
return null;
else if (string.IsNullOrEmpty(v))
return null;
return v;
}
}
/// <summary>
/// A value indicating how many incrementals are required to trigger a full backup
/// </summary>
public int FullIfMoreThanNInvcrementals
public int FullIfMoreThanNIncrementals
{
get
{
@@ -978,6 +995,21 @@ namespace Duplicati.Library.Main
/// </summary>
public bool NoConnectionReuse { get { return GetBool("no-connection-reuse"); } }
/// <summary>
/// The path to a log database file, or null
/// </summary>
public string Backendlogdatabase
{
get
{
string value;
if (!m_options.TryGetValue("backend-log-database", out value))
value = null;
return value;
}
}
/// <summary>
/// Gets a list of modules, the key indicates if they are loaded
/// </summary>
+7
View File
@@ -2224,6 +2224,13 @@ namespace Duplicati.Library.Main.RSync
public void Dispose()
{
if (m_lastPartialFile != null)
{
try { m_lastPartialFile.Dispose(); }
catch { }
m_lastPartialFile = null;
}
if (m_patches != null)
{
foreach (Library.Interface.ICompression arc in m_patches)
@@ -0,0 +1,132 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace Duplicati.Library.Main.StateVerification
{
/// <summary>
/// Represents a single invocation of Duplicati
/// </summary>
[XmlType(TypeName="collection")]
[XmlRootAttribute(ElementName="duplicati-state-db")]
[Serializable()]
public class InvocationCollection
{
[XmlAttribute("begin")]
public DateTime BeginTime;
[XmlAttribute("end")]
public DateTime EndTime;
[XmlAttribute("operation")]
public string Operation;
[XmlElement("events")]
[XmlElement("list", typeof(ListLogEntry))]
[XmlElement("put", typeof(PutLogEntry))]
[XmlElement("get", typeof(GetLogEntry))]
[XmlElement("delete", typeof(DeleteLogEntry))]
[XmlElement("createfolder", typeof(CreateFolderLogEntry))]
public List<LogEntryBase> Entries;
}
/// <summary>
/// The base for all operations performed on a remote folder
/// </summary>
[Serializable()]
public abstract class LogEntryBase
{
[XmlAttribute("op")]
public BackendOperation Operation;
[XmlElement("message")]
public string LogMessage;
[XmlAttribute("success")]
public bool Success;
[XmlAttribute("timestamp")]
public DateTime Timestamp = DateTime.Now;
}
/// <summary>
/// A single remote file
/// </summary>
[XmlType(TypeName="file")]
public class FileItem
{
[XmlAttribute("name")]
public string Name;
[XmlAttribute("size")]
public long Size;
[XmlAttribute("modified")]
public DateTime Modified;
}
/// <summary>
/// Representation of the LIST operation
/// </summary>
[XmlType(TypeName="list")]
public class ListLogEntry : LogEntryBase
{
[XmlElement("contents")]
public List<FileItem> Files;
}
/// <summary>
/// Representation of the file based entries
/// </summary>
public abstract class FileEntryType : LogEntryBase
{
[XmlElement("file")]
public FileItem File;
}
/// <summary>
/// Representation of a DELETE operation
/// </summary>
[XmlType(TypeName="delete")]
public class DeleteLogEntry : FileEntryType
{
}
/// <summary>
/// Representation of the GET operation
/// </summary>
[XmlType(TypeName="get")]
public class GetLogEntry : FileEntryType
{
}
/// <summary>
/// Representation of the PUT operation
/// </summary>
[XmlType(TypeName="put")]
public class PutLogEntry : FileEntryType
{
}
/// <summary>
/// Representation of the CREATEFOLDER operation
/// </summary>
[XmlType(TypeName="createfolder")]
public class CreateFolderLogEntry : LogEntryBase
{
}
}
@@ -0,0 +1,334 @@
#region Disclaimer / License
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace Duplicati.Library.Main.StateVerification
{
/// <summary>
/// Possible backend operations
/// </summary>
public enum BackendOperation
{
Get,
Put,
List,
Delete,
CreateFolder
}
/// <summary>
/// Maintains local state information about the expected remote directory contents
/// </summary>
public class StateDatabase : Duplicati.Library.Interface.IBackendInteraction, IEnumerable<LogEntryBase>
{
private string m_filename;
private List<InvocationCollection> m_invocations;
private InvocationCollection m_current;
private CommunicationStatistics m_stats;
public StateDatabase(string filename, CommunicationStatistics stats)
{
m_filename = filename;
m_stats = stats;
if (System.IO.File.Exists(filename))
{
XmlSerializer s = new XmlSerializer(typeof(List<InvocationCollection>), new XmlRootAttribute("duplicati-state-db"));
using (System.IO.FileStream fs = System.IO.File.OpenRead(m_filename))
m_invocations = (List<InvocationCollection>)s.Deserialize(fs);
}
else
{
m_invocations = new List<InvocationCollection>();
}
m_current = new InvocationCollection();
m_current.BeginTime = DateTime.Now;
m_current.Entries = new List<LogEntryBase>();
}
public void BeginOperation(string name)
{
m_current.Operation = name;
}
public void EndOperation()
{
m_current.EndTime = DateTime.Now;
Save();
}
private class ItemEnumerator : IEnumerator<LogEntryBase>
{
private List<InvocationCollection> m_invocations;
private InvocationCollection m_current;
private int m_i;
private int m_j;
private bool m_isCurrentAdded;
public ItemEnumerator(List<InvocationCollection> invocations, InvocationCollection current)
{
m_invocations = invocations;
m_current = current;
m_isCurrentAdded = invocations.Count > 0 && invocations[invocations.Count - 1] == current;
this.Reset();
}
#region IEnumerator[LogEntryBase] implementation
public LogEntryBase Current
{
get
{
if (m_i >= m_invocations.Count + (m_isCurrentAdded ? 0 : 1))
return null;
InvocationCollection ic = (m_i >= m_invocations.Count) ? m_current : m_invocations[m_i];
if (m_j >= ic.Entries.Count)
return null;
return ic.Entries[m_j];
}
}
#endregion
#region IEnumerator implementation
public bool MoveNext ()
{
if (m_i >= m_invocations.Count + (m_isCurrentAdded ? 0 : 1))
return false;
InvocationCollection ic = (m_i >= m_invocations.Count) ? m_current : m_invocations[m_i];
m_j++;
if (m_j >= ic.Entries.Count)
{
m_i++;
m_j = -1;
return MoveNext();
}
return true;
}
public void Reset ()
{
m_i = 0;
m_j = -1;
}
object System.Collections.IEnumerator.Current
{
get
{
return this.Current;
}
}
#endregion
#region IDisposable implementation
public void Dispose ()
{
}
#endregion
}
private int FindFileItem(List<FileItem> files, string name)
{
for(int i = 0; i < files.Count; i++)
if (files[i].Name.Equals(name, StringComparison.InvariantCulture))
return i;
return -1;
}
public List<FileItem> GetAndVerifyCurrentState()
{
//First we find the most recent LIST operation
List<FileItem> last_list = new List<FileItem>();
foreach(LogEntryBase leb in this)
{
if (leb.Success)
{
if (leb.Operation == BackendOperation.List)
{
//If there was a list operation before, check if we have the same contents
List<FileItem> new_list = ((ListLogEntry)leb).Files;
if (last_list != null && last_list.Count != 0)
{
StringBuilder changeMessages = new StringBuilder();
foreach(FileItem fi in new_list)
{
int ix = FindFileItem(last_list, fi.Name);
if (ix == -1)
changeMessages.AppendLine("A file was added unexpectedly: " + fi.Name);
else
last_list.RemoveAt(ix);
}
foreach(FileItem fi in last_list)
changeMessages.AppendLine("A file was removed unexpectedly: " + fi.Name);
if (changeMessages.Length > 0 && m_stats != null)
{
m_stats.LogWarning("Change found in list @" + leb.Timestamp
+ Environment.NewLine +
changeMessages.ToString(), null);
}
}
last_list = new List<FileItem>(new_list);
}
if (last_list != null)
{
if (leb.Operation == BackendOperation.Put)
{
//Check for overwrite
int ix = FindFileItem(last_list, ((PutLogEntry)leb).File.Name);
if (ix != -1)
last_list.RemoveAt(ix);
last_list.Add(((PutLogEntry)leb).File);
}
else if (leb.Operation == BackendOperation.Delete)
{
string name = ((DeleteLogEntry)leb).File.Name;
int ix = FindFileItem(last_list, name);
if (ix == -1)
{
if (m_stats != null)
m_stats.LogWarning("Delete @" + leb.Timestamp + " for file not found: " + name, null);
}
else
last_list.RemoveAt(ix);
}
}
}
}
return last_list;
}
public void Save()
{
if (m_invocations.Count == 0 || m_invocations[m_invocations.Count -1] != m_current)
m_invocations.Add(m_current);
XmlSerializer s = new XmlSerializer(typeof(List<InvocationCollection>), new XmlRootAttribute("duplicati-state-db"));
using (System.IO.FileStream fs = System.IO.File.OpenWrite(m_filename))
s.Serialize(fs, m_invocations);
}
public void RegisterGet(Duplicati.Library.Interface.IFileEntry entry, bool success, String errorMessage)
{
m_current.Entries.Add(new GetLogEntry() {
Operation = BackendOperation.Get,
Success = success,
LogMessage = errorMessage,
File = new FileItem() {
Name = entry.Name,
Size = entry.Size,
Modified = entry.LastModification
}
});
}
public void RegisterDelete(Duplicati.Library.Interface.IFileEntry entry, bool success, String errorMessage)
{
m_current.Entries.Add(new DeleteLogEntry() {
Operation = BackendOperation.Delete,
Success = success,
LogMessage = errorMessage,
File = new FileItem() {
Name = entry.Name,
Size = entry.Size,
Modified = entry.LastModification
}
});
}
public void RegisterPut(Duplicati.Library.Interface.IFileEntry entry, bool success, String errorMessage)
{
m_current.Entries.Add(new PutLogEntry() {
Operation = BackendOperation.Put,
Success = success,
LogMessage = errorMessage,
File = new FileItem() {
Name = entry.Name,
Size = entry.Size,
Modified = entry.LastModification
}
});
}
public void RegisterCreateFolder(bool success, String errorMessage)
{
m_current.Entries.Add(new CreateFolderLogEntry() {
Operation = BackendOperation.CreateFolder,
Success = success,
LogMessage = errorMessage
});
}
public void RegisterList(List<Duplicati.Library.Interface.IFileEntry> files, bool success, String errorMessage)
{
var ent = new ListLogEntry() {
Operation = BackendOperation.List,
LogMessage = errorMessage,
Success = success,
Files = files == null ? null : new List<FileItem>()
};
if (files != null)
foreach(var f in files)
ent.Files.Add(new FileItem() {
Name = f.Name,
Size = f.Size,
Modified = f.LastModification
});
m_current.Entries.Add(ent);
//As we have added the entry, we can just run the normal verification process
GetAndVerifyCurrentState();
}
#region IEnumerable[LogEntryBase] implementation
public IEnumerator<LogEntryBase> GetEnumerator ()
{
return new ItemEnumerator(m_invocations, m_current);
}
#endregion
#region IEnumerable implementation
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
{
return GetEnumerator();
}
#endregion
}
}
+73 -1
View File
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.237
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -204,6 +204,78 @@ namespace Duplicati.Library.Main.Strings {
}
}
/// <summary>
/// Looks up a localized string similar to A full backup is made because no existing backup chains were found on the destination.
/// </summary>
internal static string FullBecauseBackendIsEmpty {
get {
return ResourceManager.GetString("FullBecauseBackendIsEmpty", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to A full backup was forced with the --{0} flag.
/// </summary>
internal static string FullBecauseFlagWasSet {
get {
return ResourceManager.GetString("FullBecauseFlagWasSet", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to A full backup is made because the latest full backup is from {0} and the full backup threshold is {1}.
/// </summary>
internal static string FullBecauseLastFullIsFrom {
get {
return ResourceManager.GetString("FullBecauseLastFullIsFrom", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to A full backup is made because the source folders have changed.
/// </summary>
internal static string FullBecauseSourceFoldersChanged {
get {
return ResourceManager.GetString("FullBecauseSourceFoldersChanged", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to A full backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}.
/// </summary>
internal static string FullBecauseThereAreNIncrementals {
get {
return ResourceManager.GetString("FullBecauseThereAreNIncrementals", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An incremental backup is made because the latest full backup is from {0} and the full backup threshold is {1}.
/// </summary>
internal static string IncrementalBecauseLastFullIsFrom {
get {
return ResourceManager.GetString("IncrementalBecauseLastFullIsFrom", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An incremental backup is made because no full backup criteria was found.
/// </summary>
internal static string IncrementalBecauseNoFlagsWereSet {
get {
return ResourceManager.GetString("IncrementalBecauseNoFlagsWereSet", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An incremental backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}.
/// </summary>
internal static string IncrementalBecauseThereAreNIncrementals {
get {
return ResourceManager.GetString("IncrementalBecauseThereAreNIncrementals", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An internal error occured, and the operation was aborted to protect the backup sets.
/// </summary>
+26 -2
View File
@@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BadSortingDetectedError" xml:space="preserve">
<value>Bad sorting of backup times detected</value>
@@ -333,4 +333,28 @@
<data name="DeleteManifestsSuggestion" xml:space="preserve">
<value>If this error cannot be resolved, you can either create a new full backup or delete the offending manifests manually, followed by a cleanup command. The offending manifest files are:</value>
</data>
<data name="FullBecauseBackendIsEmpty" xml:space="preserve">
<value>A full backup is made because no existing backup chains were found on the destination</value>
</data>
<data name="FullBecauseFlagWasSet" xml:space="preserve">
<value>A full backup was forced with the --{0} flag</value>
</data>
<data name="FullBecauseLastFullIsFrom" xml:space="preserve">
<value>A full backup is made because the latest full backup is from {0} and the full backup threshold is {1}</value>
</data>
<data name="FullBecauseSourceFoldersChanged" xml:space="preserve">
<value>A full backup is made because the source folders have changed</value>
</data>
<data name="FullBecauseThereAreNIncrementals" xml:space="preserve">
<value>A full backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}</value>
</data>
<data name="IncrementalBecauseLastFullIsFrom" xml:space="preserve">
<value>An incremental backup is made because the latest full backup is from {0} and the full backup threshold is {1}</value>
</data>
<data name="IncrementalBecauseNoFlagsWereSet" xml:space="preserve">
<value>An incremental backup is made because no full backup criteria was found</value>
</data>
<data name="IncrementalBecauseThereAreNIncrementals" xml:space="preserve">
<value>An incremental backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}</value>
</data>
</root>
+19 -1
View File
@@ -1229,5 +1229,23 @@ namespace Duplicati.Library.Main.Strings {
return ResourceManager.GetString("VssexcludewritersShort", resourceCulture);
}
}
}
/// <summary>
/// Looks up a localized string similar to Database log of remote operations.
/// </summary>
internal static string BackendlogdatabaseShort {
get {
return ResourceManager.GetString("BackendlogdatabaseShort", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use this option to specify a path to a file that will store information about backend operations. This option can be used to track down errors by comparing the backend state with the expected backend state..
/// </summary>
internal static string BackendlogdatabaseLong {
get {
return ResourceManager.GetString("BackendlogdatabaseLong", resourceCulture);
}
}
}
}
+7 -1
View File
@@ -505,6 +505,12 @@
<value>If no files have changed, Duplicati will not upload a backup set. If the backup data is used to verify that a backup was executed, this option will make Duplicati upload a backupset even if it is empty</value>
</data>
<data name="UploadUnchangedBackupsShort" xml:space="preserve">
<value>Upload empty backup files </value>
<value>Upload empty backup files</value>
</data>
<data name="BackendlogdatabaseShort" xml:space="preserve">
<value>Database log of remote operations</value>
</data>
<data name="BackendlogdatabaseLong" xml:space="preserve">
<value>Use this option to specify a path to a file that will store information about backend operations. This option can be used to track down errors by comparing the backend state with the expected backend state.</value>
</data>
</root>
@@ -80,7 +80,7 @@ namespace Duplicati.Library.SharpRSync
/// <param name="input">The stream to read from</param>
public ChecksumFileReader(System.IO.Stream input)
{
m_hashAlgorithm = Mono.Security.Cryptography.MD4.Create("MD4");
m_hashAlgorithm = MD4Helper.Create();
m_hashAlgorithm.Initialize();
//Read and verify that the file header is valid
@@ -85,7 +85,7 @@ namespace Duplicati.Library.SharpRSync
m_blocklen = blocklength;
m_stronglen = stronglength;
m_outstream = outputstream;
m_hashAlgorithm = Mono.Security.Cryptography.MD4.Create("MD4");
m_hashAlgorithm = MD4Helper.Create();
m_hashAlgorithm.Initialize();
@@ -107,6 +107,7 @@
</Compile>
<Compile Include="UnitTest.cs" />
<Compile Include="Utility.cs" />
<Compile Include="MD4Helper.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
+40
View File
@@ -0,0 +1,40 @@
// Copyright (C) 2011, Kenneth Skovhede
// http://www.hexad.dk, opensource@hexad.dk
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
using System;
using System.Security.Cryptography;
namespace Duplicati.Library.SharpRSync
{
/// <summary>
/// MD4 instance creation helper, uses system MD4 if found, otherwise uses the bundled managed MD4 implementation from Mono
/// </summary>
public static class MD4Helper
{
/// <summary>
/// Create a new instance of the MD4 hash algorithm
/// </summary>
public static HashAlgorithm Create()
{
HashAlgorithm o = CryptoConfig.CreateFromName("MD4") as System.Security.Cryptography.HashAlgorithm;
if (o != null)
return o;
else
return new Mono.Security.Cryptography.MD4Managed();
}
}
}
+6 -1
View File
@@ -25,6 +25,11 @@ namespace Duplicati.Library.SharpRSync
{
public static class Utility
{
/// <summary>
/// Size of buffers for copying stream
/// </summary>
public static long DEFAULT_BUFFER_SIZE = 64 * 1024;
/// <summary>
/// Some streams can return a number that is less than the requested number of bytes.
/// This is usually due to fragmentation, and is solved by issuing a new read.
@@ -90,7 +95,7 @@ namespace Duplicati.Library.SharpRSync
/// <param name="count">The number of bytes to copy</param>
public static void StreamCopy(System.IO.Stream input, System.IO.Stream output, long count)
{
byte[] buf = new byte[4096];
byte[] buf = new byte[DEFAULT_BUFFER_SIZE];
while (count > 0)
{
int a = input.Read(buf, 0, (int)Math.Min(count, buf.Length));
+11 -1
View File
@@ -25,6 +25,16 @@ namespace Duplicati.Library.Utility
{
public static class Utility
{
/// <summary>
/// Size of buffers for copying stream
/// </summary>
public static long DEFAULT_BUFFER_SIZE = 64 * 1024;
/// <summary>
/// A value indicating if the current process is running in 64bit mode
/// </summary>
public static readonly bool Is64BitProcess = IntPtr.Size == 8;
/// <summary>
/// Gets the hash algorithm used for calculating a hash
/// </summary>
@@ -70,7 +80,7 @@ namespace Duplicati.Library.Utility
try { source.Position = 0; }
catch { }
byte[] buf = new byte[4096];
byte[] buf = new byte[DEFAULT_BUFFER_SIZE];
int read;
while ((read = source.Read(buf, 0, buf.Length)) != 0)
+2
View File
@@ -64,6 +64,8 @@ namespace Duplicati.License
return "1.3 Beta (r1047)";
else if (v == new Version(1, 3, 0, 1066))
return "1.3";
else if (v == new Version(1, 3, 0, 1205))
return "1.3.1";
else
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
+11 -11
View File
@@ -1,26 +1,26 @@
Duplicati is an Open Source project, originally written and maintained by Kenneth Skovhede. We would like to thank all contributors who made Duplicati what it is today. A special thanks to the many users who let us know how they are using Duplicati, ask for new features, test development builds and thus help us improve Duplicati further.
Duplicati is an Open Source project, originally written and maintained by Kenneth Skovhede. We would like to thank all contributors and maintainers of third party modules who made Duplicati what it is today. A special thanks to the many users who let us know how they are using Duplicati, ask for new features, test development builds and thus help us improve Duplicati further.
Software Development:
Kenneth Skovhede - kenneth@duplicati.com
René Stach - rene@duplicati.com
Livio Bertacco
Daniel Halan
Birunthan Mohanathas
James Colton
Artwork:
Kenneth Skovhede
Translations:
Brazilian, pt-BR: Gabriell Hahmann
French, fr-FR: Matthieu Weber
Spanish, es-ES: JosepV
German, de-DE: Ernst Mair
: Mathias Block
: DooM ElHado
: Leo nowhere
Danish, da-DK: Kenneth Skovhede
Chinese, zh-CN: Born Kanas
Danish, da-DK: Kenneth Skovhede
French, fr-FR: Matthieu Weber
German, de-DE: Ernst Mair, Mathias Block, DooM ElHado, Leo nowhere
Italian, it-IT: Riccardo Stoppani
Spanish, es-ES: JosepV
Duplicati.Scheduler:
Kenneth Bergeron, IAP Worldwide Services, Inc
NOAA :: National Marine Fisheries Service
The licenses of the third party libraries used by Duplicati can be seen in the list to the left.
NOAA :: National Marine Fisheries Service
Binary file not shown.
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ignore>{0}\t{1}</ignore>
<ignore>Password</ignore>
<ignore>OK</ignore>
<ignore>...</ignore>
<ignore>s</ignore>
<ignore>(...)</ignore>
<ignore>bytes</ignore>
<ignore>bytes/s</ignore>
<ignore>gb</ignore>
<ignore>gb/s</ignore>
<ignore>kb</ignore>
<ignore>kb/s</ignore>
<ignore>mb</ignore>
<ignore>mb/s</ignore>
<ignore>Stop</ignore>
<ignore>backup</ignore>
<ignore>{0}</ignore>
<ignore>--{0}:{1}</ignore>
<ignore>Backup: {0}</ignore>
<ignore>CloudFiles (Rackspace)</ignore>
<ignore>Server</ignore>
<ignore>keyfile</ignore>
<ignore>{0} bytes</ignore>
<ignore>{0:N} GB</ignore>
<ignore>{0:N} KB</ignore>
<ignore>{0:N} MB</ignore>
</root>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+86 -101
View File
@@ -119,38 +119,38 @@ Errors: {3}",""
"CommandLine\Strings\Program.es-ES.resx","VerificationErrorHeader","not-updated","Reported error messages:",""
"CommandLine\Strings\Program.es-ES.resx","WrongNumberOfCommandsError_v2","not-updated","Found {0} commands but expected {1}, commands:
{2}",""
"GUI\ApplicationSetup.es-ES.resx","$this.Text","updated","Duplicati setup","Instalación de Duplicati"
"GUI\ApplicationSetup.es-ES.resx","$this.Text","updated","Duplicati Options","Instalación de Duplicati"
"GUI\ApplicationSetup.es-ES.resx","AdvancedTab.Text","updated","Advanced","Avanzado"
"GUI\ApplicationSetup.es-ES.resx","BalloonNotificationLevel.ToolTip","updated","Choose the level of notification given by balloon tips","Elija el nivel de notificaciones dadas por globos de sugerencias"
"GUI\ApplicationSetup.es-ES.resx","Bandwidth.ToolTip","updated","Set the initial bandwidth limits to use in Duplicati","Selecciona el límite de ancho de banda usado por Duplicati"
"GUI\ApplicationSetup.es-ES.resx","BasicTab.Text","updated","Basic","Básico"
"GUI\ApplicationSetup.es-ES.resx","CacheSizeLabel.Text","updated","Calculating cache size ...","Calculando el tamaño de caché ..."
"GUI\ApplicationSetup.es-ES.resx","CacheSizeLabel.ToolTip","updated","The size of the current cache folder","El tamaño de la carpeta de caché actual"
"GUI\ApplicationSetup.es-ES.resx","CacheSizeLabel.Text","updated","Calculating cache size...","Calculando el tamaño de caché ..."
"GUI\ApplicationSetup.es-ES.resx","CacheSizeLabel.ToolTip","unused","","El tamaño de la carpeta de caché actual"
"GUI\ApplicationSetup.es-ES.resx","CancelBtn.Text","updated","Cancel","Cancelar"
"GUI\ApplicationSetup.es-ES.resx","ClearCacheButton.Text","updated","Clear cache","Limpiar caché"
"GUI\ApplicationSetup.es-ES.resx","ClearCacheButton.ToolTip","updated","Clear any signature files stored in cache, they will be re-downloaded the next time the backup is activated","Limpiar cualquier fichero de firmas guardado en la caché, serán vueltos a descargar la próxima vez que la copia de seguridad se active"
"GUI\ApplicationSetup.es-ES.resx","ClearCacheButton.ToolTip","updated","Clear any signature files stored in cache. Signatures will be re-downloaded on next backup.","Limpiar cualquier fichero de firmas guardado en la caché, serán vueltos a descargar la próxima vez que la copia de seguridad se active"
"GUI\ApplicationSetup.es-ES.resx","CommonPassword.ToolTip","updated","Enter the default password to apply to new backups","Introduzca la contraseña por defecto para aplicar a nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","EncryptionMethod.Text","updated","Encryption method","Método de encriptación"
"GUI\ApplicationSetup.es-ES.resx","EncryptionMethod.Text","updated","Encryption method:","Método de encriptación"
"GUI\ApplicationSetup.es-ES.resx","EncryptionMethod.ToolTip","updated","Choose the default encryption module to use for new backups","Selecciona el módulo de encriptación por defecto a usarse para las nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","EncryptionModule.ToolTip","updated","Choose the default encryption module to use for new backups","Selecciona el módulo de encriptación por defecto a usarse para las nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","groupBox1.Text","updated","User interface settings","Ajustes de interfaz de usuario"
"GUI\ApplicationSetup.es-ES.resx","groupBox2.Text","updated","Path settings (Advanced)","Configuración de ruta (Avanzado)"
"GUI\ApplicationSetup.es-ES.resx","groupBox4.Text","updated","Backup control settings used at startup","Configuración de control de las copia de seguridad utilizado en el arranque"
"GUI\ApplicationSetup.es-ES.resx","HideDonateButton.Text","updated","Hide the donate button on the main wizard page","Esconde el botón de donaciones de la página principal del asistente"
"GUI\ApplicationSetup.es-ES.resx","HideDonateButton.ToolTip","updated","Check this box to prevent the display of the donation button in the wizard","Selecciona esta casilla para prevenir que se muestre el boón de donaciones en el asistente"
"GUI\ApplicationSetup.es-ES.resx","label1.Text","updated","Time a log is shown in recent backups","Tiempo que un registro se muestra en copias de seguridad recientes"
"GUI\ApplicationSetup.es-ES.resx","groupBox1.Text","updated","User interface","Ajustes de interfaz de usuario"
"GUI\ApplicationSetup.es-ES.resx","groupBox2.Text","updated","Cache","Configuración de ruta (Avanzado)"
"GUI\ApplicationSetup.es-ES.resx","groupBox4.Text","updated","Default throttle settings","Configuración de control de las copia de seguridad utilizado en el arranque"
"GUI\ApplicationSetup.es-ES.resx","HideDonateButton.Text","updated","Hide Donate button on the main wizard page","Esconde el botón de donaciones de la página principal del asistente"
"GUI\ApplicationSetup.es-ES.resx","HideDonateButton.ToolTip","unused","","Selecciona esta casilla para prevenir que se muestre el boón de donaciones en el asistente"
"GUI\ApplicationSetup.es-ES.resx","label1.Text","updated","Time to display past backups in log:","Tiempo que un registro se muestra en copias de seguridad recientes"
"GUI\ApplicationSetup.es-ES.resx","label1.ToolTip","updated","Select the time a backup is displayed in the log window after completion","Seleccione el tiempo que una copia de seguridad es mostrada en la ventana de registros después de completarse"
"GUI\ApplicationSetup.es-ES.resx","label2.Text","updated","Sections","Secciones"
"GUI\ApplicationSetup.es-ES.resx","label3.Text","updated","User interface language","Idioma del interfaz de usuario"
"GUI\ApplicationSetup.es-ES.resx","label3.ToolTip","updated","Choose the language for the user interface (requires restart)","Escoje el idioma del interfaz de usuario (requiere reinicio)"
"GUI\ApplicationSetup.es-ES.resx","label4.Text","updated","Temporary folder","Carpeta temporal"
"GUI\ApplicationSetup.es-ES.resx","label4.ToolTip","updated","Enter the path where Duplicati stores temporary files","Introduce la ruta donde Duplicati almacena los ficheros temporales"
"GUI\ApplicationSetup.es-ES.resx","label5.Text","updated","Password","Contraseña"
"GUI\ApplicationSetup.es-ES.resx","label5.ToolTip","updated","Enter the default password to apply to new backups","Introduzca la contraseña por defecto para aplicar a nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","label6.Text","updated","Content","Contenido"
"GUI\ApplicationSetup.es-ES.resx","label7.Text","updated","Period to pause duplicati after startup","Período a pausar Duplicati después de arrancar"
"GUI\ApplicationSetup.es-ES.resx","label7.ToolTip","updated","Select the amount of time Duplicat is paused after startup","Selecciona el tiempo total que Duplicati debe estar pausado después de arrancar"
"GUI\ApplicationSetup.es-ES.resx","label8.Text","updated","Balloon notifications","Notificaciones"
"GUI\ApplicationSetup.es-ES.resx","label2.Text","updated","Sections:","Secciones"
"GUI\ApplicationSetup.es-ES.resx","label3.Text","updated","Language:","Idioma del interfaz de usuario"
"GUI\ApplicationSetup.es-ES.resx","label3.ToolTip","updated","Select user interface language (requires restart)","Escoje el idioma del interfaz de usuario (requiere reinicio)"
"GUI\ApplicationSetup.es-ES.resx","label4.Text","updated","Temporary folder:","Carpeta temporal"
"GUI\ApplicationSetup.es-ES.resx","label4.ToolTip","unused","","Introduce la ruta donde Duplicati almacena los ficheros temporales"
"GUI\ApplicationSetup.es-ES.resx","label5.Text","unused","","Contraseña"
"GUI\ApplicationSetup.es-ES.resx","label5.ToolTip","unused","","Introduzca la contraseña por defecto para aplicar a nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","label6.Text","updated","Content:","Contenido"
"GUI\ApplicationSetup.es-ES.resx","label7.Text","updated","Time to wait after startup:","Período a pausar Duplicati después de arrancar"
"GUI\ApplicationSetup.es-ES.resx","label7.ToolTip","updated","Select the amount of time Duplicati is paused after startup","Selecciona el tiempo total que Duplicati debe estar pausado después de arrancar"
"GUI\ApplicationSetup.es-ES.resx","label8.Text","updated","Backup notifications:","Notificaciones"
"GUI\ApplicationSetup.es-ES.resx","label8.ToolTip","updated","Choose the level of notification given by balloon tips","Elija el nivel de notificaciones dadas por globos de sugerencias"
"GUI\ApplicationSetup.es-ES.resx","LanguageSelection.ToolTip","updated","Choose the language for the user interface (requires restart)","Escoje el idioma del interfaz de usuario (requiere reinicio)"
"GUI\ApplicationSetup.es-ES.resx","LicenseLink.Text","updated","Homepage","Página principal"
@@ -158,9 +158,9 @@ Errors: {3}",""
"GUI\ApplicationSetup.es-ES.resx","LicenseSections.ToolTip","updated","Lists the available license sections","Listado de las secciones disponibles de licencias"
"GUI\ApplicationSetup.es-ES.resx","LicenseTab.Text","updated","License","Licencia"
"GUI\ApplicationSetup.es-ES.resx","OKBtn.Text","updated","OK","De acuerdo"
"GUI\ApplicationSetup.es-ES.resx","PasswordDefaultsGroup.Text","updated","Password settings applied to new backups","Configuración de contraseñas aplicada a nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","PasswordDefaultsGroup.Text","updated","Default password","Configuración de contraseñas aplicada a nuevas copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","RecentDuration.ToolTip","updated","Select the time a backup is displayed in the log window after completion","Selecciona el tiempo que una copia de seguridad es mostrada en la ventana de registro después de completarse"
"GUI\ApplicationSetup.es-ES.resx","SignatureCacheEnabled.Text","updated","Signature cache","Caché de firmas"
"GUI\ApplicationSetup.es-ES.resx","SignatureCacheEnabled.Text","updated","Signature cache:","Caché de firmas"
"GUI\ApplicationSetup.es-ES.resx","SignatureCacheEnabled.ToolTip","updated","A signature cache limits the amount of data Duplicati needs to download by keeping a copy on the machine, enabling this feature makes the backups faster","Un caché de firmas limita el total de datos que Duplicati necesita bajar al disponer de una copia en la máquina, activando esta característica se realizan las copias de seguridad más rápidamente"
"GUI\ApplicationSetup.es-ES.resx","SignatureCachePathBrowse.Text","missing","...",""
"GUI\ApplicationSetup.es-ES.resx","SignatureCachePathBrowse.ToolTip","updated","Browse for the signature cache folder","Navegar para encontrar la carpeta con la caché de firmas"
@@ -169,7 +169,7 @@ Errors: {3}",""
"GUI\ApplicationSetup.es-ES.resx","TempPathBrowse.Text","missing","...",""
"GUI\ApplicationSetup.es-ES.resx","TempPathBrowse.ToolTip","updated","Browse for the temporary folder","Navegar para encontrar la carpeta temporal"
"GUI\ApplicationSetup.es-ES.resx","ThreadPriorityPicker.ToolTip","updated","Set the initial thread priority to be used by Duplicati","Selecciona la prioridad de procesado usado por Duplicati"
"GUI\ApplicationSetup.es-ES.resx","UseCommonPassword.Text","updated","Use a password to protect backups","Usar una contraseña para proteger las copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","UseCommonPassword.Text","updated","Use password for new backups:","Usar una contraseña para proteger las copias de seguridad"
"GUI\ApplicationSetup.es-ES.resx","UseCommonPassword.ToolTip","updated","Enable this to use the same password for multiple backups","Activa esta opción para utilizar la misma contraseña para varias copias de seguridad"
"GUI\HelperControls\BackupFileList.es-ES.resx","changeDestinationToolStripMenuItem.Text","updated","Change destination...","Cambiar destino..."
"GUI\HelperControls\BackupFileList.es-ES.resx","folderBrowserDialog.Description","updated","Select the folder to restore to","Selecciona la carpeta donde restaurar"
@@ -259,17 +259,37 @@ Una nueva versión de Mono dará soporte a esta página."
"GUI\HelperControls\Strings\FilterEditor.es-ES.resx","InvalidCharsInFilenameError","updated","The filename {0} has invalid characters","El archivo {0} tiene caracteres inválidos "
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","BytesName","not-updated","bytes",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","BytesPerSecond","not-updated","bytes/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","GBName","not-updated","gb",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","GBPerSecond","not-updated","gb/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","KBName","not-updated","kb",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","KBPerSecond","not-updated","kb/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","MBName","not-updated","mb",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","MBPerSecond","not-updated","mb/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","GBName","not-updated","GB",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","GBPerSecond","not-updated","GB/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","KBName","not-updated","kB",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","KBPerSecond","not-updated","kB/s",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","MBName","not-updated","MB",""
"GUI\HelperControls\Strings\SizeSelector.es-ES.resx","MBPerSecond","not-updated","MB/s",""
"GUI\HelperControls\Strings\TestSearchSelection.es-ES.resx","FileName","not-updated","File Name '{0}'",""
"GUI\HelperControls\Strings\TestSearchSelection.es-ES.resx","FileType","not-updated","File Type '{0}'",""
"GUI\HelperControls\Strings\TestSearchSelection.es-ES.resx","TotalSizeLabel","not-updated","Total {0} files at {1}",""
"GUI\HelperControls\Strings\WaitForOperation.es-ES.resx","ReallyAbortQuestion","updated","Are you sure you want to abort the operation?","¿Está seguro que quiere abortar la operación?"
"GUI\HelperControls\Strings\WaitForOperation.es-ES.resx","UserCancelled","updated","The user cancelled the operation","El usuario ha cancelado la operación"
"GUI\HelperControls\TestSearchSelection.es-ES.resx","$this.Text","missing","Test Search Selection",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","btnCancel.Text","missing","Cancel",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","btnOK.Text","missing","OK",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","chFile.Text","missing","Filename",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","chFileExt.Text","missing","Ext",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","chPath.Text","missing","Path",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","chSize.Text","missing","Size",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","label1.Text","missing","Filters:",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","label2.Text","missing","Use context menu to add and remove filters",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","label3.Text","missing","Files to be included:",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","lbLoading.Text","missing","Scanning files, please wait....",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miExclude.Text","missing","Exclude",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miExcludeFileExt.Text","missing","Add file extension filter",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miExcludeFileName.Text","missing","Add filename filter",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miExcludeFilePath.Text","missing","File Path",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miInclude.Text","missing","Include",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miIncludeFileExt.Text","missing","Add file extension filter",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miIncludeFileName.Text","missing","Add filename filer",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","miIncludeFilePath.Text","missing","File path",""
"GUI\HelperControls\TestSearchSelection.es-ES.resx","removeFilterToolStripMenuItem.Text","missing","Remove Filter",""
"GUI\HelperControls\ThreadPriorityPicker.es-ES.resx","ThreadPriority.Items","updated","High (Not recommended)","Alto (no recomendado)"
"GUI\HelperControls\ThreadPriorityPicker.es-ES.resx","ThreadPriority.Items1","updated","Above normal","Por encima del normal"
"GUI\HelperControls\ThreadPriorityPicker.es-ES.resx","ThreadPriority.Items2","missing","Normal",""
@@ -296,55 +316,6 @@ Una nueva versión de Mono dará soporte a esta página."
"GUI\MainForm.es-ES.resx","stopToolStripMenuItem.Text","missing","Stop",""
"GUI\MainForm.es-ES.resx","throttleOptionsToolStripMenuItem.Text","updated","Throttle options...","Opciones del acelerador..."
"GUI\MainForm.es-ES.resx","wizardToolStripMenuItem.Text","updated","Wizard...","Asistente..."
"GUI\Properties\Resources.es-ES.resx","AddedFile","unused","","../Resources/AddedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","AddedFolder","unused","","../Resources/AddedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","AddedOrModifiedFile","unused","","../Resources/AddedOrModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Clock05","unused","","../Resources/Clock05.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Clock15","unused","","../Resources/Clock15.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Clock30","unused","","../Resources/Clock30.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Clock60","unused","","../Resources/Clock60.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","CloseMenuIcon","unused","","../Resources/CloseMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","ControlFile","unused","","../Resources/ControlFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Delay","unused","","../Resources/Delay.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","DeletedFile","unused","","../Resources/DeletedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","DeletedFolder","unused","","../Resources/DeletedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","donate_button","unused","","../Resources/donate_button.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Duplicati","unused","","../Resources/Duplicati.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","EmptyBackupStatusIcon","unused","","../Resources/EmptyBackupStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","ErrorStatusIcon","unused","","../Resources/ErrorStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","ExamineMenuIcon","unused","","../Resources/ExamineMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","FolderOpen","unused","","../Resources/FolderOpen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","FullBackup","unused","","../Resources/FullBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","help","unused","","../Resources/help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","IncompleteFile","unused","","../Resources/IncompleteFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","InterruptedStatusIcon","unused","","../Resources/InterruptedStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","LogMenuIcon","unused","","../Resources/LogMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","LogViewer","unused","","../Resources/LogViewer.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","ModifiedFile","unused","","../Resources/ModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","OKStatusIcon","unused","","../Resources/OKStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","PartialBackup","unused","","../Resources/PartialBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","PartialStatusIcon","unused","","../Resources/PartialStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Pause","unused","","../Resources/Pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Play","unused","","../Resources/Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","SettingsMenuIcon","unused","","../Resources/SettingsMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","SmallLogo","unused","","../Resources/SmallLogo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Status_OK","unused","","../Resources/Status OK.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Status_pause","unused","","../Resources/Status pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Status_Working","unused","","../Resources/Status Working.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","StatusMenuIcon","unused","","../Resources/StatusMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Stop","unused","","../Resources/Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Throttle","unused","","../Resources/Throttle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","ThrottleIcon","unused","","../Resources/Throttle.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Trash","unused","","../Resources/Trash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayNormal","unused","","../Resources/TrayNormal.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayNormalError","unused","","../Resources/TrayNormalError.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayNormalPause","unused","","../Resources/TrayNormalPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayNormalWarning","unused","","../Resources/TrayNormalWarning.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayWorking","unused","","../Resources/TrayWorking.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","TrayWorkingPause","unused","","../Resources/TrayWorkingPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","WarningStatusIcon","unused","","../Resources/WarningStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","Wizard","unused","","../Resources/Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.es-ES.resx","WizardMenuIcon","unused","","../Resources/WizardMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\RestoreBackup.es-ES.resx","$this.Text","updated","RestoreBackup","RestaurarCopiaSeguridad"
"GUI\RestoreBackup.es-ES.resx","CancelBtn.Text","updated","Cancel","Cancelar"
"GUI\RestoreBackup.es-ES.resx","folderBrowserDialog.Description","updated","Select the folder where the data will be restored to","Selecciona la carpeta donde los datos serán restaurados"
@@ -377,18 +348,18 @@ Una nueva versión de Mono dará soporte a esta página."
"GUI\ServiceStatus.es-ES.resx","viewLogToolStripMenuItem.Text","updated","View log ...","Ver registro..."
"GUI\ServiceStatus.es-ES.resx","wizardHelpLabel.Text","missing","(Create, edit, delete, run, restore backups)",""
"GUI\ServiceStatus.es-ES.resx","wizardLink.Text","updated","Duplicati Wizard","Asistente de Duplicati"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Continous","updated","While backup is running (and on errors/warnings)","Mientras una copia de seguridad está en marcha (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Errors","updated","On backup errors","En errores de copia de seguridad"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Off","updated","No balloon notifications","Sin notificaciones de globo"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Start","updated","On backup start (and errors/warnings)","Al inicio de copia de seguridad (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_StartAndStop","updated","On backup start and stop (and errors/warnings)","Al inicio y fin de copia de seguridad (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Warnings","updated","On backup errors and warnings","En errores y avisos de copia de seguridad"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Continous","updated","While running, and on errors, warnings","Mientras una copia de seguridad está en marcha (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Errors","updated","On errors","En errores de copia de seguridad"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Off","updated","No notifications","Sin notificaciones de globo"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Start","updated","On start, errors, warnings","Al inicio de copia de seguridad (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_StartAndStop","updated","On start, stop, errors, warnings","Al inicio y fin de copia de seguridad (y en los errores/avisos)"
"GUI\Strings\ApplicationSetup.es-ES.resx","BalloonNotification_Warnings","updated","On errors, warnings","En errores y avisos de copia de seguridad"
"GUI\Strings\ApplicationSetup.es-ES.resx","CacheSize","updated","Cache size: {0}","Tamaño de caché: {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","CalculatingCacheSize","updated","Calculating cache size ...","Calculando el tamaño de caché ..."
"GUI\Strings\ApplicationSetup.es-ES.resx","ConfirmCacheDelete","updated","Delete signature files in the folder:
{0}","Borrar ficheros de firmas en la carpeta: {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","DefaultLanguage","updated","System language, {0}","Lenguaje del sistema, {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","DialogTitle","updated","Duplicati Setup, version {0}","Instalación de Duplicati, versión {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","DialogTitle","updated","Duplicati Options, version {0}","Instalación de Duplicati, versión {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","EncryptionModuleLoadError","updated","An error occured while loading encryption modules: {0}","Ha ocurrido un error mientras se cargaban los módulos de encriptación: {0}"
"GUI\Strings\ApplicationSetup.es-ES.resx","ErrorWhileExaminingFolder","updated","An exception occured while examining the folder: {0}.
Do you want to use that folder anyway?","Ha ocurrido una excepción mientras se examinaba la carpeta: {0}. ¿Quieres usar esta carpeta igualmente?"
@@ -420,7 +391,7 @@ Do you want to use that folder anyway?","La carpeta seleccionada no contiene el
"GUI\Strings\Common.es-ES.resx","TwoWeeks","updated","Two weeks","Dos semanas"
"GUI\Strings\DatabaseUpgrader.es-ES.resx","BackupFilenamePrefix","updated","backup","copia de seguridad"
"GUI\Strings\DatabaseUpgrader.es-ES.resx","DatabaseFormatError","updated","Unable to determine database format: {0}","Imposible determinar el formato de la base de datos: {0}"
"GUI\Strings\DatabaseUpgrader.es-ES.resx","InvalidVersionError","updated","
"GUI\Strings\DatabaseUpgrader.es-ES.resx","InvalidVersionError","updated","
The database has version {0} but the largest supported version is {1}.
This is likely caused by upgrading to a newer version and then downgrading.
@@ -928,10 +899,13 @@ Error message: {0}",""
"Library\Backend\FTP\FTPUI.es-ES.resx","label3.Text","updated","Username","Nombre de usuario"
"Library\Backend\FTP\FTPUI.es-ES.resx","label4.Text","updated","Password","Contraseña"
"Library\Backend\FTP\FTPUI.es-ES.resx","label5.Text","updated","Port (optional)","Puerto (opcional)"
"Library\Backend\FTP\FTPUI.es-ES.resx","label6.Text","missing","Note: Some FTP servers have trouble dealing with more than 2000 files. For this reason, you are advised to select a large volume size so the number of files is low.",""
"Library\Backend\FTP\FTPUI.es-ES.resx","PassiveConnection.Text","updated","Use passive connection","Usar conexión pasiva"
"Library\Backend\FTP\FTPUI.es-ES.resx","TestConnection.Text","updated","Test connection","Probar conexión"
"Library\Backend\FTP\FTPUI.es-ES.resx","UseSSL.Text","updated","Use SSL","Usar SSL"
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","Description","not-updated","This backend can read and write data to an FTP based backend. Allowed formats are ""ftp://hostname/folder"" or ""ftp://username:password@hostname/folder""",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionDisableUploadVerifyLong","not-updated","To protect against network failures, every upload will be attempted verified. Use this option to disable this verfication to make the upload faster by more unsafe.",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionDisableUploadVerifyShort","not-updated","Disable upload verification",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionFTPActiveLong","not-updated","If this flag is set, the FTP connection is made in active mode. Even if the ""ftp-passive"" flag is also set, the connection will be made in active mode",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionFTPActiveShort","not-updated","Toggles the FTP connections method",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionFTPPassiveLong","not-updated","If this flag is set, the FTP connection is made in passive mode, which works better with some firewalls. If the ""ftp-regular"" flag is also set, this flag is ignored",""
@@ -945,6 +919,8 @@ Error message: {0}",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionUseSSLLong","not-updated","Use this flag to communicate using Secure Socket Layer (SSL) over ftp (ftps).",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DescriptionUseSSLShort","not-updated","Instructs Duplicati to use an SSL (ftps) connection",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","DisplayName","updated","FTP based","Basado en FTP"
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","ListVerifyFailure","not-updated","The file {0} was uploaded but not found afterwards, the file listing returned {1}",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","ListVerifySizeFailure","not-updated","The file {0} was uploaded but the returned size was {1} and it was expected to be {2}",""
"Library\Backend\FTP\Strings\FTPBackend.es-ES.resx","MissingFolderError","updated","The folder {0} was not found, message: {1}","La carpeta {0} no se ha encontrado, mensaje: {1}"
"Library\Backend\FTP\Strings\FTPUI.es-ES.resx","ApproveCertificateHashQuestion","updated","The certificate was not valid ({0}). Do you want to approve the certificate anyway and retry?","El certificado no es válido ({0}). ¿Quieres aprobar el certificado igualmente y volver a probar?"
"Library\Backend\FTP\Strings\FTPUI.es-ES.resx","CreateMissingFolderQuestion","updated","The folder does not exist, do you want to create it?","La carpeta no existe, no quieres volver a crearla?"
@@ -955,10 +931,10 @@ Error message: {0}",""
"Library\Backend\S3\S3CommonOptions.es-ES.resx","AllowCredentialStorage.Text","updated","Store new S3 account information","Guardar nueva información de cuenta S3"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","CredentialGroup.Text","updated","Stored credentials","Guardar credenciales"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","groupBox2.Text","updated","Default settings","Ajustes por defecto"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","label1.Text","missing","Bucket region",""
"Library\Backend\S3\S3CommonOptions.es-ES.resx","label2.Text","missing","Servername",""
"Library\Backend\S3\S3CommonOptions.es-ES.resx","label1.Text","missing","Bucket region:",""
"Library\Backend\S3\S3CommonOptions.es-ES.resx","label2.Text","missing","Server name:",""
"Library\Backend\S3\S3CommonOptions.es-ES.resx","RemoveAllButton.Text","updated","Remove all","Borrar todos"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","RemoveSelectedButton.Text","updated","Remove selected","Borrar seleccionados"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","RemoveSelectedButton.Text","updated","Remove","Borrar seleccionados"
"Library\Backend\S3\S3CommonOptions.es-ES.resx","UseRRS.Text","updated","Use Reduced Redundancy Storage","Usar Reduced Redundancy Storage"
"Library\Backend\S3\S3UI.es-ES.resx","CreateBucket.Text","updated","Create bucket","Crear bucket"
"Library\Backend\S3\S3UI.es-ES.resx","label1.Text","updated","AWS Access ID","ID de acceso a AWS"
@@ -1004,7 +980,7 @@ Error message: {0}",""
"Library\Backend\S3\Strings\S3Backend.es-ES.resx","UnableToDecodeBucketnameError","not-updated","Unable to determine the bucket name for host: {0}",""
"Library\Backend\S3\Strings\S3Backend.es-ES.resx","UnableToParseURLError","not-updated","Could not parse the url: {0}",""
"Library\Backend\S3\Strings\S3SettingsControl.es-ES.resx","PageDescription","not-updated","Displays various options related to the S3 backend",""
"Library\Backend\S3\Strings\S3SettingsControl.es-ES.resx","PageTitle","not-updated","S3 Options",""
"Library\Backend\S3\Strings\S3SettingsControl.es-ES.resx","PageTitle","not-updated","S3",""
"Library\Backend\S3\Strings\S3UI.es-ES.resx","BucketnameCaseWarning","not-updated","The bucket name is not in all lower case.
{0}
Do you want to convert the bucket name to lower case?",""
@@ -1037,8 +1013,8 @@ Do you want to create the bucket now?",""
"Library\Backend\S3\Strings\S3UI.es-ES.resx","PageTitle","not-updated","Backup storage options",""
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","BrowseForSFTPButton.Text","missing","...",""
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","BrowseForSFTPDialog.Filter","missing","Executables (*.exe)|*.exe|All files (*.*)|*.*",""
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","label1.Text","updated","Path to SFTP","Ruta al SFTP"
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","UseManagedAsDefault.Text","missing","Use managed SSH as default",""
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","label1.Text","updated","SFTP path:","Ruta al SFTP"
"Library\Backend\SSH\SSHCommonOptions.es-ES.resx","UseManagedAsDefault.Text","missing","Use managed SSH by default",""
"Library\Backend\SSH\SSHUI.es-ES.resx","BrowseForKeyFileButton.Text","missing","...",""
"Library\Backend\SSH\SSHUI.es-ES.resx","CreateFolderButton.Text","updated","Create folder","Crear carpeta"
"Library\Backend\SSH\SSHUI.es-ES.resx","GenerateDebugOutput.Text","updated","Generate debug output","Generar salida de debug"
@@ -1102,7 +1078,7 @@ Do you want to create the bucket now?",""
Make sure that ""expect"" is installed.
Error message: {1}",""
"Library\Backend\SSH\Strings\SSHBackend.es-ES.resx","LaunchErrorWindows","not-updated","Failed to start the SSH application ({0}).
Make sure that ""putty"" is installed, and you have set the correct path.
Make sure that ""PuTTY"" is installed, and you have set the correct path.
Error message: {1}",""
"Library\Backend\SSH\Strings\SSHBackend.es-ES.resx","PasswordMissingError","not-updated","A password was expected, but passwordless login was specified",""
"Library\Backend\SSH\Strings\SSHBackend.es-ES.resx","StreamingNotSupportedError","not-updated","The SSH backend does not support streaming when using the unmanaged SSH backend, if you supply --use-sftp-application, you must also specify --disable-streaming-transfers",""
@@ -1134,7 +1110,7 @@ Utilizará la ruta predeterminada a la aplicación SFTP.
La aplicación SFTP no se pudo encontrar cuando se buscaba en el sistema
¿Estás seguro de que esto es lo que quieres? "
"Library\Backend\SSH\Strings\SSHSettingsControl.es-ES.resx","PageDescription","updated","Settings for the SSH backend","Opciones del back-end SSH"
"Library\Backend\SSH\Strings\SSHSettingsControl.es-ES.resx","PageTitle","updated","SSH Settings","Opciones SSH"
"Library\Backend\SSH\Strings\SSHSettingsControl.es-ES.resx","PageTitle","updated","SSH","Opciones SSH"
"Library\Backend\SSH\Strings\SSHUI.es-ES.resx","CreateMissingFolderQuestion","updated","The folder does not exist, do you want to create it?","La carpeta no existe, quieres crearla?"
"Library\Backend\SSH\Strings\SSHUI.es-ES.resx","MissingSCPWarning","updated","Duplicati was unable to verify the existence of the sftp program.
sftp may work regardless, if it is located in the system search path.
@@ -1228,12 +1204,12 @@ Do you want the leading slash to be removed?",""
"Library\DynamicLoader\Strings\DynamicLoader.es-ES.resx","DynamicTypeLoadError","updated","Failed to load process type {0} assembly {1}, error message: {2}","No se pudo cargar el proceso de tipo {0} ensamblado {1}, mensaje de error: {2}"
"Library\Encryption\GPGCommonOptions.es-ES.resx","BrowseForGPGDialog.Filter","updated","Executables (*.exe)|*.exe|All files (*.*)|*.*","Ejecutables (*.exe)|*.exe|Todos los ficheros (*.*)|*.*"
"Library\Encryption\GPGCommonOptions.es-ES.resx","BrowseForGPGPathButton.Text","missing","...",""
"Library\Encryption\GPGCommonOptions.es-ES.resx","label1.Text","updated","GPG executable path","Ruta del ejecutable GPG"
"Library\Encryption\GPGCommonOptions.es-ES.resx","label1.Text","updated","GPG path:","Ruta del ejecutable GPG"
"Library\Encryption\Strings\AESEncryption.es-ES.resx","AesencryptiondontallowfallbackLong_v2","updated","If the decryption fails using AES Crypt, dont attempt to use the previous encryption file format. ","Si la desencriptación con AES Crypt falla, no intentar usar el método previo de encriptación."
"Library\Encryption\Strings\AESEncryption.es-ES.resx","AesencryptiondontallowfallbackShort","updated","Do not attempt to decrypt using previous method","No intentar desencriptar usando los métodos previos"
"Library\Encryption\Strings\AESEncryption.es-ES.resx","BadKeyStretchError","not-updated","Bad key stretch",""
"Library\Encryption\Strings\AESEncryption.es-ES.resx","Description_v2","not-updated","This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption.",""
"Library\Encryption\Strings\AESEncryption.es-ES.resx","DisplayName","updated","AES-256 encryption, built in","Encriptación AES-256, incorporada"
"Library\Encryption\Strings\AESEncryption.es-ES.resx","DisplayName","updated","AES-256 encryption, built-in","Encriptación AES-256, incorporada"
"Library\Encryption\Strings\EncryptionBase.es-ES.resx","DecryptionError","updated","Failed to decrypt data (invalid passphrase?): {0}","No se ha podido desencriptar los datos (frase de acceso inválida?): {0}"
"Library\Encryption\Strings\GPGCommonOptions.es-ES.resx","GpgAutodetectedInfo","not-updated","Leave empty to use the gpg application found: {0}",""
"Library\Encryption\Strings\GPGCommonOptions.es-ES.resx","GpgNotAutodetectedWarning","not-updated","The gpg application could not be located, please enter the path manually",""
@@ -1269,7 +1245,7 @@ Do you want to continue anyway?",""
"Library\Encryption\Strings\GPGEncryption.es-ES.resx","SignkeyLong","not-updated","The GNU Privacy Guard can optionally sign volumes with a special key. This feature is not currently active in Duplicati.",""
"Library\Encryption\Strings\GPGEncryption.es-ES.resx","SignkeyShort","not-updated","Sign key for GnuPG",""
"Library\Encryption\Strings\GPGSettingsControl.es-ES.resx","PageDescription","not-updated","Settings for the GPG encryption module",""
"Library\Encryption\Strings\GPGSettingsControl.es-ES.resx","PageTitle","updated","GPG Settings","Configuración GPG"
"Library\Encryption\Strings\GPGSettingsControl.es-ES.resx","PageTitle","updated","GPG","Configuración GPG"
"Library\Encryption\Strings\GPGStreamWrapper.es-ES.resx","DecryptionError","updated","Decryption failed: {0}","Fallo en la desencriptación: {0}"
"Library\Encryption\Strings\GPGStreamWrapper.es-ES.resx","GPGFlushError","not-updated","Failure while invoking GnuPG, program won't flush output",""
"Library\Encryption\Strings\GPGStreamWrapper.es-ES.resx","GPGTerminateError","not-updated","Failure while invoking GnuPG, program won't terminate",""
@@ -1366,6 +1342,14 @@ If this problem happens more than once, it is possible that the delete transacti
"Library\Main\Strings\Interface.es-ES.resx","FilenameMismatchError","not-updated","The manifest report that the file should be named {0} but it was named {1}",""
"Library\Main\Strings\Interface.es-ES.resx","FilesAreNotForceDeletedMessage","not-updated","Files are not deleted, use the --force command to actually remove files",""
"Library\Main\Strings\Interface.es-ES.resx","FileSizeMismatchError","not-updated","The file {0} has size {1} but should have size {2}",""
"Library\Main\Strings\Interface.es-ES.resx","FullBecauseBackendIsEmpty","not-updated","A full backup is made because no existing backup chains were found on the destination",""
"Library\Main\Strings\Interface.es-ES.resx","FullBecauseFlagWasSet","not-updated","A full backup was forced with the --{0} flag",""
"Library\Main\Strings\Interface.es-ES.resx","FullBecauseLastFullIsFrom","not-updated","A full backup is made because the latest full backup is from {0} and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.es-ES.resx","FullBecauseSourceFoldersChanged","not-updated","A full backup is made because the source folders have changed",""
"Library\Main\Strings\Interface.es-ES.resx","FullBecauseThereAreNIncrementals","not-updated","A full backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.es-ES.resx","IncrementalBecauseLastFullIsFrom","not-updated","An incremental backup is made because the latest full backup is from {0} and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.es-ES.resx","IncrementalBecauseNoFlagsWereSet","not-updated","An incremental backup is made because no full backup criteria was found",""
"Library\Main\Strings\Interface.es-ES.resx","IncrementalBecauseThereAreNIncrementals","not-updated","An incremental backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.es-ES.resx","InternalDeleteCountError","not-updated","An internal error occured, and the operation was aborted to protect the backup sets",""
"Library\Main\Strings\Interface.es-ES.resx","ManifestAndFileCountMismatchError","not-updated","The manifest file {0} indicates that there should be {1} volumes, but the file list indicates {2}",""
"Library\Main\Strings\Interface.es-ES.resx","ManifestsMustBeRead","not-updated","Disabling manifests is only possible on restores, and it should only be used as a last resort.",""
@@ -1451,6 +1435,8 @@ If this problem happens more than once, it is possible that the delete transacti
"Library\Main\Strings\Options.es-ES.resx","AsynchronousuploadShort","updated","Transmit files on a separate thread","Transmitir ficheros en un thread separado"
"Library\Main\Strings\Options.es-ES.resx","AutocleanupLong","not-updated","If a backup is interrupted there will likely be partial files present on the backend. Using this flag, Duplicati will automatically remove such files when encountered.",""
"Library\Main\Strings\Options.es-ES.resx","AutocleanupShort","not-updated","A flag indicating that Duplicati should remove unused files",""
"Library\Main\Strings\Options.es-ES.resx","BackendlogdatabaseLong","not-updated","Use this option to specify a path to a file that will store information about backend operations. This option can be used to track down errors by comparing the backend state with the expected backend state.",""
"Library\Main\Strings\Options.es-ES.resx","BackendlogdatabaseShort","not-updated","Database log of remote operations",""
"Library\Main\Strings\Options.es-ES.resx","BackupprefixLong","not-updated","Any string used to prefix the filenames generated by Duplicati.",""
"Library\Main\Strings\Options.es-ES.resx","BackupprefixShort","not-updated","Backup volume filename prefix",""
"Library\Main\Strings\Options.es-ES.resx","CompressionmoduleLong","not-updated","Duplicati supports plugable compression modules. Use this option to select a module to use for compression. This is only applied when creating new volumes, when reading an existing file, the filename is used to select the compression module.",""
@@ -1558,7 +1544,7 @@ If this problem happens more than once, it is possible that the delete transacti
"Library\Main\Strings\Options.es-ES.resx","TotalsizeLong","not-updated","This option can place an upper limit on the total size of each backup. Note that if this flag is specified the backup may not contain all files, even for a full backup.",""
"Library\Main\Strings\Options.es-ES.resx","TotalsizeShort","not-updated","The number of bytes generated by each backup run",""
"Library\Main\Strings\Options.es-ES.resx","UploadUnchangedBackupsLong","not-updated","If no files have changed, Duplicati will not upload a backup set. If the backup data is used to verify that a backup was executed, this option will make Duplicati upload a backupset even if it is empty",""
"Library\Main\Strings\Options.es-ES.resx","UploadUnchangedBackupsShort","not-updated","Upload empty backup files ",""
"Library\Main\Strings\Options.es-ES.resx","UploadUnchangedBackupsShort","not-updated","Upload empty backup files",""
"Library\Main\Strings\Options.es-ES.resx","UsnpolicyLong","not-updated","This settings controls the usage of NTFS USN numbers, which allows Duplicati to obtain a list of files and folders much faster. If this is set to ""off"", Duplicati will not attempt to use USN. Setting this to ""auto"" makes Duplicati attempt to use USN, and fail silently if that was not allowed or supported. A setting of ""on"" will also make Duplicati attempt to use USN, but will produce a warning message in the log if it fails. Setting it to ""required"" will make Duplicati abort the backup if the USN usage fails. This feature is only supported on Windows and requires administrative privileges.",""
"Library\Main\Strings\Options.es-ES.resx","UsnpolicyShort","not-updated","Controls the use of NTFS Update Sequence Numbers",""
"Library\Main\Strings\Options.es-ES.resx","VerificationLevelLong","not-updated","Use this option to change the level of verifiation done by the verify command. The setting ""manifest"" will only verify the manifest chain. The settings ""signature"" will also download and verify all signature files. The setting ""full"", will download all files, including content files, and verify that they are unchanged.",""
@@ -1695,7 +1681,6 @@ Use the commandline option --accept-specified-ssl-hash={1} to accept the server
"Winforms\Controls\PasswordConfirmationDialog.es-ES.resx","OKBtn.Text","updated","OK","De acuerdo"
"Winforms\Controls\PasswordControl.es-ES.resx","ShowPassword.ToolTip","updated","Show or hide the password","Mostrar o esconder la contraseña"
"Winforms\Controls\PasswordControl.es-ES.resx","TextBox.Text","updated","password","contraseña"
"Winforms\Controls\Properties\Resources.es-ES.resx","ldots","unused","","../Resources/ldots.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"Winforms\Controls\Strings\PasswordConfirmationDialog.es-ES.resx","PasswordDoNotMatchError","not-updated","The password that you have entered does not match the previously entered password",""
"Winforms\Controls\Strings\PasswordControl.es-ES.resx","ConfirmClearingPassword","not-updated","You cannot read this password, but you may reset the password and enter a new one.
1 CommandLine\Decrypter\Strings\Program.es-ES.resx ProgramUsage not-updated Usage: Duplicati.CommandLine.Decrypter.exe <passphrase> <inputfile> <outputfile>
119 GUI\HelperControls\DurationEditor.es-ES.resx EasyDuration.Items2 updated Each second week Cada dos semanas
120 GUI\HelperControls\DurationEditor.es-ES.resx EasyDuration.Items3 updated Each month Cada mes
121 GUI\HelperControls\DurationEditor.es-ES.resx EasyDuration.Items4 updated Custom ... Customizar ...
122 GUI\HelperControls\FilterDialog.es-ES.resx $this.Text updated FilterDialog FiltroDialogo
123 GUI\HelperControls\FilterDialog.es-ES.resx BrowseFileButton.Text missing ...
124 GUI\HelperControls\FilterDialog.es-ES.resx CancelBtn.Text updated Cancel Cancelar
125 GUI\HelperControls\FilterDialog.es-ES.resx Exclusive.Text updated Exclude files matching the filter Excluir ficheros que se ajusten al filtro
126 GUI\HelperControls\FilterDialog.es-ES.resx folderBrowserDialog.Description updated Select the folder path to use for the filter Selecciona la carpeta para usar con el filtro
127 GUI\HelperControls\FilterDialog.es-ES.resx HelpLink.Text updated Filter help Ayuda del filtro
128 GUI\HelperControls\FilterDialog.es-ES.resx Inclusive.Text updated Include files matching the filter Incluir ficheros que se ajusten al filtro
129 GUI\HelperControls\FilterDialog.es-ES.resx IsRegExp.Text updated Filter is regular expression El filtro es una expresión regular
130 GUI\HelperControls\FilterDialog.es-ES.resx label1.Text updated Filter Filtro
131 GUI\HelperControls\FilterDialog.es-ES.resx OKBtn.Text updated OK De acuerdo
132 GUI\HelperControls\FilterDialog.es-ES.resx openFileDialog.Filter updated All files (*.*)|*.* Todos los ficheros (*.*)|*.*
133 GUI\HelperControls\FilterDialog.es-ES.resx openFileDialog.Title updated Select the file to use for the filter Selecciona el fichero a usar para el filtro
134 GUI\HelperControls\FilterEditor.es-ES.resx AddFilterButton.ToolTipText updated Add a new filter Añadir un nuevo filtro
135 GUI\HelperControls\FilterEditor.es-ES.resx btnTestSearch.Text missing Test Search Selection...
136 GUI\HelperControls\FilterEditor.es-ES.resx EditFilterButton.ToolTipText updated Edit the selected filter Editar el filtro seleccionado
137 GUI\HelperControls\FilterEditor.es-ES.resx ExcludeFolderButton.ToolTipText updated Adds an excluded folder to the list Añade a la lista una carpeta excluida
138 GUI\HelperControls\FilterEditor.es-ES.resx groupBox1.Text updated Filters Filtros
139 GUI\HelperControls\FilterEditor.es-ES.resx HelpButton.Text updated Filter help Ayuda sobre filtros
140 GUI\HelperControls\FilterEditor.es-ES.resx HelpButton.ToolTipText updated Opens the Duplicati Filter usage Wiki page Abre la página Wiki de Duplicati sobre el uso de filtros
141 GUI\HelperControls\FilterEditor.es-ES.resx IncludeFolderButton.ToolTipText updated Adds an included folder to the list Añade a la lista una carpeta incluida
142 GUI\HelperControls\FilterEditor.es-ES.resx label1.Text updated Test a filename: Provar un nombre de archivo
143 GUI\HelperControls\FilterEditor.es-ES.resx MoveFilterBottomButton.ToolTipText updated Move the selected filter to the bottom Poner el filtro seleccionado en último lugar
144 GUI\HelperControls\FilterEditor.es-ES.resx MoveFilterDownButton.ToolTipText updated Move the selected filter down Bajar el filtro seleccionado
145 GUI\HelperControls\FilterEditor.es-ES.resx MoveFilterTopButton.ToolTipText updated Move the selected filter to the top Poner el filtro seleccionado en primer lugar
146 GUI\HelperControls\FilterEditor.es-ES.resx MoveFilterUpButton.ToolTipText updated Move the selected filter up Subir el filtro seleccionado
147 GUI\HelperControls\FilterEditor.es-ES.resx RemoveFilterButton.ToolTipText updated Remove the selected filter Eliminar el filtro seleccionado
148 GUI\HelperControls\FolderPathEntry.es-ES.resx BrowseFolderButton.Text missing ...
149 GUI\HelperControls\FolderPathEntry.es-ES.resx BrowseFolderButton.ToolTip updated Click to browse for a folder Haz click para examinar una carpeta
150 GUI\HelperControls\FolderPathEntry.es-ES.resx DeleteButton.ToolTip updated Click to remove the entry Haz click para eliminar la entrada
151 GUI\HelperControls\FolderPathEntry.es-ES.resx FolderPath.ToolTip updated Enter the path to the folder here Introduce la ruta de la carpeta aquí
152 GUI\HelperControls\FolderPathEntry.es-ES.resx SizeLabel.Text missing (...)
153 GUI\HelperControls\FolderPathEntry.es-ES.resx SizeLabel.ToolTip updated The size of the selected folder El tamaño de la carpeta seleccionada
154 GUI\HelperControls\Strings\BackupFileList.es-ES.resx RootNodeTooltip updated Source folder {0} Target folder: {1} Right click to change target folder Carpeta orígen {0} Carpeta de destino: {1} Botón derecho para cambiar la carpeta de destino
155 GUI\HelperControls\Strings\BackupItems.es-ES.resx ErrorStatusDisplay not-updated Error: {0}
156 GUI\HelperControls\Strings\BackupItems.es-ES.resx NoDataReceived updated No data received No se han recibido datos
158 GUI\HelperControls\Strings\BackupItems.es-ES.resx TooltipFullBackup updated Full backup Copia de seguridad completa
159 GUI\HelperControls\Strings\BackupItems.es-ES.resx TooltipFullBackupWithSize updated Full backup - {0} Copia de seguridad completa - {0}
160 GUI\HelperControls\Strings\BackupItems.es-ES.resx TooltipIncrementalBackup updated Incremental backup Copia de seguridad incremental
161 GUI\HelperControls\Strings\BackupItems.es-ES.resx TooltipIncrementalBackupWithSize updated Incremental backup - {0}, chain: {1} Copia de seguridad incremental - {0}, cadena: {1}
162 GUI\HelperControls\Strings\BackupTreeView.es-ES.resx ConfirmDeleteFolder updated Do you want to delete the folder {0} and all the backups contained in it? ¿Quieres borrar la carpeta {0} y todos las copias de seguridad que se encuentren en ella?
163 GUI\HelperControls\Strings\BackupTreeView.es-ES.resx ConfirmRemoveBackup updated Remove the backup '{0}' ? ¿Borrar la copia de seguridad '{0}'?
164 GUI\HelperControls\Strings\BackupTreeView.es-ES.resx NewBackup updated New Backup Nueva copia de seguridad
165 GUI\HelperControls\Strings\BackupTreeView.es-ES.resx NewFolder updated New Folder Nueva carpeta
166 GUI\HelperControls\Strings\CommandLineOptionsGrid.es-ES.resx InfoLabelFormat updated Value type: {0}. {1}. {2} Tipo de valor: {0}. {1}. {2}
169 GUI\HelperControls\Strings\FilterDialog.es-ES.resx InvalidRegExpMessage updated The expression is not a valid regular expression: {0} La expresión no es una expresión regular válida: {0}
170 GUI\HelperControls\Strings\FilterEditor.es-ES.resx ExcludeFolderBrowseTitle updated Choose the folder to add for exclusion Selecciona la carpeta a añadir a la exclusión
171 GUI\HelperControls\Strings\FilterEditor.es-ES.resx FileIsExcluded updated The file {0} is excluded due to rule {1} El fichero {0} ha sido excluido debido a la regla {1}
172 GUI\HelperControls\Strings\FilterEditor.es-ES.resx FileIsIncluded updated The file {0} is included due to rule {1} El fichero {0} ha sido incluido debido a la regla {1}
173 GUI\HelperControls\Strings\FilterEditor.es-ES.resx FileIsIncludedDefault updated The file {0} is included because no rule matched El fichero {0} ha sido incluido debido a que ninguna regla
174 GUI\HelperControls\Strings\FilterEditor.es-ES.resx FilenameIsNotInAnyRootFolder updated The filename {0} is not located in any of the source folders No se ha encontrado el fichero {0} en ninguna de las carpetas de origen
175 GUI\HelperControls\Strings\FilterEditor.es-ES.resx FilepathIsNotAbsoluteError updated The filename {0} is not an absolute path El nombre del archivo {0} no es una ruta absoluta
259 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayNormal PauseDuration15Menu.Text unused updated 15 minutes ../Resources/TrayNormal.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 15 minutos
260 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayNormalError PauseDuration30Menu.Text unused updated 30 minutes ../Resources/TrayNormalError.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 30 minutos
261 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayNormalPause PauseDuration60Menu.Text unused updated 1 hour ../Resources/TrayNormalPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 1 hora
262 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayNormalWarning pausePeriodMenuItem.Text unused updated Pause period ../Resources/TrayNormalWarning.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Período de pausa
263 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayWorking quickLabel.Text unused updated Quick actions ../Resources/TrayWorking.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Acciones rápidas
264 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx TrayWorkingPause runBackupNowToolStripMenuItem.Text unused updated Run backup now ../Resources/TrayWorkingPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Lanzar copia de seguridad ahora
265 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx WarningStatusIcon runBackupNowToolStripMenuItem1.Text unused updated Run backup now ../Resources/WarningStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Lanzar copia de seguridad ahora
266 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx Wizard stopBackupToolStripMenuItem.Text unused updated Stop backup ../Resources/Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Parar copia de seguridad
267 GUI\Properties\Resources.es-ES.resx GUI\ServiceStatus.es-ES.resx WizardMenuIcon viewFilesToolStripMenuItem.Text unused updated View contents ... ../Resources/WizardMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Ver contenidos...
268 GUI\RestoreBackup.es-ES.resx GUI\ServiceStatus.es-ES.resx $this.Text viewLogToolStripMenuItem.Text updated RestoreBackup View log ... RestaurarCopiaSeguridad Ver registro...
269 GUI\RestoreBackup.es-ES.resx GUI\ServiceStatus.es-ES.resx CancelBtn.Text wizardHelpLabel.Text updated missing Cancel (Create, edit, delete, run, restore backups) Cancelar
270 GUI\RestoreBackup.es-ES.resx GUI\ServiceStatus.es-ES.resx folderBrowserDialog.Description wizardLink.Text updated Select the folder where the data will be restored to Duplicati Wizard Selecciona la carpeta donde los datos serán restaurados Asistente de Duplicati
271 GUI\RestoreBackup.es-ES.resx GUI\Strings\ApplicationSetup.es-ES.resx label1.Text BalloonNotification_Continous updated Backup to restore While running, and on errors, warnings Copia de seguridad a restaurar Mientras una copia de seguridad está en marcha (y en los errores/avisos)
272 GUI\RestoreBackup.es-ES.resx GUI\Strings\ApplicationSetup.es-ES.resx label2.Text BalloonNotification_Errors updated Destination On errors Destino En errores de copia de seguridad
273 GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Off updated No notifications Sin notificaciones de globo
274 GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Start updated On start, errors, warnings Al inicio de copia de seguridad (y en los errores/avisos)
275 GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_StartAndStop updated On start, stop, errors, warnings Al inicio y fin de copia de seguridad (y en los errores/avisos)
276 GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Warnings updated On errors, warnings En errores y avisos de copia de seguridad
277 GUI\Strings\ApplicationSetup.es-ES.resx CacheSize updated Cache size: {0} Tamaño de caché: {0}
278 GUI\Strings\ApplicationSetup.es-ES.resx CalculatingCacheSize updated Calculating cache size ... Calculando el tamaño de caché ...
279 GUI\Strings\ApplicationSetup.es-ES.resx ConfirmCacheDelete updated Delete signature files in the folder: {0} Borrar ficheros de firmas en la carpeta: {0}
280 GUI\Strings\ApplicationSetup.es-ES.resx DefaultLanguage updated System language, {0} Lenguaje del sistema, {0}
281 GUI\Strings\ApplicationSetup.es-ES.resx DialogTitle updated Duplicati Options, version {0} Instalación de Duplicati, versión {0}
282 GUI\Strings\ApplicationSetup.es-ES.resx EncryptionModuleLoadError updated An error occured while loading encryption modules: {0} Ha ocurrido un error mientras se cargaban los módulos de encriptación: {0}
283 GUI\Strings\ApplicationSetup.es-ES.resx ErrorWhileExaminingFolder updated An exception occured while examining the folder: {0}. Do you want to use that folder anyway? Ha ocurrido una excepción mientras se examinaba la carpeta: {0}. ¿Quieres usar esta carpeta igualmente?
284 GUI\Strings\ApplicationSetup.es-ES.resx FolderIsMissingFile updated The folder selected does not contain the file: {0}. Do you want to use that folder anyway? La carpeta seleccionada no contiene el fichero: {0}. ¿Quieres usar esta carpeta igualmente?
285 GUI\Strings\ApplicationSetup.es-ES.resx LanguageChangedWarning updated The language has changed. This will take effect after you restart Duplicati. El idioma ha cambiado. Tendrá efecto después de reiniciar Duplicati
286 GUI\Strings\ApplicationSetup.es-ES.resx OperationCancelled updated Cancelled Cancelado
287 GUI\Strings\ApplicationSetup.es-ES.resx SaveExtensionError updated An error occured while saving settings: {0} Ha ocurrido un error mientras se salvaba la configuración: {0}
288 GUI\Strings\ApplicationSetup.es-ES.resx SettingControlsLoadError updated An error occured while loading setting controls: {0} Ha ocurrido un error mientras se cargaba la configuración de control: {0}
289 GUI\Strings\Common.es-ES.resx FifteenMinutes updated 15 minutes 15 minutos
290 GUI\Strings\Common.es-ES.resx FiveMinutes updated 5 minutes 5 minutos
291 GUI\Strings\Common.es-ES.resx GenericError updated An error occured: {0} Ha ocurrido un error: {0}
292 GUI\Strings\Common.es-ES.resx InvalidDuration updated The full backup duration entered is not valid: {0} La duración introducida de la copia de seguridad completa no es válida: {0}
293 GUI\RestoreBackup.es-ES.resx GUI\Strings\Common.es-ES.resx OKBtn.Text MenuPause updated OK Pause De acuerdo Pausa
294 GUI\RestoreBackup.es-ES.resx GUI\Strings\Common.es-ES.resx SelectTargetFolder.Text MenuResume missing updated ... Resume Reanudar
295 GUI\ServiceStatus.es-ES.resx GUI\Strings\Common.es-ES.resx $this.Text NoMinutes updated Duplicati Status None Estado de Duplicati Ningún
316 GUI\ServiceStatus.es-ES.resx GUI\Strings\DuplicatiRunner.es-ES.resx viewFilesToolStripMenuItem.Text CleanupError updated View contents ... Failed during cleanup: {0} Ver contenidos... Error durante la limpieza: {0}
317 GUI\ServiceStatus.es-ES.resx GUI\Strings\DuplicatiRunner.es-ES.resx viewLogToolStripMenuItem.Text CleanupLogdataHeader updated View log ... Cleanup output: Ver registro... Resultado de la limpieza:
318 GUI\ServiceStatus.es-ES.resx GUI\Strings\DuplicatiRunner.es-ES.resx wizardHelpLabel.Text ErrorMessage missing not-updated (Create, edit, delete, run, restore backups) Error: {0}
GUI\ServiceStatus.es-ES.resx wizardLink.Text updated Duplicati Wizard Asistente de Duplicati
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Continous updated While backup is running (and on errors/warnings) Mientras una copia de seguridad está en marcha (y en los errores/avisos)
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Errors updated On backup errors En errores de copia de seguridad
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Off updated No balloon notifications Sin notificaciones de globo
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Start updated On backup start (and errors/warnings) Al inicio de copia de seguridad (y en los errores/avisos)
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_StartAndStop updated On backup start and stop (and errors/warnings) Al inicio y fin de copia de seguridad (y en los errores/avisos)
GUI\Strings\ApplicationSetup.es-ES.resx BalloonNotification_Warnings updated On backup errors and warnings En errores y avisos de copia de seguridad
GUI\Strings\ApplicationSetup.es-ES.resx CacheSize updated Cache size: {0} Tamaño de caché: {0}
GUI\Strings\ApplicationSetup.es-ES.resx CalculatingCacheSize updated Calculating cache size ... Calculando el tamaño de caché ...
GUI\Strings\ApplicationSetup.es-ES.resx ConfirmCacheDelete updated Delete signature files in the folder: {0} Borrar ficheros de firmas en la carpeta: {0}
GUI\Strings\ApplicationSetup.es-ES.resx DefaultLanguage updated System language, {0} Lenguaje del sistema, {0}
GUI\Strings\ApplicationSetup.es-ES.resx DialogTitle updated Duplicati Setup, version {0} Instalación de Duplicati, versión {0}
GUI\Strings\ApplicationSetup.es-ES.resx EncryptionModuleLoadError updated An error occured while loading encryption modules: {0} Ha ocurrido un error mientras se cargaban los módulos de encriptación: {0}
GUI\Strings\ApplicationSetup.es-ES.resx ErrorWhileExaminingFolder updated An exception occured while examining the folder: {0}. Do you want to use that folder anyway? Ha ocurrido una excepción mientras se examinaba la carpeta: {0}. ¿Quieres usar esta carpeta igualmente?
GUI\Strings\ApplicationSetup.es-ES.resx FolderIsMissingFile updated The folder selected does not contain the file: {0}. Do you want to use that folder anyway? La carpeta seleccionada no contiene el fichero: {0}. ¿Quieres usar esta carpeta igualmente?
GUI\Strings\ApplicationSetup.es-ES.resx LanguageChangedWarning updated The language has changed. This will take effect after you restart Duplicati. El idioma ha cambiado. Tendrá efecto después de reiniciar Duplicati
GUI\Strings\ApplicationSetup.es-ES.resx OperationCancelled updated Cancelled Cancelado
GUI\Strings\ApplicationSetup.es-ES.resx SaveExtensionError updated An error occured while saving settings: {0} Ha ocurrido un error mientras se salvaba la configuración: {0}
GUI\Strings\ApplicationSetup.es-ES.resx SettingControlsLoadError updated An error occured while loading setting controls: {0} Ha ocurrido un error mientras se cargaba la configuración de control: {0}
GUI\Strings\Common.es-ES.resx FifteenMinutes updated 15 minutes 15 minutos
GUI\Strings\Common.es-ES.resx FiveMinutes updated 5 minutes 5 minutos
GUI\Strings\Common.es-ES.resx GenericError updated An error occured: {0} Ha ocurrido un error: {0}
GUI\Strings\Common.es-ES.resx InvalidDuration updated The full backup duration entered is not valid: {0} La duración introducida de la copia de seguridad completa no es válida: {0}
GUI\Strings\Common.es-ES.resx MenuPause updated Pause Pausa
GUI\Strings\Common.es-ES.resx MenuResume updated Resume Reanudar
GUI\Strings\Common.es-ES.resx NoMinutes updated None Ningún
GUI\Strings\Common.es-ES.resx OneDay updated One day Un día
GUI\Strings\Common.es-ES.resx OneMinute updated 1 minute 1 minuto
GUI\Strings\Common.es-ES.resx OneMonth updated One month Un mes
GUI\Strings\Common.es-ES.resx OneWeek updated One week Una semana
GUI\Strings\Common.es-ES.resx SixtyMinutes updated 1 hour 1 hora
GUI\Strings\Common.es-ES.resx ThirtyMinutes updated 30 minutes 30 minutos
GUI\Strings\Common.es-ES.resx ThreadPriorityAboveNormal updated Above normal Por encima del normal
GUI\Strings\Common.es-ES.resx ThreadPriorityBelowNormal updated Below normal Por debajo del normal
GUI\Strings\Common.es-ES.resx ThreadPriorityHighest updated Highest El más alto
GUI\Strings\Common.es-ES.resx ThreadPriorityNormal not-updated Normal
GUI\Strings\Common.es-ES.resx ThreadPriortyLowest updated Lowest El más bajo
GUI\Strings\Common.es-ES.resx ThreeMonths updated Three months Tres meses
GUI\Strings\Common.es-ES.resx TwoWeeks updated Two weeks Dos semanas
GUI\Strings\DatabaseUpgrader.es-ES.resx BackupFilenamePrefix updated backup copia de seguridad
GUI\Strings\DatabaseUpgrader.es-ES.resx DatabaseFormatError updated Unable to determine database format: {0} Imposible determinar el formato de la base de datos: {0}
GUI\Strings\DatabaseUpgrader.es-ES.resx InvalidVersionError updated The database has version {0} but the largest supported version is {1}. This is likely caused by upgrading to a newer version and then downgrading. If this is the case, there is likely a backup file of the previous database version in the folder {2}. La base de datos tiene la versión {0} pero la versión más alta soportada es la {1}. Esto es debido seguramente por haber actualizado a una versión más reciente y luego haber vuelta a una más antigua. Si este es el caso, probablemente hay una copia de seguridad de la versión anterior de la base de datos en la carpeta {2}.
GUI\Strings\DatabaseUpgrader.es-ES.resx TableLayoutError updated Unknown table layout detected Se ha detectado una disposición de la tabla desconocida
GUI\Strings\DatabaseUpgrader.es-ES.resx UpgradeFailure updated Failed to execute SQL: {0} Error: {1} Database is NOT upgraded. No se ha podido ejecutar SQL: {0} Error: {1} La base de datos NO se ha actualizado.
GUI\Strings\DuplicatiRunner.es-ES.resx ApplicationExitLogMesssage updated The backup was stopped because the application was closed Se paró la copia de seguridad porqué la aplicación ha sido cerrada
GUI\Strings\DuplicatiRunner.es-ES.resx CleaningUpMessage updated Removing old backups ... Borrando copias de seguirad antiguas ...
GUI\Strings\DuplicatiRunner.es-ES.resx CleanupError updated Failed during cleanup: {0} Error durante la limpieza: {0}
GUI\Strings\DuplicatiRunner.es-ES.resx CleanupLogdataHeader updated Cleanup output: Resultado de la limpieza:
GUI\Strings\DuplicatiRunner.es-ES.resx ErrorMessage not-updated Error: {0}
319 GUI\Strings\DuplicatiRunner.es-ES.resx OtherAbortMessage updated The backup was stopped, the reason was: {0} Se paró la copia de seguridad, la razón fue: {0}
320 GUI\Strings\DuplicatiRunner.es-ES.resx ShutdownWhileBackupInprogress not-updated Duplicati was terminated before the backup completed, status is unknown
321 GUI\Strings\DuplicatiRunner.es-ES.resx TaskManagerCloseMessage updated The backup was stopped because the application was closed by the task manager Se paró la copia de seguridad porqué la aplicación fue cerrada por el administrador de tareas
348 GUI\Strings\MainForm.es-ES.resx TrayStatusRunning updated Duplicati is running {0} Duplicati está en marcha {0}
349 GUI\Strings\Program.es-ES.resx AnotherInstanceDetected updated Another instance is running, and was notified Otra instancia está en marcha, y ha sido notificada
350 GUI\Strings\Program.es-ES.resx DatabaseOpenError updated Failed to create, open or upgrade the database. Error message: {0} No se pudo crear, abrir o actualizar la base de datos. Mensaje de error: {0}
351 GUI\Strings\Program.es-ES.resx FullCommandDescription updated Forces the --run-backup command to perform a full backup Fuerza el comando --run-backup para realizar una copia de seguridad completa
352 GUI\Strings\Program.es-ES.resx HelpCommandDescription updated Displays this help Mostrar esta ayuda
353 GUI\Strings\Program.es-ES.resx HelpDisplayDialog updated Supported commandline arguments: {0} Argumentos de línea de comando soportados: {0}
354 GUI\Strings\Program.es-ES.resx HelpDisplayFormat not-updated --{0}: {1}
355 GUI\Strings\Program.es-ES.resx LanguageSelectionError updated Failed to set the user interface language: {0} Error al establecer el idioma de la interfaz de usuario: {0}
356 GUI\Strings\Program.es-ES.resx LogfileCommandDescription updated Outputs log information to the file given Guarda información de registro en el fichero dado
357 GUI\Strings\Program.es-ES.resx LoglevelCommandDescription updated Determines the amount of information written in the log file Determina el total de información grabado en el fichero de registro
358 GUI\Strings\Program.es-ES.resx PauseCommandDescription updated Pauses Duplicati, supply a time eg. 5m to limit pause to 5 minutes Pausa Duplicati, entra un tiempo ej. 5m para limitar la pausa a 5 minutos
359 GUI\Strings\Program.es-ES.resx PortablemodeCommandDescription updated Activates portable mode where the database is placed below the program executable Activa el modo portátil donde se coloca la base de datos por debajo del ejecutable del programa
360 GUI\Strings\Program.es-ES.resx ResumeCommandDescription updated Resumes operation of Duplicati, if paused Reanuda el funcionamiento de Duplicati, si está en pausa
361 GUI\Strings\Program.es-ES.resx RunbackupCommandDescription updated Runs the backup with the name supplied. If no backup name is supplied, the available backups are displayed Se ejecuta la copia de seguridad con el nombre indicado. Si no se suministra ningún nombre, se muestran las copias de seguridad disponibles
362 GUI\Strings\Program.es-ES.resx SeriousError updated A serious error occured in Duplicati: {0} Ha ocurrido un error grave en Duplicati: {0}
363 GUI\Strings\Program.es-ES.resx ShowstausCommandDescription updated Displays the status window Mostrar la ventana de estado
364 GUI\Strings\Program.es-ES.resx ShowwizardCommandDescription not-updated Displays the wizard window
365 GUI\Strings\Program.es-ES.resx StartupFailure updated Unable to start up, perhaps another process is already running? Error message: {0} No se puede poner en marcha, tal vez otro proceso ya se está ejecutando? Mensaje de error: {0}
391 GUI\Strings\ServiceStatus.es-ES.resx StatusWaiting updated Waiting for next backup Esperando la próxima copia de seguridad
392 GUI\Strings\ServiceStatus.es-ES.resx SwitchToAdvanced updated Advanced >>> Avanzado >>>
393 GUI\Strings\ServiceStatus.es-ES.resx SwitchToSimple not-updated Simple <<<
394 GUI\Strings\TaskType.es-ES.resx FullBackup updated Full backup Copia de seguridad completa
395 GUI\Strings\TaskType.es-ES.resx IncrementalBackup updated Incremental backup Copia de seguridad incremental
396 GUI\Strings\TaskType.es-ES.resx ListActualFiles updated List actual files Listar ficheros actuales
397 GUI\Strings\TaskType.es-ES.resx ListBackupEntries updated List backup entries Listar entradas de copia de seguridad
899 Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx label5.Text AcceptAnyHash.Text updated Port (optional) Accept any invalid certificate Puerto (opcional) Aceptar cualquier certificado invalido
900 Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx TestConnection.Text AcceptSpecifiedHash.Text updated Test connection Accept this certificate hash Probar conexión Aceptar el hash de certificado
901 Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx UseSSL.Text CreateFolderButton.Text updated Use SSL Create folder Usar SSL Crear carpeta
902 Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx label1.Text updated Server Servidor
903 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx Description label2.Text not-updated updated Supports connections to a WEBDAV enabled web server, using the HTTP protocol. Allowed formats are "webdav://hostname/folder" or "webdav://username:password@hostname/folder". Path Ruta
904 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx DescriptionDebugPropfindLong label5.Text not-updated updated To aid in debugging issues, it is possible to set a path to a file that will be overwritten with the PROPFIND response Port (optional) Puerto (opcional)
905 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx DescriptionDebugPropfindShort TestConnection.Text not-updated updated Dump the PROPFIND response Test connection Probar conexión
906 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx Library\Backend\TahoeLAFS\TahoeUI.es-ES.resx DescriptionForceDigestLong UseSSL.Text not-updated updated Using the HTTP Digest authentication method allows the user to authenticate with the server, without sending the password in clear. However, a man-in-the-middle attack is easy, because the HTTP protocol specifies a fallback to Basic authentication, which will make the client send the password to the attacker. Using this flag, the client does not accept this, and always uses Digest authentication or fails to connect. Use SSL Usar SSL
907 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx Description not-updated Supports connections to a WEBDAV enabled web server, using the HTTP protocol. Allowed formats are "webdav://hostname/folder" or "webdav://username:password@hostname/folder".
908 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx DescriptionDebugPropfindLong not-updated To aid in debugging issues, it is possible to set a path to a file that will be overwritten with the PROPFIND response
909 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx DescriptionForceDigestShort DescriptionDebugPropfindShort not-updated Force the use of the HTTP Digest authentication method Dump the PROPFIND response
910 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx DescriptionFTPPasswordLong DescriptionForceDigestLong not-updated The password used to connect to the server. This may also be supplied as the environment variable "FTP_PASSWORD". Using the HTTP Digest authentication method allows the user to authenticate with the server, without sending the password in clear. However, a man-in-the-middle attack is easy, because the HTTP protocol specifies a fallback to Basic authentication, which will make the client send the password to the attacker. Using this flag, the client does not accept this, and always uses Digest authentication or fails to connect.
911 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx DescriptionFTPPasswordShort DescriptionForceDigestShort not-updated Supplies the password used to connect to the server Force the use of the HTTP Digest authentication method
919 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx MissingFolderError DescriptionUseSSLShort not-updated The folder {0} was not found, message: {1} Instructs Duplicati to use an SSL (https) connection
920 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx SeenThenNotFoundError DisplayName not-updated updated When listing the folder {0} the file {1} was listed, but the server now reports that the file is not found. This can be because the file is deleted or unavailable, but it can also be because the file extension {2} is blocked by the web server. IIS blocks unknown extensions by default. Error message: {3} WEBDAV based Basado en WEBDAV
921 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx ApproveCertificateHashQuestion MissingFolderError not-updated The certificate was not valid ({0}). Do you want to approve the certificate anyway and retry? The folder {0} was not found, message: {1}
922 Library\Backend\WEBDAV\Strings\WEBDAV.es-ES.resx SeenThenNotFoundError not-updated When listing the folder {0} the file {1} was listed, but the server now reports that the file is not found. This can be because the file is deleted or unavailable, but it can also be because the file extension {2} is blocked by the web server. IIS blocks unknown extensions by default. Error message: {3}
923 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx ApproveCertificateHashQuestion not-updated The certificate was not valid ({0}). Do you want to approve the certificate anyway and retry?
924 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx BackslashWarning not-updated The folder path contains backslashes, which are known to cause problems. Do you want to convert the backslashes to forward slashes?
925 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx CreateMissingFolderQuestion not-updated The folder does not exist, do you want to create it?
926 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx EmptyFolderPathWarning not-updated You have not entered a folder, this will store all files in the root directory of the server. Do you want to continue without a folder path?
931 Library\Backend\WEBDAV\Strings\WebDAVUI.es-ES.resx PageTitle updated Backup storage options Opciones de almacenamiento de copias de seguridad
932 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx AcceptAnyHash.Text updated Accept any invalid certificate Aceptar cualquier certificado válido
933 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx AcceptSpecifiedHash.Text updated Accept this certificate hash Aceptar este certificado hash
934 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx CreateFolderButton.Text updated Create folder Crear carpeta
935 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx DigestAuth.Text updated Authentication method must be "Digest" El métod de autentificación debe ser "Digest"
936 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx label1.Text updated Server Servidor
937 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx label2.Text updated Path Ruta
938 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx label3.Text updated Username Usuario
939 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx label4.Text updated Password contraseña
940 Library\Backend\WEBDAV\WebDAVUI.es-ES.resx label5.Text updated Port (optional) Puerto (opcional)
980 Library\Encryption\Strings\GPGEncryption.es-ES.resx GpgencryptionencryptionswitchesLong not-updated Use this switch to specify any extra options to GPG. You cannot specify the --passphrase-fd option here. The --encrypt option is always specified.
981 Library\Encryption\Strings\GPGEncryption.es-ES.resx GpgencryptionencryptionswitchesShort not-updated Extra GPG commandline options for encryption
982 Library\Encryption\Strings\GPGEncryption.es-ES.resx GPGExecuteError not-updated Failed to execute GPG at "{0}": {1}
983 Library\Encryption\Strings\GPGEncryption.es-ES.resx GPGNotFoundWarning not-updated Duplicati was unable to verify the existence of GNU Privacy Guard. GPG may work regardless, if it is located in the system search path. If the encryption fails, no files will be backed up Do you want to continue anyway?
984 Library\Encryption\Strings\GPGEncryption.es-ES.resx GpgprogrampathLong not-updated The path to the GNU Privacy Guard program. If not supplied, Duplicati will assume that the program "gpg" is available in the system path.
985 Library\Encryption\Strings\GPGEncryption.es-ES.resx GpgprogrampathShort not-updated The path to GnuPG
986 Library\Encryption\Strings\GPGEncryption.es-ES.resx SignkeyLong not-updated The GNU Privacy Guard can optionally sign volumes with a special key. This feature is not currently active in Duplicati.
1013 Library\Interface\Strings\DataTypes.es-ES.resx Boolean updated Boolean Boleano
1014 Library\Interface\Strings\DataTypes.es-ES.resx Enumeration updated Enumeration Enumeración
1015 Library\Interface\Strings\DataTypes.es-ES.resx Integer updated Integer Integro
1016 Library\Interface\Strings\DataTypes.es-ES.resx Path updated Path ruta
1017 Library\Interface\Strings\DataTypes.es-ES.resx Size updated Size Tamaño
1018 Library\Interface\Strings\DataTypes.es-ES.resx String updated String Cadena de caracteres
1019 Library\Interface\Strings\DataTypes.es-ES.resx Timespan updated Timespan Intervalo de tiempo
1020 Library\Interface\Strings\DataTypes.es-ES.resx Unknown updated Unknown Desconocido
1078 Library\Main\Strings\Interface.es-ES.resx ManifestAndFileCountMismatchError FullBecauseFlagWasSet not-updated The manifest file {0} indicates that there should be {1} volumes, but the file list indicates {2} A full backup was forced with the --{0} flag
1079 Library\Main\Strings\Interface.es-ES.resx ManifestsMustBeRead FullBecauseLastFullIsFrom not-updated Disabling manifests is only possible on restores, and it should only be used as a last resort. A full backup is made because the latest full backup is from {0} and the full backup threshold is {1}
1080 Library\Main\Strings\Interface.es-ES.resx ManifestsMustBeReadOnBackups FullBecauseSourceFoldersChanged not-updated It is not allowed to disable manifest reading when performing a backup. Disabling manifests is only possible on restores, and it should only be used as a last resort. A full backup is made because the source folders have changed
1081 Library\Main\Strings\Interface.es-ES.resx ManifestVersionRequiresRelativeNamesWarning FullBecauseThereAreNIncrementals not-updated One or more manifests are from version 1, which requires that filenames searched are relative A full backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}
1082 Library\Main\Strings\Interface.es-ES.resx MissingSignatureFile IncrementalBecauseLastFullIsFrom not-updated The signature file for a content volume was missing, date: {0}, volumenumber: {1}, content volume filename: {2} An incremental backup is made because the latest full backup is from {0} and the full backup threshold is {1}
1083 Library\Main\Strings\Interface.es-ES.resx NoFilesGivenError IncrementalBecauseNoFlagsWereSet not-updated No filenames given for find-last-file An incremental backup is made because no full backup criteria was found
1084 Library\Main\Strings\Interface.es-ES.resx NoSourceFoldersError IncrementalBecauseThereAreNIncrementals not-updated No source folders specified for backup An incremental backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}
1110 Library\Main\Strings\Interface.es-ES.resx StatusReadingIncrementalData StatusBuildingFilelist updated Reading incremental data ... Building filelist ... Leyendo datos incrementales ... Creando lista de ficheros ...
1111 Library\Main\Strings\Interface.es-ES.resx StatusReadingIncrementalFile StatusCompleted updated Reading incremental data from: {0} Completed Leyendo datos incrementales desde: {0} Completado
1112 Library\Main\Strings\Interface.es-ES.resx StatusReadingIncrementals StatusCreatingVolume updated Reading incremental data Creating volume {0} Leyendo datos incrementales Creando volumen {0}
1113 Library\Main\Strings\Interface.es-ES.resx StatusReadingManifest StatusDownloadingContentVolume updated Reading manifest file: {0} Downloading content, volume {0} Leyendo fichero de manifiesto: {0} Descargando contenido, volumen {0}
1114 Library\Main\Strings\Interface.es-ES.resx StatusReadingSignatureFile StatusDownloadingSignatureVolume updated Reading signatures: {0}, vol {1} Downloading signatures, volume {0} Leyendo firmas: {0}, vol {1} Descargando firmas, volumen {0}
1115 Library\Main\Strings\Interface.es-ES.resx StatusStarted StatusLoadingFilelist updated Started Loading remote filelist Iniciado Cargando listado de ficheros remoto
1116 Library\Main\Strings\Interface.es-ES.resx StatusUploadingContentVolume StatusPatching updated Uploading content, volume {0} Patching restore with #{0} Subiendo contenido, volumen {0} Patcheando restore con #{0}
1204 Library\Main\Strings\Options.es-ES.resx FullifsourcefolderchangedLong ExcluderegexpShort not-updated It is not allowed to change the sourcefolder or the number of source folders. If this option is enabled, the backup will become a full backup if the source folders have changed, which will then start a new chain of backups with the new folder set. If --allow-sourcefolder-change is also set, a full backup is only issued if the number of of source folders have changed Exclude files regular expression
1205 Library\Main\Strings\Options.es-ES.resx FullifsourcefolderchangedShort ExcludeShort not-updated Run a full backup if the sourcefolder has changed Exclude files
1206 Library\Main\Strings\Options.es-ES.resx FullLong FiletorestoreLong not-updated When this flag is specified, Duplicati will make a full backup of all files, and ignore any incremental data. By default, duplicati will restore all files in the backup. Use this option to restore only a subset of the files
1207 Library\Main\Strings\Options.es-ES.resx FullShort FiletorestoreShort not-updated A flag used to force full backups A list of files to restore
1208 Library\Main\Strings\Options.es-ES.resx GpgencryptionDeprecated ForceLong updated not-updated Use --encryption-module=gpg instead When deleting old files, Duplicati will only write out what files are supposed to be deleted. Specify the "force" option to actually remove them. Usa --encryption-module=gpg en su lugar
1209 Library\Main\Strings\Options.es-ES.resx GpgencryptionLong ForceShort not-updated By default, Duplicati will use the AES encryption algorithm to encrypt the backup volumes, setting this flag makes Duplicati use the GNU Privacy Guard instead. GnuPG must be installed on the machine for this to work. Force the removal of files
1210 Library\Main\Strings\Options.es-ES.resx GpgencryptionShort FullifmorethannincrementalsLong not-updated Use GnuPG for encryption Use this option to limit the length of the backup chain to a certain number. The number supplied here indicates the maximum number of incrementals a chain can contain (not counting the root full backup)
1211 Library\Main\Strings\Options.es-ES.resx IncludeLong FullifmorethannincrementalsShort not-updated Include files that match this filter. The filter is a "file-globbing" filter, much like commandline options. You can use "*.txt" to include all text files. The max number of incrementals in a chain
1212 Library\Main\Strings\Options.es-ES.resx IncluderegexpLong FullifolderthanLong not-updated Include files that match this filter. The filter is a regular expression filter. You can use "(.*)\.txt" to include all text files. If the last full backup is older than the duration supplied here, Duplicati will make a full backup, otherwise an incremental
1213 Library\Main\Strings\Options.es-ES.resx IncluderegexpShort FullifolderthanShort not-updated Include files regular expression The max duration between full backups
1214 Library\Main\Strings\Options.es-ES.resx IncludeShort FullifsourcefolderchangedLong updated not-updated Include files It is not allowed to change the sourcefolder or the number of source folders. If this option is enabled, the backup will become a full backup if the source folders have changed, which will then start a new chain of backups with the new folder set. If --allow-sourcefolder-change is also set, a full backup is only issued if the number of of source folders have changed Incluir ficheros
1215 Library\Main\Strings\Options.es-ES.resx ListverifyuploadsLong FullifsourcefolderchangedShort not-updated Some protocols, like FTP, and some servers have problems detecting an interrupted transfer and will assume that the transfer completed, even if it did not. If this option is enabled Duplicati will list the contents of the backend after each upload and verify that the file exists and has the expected size. Run a full backup if the sourcefolder has changed
1245 Library\Main\Strings\Options.es-ES.resx SignaturecachepathLong OpenfilepolicyShort not-updated updated If this path is supplied, Duplicati will store all signature files here, so re-downloads can be avoided. Determines how to handle open files Determina como se tratan los ficheros abiertos
1246 Library\Main\Strings\Options.es-ES.resx SignaturecachepathShort PassphraseLong updated not-updated A path to temporary storage Supply a passphrase that Duplicati will use to encrypt the backup volumes, making them unreadable without the passphrase. This variable can also be supplied through the environment variable PASSPHRASE. Ruta a almacenamiento temporal
1247 Library\Main\Strings\Options.es-ES.resx SignaturecontrolfilesLong PassphraseShort not-updated Supply a list of files separated with semicolons, that will be added to each backup. The Duplicati GUI program uses this to store the setup database with each backup. Passphrase used to encrypt backups
1248 Library\Main\Strings\Options.es-ES.resx SignaturecontrolfilesShort RestoretimeLong updated not-updated A list of control files to embed in the backups By default, Duplicati will restore files from the most recent backup, use this option to select another item. You may use relative times, like "-2M" for a backup from two months ago. Lista de ficheros de control a añadir en las copias de seguridad
1249 Library\Main\Strings\Options.es-ES.resx SkipfilehashchecksLong RestoretimeShort not-updated If the hash for the volume does not match, Duplicati will refuse to use the backup. Supply this flag to allow Duplicati to proceed anyway. The time to restore files
1250 Library\Main\Strings\Options.es-ES.resx SkipfilehashchecksShort RetrydelayLong updated not-updated Set this flag to skip hash checks After a failed transmission, Duplicati will wait a short period before attempting again. This is usefull if the network drops out occasionally during transmissions. Selecciona esta opción para deshabilitar la comprobación de hash
1251 Library\Main\Strings\Options.es-ES.resx SkipfileslargerthanLong RetrydelayShort not-updated This option allows you to exclude files that are larger than the given value. Use this to prevent backups becoming extremely large. Time to wait between retries
1342 Library\SharpRSync\Strings\Program.es-ES.resx Library\SharpRSync\Strings\DeltaFile.es-ES.resx UsageMessage EndofstreamBeforeSignatureError not-updated Usage: {0} signature <input-file> <signature-file> {0} delta <signature-file> <input-file> <delta-file> {0} patch <base-file> <delta-file> <output-file> End of stream occured while reading initial 4 bytes of delta file
1343 Library\SharpRSync\Strings\RDiffBinary.es-ES.resx Library\SharpRSync\Strings\DeltaFile.es-ES.resx EncodedLengthError EndofstreamWithoutMarkerError not-updated Encoded value had unexpected length Stream ended but had no end marker
1344 Library\SharpRSync\Strings\RDiffBinary.es-ES.resx Library\SharpRSync\Strings\DeltaFile.es-ES.resx InvalidDataLengthError InternalBufferError updated not-updated Invalid data length Internal error, had buffered both matched and unmatched blocks! Longitud de datos inválida
1345 Library\SharpRSync\Strings\DeltaFile.es-ES.resx InvalidCopyLengthError updated Invalid length for copy data Longitud inválida para datos copiados
1346 Library\SharpRSync\Strings\DeltaFile.es-ES.resx InvalidCopyOffsetError updated Invalid offset for copy data Offset inválido para datos copiados
1347 Library\SharpRSync\Strings\DeltaFile.es-ES.resx InvalidLitteralSizeError updated Invalid size for literal data Tamaño inválido para datos literales
1348 Library\SharpRSync\Strings\DeltaFile.es-ES.resx InvalidSignatureError not-updated Delta stream did not have the correct start marker
1349 Library\SharpRSync\Strings\DeltaFile.es-ES.resx UnexpectedEndofstreamError not-updated Unexpected end of stream detected
1350 Library\SharpRSync\Strings\DeltaFile.es-ES.resx UnknownCommandError updated Unknown command in delta file Comando desconocido en fichero delta
1351 Library\SharpRSync\Strings\Program.es-ES.resx ErrorOccurred updated An error occurred: {0} Ha ocurrido un error: {0}
1352 Library\SharpRSync\Strings\Program.es-ES.resx UsageMessage not-updated Usage: {0} signature <input-file> <signature-file> {0} delta <signature-file> <input-file> <delta-file> {0} patch <base-file> <delta-file> <output-file>
1353 Library\SharpRSync\Strings\RDiffBinary.es-ES.resx InvalidDeltaCopyCommandError EncodedLengthError updated not-updated Invalid delta copy command: {0} Encoded value had unexpected length Comando de copia delta inválido: {0}
1354 Library\SharpRSync\Strings\RDiffBinary.es-ES.resx InvalidEncodedSizeError InvalidDataLengthError updated Invalid size for encoded value! Invalid data length Tamaño inválido para valor codificado! Longitud de datos inválida
1355 Library\SharpRSync\Strings\RDiffBinary.es-ES.resx InvalidLiteralCommand InvalidDeltaCopyCommandError not-updated updated Invalid literal delta command: {0} Invalid delta copy command: {0} Comando de copia delta inválido: {0}
1435
1436
1437
1438
1439
1440
1441
1442
1544
1545
1546
1547
1548
1549
1550
1681
1682
1683
1684
1685
1686
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+92 -107
View File
@@ -152,38 +152,38 @@ Erros: {3}"
"CommandLine\Strings\Program.pt-BR.resx","WrongNumberOfCommandsError_v2","updated","Found {0} commands but expected {1}, commands:
{2}","Esperado {1} mas encontrados {0}, comandos:
{2}"
"GUI\ApplicationSetup.pt-BR.resx","$this.Text","updated","Duplicati setup","Configuração do Duplicati"
"GUI\ApplicationSetup.pt-BR.resx","$this.Text","updated","Duplicati Options","Configuração do Duplicati"
"GUI\ApplicationSetup.pt-BR.resx","AdvancedTab.Text","updated","Advanced","Avançado"
"GUI\ApplicationSetup.pt-BR.resx","BalloonNotificationLevel.ToolTip","updated","Choose the level of notification given by balloon tips","Escolha o nível de notificação das dicas"
"GUI\ApplicationSetup.pt-BR.resx","Bandwidth.ToolTip","updated","Set the initial bandwidth limits to use in Duplicati","Defina os valores iniciais de banda para o Duplicati"
"GUI\ApplicationSetup.pt-BR.resx","BasicTab.Text","updated","Basic","Básico"
"GUI\ApplicationSetup.pt-BR.resx","CacheSizeLabel.Text","updated","Calculating cache size ...","Calculando tamanho do cache ..."
"GUI\ApplicationSetup.pt-BR.resx","CacheSizeLabel.ToolTip","updated","The size of the current cache folder","Tamanho da pasta de cache atual"
"GUI\ApplicationSetup.pt-BR.resx","CacheSizeLabel.Text","updated","Calculating cache size...","Calculando tamanho do cache ..."
"GUI\ApplicationSetup.pt-BR.resx","CacheSizeLabel.ToolTip","unused","","Tamanho da pasta de cache atual"
"GUI\ApplicationSetup.pt-BR.resx","CancelBtn.Text","updated","Cancel","Cancelar"
"GUI\ApplicationSetup.pt-BR.resx","ClearCacheButton.Text","updated","Clear cache","Eliminar cache"
"GUI\ApplicationSetup.pt-BR.resx","ClearCacheButton.ToolTip","updated","Clear any signature files stored in cache, they will be re-downloaded the next time the backup is activated","Limpar quaisquer arquivos de assinatura armazenados em cache, eles serão descarregados novamente a próxima vez que o backup for ativado"
"GUI\ApplicationSetup.pt-BR.resx","ClearCacheButton.ToolTip","updated","Clear any signature files stored in cache. Signatures will be re-downloaded on next backup.","Limpar quaisquer arquivos de assinatura armazenados em cache, eles serão descarregados novamente a próxima vez que o backup for ativado"
"GUI\ApplicationSetup.pt-BR.resx","CommonPassword.ToolTip","updated","Enter the default password to apply to new backups","Digite a senha padrão para os novos backups"
"GUI\ApplicationSetup.pt-BR.resx","EncryptionMethod.Text","updated","Encryption method","Tipo de Criptografia"
"GUI\ApplicationSetup.pt-BR.resx","EncryptionMethod.Text","updated","Encryption method:","Tipo de Criptografia"
"GUI\ApplicationSetup.pt-BR.resx","EncryptionMethod.ToolTip","updated","Choose the default encryption module to use for new backups","Selecione a criptografia padrão para os novos backups"
"GUI\ApplicationSetup.pt-BR.resx","EncryptionModule.ToolTip","updated","Choose the default encryption module to use for new backups","Selecione a criptografia padrão para os novos backups"
"GUI\ApplicationSetup.pt-BR.resx","groupBox1.Text","updated","User interface settings","Configurações da interface de usuário"
"GUI\ApplicationSetup.pt-BR.resx","groupBox2.Text","updated","Path settings (Advanced)","Configurações adicionais (Avançado)"
"GUI\ApplicationSetup.pt-BR.resx","groupBox4.Text","updated","Backup control settings used at startup","Configurações de backup utilizadas na inicialização"
"GUI\ApplicationSetup.pt-BR.resx","HideDonateButton.Text","updated","Hide the donate button on the main wizard page","Ocultar botão de doação na página principal do assistente"
"GUI\ApplicationSetup.pt-BR.resx","HideDonateButton.ToolTip","updated","Check this box to prevent the display of the donation button in the wizard","Marque esta caixa para não exibir o botão de doação no assistente"
"GUI\ApplicationSetup.pt-BR.resx","label1.Text","updated","Time a log is shown in recent backups","Tempo que um backup será exibido"
"GUI\ApplicationSetup.pt-BR.resx","groupBox1.Text","updated","User interface","Configurações da interface de usuário"
"GUI\ApplicationSetup.pt-BR.resx","groupBox2.Text","updated","Cache","Configurações adicionais (Avançado)"
"GUI\ApplicationSetup.pt-BR.resx","groupBox4.Text","updated","Default throttle settings","Configurações de backup utilizadas na inicialização"
"GUI\ApplicationSetup.pt-BR.resx","HideDonateButton.Text","updated","Hide Donate button on the main wizard page","Ocultar botão de doação na página principal do assistente"
"GUI\ApplicationSetup.pt-BR.resx","HideDonateButton.ToolTip","unused","","Marque esta caixa para não exibir o botão de doação no assistente"
"GUI\ApplicationSetup.pt-BR.resx","label1.Text","updated","Time to display past backups in log:","Tempo que um backup será exibido"
"GUI\ApplicationSetup.pt-BR.resx","label1.ToolTip","updated","Select the time a backup is displayed in the log window after completion","Selecione o tempo em que o relatório de backup será exibido após sua finalização"
"GUI\ApplicationSetup.pt-BR.resx","label2.Text","updated","Sections","Sessões"
"GUI\ApplicationSetup.pt-BR.resx","label3.Text","updated","User interface language","Idioma da interface"
"GUI\ApplicationSetup.pt-BR.resx","label3.ToolTip","updated","Choose the language for the user interface (requires restart)","Selecione o idioma que será utilizado na interface (requer reiniciar)"
"GUI\ApplicationSetup.pt-BR.resx","label4.Text","updated","Temporary folder","Pasta temporária"
"GUI\ApplicationSetup.pt-BR.resx","label4.ToolTip","updated","Enter the path where Duplicati stores temporary files","Digite o caminho onde o Duplicati irá armazenar os arquivos temporários"
"GUI\ApplicationSetup.pt-BR.resx","label5.Text","updated","Password","Senha"
"GUI\ApplicationSetup.pt-BR.resx","label5.ToolTip","updated","Enter the default password to apply to new backups","Digite a senha padrão que será utilizada para os novos backups"
"GUI\ApplicationSetup.pt-BR.resx","label6.Text","updated","Content","Conteúdo"
"GUI\ApplicationSetup.pt-BR.resx","label7.Text","updated","Period to pause duplicati after startup","Período para pausar após o inicio"
"GUI\ApplicationSetup.pt-BR.resx","label7.ToolTip","updated","Select the amount of time Duplicat is paused after startup","Selecione o período de tempo que o Duplicati é parado após inicializar"
"GUI\ApplicationSetup.pt-BR.resx","label8.Text","updated","Balloon notifications","Notificações por balões"
"GUI\ApplicationSetup.pt-BR.resx","label2.Text","updated","Sections:","Sessões"
"GUI\ApplicationSetup.pt-BR.resx","label3.Text","updated","Language:","Idioma da interface"
"GUI\ApplicationSetup.pt-BR.resx","label3.ToolTip","updated","Select user interface language (requires restart)","Selecione o idioma que será utilizado na interface (requer reiniciar)"
"GUI\ApplicationSetup.pt-BR.resx","label4.Text","updated","Temporary folder:","Pasta temporária"
"GUI\ApplicationSetup.pt-BR.resx","label4.ToolTip","unused","","Digite o caminho onde o Duplicati irá armazenar os arquivos temporários"
"GUI\ApplicationSetup.pt-BR.resx","label5.Text","unused","","Senha"
"GUI\ApplicationSetup.pt-BR.resx","label5.ToolTip","unused","","Digite a senha padrão que será utilizada para os novos backups"
"GUI\ApplicationSetup.pt-BR.resx","label6.Text","updated","Content:","Conteúdo"
"GUI\ApplicationSetup.pt-BR.resx","label7.Text","updated","Time to wait after startup:","Período para pausar após o inicio"
"GUI\ApplicationSetup.pt-BR.resx","label7.ToolTip","updated","Select the amount of time Duplicati is paused after startup","Selecione o período de tempo que o Duplicati é parado após inicializar"
"GUI\ApplicationSetup.pt-BR.resx","label8.Text","updated","Backup notifications:","Notificações por balões"
"GUI\ApplicationSetup.pt-BR.resx","label8.ToolTip","updated","Choose the level of notification given by balloon tips","Escolha o nível de detalhe das notificações"
"GUI\ApplicationSetup.pt-BR.resx","LanguageSelection.ToolTip","updated","Choose the language for the user interface (requires restart)","Escolha o idioma para a interface de usuário (requer reiniciar)"
"GUI\ApplicationSetup.pt-BR.resx","LicenseLink.Text","updated","Homepage","Página inicial"
@@ -191,9 +191,9 @@ Erros: {3}"
"GUI\ApplicationSetup.pt-BR.resx","LicenseSections.ToolTip","updated","Lists the available license sections","Listar as seções de licensa disponíveis"
"GUI\ApplicationSetup.pt-BR.resx","LicenseTab.Text","updated","License","Licença"
"GUI\ApplicationSetup.pt-BR.resx","OKBtn.Text","missing","OK",""
"GUI\ApplicationSetup.pt-BR.resx","PasswordDefaultsGroup.Text","updated","Password settings applied to new backups","Configurações de senha para novos backups"
"GUI\ApplicationSetup.pt-BR.resx","PasswordDefaultsGroup.Text","updated","Default password","Configurações de senha para novos backups"
"GUI\ApplicationSetup.pt-BR.resx","RecentDuration.ToolTip","updated","Select the time a backup is displayed in the log window after completion","Selecione o tempo que um backup é exibido na tela de log depois de finalizado"
"GUI\ApplicationSetup.pt-BR.resx","SignatureCacheEnabled.Text","updated","Signature cache","Cache assinaturas"
"GUI\ApplicationSetup.pt-BR.resx","SignatureCacheEnabled.Text","updated","Signature cache:","Cache assinaturas"
"GUI\ApplicationSetup.pt-BR.resx","SignatureCacheEnabled.ToolTip","updated","A signature cache limits the amount of data Duplicati needs to download by keeping a copy on the machine, enabling this feature makes the backups faster","O cache de assinaturas limita a quantidade de dados que o Duplicati precisa fazer download, mantendo uma cópia local, ativando esta opção acelera o backup"
"GUI\ApplicationSetup.pt-BR.resx","SignatureCachePathBrowse.Text","missing","...",""
"GUI\ApplicationSetup.pt-BR.resx","SignatureCachePathBrowse.ToolTip","updated","Browse for the signature cache folder","Exibir a pasta de cache de assinaturas"
@@ -202,7 +202,7 @@ Erros: {3}"
"GUI\ApplicationSetup.pt-BR.resx","TempPathBrowse.Text","missing","...",""
"GUI\ApplicationSetup.pt-BR.resx","TempPathBrowse.ToolTip","updated","Browse for the temporary folder","Exibir a pasta temporária"
"GUI\ApplicationSetup.pt-BR.resx","ThreadPriorityPicker.ToolTip","updated","Set the initial thread priority to be used by Duplicati","Definir a prioridade de processo inicial a ser utilizado pelo Duplicati"
"GUI\ApplicationSetup.pt-BR.resx","UseCommonPassword.Text","updated","Use a password to protect backups","Usar uma senha para proteger os backups"
"GUI\ApplicationSetup.pt-BR.resx","UseCommonPassword.Text","updated","Use password for new backups:","Usar uma senha para proteger os backups"
"GUI\ApplicationSetup.pt-BR.resx","UseCommonPassword.ToolTip","updated","Enable this to use the same password for multiple backups","Ative esta opção para utilizar a mesma senha em multiplos backups"
"GUI\HelperControls\BackupFileList.pt-BR.resx","changeDestinationToolStripMenuItem.Text","updated","Change destination...","Alterar destino..."
"GUI\HelperControls\BackupFileList.pt-BR.resx","folderBrowserDialog.Description","updated","Select the folder to restore to","Selecione a pasta de destino"
@@ -290,17 +290,37 @@ Uma nova versão do Mono irá ativar esta página."
"GUI\HelperControls\Strings\FilterEditor.pt-BR.resx","InvalidCharsInFilenameError","updated","The filename {0} has invalid characters","O arquivo {0} contém caracteres invalidos"
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","BytesName","not-updated","bytes",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","BytesPerSecond","not-updated","bytes/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","GBName","not-updated","gb",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","GBPerSecond","not-updated","gb/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","KBName","not-updated","kb",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","KBPerSecond","not-updated","kb/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","MBName","not-updated","mb",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","MBPerSecond","not-updated","mb/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","GBName","not-updated","GB",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","GBPerSecond","not-updated","GB/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","KBName","not-updated","kB",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","KBPerSecond","not-updated","kB/s",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","MBName","not-updated","MB",""
"GUI\HelperControls\Strings\SizeSelector.pt-BR.resx","MBPerSecond","not-updated","MB/s",""
"GUI\HelperControls\Strings\TestSearchSelection.pt-BR.resx","FileName","updated","File Name '{0}'","Arquivo '{0}'"
"GUI\HelperControls\Strings\TestSearchSelection.pt-BR.resx","FileType","updated","File Type '{0}'","Arquivo Tipo '{0}'"
"GUI\HelperControls\Strings\TestSearchSelection.pt-BR.resx","TotalSizeLabel","updated","Total {0} files at {1}","Total de {0} arquivos em {1}"
"GUI\HelperControls\Strings\WaitForOperation.pt-BR.resx","ReallyAbortQuestion","updated","Are you sure you want to abort the operation?","Tem certeza que deseja abortar a operação?"
"GUI\HelperControls\Strings\WaitForOperation.pt-BR.resx","UserCancelled","updated","The user cancelled the operation","O usuário cancelou a operação"
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","$this.Text","missing","Test Search Selection",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","btnCancel.Text","missing","Cancel",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","btnOK.Text","missing","OK",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","chFile.Text","missing","Filename",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","chFileExt.Text","missing","Ext",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","chPath.Text","missing","Path",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","chSize.Text","missing","Size",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","label1.Text","missing","Filters:",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","label2.Text","missing","Use context menu to add and remove filters",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","label3.Text","missing","Files to be included:",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","lbLoading.Text","missing","Scanning files, please wait....",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miExclude.Text","missing","Exclude",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miExcludeFileExt.Text","missing","Add file extension filter",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miExcludeFileName.Text","missing","Add filename filter",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miExcludeFilePath.Text","missing","File Path",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miInclude.Text","missing","Include",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miIncludeFileExt.Text","missing","Add file extension filter",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miIncludeFileName.Text","missing","Add filename filer",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","miIncludeFilePath.Text","missing","File path",""
"GUI\HelperControls\TestSearchSelection.pt-BR.resx","removeFilterToolStripMenuItem.Text","missing","Remove Filter",""
"GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx","ThreadPriority.Items","updated","High (Not recommended)","Alto (Não recomendado)"
"GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx","ThreadPriority.Items1","updated","Above normal","Acima do normal"
"GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx","ThreadPriority.Items2","missing","Normal",""
@@ -327,55 +347,6 @@ Uma nova versão do Mono irá ativar esta página."
"GUI\MainForm.pt-BR.resx","stopToolStripMenuItem.Text","updated","Stop","Parar"
"GUI\MainForm.pt-BR.resx","throttleOptionsToolStripMenuItem.Text","updated","Throttle options...","Opções de banda..."
"GUI\MainForm.pt-BR.resx","wizardToolStripMenuItem.Text","updated","Wizard...","Assistente..."
"GUI\Properties\Resources.pt-BR.resx","AddedFile","unused","","../Resources/AddedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","AddedFolder","unused","","../Resources/AddedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","AddedOrModifiedFile","unused","","../Resources/AddedOrModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Clock05","unused","","../Resources/Clock05.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Clock15","unused","","../Resources/Clock15.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Clock30","unused","","../Resources/Clock30.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Clock60","unused","","../Resources/Clock60.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","CloseMenuIcon","unused","","../Resources/CloseMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","ControlFile","unused","","../Resources/ControlFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Delay","unused","","../Resources/Delay.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","DeletedFile","unused","","../Resources/DeletedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","DeletedFolder","unused","","../Resources/DeletedFolder.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","donate_button","unused","","../Resources/donate_button.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Duplicati","unused","","../Resources/Duplicati.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","EmptyBackupStatusIcon","unused","","../Resources/EmptyBackupStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","ErrorStatusIcon","unused","","../Resources/ErrorStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","ExamineMenuIcon","unused","","../Resources/ExamineMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","FolderOpen","unused","","../Resources/FolderOpen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","FullBackup","unused","","../Resources/FullBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","help","unused","","../Resources/help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","IncompleteFile","unused","","../Resources/IncompleteFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","InterruptedStatusIcon","unused","","../Resources/InterruptedStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","LogMenuIcon","unused","","../Resources/LogMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","LogViewer","unused","","../Resources/LogViewer.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","ModifiedFile","unused","","../Resources/ModifiedFile.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","OKStatusIcon","unused","","../Resources/OKStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","PartialBackup","unused","","../Resources/PartialBackup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","PartialStatusIcon","unused","","../Resources/PartialStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Pause","unused","","../Resources/Pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Play","unused","","../Resources/Play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","SettingsMenuIcon","unused","","../Resources/SettingsMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","SmallLogo","unused","","../Resources/SmallLogo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Status_OK","unused","","../Resources/Status OK.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Status_pause","unused","","../Resources/Status pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Status_Working","unused","","../Resources/Status Working.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","StatusMenuIcon","unused","","../Resources/StatusMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Stop","unused","","../Resources/Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Throttle","unused","","../Resources/Throttle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","ThrottleIcon","unused","","../Resources/Throttle.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Trash","unused","","../Resources/Trash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayNormal","unused","","../Resources/TrayNormal.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayNormalError","unused","","../Resources/TrayNormalError.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayNormalPause","unused","","../Resources/TrayNormalPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayNormalWarning","unused","","../Resources/TrayNormalWarning.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayWorking","unused","","../Resources/TrayWorking.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","TrayWorkingPause","unused","","../Resources/TrayWorkingPause.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","WarningStatusIcon","unused","","../Resources/WarningStatusIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","Wizard","unused","","../Resources/Wizard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\Properties\Resources.pt-BR.resx","WizardMenuIcon","unused","","../Resources/WizardMenuIcon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"GUI\RestoreBackup.pt-BR.resx","$this.Text","updated","RestoreBackup","Restaurar backup"
"GUI\RestoreBackup.pt-BR.resx","CancelBtn.Text","updated","Cancel","Cancelar"
"GUI\RestoreBackup.pt-BR.resx","folderBrowserDialog.Description","updated","Select the folder where the data will be restored to","Selecione a pasta de destino para restaurar seus arquivos"
@@ -408,19 +379,19 @@ Uma nova versão do Mono irá ativar esta página."
"GUI\ServiceStatus.pt-BR.resx","viewLogToolStripMenuItem.Text","updated","View log ...","Ver log ..."
"GUI\ServiceStatus.pt-BR.resx","wizardHelpLabel.Text","updated","(Create, edit, delete, run, restore backups)","(Criar, editar, apagar, executar, restaurar backups)"
"GUI\ServiceStatus.pt-BR.resx","wizardLink.Text","updated","Duplicati Wizard","Assistente Duplicati"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Continous","updated","While backup is running (and on errors/warnings)","Enquanto o backup estiver rodando (e em erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Errors","updated","On backup errors","Em erros de backup"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Off","updated","No balloon notifications","Desativar notificações"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Start","updated","On backup start (and errors/warnings)","No inicio do backup (e erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_StartAndStop","updated","On backup start and stop (and errors/warnings)","No inicio e final do backup (e erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Warnings","updated","On backup errors and warnings","Em erros e alertas"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Continous","updated","While running, and on errors, warnings","Enquanto o backup estiver rodando (e em erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Errors","updated","On errors","Em erros de backup"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Off","updated","No notifications","Desativar notificações"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Start","updated","On start, errors, warnings","No inicio do backup (e erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_StartAndStop","updated","On start, stop, errors, warnings","No inicio e final do backup (e erros/alertas)"
"GUI\Strings\ApplicationSetup.pt-BR.resx","BalloonNotification_Warnings","updated","On errors, warnings","Em erros e alertas"
"GUI\Strings\ApplicationSetup.pt-BR.resx","CacheSize","updated","Cache size: {0}","Tamanho do cache: {0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","CalculatingCacheSize","updated","Calculating cache size ...","Calculando tamanho do cache ..."
"GUI\Strings\ApplicationSetup.pt-BR.resx","ConfirmCacheDelete","updated","Delete signature files in the folder:
{0}","Remover arquivos de assinatura na pasta:
{0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","DefaultLanguage","updated","System language, {0}","Idioma do sistema, {0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","DialogTitle","updated","Duplicati Setup, version {0}","Duplicati Setup, versão {0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","DialogTitle","updated","Duplicati Options, version {0}","Duplicati Setup, versão {0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","EncryptionModuleLoadError","updated","An error occured while loading encryption modules: {0}","Ocorreu um erro ao carregar os módulos de criptografia: {0}"
"GUI\Strings\ApplicationSetup.pt-BR.resx","ErrorWhileExaminingFolder","updated","An exception occured while examining the folder: {0}.
Do you want to use that folder anyway?","Ocorreu um erro examinando a pasta: {0}.
@@ -454,7 +425,7 @@ Gostaria de usar esta pasta mesmo assim?"
"GUI\Strings\Common.pt-BR.resx","TwoWeeks","updated","Two weeks","Duas semanas"
"GUI\Strings\DatabaseUpgrader.pt-BR.resx","BackupFilenamePrefix","not-updated","backup",""
"GUI\Strings\DatabaseUpgrader.pt-BR.resx","DatabaseFormatError","updated","Unable to determine database format: {0}","Não foi possível determinar o formato do banco de dados: {0}"
"GUI\Strings\DatabaseUpgrader.pt-BR.resx","InvalidVersionError","updated","
"GUI\Strings\DatabaseUpgrader.pt-BR.resx","InvalidVersionError","updated","
The database has version {0} but the largest supported version is {1}.
This is likely caused by upgrading to a newer version and then downgrading.
@@ -968,10 +939,13 @@ Mensagem de erro: {0}"
"Library\Backend\FTP\FTPUI.pt-BR.resx","label3.Text","updated","Username","Usuário"
"Library\Backend\FTP\FTPUI.pt-BR.resx","label4.Text","updated","Password","Senha"
"Library\Backend\FTP\FTPUI.pt-BR.resx","label5.Text","updated","Port (optional)","Porta (opcional)"
"Library\Backend\FTP\FTPUI.pt-BR.resx","label6.Text","missing","Note: Some FTP servers have trouble dealing with more than 2000 files. For this reason, you are advised to select a large volume size so the number of files is low.",""
"Library\Backend\FTP\FTPUI.pt-BR.resx","PassiveConnection.Text","updated","Use passive connection","Utilizar conexão passiva"
"Library\Backend\FTP\FTPUI.pt-BR.resx","TestConnection.Text","updated","Test connection","Testar conexão"
"Library\Backend\FTP\FTPUI.pt-BR.resx","UseSSL.Text","updated","Use SSL","Utilizar SSL"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","Description","updated","This backend can read and write data to an FTP based backend. Allowed formats are ""ftp://hostname/folder"" or ""ftp://username:password@hostname/folder""","Este protocolo pode ler e escrever arquivos baseado em FTP. Os formatos permitidos são ""ftp://nomedohost/pasta"" ou ""ftp://usuario:senha@nomedohost/pasta"""
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionDisableUploadVerifyLong","not-updated","To protect against network failures, every upload will be attempted verified. Use this option to disable this verfication to make the upload faster by more unsafe.",""
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionDisableUploadVerifyShort","not-updated","Disable upload verification",""
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionFTPActiveLong","updated","If this flag is set, the FTP connection is made in active mode. Even if the ""ftp-passive"" flag is also set, the connection will be made in active mode","Se esta opção for ativada, a conexão FTP será feita no modo ativo. Mesmo se a opção ""ftp-passive"" for ativada também, a conexão será feita no modo ativo"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionFTPActiveShort","updated","Toggles the FTP connections method","Altera entre os métodos de conexão FTP"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionFTPPassiveLong","updated","If this flag is set, the FTP connection is made in passive mode, which works better with some firewalls. If the ""ftp-regular"" flag is also set, this flag is ignored","Se esta opção for ativada, a conexão FTP será feita no modo passivo, que funciona melhor com determinados firewalls. Se a opção ""ftp-regular"" também for ativada, esta opção será ignorada"
@@ -985,6 +959,8 @@ Mensagem de erro: {0}"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionUseSSLLong","updated","Use this flag to communicate using Secure Socket Layer (SSL) over ftp (ftps).","Utilize esta opção para se comunicar utilizando SSL sobre ftp (ftps)."
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DescriptionUseSSLShort","updated","Instructs Duplicati to use an SSL (ftps) connection","Instrui o Duplicati a utilizar uma conexão SSL (ftps)"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","DisplayName","updated","FTP based","Baseado em FTP"
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","ListVerifyFailure","not-updated","The file {0} was uploaded but not found afterwards, the file listing returned {1}",""
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","ListVerifySizeFailure","not-updated","The file {0} was uploaded but the returned size was {1} and it was expected to be {2}",""
"Library\Backend\FTP\Strings\FTPBackend.pt-BR.resx","MissingFolderError","updated","The folder {0} was not found, message: {1}","A pasta {0} não foi encontrada, mensagem: {1}"
"Library\Backend\FTP\Strings\FTPUI.pt-BR.resx","ApproveCertificateHashQuestion","updated","The certificate was not valid ({0}). Do you want to approve the certificate anyway and retry?","O certificado não é valido ({0}). Você quer aprová-lo mesmo assim e repetir a operação?"
"Library\Backend\FTP\Strings\FTPUI.pt-BR.resx","CreateMissingFolderQuestion","updated","The folder does not exist, do you want to create it?","A pasta não existe, gostaria de criá-la?"
@@ -995,10 +971,10 @@ Mensagem de erro: {0}"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","AllowCredentialStorage.Text","updated","Store new S3 account information","Armazenar novas informações de conta S3"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","CredentialGroup.Text","updated","Stored credentials","Credenciais armazenadas"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","groupBox2.Text","updated","Default settings","Configuração padrão"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","label1.Text","updated","Bucket region","Região do container"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","label2.Text","updated","Servername","Nome do servidor"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","label1.Text","updated","Bucket region:","Região do container"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","label2.Text","updated","Server name:","Nome do servidor"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","RemoveAllButton.Text","updated","Remove all","Remover todos"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","RemoveSelectedButton.Text","updated","Remove selected","Remover selecionados"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","RemoveSelectedButton.Text","updated","Remove","Remover selecionados"
"Library\Backend\S3\S3CommonOptions.pt-BR.resx","UseRRS.Text","updated","Use Reduced Redundancy Storage","Utilizar armazenamento de redundância reduzido"
"Library\Backend\S3\S3UI.pt-BR.resx","CreateBucket.Text","updated","Create bucket","Criar container"
"Library\Backend\S3\S3UI.pt-BR.resx","label1.Text","updated","AWS Access ID","ID de acesso AWS"
@@ -1046,7 +1022,7 @@ Mensagem de erro: {0}"
"Library\Backend\S3\Strings\S3Backend.pt-BR.resx","UnableToDecodeBucketnameError","updated","Unable to determine the bucket name for host: {0}","Não foi possível determinar o nome de armazenamento para o host: {0}"
"Library\Backend\S3\Strings\S3Backend.pt-BR.resx","UnableToParseURLError","updated","Could not parse the url: {0}","Não foi possível tratar a URL: {0}"
"Library\Backend\S3\Strings\S3SettingsControl.pt-BR.resx","PageDescription","updated","Displays various options related to the S3 backend","Exibe diversas opções do armazenamento S3"
"Library\Backend\S3\Strings\S3SettingsControl.pt-BR.resx","PageTitle","updated","S3 Options","Opções S3"
"Library\Backend\S3\Strings\S3SettingsControl.pt-BR.resx","PageTitle","updated","S3","Opções S3"
"Library\Backend\S3\Strings\S3UI.pt-BR.resx","BucketnameCaseWarning","updated","The bucket name is not in all lower case.
{0}
Do you want to convert the bucket name to lower case?","O nome do container não está em letras minúsculas.
@@ -1095,8 +1071,8 @@ Do you want to create the bucket now?"
"Library\Backend\S3\Strings\S3UI.pt-BR.resx","PageTitle","updated","Backup storage options","Opções de armazenamento de backup"
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","BrowseForSFTPButton.Text","missing","...",""
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","BrowseForSFTPDialog.Filter","updated","Executables (*.exe)|*.exe|All files (*.*)|*.*","Executáveis (*.exe)|*.exe|Todos arquivos (*.*)|*.*"
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","label1.Text","updated","Path to SFTP","Caminho para o SFTP"
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","UseManagedAsDefault.Text","updated","Use managed SSH as default","Utilizar SSH gerenciado por padrão"
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","label1.Text","updated","SFTP path:","Caminho para o SFTP"
"Library\Backend\SSH\SSHCommonOptions.pt-BR.resx","UseManagedAsDefault.Text","updated","Use managed SSH by default","Utilizar SSH gerenciado por padrão"
"Library\Backend\SSH\SSHUI.pt-BR.resx","BrowseForKeyFileButton.Text","missing","...",""
"Library\Backend\SSH\SSHUI.pt-BR.resx","CreateFolderButton.Text","updated","Create folder","Criar pasta"
"Library\Backend\SSH\SSHUI.pt-BR.resx","GenerateDebugOutput.Text","updated","Generate debug output","Gerar saida de debug"
@@ -1163,7 +1139,7 @@ Error message: {1}","Falha ao iniciar a aplicação SSH ({0}).
Tenha certeza que o ""putty"" está instalado, e que você tenha definido o caminho correto.
Mensagem de erro: {1}"
"Library\Backend\SSH\Strings\SSHBackend.pt-BR.resx","LaunchErrorWindows","updated","Failed to start the SSH application ({0}).
Make sure that ""putty"" is installed, and you have set the correct path.
Make sure that ""PuTTY"" is installed, and you have set the correct path.
Error message: {1}","Falha ao iniciar a aplicação SSH ({0}).
Tenha certeza de o aplicativo ""expect"" está instalado.
Mensagem de erro: {1}"
@@ -1200,7 +1176,7 @@ Será utilizado o caminho padrão para a aplicação SFTP.
A aplicação SFTP não foi encontrada durante as verificações.
Tem certeza que deseja continuar?"
"Library\Backend\SSH\Strings\SSHSettingsControl.pt-BR.resx","PageDescription","updated","Settings for the SSH backend","Configurações para o armazenamento SSH"
"Library\Backend\SSH\Strings\SSHSettingsControl.pt-BR.resx","PageTitle","updated","SSH Settings","Configurações SSH"
"Library\Backend\SSH\Strings\SSHSettingsControl.pt-BR.resx","PageTitle","updated","SSH","Configurações SSH"
"Library\Backend\SSH\Strings\SSHUI.pt-BR.resx","CreateMissingFolderQuestion","updated","The folder does not exist, do you want to create it?","A pasta não existe, você deseja criá-la?"
"Library\Backend\SSH\Strings\SSHUI.pt-BR.resx","MissingSCPWarning","updated","Duplicati was unable to verify the existence of the sftp program.
sftp may work regardless, if it is located in the system search path.
@@ -1298,12 +1274,12 @@ Arquivos criados com este módulo podem ser lidos por qualquer aplicação adere
"Library\DynamicLoader\Strings\DynamicLoader.pt-BR.resx","DynamicTypeLoadError","updated","Failed to load process type {0} assembly {1}, error message: {2}","Falha ao carregar processo tipo {0} montagem {1}, mensagem de erro: {2}"
"Library\Encryption\GPGCommonOptions.pt-BR.resx","BrowseForGPGDialog.Filter","updated","Executables (*.exe)|*.exe|All files (*.*)|*.*","Executáveis (*.exe)|*.exe|Todos arquivos (*.*)|*.*"
"Library\Encryption\GPGCommonOptions.pt-BR.resx","BrowseForGPGPathButton.Text","missing","...",""
"Library\Encryption\GPGCommonOptions.pt-BR.resx","label1.Text","updated","GPG executable path","Caminho do executável GPG"
"Library\Encryption\GPGCommonOptions.pt-BR.resx","label1.Text","updated","GPG path:","Caminho do executável GPG"
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","AesencryptiondontallowfallbackLong_v2","updated","If the decryption fails using AES Crypt, dont attempt to use the previous encryption file format. ","Se a decriptografia utilizando AES Crypt falhar, não tente utilizar o formato de criptografia anterior."
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","AesencryptiondontallowfallbackShort","updated","Do not attempt to decrypt using previous method","Não tentar decriptografar usando o método anterior"
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","BadKeyStretchError","updated","Bad key stretch","Comprimento da chave ruim"
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","Description_v2","updated","This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption.","Este módulo criptografa todos os arquivos da mesma maneira que o AESCrypt faz, utilizando criptografia AES de 256 bits."
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","DisplayName","updated","AES-256 encryption, built in","Criptografia AES-256, incorporada"
"Library\Encryption\Strings\AESEncryption.pt-BR.resx","DisplayName","updated","AES-256 encryption, built-in","Criptografia AES-256, incorporada"
"Library\Encryption\Strings\EncryptionBase.pt-BR.resx","DecryptionError","updated","Failed to decrypt data (invalid passphrase?): {0}","Não foi possível descriptografar os dados (chave incorreta?): {0}"
"Library\Encryption\Strings\GPGCommonOptions.pt-BR.resx","GpgAutodetectedInfo","updated","Leave empty to use the gpg application found: {0}","Deixe em branco para utilizar a aplicação gpg encontrada: {0}"
"Library\Encryption\Strings\GPGCommonOptions.pt-BR.resx","GpgNotAutodetectedWarning","updated","The gpg application could not be located, please enter the path manually","A aplicação gpg não pode ser localizada, por favor insira o caminho manualmente"
@@ -1349,7 +1325,7 @@ Deseja continuar mesmo assim?"
"Library\Encryption\Strings\GPGEncryption.pt-BR.resx","SignkeyLong","updated","The GNU Privacy Guard can optionally sign volumes with a special key. This feature is not currently active in Duplicati.","O GNU Privacy Guard pode assinar os volume com uma chave especial. Está função ainda não está disponível no Duplicati."
"Library\Encryption\Strings\GPGEncryption.pt-BR.resx","SignkeyShort","updated","Sign key for GnuPG","Chave de assinatura para o GnuPG"
"Library\Encryption\Strings\GPGSettingsControl.pt-BR.resx","PageDescription","updated","Settings for the GPG encryption module","Configurações para o módulo de criptografia GPG"
"Library\Encryption\Strings\GPGSettingsControl.pt-BR.resx","PageTitle","updated","GPG Settings","Configurações GPG"
"Library\Encryption\Strings\GPGSettingsControl.pt-BR.resx","PageTitle","updated","GPG","Configurações GPG"
"Library\Encryption\Strings\GPGStreamWrapper.pt-BR.resx","DecryptionError","updated","Decryption failed: {0}","Falha ao descriptografar: {0}"
"Library\Encryption\Strings\GPGStreamWrapper.pt-BR.resx","GPGFlushError","updated","Failure while invoking GnuPG, program won't flush output","Falha ao chamar o GnuPG, o programa não envia dados"
"Library\Encryption\Strings\GPGStreamWrapper.pt-BR.resx","GPGTerminateError","updated","Failure while invoking GnuPG, program won't terminate","Falha ao chamar o GnuPG, o programa não quer terminar"
@@ -1451,6 +1427,14 @@ Se este problema voltar a ocorrer, é possível que o arquivo de transação est
"Library\Main\Strings\Interface.pt-BR.resx","FilenameMismatchError","updated","The manifest report that the file should be named {0} but it was named {1}","O manifesto relatou que o nome do arquivo deveria ser {0} mas foi nomeado {1}"
"Library\Main\Strings\Interface.pt-BR.resx","FilesAreNotForceDeletedMessage","updated","Files are not deleted, use the --force command to actually remove files","Os arquivos não são apagados, utilize o comando --force para apagar os arquivos"
"Library\Main\Strings\Interface.pt-BR.resx","FileSizeMismatchError","updated","The file {0} has size {1} but should have size {2}","O arquivo {0} tem o tamanho de {1} mas deveria ter {2}"
"Library\Main\Strings\Interface.pt-BR.resx","FullBecauseBackendIsEmpty","not-updated","A full backup is made because no existing backup chains were found on the destination",""
"Library\Main\Strings\Interface.pt-BR.resx","FullBecauseFlagWasSet","not-updated","A full backup was forced with the --{0} flag",""
"Library\Main\Strings\Interface.pt-BR.resx","FullBecauseLastFullIsFrom","not-updated","A full backup is made because the latest full backup is from {0} and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.pt-BR.resx","FullBecauseSourceFoldersChanged","not-updated","A full backup is made because the source folders have changed",""
"Library\Main\Strings\Interface.pt-BR.resx","FullBecauseThereAreNIncrementals","not-updated","A full backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.pt-BR.resx","IncrementalBecauseLastFullIsFrom","not-updated","An incremental backup is made because the latest full backup is from {0} and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.pt-BR.resx","IncrementalBecauseNoFlagsWereSet","not-updated","An incremental backup is made because no full backup criteria was found",""
"Library\Main\Strings\Interface.pt-BR.resx","IncrementalBecauseThereAreNIncrementals","not-updated","An incremental backup is made because the current chain has {0} incremental backups and the full backup threshold is {1}",""
"Library\Main\Strings\Interface.pt-BR.resx","InternalDeleteCountError","updated","An internal error occured, and the operation was aborted to protect the backup sets","Ocorreu um erro interno e a operação foi cancelada para proteger os backups"
"Library\Main\Strings\Interface.pt-BR.resx","ManifestAndFileCountMismatchError","updated","The manifest file {0} indicates that there should be {1} volumes, but the file list indicates {2}","O arquivo de manifesto {0} indica que deveriam existir {1} volumes, mas a lista de arquivos indica {2}"
"Library\Main\Strings\Interface.pt-BR.resx","ManifestsMustBeRead","updated","Disabling manifests is only possible on restores, and it should only be used as a last resort.","Desativando manifestos somente é possível em restaurações, e deve ser utilizado como último recurso."
@@ -1536,6 +1520,8 @@ Se este problema voltar a ocorrer, é possível que o arquivo de transação est
"Library\Main\Strings\Options.pt-BR.resx","AsynchronousuploadShort","updated","Transmit files on a separate thread","Transmitir arquivos em um processo separado"
"Library\Main\Strings\Options.pt-BR.resx","AutocleanupLong","updated","If a backup is interrupted there will likely be partial files present on the backend. Using this flag, Duplicati will automatically remove such files when encountered.","Se um backup for interrompido, provavelmente existirão arquivos parciais presentes no backup. Utilizando esta opção, o Duplicati irá remover automaticamente estes arquivos quando encontrados."
"Library\Main\Strings\Options.pt-BR.resx","AutocleanupShort","updated","A flag indicating that Duplicati should remove unused files","Opção indicando que o Duplicati deve remover arquivos não utilizados"
"Library\Main\Strings\Options.pt-BR.resx","BackendlogdatabaseLong","not-updated","Use this option to specify a path to a file that will store information about backend operations. This option can be used to track down errors by comparing the backend state with the expected backend state.",""
"Library\Main\Strings\Options.pt-BR.resx","BackendlogdatabaseShort","not-updated","Database log of remote operations",""
"Library\Main\Strings\Options.pt-BR.resx","BackupprefixLong","updated","Any string used to prefix the filenames generated by Duplicati.","Qualquer conjunto de caracteres utilizados como prefixo nos arquivos que são criados pelo Duplicati."
"Library\Main\Strings\Options.pt-BR.resx","BackupprefixShort","updated","Backup volume filename prefix","Prefixo para o nome dos arquivos de volume"
"Library\Main\Strings\Options.pt-BR.resx","CompressionmoduleLong","updated","Duplicati supports plugable compression modules. Use this option to select a module to use for compression. This is only applied when creating new volumes, when reading an existing file, the filename is used to select the compression module.","O Duplicati suporta módulos de complessão. Utilize esta opção para selecionar o módulo a ser utilizado. Isto se aplica na criação de novos volumes, ao ler arquivos existentes, o nome do arquivo é utilizado para selecionar o módulo de compressão"
@@ -1643,7 +1629,7 @@ Se este problema voltar a ocorrer, é possível que o arquivo de transação est
"Library\Main\Strings\Options.pt-BR.resx","TotalsizeLong","updated","This option can place an upper limit on the total size of each backup. Note that if this flag is specified the backup may not contain all files, even for a full backup.","As opção serve para definir um limite total para cada backup. Se esta opção ser selecionada, o backup pode não conter todos os arquivos, mesmo para um backup completo."
"Library\Main\Strings\Options.pt-BR.resx","TotalsizeShort","updated","The number of bytes generated by each backup run","O número de bytes gerados por cada execução do backup"
"Library\Main\Strings\Options.pt-BR.resx","UploadUnchangedBackupsLong","not-updated","If no files have changed, Duplicati will not upload a backup set. If the backup data is used to verify that a backup was executed, this option will make Duplicati upload a backupset even if it is empty",""
"Library\Main\Strings\Options.pt-BR.resx","UploadUnchangedBackupsShort","updated","Upload empty backup files ","Enviar arquivos de backup vazios"
"Library\Main\Strings\Options.pt-BR.resx","UploadUnchangedBackupsShort","updated","Upload empty backup files","Enviar arquivos de backup vazios"
"Library\Main\Strings\Options.pt-BR.resx","UsnpolicyLong","not-updated","This settings controls the usage of NTFS USN numbers, which allows Duplicati to obtain a list of files and folders much faster. If this is set to ""off"", Duplicati will not attempt to use USN. Setting this to ""auto"" makes Duplicati attempt to use USN, and fail silently if that was not allowed or supported. A setting of ""on"" will also make Duplicati attempt to use USN, but will produce a warning message in the log if it fails. Setting it to ""required"" will make Duplicati abort the backup if the USN usage fails. This feature is only supported on Windows and requires administrative privileges.",""
"Library\Main\Strings\Options.pt-BR.resx","UsnpolicyShort","updated","Controls the use of NTFS Update Sequence Numbers","Controla a utilização de USN NTFS"
"Library\Main\Strings\Options.pt-BR.resx","VerificationLevelLong","not-updated","Use this option to change the level of verifiation done by the verify command. The setting ""manifest"" will only verify the manifest chain. The settings ""signature"" will also download and verify all signature files. The setting ""full"", will download all files, including content files, and verify that they are unchanged.",""
@@ -1701,7 +1687,7 @@ Mensagem de erro: {1}"
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DescriptionAcceptHashShort","updated","Optionally accept a known SSL certificate","Opcionalmente aceitar um certificado SSL conhecido"
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisableExpect100Long","not-updated","The default HTTP request has the header ""Expect: 100-Continue"" attached, which allows some optimizations when authenticating, but also breaks some web servers, causing them to report ""417 - Expectation failed""",""
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisableExpect100Short","updated","Disable the expect header","Desativar o cabeçalho esperado"
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisableNagleLong","not-updated","By default the http requests use the RFC 896 nagling algorithm to support transfer of small packages more effeciently.",""
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisableNagleLong","updated","By default the http requests use the RFC 896 nagling algorithm to support transfer of small packages more effeciently.","Por padrão a requisição http utiliza a RFC 896 para suportar a tranferência de pacotes pequenos de maneira eficiente"
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisableNagleShort","updated","Disable nagling","Disable the nagling"
"Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx","DisplayName","updated","Configure http requests","Configurar requisições HTTP"
"Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx","EndofstreamBeforeSignatureError","updated","End of stream occured while reading initial 4 bytes of signature file","Fim do fluxo ocorrido lendo os primeiros 4 bytes do arquivo de assinatura"
@@ -1746,15 +1732,15 @@ Command: {1} {2}","O comando externo falhou ao iniciar.
Mensagem de erro: {0}
Comando: {1} {2}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","ExternalProgramTimeoutError","updated","The external command failed to complete within the set time limit: {0} {1}","O comando externo falhou em completar dentro do limite de tempo definido: {0} {1}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","InvalidFilePathError","not-updated","Unable to match local path {0} with any snapshot path: {1}",""
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","MountFolderMissingError","not-updated","Script returned successfully, but the temporary folder {0} does not exist: {1}",""
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","MountFolderNotRemovedError","not-updated","Script returned successfully, but the temporary folder {0} still exist: {1}",""
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","InvalidFilePathError","updated","Unable to match local path {0} with any snapshot path: {1}","Não foi possível encontrar o caminho {0} com nenhum snapshot: {1}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","MountFolderMissingError","updated","Script returned successfully, but the temporary folder {0} does not exist: {1}","O script executou com sucesso, mas a pasta temporária {0} não existe: {1}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","MountFolderNotRemovedError","updated","Script returned successfully, but the temporary folder {0} still exist: {1}","O script executou com sucesso, mas a pasta temporária {0} ainda existe: {1}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","ScriptExitCodeError","updated","The script returned exit code {0}, but {1} was expected: {2}","O script retornou o código {0}, mas {1} era esperado: {2}"
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","ScriptOutputError","not-updated","Script returned successfully, but the output was missing the {0} parameter: {1}",""
"Library\Snapshots\Strings\LinuxSnapshot.pt-BR.resx","ScriptOutputError","updated","Script returned successfully, but the output was missing the {0} parameter: {1}","O script executou com sucesso, mas na saída está faltando o parâmetro {0}: {1}"
"Library\Snapshots\Strings\Shared.pt-BR.resx","InvalidEnumPathError","updated","Unable to match local path {0} with a snapshot","Não foi possível coincidir o caminho local {0} com o snapshot"
"Library\Snapshots\Strings\USNHelper.pt-BR.resx","EmptyResponseError","updated","Unexpected empty response while enumerating","Resposta inesperada ao enumerar"
"Library\Snapshots\Strings\USNHelper.pt-BR.resx","LinuxNotSupportedError","updated","USN is not supported on Linux","USN não é suportado no Linux"
"Library\Snapshots\Strings\USNHelper.pt-BR.resx","SafeGuardError","not-updated","The number of files returned by USN was zero. This is likely an error. To remedy this, USN has been disabled.",""
"Library\Snapshots\Strings\USNHelper.pt-BR.resx","SafeGuardError","updated","The number of files returned by USN was zero. This is likely an error. To remedy this, USN has been disabled.","O número de arquivos retornados pelo USN foi zero. Isto pode ser um erro. Para corrigir isso, o USN foi desativado."
"Library\Snapshots\Strings\WinNativeMethod.pt-BR.resx","MissingBackupPrivilegeError","updated","Calling process does not have the backup privilege","O processo em execução não tem o privilégio do backup"
"Library\Utility\Strings\FilenameFilter.pt-BR.resx","FilterContainsPathSeparator","updated","Filter contains: {0}","Filtro contém: {0}"
"Library\Utility\Strings\Sizeparser.pt-BR.resx","InvalidSizeValueError","updated","Invalid size value: {0}","Valor de tamanho inválido: {0}"
@@ -1785,7 +1771,6 @@ Utilize a opção --accept-specified-ssl-hash={1} para aceitar o certificado"
"Winforms\Controls\PasswordConfirmationDialog.pt-BR.resx","OKBtn.Text","missing","OK",""
"Winforms\Controls\PasswordControl.pt-BR.resx","ShowPassword.ToolTip","updated","Show or hide the password","Mostrar ou exibir a senha"
"Winforms\Controls\PasswordControl.pt-BR.resx","TextBox.Text","updated","password","senha"
"Winforms\Controls\Properties\Resources.pt-BR.resx","ldots","unused","","../Resources/ldots.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"Winforms\Controls\Strings\PasswordConfirmationDialog.pt-BR.resx","PasswordDoNotMatchError","updated","The password that you have entered does not match the previously entered password","A senha utilizada não é a mesma utilizada anteriormente"
"Winforms\Controls\Strings\PasswordControl.pt-BR.resx","ConfirmClearingPassword","updated","You cannot read this password, but you may reset the password and enter a new one.
1 CommandLine\Decrypter\Strings\Program.pt-BR.resx ProgramUsage updated Usage: Duplicati.CommandLine.Decrypter.exe <passphrase> <inputfile> <outputfile> Uso: Duplicati.CommandLine.Decrypter.exe <senha> <arquivo-entrada> <arquivo-saida>
152 GUI\HelperControls\FolderPathEntry.pt-BR.resx SizeLabel.Text missing (...)
153 GUI\HelperControls\FolderPathEntry.pt-BR.resx SizeLabel.ToolTip updated The size of the selected folder O tamanho da pasta selecionada
154 GUI\HelperControls\Strings\BackupFileList.pt-BR.resx RootNodeTooltip updated Source folder {0} Target folder: {1} Right click to change target folder Pasta de origem: {0} Pasta de destino: {1} Clique com o botão direito para alterar a pasta de destino
155 GUI\HelperControls\Strings\BackupItems.pt-BR.resx ErrorStatusDisplay updated Error: {0} Erro: {0}
156 GUI\HelperControls\Strings\BackupItems.pt-BR.resx NoDataReceived updated No data received Nenhuma informação recebida
157 GUI\HelperControls\Strings\BackupItems.pt-BR.resx OperationCancelled updated Cancelled Cancelado
158 GUI\HelperControls\Strings\BackupItems.pt-BR.resx TooltipFullBackup updated Full backup Backup completo
159 GUI\HelperControls\Strings\BackupItems.pt-BR.resx TooltipFullBackupWithSize updated Full backup - {0} Backup completo - {0}
160 GUI\HelperControls\Strings\BackupItems.pt-BR.resx TooltipIncrementalBackup updated Incremental backup Backup incremental
161 GUI\HelperControls\Strings\BackupItems.pt-BR.resx TooltipIncrementalBackupWithSize updated Incremental backup - {0}, chain: {1} Backup incremental - {0}, chain: {1}
162 GUI\HelperControls\Strings\BackupTreeView.pt-BR.resx ConfirmDeleteFolder updated Do you want to delete the folder {0} and all the backups contained in it? Deseja apagar a pasta {0} e todos os backups contidos nela?
163 GUI\HelperControls\Strings\BackupTreeView.pt-BR.resx ConfirmRemoveBackup updated Remove the backup '{0}' ? Remover o backup '{0}' ?
164 GUI\HelperControls\Strings\BackupTreeView.pt-BR.resx NewBackup updated New Backup Novo backup
165 GUI\HelperControls\Strings\BackupTreeView.pt-BR.resx NewFolder updated New Folder Nova pasta
166 GUI\HelperControls\Strings\CommandLineOptionsGrid.pt-BR.resx InfoLabelFormat not-updated Value type: {0}. {1}. {2}
167 GUI\HelperControls\Strings\CommandLineOptionsGrid.pt-BR.resx PageNotSupportedWarning updated This page is not supported on the current platform, this is a known issue. A newer version of Mono will enable this page. Esta página não é suportada pela plataforma atual, esta é uma ocorrência conhecida. Uma nova versão do Mono irá ativar esta página.
168 GUI\HelperControls\Strings\DurationEditor.pt-BR.resx CustomDuration updated Custom ... Personalizado ...
169 GUI\HelperControls\Strings\FilterDialog.pt-BR.resx InvalidRegExpMessage updated The expression is not a valid regular expression: {0} A expressão informada não é uma expressão regular válida: {0}
170 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx ExcludeFolderBrowseTitle updated Choose the folder to add for exclusion Selecione a pasta para adicionar à exclusão
171 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FileIsExcluded updated The file {0} is excluded due to rule {1} O arquivo {0} foi excluído pela regra {1}
172 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FileIsIncluded updated The file {0} is included due to rule {1} O arquivo {0} foi incluido pela regra {1}
173 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FileIsIncludedDefault updated The file {0} is included because no rule matched O arquivo {0} foi incluido pois não casa com nenhuma regra
174 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FilenameIsNotInAnyRootFolder updated The filename {0} is not located in any of the source folders O arquivo {0} não foi encontrado em nenhuma das pastas de origem
175 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FilepathIsNotAbsoluteError updated The filename {0} is not an absolute path O arquivo {0} não é um caminho completo
176 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FolderIsExcluded updated The folder {0} is excluded due to rule {1} A pasta {0} foi excluída pela regra {1}
177 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx FolderIsRootFolder updated The folder {0} is included because it is a source folder A pasta {0} foi incluida pois é a pasta de origem
178 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx IncludeFolderBrowseTitle updated Choose the folder to add for inclusion Selecione a pasta para adicionar à inclusão
179 GUI\HelperControls\Strings\FilterEditor.pt-BR.resx InvalidCharsInFilenameError updated The filename {0} has invalid characters O arquivo {0} contém caracteres invalidos
180 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx BytesName not-updated bytes
181 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx BytesPerSecond not-updated bytes/s
182 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx GBName not-updated gb GB
183 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx GBPerSecond not-updated gb/s GB/s
184 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx KBName not-updated kb kB
185 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx KBPerSecond not-updated kb/s kB/s
186 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx MBName not-updated mb MB
187 GUI\HelperControls\Strings\SizeSelector.pt-BR.resx MBPerSecond not-updated mb/s MB/s
188 GUI\HelperControls\Strings\TestSearchSelection.pt-BR.resx FileName updated File Name '{0}' Arquivo '{0}'
189 GUI\HelperControls\Strings\TestSearchSelection.pt-BR.resx FileType updated File Type '{0}' Arquivo Tipo '{0}'
191 GUI\HelperControls\Strings\WaitForOperation.pt-BR.resx ReallyAbortQuestion updated Are you sure you want to abort the operation? Tem certeza que deseja abortar a operação?
192 GUI\HelperControls\Strings\WaitForOperation.pt-BR.resx UserCancelled updated The user cancelled the operation O usuário cancelou a operação
193 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriority.Items $this.Text updated missing High (Not recommended) Test Search Selection Alto (Não recomendado)
194 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriority.Items1 btnCancel.Text updated missing Above normal Cancel Acima do normal
195 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriority.Items2 btnOK.Text missing Normal OK
196 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriority.Items3 chFile.Text updated missing Below normal Filename Abaixo do normal
197 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriority.Items4 chFileExt.Text updated missing Low Ext Baixo
198 GUI\HelperControls\ThreadPriorityPicker.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx ThreadPriorityEnabled.Text chPath.Text updated missing Set thread priority Path Difinir prioridade
199 GUI\HelperControls\WaitForOperation.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx $this.Text chSize.Text updated missing WaitForOperation Size Aguardando execução
202 GUI\ListBackupFiles.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx groupBox1.Text label3.Text updated missing Loading file list, please wait ... Files to be included: Carregando lista de arquivos, aguarde ...
203 GUI\LogViewer.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx $this.Text lbLoading.Text updated missing Log data Scanning files, please wait.... Informações de log
204 GUI\MainForm.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx $this.Text miExclude.Text updated missing Duplicati Control Window Exclude Janela de Controle
205 GUI\MainForm.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx controlToolStripMenuItem.Text miExcludeFileExt.Text updated missing Control Add file extension filter Controle
206 GUI\MainForm.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx DelayDuration05Menu.Text miExcludeFileName.Text updated missing 5 minutes Add filename filter 5 minutos
207 GUI\MainForm.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx DelayDuration15Menu.Text miExcludeFilePath.Text updated missing 15 minutes File Path 15 minutos
208 GUI\MainForm.pt-BR.resx GUI\HelperControls\TestSearchSelection.pt-BR.resx DelayDuration30Menu.Text miInclude.Text updated missing 30 minutes Include 30 minutos
290 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx PauseDuration60Menu.Text FiveMinutes updated 1 hour 5 minutes 1 hora 5 minutos
291 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx pausePeriodMenuItem.Text GenericError updated Pause period An error occured: {0} Período da pausa Ocorreu um erro: {0}
292 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx quickLabel.Text InvalidDuration updated Quick actions The full backup duration entered is not valid: {0} Ações rápidas A duração do backup completo informada não é valida: {0}
293 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx runBackupNowToolStripMenuItem.Text MenuPause updated Run backup now Pause Executar backup agora Pausar
294 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx runBackupNowToolStripMenuItem1.Text MenuResume updated Run backup now Resume Executar backup agora Continuar
295 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx stopBackupToolStripMenuItem.Text NoMinutes updated Stop backup None Parar backup Nenhum
296 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx viewFilesToolStripMenuItem.Text OneDay updated View contents ... One day Ver conteúdo ... Um dia
297 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx viewLogToolStripMenuItem.Text OneMinute updated View log ... 1 minute Ver log ... 1 minuto
298 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx wizardHelpLabel.Text OneMonth updated (Create, edit, delete, run, restore backups) One month (Criar, editar, apagar, executar, restaurar backups) Um mês
299 GUI\ServiceStatus.pt-BR.resx GUI\Strings\Common.pt-BR.resx wizardLink.Text OneWeek updated Duplicati Wizard One week Assistente Duplicati Uma semana
300 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\Common.pt-BR.resx BalloonNotification_Continous SixtyMinutes updated While backup is running (and on errors/warnings) 1 hour Enquanto o backup estiver rodando (e em erros/alertas) 1 hora
301 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\Common.pt-BR.resx BalloonNotification_Errors ThirtyMinutes updated On backup errors 30 minutes Em erros de backup 30 minutos
302 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\Common.pt-BR.resx BalloonNotification_Off ThreadPriorityAboveNormal updated No balloon notifications Above normal Desativar notificações Acima do normal
303 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\Common.pt-BR.resx BalloonNotification_Start ThreadPriorityBelowNormal updated On backup start (and errors/warnings) Below normal No inicio do backup (e erros/alertas) Abaixo do normal
304 GUI\Strings\Common.pt-BR.resx ThreadPriorityHighest updated Highest A maior
305 GUI\Strings\Common.pt-BR.resx ThreadPriorityNormal not-updated Normal
306 GUI\Strings\Common.pt-BR.resx ThreadPriortyLowest updated Lowest A menor
307 GUI\Strings\Common.pt-BR.resx ThreeMonths updated Three months Três meses
308 GUI\Strings\Common.pt-BR.resx TwoWeeks updated Two weeks Duas semanas
309 GUI\Strings\DatabaseUpgrader.pt-BR.resx BackupFilenamePrefix not-updated backup
310 GUI\Strings\DatabaseUpgrader.pt-BR.resx DatabaseFormatError updated Unable to determine database format: {0} Não foi possível determinar o formato do banco de dados: {0}
311 GUI\Strings\DatabaseUpgrader.pt-BR.resx InvalidVersionError updated The database has version {0} but the largest supported version is {1}. This is likely caused by upgrading to a newer version and then downgrading. If this is the case, there is likely a backup file of the previous database version in the folder {2}. O banco de dados possui a versão {0} mas a versão suportada é {1}. Isto é causado por atualizar para uma nova versão e voltar para uma versão antiga. Se este é o caso, provavelmente existe um arquivo de backup da versão anterior do banco de dados em {2}.
312 GUI\Strings\DatabaseUpgrader.pt-BR.resx TableLayoutError updated Unknown table layout detected Layout de tabela desconhecido
313 GUI\Strings\DatabaseUpgrader.pt-BR.resx UpgradeFailure updated Failed to execute SQL: {0} Error: {1} Database is NOT upgraded. Falha na execução do comando SQL: {0} Erro: {1} O banco de dados NÃO foi atualizadoDatabase.
314 GUI\Strings\DuplicatiRunner.pt-BR.resx ApplicationExitLogMesssage updated The backup was stopped because the application was closed O backup foi encerrado pois a aplicação foi fechada
315 GUI\Strings\DuplicatiRunner.pt-BR.resx CleaningUpMessage updated Removing old backups ... Removendo backups antigos ...
316 GUI\Strings\DuplicatiRunner.pt-BR.resx CleanupError updated Failed during cleanup: {0} Falha ao efetuar a limpeza: {0}
317 GUI\Strings\DuplicatiRunner.pt-BR.resx CleanupLogdataHeader updated Cleanup output: Saida da limpeza:
318 GUI\Strings\DuplicatiRunner.pt-BR.resx ErrorMessage updated Error: {0} Erro: {0}
319 GUI\Strings\DuplicatiRunner.pt-BR.resx OtherAbortMessage updated The backup was stopped, the reason was: {0} O backup foi cancelado, motivo: {0}
320 GUI\Strings\DuplicatiRunner.pt-BR.resx ShutdownWhileBackupInprogress updated Duplicati was terminated before the backup completed, status is unknown Duplicati foi encerrado antes da execução completa do backup, o seu estado é desconhecido
321 GUI\Strings\DuplicatiRunner.pt-BR.resx TaskManagerCloseMessage updated The backup was stopped because the application was closed by the task manager O backup foi encerrado pois a aplicação foi encerrada no gerenciador de tarefas
322 GUI\Strings\DuplicatiRunner.pt-BR.resx UserClosingMessage updated The backup was stopped by the user O backup foi encerrado pelo usuário
323 GUI\Strings\DuplicatiRunner.pt-BR.resx WindowsShutdownMessage updated The backup was stopped because the machine was being shut down O backup foi encerrado pois o computador está sendo desligado
324 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\DynamicSetupHelper.pt-BR.resx BalloonNotification_StartAndStop NoFoldersInSetupError updated On backup start and stop (and errors/warnings) No folders are included in the backup No inicio e final do backup (e erros/alertas) Nenhuma pasta foi incluida no backup
325 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\ListBackupFiles.pt-BR.resx BalloonNotification_Warnings NoDataError updated On backup errors and warnings No data returned Em erros e alertas Nenhum dado recebido
326 GUI\Strings\ApplicationSetup.pt-BR.resx GUI\Strings\ListBackupFiles.pt-BR.resx CacheSize TooltipAddedFile updated Cache size: {0} Added file Tamanho do cache: {0} Arquivo adicionado
347 GUI\Strings\Common.pt-BR.resx GUI\Strings\MainForm.pt-BR.resx OneMonth TrayStatusReady updated One month Duplicati is ready Um mês Duplicati está pronto
348 GUI\Strings\Common.pt-BR.resx GUI\Strings\MainForm.pt-BR.resx OneWeek TrayStatusRunning updated One week Duplicati is running {0} Uma semana Duplicati está em execução {0}
349 GUI\Strings\Common.pt-BR.resx GUI\Strings\Program.pt-BR.resx SixtyMinutes AnotherInstanceDetected updated 1 hour Another instance is running, and was notified 1 hora Outra instância está executando e foi notificada
GUI\Strings\Common.pt-BR.resx ThirtyMinutes updated 30 minutes 30 minutos
GUI\Strings\Common.pt-BR.resx ThreadPriorityAboveNormal updated Above normal Acima do normal
GUI\Strings\Common.pt-BR.resx ThreadPriorityBelowNormal updated Below normal Abaixo do normal
GUI\Strings\Common.pt-BR.resx ThreadPriorityHighest updated Highest A maior
GUI\Strings\Common.pt-BR.resx ThreadPriorityNormal not-updated Normal
GUI\Strings\Common.pt-BR.resx ThreadPriortyLowest updated Lowest A menor
GUI\Strings\Common.pt-BR.resx ThreeMonths updated Three months Três meses
GUI\Strings\Common.pt-BR.resx TwoWeeks updated Two weeks Duas semanas
GUI\Strings\DatabaseUpgrader.pt-BR.resx BackupFilenamePrefix not-updated backup
GUI\Strings\DatabaseUpgrader.pt-BR.resx DatabaseFormatError updated Unable to determine database format: {0} Não foi possível determinar o formato do banco de dados: {0}
GUI\Strings\DatabaseUpgrader.pt-BR.resx InvalidVersionError updated The database has version {0} but the largest supported version is {1}. This is likely caused by upgrading to a newer version and then downgrading. If this is the case, there is likely a backup file of the previous database version in the folder {2}. O banco de dados possui a versão {0} mas a versão suportada é {1}. Isto é causado por atualizar para uma nova versão e voltar para uma versão antiga. Se este é o caso, provavelmente existe um arquivo de backup da versão anterior do banco de dados em {2}.
GUI\Strings\DatabaseUpgrader.pt-BR.resx TableLayoutError updated Unknown table layout detected Layout de tabela desconhecido
GUI\Strings\DatabaseUpgrader.pt-BR.resx UpgradeFailure updated Failed to execute SQL: {0} Error: {1} Database is NOT upgraded. Falha na execução do comando SQL: {0} Erro: {1} O banco de dados NÃO foi atualizadoDatabase.
GUI\Strings\DuplicatiRunner.pt-BR.resx ApplicationExitLogMesssage updated The backup was stopped because the application was closed O backup foi encerrado pois a aplicação foi fechada
GUI\Strings\DuplicatiRunner.pt-BR.resx CleaningUpMessage updated Removing old backups ... Removendo backups antigos ...
GUI\Strings\DuplicatiRunner.pt-BR.resx CleanupError updated Failed during cleanup: {0} Falha ao efetuar a limpeza: {0}
GUI\Strings\DuplicatiRunner.pt-BR.resx CleanupLogdataHeader updated Cleanup output: Saida da limpeza:
GUI\Strings\DuplicatiRunner.pt-BR.resx ErrorMessage updated Error: {0} Erro: {0}
GUI\Strings\DuplicatiRunner.pt-BR.resx OtherAbortMessage updated The backup was stopped, the reason was: {0} O backup foi cancelado, motivo: {0}
GUI\Strings\DuplicatiRunner.pt-BR.resx ShutdownWhileBackupInprogress updated Duplicati was terminated before the backup completed, status is unknown Duplicati foi encerrado antes da execução completa do backup, o seu estado é desconhecido
GUI\Strings\DuplicatiRunner.pt-BR.resx TaskManagerCloseMessage updated The backup was stopped because the application was closed by the task manager O backup foi encerrado pois a aplicação foi encerrada no gerenciador de tarefas
GUI\Strings\DuplicatiRunner.pt-BR.resx UserClosingMessage updated The backup was stopped by the user O backup foi encerrado pelo usuário
GUI\Strings\DuplicatiRunner.pt-BR.resx WindowsShutdownMessage updated The backup was stopped because the machine was being shut down O backup foi encerrado pois o computador está sendo desligado
GUI\Strings\DynamicSetupHelper.pt-BR.resx NoFoldersInSetupError updated No folders are included in the backup Nenhuma pasta foi incluida no backup
GUI\Strings\ListBackupFiles.pt-BR.resx NoDataError updated No data returned Nenhum dado recebido
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipAddedFile updated Added file Arquivo adicionado
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipAddedFolder updated Added folder Pasta adicionada
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipAddedOrModifiedFile updated Added or modified file Arquivo adicionado ou modificado
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipControlFile updated Control file Arquivo de controle
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipDeletedFile updated Deleted file Arquivo removido
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipDeletedFolder updated Deleted folder Pasta removida
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipExistingFolder updated Existing folder Pasta existente
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipIncompleteFile updated Incomplete file Arquivo incompleto
GUI\Strings\ListBackupFiles.pt-BR.resx TooltipModifiedFile updated Modified file Arquivo modificado
GUI\Strings\MainForm.pt-BR.resx BalloonTip_Error updated Failed to run backup {0}: {1} Falha ao executar backup {0}: {1}
GUI\Strings\MainForm.pt-BR.resx BalloonTip_Running not-updated {0}
GUI\Strings\MainForm.pt-BR.resx BalloonTip_Started updated Running {0} Executando {0}
GUI\Strings\MainForm.pt-BR.resx BalloonTip_Stopped updated Finished {0} Encerrado {0}
GUI\Strings\MainForm.pt-BR.resx BalloonTip_Warning updated Backup {0} gave a warning O backup {0} retornou um alerta
GUI\Strings\MainForm.pt-BR.resx ExitWhileBackupIsRunningQuestion updated A backup is currently running, do you want to stop the backup so Duplicati can exit? Existe um backup em execução, você quer parar o backup para que o Duplicati possa ser encerrado?
GUI\Strings\MainForm.pt-BR.resx MultipleNamedBackupsFound updated The backup named "{0}" was found {1} times O backup "{0}" foi encontrado {1} vez(es)
GUI\Strings\MainForm.pt-BR.resx NamedBackupGroupNotFound updated The backup group named "{0}" was not found O grupo de backup "{0}" não foi encontrado
GUI\Strings\MainForm.pt-BR.resx NamedBackupNotFound updated The backup named "{0}" was not found O backup "{0}" não foi encontrado
GUI\Strings\MainForm.pt-BR.resx PauseOperationFailed updated Failed to execute the Pause request: {0} Falha ao executar a requisição de parada: {0}
GUI\Strings\MainForm.pt-BR.resx TerminateForExitQuestion updated Duplicati is attempting to quit, but a backup is running. Do you want Duplicati to continue waiting for the backup to stop? Duplicati está tentando finalizar, mas existe um backup em andamento. Você quer continuar esperando o termino do backup?
GUI\Strings\MainForm.pt-BR.resx TrayStatusPause updated Duplicati is currently paused Duplicati está pausado
GUI\Strings\MainForm.pt-BR.resx TrayStatusReady updated Duplicati is ready Duplicati está pronto
GUI\Strings\MainForm.pt-BR.resx TrayStatusRunning updated Duplicati is running {0} Duplicati está em execução {0}
GUI\Strings\Program.pt-BR.resx AnotherInstanceDetected updated Another instance is running, and was notified Outra instância está executando e foi notificada
350 GUI\Strings\Program.pt-BR.resx DatabaseOpenError updated Failed to create, open or upgrade the database. Error message: {0} Falha ao criar, abrir ou executar o banco de dados. Mensagem de erro: {0}
351 GUI\Strings\Program.pt-BR.resx FullCommandDescription updated Forces the --run-backup command to perform a full backup Força o comando --run-backup a executar um backup completo
352 GUI\Strings\Program.pt-BR.resx HelpCommandDescription updated Displays this help Exibir esta ajuda
379 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionPause10 updated Pause for 10 minutes Parar por 10 minutos
380 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionPause15 updated Pause for 15 minutes Parar por 15 minutos
381 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionPause30 updated Pause for 30 minutes Parar por 30 minutos
382 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionPause5 updated Pause for 5 minutes Parar por 5 minutos
383 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionPause60 updated Pause for 60 minutes Parar por 60 minutos
384 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionResume updated Resume Continuar
385 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionStop updated Stop the current backup Parar o backup atual
386 GUI\Strings\ServiceStatus.pt-BR.resx QuickActionThrottle updated Throttle options ... Opções de banda...
387 GUI\Strings\ServiceStatus.pt-BR.resx SelectQuickAction updated - Select action - - Selecionar ação -
388 GUI\Strings\ServiceStatus.pt-BR.resx StatusBackup not-updated Backup: {0}
389 GUI\Strings\ServiceStatus.pt-BR.resx StatusPaused updated Duplicati is currently paused Duplicati está pausado
390 GUI\Strings\ServiceStatus.pt-BR.resx StatusRestore updated Restore: {0} Restauração: {0}
391 GUI\Strings\ServiceStatus.pt-BR.resx StatusWaiting updated Waiting for next backup Aguardando próximo backup
392 GUI\Strings\ServiceStatus.pt-BR.resx SwitchToAdvanced updated Advanced >>> Avançado >>>
393 GUI\Strings\ServiceStatus.pt-BR.resx SwitchToSimple updated Simple <<< Simples <<<
394 GUI\Strings\TaskType.pt-BR.resx FullBackup updated Full backup Backup completo
395 GUI\Strings\TaskType.pt-BR.resx IncrementalBackup updated Incremental backup Backup incremental
396 GUI\Strings\TaskType.pt-BR.resx ListActualFiles updated List actual files Listar arquivos atuais
397 GUI\Strings\TaskType.pt-BR.resx ListBackupEntries updated List backup entries Listar entradas de backup
425 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx EnablePassword.Text updated Protect the backups with this password Proteger backup com esta senha
426 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx EncryptionModule.ToolTip updated Choose the encryption method Selecione o método de criptografia
427 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx EncryptionModuleLabel.Text updated Encryption method Método de criptografia
428 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx GeneratePasswordButton.ToolTip updated Click here to generate a random password Clique aqui para gerar uma senha aleatória
429 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx PasswordHelptext.Text updated It is highly recommended that you use a strong password, as that will ensure that no-one but you can retrieve the files. Be sure to write down the password, as the backups will be useless without it. É altamente recomendado utilizar uma senha forte, garantindo que ninguém a não ser você possa recuperar os arquivos. Anote esta senha em um local seguro pois os backups serão inúteis sem ela.
430 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx UseSettingsAsDefault.Text updated Use these settings on new backups Usar estas opções para novos backups
431 GUI\Wizard pages\Add backup\PasswordSettings.pt-BR.resx UseSettingsAsDefault.ToolTip updated If this box is checked, Duplicati will apply the chosen encryption settings to all new backups Se esta caixa for marcada, Duplicati irá aplicar a criptografia selecionada a todos novos backups
939 Library\Compression\Strings\FileArchiveZip.pt-BR.resx Library\Backend\WEBDAV\WebDAVUI.pt-BR.resx AttemptReadWhileWritingError label4.Text updated Cannot read data while writing Password Não é possível ler e escrever dados ao mesmo tempo Senha
940 Library\Compression\Strings\FileArchiveZip.pt-BR.resx Library\Backend\WEBDAV\WebDAVUI.pt-BR.resx AttemptWriteWhileReadingError label5.Text updated Cannot write while reading Port (optional) Não é possível escrever e ler dados ao mesmo tempo Porta (opcional)
941 Library\Compression\Strings\FileArchiveZip.pt-BR.resx Library\Backend\WEBDAV\WebDAVUI.pt-BR.resx CompressionlevelLong TestConnection.Text updated This option controls the compression level used. A setting of zero gives no compression, and a setting of 9 gives maximum compression. Test connection Esta opção controla o nível de compressão utilizado. O valor zero represenat nenhuma compressão, e um valor de 9 significa compressão máxima. Testar conexão
942 Library\Backend\WEBDAV\WebDAVUI.pt-BR.resx UseIntegratedAuth.Text updated Use integrated authentication Utilizar autenticação integrada
943 Library\Compression\Strings\FileArchiveZip.pt-BR.resx Library\Backend\WEBDAV\WebDAVUI.pt-BR.resx CompressionlevelShort UseSSL.Text updated Sets the Zip compression level Use SSL Define o nível de compressão Zip Utilizar SSL
944 Library\Compression\Strings\FileArchiveZip.pt-BR.resx DeleteUnsupportedError AttemptReadWhileWritingError updated Zip does not support deleting Cannot read data while writing Zip não suporta apagar arquivos Não é possível ler e escrever dados ao mesmo tempo
945 Library\Compression\Strings\FileArchiveZip.pt-BR.resx Description AttemptWriteWhileReadingError updated This module provides the industry standard Zip compression. Files created with this module can be read by any standard compliant zip application. Cannot write while reading Este módulo provê compressão com o padrão Zip. Arquivos criados com este módulo podem ser lidos por qualquer aplicação aderente a este padrão Não é possível escrever e ler dados ao mesmo tempo
946 Library\Compression\Strings\FileArchiveZip.pt-BR.resx DisplayName CompressionlevelLong updated Zip compression This option controls the compression level used. A setting of zero gives no compression, and a setting of 9 gives maximum compression. Compressão ZIP Esta opção controla o nível de compressão utilizado. O valor zero represenat nenhuma compressão, e um valor de 9 significa compressão máxima.
947 Library\Compression\Strings\FileArchiveZip.pt-BR.resx CompressionlevelShort updated Sets the Zip compression level Define o nível de compressão Zip
948 Library\Compression\Strings\FileArchiveZip.pt-BR.resx DeleteUnsupportedError updated Zip does not support deleting Zip não suporta apagar arquivos
949 Library\Compression\Strings\FileArchiveZip.pt-BR.resx FileNotFoundError Description updated File not found: {0} This module provides the industry standard Zip compression. Files created with this module can be read by any standard compliant zip application. Arquivo não encontrado: {0} Este módulo provê compressão com o padrão Zip. Arquivos criados com este módulo podem ser lidos por qualquer aplicação aderente a este padrão
950 Library\DynamicLoader\Strings\BackendLoader.pt-BR.resx Library\Compression\Strings\FileArchiveZip.pt-BR.resx NoURLSuppliedError DisplayName updated This instance was not created with an URL Zip compression A instância não foi criada com a URL Compressão ZIP
951 Library\DynamicLoader\Strings\BackendLoader.pt-BR.resx Library\Compression\Strings\FileArchiveZip.pt-BR.resx UrlNotSupportedError FileNotFoundError updated The supplied url is not supported File not found: {0} A url informada não é suportada Arquivo não encontrado: {0}
959 Library\Encryption\Strings\AESEncryption.pt-BR.resx BadKeyStretchError AesencryptiondontallowfallbackLong_v2 updated Bad key stretch If the decryption fails using AES Crypt, dont attempt to use the previous encryption file format. Comprimento da chave ruim Se a decriptografia utilizando AES Crypt falhar, não tente utilizar o formato de criptografia anterior.
960 Library\Encryption\Strings\AESEncryption.pt-BR.resx Description_v2 AesencryptiondontallowfallbackShort updated This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption. Do not attempt to decrypt using previous method Este módulo criptografa todos os arquivos da mesma maneira que o AESCrypt faz, utilizando criptografia AES de 256 bits. Não tentar decriptografar usando o método anterior
961 Library\Encryption\Strings\AESEncryption.pt-BR.resx DisplayName BadKeyStretchError updated AES-256 encryption, built in Bad key stretch Criptografia AES-256, incorporada Comprimento da chave ruim
962 Library\Encryption\Strings\AESEncryption.pt-BR.resx Description_v2 updated This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption. Este módulo criptografa todos os arquivos da mesma maneira que o AESCrypt faz, utilizando criptografia AES de 256 bits.
963 Library\Encryption\Strings\AESEncryption.pt-BR.resx DisplayName updated AES-256 encryption, built-in Criptografia AES-256, incorporada
964 Library\Encryption\Strings\EncryptionBase.pt-BR.resx DecryptionError updated Failed to decrypt data (invalid passphrase?): {0} Não foi possível descriptografar os dados (chave incorreta?): {0}
965 Library\Encryption\Strings\GPGCommonOptions.pt-BR.resx GpgAutodetectedInfo updated Leave empty to use the gpg application found: {0} Deixe em branco para utilizar a aplicação gpg encontrada: {0}
966 Library\Encryption\Strings\GPGCommonOptions.pt-BR.resx GpgNotAutodetectedWarning updated The gpg application could not be located, please enter the path manually A aplicação gpg não pode ser localizada, por favor insira o caminho manualmente
971 Library\Encryption\Strings\GPGEncryption.pt-BR.resx Description updated The GPG encryption module uses the GNU Privacy Guard program to encrypt and decrypt files. It requires that the gpg executable is available on the system. On Windows it is assumed that this is in the default installation folder under program files, under Linux and OSX it is assumed that the program is available via the PATH environment variable. It is possible to supply the path to GPG using the --gpg-program-path switch. O módulo de criptografia GPG utiliza o GNU Privacy Guard program para criptografar e decriptografar arquivos. Ele requer que o executável do gpg esteja disponível no sistema. No Windows assumimos que ele esteja instalado na pasta padrão em Arquivos de Programas, no Linux e OS X assumimos que ele esteja no caminho informado pela variável PATH. É possível informar o caminho para o GPG utilizando a opção --gpg-program-path.
972 Library\Encryption\Strings\GPGEncryption.pt-BR.resx DisplayName updated GNU Privacy Guard, external GNU Privacy Guard, externo
973 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptiondecryptionswitchesLong updated Use this switch to specify any extra options to GPG. You cannot specify the --passphrase-fd option here. The --decrypt option is always specified. Use esta opção para especificar qualquer opção GPG extra. Você não pode especificar a opção --passphrase-fd aqui. A opção --decrypt sempre é especificada.
974 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptiondecryptionswitchesShort updated Extra GPG commandline options for decryption Opções de decriptografia extras do GPG para linha de comando
975 Library\Encryption\Strings\GPGEncryption.pt-BR.resx Gpgencryptiondisablearmordeprecated updated This option has non-standard handling, please use the --{0} option instead. Esta opção tem tratamento não padrão, utilize a opção --{0} ao invés disso.
976 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptiondisablearmorLong updated The GPG encryption/decryption will use the --armor option for GPG to protect the files with armor. Specify this switch to remove the --armor option. A criptografia GPG utilizará a opção --armor para proteger os arquivos. Especifique esta chave para remover a opção --armor
977 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptiondisablearmorShort updated Don't use GPG Armor Não utilizar GPG Armor
978 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptionenablearmorLong updated Use this option to supply the --armor option to GPG. The files will be larger but can be sent as pure text files. A opção --armor será enviada ao GPG. Os arquivos serão maiores mas podem ser enviados como texto puro.
979 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptionenablearmorShort updated Use GPG Armor Utilizar GPG Armor
980 Library\Encryption\Strings\GPGEncryption.pt-BR.resx GpgencryptionencryptionswitchesLong updated Use this switch to specify any extra options to GPG. You cannot specify the --passphrase-fd option here. The --encrypt option is always specified. Use esta opção para especificar qualquer opção GPG extra. Você não pode especificar a opção --passphrase-fd aqui. A opção --encrypt sempre é especificada.
1022 Library\Main\Strings\BackendWrapper.pt-BR.resx BackendNotFoundError updated Unable to find backend for: {0} Não foi possível encontrar o protocolo: {0}
1023 Library\Main\Strings\BackendWrapper.pt-BR.resx CachedSignatureDecryptWarning updated Attempt to decrypt file {0} failed with error: {1} Tentativa de decriptografar o arquivo {0} falhou com o erro: {1}
1024 Library\Main\Strings\BackendWrapper.pt-BR.resx CachedSignatureHashMismatchWarning updated The cache file {0} did not match the expected hash for the same file, ignoring cache file O arquivo de cache {0} não coincide com o hash esperado para o mesmo arquivo, ignorando arquivo de cache
1025 Library\Main\Strings\BackendWrapper.pt-BR.resx CompletedDeleteTransaction updated Delete transaction completed successfully Apagar transações completadas com sucesso
1026 Library\Main\Strings\BackendWrapper.pt-BR.resx CompletingDeleteTransactionWarning updated Completing unfinished delete transaction and removing {0} files Completando transação não finalizada para remover {0} arquivos
1027 Library\Main\Strings\BackendWrapper.pt-BR.resx DeleteCacheFileError updated An error occured while attempting to delete cache file {0} Um erro ocorreu ao tentar apagar o arquivo de cache {0}
1028 Library\Main\Strings\BackendWrapper.pt-BR.resx DeleteTransactionFileFoundWarning updated A delete operation was started, but failed to complete. Next invocation of a cleanup or delete command will complete the transaction. A opção de apagar foi iniciada, mas falhou. A próxima tentativa de apagar ou efetuar uma limpeza irá completar a transação.
1071 Library\Main\Strings\Interface.pt-BR.resx DuplicateOptionNameWarning updated The option --{0} exists more than once, please report this to the developers A opção --{0} existe mais de uma vez, reporte isso aos desenvolvedores
1072 Library\Main\Strings\Interface.pt-BR.resx FailedToFindControlFilesMessage updated Failed to find control files in: {0} Não foi possível encontrar os arquivos de controle em: {0}
1073 Library\Main\Strings\Interface.pt-BR.resx FileHashFailure updated A hash check failed, this is an indication of a corrupt file: {0} Verificação do hash falhou, isto indica um arquivo corrompido: {0}
1074 Library\Main\Strings\Interface.pt-BR.resx FilenameMismatchError updated The manifest report that the file should be named {0} but it was named {1} O manifesto relatou que o nome do arquivo deveria ser {0} mas foi nomeado {1}
1075 Library\Main\Strings\Interface.pt-BR.resx FilesAreNotForceDeletedMessage updated Files are not deleted, use the --force command to actually remove files Os arquivos não são apagados, utilize o comando --force para apagar os arquivos
1076 Library\Main\Strings\Interface.pt-BR.resx FileSizeMismatchError updated The file {0} has size {1} but should have size {2} O arquivo {0} tem o tamanho de {1} mas deveria ter {2}
1077 Library\Main\Strings\Interface.pt-BR.resx InternalDeleteCountError FullBecauseBackendIsEmpty updated not-updated An internal error occured, and the operation was aborted to protect the backup sets A full backup is made because no existing backup chains were found on the destination Ocorreu um erro interno e a operação foi cancelada para proteger os backups
1078 Library\Main\Strings\Interface.pt-BR.resx ManifestAndFileCountMismatchError FullBecauseFlagWasSet updated not-updated The manifest file {0} indicates that there should be {1} volumes, but the file list indicates {2} A full backup was forced with the --{0} flag O arquivo de manifesto {0} indica que deveriam existir {1} volumes, mas a lista de arquivos indica {2}
1139 Library\Main\Strings\Manifestfile.pt-BR.resx Library\Main\Strings\Interface.pt-BR.resx MainfestIsMissingSelfHash UnsupportedSizeValue updated Manifest did not contain a self hash as expected The value "{1}" supplied to --{0} does not represent a valid size O manifesto não contém o hash esperado O valor "{1}" fornecido para --{0} não é um tamanho válido
1140 Library\Main\Strings\Manifestfile.pt-BR.resx Library\Main\Strings\Interface.pt-BR.resx ManifestValidationError UnsupportedTimeValue updated Failed to validate manifest: {0} The value "{1}" supplied to --{0} does not represent a valid time Falha ao validar o manifesto: {0} O valor "{1}" fornecido para --{0} não é uma hora válida
1141 Library\Main\Strings\Manifestfile.pt-BR.resx MissingPreviousManifestFilename EofInManifestFile updated Manifest has no previous manifest filename Got EOF while attempting to locate the self-hash of a manifest O manifesto não possui nome anterior Recebido EOF ao tentar localizar o hash do manifesto
1142 Library\Main\Strings\Manifestfile.pt-BR.resx MissingPreviousManifestHash HashGenerationFailure updated Manifest has no previous manifest hash The hash generation for the manifest file resulted in the hash value {0} but should have been {1} O manifesto não possui hash anterior A geração do hash para o manifesto resultou no hash {0} mas deveria ser {1}
1143 Library\Main\Strings\Manifestfile.pt-BR.resx NoFilesError InternalError updated Invalid manifest, there were no files in the manifest An internal error occured when creating the manifest, please report this to the developers Manifesto inválido, não existem arquivos no manifesto Ocorreu um erro interno ao criar o manifesto, por favor reporte isto para os desenvolvedores
1144 Library\Main\Strings\Manifestfile.pt-BR.resx SelfhashMismatch InvalidManifestError updated Manifest file had selfhash {0} but the hash of the file is {1} The manifest file did not have the expected root Xml element: {0} Manifesto possui hash {0} mas o hash do arquivo é {1} O arquivo de manifesto não possui o elemento raiz xml esperado: {0}
1145 Library\Main\Strings\Manifestfile.pt-BR.resx UnsupportedHashAlgorithmError InvalidSourcePathError updated The manifest uses the hash algorithm {0}, which is unsupported The number of source paths in the manifest file are wrong O manifesto utiliza o algoritmo hash {0}, que não é suportado O número de pastas de origem no arquivo de manifesto está incorreto
1176 Library\Main\Strings\Options.pt-BR.resx DisablemoduleLong CreateverificationfileLong updated Supply one or more module names, separated by commas to unload them If the backup is encrypted, the remote backend cannot verify the backup contents without the password. If this option is activated, Duplicati stores an unencrypted file on the backend. The file is never read by Duplicati, but allows the remote server to verify the backup integrity without requiring a password. The file contains no sensitive information, only a list of files that are expected to exist on the backend and their respective hashes. This option only has an effect when creating a backup and when verifying a backup set. Forneça o nome de um ou mais módulos, separados por vírgulas para descarregá-los Se o backup estiver criptografado, o armazenamento remoto não pode verificar o conteúdo sem a senha. Se esta opção estiver ativada, o Duplicati irá armazenar um arquivo sem criptografia no servidor. Este arquivo nunca será lido pelo Duplicati, mas permite que o servidor verifique a integridade do backup sem solicitar uma senha. O arquivo não contém dados sensíveis, somente uma lista de arquivos que se espera no armazenamento e seus hashes. Esta opção somente é útil na criação e verificação de backups.
1177 Library\Main\Strings\Options.pt-BR.resx DisablemoduleShort CreateverificationfileShort updated Disabled one or more modules Create verification file on server Destativar um ou mais módulos Criar arquivo de verificação no servidor
1178 Library\Main\Strings\Options.pt-BR.resx DisableStreamingLong DebugoutputLong not-updated updated Enabling this option will disallow usage of the streaming interface, which means that transfer progress bars will not show, and bandwidth throttle settings will be ignored. Activating this option will make some error messages more verbose, which may help you track down a particular issue Ativando esta opção aumentará a quantidade de detalhes das mensagens de erro, ajudando na identificação de problemas
1179 Library\Main\Strings\Options.pt-BR.resx DisableStreamingShort DebugoutputShort updated Disables use of the streaming transfer method Enables debugging output Desativa o uso do método de tranferência por stream Ativar saída de depuração
1180 Library\Main\Strings\Options.pt-BR.resx DisabletimetoleranceLong DebugretryerrorsLong not-updated When deciding if a full backup should be made or an old backup should be deleted, Duplicati will adjust the times by a small fraction to ensure that minor time differences do not interfer with expected operation. If the backup is set to produce a full backup each day, and a full backup is made at, say 12:00:01, and the backup is executed again at 12:00:00, a full day has not passed and thus an incremental backup is performed. To avoid this, Duplicati inserts a 1% tolerance (max 1 hour). Use this option to disable the tolerance, and use strict time checking When an error occurs, Duplicati will silently retry, and only report the number of retries. Enable this option to have the error messages displayed when a retry is performed.
1181 Library\Main\Strings\Options.pt-BR.resx DisabletimetoleranceShort DebugretryerrorsShort updated Deactivates tolerance when comparing times Show error messages when a retry is performed Deaktivates tolerance when comparing times Exibir mensagens de erro quando for feita uma nova tentativa
1182 Library\Main\Strings\Options.pt-BR.resx DisableusndiffcheckLong DisableautocreatefolderLong not-updated If USN is enabled the USN numbers are used to find all changed files since last backup. Use this option to disable the use of USN numbers, which will make Duplicati investigate all source files. This option is primarily intended for testing and should not be disabled in a production environment. If USN is not enabled, this option has no effect. If Duplicati detects that the target folder is missing, it will create it automatically. Activate this option to prevent automatic folder creation.
1274 Library\Main\Strings\Options.pt-BR.resx VolsizeLong TimeseparatorLong updated This option can change the default volume size. Changing the size can be usefull if the backend has a limit on the size of each individual file Per default, Duplicati will use the colon ":" character to separate the time fields in the filename. However, on some filesystem, notably windows, this character is not allowed. Use this option to use another character. Esta opção pode alterar o tamnaho padrão dos volumes criados. A alteração do tamanho pode ser útil nos casos onde o protocolo possui uma limitação de tamanho para cada arquivo individualmente Por padrão, o Duplicati irá utilizar o caracter de dois pontos ":" para separar os campos de hora no nome do arquivo. Entretanto, em alguns sistemas de arquivo, principalmente windows, este caractere não é permitido. Utilize esta opção para definir outro caracter.
1275 Library\Main\Strings\Options.pt-BR.resx VolsizeShort TimeseparatorShort updated A size string that limits the size of the volumes Backup volume filename timeseparator O tamanho limite em bytes dos arquivos de volume Separador de data utilizado no nome dos volumes
1276 Library\Main\Strings\Options.pt-BR.resx VssexcludewritersLong TotalsizeLong not-updated updated Use this option to exclude faulty writers from a snapshot. This is equivalent to the -wx flag of the vshadow.exe tool, except that it only accepts writer class GUIDs, and not component names or instance GUIDs. Multiple GUIDs must be separated with a semicolon, and most forms of GUIDs are allowed, including with and without curly braces. This option can place an upper limit on the total size of each backup. Note that if this flag is specified the backup may not contain all files, even for a full backup. As opção serve para definir um limite total para cada backup. Se esta opção ser selecionada, o backup pode não conter todos os arquivos, mesmo para um backup completo.
1277 Library\Main\Strings\Options.pt-BR.resx VssexcludewritersShort TotalsizeShort not-updated updated A semicolon separated list of guids of VSS writers to exclude (Windows only) The number of bytes generated by each backup run O número de bytes gerados por cada execução do backup
1278 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx CreateFolderError UploadUnchangedBackupsLong updated not-updated Failed to create folder: "{0}", Error message: {1} If no files have changed, Duplicati will not upload a backup set. If the backup data is used to verify that a backup was executed, this option will make Duplicati upload a backupset even if it is empty Falha ao criar a pasta: "{0}", Mensagem de erro: {1}
1279 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx DeletedFilenameError UploadUnchangedBackupsShort updated An error occured while determining file status, filename: {0}, folder name:{1} Upload empty backup files Ocorreu um erro ao determinar o estado arquivo, arquivo: {0}, nome da pasta: {1} Enviar arquivos de backup vazios
1280 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx DeleteFileError UsnpolicyLong updated not-updated Failed to delete file: "{0}", Error message: {1} This settings controls the usage of NTFS USN numbers, which allows Duplicati to obtain a list of files and folders much faster. If this is set to "off", Duplicati will not attempt to use USN. Setting this to "auto" makes Duplicati attempt to use USN, and fail silently if that was not allowed or supported. A setting of "on" will also make Duplicati attempt to use USN, but will produce a warning message in the log if it fails. Setting it to "required" will make Duplicati abort the backup if the USN usage fails. This feature is only supported on Windows and requires administrative privileges. Falha ao apagar arquivo: "{0}", Mensagem de erro: {1}
1281 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx DeleteFolderError UsnpolicyShort updated Failed to remove folder: "{0}", Error message: {1} Controls the use of NTFS Update Sequence Numbers Falha ao remover pasta: "{0}", Mensagem de erro: {1} Controla a utilização de USN NTFS
1282 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx FailedToSetFileWriteTime VerificationLevelLong updated not-updated Failed to set the write time for the file: {0}. Error message: {1} Use this option to change the level of verifiation done by the verify command. The setting "manifest" will only verify the manifest chain. The settings "signature" will also download and verify all signature files. The setting "full", will download all files, including content files, and verify that they are unchanged. Falha ao definir a hora de escrita do arquivo: {0} Mensagem de erro: {1}
1283 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx FailedToSetFolderWriteTime VerificationLevelShort updated Failed to set the write time for the folder: {0}. Error message: {1} Level of verification Falha ao definir a hora de escrita da pasta: {0} Mensagem de erro: {1} Nível de verificação
1284 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx FileChangedWhileReadError VolsizeLong updated The file {0} changed while being backed up, omitting file from backup set This option can change the default volume size. Changing the size can be usefull if the backend has a limit on the size of each individual file O arquivo {0} foi alterado enquanto estava sendo feito o backup, omitindo o arquivo do backup Esta opção pode alterar o tamnaho padrão dos volumes criados. A alteração do tamanho pode ser útil nos casos onde o protocolo possui uma limitação de tamanho para cada arquivo individualmente
1285 Library\Main\Strings\RSyncDir.pt-BR.resx Library\Main\Strings\Options.pt-BR.resx FileChangedWhileReadWarning VolsizeShort updated The file {0} changed while being backed up, this may result in a broken file A size string that limits the size of the volumes O arquivo {0} foi alterado enquanto estava sendo feito o backup, isto pode resultar em um arquivo corrompido O tamanho limite em bytes dos arquivos de volume
1325 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx EndofstreamInBlocksizeError DescriptionAcceptAnyCertificateLong updated not-updated End of stream occured while reading blocksize in signature file Use this option to accept any server certificate, regardless of what errors it may have. Please use --accept-specified-ssl-hash instead, whenever possible. Fim do fluxo ocorrido lendo o tamanho do bloco no arquivo de assinatura
1326 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx EndofstreamInStronglenError DescriptionAcceptAnyCertificateShort updated End of stream occured while reading stronglen in signature file Accept any server certificate Fim do fluxo ocorrido lendo comprimento da assinatura no arquivo de assinatura Aceitar todos certificados de servidor
1327 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx EndofstreamInStrongSignatureError DescriptionAcceptHashLong updated not-updated End of stream occured while reading strong signature from signature file If your server certificate is reported as invalid (eg. with self-signed certificates), you can supply the certificate hash to approve it anyway. The hash value must be entered in hex format without spaces. Fim do fluxo ocorrido lendo assinatura forte do arquivo de assinatura
1328 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx InvalidBlocksizeError DescriptionAcceptHashShort updated Blocklen in signature file was: {0}, which does not seem correct Optionally accept a known SSL certificate O tamanho do bloco no arquivo de assinatura era: {0}, o que não parece estar correto Opcionalmente aceitar um certificado SSL conhecido
1329 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx InvalidFilesizeError DisableExpect100Long updated not-updated The size of the signature file is invalid The default HTTP request has the header "Expect: 100-Continue" attached, which allows some optimizations when authenticating, but also breaks some web servers, causing them to report "417 - Expectation failed" O tamanho do arquivo de assinatura é inválido
1330 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx InvalidSignatureHeaderError DisableExpect100Short updated Signature stream did not have the correct start marker Disable the expect header Fluxo de assinatura não possui o marcador inicial correto Desativar o cabeçalho esperado
1331 Library\SharpRSync\Strings\ChecksumFile.pt-BR.resx Library\Modules\Builtin\Strings\HttpOptions.pt-BR.resx InvalidStrongsizeError DisableNagleLong updated Stronglen in signature file was: {0}, which does not seem correct By default the http requests use the RFC 896 nagling algorithm to support transfer of small packages more effeciently. Comprimento da assinatura no arquivo de assinatura era: {0}, o que não parece estar correto Por padrão a requisição http utiliza a RFC 896 para suportar a tranferência de pacotes pequenos de maneira eficiente
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1520
1521
1522
1523
1524
1525
1526
1527
1629
1630
1631
1632
1633
1634
1635
1687
1688
1689
1690
1691
1692
1693
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1771
1772
1773
1774
1775
1776
File diff suppressed because it is too large Load Diff
@@ -32,8 +32,8 @@
this.label1 = new System.Windows.Forms.Label();
this.Password = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
this.OKBtn = new System.Windows.Forms.Button();
this.CancelBtn = new System.Windows.Forms.Button();
this.OKBtn = new System.Windows.Forms.Button();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
@@ -55,13 +55,6 @@
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// OKBtn
//
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// CancelBtn
//
resources.ApplyResources(this.CancelBtn, "CancelBtn");
@@ -69,6 +62,13 @@
this.CancelBtn.Name = "CancelBtn";
this.CancelBtn.UseVisualStyleBackColor = true;
//
// OKBtn
//
resources.ApplyResources(this.OKBtn, "OKBtn");
this.OKBtn.Name = "OKBtn";
this.OKBtn.UseVisualStyleBackColor = true;
this.OKBtn.Click += new System.EventHandler(this.OKBtn_Click);
//
// PasswordConfirmationDialog
//
this.AcceptButton = this.OKBtn;
+10 -2
View File
@@ -33,6 +33,7 @@
this.TextBox = new System.Windows.Forms.TextBox();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.ShowPassword = new System.Windows.Forms.CheckBox();
this.Seperator = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// TextBox
@@ -41,8 +42,8 @@
this.TextBox.Name = "TextBox";
this.TextBox.UseSystemPasswordChar = true;
this.TextBox.TextChanged += new System.EventHandler(this.TextBox_TextChanged);
this.TextBox.Leave += new System.EventHandler(this.TextBox_Leave);
this.TextBox.Enter += new System.EventHandler(this.TextBox_Enter);
this.TextBox.Leave += new System.EventHandler(this.TextBox_Leave);
//
// ShowPassword
//
@@ -51,14 +52,20 @@
this.ShowPassword.Name = "ShowPassword";
this.toolTip.SetToolTip(this.ShowPassword, resources.GetString("ShowPassword.ToolTip"));
this.ShowPassword.UseVisualStyleBackColor = true;
this.ShowPassword.Click += new System.EventHandler(this.ShowPassword_Click);
this.ShowPassword.CheckedChanged += new System.EventHandler(this.ShowPassword_CheckedChanged);
this.ShowPassword.Click += new System.EventHandler(this.ShowPassword_Click);
//
// Seperator
//
resources.ApplyResources(this.Seperator, "Seperator");
this.Seperator.Name = "Seperator";
//
// PasswordControl
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.TextBox);
this.Controls.Add(this.Seperator);
this.Controls.Add(this.ShowPassword);
this.MaximumSize = new System.Drawing.Size(5000, 20);
this.MinimumSize = new System.Drawing.Size(150, 20);
@@ -73,5 +80,6 @@
private System.Windows.Forms.TextBox TextBox;
private System.Windows.Forms.CheckBox ShowPassword;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.Panel Seperator;
}
}
@@ -126,7 +126,7 @@
<value>0, 0</value>
</data>
<data name="TextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>117, 20</value>
<value>112, 20</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TextBox.TabIndex" type="System.Int32, mscorlib">
@@ -187,6 +187,30 @@
<value>$this</value>
</data>
<data name="&gt;&gt;ShowPassword.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="Seperator.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Right</value>
</data>
<data name="Seperator.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 0</value>
</data>
<data name="Seperator.Size" type="System.Drawing.Size, System.Drawing">
<value>5, 20</value>
</data>
<data name="Seperator.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;Seperator.Name" xml:space="preserve">
<value>Seperator</value>
</data>
<data name="&gt;&gt;Seperator.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Seperator.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Seperator.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+6
View File
@@ -112,6 +112,12 @@
<Feature Id="es_ES_LanguageFeature" Title="Spanish translation files" Level="1" Description="Installs the required files for displaying the Duplicati userinterface in Spanish (es-ES)." AllowAdvertise="no" TypicalDefault="install" InstallDefault="local" >
<ComponentGroupRef Id="DUPLICATI_LANG_es_ES" />
</Feature>
<Feature Id="it_IT_LanguageFeature" Title="Italian translation files" Level="1" Description="Installs the required files for displaying the Duplicati userinterface in Italian (it-IT)." AllowAdvertise="no" TypicalDefault="install" InstallDefault="local" >
<ComponentGroupRef Id="DUPLICATI_LANG_it_IT" />
</Feature>
<Feature Id="zh_CN_LanguageFeature" Title="Chinese translation files" Level="1" Description="Installs the required files for displaying the Duplicati userinterface in Chinese (zh-CN)." AllowAdvertise="no" TypicalDefault="install" InstallDefault="local" >
<ComponentGroupRef Id="DUPLICATI_LANG_zh_CN" />
</Feature>
</Feature>
<!-- Launch duplicati setup -->
+2
View File
@@ -46,6 +46,8 @@
<Compile Include="incLocFiles.pt-BR.wxs" />
<Compile Include="incLocFiles.de-DE.wxs" />
<Compile Include="incLocFiles.es-ES.wxs" />
<Compile Include="incLocFiles.it-IT.wxs" />
<Compile Include="incLocFiles.zh-CN.wxs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources" />
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More