public bool Resync(ResyncOption option) { if (!CanResync(option)) { return(true); } switch (option) { case ResyncOption.GAB: if (IsSyncing) { // Already syncing, resync GAB asynchronously _featureGAB.FullResync(null, _accounts); // Cannot resync again until the dialog is reopened _canResync[(int)ResyncOption.GAB] = false; return(false); } else { ProgressDialog.Execute("GABSync", (ct, tracker) => { _featureGAB.FullResync(tracker, _accounts); return(0); } ); return(true); } case ResyncOption.Signatures: ProgressDialog.Execute("SignaturesSync", (ct) => { _featureSignatures.Resync(_accounts); return(0); } ); return(true); case ResyncOption.ServerData: ProgressDialog.Execute("ServerSync", (ct) => { ThisAddIn.Instance.Watcher.Sync.ExecuteTasks(_accounts); return(0); } ); return(true); case ResyncOption.Full: IRestarter restarter = ThisAddIn.Instance.Restarter(); restarter.ResyncAccounts(_accounts); restarter.Restart(); return(true); } return(true); }