Example #1
0
        public static bool NeedsUpdate(string latest, string current, ref BuildNumber latestBuildNumber, ref BuildNumber currentBuildNumber)
        {
            string[] latestSplit  = latest.Split('.');
            string[] currentSplit = current.Split('.');
            try {
                latestBuildNumber.Major     = int.Parse(latestSplit[0]);
                latestBuildNumber.Minor     = int.Parse(latestSplit[1]);
                latestBuildNumber.Build     = int.Parse(latestSplit[2]);
                latestBuildNumber.Revision  = int.Parse(latestSplit[3]);
                currentBuildNumber.Major    = int.Parse(currentSplit[0]);
                currentBuildNumber.Minor    = int.Parse(currentSplit[1]);
                currentBuildNumber.Build    = int.Parse(currentSplit[2]);
                currentBuildNumber.Revision = int.Parse(currentSplit[3]);
            }
            catch (Exception) {
                return(false);
            }

            if (latestBuildNumber.Major <= currentBuildNumber.Major)
            {
                if (latestBuildNumber.Minor <= currentBuildNumber.Minor)
                {
                    if (latestBuildNumber.Build == currentBuildNumber.Build)
                    {
                        return(latestBuildNumber.Revision > currentBuildNumber.Revision);
                    }

                    return(latestBuildNumber.Build > currentBuildNumber.Build);
                }

                return(true);
            }

            return(true);
        }
Example #2
0
 public override void DumpBody(XmlWriter writer)
 {
     writer.WriteElementString("product-id", ProductId.ToString());
     writer.WriteElementString("edition", Edition.ToString());
     writer.WriteElementString("major-version", MajorVersion.ToString());
     writer.WriteElementString("minor-version", MinorVersion.ToString());
     writer.WriteElementString("build-number", BuildNumber.ToString());
     writer.WriteElementString("build-date", BuildDate.ToString());
 }
Example #3
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = Version.GetHashCode();
         hashCode = (hashCode * 397) ^ BuildNumber.GetHashCode();
         hashCode = (hashCode * 397) ^ Commit.GetHashCode();
         return(hashCode);
     }
 }
Example #4
0
        public LicenseManager(ServerStore serverStore)
        {
            _serverStore = serverStore;

            _buildInfo = new BuildNumber
            {
                BuildVersion   = ServerVersion.Build,
                ProductVersion = ServerVersion.Version,
                CommitHash     = ServerVersion.CommitHash,
                FullVersion    = ServerVersion.FullVersion
            };
        }
Example #5
0
 public BuildNumber2()
 {
     using (var store = new DocumentStore())
     {
         #region build_number_2
         BuildNumber buildNumber = store
                                   .DatabaseCommands
                                   .GlobalAdmin
                                   .GetBuildNumber();
         #endregion
     }
 }
Example #6
0
        public int CompareTo(VersionInfo other)
        {
            int majorCompare = Major.CompareTo(other?.Major);

            if (majorCompare != 0)
            {
                return(majorCompare);
            }

            int minorCompare = Minor.CompareTo(other?.Minor);

            if (minorCompare != 0)
            {
                return(minorCompare);
            }

            int patchCompare = Patch.CompareTo(other?.Patch);

            if (patchCompare != 0)
            {
                return(patchCompare);
            }

            int revisionCompare = BuildNumber.CompareTo(other?.BuildNumber);

            if (revisionCompare != 0)
            {
                return(revisionCompare);
            }

            if (BuildNumber == 0 && other?.BuildNumber == 0)
            {
                if (!IsBasedOnDevMark && other.IsBasedOnDevMark)
                {
                    return(1);
                }
                else if (IsBasedOnDevMark && !other.IsBasedOnDevMark)
                {
                    return(-1);
                }
            }

            string preReleaseTag      = PreReleaseTag ?? string.Empty;
            string otherPreReleaseTag = other?.PreReleaseTag ?? string.Empty;

            if (preReleaseTag != otherPreReleaseTag)
            {
                return(preReleaseTag.CompareTo(otherPreReleaseTag));
            }

            return(0);
        }
 public static bool TryParse(string input, out BuildNumber buildNumber)
 {
     try
     {
         buildNumber = Parse(input);
         return(true);
     }
     catch
     {
         buildNumber = null;
         return(false);
     }
 }
Example #8
0
        public static void Reset()
        {
            var currentBuildNumber = BuildNumber.Get();
            var result             = EditorUtility.DisplayDialog("Reset Build Number?",
                                                                 $"Are you sure you want to reset build number?\n\nCurrent build number: {currentBuildNumber}",
                                                                 "Reset",
                                                                 "Cancel");

            if (result)
            {
                BuildNumberProcessor.Reset();
            }
        }
 /// <summary>
 /// Gets the build number object corresponding to the project + version pair. Outputs the build tracker object and the version text's input build number.
 /// Returns whether the finding was successful
 /// </summary>
 /// <param name="project">The project name.</param>
 /// <param name="version">The version text.</param>
 /// <param name="foundNumber">The found build tracker.</param>
 /// <param name="userBuild">The user build number.</param>
 /// <returns>Whether a build was found.</returns>
 public static bool TryGetBuildFor(string project, string version, out BuildNumber foundNumber, out int userBuild)
 {
     foreach (BuildNumber number in BuildNumbers)
     {
         if (number.BelongsTo(project, version, out userBuild))
         {
             foundNumber = number;
             return(true);
         }
     }
     foundNumber = null;
     userBuild   = 0;
     return(false);
 }
