示例#1
0
 public void ReloadSnapshot()
 {
     if (!_snapshot.IsNullOrEmpty())
     {
         ResourceEntities.LoadSnapshot(_snapshot);
     }
 }
示例#2
0
        private bool InternalLoad([NotNull][ItemNotNull] IEnumerable <IGrouping <string, ProjectFile> > resourceFilesByDirectory)
        {
            Contract.Requires(resourceFilesByDirectory != null);

            if (!LoadEntities(resourceFilesByDirectory))
            {
                return(false); // nothing has changed, no need to continue
            }
            if (!string.IsNullOrEmpty(_snapshot))
            {
                ResourceEntities.LoadSnapshot(_snapshot);
            }

            var cultureKeys = ResourceEntities
                              .SelectMany(entity => entity.Languages)
                              .Select(lang => lang.CultureKey)
                              .Distinct()
                              .OrderBy(item => item.Culture?.DisplayName)
                              .ToArray();

            Cultures.SynchronizeWith(cultureKeys);

            OnLoaded();

            return(true);
        }
        private ResourceManager([NotNull] ISourceFilesProvider sourceFilesProvider, [NotNull] IConfiguration configuration)
        {
            Configuration = configuration;

            _sourceFilesProvider = sourceFilesProvider;
            TableEntries         = ResourceEntities.ObservableSelectMany(entity => entity.Entries);
        }
示例#4
0
 public void DeleteResource(string resourceIDString)
 {
     if (resourceIDString.ConvertListString().Count > 0)
     {
         //ObjectQuery<WTF.Resource.Entity.Sys_Resource> query = this.CurrentEntities.sys_resource.Where("it.ResourceID in {" + resourceIDString.ConvertStringID() + "}", new ObjectParameter[0]).Include("Sys_ResourceType").Include("Sys_ResourceVer");
         List <Sys_Resource> query            = this.CurrentEntities.sys_resource.Where("it.ResourceID in {" + resourceIDString.ConvertStringID() + "}", new ObjectParameter[0]).Include("Sys_ResourceType").Include("Sys_ResourceVer").ToList();
         List <string>       resourceFilePath = new List <string>();
         using (IEnumerator <WTF.Resource.Entity.Sys_Resource> enumerator = query.GetEnumerator())
         {
             while (enumerator.MoveNext())
             {
                 WTF.Resource.Entity.Sys_Resource     objResource = enumerator.Current;
                 WTF.Resource.Entity.Sys_ResourcePath path        = this.CurrentEntities.sys_resourcepath.First <WTF.Resource.Entity.Sys_ResourcePath>(s => s.ResourcePathID == objResource.Sys_ResourceType.ResourcePathID);
                 foreach (WTF.Resource.Entity.Sys_ResourceVer ver in objResource.Sys_ResourceVer)
                 {
                     if (string.IsNullOrEmpty(ver.DictionaryPath))
                     {
                         resourceFilePath.Add(this.GetresourceFullFileNamePath(path.StoragePath, (AccessModeCodeType)objResource.Sys_ResourceType.AccessModeCodeType, objResource.Sys_ResourceType.ResourceTypeCode, this.GetResourcePathFormatValue(ver.UpdateDateTime, ver.ResourceVerID, objResource.Sys_ResourceType.PathFormatCodeType), ver.ResourceGUIDFileName, ver.ResourceFileName, false));
                     }
                     else
                     {
                         resourceFilePath.Add(Path.Combine(path.StoragePath, ver.DictionaryPath));
                     }
                 }
             }
         }
         if (resourceFilePath.Count > 0)
         {
             this.DeleteResourceFile(resourceFilePath);
         }
         this.objCurrentEntities = null;
         this.CurrentEntities.sys_resource.DeleteDataPrimaryKey <WTF.Resource.Entity.Sys_Resource>(resourceIDString);
     }
 }
示例#5
0
        public ResourceManager(ISourceFilesProvider sourceFilesProvider, IConfiguration configuration, ITracer tracer)
        {
            Configuration = configuration;

            _sourceFilesProvider = sourceFilesProvider;
            _tracer      = tracer;
            TableEntries = ResourceEntities.ObservableSelectMany(entity => entity.Entries);
        }
示例#6
0
        /// <summary>
        /// Saves all modified resource files.
        /// </summary>
        /// <exception cref="IOException"></exception>
        /// <exception cref="UnauthorizedAccessException"></exception>
        public void Save()
        {
            var changedResourceLanguages = ResourceEntities
                                           .SelectMany(entity => entity.Languages)
                                           .Where(lang => lang.HasChanges)
                                           .ToArray();

            changedResourceLanguages.ForEach(resourceLanguage => resourceLanguage.Save());
        }
        private bool LoadEntities([NotNull][ItemNotNull] IEnumerable <IGrouping <string, ProjectFile> > fileNamesByDirectory)
        {
            var hasChanged = false;

            var unmatchedEntities = ResourceEntities.ToList();

            foreach (var directory in fileNamesByDirectory)
            {
                var directoryName   = directory.Key;
                var filesByBaseName = directory.GroupBy(file => file.GetBaseName(), StringComparer.OrdinalIgnoreCase);

                foreach (var files in filesByBaseName)
                {
                    if (!files.Any())
                    {
                        continue;
                    }

                    var baseName       = files.Key;
                    var filesByProject = files.GroupBy(file => file.ProjectName);

                    foreach (var item in filesByProject)
                    {
                        var projectName  = item.Key;
                        var projectFiles = item.ToArray();

                        if (string.IsNullOrEmpty(projectName) || !projectFiles.Any())
                        {
                            continue;
                        }

                        var existingEntity = ResourceEntities.FirstOrDefault(entity => entity.EqualsAll(projectName, baseName, directoryName));

                        if (existingEntity != null)
                        {
                            if (existingEntity.Update(projectFiles))
                            {
                                hasChanged = true;
                            }

                            unmatchedEntities.Remove(existingEntity);
                        }
                        else
                        {
                            ResourceEntities.Add(new ResourceEntity(this, projectName !, baseName, directoryName, projectFiles));
                            hasChanged = true;
                        }
                    }
                }
            }

            ResourceEntities.RemoveRange(unmatchedEntities);

            hasChanged |= unmatchedEntities.Any();

            return(hasChanged);
        }
