예제 #1
0
        public async Task <WorkspaceItemListViewModel> GetWorkspaceRgbMatrices(string Name, CancellationToken cancellationToken, LoadOptions loadOptions = LoadOptions.PreserveWhitespace)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Workspaces", Name);

            using (StreamReader st = new StreamReader(path))
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.Async         = true;
                settings.DtdProcessing = DtdProcessing.Parse;
                using (XmlReader reader = XmlReader.Create(st, settings))
                {
                    if (WorkspaceDictionary[Name].Content == null)
                    {
                        WorkspaceDictionary[Name].Content = await XDocument.LoadAsync(reader, loadOptions, cancellationToken);
                    }
                    XNamespace ns     = "http://www.qlcplus.org/Workspace";
                    var        values = WorkspaceDictionary[Name].Content.Root
                                        .Element(ns + "Engine")
                                        .Elements(ns + "Function")
                                        .Where(item => (string)item.Attribute("Type") == "RGBMatrix")
                                        .ToList();
                    WorkspaceItemListViewModel model = new WorkspaceItemListViewModel();
                    foreach (var item in values)
                    {
                        model.WorkspaceItems.Add(new RgbMatrix
                        {
                            Name = item.Attribute("Name").Value,
                            Id   = item.Attribute("ID").Value,
                            Type = item.Attribute("Type").Value,
                            Path = new Script {
                                Name = item.Attribute("Path").Value
                            }
                        });
                    }
                    st.Dispose();
                    st.Close();
                    reader.Dispose();
                    reader.Close();
                    return(model);
                }
            }
        }