Example #10
0
        /// <summary>
        /// Executes the task - initialize the build number and package version.
        /// Build number is increased and the updated package version information is stored back to version.props file
        /// </summary>
        /// <returns>True</returns>
        public override bool Execute()
        {
            if (DebugTasks)
            {
                //Wait for debugger
                Log.LogMessage(
                    MessageImportance.High,
                    $"Debugging task {GetType().Name}, set the breakpoint and attach debugger to process with PID = {System.Diagnostics.Process.GetCurrentProcess().Id}");

                while (!System.Diagnostics.Debugger.IsAttached)
                {
                    Thread.Sleep(1000);
                }
            }

            //increase the build number
            BuildNumber = BuildNumber + 1;

            //process the package version
            var ver = $"{Major}.{Minor}.{Patch}";

            var dt = System.DateTime.Now.ToString("yyMMddHHmmss");

            if (Configuration.ToLower() != "release")
            {
                PackageVersionShort = $"{ver}-dev.{BuildNumber}.{dt}";
                PackageVersionFull  = $"{PackageVersionShort}+{GitCommits}.{GitBranch}.{GitCommit}";
            }
            else
            {
                PackageVersionShort = ver;
                PackageVersionFull  = $"{PackageVersionShort}+{BuildNumber}.{dt}.{GitBranch}.{GitCommit}";
            }

            //update version file
            var document    = XDocument.Load(VersionFile);
            var projectNode = GetOrCreateElement(document, "Project");

            SetProjectPropertyNode(projectNode, "RadBuild", BuildNumber.ToString());
            SetProjectPropertyNode(projectNode, "PackageVersionShort", PackageVersionShort);
            SetProjectPropertyNode(projectNode, "PackageVersionFull", PackageVersionFull);
            SetProjectPropertyNode(projectNode, "GitCommit", GitCommit);
            SetProjectPropertyNode(projectNode, "GitBranch", GitBranch);

            File.WriteAllText(VersionFile, document.ToString());

            Log.LogMessage($@"Updated version file: version {Major}.{Minor}.{Patch}, package: {PackageVersionFull}, build #{BuildNumber} to {VersionFile}");

            return(true);
        }
Example #11
0
        public void SaveSettings()
        {
            Configuration c = ConfigurationManager.OpenExeConfiguration("hMailServer builder.exe");

            c.AppSettings.Settings["SourcePath"].Value     = SourcePath;
            c.AppSettings.Settings["BuildNumber"].Value    = BuildNumber.ToString();
            c.AppSettings.Settings["Version"].Value        = Version;
            c.AppSettings.Settings["VSPath"].Value         = VSPath;
            c.AppSettings.Settings["InnoSetupPath"].Value  = InnoSetupPath;
            c.AppSettings.Settings["SubversionPath"].Value = SubversionPath;
            c.AppSettings.Settings["MSBuildPath"].Value    = MSBuildPath;

            c.Save(ConfigurationSaveMode.Modified);
        }
Example #12
0
    public bool SaveToFile(string productCodeName, string versionCodeName)
    {
        var dirPath         = Path.Combine(AppGlobal.AppDataDirectory, productCodeName, versionCodeName);
        var XMLFilePath     = Path.Combine(dirPath, string.Format("{0}.{1}", CodeName, RelXMLExtension));
        var xDoc            = new XmlDocument();
        var declarationNode = xDoc.CreateXmlDeclaration("1.0", "", "");

        xDoc.AppendChild(declarationNode);
        var comment = xDoc.CreateComment(string.Format("This file contains information about {0} - {1}", CodeName, DisplayName));

        xDoc.AppendChild(comment);
        var     docRoot       = xDoc.CreateElement(xtRelease);
        XmlNode ndCodeName    = xDoc.CreateElement(xtReleaseCode),
                ndDisplayName = xDoc.CreateElement(xtDisplayName),
                ndDescription = xDoc.CreateElement(xtDescription),
                ndStage       = xDoc.CreateElement(xtStage),
                ndTargetDate  = xDoc.CreateElement(xtTargetDate),
                ndRiskLevel   = xDoc.CreateElement(xtRiskLevel),
                ndBuildNumber = xDoc.CreateElement(xtBuildNumber),
                ndReleaseType = xDoc.CreateElement(xtReleaseType);

        ndCodeName.InnerText    = CodeName;
        ndDisplayName.InnerText = DisplayName;
        ndDescription.InnerText = Description;
        ndStage.InnerText       = Stage.ToString();
        ndTargetDate.InnerText  = TargetDate;
        ndRiskLevel.InnerText   = Risk.ToString();
        ndBuildNumber.InnerText = BuildNumber.ToString();
        ndReleaseType.InnerText = ReleaseType.ToString();
        docRoot.AppendChild(ndCodeName);
        docRoot.AppendChild(ndDisplayName);
        docRoot.AppendChild(ndDescription);
        docRoot.AppendChild(ndStage);
        docRoot.AppendChild(ndTargetDate);
        docRoot.AppendChild(ndRiskLevel);
        docRoot.AppendChild(ndBuildNumber);
        docRoot.AppendChild(ndReleaseType);
        xDoc.AppendChild(docRoot);
        try
        {
            AppGlobal.CreateDirectory(dirPath);
            xDoc.Save(XMLFilePath);
            return(true);
        }
        catch (Exception e)
        {
            throw new Exception(string.Format("Unable to save Version {0} to file.{1}Message:{2}.", CodeName, Environment.NewLine, e.Message), e);
        }
    }
