Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 private void DisposeIssueTrackerAdapter()
 {
     if (IssueTrackerAdapter != null)
     {
         IssueTrackerAdapter.Dispose();
         IssueTrackerAdapter = null;
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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));
        }