public void LaunchIssueTrackerInfoFetchOperation() { CancelIssueTrackerFetchOperation(); DisposeIssueTrackerAdapter(); IssueTrackerAdapter = GetIssueTrackerAdapter(); UpdateUI(); if (IssueTrackerAdapter == null) { return; } var scheduler = NewThreadScheduler.Default; var runningIssuesObservable = IssueTrackerAdapter.GetActiveIssues(scheduler); var cancellationToken = new CompositeDisposable { runningIssuesObservable.OnErrorResumeNext(Observable.Empty <Issue>() .DelaySubscription(TimeSpan.FromSeconds(10))) .Retry() .Repeat() .ObserveOn(SynchronizationContext.Current) .Subscribe(OnIssueInfoUpdate) }; IssueStatusCancellationToken = cancellationToken; }
private void DisposeIssueTrackerAdapter() { if (IssueTrackerAdapter != null) { IssueTrackerAdapter.Dispose(); IssueTrackerAdapter = null; } }
public IIssueTrackerCredentials GetIssueTrackerCredentials(IIssueTrackerAdapter IssueTrackerAdapter, bool useStoredCredentialsIfExisting) { lock (IssueTrackerCredentialsLock) { IIssueTrackerCredentials IssueTrackerCredentials = new IssueTrackerCredentials(); const string CredentialsConfigName = "Credentials"; const string UsernameKey = "Username"; const string PasswordKey = "Password"; using (var stream = GetIssueTrackerOptionsIsolatedStorageStream(IssueTrackerAdapter, FileAccess.Read, FileShare.Read)) { if (stream.Position < stream.Length) { var protectedData = new byte[stream.Length]; stream.Read(protectedData, 0, (int)stream.Length); byte[] unprotectedData = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser); using (var memoryStream = new MemoryStream(unprotectedData)) { ConfigFile credentialsConfig = new ConfigFile("", false); using (var textReader = new StreamReader(memoryStream, Encoding.UTF8)) { credentialsConfig.LoadFromString(textReader.ReadToEnd()); } ConfigSection section = credentialsConfig.FindConfigSection(CredentialsConfigName); if (section != null) { IssueTrackerCredentials.Username = section.GetValue(UsernameKey); IssueTrackerCredentials.Password = section.GetValue(PasswordKey); if (useStoredCredentialsIfExisting) { return(IssueTrackerCredentials); } } } } } if (!useStoredCredentialsIfExisting) { IssueTrackerCredentials = ShowIssueTrackerCredentialsForm(IssueTrackerAdapter.UniqueKey, IssueTrackerCredentials); if (IssueTrackerCredentials != null) { ConfigFile credentialsConfig = new ConfigFile("", true); ConfigSection section = credentialsConfig.FindOrCreateConfigSection(CredentialsConfigName); section.SetValue(UsernameKey, IssueTrackerCredentials.Username); section.SetValue(PasswordKey, IssueTrackerCredentials.Password); using (var stream = GetIssueTrackerOptionsIsolatedStorageStream(IssueTrackerAdapter, FileAccess.Write, FileShare.None)) { using (var memoryStream = new MemoryStream()) { using (var textWriter = new StreamWriter(memoryStream, Encoding.UTF8)) { textWriter.Write(credentialsConfig.GetAsString()); } var protectedData = ProtectedData.Protect(memoryStream.ToArray(), null, DataProtectionScope.CurrentUser); stream.Write(protectedData, 0, protectedData.Length); } } return(IssueTrackerCredentials); } } return(null); } }
private static IsolatedStorageFileStream GetIssueTrackerOptionsIsolatedStorageStream(IIssueTrackerAdapter IssueTrackerAdapter, FileAccess fileAccess, FileShare fileShare) { var fileName = string.Format("IssueTracker-{0}.options", Convert.ToBase64String(Encoding.UTF8.GetBytes(IssueTrackerAdapter.UniqueKey))); return(new IsolatedStorageFileStream(fileName, FileMode.OpenOrCreate, fileAccess, fileShare)); }