Example #13
0
 /// <summary>
 /// Tries to get the version information from the RavenDB server associated with the document store.
 /// </summary>
 /// <param name="documentStore">The document store.</param>
 /// <param name="buildNumber">If the server is reachable, this will output the data containing the product version and build number.</param>
 /// <param name="timeoutMilliseconds">Timeout in milliseconds.  Defaults to 5 seconds.</param>
 /// <returns>True if the server is online, false otherwise.</returns>
 public static bool TryGetServerVersion(this IDocumentStore documentStore, out BuildNumber buildNumber, int timeoutMilliseconds = 5000)
 {
     try
     {
         var task    = documentStore.AsyncDatabaseCommands.GetBuildNumberAsync();
         var success = task.Wait(timeoutMilliseconds);
         buildNumber = task.Result;
         return(success);
     }
     catch
     {
         buildNumber = null;
         return(false);
     }
 }
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (ZipCode != null ? ZipCode.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (StreetName != null ? StreetName.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (BuildNumber != null ? BuildNumber.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (District != null ? District.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Complement != null ? Complement.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (City != null ? City.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (State != null ? State.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Country != null ? Country.GetHashCode() : 0);
         return(hashCode);
     }
 }
Example #15
0
            public SampleAppsFixture()
            {
                BuildNumber = Environment.GetEnvironmentVariable(BUILD_NUMBER_VAR) ?? Guid.NewGuid().ToString();
                BuildNumber = BuildNumber.Replace('.', '_'); // Dots are invalid in Kubernetes service names

                var storageKey = Environment.GetEnvironmentVariable(STORAGE_KEY_VAR);

                Console.WriteLine("Using storage key \"{0}...\" from environment variable \"{1}\"", storageKey.Substring(0, 4), STORAGE_KEY_VAR);

                FolderName = "SampleApps-" + BuildNumber;

                fileShare = CloudStorageAccount.Parse($"DefaultEndpointsProtocol=https;AccountName={STORAGE_ACCOUNT_NAME};AccountKey={storageKey};EndpointSuffix=core.windows.net")
                            .CreateCloudFileClient()
                            .GetShareReference(STORAGE_SHARE_NAME);

                UploadToFileShare(fileShare, FolderName);

                KubernetesClientConfiguration config;
                string kubeConfig = Environment.GetEnvironmentVariable(KUBECONFIG_VAR);

                if (string.IsNullOrEmpty(kubeConfig))
                {
                    config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
                }
                else
                {
                    byte[] configByteArray = System.Text.Encoding.UTF8.GetBytes(kubeConfig);
                    using (var stream = new MemoryStream(configByteArray))
                    {
                        config = KubernetesClientConfiguration.BuildConfigFromConfigFile(stream);
                    }
                }
                Client = new Kubernetes(config);

                // Create a PV for our Azure File share and a corresponding claim if they don't already exist
                // If these fail, make sure that they don't already exist in the cluster: `kubectl delete -n default pvc,pv --all`
                storage      = Client.CreatePersistentVolume(Specs.BuildVolume.GetSpec(VOLUME_NAME, STORAGE_REQUESTED_CAPACITY, STORAGE_SHARE_NAME));
                storageClaim = Client.CreateNamespacedPersistentVolumeClaim(Specs.BuildVolumeClaim.GetSpec(STORAGE_REQUESTED_CAPACITY), NAMESPACE);
                Console.WriteLine("Created PersistentVolume and corresponding PersistentVolumeClaim");

                // Create the build pod
                var podSpec = Specs.BuildPod.GetSpec(BUILD_POD_NAME, VOLUME_NAME, storageClaim.Metadata.Name);

                BuildPod = k8sHelpers.CreatePodAndWait(Client, podSpec, NAMESPACE, k8sHelpers.IsPodRunning).Result;
                Console.WriteLine("Build pod is up & running");
            }
        /// <inheritdoc />
        public override bool Execute()
        {
            // BuildNumber + "0...0" + RevisionNumber.
            var stamp = BuildNumber.ToString(CultureInfo.InvariantCulture);

            var revisionString = RevisionNumber.ToString(CultureInfo.InvariantCulture);

            for (int i = 0; i < 5 - revisionString.Length; i++)
            {
                stamp += "0";
            }

            stamp += revisionString;

            BuildStamp = stamp;

            return(!Log.HasLoggedErrors);
        }
        private bool ObtenhaVersaoDoServidor(out BuildNumber buildNumber, int timeoutMilliseconds = 5000)
        {
            try
            {
                var task    = Maintenance.Server.SendAsync(new GetBuildNumberOperation());
                var success = task.Wait(timeoutMilliseconds);
                buildNumber = task.Result;

                return(success);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                buildNumber = null;

                return(false);
            }
        }
Example #18
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (TargetEnvId.Length != 0)
            {
                hash ^= TargetEnvId.GetHashCode();
            }
            if (ClientVersion.Length != 0)
            {
                hash ^= ClientVersion.GetHashCode();
            }
            if (ClientOs != 0)
            {
                hash ^= ClientOs.GetHashCode();
            }
            if (OsVersion.Length != 0)
            {
                hash ^= OsVersion.GetHashCode();
            }
            if (DeviceModel.Length != 0)
            {
                hash ^= DeviceModel.GetHashCode();
            }
            if (deviceInfoCase_ == DeviceInfoOneofCase.IosDeviceInfo)
            {
                hash ^= IosDeviceInfo.GetHashCode();
            }
            if (deviceInfoCase_ == DeviceInfoOneofCase.AndroidDeviceInfo)
            {
                hash ^= AndroidDeviceInfo.GetHashCode();
            }
            if (BuildNumber.Length != 0)
            {
                hash ^= BuildNumber.GetHashCode();
            }
            hash ^= (int)deviceInfoCase_;
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Example #19
0
        /// <summary>
        /// [EDITOR_ONLY] Sets build Number.
        /// </summary>
        /// <param name="buildNumber"></param>
        public void SetBuildNumber(int buildNumber)
        {
            switch (EditorUserBuildSettings.activeBuildTarget)
            {
            case BuildTarget.StandaloneWindows:
                break;

            case BuildTarget.StandaloneOSX:
                PlayerSettings.macOS.buildNumber = BuildNumber.ToString();
                break;

            case BuildTarget.Android:
                PlayerSettings.Android.bundleVersionCode = BuildNumber;
                break;

            case BuildTarget.iOS:
                PlayerSettings.iOS.buildNumber = BuildNumber.ToString();
                break;
            }
        }
Example #20
0
        public unsafe void SetBuildInfo(BuildNumber buildNumber)
        {
            using (_contextPool.AllocateOperationContext(out TransactionOperationContext context))
                using (var tx = context.OpenWriteTransaction())
                {
                    var table = tx.InnerTransaction.OpenTable(_licenseStorageSchema, LicenseInfoSchema.LicenseTree);

                    var id = context.GetLazyString(nameof(BuildNumber));
                    using (var json = context.ReadObject(buildNumber.ToJson(), nameof(BuildNumber), BlittableJsonDocumentBuilder.UsageMode.ToDisk))
                    {
                        using (table.Allocate(out TableValueBuilder tvb))
                        {
                            tvb.Add(id.Buffer, id.Size);
                            tvb.Add(json.BasePointer, json.Size);

                            table.Set(tvb);
                        }
                    }

                    tx.Commit();
                }
        }
Example #21
0
        // If your activity returns a value, derive from CodeActivity<TResult>
        // and return the value from the Execute method.
        protected override void Execute(CodeActivityContext context)
        {
            string buildNumber           = BuildNumber.Get(context);
            string smartFrameworkVersion = context.GetValue <string>(SmartFrameworkVersion);

            if (String.IsNullOrWhiteSpace(smartFrameworkVersion))
            {
                throw new ArgumentNullException("SmartFrameworkVersion", "In UpdateReferences.Execute, SmartFrameworkVersion is null or whitespace.");
            }

            Tuple <bool, string> versionValidation = Util.ValidateFrameworkVersion(smartFrameworkVersion);

            if (versionValidation.Item1)
            {
                List <string> solutionFiles = SolutionFiles.Get(context);
                Workspace     workspace     = Workspace.Get(context);
                ReferenceUpdateManager.UpdateReferences(solutionFiles, versionValidation.Item2, workspace);
            }
            else
            {
                string message = String.Format("{0} is not a valid Smart Framework version.", smartFrameworkVersion);
                throw new ArgumentException(message);
            }
        }
Example #22
0
        public static void LoadAvailablePlugins()
        {
            UpdateView.View.AvailableLoadingInformation.Visibility = Visibility.Visible;
            UpdateViewModel.Instance.AvailablePlugins.Clear();

            UpdateView.View.PluginUpdateSpinner.Spin = true;
            ShellView.View.PluginUpdateSpinner.Spin  = true;

            Func <bool> update = delegate {
                List <PluginSourceItem> pluginSourceList = new List <PluginSourceItem>();
                try {
                    var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://github.com/Icehunter/ffxivapp/raw/master/PACKAGES.json");
                    httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                    httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                    httpWebRequest.ContentType = "application/text; charset=utf-8";
                    httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                    using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) {
                        using (Stream response = httpResponse.GetResponseStream()) {
                            var responseText = string.Empty;
                            if (response != null)
                            {
                                using (var streamReader = new StreamReader(response)) {
                                    responseText = streamReader.ReadToEnd();
                                }
                            }

                            if (httpResponse.StatusCode == HttpStatusCode.OK || !string.IsNullOrWhiteSpace(responseText))
                            {
                                JArray jsonResult = JArray.Parse(responseText);
                                foreach (JToken jToken in jsonResult)
                                {
                                    bool enabled;
                                    bool.TryParse(jToken["Enabled"].ToString(), out enabled);
                                    var sourceURI = jToken["SourceURI"].ToString();

                                    if (enabled)
                                    {
                                        pluginSourceList.Add(
                                            new PluginSourceItem {
                                            Enabled   = true,
                                            Key       = Guid.NewGuid(),
                                            SourceURI = sourceURI,
                                        });
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex) {
                    Logging.Log(Logger, new LogItem(ex, true));
                }

                foreach (PluginSourceItem pluginSourceItem in UpdateViewModel.Instance.AvailableSources)
                {
                    if (pluginSourceList.Any(p => string.Equals(p.SourceURI, pluginSourceItem.SourceURI, Constants.InvariantComparer)))
                    {
                        continue;
                    }

                    pluginSourceList.Add(pluginSourceItem);
                }

                foreach (PluginSourceItem item in pluginSourceList)
                {
                    if (item.Enabled)
                    {
                        try {
                            var httpWebRequest = (HttpWebRequest)WebRequest.Create(item.SourceURI);
                            httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                            httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                            httpWebRequest.ContentType = "application/text; charset=utf-8";
                            httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                            using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) {
                                using (Stream response = httpResponse.GetResponseStream()) {
                                    var responseText = string.Empty;
                                    if (response != null)
                                    {
                                        using (var streamReader = new StreamReader(response)) {
                                            responseText = streamReader.ReadToEnd();
                                        }
                                    }

                                    if (httpResponse.StatusCode == HttpStatusCode.OK || !string.IsNullOrWhiteSpace(responseText))
                                    {
                                        JObject  jsonResult     = JObject.Parse(responseText);
                                        JToken   pluginInfo     = jsonResult["PluginInfo"];
                                        JToken[] pluginFiles    = pluginInfo["Files"].ToArray();
                                        var      pluginDownload = new PluginDownloadItem {
                                            Files = new List <PluginFile>(
                                                pluginFiles.Select(
                                                    pluginFile => new PluginFile {
                                                Location = pluginFile["Location"].ToString(),
                                                Name     = pluginFile["Name"].ToString(),
                                                Checksum = pluginFile["Checksum"] == null
                                                                       ? string.Empty
                                                                       : pluginFile["Checksum"].ToString(),
                                            })),
                                            Name         = pluginInfo["Name"].ToString(),
                                            FriendlyName = pluginInfo["FriendlyName"] == null
                                                               ? pluginInfo["Name"].ToString()
                                                               : pluginInfo["FriendlyName"].ToString(),
                                            Description = pluginInfo["Description"] == null
                                                              ? string.Empty
                                                              : pluginInfo["Description"].ToString(),
                                            SourceURI     = pluginInfo["SourceURI"].ToString(),
                                            LatestVersion = pluginInfo["Version"].ToString(),
                                        };
                                        PluginInstance found = App.Plugins.Loaded.Find(pluginDownload.Name);
                                        if (found != null)
                                        {
                                            var latest  = pluginDownload.LatestVersion;
                                            var current = found.Instance.Version;
                                            pluginDownload.CurrentVersion = current;
                                            pluginDownload.Status         = PluginStatus.Installed;
                                            var latestBuild  = new BuildNumber();
                                            var currentBuild = new BuildNumber();
                                            if (BuildUtilities.NeedsUpdate(latest, current, ref latestBuild, ref currentBuild))
                                            {
                                                pluginDownload.Status = PluginStatus.UpdateAvailable;
                                                AppViewModel.Instance.HasNewPluginUpdate = true;

                                                DispatcherHelper.Invoke(() => UpdateViewModel.Instance.AvailablePluginUpdates++);
                                            }
                                            else
                                            {
                                                if (!found.Loaded)
                                                {
                                                    pluginDownload.Status = PluginStatus.OutOfDate;
                                                }
                                            }
                                        }

                                        DispatcherHelper.Invoke(() => UpdateViewModel.Instance.AvailablePlugins.Add(pluginDownload));
                                    }
                                }
                            }
                        }
                        catch (Exception ex) {
                            Logging.Log(Logger, new LogItem(ex, true));
                        }
                    }
                }

                DispatcherHelper.Invoke(
                    delegate {
                    if (UpdateView.View.AvailableDG.Items.Count == UpdateViewModel.Instance.AvailablePlugins.Count)
                    {
                        UpdateView.View.AvailableLoadingInformation.Visibility = Visibility.Collapsed;
                    }

                    UpdateView.View.AvailableDG.Items.Refresh();

                    UpdateViewModel.Instance.SetupGrouping();

                    UpdateView.View.PluginUpdateSpinner.Spin = false;
                    ShellView.View.PluginUpdateSpinner.Spin  = false;
                });

                return(true);
            };

            update.BeginInvoke(delegate { }, update);
        }
Example #23
0
        /// <summary>
        /// </summary>
        public static void CheckUpdates()
        {
            try {
                Process[] updaters = Process.GetProcessesByName("FFXIVAPP.Updater");
                foreach (Process updater in updaters)
                {
                    updater.Kill();
                }

                if (File.Exists("FFXIVAPP.Updater.exe"))
                {
                    File.Delete("FFXIVAPP.Updater.Backup.exe");
                }
                else
                {
                    if (File.Exists("FFXIVAPP.Updater.Backup.exe"))
                    {
                        File.Move("FFXIVAPP.Updater.Backup.exe", "FFXIVAPP.Updater.exe");
                    }
                }
            }
            catch (Exception ex) {
                Logging.Log(Logger, new LogItem(ex, true));
            }

            Func <bool> update = delegate {
                var current = Assembly.GetExecutingAssembly().GetName().Version.ToString();
                AppViewModel.Instance.CurrentVersion = current;
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/Icehunter/ffxivapp/releases");
                httpWebRequest.UserAgent = "Icehunter-FFXIVAPP";
                httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                httpWebRequest.ContentType = "application/json; charset=utf-8";
                httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) {
                    using (Stream response = httpResponse.GetResponseStream()) {
                        var responseText = string.Empty;
                        if (response != null)
                        {
                            using (var streamReader = new StreamReader(response)) {
                                responseText = streamReader.ReadToEnd();
                            }
                        }

                        var latestBuild  = new BuildNumber();
                        var currentBuild = new BuildNumber();
                        if (httpResponse.StatusCode != HttpStatusCode.OK || string.IsNullOrWhiteSpace(responseText))
                        {
                            AppViewModel.Instance.HasNewVersion = false;
                            AppViewModel.Instance.LatestVersion = "Unknown";
                        }
                        else
                        {
                            JArray releases = JArray.Parse(responseText);
                            JToken release  = releases.FirstOrDefault(r => r?["target_commitish"].ToString() == "master");
                            var    latest   = release?["name"].ToString() ?? "Unknown";
                            latest = latest.Split(' ')[0];
                            AppViewModel.Instance.LatestVersion = latest;
                            switch (latest)
                            {
                            case "Unknown":
                                AppViewModel.Instance.HasNewVersion = false;
                                break;

                            default:
                                AppViewModel.Instance.DownloadUri   = string.Format("https://github.com/Icehunter/ffxivapp/releases/download/{0}/{0}.zip", latest);
                                AppViewModel.Instance.HasNewVersion = BuildUtilities.NeedsUpdate(latest, current, ref latestBuild, ref currentBuild);
                                break;
                            }

                            if (AppViewModel.Instance.HasNewVersion)
                            {
                                var title   = $"{AppViewModel.Instance.Locale["app_DownloadNoticeHeader"]} {AppViewModel.Instance.Locale["app_DownloadNoticeMessage"]}";
                                var message = new StringBuilder();
                                try {
                                    DateTime latestBuildDateTime  = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * latestBuild.Build + TimeSpan.TicksPerSecond * 2 * latestBuild.Revision));
                                    DateTime currentBuildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * currentBuild.Build + TimeSpan.TicksPerSecond * 2 * currentBuild.Revision));
                                    TimeSpan timeSpan             = latestBuildDateTime - currentBuildDateTime;
                                    if (timeSpan.TotalSeconds > 0)
                                    {
                                        message.AppendLine(string.Format("Missing {0} days, {1} hours and {2} seconds of updates.{3}", timeSpan.Days, timeSpan.Hours, timeSpan.Seconds));
                                    }
                                }
                                catch (Exception ex) {
                                    Logging.Log(Logger, new LogItem(ex, true));
                                }
                                finally {
                                    message.AppendLine(AppViewModel.Instance.Locale["app_AlwaysReadUpdatesMessage"]);
                                }

                                MessageBoxHelper.ShowMessageAsync(title, message.ToString(), () => ShellView.CloseApplication(true), delegate { });
                            }
                        }
                    }
                }

                return(true);
            };

            update.BeginInvoke(delegate { }, update);
        }
        internal override string GetRtfFormattedRule()
        {
            RichTextBox rTxtBx = new RichTextBox();

            if (UseMajorVersion || UseProductType)
            {
                if (ReverseRule)
                {
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.green, "<lar:");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, "Not");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.green, ">\r\n");
                }

                print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "<bar:");
                print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.red, "WindowsVersion");

                if (UseComparison)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " Comparison");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, Comparison);
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseMajorVersion)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " MajorVersion");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, MajorVersion.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseMinorVersion)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " MinorVersion");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, MinorVersion.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseBuildNumber)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " BuildNumber");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, BuildNumber.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseServicePackMajor)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " ServicePackMajor");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, ServicePackMajor.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseServicePackMinor)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " ServicePackMinor");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, ServicePackMinor.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                if (UseProductType)
                {
                    print(rTxtBx, GroupDisplayer.elementAndAttributeFont, GroupDisplayer.blue, " ProductType");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "=\"");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, ProductType.ToString());
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\"");
                }

                print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "/>");

                if (ReverseRule)
                {
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.black, "\r\n");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.green, "</lar:");
                    print(rTxtBx, GroupDisplayer.boldFont, GroupDisplayer.black, "Not");
                    print(rTxtBx, GroupDisplayer.normalFont, GroupDisplayer.green, ">");
                }
            }
            return(rTxtBx.Rtf);
        }
