コード例 #1
0
ファイル: WorkshopResourceModel.cs プロジェクト: sdjnyty/amt
        public virtual void Delete()
        {
            var directories = Files.Select(f => Path.GetDirectoryName(f.FullPathName)).Distinct().OrderBy(d => d.Count(s => s.Equals('\\')));

            foreach (var file in Files)
            {
                try
                {
                    File.Delete(file.FullPathName);
                }
                catch (IOException) { }
            }
            foreach (var directory in directories)
            {
                try
                {
                    if (!Directory.EnumerateFiles(directory).Any())
                    {
                        Directory.Delete(directory);
                    }
                }
                catch (IOException) { }
            }
            DatabaseClient.DeleteResourceFiles(Id);
            Files.Clear();
            if (DeletePending)
            {
                ProgramModel.Resources.Remove(this);
                DatabaseClient.DeleteResource(Id);
            }
            else
            {
                UpdateStatus(WorkshopResourceStatus.NotInstalled);
            }
        }
コード例 #2
0
ファイル: ProgramModel.cs プロジェクト: sdjnyty/amt
        public static async Task UpdateResources()
        {
            var(timestamp, dtos) = await WebServiceClient.GetUpdatedServerResourcesAsync();

            var toSave = new List <WorkshopResourceModel>();

            foreach (var dto in dtos)
            {
                var resource = Resources.FirstOrDefault(l => l.Id == dto.Id);
                if (resource == null)
                // resource does not exist locally
                {
                    switch (dto.Type)
                    {
                    case WorkshopResourceType.Drs:
                        resource = Mapper.Map <WorkshopResourceDto, DrsResourceModel>(dto);
                        break;

                    case WorkshopResourceType.Mod:
                        resource = Mapper.Map <WorkshopResourceDto, ModResourceModel>(dto);
                        break;

                    case WorkshopResourceType.Taunt:
                        resource = Mapper.Map <WorkshopResourceDto, TauntResourceModel>(dto);
                        break;

                    case WorkshopResourceType.Language:
                        resource = Mapper.Map <WorkshopResourceDto, LanguageResourceModel>(dto);
                        break;

                    default:
                        resource = Mapper.Map <WorkshopResourceDto, WorkshopResourceModel>(dto);
                        break;
                    }
                    resource.Status = WorkshopResourceStatus.NotInstalled;
                    Resources.Add(resource);
                    toSave.Add(resource);
                }
                else if ((ResourceServerStatus)dto.Status == ResourceServerStatus.Deleted)
                // resource has been deleted from server
                {
                    if (resource.Status == WorkshopResourceStatus.NotInstalled)
                    {
                        DatabaseClient.DeleteResource(resource.Id);
                        Resources.Remove(resource);
                    }
                    else
                    {
                        resource.DeletePending = true;
                        toSave.Add(resource);
                    }
                }
                else
                // resource exists locally
                {
                    if (dto.LastFileChangeDate > resource.LastFileChangeDate)
                    // resource file list updated
                    {
                        resource.LastFileChangeDate = dto.LastFileChangeDate;
                        resource.Status             = WorkshopResourceStatus.NeedUpdate;
                    }
                    if (dto.LastChangeDate > resource.LastChangeDate)
                    // resource metadata updated
                    {
                        resource.Rating         = dto.Rating;
                        resource.DownloadCount  = dto.DownloadCount;
                        resource.Name           = dto.Name;
                        resource.Description    = dto.Description;
                        resource.GameVersion    = dto.GameVersion;
                        resource.SourceUrl      = dto.SourceUrl;
                        resource.LastChangeDate = dto.LastChangeDate;
                    }
                    toSave.Add(resource);
                }
            }
            DatabaseClient.SaveResources(toSave);
            Config.WorkshopTimestamp = timestamp;
        }