// GET: Update/CheckVersion public JsonResult CheckVersion([FromBody] UpdateJson checkVersion) { if (checkVersion == null) { return(null); } UpdateJson updateJson = _updateRepository.GetUpdateJson(checkVersion); return(updateJson != null? Json(updateJson, JsonRequestBehavior.AllowGet) : null); }
public void CreateScriptMetaJson() { string destDir = FileHelper.GetTempDir(); try { // Prepare running FileUpdater string srcScriptFile = Path.Combine(TestSetup.WebRoot, "Updater", "Standalone", "PreserveInterface_r2.script"); string workScriptFile = Path.Combine(destDir, "PreserveInterface.script"); string workScriptTreePath = Path.Combine("TestSuite", "Updater", "PreserveInterface.script"); string destJson = Path.Combine(destDir, "PreserveInterface_r2.meta.json"); File.Copy(srcScriptFile, workScriptFile); Project p = EngineTests.Project; Script sc = p.LoadScriptRuntime(workScriptFile, workScriptTreePath, new LoadScriptRuntimeOptions { AddToProjectTree = true, IgnoreMain = false, OverwriteToProjectTree = true, }); // Create a script meta json UpdateJson.CreateScriptUpdateJson(sc, destJson); // Print metaJsonText (Log) string metaJsonText; using (StreamReader sr = new StreamReader(destJson, new UTF8Encoding(false), false)) { metaJsonText = sr.ReadToEnd(); } Console.WriteLine(metaJsonText); // Check sanity of created script meta json ResultReport <UpdateJson.Root> readReport = UpdateJson.ReadUpdateJson(destJson); Assert.IsNotNull(readReport.Result); Assert.IsTrue(readReport.Success); UpdateJson.Root root = readReport.Result; ResultReport checkReport = root.Validate(); Assert.IsTrue(readReport.Success); } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }
/// <summary> /// Get update json if client have another data. /// </summary> /// <param name="checkUpdateJson">Json data from client.</param> /// <returns>Update json object or null.</returns> public UpdateJson GetUpdateJson(UpdateJson checkUpdateJson) { List <Update> allUpdates = _db.Updates .AsNoTracking() .OrderByDescending(x => x.Id) .ToList(); if (!allUpdates.Any()) { return(null); } Update lastUpdate = allUpdates.FirstOrDefault(); if (lastUpdate == null) { return(null); } if (lastUpdate.Version == checkUpdateJson.Version) { return(null); } string descriptionText; switch (checkUpdateJson.Language) { case 0: descriptionText = lastUpdate.RussianDescription; break; case 1: descriptionText = lastUpdate.EnglishDescription; break; case 2: descriptionText = lastUpdate.DeutschDescription; break; case 3: descriptionText = lastUpdate.ChineseDescription; break; default: descriptionText = lastUpdate.RussianDescription; break; } return(new UpdateJson { Version = lastUpdate.Version, Description = descriptionText, DownLoadLink = lastUpdate.DownLoadLink }); }
private async void CreateScriptMetaFilesCommand_Executed(object sender, ExecutedRoutedEventArgs e) { // Force update of script interface controls (if changed) ScriptUpdateButton.Focus(); // Must be filtered by ScriptCommand_CanExecute before if (Model.WorkInProgress) { Global.Logger.SystemWrite(new LogInfo(LogState.CriticalError, $"Race condition with {nameof(Model.WorkInProgress)} happened in {nameof(ScriptUpdateCommand_Executed)}")); return; } // Get instances of Script and Project Script targetScript = Model.CurMainTree.Script; Project p = Model.CurMainTree.Script.Project; // Define local variables Script[] targetScripts; List <LogInfo> logs = new List <LogInfo>(); // Turn on progress ring Model.WorkInProgress = true; int successCount = 0; int errorCount = 0; try { // Populate BuildTree ProjectTreeItemModel treeRoot = MainViewModel.PopulateOneTreeItem(targetScript, null, null); Model.BuildTreeItems.Clear(); if (targetScript.Type == ScriptType.Directory || targetScript.IsMainScript) { // Update a list of scripts // We have to search in p.AllScripts rather than in ProjectTreeItemModel to find hidden scripts // (ProjectTreeItemModel only contains visible scripts) if (targetScript.IsMainScript) { targetScripts = p.AllScripts.ToArray(); } else { targetScripts = p.AllScripts .Where(x => x.TreePath.StartsWith(targetScript.TreePath, StringComparison.OrdinalIgnoreCase)) .ToArray(); } MainViewModel.ScriptListToTreeViewModel(p, targetScripts, false, treeRoot); targetScripts = targetScripts.Where(x => x.Type != ScriptType.Directory).ToArray(); if (targetScripts.Length == 0) { // Ask user for confirmation MessageBox.Show(this, $"Directory [{targetScript.Title}] does not contain any scripts.", "No child scripts", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } else { targetScripts = new Script[] { targetScript }; } Model.BuildTreeItems.Add(treeRoot); Model.CurBuildTree = null; // Switch to Build View Model.BuildScriptProgressVisibility = Visibility.Collapsed; Model.BuildFullProgressMax = targetScripts.Length; Model.BuildFullProgressValue = 0; Model.SwitchNormalBuildInterface = false; // I do not know why, but this line must come after SwitchNormalBuildInterface. Model.BuildEchoMessage = "Creating meta files..."; Stopwatch watch = Stopwatch.StartNew(); // Run Updater int idx = 0; foreach (Script sc in targetScripts) { // Display script information idx += 1; Model.BuildFullProgressValue = idx; Model.DisplayScriptTexts(sc, null); Model.ScriptTitleText = Model.ScriptTitleText; Model.BuildEchoMessage = $"Creating meta files... ({idx * 100 / targetScripts.Length}%)"; Application.Current?.Dispatcher?.BeginInvoke((Action)(() => { Model.DisplayScriptLogo(sc); // BuildTree is empty -> return if (Model.BuildTreeItems.Count == 0) { return; } if (Model.CurBuildTree != null) { Model.CurBuildTree.Focus = false; } Model.CurBuildTree = ProjectTreeItemModel.FindScriptByRealPath(Model.BuildTreeItems[0], sc.RealPath); if (Model.CurBuildTree != null) { Model.CurBuildTree.Focus = true; } })); // Do the real job string destJsonFile = Path.ChangeExtension(sc.RealPath, ".meta.json"); try { await UpdateJson.CreateScriptUpdateJsonAsync(sc, destJsonFile); logs.Add(new LogInfo(LogState.Success, $"Created meta file for [{sc.Title}]")); successCount += 1; } catch (Exception ex) { logs.Add(new LogInfo(LogState.Error, $"Unable to create meta file for [{sc.Title}] - {Logger.LogExceptionMessage(ex)}")); errorCount += 1; } } // Log messages Logger.SystemWrite(logs); watch.Stop(); TimeSpan t = watch.Elapsed; Model.StatusBarText = $"Updated {targetScript.Title} ({t:h\\:mm\\:ss})"; } finally { // Turn off progress ring Model.WorkInProgress = false; // Build Ended, Switch to Normal View Model.BuildScriptProgressVisibility = Visibility.Visible; Model.BuildEchoMessage = string.Empty; Model.SwitchNormalBuildInterface = true; Model.DisplayScript(Model.CurMainTree.Script); } PackIconMaterialKind msgBoxIcon = PackIconMaterialKind.Information; StringBuilder b = new StringBuilder(targetScripts.Length + 4); b.AppendLine($"Created [{successCount}] script meta files."); foreach (LogInfo log in logs.Where(x => x.State == LogState.Success)) { b.AppendLine($"- {log.Message}"); } if (0 < errorCount) { // Failure b.AppendLine(); b.AppendLine($"Failed to create [{errorCount}] script meta files"); foreach (LogInfo log in logs.Where(x => x.State == LogState.Error)) { b.AppendLine($"- {log.Message}"); } msgBoxIcon = PackIconMaterialKind.Alert; } const string msgTitle = "Script Meta Files Report"; TextViewDialog dialog = new TextViewDialog(this, msgTitle, msgTitle, b.ToString(), msgBoxIcon); dialog.ShowDialog(); }