Example #25
0
        /// <summary>
        /// </summary>
        public static void CheckUpdates()
        {
            try
            {
                var updaters = Process.GetProcessesByName("FFXIVAPP.Updater");
                foreach (var updater in updaters)
                {
                    updater.Kill();
                }
                if (File.Exists("FFXIVAPP.Updater.exe"))
                {
                    File.Delete("FFXIVAPP.Updater.Backup.exe");
                }
                else
                {
                    if (File.Exists("FFXIVAPP.Updater.Backup.exe"))
                    {
                        File.Move("FFXIVAPP.Updater.Backup.exe", "FFXIVAPP.Updater.exe");
                    }
                }
            }
            catch (Exception ex)
            {
            }
            Func <bool> updateCheck = delegate
            {
                var current = Assembly.GetExecutingAssembly()
                              .GetName()
                              .Version.ToString();
                AppViewModel.Instance.CurrentVersion = current;
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/Icehunter/ffxivapp/releases");
                httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                httpWebRequest.ContentType = "application/json; charset=utf-8";
                httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                {
                    using (var response = httpResponse.GetResponseStream())
                    {
                        var responseText = "";
                        if (response != null)
                        {
                            using (var streamReader = new StreamReader(response))
                            {
                                responseText = streamReader.ReadToEnd();
                            }
                        }
                        var latestBuild  = new BuildNumber();
                        var currentBuild = new BuildNumber();
                        if (httpResponse.StatusCode != HttpStatusCode.OK || String.IsNullOrWhiteSpace(responseText))
                        {
                            AppViewModel.Instance.HasNewVersion = false;
                            AppViewModel.Instance.LatestVersion = "Unknown";
                        }
                        else
                        {
                            var releases = JArray.Parse(responseText);
                            var release  = releases.FirstOrDefault(r => r?["target_commitish"].ToString() == "3.0-stable");
                            var latest   = release?["name"].ToString() ?? "Unknown";
                            latest = latest.Split(' ')[0];
                            AppViewModel.Instance.LatestVersion = latest;
                            switch (latest)
                            {
                            case "Unknown":
                                AppViewModel.Instance.HasNewVersion = false;
                                break;

                            default:
                                AppViewModel.Instance.DownloadUri   = String.Format("https://github.com/Icehunter/ffxivapp/releases/download/{0}/{0}.zip", latest);
                                AppViewModel.Instance.HasNewVersion = BuildUtilities.NeedsUpdate(latest, current, ref latestBuild, ref currentBuild);
                                break;
                            }

                            if (AppViewModel.Instance.HasNewVersion)
                            {
                                var title   = String.Format("{0} {1}", AppViewModel.Instance.Locale["app_DownloadNoticeHeader"], AppViewModel.Instance.Locale["app_DownloadNoticeMessage"]);
                                var message = new StringBuilder();
                                try
                                {
                                    var latestBuildDateTime  = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * latestBuild.Build + TimeSpan.TicksPerSecond * 2 * latestBuild.Revision));
                                    var currentBuildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * currentBuild.Build + TimeSpan.TicksPerSecond * 2 * currentBuild.Revision));
                                    var timeSpan             = latestBuildDateTime - currentBuildDateTime;
                                    if (timeSpan.TotalSeconds > 0)
                                    {
                                        message.AppendLine(String.Format("Missing {0} days, {1} hours and {2} seconds of updates.{3}", timeSpan.Days, timeSpan.Hours, timeSpan.Seconds));
                                    }
                                }
                                catch (Exception ex)
                                {
                                }
                                finally
                                {
                                    message.AppendLine(AppViewModel.Instance.Locale["app_AlwaysReadUpdatesMessage"]);
                                }
                                MessageBoxHelper.ShowMessageAsync(title, message.ToString(), () => ShellView.CloseApplication(true), delegate { });
                            }
                            var uri = "http://ffxiv-app.com/Analytics/Google/?eCategory=Application Launch&eAction=Version Check&eLabel=FFXIVAPP";
                            DispatcherHelper.Invoke(() => MainView.View.GoogleAnalytics.Navigate(uri));
                        }
                    }
                }
                return(true);
            };

            updateCheck.BeginInvoke(null, null);
        }