示例#8
0
文件: API.cs 项目: Landrut/CherryMP
        internal void invokeResourceStop()
        {
            onResourceStop?.Invoke();

            lock (ResourceEntities)
            {
                for (int i = ResourceEntities.Count - 1; i >= 0; i--)
                {
                    deleteEntityInternal(ResourceEntities[i]);
                }
                ResourceEntities.Clear();
            }

            lock (ResourceColShapes)
            {
                for (int i = ResourceColShapes.Count - 1; i >= 0; i--)
                {
                    Program.ServerInstance.ColShapeManager.Remove(ResourceColShapes[i]);
                }
                ResourceColShapes.Clear();
            }
        }
示例#9
0
        private async Task <bool> InternalLoadAsync(ICollection <IGrouping <string, ProjectFile> > resourceFilesByDirectory, CancellationToken?cancellationToken)
        {
            if (!await LoadEntitiesAsync(resourceFilesByDirectory, cancellationToken).ConfigureAwait(true))
            {
                return(false); // nothing has changed, no need to continue
            }
            if (!_snapshot.IsNullOrEmpty())
            {
                ResourceEntities.LoadSnapshot(_snapshot);
            }

            var cultureKeys = ResourceEntities
                              .SelectMany(entity => entity.Languages)
                              .Select(lang => lang.CultureKey)
                              .Distinct()
                              .OrderBy(item => item.Culture?.DisplayName)
                              .ToArray();

            Cultures.SynchronizeWith(cultureKeys);

            OnLoaded();

            return(true);
        }
示例#10
0
        public string CreateSnapshot()
        {
            Contract.Ensures(Contract.Result <string>() != null);

            return(_snapshot = ResourceEntities.CreateSnapshot());
        }
示例#11
0
        public void LoadSnapshot(string value)
        {
            ResourceEntities.LoadSnapshot(value);

            _snapshot = value;
        }
 public ResourceManager(IConfiguration configuration, ITracer tracer)
 {
     Configuration = configuration;
     Tracer        = tracer;
     TableEntries  = ResourceEntities.ObservableSelectMany(entity => entity.Entries);
 }
 public string CreateSnapshot()
 {
     return(_snapshot = ResourceEntities.CreateSnapshot());
 }
示例#14
0
        private bool LoadEntities([NotNull] IEnumerable<IGrouping<string, ProjectFile>> fileNamesByDirectory)
        {
            Contract.Requires(fileNamesByDirectory != null);

            var hasChanged = false;

            var unmatchedEntities = ResourceEntities.ToList();

            foreach (var directory in fileNamesByDirectory)
            {
                Contract.Assume(directory != null);

                var directoryName = directory.Key;
                Contract.Assume(!string.IsNullOrEmpty(directoryName));

                var filesByBaseName = directory.GroupBy(file => file.GetBaseName());

                foreach (var files in filesByBaseName)
                {
                    if ((files == null) || !files.Any())
                        continue;

                    var baseName = files.Key;
                    Contract.Assume(!string.IsNullOrEmpty(baseName));

                    var filesByProject = files.GroupBy(file => file.ProjectName);

                    foreach (var item in filesByProject)
                    {
                        Contract.Assume(item != null);

                        var projectName = item.Key;
                        var projectFiles = item.ToArray();

                        if (string.IsNullOrEmpty(projectName) || !projectFiles.Any())
                            continue;

                        var existingEntity = ResourceEntities.FirstOrDefault(entity => entity.EqualsAll(projectName, baseName, directoryName));

                        if (existingEntity != null)
                        {
                            if (existingEntity.Update(projectFiles))
                                hasChanged = true;

                            unmatchedEntities.Remove(existingEntity);
                        }
                        else
                        {
                            ResourceEntities.Add(new ResourceEntity(this, projectName, baseName, directoryName, projectFiles));
                            hasChanged = true;
                        }
                    }
                }
            }

            ResourceEntities.RemoveRange(unmatchedEntities);

            hasChanged |= unmatchedEntities.Any();

            return hasChanged;
        }
示例#15
0
 public void ReloadSnapshot()
 {
     if (!string.IsNullOrEmpty(_snapshot))
         ResourceEntities.LoadSnapshot(_snapshot);
 }