@@ -192,6 +192,8 @@ class GitsyncService {
192192 }
193193
194194 bool synced = false ;
195+ bool ? pullResult = null ;
196+ bool ? pushResult = null ;
195197
196198 if (! await hasNetworkConnection ()) {
197199 Workmanager ().registerOneOffTask (
@@ -203,77 +205,86 @@ class GitsyncService {
203205 return ;
204206 }
205207
206- Logger .gmLog (type: LogType .Sync , "Start Pull Repo" );
207- final pullResult = await GitManager .downloadChanges (repomanRepoindex, settingsManager, () {
208- synced = true ;
209- _displaySyncMessage (settingsManager, s.syncStartPull);
210- });
211-
212- switch (pullResult) {
213- case null :
214- {
215- Logger .gmLog (type: LogType .Sync , "Pull Repo Failed" );
216- if (! await hasNetworkConnection ()) {
217- Workmanager ().registerOneOffTask (
218- "$networkScheduledSyncKey $repomanRepoindex " ,
219- networkScheduledSyncKey,
220- inputData: {repoIndex: repomanRepoindex},
221- constraints: Constraints (networkType: NetworkType .connected),
222- );
208+ final optimisedSyncFlag = await settingsManager.getBool (StorageKey .setman_optimisedSyncExperimental);
209+ final recommendedAction = await GitManager .getRecommendedAction ();
210+
211+ if (optimisedSyncFlag && recommendedAction == null ) return ;
212+
213+ if (! optimisedSyncFlag || (recommendedAction == 0 || recommendedAction == 1 )) {
214+ Logger .gmLog (type: LogType .Sync , "Start Pull Repo" );
215+ pullResult = await GitManager .downloadChanges (repomanRepoindex, settingsManager, () {
216+ synced = true ;
217+ _displaySyncMessage (settingsManager, s.syncStartPull);
218+ });
219+
220+ switch (pullResult) {
221+ case null :
222+ {
223+ Logger .gmLog (type: LogType .Sync , "Pull Repo Failed" );
224+ if (! await hasNetworkConnection ()) {
225+ Workmanager ().registerOneOffTask (
226+ "$networkScheduledSyncKey $repomanRepoindex " ,
227+ networkScheduledSyncKey,
228+ inputData: {repoIndex: repomanRepoindex},
229+ constraints: Constraints (networkType: NetworkType .connected),
230+ );
231+ return ;
232+ }
223233 return ;
224234 }
225- return ;
226- }
227- case true :
228- {
229- Logger .gmLog (type: LogType .Sync , "Pull Complete" );
230- }
231- case false :
232- {
233- Logger .gmLog (type: LogType .Sync , "Pull Not Required" );
234- }
235- }
235+ case true :
236+ {
237+ Logger .gmLog (type: LogType .Sync , "Pull Complete" );
238+ }
239+ case false :
240+ {
241+ Logger .gmLog (type: LogType .Sync , "Pull Not Required" );
242+ }
243+ }
236244
237- if (! await hasNetworkConnection ()) {
238- Workmanager ().registerOneOffTask (
239- "$networkScheduledSyncKey $repomanRepoindex " ,
240- networkScheduledSyncKey,
241- inputData: {repoIndex: repomanRepoindex},
242- constraints: Constraints (networkType: NetworkType .connected),
243- );
244- return ;
245+ if (! await hasNetworkConnection ()) {
246+ Workmanager ().registerOneOffTask (
247+ "$networkScheduledSyncKey $repomanRepoindex " ,
248+ networkScheduledSyncKey,
249+ inputData: {repoIndex: repomanRepoindex},
250+ constraints: Constraints (networkType: NetworkType .connected),
251+ );
252+ return ;
253+ }
245254 }
246255
247- Logger .gmLog (type: LogType .Sync , "Start Push Repo" );
248- final pushResult = await GitManager .uploadChanges (repomanRepoindex, settingsManager, () {
249- if (! synced) {
250- _displaySyncMessage (settingsManager, s.syncStartPush);
251- }
252- });
253-
254- switch (pushResult) {
255- case null :
256- {
257- Logger .gmLog (type: LogType .Sync , "Push Repo Failed" );
258- if (! await hasNetworkConnection ()) {
259- Workmanager ().registerOneOffTask (
260- "$networkScheduledSyncKey $repomanRepoindex " ,
261- networkScheduledSyncKey,
262- inputData: {repoIndex: repomanRepoindex},
263- constraints: Constraints (networkType: NetworkType .connected),
264- );
256+ if (! optimisedSyncFlag || recommendedAction == 2 || recommendedAction == 3 ) {
257+ Logger .gmLog (type: LogType .Sync , "Start Push Repo" );
258+ pushResult = await GitManager .uploadChanges (repomanRepoindex, settingsManager, () {
259+ if (! synced) {
260+ _displaySyncMessage (settingsManager, s.syncStartPush);
261+ }
262+ });
263+
264+ switch (pushResult) {
265+ case null :
266+ {
267+ Logger .gmLog (type: LogType .Sync , "Push Repo Failed" );
268+ if (! await hasNetworkConnection ()) {
269+ Workmanager ().registerOneOffTask (
270+ "$networkScheduledSyncKey $repomanRepoindex " ,
271+ networkScheduledSyncKey,
272+ inputData: {repoIndex: repomanRepoindex},
273+ constraints: Constraints (networkType: NetworkType .connected),
274+ );
275+ return ;
276+ }
265277 return ;
266278 }
267- return ;
268- }
269- case true :
270- {
271- Logger .gmLog (type: LogType .Sync , "Push Complete" );
272- }
273- case false :
274- {
275- Logger .gmLog (type: LogType .Sync , "Push Not Required" );
276- }
279+ case true :
280+ {
281+ Logger .gmLog (type: LogType .Sync , "Push Complete" );
282+ }
283+ case false :
284+ {
285+ Logger .gmLog (type: LogType .Sync , "Push Not Required" );
286+ }
287+ }
277288 }
278289
279290 if (! (pushResult == true || pullResult == true )) {
0 commit comments