Skip to content

Commit 0086c0a

Browse files
committed
Merge branch 'master' into feature/data-nodes-and-local-sync-merge-master-1307
# Conflicts: # src/ByteSync.Client/Services/Sessions/Connecting/AfterJoinSessionService.cs # src/ByteSync.Client/ViewModels/Sessions/Comparisons/Actions/Misc/ComparisonPropertyViewModel.cs
2 parents d184b0e + 2eaf0f1 commit 0086c0a

21 files changed

Lines changed: 560 additions & 162 deletions

File tree

docs/synchronization-rules.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Synchronization rules
2+
3+
ByteSync supports creating synchronization rules to automatically trigger actions when comparison conditions are met. Rules can compare file or directory attributes using different elements and operators.
4+
5+
## Comparison properties
6+
7+
- **Content**
8+
- **Date**
9+
- **Size**
10+
- **Presence**
11+
- **Name** (supports `Equals` and `NotEquals` operators, wildcard `*` is allowed)
12+
13+
Use `Name` to match items based on their file name. When a pattern contains `*`, the rule interprets it as a wildcard.

src/ByteSync.Client/Assets/Resources/Resources.Designer.cs

Lines changed: 22 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ByteSync.Client/Assets/Resources/Resources.fr.resx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@
127127
<value>Dernière écriture</value>
128128
</data>
129129
<data name="AtomicConditionEdit_Size" xml:space="preserve">
130-
<value>Taille</value>
130+
<value>Taille</value>
131+
</data>
132+
<data name="AtomicConditionEdit_Name" xml:space="preserve">
133+
<value>Nom</value>
131134
</data>
132135
<data name="AtomicConditionEdit_Equals" xml:space="preserve">
133136
<value>Égal à</value>
@@ -160,7 +163,7 @@
160163
<value>Inférieure à</value>
161164
</data>
162165
<data name="AtomicConditionEdit_Source" xml:space="preserve">
163-
<value>Source</value>
166+
<value>Source ou Propriété</value>
164167
</data>
165168
<data name="AtomicConditionEdit_ComparisonElement" xml:space="preserve">
166169
<value>Élément</value>
@@ -171,6 +174,9 @@
171174
<data name="AtomicConditionEdit_Destination" xml:space="preserve">
172175
<value>Destination</value>
173176
</data>
177+
<data name="AtomicConditionEdit_NamePlaceholder" xml:space="preserve">
178+
<value>Nom</value>
179+
</data>
174180
<data name="AtomicConditionEdit_DateTime" xml:space="preserve">
175181
<value>Date et heure</value>
176182
</data>
@@ -343,7 +349,10 @@ Voulez-vous continuer ?</value>
343349
<value>Date</value>
344350
</data>
345351
<data name="AtomicConditionDescription_ComparisonElement_Size" xml:space="preserve">
346-
<value>Taille</value>
352+
<value>Taille</value>
353+
</data>
354+
<data name="AtomicConditionDescription_ComparisonElement_Name" xml:space="preserve">
355+
<value>Nom</value>
347356
</data>
348357
<data name="AtomicConditionDescription_ConditionOperator_Equals" xml:space="preserve">
349358
<value>Est égal à</value>

src/ByteSync.Client/Assets/Resources/Resources.resx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@
237237
<data name="AtomicConditionEdit_Size" xml:space="preserve">
238238
<value>Size</value>
239239
</data>
240+
<data name="AtomicConditionEdit_Name" xml:space="preserve">
241+
<value>Name</value>
242+
</data>
240243
<data name="AtomicConditionEdit_Equals" xml:space="preserve">
241244
<value>Equals</value>
242245
</data>
@@ -265,7 +268,7 @@
265268
<value>Less than</value>
266269
</data>
267270
<data name="AtomicConditionEdit_Source" xml:space="preserve">
268-
<value>Source</value>
271+
<value>Source or Property</value>
269272
</data>
270273
<data name="AtomicConditionEdit_ComparisonElement" xml:space="preserve">
271274
<value>Element</value>
@@ -276,6 +279,9 @@
276279
<data name="AtomicConditionEdit_Destination" xml:space="preserve">
277280
<value>Destination</value>
278281
</data>
282+
<data name="AtomicConditionEdit_NamePlaceholder" xml:space="preserve">
283+
<value>Name</value>
284+
</data>
279285
<data name="AtomicConditionEdit_DateTime" xml:space="preserve">
280286
<value>Date and Time</value>
281287
</data>
@@ -453,6 +459,9 @@ Would you like to continue ?</value>
453459
<data name="AtomicConditionDescription_ComparisonElement_Size" xml:space="preserve">
454460
<value>Size</value>
455461
</data>
462+
<data name="AtomicConditionDescription_ComparisonElement_Name" xml:space="preserve">
463+
<value>Name</value>
464+
</data>
456465
<data name="AtomicConditionDescription_ConditionOperator_Equals" xml:space="preserve">
457466
<value>Equals</value>
458467
</data>

src/ByteSync.Client/Business/Actions/Local/AtomicCondition.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,22 @@ public AtomicCondition()
1111

1212
}
1313

14-
public AtomicCondition(DataPart source, ComparisonElement comparisonElement, ConditionOperatorTypes conditionOperator, DataPart? destination)
14+
public AtomicCondition(DataPart source, ComparisonProperty comparisonProperty, ConditionOperatorTypes conditionOperator, DataPart? destination)
1515
{
1616
Source = source;
17-
ComparisonElement = comparisonElement;
17+
ComparisonProperty = comparisonProperty;
1818
ConditionOperator = conditionOperator;
1919
Destination = destination;
2020
}
2121