Example #26
0
        /// <summary>
        /// </summary>
        public static void CheckUpdates()
        {
            try
            {
                var updaters = Process.GetProcessesByName("FFXIVAPP.Updater");
                foreach (var updater in updaters)
                {
                    updater.Kill();
                }
                if (File.Exists("FFXIVAPP.Updater.exe"))
                {
                    File.Delete("FFXIVAPP.Updater.Backup.exe");
                }
                else
                {
                    if (File.Exists("FFXIVAPP.Updater.Backup.exe"))
                    {
                        File.Move("FFXIVAPP.Updater.Backup.exe", "FFXIVAPP.Updater.exe");
                    }
                }
            }
            catch (Exception ex)
            {
            }
            Func <bool> updateCheck = delegate
            {
                var current = Assembly.GetExecutingAssembly()
                              .GetName()
                              .Version.ToString();
                AppViewModel.Instance.CurrentVersion = current;
                var httpWebRequest = (HttpWebRequest)WebRequest.Create(String.Format("http://ffxiv-app.com/Json/CurrentVersion/"));
                httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                httpWebRequest.ContentType = "application/json; charset=utf-8";
                httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                {
                    using (var response = httpResponse.GetResponseStream())
                    {
                        var responseText = "";
                        if (response != null)
                        {
                            using (var streamReader = new StreamReader(response))
                            {
                                responseText = streamReader.ReadToEnd();
                            }
                        }
                        var latestBuild  = new BuildNumber();
                        var currentBuild = new BuildNumber();
                        if (httpResponse.StatusCode != HttpStatusCode.OK || String.IsNullOrWhiteSpace(responseText))
                        {
                            AppViewModel.Instance.HasNewVersion = false;
                            AppViewModel.Instance.LatestVersion = "Unknown";
                        }
                        else
                        {
                            var jsonResult  = JObject.Parse(responseText);
                            var latest      = jsonResult["Version"].ToString();
                            var updateNotes = jsonResult["Notes"].ToList();
                            //var enabledFeatures = jsonResult["Features"];
                            //try
                            //{
                            //    foreach (var feature in enabledFeatures)
                            //    {
                            //        var key = feature["Hash"].ToString();
                            //        var enabled = (bool) feature["Enabled"];
                            //        switch (key)
                            //        {
                            //            case "E9FA3917-ACEB-47AE-88CC-58AB014058F5":
                            //                XIVDBViewModel.Instance.MonsterUploadEnabled = enabled;
                            //                break;
                            //            case "6D2DB102-B1AE-4249-9E73-4ABC7B1947BC":
                            //                XIVDBViewModel.Instance.NPCUploadEnabled = enabled;
                            //                break;
                            //            case "D95ADD76-7DA7-4692-AD00-DB12F2853908":
                            //                XIVDBViewModel.Instance.KillUploadEnabled = enabled;
                            //                break;
                            //            case "6A50A13B-BA83-45D7-862F-F110049E7E78":
                            //                XIVDBViewModel.Instance.LootUploadEnabled = enabled;
                            //                break;
                            //        }
                            //    }
                            //}
                            //catch (Exception ex)
                            //{
                            //}
                            try
                            {
                                foreach (var note in updateNotes.Select(updateNote => updateNote.Value <string>()))
                                {
                                    AppViewModel.Instance.UpdateNotes.Add(note);
                                }
                            }
                            catch (Exception ex)
                            {
                                MessageBoxHelper.ShowMessage("Error", ex.Message);
                            }
                            AppViewModel.Instance.DownloadUri = jsonResult["DownloadUri"].ToString();
                            latest = (latest == "Unknown") ? "Unknown" : String.Format("3{0}", latest.Substring(1));
                            AppViewModel.Instance.LatestVersion = latest;
                            switch (latest)
                            {
                            case "Unknown":
                                AppViewModel.Instance.HasNewVersion = false;
                                break;

                            default:
                                AppViewModel.Instance.HasNewVersion = BuildUtilities.NeedsUpdate(latest, current, ref latestBuild, ref currentBuild);
                                break;
                            }

                            if (AppViewModel.Instance.HasNewVersion)
                            {
                                var title   = String.Format("{0} {1}", AppViewModel.Instance.Locale["app_DownloadNoticeHeader"], AppViewModel.Instance.Locale["app_DownloadNoticeMessage"]);
                                var message = new StringBuilder();
                                try
                                {
                                    var latestBuildDateTime  = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * latestBuild.Build + TimeSpan.TicksPerSecond * 2 * latestBuild.Revision));
                                    var currentBuildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * currentBuild.Build + TimeSpan.TicksPerSecond * 2 * currentBuild.Revision));
                                    var timeSpan             = latestBuildDateTime - currentBuildDateTime;
                                    if (timeSpan.TotalSeconds > 0)
                                    {
                                        message.AppendLine(String.Format("Missing {0} days, {1} hours and {2} seconds of updates.{3}", timeSpan.Days, timeSpan.Hours, timeSpan.Seconds));
                                    }
                                }
                                catch (Exception ex)
                                {
                                }
                                finally
                                {
                                    message.AppendLine(AppViewModel.Instance.Locale["app_AlwaysReadUpdatesMessage"]);
                                }
                                MessageBoxHelper.ShowMessageAsync(title, message.ToString(), () => ShellView.CloseApplication(true), delegate { });
                            }
                            var uri = "http://ffxiv-app.com/Analytics/Google/?eCategory=Application Launch&eAction=Version Check&eLabel=FFXIVAPP";
                            DispatcherHelper.Invoke(() => MainView.View.GoogleAnalytics.Navigate(uri));
                        }
                    }
                }
                return(true);
            };

            updateCheck.BeginInvoke(null, null);
        }
