public ThemeSummary ImportTheme(string file) { if (Path.GetExtension(file).Equals(".dll", StringComparison.OrdinalIgnoreCase)) { ThemeSummary theme = this.CreateTheme(); using (MediaCenterTheme mediaCenterTheme = theme.OpenTheme()) { mediaCenterTheme.AddResourceFileDifferences(VmcStudioUtil.BackupFile(Path.Combine(MediaCenterUtil.MediaCenterPath, "ehres.dll")), file); mediaCenterTheme.Save(); } return(theme); } else { string directory = Path.Combine(this.themesPath, Guid.NewGuid().ToString()); string themeFileName = Path.GetFileName(file); string str = Path.Combine(directory, themeFileName); Directory.CreateDirectory(directory); try { File.Copy(file, str); try { Dispatcher dispatcher = System.Windows.Application.Current.Dispatcher; ThemeSummary summary = new ThemeSummary(); Action action = (Action)(() => { summary.BasePath = directory; summary.ThemeFile = themeFileName; summary.Save(); this.themes.Add(summary); }); dispatcher.Invoke((Delegate)action, new object[0]); return(summary); } catch (Exception ex) { Trace.TraceError("Error importing theme {0}: {1}", (object)themeFileName, (object)((object)ex).ToString()); File.Delete(str); throw; } } catch (Exception) { try { Directory.Delete(directory, true); } catch (Exception ex2) { Trace.TraceError("Could not delete failed import ({1}): {0}", (object)((object)ex2).ToString(), (object)directory); } throw; } } }
protected void ApplyThemes(ProgressEnabledOperation operation, bool preserveMenu) { this.OnApplyingThemes(new ApplyThemesEventArgs(operation)); try { MediaCenterLibraryCache readCache = new MediaCenterLibraryCache(VmcStudioUtil.BackupsPath, UnmanagedLibraryAccess.Read); MediaCenterLibraryCache writeCache = new MediaCenterLibraryCache(MediaCenterUtil.MediaCenterPath, UnmanagedLibraryAccess.Write); MemoryLibraryCache memoryLibraryCache = (MemoryLibraryCache)null; if (preserveMenu) { memoryLibraryCache = new MemoryLibraryCache((ushort)1033); using (MediaCenterLibraryCache centerLibraryCache = new MediaCenterLibraryCache()) StartMenuManager.Create((IResourceLibraryCache)centerLibraryCache).Save((IResourceLibraryCache)memoryLibraryCache, true); } readCache.LibraryLoading += (EventHandler <LibraryLoadEventArgs>)((sender, e) => VmcStudioUtil.BackupFile(Path.Combine(MediaCenterUtil.MediaCenterPath, e.FileName))); writeCache.LibraryLoading += (EventHandler <LibraryLoadEventArgs>)((sender, e) => { string local_0 = VmcStudioUtil.BackupFile(Path.Combine(MediaCenterUtil.MediaCenterPath, e.FileName)); string local_1 = Path.Combine(writeCache.SearchPath, e.FileName); VmcStudioUtil.TakeOwnership(local_1); File.Copy(local_0, local_1, true); VmcStudioUtil.TakeOwnership(local_1); }); if (Directory.Exists(VmcStudioUtil.BackupsPath)) { foreach (string path in Directory.GetFiles(VmcStudioUtil.BackupsPath)) { writeCache.LoadLibrary(Path.GetFileName(path)); } } int num = 0; int operationCompleted = 0; Exception applyException = (Exception)null; List <MediaCenterTheme> list1 = Enumerable.ToList <MediaCenterTheme>(Enumerable.Select <ThemeSummary, MediaCenterTheme>((IEnumerable <ThemeSummary>) this.AppliedThemes, (Func <ThemeSummary, MediaCenterTheme>)(o => o.OpenTheme()))); try { List <IDelayedProgressOperation> list2 = new List <IDelayedProgressOperation>(); foreach (MediaCenterTheme mediaCenterTheme in list1) { IDelayedProgressOperation applyOperation = mediaCenterTheme.CreateApplyOperation(readCache, writeCache); num += applyOperation.Count; applyOperation.Progress += (EventHandler <ProgressEventArgs>)((sender, args) => operation.OnProgress(args.Message, args.CurrentIndex + operationCompleted)); applyOperation.Abandoned += (EventHandler <ExceptionEventArgs>)((sender, args) => applyException = args.Exception); list2.Add(applyOperation); } operation.Count = num; using (readCache) { using (writeCache) { foreach (IDelayedProgressOperation progressOperation in list2) { operation.Description = progressOperation.Description; progressOperation.Start(); progressOperation.WaitForCompletion(); if (applyException != null) { throw applyException; } operationCompleted += progressOperation.Count; } if (this.AppliedThemes.Count > 0) { IResource resource = writeCache["ehres.dll"].GetResource("VmcStudio.Themes.xml", (object)23); using (MemoryStream memoryStream = new MemoryStream()) { new XmlSerializer(typeof(ThemeManager.AppliedThemesDocument)).Serialize((Stream)memoryStream, (object)new ThemeManager.AppliedThemesDocument() { AppliedThemes = Enumerable.ToArray <ThemeSummary>((IEnumerable <ThemeSummary>) this.AppliedThemes) }); memoryStream.Flush(); ResourceExtensions.Update(resource, memoryStream.GetBuffer()); } } if (memoryLibraryCache != null) { memoryLibraryCache.ApplyTo((IResourceLibraryCache)writeCache); } } } this.IsDirty = false; } finally { foreach (MediaCenterTheme mediaCenterTheme in list1) { mediaCenterTheme.Dispose(); } } } catch (Exception ex) { Trace.TraceError(((object)ex).ToString()); operation.OnAbandoned(ex); throw; } operation.OnCompleted(); }