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); } }
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; }