Example #27
0
        /// <summary>
        /// Checks if the version represented by this version object equals the version represented by otherVersion object.
        /// </summary>
        /// <param name="otherVersion">Version representing IVersion object</param>
        /// <returns>True if equal. False otherwise</returns>
        public bool Equals(IComponentVersion otherVersion)
        {
            if (!string.IsNullOrEmpty(Version) && !string.IsNullOrEmpty(otherVersion.Version) && Version.Equals(otherVersion.Version))
            {
                return(true);
            }

            if (TfsVersionSpec != null && otherVersion.TfsVersionSpec != null && TfsVersionSpec.Equals(otherVersion.TfsVersionSpec))
            {
                return(true);
            }

            if (!string.IsNullOrEmpty(BuildNumber) && !string.IsNullOrEmpty(otherVersion.BuildNumber) && BuildNumber.Equals(otherVersion.BuildNumber))
            {
                return(true);
            }

            if (ContainSameValues(BuildStatus, otherVersion.BuildStatus) && ContainSameValues(BuildQuality, otherVersion.BuildQuality))
            {
                return(true);
            }

            if (ContainSameValues(BuildStatus, otherVersion.BuildStatus) && ContainSameValues(BuildTags, otherVersion.BuildTags))
            {
                return(true);
            }

            return(false);
        }