2222
public DataPart Source { get; set; } = null!;
23-
public ComparisonElement ComparisonElement { get; set; }
23+
24+
public ComparisonProperty ComparisonProperty { get; set; }
25+
2426
public ConditionOperatorTypes ConditionOperator { get; set; }
25-
26-
/// <summary>
27-
/// Peut être nulle quand on travaille sur la Size ou la DateTime
28-
/// </summary>
27+
2928
public DataPart? Destination { get; set; }
3029

31-
3230
public string? SourceName
3331
{
3432
get
@@ -46,6 +44,10 @@ public string? DestinationName
4644
}
4745

4846
public int? Size { get; set; }
47+
4948
public SizeUnits? SizeUnit { get; set; }
49+
5050
public DateTime? DateTime { get; set; }
51+
52+
public string? NamePattern { get; set; }
5153
}

src/ByteSync.Client/Business/Actions/Loose/LooseAtomicCondition.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public class LooseAtomicCondition : IAtomicCondition
1212

1313
public int? Size { get; set; }
1414

15-
public ComparisonElement ComparisonElement { get; set; }
15+
public ComparisonProperty ComparisonProperty { get; set; }
1616

1717
public ConditionOperatorTypes ConditionOperator { get; set; }
1818

1919
public DateTime? DateTime { get; set; }
20-
20+
2121
public SizeUnits? SizeUnit { get; set; }
22+
23+
public string? NamePattern { get; set; }
2224
}

src/ByteSync.Client/Business/Comparisons/ComparisonElement.cs renamed to src/ByteSync.Client/Business/Comparisons/ComparisonProperty.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
namespace ByteSync.Business.Comparisons;
22

3-
public enum ComparisonElement
3+
public enum ComparisonProperty
44
{
55
Content = 1,
66
Date = 2,
77
Size = 3,
88
Presence = 4,
9+
Name = 5,
910
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using ByteSync.Common.Business.Misc;
2+
using ByteSync.Interfaces.Controls.Applications;
3+
4+
namespace ByteSync.Helpers;
5+
6+
public static class EnvironmentServiceExtensions
7+
{
8+
public static bool IsInstalledFromWindowsStore(this IEnvironmentService environmentService)
9+
{
10+
if (environmentService.OSPlatform == OSPlatforms.Windows)
11+
{
12+
if (environmentService.AssemblyFullName.Contains("\\Program Files\\WindowsApps\\") ||
13+
environmentService.AssemblyFullName.Contains("\\Program Files (x86)\\WindowsApps\\"))
14+
{
15+
return true;
16+
}
17+
}
18+
19+
return false;
20+
}
21+
}

src/ByteSync.Client/Interfaces/Business/Actions/IAtomicCondition.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ public interface IAtomicCondition
1111

1212
public int? Size { get; set; }
1313

14-
public ComparisonElement ComparisonElement { get; set; }
14+
public ComparisonProperty ComparisonProperty { get; set; }
1515

1616
public ConditionOperatorTypes ConditionOperator { get; set; }
1717

1818
public DateTime? DateTime { get; set; }
19-
19+
2020
public SizeUnits? SizeUnit { get; set; }
21+
22+
public string? NamePattern { get; set; }
2123
}

src/ByteSync.Client/Services/Comparisons/DescriptionBuilders/AtomicConditionDescriptionBuilder.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,39 @@ public override void AppendDescription(StringBuilder stringBuilder, IAtomicCondi
3535
{
3636
stringBuilder.Append($"{atomicCondition.DateTime:g}");
3737
}
38+
else if (atomicCondition.NamePattern != null)
39+
{
40+
stringBuilder.Append($"{atomicCondition.NamePattern}");
41+
}
3842
}
3943
}
4044

4145
private string GetComparisonElement(IAtomicCondition atomicCondition)
4246
{
4347
var result = "";
4448

45-
switch (atomicCondition.ComparisonElement)
49+
switch (atomicCondition.ComparisonProperty)
4650
{
47-
case ComparisonElement.Content:
51+
case ComparisonProperty.Content:
4852
result = LocalizationService[nameof(Resources.AtomicConditionDescription_ComparisonElement_Content)];
4953
break;
50-
case ComparisonElement.Date:
54+
case ComparisonProperty.Date:
5155
result = LocalizationService[nameof(Resources.AtomicConditionDescription_ComparisonElement_Date)];
5256
break;
53-
case ComparisonElement.Size:
57+
case ComparisonProperty.Size:
5458
result = LocalizationService[nameof(Resources.AtomicConditionDescription_ComparisonElement_Size)];
5559
break;
56-
case ComparisonElement.Presence:
60+
case ComparisonProperty.Presence:
5761
result = LocalizationService[nameof(Resources.AtomicConditionDescription_ComparisonElement_Presence)];
5862
break;
63+
case ComparisonProperty.Name:
64+
result = LocalizationService[nameof(Resources.AtomicConditionDescription_ComparisonElement_Name)];
65+
break;
5966
}
6067

6168
if (result.IsEmpty())
6269
{
63-
throw new ApplicationException("Unknown atomicCondition.ComparisonElement " + atomicCondition.ComparisonElement);
70+
throw new ApplicationException("Unknown atomicCondition.ComparisonElement " + atomicCondition.ComparisonProperty);
6471
}
6572

6673

0 commit comments

Comments
 (0)