From b2c4c5d71ba5ce2d31505eb11f734dd71e19e804 Mon Sep 17 00:00:00 2001
From: Patrick Simpson
Date: Wed, 9 May 2018 11:11:26 +0300
Subject: [PATCH] [KOE-76] Added Z-Push server version check for custom sync
time frame
---
.../AcaciaZPushPlugin.csproj | 1 +
.../Features/SyncState/FeatureSyncState.cs | 4 +
.../Features/SyncState/SyncStateDialog.cs | 6 +-
.../Features/SyncState/SyncStateDialog.resx | 153 +++++++++++-------
.../AcaciaZPushPlugin/ZPush/ZPushAccount.cs | 4 +-
.../AcaciaZPushPlugin/ZPush/ZPushVersion.cs | 63 ++++++++
6 files changed, 174 insertions(+), 57 deletions(-)
create mode 100644 src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushVersion.cs
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
index 9a3fc86..57fb0a8 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
@@ -470,6 +470,7 @@
+
Form
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/FeatureSyncState.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/FeatureSyncState.cs
index 93c69d3..5063508 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/FeatureSyncState.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/FeatureSyncState.cs
@@ -737,6 +737,10 @@ namespace Acacia.Features.SyncState
return new SyncStateImpl(this, account == null ? Watcher.Accounts.GetAccounts().ToArray() : new ZPushAccount[] { account });
}
+ public bool SupportsSyncTimeFrame(ZPushAccount account)
+ {
+ return account?.ZPushVersion.IsAtLeast(2, 4) == true;
+ }
private class SetDeviceOptionsRequest : SoapRequest
{
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.cs
index a27609c..bccaa5e 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.cs
@@ -73,7 +73,11 @@ namespace Acacia.Features.SyncState
private void comboAccounts_SelectedIndexChanged(object sender, EventArgs e)
{
_syncState = _feature.GetSyncState(SelectedAccount);
- _labelTimeFrame.Enabled = comboTimeFrame.Enabled = SelectedAccount != null;
+
+ // Check if time frame should be visible
+ // It is visible if a single account is selected that supports it
+ bool haveSyncTimeFrame = _feature.SupportsSyncTimeFrame(SelectedAccount);
+ _labelTimeFrame.Visible = comboTimeFrame.Visible = buttonApplyTimeFrame.Visible = buttonResetTimeFrame.Visible = haveSyncTimeFrame;
if (SelectedAccount == null)
comboTimeFrame.SelectedIndex = 0;
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.resx b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.resx
index 54b2bbf..d3b1824 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.resx
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/SyncState/SyncStateDialog.resx
@@ -139,13 +139,10 @@
- 2, 344
-
-
- 2, 2, 2, 2
+ 3, 541
- 333, 35
+ 500, 42
0
@@ -181,10 +178,13 @@
NoControl
- 3, 59
+ 4, 88
+
+
+ 4, 0, 4, 0
- 77, 25
+ 114, 40
5
@@ -214,10 +214,13 @@
Fill
- 3, 0
+ 4, 0
+
+
+ 4, 0, 4, 0
- 77, 27
+ 114, 38
0
@@ -250,10 +253,13 @@
All Z-Push accounts
- 86, 3
+ 126, 5
+
+
+ 4, 5, 4, 5
- 242, 21
+ 368, 28
0
@@ -277,10 +283,13 @@
Fill
- 3, 27
+ 4, 38
+
+
+ 4, 0, 4, 0
- 77, 32
+ 114, 50
2
@@ -307,10 +316,13 @@
Fill
- 86, 30
+ 126, 43
+
+
+ 4, 5, 4, 5
- 242, 26
+ 368, 40
1
@@ -334,16 +346,16 @@
Fill
- 86, 62
+ 126, 93
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 242, 19
+ 368, 30
2
@@ -367,10 +379,13 @@
Fill
- 3, 84
+ 4, 128
+
+
+ 4, 0, 4, 0
- 77, 28
+ 114, 43
9
@@ -430,10 +445,13 @@
6 months
- 3, 3
+ 4, 5
+
+
+ 4, 5, 4, 5
- 102, 21
+ 160, 28
0
@@ -451,13 +469,13 @@
0
- 181, 2
+ 276, 3
- 3, 2, 3, 3
+ 4, 3, 4, 5
- 64, 23
+ 96, 35
2
@@ -478,13 +496,13 @@
1
- 111, 2
+ 172, 3
- 3, 2, 3, 3
+ 4, 3, 4, 5
- 64, 23
+ 96, 35
1
@@ -508,7 +526,7 @@
Fill
- 83, 84
+ 122, 128
0, 0, 0, 0
@@ -517,7 +535,7 @@
1
- 248, 28
+ 376, 43
3
@@ -544,10 +562,13 @@
Fill
- 3, 132
+ 4, 202
+
+
+ 4, 0, 4, 0
- 77, 35
+ 114, 50
8
@@ -586,13 +607,16 @@
NoControl
- 86, 135
+ 126, 207
+
+
+ 4, 5, 4, 5
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 242, 29
+ 368, 40
4
@@ -628,13 +652,16 @@
NoControl
- 86, 170
+ 126, 257
+
+
+ 4, 5, 4, 5
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 242, 29
+ 368, 40
5
@@ -670,13 +697,16 @@
NoControl
- 86, 205
+ 126, 307
+
+
+ 4, 5, 4, 5
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 242, 29
+ 368, 40
6
@@ -712,13 +742,16 @@
NoControl
- 86, 240
+ 126, 357
+
+
+ 4, 5, 4, 5
- 3, 3, 3, 3
+ 4, 5, 4, 5
- 242, 29
+ 368, 40
7
@@ -742,13 +775,16 @@
Fill
- 86, 272
+ 126, 402
+
+
+ 4, 0, 4, 0
- 0, 6, 0, 0
+ 0, 9, 0, 0
- 242, 64
+ 368, 126
4
@@ -769,13 +805,16 @@
Fill
- 3, 3
+ 4, 5
+
+
+ 4, 5, 4, 5
11
- 331, 336
+ 498, 528
1
@@ -793,7 +832,7 @@
1
- <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="_labelRemaining" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_labelAccount" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="comboAccounts" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelProgress" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="progress" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textRemaining" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelTimeFrame" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_layoutTimeFrameButtons" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelResync" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonGAB" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonSignatures" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonServerData" Row="8" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonFullResync" Row="9" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelResyncOption" Row="10" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100" /></TableLayoutSettings>
+ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="_labelRemaining" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_labelAccount" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="comboAccounts" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelProgress" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="progress" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="textRemaining" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelTimeFrame" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="_layoutTimeFrameButtons" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelResync" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonGAB" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonSignatures" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonServerData" Row="8" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="buttonFullResync" Row="9" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="_labelResyncOption" Row="10" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,31,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Percent,100" /></TableLayoutSettings>
Fill
@@ -801,11 +840,14 @@
0, 0
+
+ 4, 5, 4, 5
+
2
- 337, 381
+ 506, 586
0
@@ -829,13 +871,16 @@
True
- 6, 13
+ 9, 20
True
- 337, 381
+ 506, 586
+
+
+ 4, 5, 4, 5
CenterParent
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushAccount.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushAccount.cs
index 4e6bc4b..f1972ae 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushAccount.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushAccount.cs
@@ -121,7 +121,7 @@ namespace Acacia.ZPush
private set;
}
- public string ZPushVersion
+ public ZPushVersion ZPushVersion
{
get;
private set;
@@ -144,7 +144,7 @@ namespace Acacia.ZPush
Capabilities = response.Capabilities;
// TODO: move these properties to the features? Though it's nice to have them here for the debug dialog
GABFolder = response.GABName;
- ZPushVersion = response.ZPushVersion;
+ ZPushVersion = ZPushVersion.FromString(response.ZPushVersion);
ServerSignaturesHash = response.SignaturesHash;
Confirmed = Capabilities == null ? ConfirmationType.IsNotZPush : ConfirmationType.IsZPush;
Logger.Instance.Info(this, "ZPush confirmation: {0} -> {1}, {2}", Confirmed, Capabilities, GABFolder);
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushVersion.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushVersion.cs
new file mode 100644
index 0000000..1d89da0
--- /dev/null
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/ZPush/ZPushVersion.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Acacia.ZPush
+{
+ public class ZPushVersion
+ {
+ private readonly int major;
+ private readonly int minor;
+ private readonly string version;
+
+ private ZPushVersion(int major, int minor, string version)
+ {
+ this.major = major;
+ this.minor = minor;
+ this.version = version;
+ }
+
+ public override string ToString()
+ {
+ return version;
+ }
+
+ public override bool Equals(object obj)
+ {
+ ZPushVersion rhs = obj as ZPushVersion;
+ if (rhs == null)
+ return false;
+ return version.Equals(rhs.version);
+ }
+
+ public override int GetHashCode()
+ {
+ return version.GetHashCode();
+ }
+
+ public static ZPushVersion FromString(string version)
+ {
+ if (string.IsNullOrWhiteSpace(version))
+ return null;
+
+ string[] parts = version.Split('.');
+ try
+ {
+ int major = int.Parse(parts[0]);
+ int minor = int.Parse(parts[1]);
+ return new ZPushVersion(major, minor, version);
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ public bool IsAtLeast(int major, int minor)
+ {
+ return (this.major > major) || (this.major == major && this.minor >= minor);
+ }
+ }
+}