Fixed issue #89.

git-svn-id: https://duplicati.googlecode.com/svn/trunk@363 59da171f-624f-0410-aa54-27559c288bec
This commit is contained in:
kenneth.skovhede@gmail.com
2010-02-10 22:22:49 +00:00
parent 5b85833e52
commit 28c2cf6fae
9 changed files with 421 additions and 95 deletions
+9
View File
@@ -94,6 +94,11 @@
<DesignTime>True</DesignTime>
<DependentUpon>FilterDialog.resx</DependentUpon>
</Compile>
<Compile Include="HelperControls\Strings\FilterEditor.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>FilterEditor.resx</DependentUpon>
</Compile>
<Compile Include="HelperControls\Strings\SizeSelector.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
@@ -1017,6 +1022,10 @@
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Database schema\3. Default managed SSH.sql" />
<EmbeddedResource Include="HelperControls\Strings\FilterEditor.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>FilterEditor.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="HelperControls\Strings\WaitForOperation.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>WaitForOperation.Designer.cs</LastGenOutput>
+2
View File
@@ -47,6 +47,7 @@ namespace Duplicati.GUI.HelperControls
this.label1 = new System.Windows.Forms.Label();
this.FilenameTester = new System.Windows.Forms.TextBox();
this.TestResults = new System.Windows.Forms.PictureBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.groupBox1.SuspendLayout();
this.toolStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.TestResults)).BeginInit();
@@ -217,5 +218,6 @@ namespace Duplicati.GUI.HelperControls
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox FilenameTester;
private System.Windows.Forms.PictureBox TestResults;
private System.Windows.Forms.ToolTip toolTip1;
}
}
+49 -2
View File
@@ -72,15 +72,16 @@ namespace Duplicati.GUI.HelperControls
{
if (FilenameTester.Text.Trim().Length == 0 || string.IsNullOrEmpty(m_basepath))
{
SetTooltipMessage("");
TestResults.Visible = false;
return;
}
string filename = FilenameTester.Text;
if (filename.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
{
SetTooltipMessage(string.Format(Strings.FilterEditor.InvalidCharsInFilenameError, filename));
TestResults.Visible = false;
return;
}
@@ -90,15 +91,52 @@ namespace Duplicati.GUI.HelperControls
if (!filename.StartsWith(m_basepath))
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FilenameIsNotInRootFolder, filename, m_basepath));
TestResults.Visible = false;
return;
}
List<string> parentFolders = new List<string>();
string folder = filename;
while (folder.Length > m_basepath.Length)
{
folder = System.IO.Path.GetDirectoryName(folder);
parentFolders.Add(Duplicati.Library.Core.Utility.AppendDirSeperator(folder));
}
parentFolders.Reverse();
Library.Core.FilenameFilter fn = new Duplicati.Library.Core.FilenameFilter(GetFilterList());
TestResults.Image = imageList1.Images[fn.ShouldInclude(m_basepath, filename) ? 0 : 1];
Library.Core.IFilenameFilter match;
foreach(string s in parentFolders)
if (!fn.ShouldInclude(m_basepath, s, out match))
{
SetTooltipMessage(string.Format(Strings.FilterEditor.FolderIsExcluded, s, ((Library.Core.RegularExpressionFilter)match).Expression.ToString()));
TestResults.Image = imageList1.Images[1];
TestResults.Visible = true;
return;
}
TestResults.Image = imageList1.Images[fn.ShouldInclude(m_basepath, filename, out match) ? 0 : 1];
if (match == null)
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsIncludedDefault, filename));
else if (match.Include)
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsIncluded, filename, ((Library.Core.RegularExpressionFilter)match).Expression.ToString()));
else
SetTooltipMessage(string.Format(Strings.FilterEditor.FileIsExcluded, filename, ((Library.Core.RegularExpressionFilter)match).Expression.ToString()));
TestResults.Visible = true;
}
private void SetTooltipMessage(string message)
{
toolTip1.SetToolTip(FilenameTester, message);
toolTip1.SetToolTip(label1, message);
toolTip1.SetToolTip(TestResults, message);
toolTip1.Show(message, TestResults, 5000);
}
private void listView_SelectedIndexChanged(object sender, EventArgs e)
{
RemoveFilterButton.Enabled =
@@ -115,6 +153,7 @@ namespace Duplicati.GUI.HelperControls
{
while (listView.SelectedItems.Count > 0)
listView.Items.Remove(listView.SelectedItems[0]);
FilenameTester_TextChanged(sender, e);
}
private void EditFilterButton_Click(object sender, EventArgs e)
@@ -126,6 +165,7 @@ namespace Duplicati.GUI.HelperControls
{
listView.SelectedItems[0].Text = dlg.Filter.Value;
listView.SelectedItems[0].ImageIndex = dlg.Filter.Key ? 0 : 1;
FilenameTester_TextChanged(sender, e);
}
}
}
@@ -139,6 +179,7 @@ namespace Duplicati.GUI.HelperControls
listView.Items.RemoveAt(index);
listView.Items.Insert(index - 1, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
@@ -151,6 +192,7 @@ namespace Duplicati.GUI.HelperControls
listView.Items.RemoveAt(index);
listView.Items.Insert(index + 1, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
@@ -163,6 +205,7 @@ namespace Duplicati.GUI.HelperControls
listView.Items.RemoveAt(index);
listView.Items.Insert(0, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
@@ -175,6 +218,7 @@ namespace Duplicati.GUI.HelperControls
listView.Items.RemoveAt(index);
listView.Items.Insert(listView.Items.Count, lvi);
lvi.Selected = true;
FilenameTester_TextChanged(sender, e);
}
}
@@ -182,7 +226,10 @@ namespace Duplicati.GUI.HelperControls
{
FilterDialog dlg = new FilterDialog(new KeyValuePair<bool, string>(true, ""));
if (dlg.ShowDialog(this) == DialogResult.OK)
{
listView.Items.Add(dlg.Filter.Value, dlg.Filter.Key ? 0 : 1);
FilenameTester_TextChanged(sender, e);
}
}
private void FilterEditor_Load(object sender, EventArgs e)
+91 -86
View File
@@ -142,29 +142,28 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD6
BAAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEgBgABEP8AKwABFAIBARoBLQIBAUMBLQIBAUMBLQIBAUPwAAFYAQMBAgGyAVkB4gGM
Af8BWAHhAYkB/wFKAcgBcgH/8AABWAEDAQIBsgFNAdQBbQH/AUQBywFUAf8BSgHJAXIB//AAAVgBAwEC
AbIBVQHaAXcB/wFFAcwBVgH/AUoBygFyAf/wAAFYAQMBAgGyAWEB4wGBAf8BUQHUAWMB/wFLAcsBcwH/
4AABPgGoATwB/gFUAdMBeQH/AVQB1AF7Af8BVQHUAXsB/wFUAdMBegH/AW0B6gGEAf8BYAHfAXMB/wFe
AeMBkAH/AUsBygFxAf8BSQHIAXAB/wFIAcYBbgH/AUgBxQFuAf8BMQIBAUwMAAFJAgIBhAJQAdMB/wJS
AdQB/wJUAdQB/wJVAdMB/wJUAdAB/wJRAcwB/wJNAccB/wJJAcMB/wJHAcIB/wJHAcIB/wI2AagB/5AA
AUEBrQFBAf4BaQHaAXwB/wFyAeQBgQH/AXgB7AGGAf8BewHwAYoB/wF4Ae8BhwH/AW8B6gGBAf8BYgHh
AXYB/wFVAdcBZwH/AUkBzgFaAf8BRAHLAVQB/wFXAeABhwH/ATECAQFMDAABSQICAYQCYgHXAf8CaQHW
Af8CdQHkAf8CfQHuAf8CfQHwAf8CcQHpAf8CXgHcAf8CTgHQAf8CSQHMAf8CSQHMAf8CQAG3Af+QAAFB
Aa4BQQH+AWIB1gGBAf8BagHfAYUB/wFxAecBjQH/AXYB7gGTAf8BewHvAYoB/wF5AfABiAH/AXEB7AGG
Af8BZgHnAYIB/wFbAd4BfQH/AVEB1wFyAf8BWAHhAYoB/wExAgEBTAwAAUkCAgGEAmMB2gH/AmoB3QH/
AnQB6AH/AnoB8AH/AnoB8gH/AnEB7AH/AmIB4gH/AlQB2AH/Ak8B1AH/Ak8B1AH/AkABtwH/kAABVwED
AQIBsQFYAQQBAgG1AVgBBAECAbUBWAEEAQIBtQFXATIBDgHoAXYB7QGTAf8BewHvAYkB/wFXAdYBgQH/
AVgBBAECAbUBWAEEAQIBtQFYAQQBAgG1AVgBBAECAbUBGQIBASEMAAEuAgEBRgFYAQIBBAG1AVgBAgEE
AbUBWAECAQQBtQFYAQIBBAG1AVgBAgEEAbUBWAECAQQBtQFYAQIBBAG1AVgBAgEEAbUBWAECAQQBtQFY
AQIBBAG1AVcBAgEEAbSgAAFYAQMBAgGyAW8B5QGLAf8BdgHoAYMB/wFXAdYBgQH/8AABWAEDAQIBsgFm
AdsBgQH/AW0B3gGAAf8BVgHVAX8B//AAAVgBAwECAbIBXQHSAX4B/wFiAdMBdQH/AVUB1AF9Af/wAAFV
AgIBqwE4AbkBPQH/ATgBuAE9Af8BNgG1ATkB//8A/wDaAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
AQABAQUAAYAXAAP/AQAE/wQAAfwBPwL/BAAB/AE/Av8EAAH8AT8C/wQAAfwBPwL/BAAB/AE/Av8EAAHA
AQEBwAEDBAABwAEBAcABAwQAAcABAQHAAQMEAAHAAQEBwAEDBAAB/AE/Av8EAAH8AT8C/wQAAfwBPwL/
BAAB/AE/Av8EAAT/BAAE/wQACw==
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC8
BAAAAk1TRnQBSQFMAgEBAgEAARQBAAEUAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEgBgABEP8AKwADEwEaASwCKwFDASwCKwFDASwCKwFD8AABVQJCAbIBVwHiAYwB/wFW
AeEBiQH/AUgByAFwAf/wAAFVAkIBsgFLAdQBawH/AUIBywFSAf8BSAHJAXAB//AAAVUCQgGyAVMB2gF1
Af8BQwHMAVQB/wFIAcoBcAH/8AABVQJCAbIBXwHjAYEB/wFPAdQBYQH/AUkBywFxAf/gAAE+AaQBPAH+
AVIB0wF3Af8BUgHUAXkB/wFTAdQBeQH/AVIB0wF4Af8BawHqAYQB/wFeAd8BcQH/AVwB4wGQAf8BSQHK
AW8B/wFHAcgBbgH/AUYBxgFsAf8BRgHFAWwB/wMwAUwMAAFIAkMBhAJOAdMB/wJQAdQB/wJSAdQB/wJT
AdMB/wJSAdAB/wJPAcwB/wJLAccB/wJHAcMB/wJFAcIB/wJFAcIB/wI0AagB/5AAAUEBqQFBAf4BZwHa
AXoB/wFwAeQBgQH/AXYB7AGGAf8BeQHwAYoB/wF2Ae8BhwH/AW0B6gGBAf8BYAHhAXQB/wFTAdcBZQH/
AUcBzgFYAf8BQgHLAVIB/wFVAeABhwH/AzABTAwAAUgCQwGEAmAB1wH/AmcB1gH/AnMB5AH/AnsB7gH/
AnsB8AH/Am8B6QH/AlwB3AH/AkwB0AH/AkcBzAH/AkcBzAH/Aj4BtwH/kAABQQGqAUEB/gFgAdYBgQH/
AWgB3wGFAf8BbwHnAY0B/wF0Ae4BkwH/AXkB7wGKAf8BdwHwAYgB/wFvAewBhgH/AWQB5wGCAf8BWQHe
AXsB/wFPAdcBcAH/AVYB4QGKAf8DMAFMDAABSAJDAYQCYQHaAf8CaAHdAf8CcgHoAf8CeAHwAf8CeAHy
Af8CbwHsAf8CYAHiAf8CUgHYAf8CTQHUAf8CTQHUAf8CPgG3Af+QAAFWAkIBsQFVAkEBtQFVAkEBtQFV
AkEBtQFXAUEBJwHoAXQB7QGTAf8BeQHvAYkB/wFVAdYBgQH/AVUCQQG1AVUCQQG1AVUCQQG1AVUCQQG1
AxgBIQwAAy0BRgFVAkEBtQFVAkEBtQFVAkEBtQFVAkEBtQFVAkEBtQFVAkEBtQFVAkEBtQFVAkEBtQFV
AkEBtQFVAkEBtQFWAUABQgG0oAABVQJCAbIBbQHlAYsB/wF0AegBgwH/AVUB1gGBAf/wAAFVAkIBsgFk
AdsBgQH/AWsB3gGAAf8BVAHVAX0B//AAAVUCQgGyAVsB0gF8Af8BYAHTAXMB/wFTAdQBewH/8AABVAJE
AasBNgG5ATsB/wE2AbgBOwH/ATQBtQE3Af//AP8A2gABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEA
AQEFAAGAFwAD/wEABP8EAAH8AT8C/wQAAfwBPwL/BAAB/AE/Av8EAAH8AT8C/wQAAfwBPwL/BAABwAEB
AcABAwQAAcABAQHAAQMEAAHAAQEBwAEDBAABwAEBAcABAwQAAfwBPwL/BAAB/AE/Av8EAAH8AT8C/wQA
AfwBPwL/BAAE/wQABP8EAAs=
</value>
</data>
<data name="listView.TabIndex" type="System.Int32, mscorlib">
@@ -183,22 +182,21 @@
<value>0</value>
</data>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>121, 19</value>
<value>3, 16</value>
</metadata>
<data name="AddFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAiNJREFUOE+Fk29L
U3EUx+cr6AVES+e8btVEcwUlKWZI0IOQLIaNYrJqgc7sUrlCbG0oxmrhkpRkVGQM+ocPKpoRxHJXcW61
SX8IZBA9CXrQK/jW98BuXebqwIHfPfd8P/ec8zu3ylTB3DEXvv38Km83bthkut+fqKqUa4hvDdRi/+12
qMl+jKaD4jzvm96DLRetqAhR753BtjErBpI+RHNXMbkaxdTHCdzKTSC2eg2R7Ch8zz2Sw9wyUH3IDM+z
HowsD2GscBnj2RAWi2lxQsL5YVxZ9qNn7hCUsNkIYNm77zahL3UCQ9lBjOQDCGqXULJ4fhrD789DXenD
6de92Bl3gBq9CnukBh2PdsG74IY/c1IggZSqA6ZyMYnxnSflQsuTJlAjAE67YaYOrU+dOD7fjYE3PlxY
+O0vB3XATe2GxPl15hBADbWm9nCLPDgf23EnP6OLKh04k+aHNtFQqwMY5LD+Z1rxrRFQaoGA7vlOBNI+
hDJ+jGtnddZsYVJugK2xhVIF0gKNA9mRULD3lQ1dSw4cyzXCqzl1QPRTL46uNOKg5kBb0o7mB8qfIRLA
K9ket6IzWQdXTsGpzzb43zkMAO8HGw5n6tHxQpH+DddICBepLWGBe8kC/5oF6lo1ij8K4te/dEnsiFYr
Ocwt20Sup+0vyLniZgS/m8UJI7h1tkZy1l3lEpGlNUTMknxgrlqcZ8bKyv7X78kJ857p+rTXEfwChEDw
QjpqrrIAAAAASUVORK5CYII=
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIMSURBVDhPjZPvS1NhFMf9S5bOeb0rJ5orKElRQ4JehGQx
bBSTWQvsml4ql4itDcVYLVySkowKDKEyfFHRjCCWu4lztzbpB4HsdeDf8K3vgd0aa9UDB84995zPc349
VVUVjjfuQUekVYR6Jb8y+55gLY7c64CevIDJdEiE+uH5Q9h91VEZpD+8iIYpB4aSAcTMG5jdimHu8wzu
mjOIb91ENDuJwAuf+NC37Ob6sA2+532Y2BjFVP4aprNhvC+kRQiJ5MZxfUND38pxKBFbKYBpH3zQjMHU
AEazw5jIBREyxlA8idw8xj9ehr45iPNv+rE/4QJjrCyc0Rp0PTkA/5oXWuasQIIp3QLMmXGx8Z8v5UHr
cjMYIwB2uHGhDm3P3Diz2ouhtwFcWfspr4YtwB3jtth5O30IYIxMh2Pih/upE/dzC1ZQJYU9aXmsSgxj
LQCNbNa/jlF4VwoolkBA72o3gukAwhkN08aIxVrMz8oEWBpLKGZgLRgbsm9JQedrFT3rLpw2m+A33BYg
9qUfpzabcMxwoT3pRMsj5VcT2UiOZG/Cge5kHTymgnNfVWgfXCUA/ycVJzL16HqpSP0lYySEi9S+ZId3
3Q5t2w59uxqFnbzIrW89Yjtp1IoPfcs2keup/ga5VNiF0HebCGEEty3WiM8fV7lIZGqNUZs4H12pFqFO
W1naf3ui//ucfwCJ3vHLSjlN7AAAAABJRU5ErkJggg==
</value>
</data>
<data name="AddFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -219,16 +217,15 @@
<data name="RemoveFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAe9JREFUOE+FU99L
U3EU3976G6SnoIcpk5rU7AebFjFBaRkRCCJEOmbqMmoOUxwLVhuBbhLLBhUVCD7aS5BPPokPQRDU7CGN
2noI79xcbNa8n+7nyBa3280vfOB7P+dzPpxz7vlaLSZn0deHSu6rRA80HLR408+tZlodP9/ajJXLXdgI
j+FbIi5Yn7wp3AunHaYmryeCWDplE/HWo1n8eDqH8rO0oPQ4BSU1jY3gEF6dsINag9HL4zZ8uT6A7ft3
gNkYdtNJHX4m76EYm8LnwT5Qayh7rdOFwsQoqtHbUGeidRPMzcidnBoJYis0jIznpL6dZa2s3CUPdm75
RYR4uG5SSxZOi5UCV5DtPgvmSBWc9ju3A5sayaCiVaHcnTQiEoIyHsD3G/2iZQ5zLQtdZ+Sj4nVi88lD
7HeUN6tQPK3ItDvAXDH41HFESE56v2MwYBnvNTcaFK5eRD42jnxiag8P9GBrbIHaegucAweSPXcMOxec
UHtPAz43MOL6g2va3dcmMbZKbX2INOD2sY28twXV3qNQfQ5gqEUHcoxRQ61hK7kcDBR77KgO2PArcAjq
6GEB7+QYo8awSKyC68nAx/ONUHqaUPbvJRK8k/vQYRfNP1e5tposjW/iradJzAjeyf33Mf39OPh3+IsJ
WRiT8xtNQweCAHQ6FwAAAABJRU5ErkJggg==
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHfSURBVDhPjVPfS1NhGPZvCbpYY1ITm5rMHxETlFYiwkCE
SIc1XYtaY00cBssNwekIm4MKCYIu8yaoq67EC0EQbHVRi5hehGebLfzROk/neccmx+PUDx54z/M+33Pe
9/ver66uxnrnHsTbnk4B41o6A/+mqR7L/T3IhB9hazYm+D7+QLjXNkttow8hPz5eMYk4v5DAn1dJ7C6m
BMUX81DmZ5Dxe/C+2QJqDX9eumzCz3vD+D39BEhE8S81p8PB3BR2ohP4cWcQ1OoMWPaXbjsKIR9KkcdQ
45GqCZJxicmpk37kA6NIO1r07XzSytrsc2D/4YiIEAtXTSqbhdNyRe8tZG9eBfdIFTzh9TYrtjWSSUWr
Qnk6bsRkAErQi1/3h0TLPXI7vCZ+7Dlt2H75HKctZXUFiqMJ6Q6rXLEYfOu6KCRP+rRlMGAZG5obDQq3
e5GLBpGbnSjjmR5sjS1QW22B58ADyV5rxP4NG9SBVsDdBozZD3FXi93tkmOr1FYPkQa8RraRczagNHAJ
qtsKeBp0IMccNdQappLDwcSOy4LSsAl/veeg+s4LGJNjjhrDILEKjicTX69fgOIyY3ekvJFgTO5zl0U0
x45yZTRZGt/EmsMsZgRjcic+pqOP46zP+T9spgnV3QfwFQAAAABJRU5ErkJggg==
</value>
</data>
<data name="RemoveFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -249,15 +246,15 @@
<data name="EditFilterButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAcZJREFUOE+VU0sv
Q0EYvR4bP8HCxg+w6Fq6FhIhIiFWFpZlK7FkxaKJV6RCsChtpBpBKPqMtqlalDaVEpS6RVUrDW2jevQb
pqq9bWKSk7kz957znfPN3CrhZ7jdPmSzSaGmtlb4zGSE6uo6gdZ8iKIodHS0V+U3ih9S6Q+8JtJlYTI7
YDRaUFEgGk+BQEKR2PfM9+x2B0J3ofIi5ICTC2cu4DkLQLexDe2sCoae3lInPAJV5iQ+P0XfQLi8EmFr
bUOgpQVmufyvCHcgPsTZh+eB2zz42uc9g3VOBb1MBt3AQKkAZQ7ev+QFODHgNuDaMgjqg1a7Ds2EUjoC
WS52EPRa8WqSIayvh1/dx5ooeRo8AndA1alydL+JkR9VDYhou5lDclJynFwgHHlnEQorE/l2uQ102S6D
z5UF7sNxULNiO7+VH1a7YHd4sHd4DJvTC71+U9oBHSFZ9J9qEDnpwstKI3xTzVCr1zA5swTl1CI0G0bW
yJIIydQHmP2cRdeBAj5zPzTjnRhUDGF4ZJQJEPnYcyPdxLxALv+0cgyzcwuYX1zF1u4RI3kvnuG/iuM6
lJDugcvlRiGcTheKQd0nUKSyP9V/X3wBzfZGZumMH9MAAAAASUVORK5CYII=
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG1SURBVDhPlVPBSgJRFPU3WrTpA1q4jtZSq4igaNXCpbYN
WtaqFkJWhJFUC22GqCEqysrMSMU0MhXDpNJMrdFUpFJcnLyvnpWOQQOHO2/m3XPPue8+lerr8fnC8Hp9
8F9cssjX9E6QpC3wvYqxXKmiWKq0xLHDDbv9pDUJEeQKZQYikvOfkX9zudxIPiRbk3ACnvQzmUgCwSg2
NncgzptgGxxqVsItUGVelcfn3CsIsdsUTnt6EdVo4Oju/k3CFaQyBbbxOpqog6/DoSCcCyZIajU2tNpm
ApIdf3ypE/DEqM+GuxM9qA+iuA5h2qBsgSQ3KoiHnCgeq5GW2hCxDLMmKp4Gt8AVUHWqnDvoZMlPpnbI
4gBTSEqaZoETpOU3ZuFnZUpOrPSy4YrFs38TPKYLoGbld78rZ6z9cLkD2D86x6knpDyVpICOkCRGrgTI
/n68rHYgbOyCxbKGmbllGIxmCJt21sgmC+/lKpj8mkTvoQ5hxwiEqT7odaMYG59gBJR8HrhXbmKdoOZ/
1jCJ+YUlLJqt2N47Y0mhmywitwXcJUvKPeC3jkePx4tGUPcJZOnPm/mfnx/Qo1STSDASFQAAAABJRU5E
rkJggg==
</value>
</data>
<data name="EditFilterButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -281,13 +278,13 @@
<data name="MoveFilterUpButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAVlJREFUOE9jYCAA
pt6c+p+QGpzySWdc/2ec8/jfd7WPdENAmjseJINx3kWf/10Xu4g3BKa5+kH6/4anOf+nvMv/n3PN/X/X
aSIMQdfcAtTc+b7k/8zPhRCX4DMEprn2YQbYZpjmjg9FYHbfu8z/IDVYDUHXDLIVhGGaa15l/C9/lvy/
7lHE/5QTTqiGOO41+19zPfB/zf3g/233o8B+BmkE4aa3uf9BmkEaQfIFFzz/F553/++4wQi7S7z3uID9
C9Nc9SLtf96DKLAB7ltsCcdE2IEAsAEgmyuep4A1J98M+F92J+C/7xYn4gyY9iEL7N+c+5H/E2/4/w+7
4Po//4YXcQYE7/T93/c6+X/WvfD/Cdf9wJp9T9uC0wFRLgAZ0PI0+n/cNR+4ZpINAIV2yHlnsM0wDHKB
z0ZHwmEAdsGDQLCTkXHtXV/iDEjemwT2KzoG2R6+KQzDBQBtp08dH0E7jQAAAABJRU5ErkJggg==
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFZSURBVDhPY2AgAKbenPqfkBqc8klnXP9nnPP433e1j3RD
QJo7HiSDcd5Fn/9dF7uINwSmufpB+v+Gpzn/p7zL/59zzf1/12kiDEHX3ALU3Pm+5P/Mz4UQl+AzBKa5
9mEG2GaY5o4PRWB237vM/yA1WA1B1wyyFYRhmmteZfwvf5b8v+5RxP+UE06ohjjuNftfcz3wf8394P9t
96PAfgZpBOGmt7n/QZpBGkHyBRc8/xeed//vuMEIu0u897iA/QvTXPUi7X/egyiwAe5bbAnHRNiBALAB
IJsrnqeANSffDPhfdifgv+8WJ+IMmPYhC+zfnPuR/xNv+P8Pu+D6P/+GF3EGBO/0/d/3Ovl/1r3w/wnX
/cCafU/bgtMBUS4AGdDyNPp/3DUfuGaSDQCFdsh5Z7DNMAxygc9GR8JhAHbBg0Cwk5Fx7V1f4gxI3psE
9is6BtkevikMwwUAbadPHR9BO40AAAAASUVORK5CYII=
</value>
</data>
<data name="MoveFilterUpButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -308,14 +305,14 @@
<data name="MoveFilterDownButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAY9JREFUOE+Vk8tL
AlEUxsdaBf01bdr0zhAjTAQVe5FNGJNWGvmojRFlVqBTUFCL+hPatQhcFPSiJLNEhVKJHhIi5r6+OBNj
ZpnTwF3cmfl933fOuVfGlDz2kB0P+VTh7TvzxlQx1cK+pqqW2W7YkZUy3/aGIy1WYjq4omrMx/uwnDSC
fzRhKzsGdUCOP2H6aDjUYu5Oj5GgDtbIAKYTJrgfzFhPc9IFvLf9BXjhxQpam6826QK+e1ZwJnA2Y4Yn
Y/ufAMUlmMCl3JSwNvITUO23SesBNYxgUWAxNwl/lpMmoAp0CnFFZyphJm2CJ22Ecq/xZ4LV2BraAvXC
2JxRjTABiksCIjye6oEjoYHjuhPsqRzcWTtaduvgPnZ/CvoiPliuun44u56HQTAbV8MQVkB90YyhsBym
k9YvWDwY/hteECF3cnY+sbAkDTDGuqELdUB13lQeFkX4MA8uqIT3hcVoQo/BqEo6XCxCdVLNkp1Lzzcl
6T1oBBdRVI5d7nLwl6uCyK8Nq3ijin4ojKoM9AHxq1tZT9V7JgAAAABJRU5ErkJggg==
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF9SURBVDhPlZPbSgJhFIV7pm66soMZosQ0CCp2onHCmLTS
yEPdGFFmBToGBfUS3XUReJF0pCSzRIXSiA4iItYLrNoTM4kmTgMbZuBf31p77/k7Ohoeb8oLW8KslDVh
Ut7tJxwazzd9207N2MpZEMiyWM2PYrPIQXx1YL86AzauUwH4dl95tGIqaYE7M47FggPBFyd2SoJ6QPhh
TBGvld2g2vvwqAdEnnnJmYTLFSdCFc//ABSXxCTcqC1Itfs5B+ZIq24GNDASy4D12jyiVUEdgIkbpbiy
M7WwVHIgVOJgONQ0J4jltqGNd0lr82dN0gYoLgFk8ezTMHwFE3x3RvAXOgiX/eg96ETwLPgDjGQicN0O
NjkH3idBYj7PwpbWg73ugT2tg+O871cs/0nRe1GCkDs5+994uIo2cLkhWFIDYK66W4tliJgWISQNCJd5
TBesmMgy6sX1EOqTelbt3HghKMnIsQZCRt8+dqvbJd7EJMifA2t7JesOKKtqIfoCZo5mLImpLeYAAAAA
SUVORK5CYII=
</value>
</data>
<data name="MoveFilterDownButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -339,14 +336,14 @@
<data name="MoveFilterTopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZJJREFUOE+Vk81L
AmEQxv2vvETWQepiHyBEGZqRkliblUmYGEQHs8yPQAMpLPSQdIq6RElBnjTJyENGdKgWywSrP2ByZnl1
pV22FoY97Pv8nmfmnVWpFJ5o8h6Uzsh+73XnQLdShOBO6f8QFE/uVYCL1Qiyvn37dwgTzwXewLFVA2fq
S4BEb5QhPZ4COaPY5HkAs/cRXNE6zB4KEH/4Wh6CzlzkA7i1FzAtlaHTloUue5ZAmGQm+Ql4RhLCnB1+
XhBPXIBtvwZTySpBDO4ywS277wQJBHOtJGpjBvSRMtWgrwTdlkyzDWxlPv1NEN1yEfr9d1TqgaN2CN6l
y5cHjfkMxg54wCQoxv7ZDBA8vXApPwN0sceFAWI5Q9UmACFcuk7pJBcHxVLOLAEOkWaQqlLKNggODMXW
BE+Dw8NMiG8SNxYKxcbEK1WH/rgFcW8UgJVm9JTuXOyMAASjaNF71axQOP+7nT7reRsAY9s2K3R92uET
5U0UA8i5IR7HxYrzoB0SxZb7BRlALDasPsFI7FkS8AOfmJ+7r3cchAAAAABJRU5ErkJggg==
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGSSURBVDhPlZPNSwJhEMb9r7xE1kHqYh8gRBmakZJYm5VJ
mBhEB7PMj0ADKSz0kHSKukRJQZ40ychDRnSoFssEqz9gcmZ5daVdthaGPez7/J5n5p1VqRSeaPIelM7I
fu9150C3UoTgTun/EBRP7lWAi9UIsr59+3cIE88F3sCxVQNn6kuARG+UIT2eAjmj2OR5ALP3EVzROswe
ChB/+Foegs5c5AO4tRcwLZWh05aFLnuWQJhkJvkJeEYSwpwdfl4QT1yAbb8GU8kqQQzuMsEtu+8ECQRz
rSRqYwb0kTLVoK8E3ZZMsw1sZT79TRDdchH6/XdU6oGjdgjepcuXB435DMYOeMAkKMb+2QwQPL1wKT8D
dLHHhQFiOUPVJgAhXLpO6SQXB8VSziwBDpFmkKpSyjYIDgzF1gRPg8PDTIhvEjcWCsXGxCtVh/64BXFv
FICVZvSU7lzsjAAEo2jRe9WsUDj/u50+63kbAGPbNit0fdrhE+VNFAPIuSEex8WK86AdEsWW+wUZQCw2
rD7BSOxZEvADn5ifu693HIQAAAAASUVORK5CYII=
</value>
</data>
<data name="MoveFilterTopButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -367,15 +364,14 @@
<data name="MoveFilterBottomButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAbBJREFUOE9jZEAD
oYVH/osaajKwv/zFwMzCwsDEwszAwMzE8EuMieHKlpMMexa4MqLrQeGH5B36n7/s3f+S/tf/C6e8+182
7QMYly77/N8lYfd/vJpBkiADCtZ8+l82GaEZZABIzCl2F3YD2qdd+g/DIEVgA6A2g2iQS7IWvf1vHb79
f1vXSTBuaj6GMMw2ftf/+GVP/6ctewPGZXM/wg3Im/TmPwinTnz+P37ms/+hU+/+D517D2wYinecM4F+
X/kexWaQ7SDNyZ1P/se1Pvwf1nD7f/j0B/9BFmINC5AhyM6HaU5of0RYM8jE2u6zYNNBhoA0p/U8+4+s
2S5h1//84n2otk9aeOO/eeze/2F99/4HdV//79N44T9IISgsIvsf/I9svAv2O8hg14Kj/70azoKxmd8G
RED2z70K1giKa5C/E6tvgQ0BaYRp9k45ATYMZJFHzen/tXWH0Vwy6xKKIfGVN8EhDTKIoGZYiE4CGgIy
HeQSUBhElFz575dxGr/N6NEBMwSUcEDRB3I2KCywOhtXugYZ4l5yAux/kjXDvTP9PDjUSbIZm4tQ0jwW
BQBGf59N9yfyuQAAAABJRU5ErkJggg==
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGUSURBVDhPlZPLSwJhFMX7q2oRtehBUeEiUnNhY1RSLXyQ
CVGGFiVlJFkpBS5qMRC0aBcYteiFIVJI0QvFonSR2esPOHm/+tSZpsyByzDDPb9z7v1mKipkl9p6iMH1
Z1g9adi8T7AvZmH3v8Ky+Y4Gww7k/T+eO0z7MItZJrYufYmphsWP/wPIjTtzAL2r04eUE7j9MfCiJgb4
dqY7JaGxqrXbmJ49YTUxeVyA1QghCOIjjGKGlT34lgeYfBlQ9S2kIaykoF6OQx1MMJhk/vqB3OwbLxJn
cidxz8wDuqbuoHHeQhtIggwVl0mQ4vhcbHDflxYT0eGJMjpBSGycS6FYXGsIwTy0J3X3rV2hSr8LzXwC
7Z5LtLnOQI20C503CZ0rzmYncKPlCC3OKKtK1VZhkd7gBRPSWdPc3aM3DEJCLm7tDTMYGTWPReAYP5Al
WY1JIMLINds0gUqK+UZ9OQjRKQntoNN2DlV/5G9n+XFwCH04dHwUm3ahGPu3H4MgTbYwm79scX6cwCnb
elnOSokk37xCwycvE6v477beNgAAAABJRU5ErkJggg==
</value>
</data>
<data name="MoveFilterBottomButton.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
@@ -516,6 +512,9 @@
<data name="&gt;&gt;TestResults.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>130, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@@ -591,6 +590,12 @@
<data name="&gt;&gt;MoveFilterBottomButton.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolTip1.Name" xml:space="preserve">
<value>toolTip1</value>
</data>
<data name="&gt;&gt;toolTip1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FilterEditor</value>
</data>
@@ -0,0 +1,117 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4927
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Duplicati.GUI.HelperControls.Strings {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class FilterEditor {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal FilterEditor() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.GUI.HelperControls.Strings.FilterEditor", typeof(FilterEditor).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is excluded due to rule {1}.
/// </summary>
internal static string FileIsExcluded {
get {
return ResourceManager.GetString("FileIsExcluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is included due to rule {1}.
/// </summary>
internal static string FileIsIncluded {
get {
return ResourceManager.GetString("FileIsIncluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file {0} is included because no rule matched.
/// </summary>
internal static string FileIsIncludedDefault {
get {
return ResourceManager.GetString("FileIsIncludedDefault", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The filename {0} is not located in the folder {1}.
/// </summary>
internal static string FilenameIsNotInRootFolder {
get {
return ResourceManager.GetString("FilenameIsNotInRootFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The folder {0} is excluded due to rule {1}.
/// </summary>
internal static string FolderIsExcluded {
get {
return ResourceManager.GetString("FolderIsExcluded", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The filename {0} has invalid characters.
/// </summary>
internal static string InvalidCharsInFilenameError {
get {
return ResourceManager.GetString("InvalidCharsInFilenameError", resourceCulture);
}
}
}
}
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<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>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FileIsExcluded" xml:space="preserve">
<value>The file {0} is excluded due to rule {1}</value>
</data>
<data name="FileIsIncluded" xml:space="preserve">
<value>The file {0} is included due to rule {1}</value>
</data>
<data name="FileIsIncludedDefault" xml:space="preserve">
<value>The file {0} is included because no rule matched</value>
</data>
<data name="FilenameIsNotInRootFolder" xml:space="preserve">
<value>The filename {0} is not located in the folder {1}</value>
</data>
<data name="FolderIsExcluded" xml:space="preserve">
<value>The folder {0} is excluded due to rule {1}</value>
</data>
<data name="InvalidCharsInFilenameError" xml:space="preserve">
<value>The filename {0} has invalid characters</value>
</data>
</root>
+10 -1
View File
@@ -227,9 +227,15 @@ namespace Duplicati.Library.Core
return res;
}
public bool ShouldInclude(string basepath, string filename)
{
IFilenameFilter dummy;
return ShouldInclude(basepath, filename, out dummy);
}
public bool ShouldInclude(string basepath, string filename, out IFilenameFilter match)
{
match = null;
basepath = Core.Utility.AppendDirSeperator(basepath);
if (!filename.StartsWith(basepath))
return false;
@@ -242,7 +248,10 @@ namespace Duplicati.Library.Core
//Run through each filter
foreach (IFilenameFilter filter in m_filters)
if (filter.Match(relpath))
{
match = filter;
return filter.Include;
}
return true;
}
@@ -48,6 +48,8 @@ namespace Duplicati.Library.Core
m_include = include;
}
public Regex Expression { get { return m_expression; } }
#region IFilenameFilter Members
public bool Include
+3 -6
View File
@@ -106,14 +106,11 @@ namespace Duplicati.Library.Core
string f = AppendDirSeperator(lst.Dequeue());
try
{
//TODO: We cannot guess if the folder has files that should be included,
//so we have to enumerate all the files
foreach (string s in System.IO.Directory.GetDirectories(f))
lst.Enqueue(s);
if (filter == null || filter.ShouldInclude(rootpath, f))
lst.Enqueue(s);
//TODO: If anything is included from subpaths, we should report the folder itself
if (filter == null || filter.ShouldInclude(rootpath, f))
callback(rootpath, f, EnumeratedFileStatus.Folder);
callback(rootpath, f, EnumeratedFileStatus.Folder);
}
catch (System.Threading.ThreadAbortException)
{