Example #28
0
 public override int GetHashCode()
 {
     return(BuildNumber.GetHashCode());
 }
Example #29
0
 public override int GetHashCode()
 {
     unchecked
     {
         return(((BuildCode != null ? BuildCode.GetHashCode() : 0) * 397) ^ (BuildNumber != null ? BuildNumber.GetHashCode() : 0));
     }
 }
Example #30
0
        public static void LoadAvailablePlugins()
        {
            UpdateView.View.AvailableLoadingInformation.Visibility = Visibility.Visible;
            UpdateViewModel.Instance.AvailablePlugins.Clear();

            Func <bool> updateCheck = delegate
            {
                var pluginSourceList = new List <PluginSourceItem>();
                try
                {
                    var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://github.com/Icehunter/ffxivapp/raw/master/PACKAGES.json");
                    httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                    httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                    httpWebRequest.ContentType = "application/text; charset=utf-8";
                    httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                    using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                    {
                        using (var response = httpResponse.GetResponseStream())
                        {
                            var responseText = "";
                            if (response != null)
                            {
                                using (var streamReader = new StreamReader(response))
                                {
                                    responseText = streamReader.ReadToEnd();
                                }
                            }
                            if (httpResponse.StatusCode == HttpStatusCode.OK || !String.IsNullOrWhiteSpace(responseText))
                            {
                                var jsonResult = JArray.Parse(responseText);
                                pluginSourceList.AddRange(from item in jsonResult
                                                          let name = item["Name"].ToString()
                                                                     let enabled = Boolean.Parse(item["Enabled"].ToString())
                                                                                   let sourceURI = item["SourceURI"].ToString()
                                                                                                   where enabled
                                                                                                   select new PluginSourceItem
                                {
                                    Enabled   = enabled,
                                    Key       = Guid.NewGuid(),
                                    SourceURI = sourceURI
                                });
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                foreach (var pluginSourceItem in UpdateViewModel.Instance.AvailableSources)
                {
                    if (pluginSourceList.Any(p => String.Equals(p.SourceURI, pluginSourceItem.SourceURI, Constants.InvariantComparer)))
                    {
                        continue;
                    }
                    pluginSourceList.Add(pluginSourceItem);
                }
                foreach (var item in pluginSourceList)
                {
                    if (item.Enabled)
                    {
                        try
                        {
                            var httpWebRequest = (HttpWebRequest)WebRequest.Create(item.SourceURI);
                            httpWebRequest.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4";
                            httpWebRequest.Headers.Add("Accept-Language", "en;q=0.8");
                            httpWebRequest.ContentType = "application/text; charset=utf-8";
                            httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                            using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                            {
                                using (var response = httpResponse.GetResponseStream())
                                {
                                    var responseText = "";
                                    if (response != null)
                                    {
                                        using (var streamReader = new StreamReader(response))
                                        {
                                            responseText = streamReader.ReadToEnd();
                                        }
                                    }
                                    if (httpResponse.StatusCode == HttpStatusCode.OK || !String.IsNullOrWhiteSpace(responseText))
                                    {
                                        var jsonResult     = JObject.Parse(responseText);
                                        var pluginInfo     = jsonResult["PluginInfo"];
                                        var pluginFiles    = pluginInfo["Files"].ToArray();
                                        var pluginDownload = new PluginDownloadItem
                                        {
                                            Files = new List <PluginFile>(pluginFiles.Select(pluginFile => new PluginFile
                                            {
                                                Location = pluginFile["Location"].ToString(),
                                                Name     = pluginFile["Name"].ToString()
                                            })),
                                            Name          = pluginInfo["Name"].ToString(),
                                            SourceURI     = pluginInfo["SourceURI"].ToString(),
                                            LatestVersion = pluginInfo["Version"].ToString()
                                        };
                                        var found = App.Plugins.Loaded.Find(pluginDownload.Name);
                                        if (found != null)
                                        {
                                            var latest  = pluginDownload.LatestVersion;
                                            var current = found.Instance.Version;
                                            pluginDownload.CurrentVersion = current;
                                            pluginDownload.Status         = PluginStatus.Installed;
                                            var latestBuild  = new BuildNumber();
                                            var currentBuild = new BuildNumber();
                                            if (BuildUtilities.NeedsUpdate(latest, current, ref latestBuild, ref currentBuild))
                                            {
                                                pluginDownload.Status = PluginStatus.UpdateAvailable;
                                                AppViewModel.Instance.HasNewPluginUpdate = true;
                                            }
                                        }
                                        DispatcherHelper.Invoke(() => UpdateViewModel.Instance.AvailablePlugins.Add(pluginDownload));
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                        DispatcherHelper.Invoke(delegate
                        {
                            if (UpdateView.View.AvailableDG.Items.Count == UpdateViewModel.Instance.AvailablePlugins.Count)
                            {
                                UpdateView.View.AvailableLoadingInformation.Visibility = Visibility.Collapsed;
                            }
                            UpdateView.View.AvailableDG.Items.Refresh();
                            UpdateViewModel.Instance.SetupGrouping();
                        });
                    }
                }
                return(true);
            };

            updateCheck.BeginInvoke(null, null);
        }