//public async void UpdateAllScripts(ScriptConfigModel selectedScript) //{ // await DownLoadScript(selectedScript.ScriptPath); // selectedScript.LastCommitTime = selectedScript.PreUpdateTime.Value; // selectedScript.IsUpdateAvailable = false; // selectedScript.PreUpdateTime = null; // UpdateScriptConfig(); //} public void DeleteScript(ScriptConfigModel selectedScript) { if (File.Exists(MainViewModel.AssemblyPath + selectedScript.ScriptLocalPath)) { File.Delete(MainViewModel.AssemblyPath + selectedScript.ScriptLocalPath); } ScriptsData.Remove(selectedScript); UpdateScriptConfig(); }
public void UpdateScriptConfig(ScriptConfigModel scriptConfigModel = null) { try { if (scriptConfigModel != null) { if (fileWatcher != null) { fileWatcher.EnableRaisingEvents = false; } if (!scriptConfigModel.IsEnabled) { if (File.Exists(MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath)) { File.Move(MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath, MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath.Replace(".lua", ".bak")); scriptConfigModel.ScriptLocalPath = scriptConfigModel.ScriptLocalPath.Replace(".lua", ".bak").Replace(MainViewModel.AssemblyPath, ""); } } else { if (File.Exists(MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath)) { File.Move(MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath, MainViewModel.AssemblyPath + scriptConfigModel.ScriptLocalPath.Replace(".bak", ".lua")); scriptConfigModel.ScriptLocalPath = scriptConfigModel.ScriptLocalPath.Replace(".bak", ".lua").Replace(MainViewModel.AssemblyPath, ""); } } } var json = JsonConvert.SerializeObject(ScriptsData, Formatting.Indented); File.WriteAllText("scripts.json", json); } catch (Exception ex) { DotaViewModel.GameBrowserVm.MainViewModel.ShowError(ex.Message); Log.Error(ex, "null"); } finally { if (fileWatcher != null) { fileWatcher.EnableRaisingEvents = true; } ScriptsData = new ObservableCollection <ScriptConfigModel>(ScriptsData); } }
private async Task DownLoadScript(string url, bool isEnabled) { var fileName = Path.GetFileName(url); if (!isEnabled) { fileName.Replace(".lua", ".bak"); } var request = WebRequest.CreateHttp(url); request.Method = "GET"; try { using (var response = await request.GetResponseAsync()) { using (var responseStream = response.GetResponseStream()) { if (File.Exists($@"{scriptDir}\{fileName}")) { var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == $@"{scriptDir}\{fileName}".Replace(MainViewModel.AssemblyPath, "") && x.ScriptPath == null && x.RepositoryPath == null); var conflictResult = false; if (scriptConfig != null) { ScriptConflictName = fileName; var dialogResult = await DialogHost.Show((this.View as UserControl).FindName("ScriptConflictContent"), "ScriptConflict", delegate(object sender, DialogClosingEventArgs args) { conflictResult = (bool)args.Parameter; }); if (conflictResult) { scriptConfig.RepositoryPath = null; scriptConfig.ScriptPath = LuaPath; } else { return; } } } else { var newScriptData = new ScriptConfigModel { IsEnabled = isEnabled, ScriptName = Path.GetFileNameWithoutExtension(fileName), ScriptLocalPath = $@"{scriptDir}\{fileName}".Replace(MainViewModel.AssemblyPath, ""), ScriptPath = LuaPath }; ScriptsData.Add(newScriptData); } using (var fileToDownload = new FileStream($@"{scriptDir}\{fileName}", FileMode.Create, FileAccess.ReadWrite)) { await responseStream.CopyToAsync(fileToDownload); } } } } catch (Exception ex) { throw ex; } }
private async Task DownLoadRepository(string repPath) { repPath = $"{repPath}/archive/master.zip"; var request = WebRequest.CreateHttp(repPath); request.Method = "GET"; try { using (var response = await request.GetResponseAsync()) { using (var responseStream = response.GetResponseStream()) { using (var fileToDownload = new FileStream($@"{scriptDir}\{Path.GetFileName(repPath)}", FileMode.Create, FileAccess.ReadWrite)) { await responseStream.CopyToAsync(fileToDownload); } } } } catch (WebException ex) { throw ex; } var zipPath = $@"{scriptDir}\{Path.GetFileName(repPath)}"; if (File.Exists(zipPath)) { var directory = $"{repPath.Replace("http://github.com/", "").Split('/')[1]}-master"; using (ZipArchive archive = ZipFile.OpenRead(zipPath)) { var result = from currEntry in archive.Entries where Path.GetDirectoryName(currEntry.FullName).Contains(directory) where !String.IsNullOrEmpty(currEntry.Name) select currEntry; foreach (ZipArchiveEntry entry in result) { var outPath = $@"{scriptDir}\{entry.FullName.Replace($"{directory}/", "")}"; if (outPath.EndsWith(".lua") && File.Exists(outPath.Replace(".lua", ".bak"))) { outPath = outPath.Replace(".lua", ".bak"); } var localScriptVersion = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == outPath.Replace(MainViewModel.AssemblyPath, "") && x.ScriptPath == null && x.RepositoryPath == null); var conflictResult = false; if (localScriptVersion != null) { ScriptConflictName = entry.Name; var dialogResult = await DialogHost.Show((this.View as UserControl).FindName("ScriptConflictContent"), "ScriptConflict", delegate(object sender, DialogClosingEventArgs args) { conflictResult = (bool)args.Parameter; }); } EnsureDirectoryExists(outPath); entry.ExtractToFile(outPath, true); if (Path.GetDirectoryName(outPath) == scriptDir) { var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptName == Path.GetFileNameWithoutExtension(entry.Name)); if (scriptConfig != null) { if (conflictResult) { scriptConfig.RepositoryPath = LuaPath; scriptConfig.ScriptPath = null; } continue; } var newScriptData = new ScriptConfigModel { IsEnabled = outPath.EndsWith(".bak") ? false : true, ScriptName = Path.GetFileNameWithoutExtension(entry.Name), ScriptLocalPath = outPath.Trim('/').Replace(MainViewModel.AssemblyPath, ""), RepositoryPath = LuaPath }; ScriptsData.Add(newScriptData); } } } } }
private async void LoadScripts() { try { if (!Directory.Exists(scriptDir)) { Directory.CreateDirectory(scriptDir); } if (!File.Exists("scripts.json")) { var scriptsFile = File.Create("scripts.json"); scriptsFile.Close(); } string jsonString = string.Empty; using (var sr = new StreamReader("scripts.json")) { string line; while ((line = sr.ReadLine()) != null) { jsonString += line; } } HashSet <string> extensions = new HashSet <string> { ".lua", ".bak" }; if (!string.IsNullOrEmpty(jsonString)) { var tempData = JsonConvert.DeserializeObject <IEnumerable <ScriptConfigModel> >(jsonString); ScriptsData = new ObservableCollection <ScriptConfigModel>(tempData.Where(x => File.Exists(MainViewModel.AssemblyPath + x.ScriptLocalPath))); foreach (var scriptData in ScriptsData) { if (scriptData.ScriptLocalPath.Contains(MainViewModel.AssemblyPath)) { scriptData.ScriptLocalPath = scriptData.ScriptLocalPath.Replace(MainViewModel.AssemblyPath, ""); } } foreach (var scriptPath in Directory.EnumerateFiles(scriptDir, "*.*").Where(x => extensions.Contains(Path.GetExtension(x)))) { var fileNameWOExt = Path.GetFileNameWithoutExtension(scriptPath); if (ScriptsData.FirstOrDefault(x => x.ScriptName == fileNameWOExt) != null) { continue; } var isEnabled = scriptPath.EndsWith(".bak") ? false : true; var newScriptData = new ScriptConfigModel { IsEnabled = isEnabled, ScriptName = fileNameWOExt, ScriptLocalPath = isEnabled == true ? $@"{scriptDir}\{fileNameWOExt}.lua".Replace(MainViewModel.AssemblyPath, "") : $@"{scriptDir}\{fileNameWOExt}.bak".Replace(MainViewModel.AssemblyPath, "") }; ScriptsData.Add(newScriptData); } } else { ScriptsData = new ObservableCollection <ScriptConfigModel>(); foreach (var scriptPath in Directory.EnumerateFiles(scriptDir, "*.*").Where(x => extensions.Contains(Path.GetExtension(x)))) { var isEnabled = scriptPath.EndsWith(".bak") ? false : true; var fileNameWOext = Path.GetFileNameWithoutExtension(scriptPath); var newScriptData = new ScriptConfigModel { IsEnabled = isEnabled, ScriptName = fileNameWOext, ScriptLocalPath = isEnabled == true ? $@"{scriptDir}\{fileNameWOext}.lua".Replace(MainViewModel.AssemblyPath, "") : $@"{scriptDir}\{fileNameWOext}.lua.bak".Replace(MainViewModel.AssemblyPath, "") }; ScriptsData.Add(newScriptData); } } UpdateScriptConfig(); } catch (Exception ex) { DotaViewModel.GameBrowserVm.MainViewModel.ShowError(ex.Message); Log.Error(ex, "null"); } }
private void FileWatcherHandle(object sender, FileSystemEventArgs e) { try { if (!Regex.IsMatch(Path.GetExtension(e.FullPath), @"\.lua|\.bak", RegexOptions.IgnoreCase)) { return; } if (e.ChangeType == WatcherChangeTypes.Changed) { var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == e.FullPath.Replace(MainViewModel.AssemblyPath, "") && x.ScriptName == Path.GetFileNameWithoutExtension(e.Name)); if (scriptConfig != null) { scriptConfig.ScriptPath = null; scriptConfig.RepositoryPath = null; UpdateScriptConfig(); return; } } if (e.ChangeType == WatcherChangeTypes.Renamed) { var args = e as RenamedEventArgs; var isEnabled = e.FullPath.EndsWith(".bak") ? false : true; var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == args.OldFullPath.Replace(MainViewModel.AssemblyPath, "") && x.ScriptName == Path.GetFileNameWithoutExtension(args.OldName)); if (scriptConfig != null) { scriptConfig.IsEnabled = isEnabled; scriptConfig.ScriptLocalPath = args.FullPath.Replace(MainViewModel.AssemblyPath, ""); scriptConfig.ScriptName = Path.GetFileNameWithoutExtension(args.Name); UpdateScriptConfig(); } else { var newScriptConfig = new ScriptConfigModel { IsEnabled = isEnabled, ScriptLocalPath = e.FullPath.Replace(MainViewModel.AssemblyPath, ""), ScriptName = Path.GetFileNameWithoutExtension(e.Name) }; System.Windows.Application.Current.Dispatcher.Invoke(() => { ScriptsData.Add(newScriptConfig); }); UpdateScriptConfig(); } return; } if (e.ChangeType == WatcherChangeTypes.Created) { var isEnabled = e.FullPath.EndsWith(".bak") ? false : true; if (File.Exists(e.FullPath)) { var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == e.FullPath.Replace(MainViewModel.AssemblyPath, "") && x.ScriptName == Path.GetFileNameWithoutExtension(e.Name)); if (scriptConfig != null) { scriptConfig.ScriptPath = null; scriptConfig.RepositoryPath = null; UpdateScriptConfig(); return; } } var newScriptConfig = new ScriptConfigModel { IsEnabled = isEnabled, ScriptLocalPath = e.FullPath.Replace(MainViewModel.AssemblyPath, ""), ScriptName = Path.GetFileNameWithoutExtension(e.Name) }; System.Windows.Application.Current.Dispatcher.Invoke(() => { ScriptsData.Add(newScriptConfig); }); UpdateScriptConfig(); return; } if (e.ChangeType == WatcherChangeTypes.Deleted) { var scriptConfig = ScriptsData.FirstOrDefault(x => x.ScriptLocalPath == e.FullPath.Replace(MainViewModel.AssemblyPath, "") && x.ScriptName == Path.GetFileNameWithoutExtension(e.Name)); if (scriptConfig != null) { System.Windows.Application.Current.Dispatcher.Invoke(() => { ScriptsData.Remove(scriptConfig); }); UpdateScriptConfig(); } } } catch (Exception ex) { DotaViewModel.GameBrowserVm.MainViewModel.ShowError(ex.Message); Log.Error(ex, "null"); } }