/// <summary> /// Convert Uids into SopInstance /// </summary> /// <returns></returns> protected virtual IEnumerable <StorageInstance> GetStorageInstanceList() { string studyPath = StorageLocation.GetStudyPath(); StudyXml studyXml = LoadStudyXml(StorageLocation); Dictionary <string, StorageInstance> list = new Dictionary <string, StorageInstance>(); foreach (WorkQueueUid uid in WorkQueueUidList) { if (list.ContainsKey(uid.SopInstanceUid)) { Platform.Log(LogLevel.Warn, "AutoRoute WorkQueueUid {0} is a duplicate.", uid.Key); continue; // duplicate;} } SeriesXml seriesXml = studyXml[uid.SeriesInstanceUid]; InstanceXml instanceXml = seriesXml[uid.SopInstanceUid]; string seriesPath = Path.Combine(studyPath, uid.SeriesInstanceUid); string instancePath = Path.Combine(seriesPath, uid.SopInstanceUid + ServerPlatform.DicomFileExtension); StorageInstance instance = new StorageInstance(instancePath) { SopClass = instanceXml.SopClass, TransferSyntax = instanceXml.TransferSyntax, SopInstanceUid = instanceXml.SopInstanceUid, StudyInstanceUid = studyXml.StudyInstanceUid, PatientId = studyXml.PatientId, PatientsName = studyXml.PatientsName }; list.Add(uid.SopInstanceUid, instance); } return(list.Values); }
private void ValidateSeries(StudyStorageLocation location, Series series, SeriesXml seriesXml) { Study study = location.Study; ServerPartition partition = location.ServerPartition; if (seriesXml == null) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Series {0} exists in the datbase but not in the study xml", series.SeriesInstanceUid)); } if (series.NumberOfSeriesRelatedInstances != seriesXml.NumberOfSeriesRelatedInstances) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Number of Series Related Instance in the database and xml for series {0} do not match: {1} vs {2}", series.SeriesInstanceUid, series.NumberOfSeriesRelatedInstances, seriesXml.NumberOfSeriesRelatedInstances)); } long seriesImageCount = DirectoryUtility.Count(location.GetSeriesPath(series.SeriesInstanceUid), "*" + ServerPlatform.DicomFileExtension, true, null); if (seriesXml.NumberOfSeriesRelatedInstances != seriesImageCount) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Number of Series Related Instance in the xml for series {0} does not match number of images in the series folder: {1} vs {2}", series.SeriesInstanceUid, seriesXml.NumberOfSeriesRelatedInstances, seriesImageCount)); } }
internal Series(SeriesXml xml, Study parent, IDicomFileLoader dicomFileLoader) { _xml = xml; _parentStudy = parent; _dicomFileLoader = dicomFileLoader; _sopInstanceCollection = new SopInstanceCollection(this); _firstSopInstance = _sopInstanceCollection.FirstOrDefault(); }
protected override void OnExecute(CommandProcessor theProcessor) { // backup if (_studyXml.Contains(_seriesUid)) { Platform.Log(LogLevel.Info, "Removing series {0} from StudyXML for study {1}", _seriesUid, _studyInstanceUid); _oldSeriesXml = _studyXml[_seriesUid]; if (!_studyXml.RemoveSeries(_seriesUid)) throw new ApplicationException(String.Format("Could not remove series {0} from study {1}", _seriesUid, _studyInstanceUid)); } }
/// <summary> /// Method for processing Image level queries. /// </summary> /// <param name="message"></param> /// <param name="del"></param> /// <returns></returns> public override void Query(DicomAttributeCollection message, ServerQueryResultDelegate del) { List <uint> tagList = new List <uint>(); List <uint> matchingTagList = new List <uint>(); DicomAttributeCollection data = message; string studyInstanceUid = data[DicomTags.StudyInstanceUid].GetString(0, String.Empty); string seriesInstanceUid = data[DicomTags.SeriesInstanceUid].GetString(0, String.Empty); //TODO (CR May 2010): Should change so that the Partition AE Title is passed in the RetrieveAeTitle tag in the query message. LoadStudyPartition(studyInstanceUid); StudyStorageLocation location; FilesystemMonitor.Instance.GetReadableStudyStorageLocation(Partition.Key, studyInstanceUid, StudyRestore.True, StudyCache.True, out location); // Will always return a value, although it may be an empty StudyXml file StudyXml studyXml = location.LoadStudyXml(); SeriesXml seriesXml = studyXml[seriesInstanceUid]; if (seriesXml == null) { throw new DicomException("Unable to find series"); } foreach (DicomAttribute attrib in message) { if (attrib.Tag.TagValue == DicomTags.QueryRetrieveLevel) { continue; } tagList.Add(attrib.Tag.TagValue); if (!attrib.IsNull) { matchingTagList.Add(attrib.Tag.TagValue); } } foreach (InstanceXml theInstanceStream in seriesXml) { if (CompareInstanceMatch(message, matchingTagList, theInstanceStream)) { DicomMessage response = new DicomMessage(); PopulateInstance(message, response, tagList, theInstanceStream); del(response.DataSet); } } return; }
private void DoSeriesLevelValidation(StudyStorageLocation storageLocation, StudyXml studyXml, Study study) { IDictionary <string, Series> seriesList = study.Series; foreach (var entry in seriesList) { Series series = entry.Value; SeriesXml seriesXml = studyXml[series.SeriesInstanceUid]; ValidateSeries(storageLocation, series, seriesXml); } }
protected override void OnExecute(CommandProcessor theProcessor) { // backup if (_studyXml.Contains(_seriesUid)) { Platform.Log(LogLevel.Info, "Removing series {0} from StudyXML for study {1}", _seriesUid, _studyInstanceUid); _oldSeriesXml = _studyXml[_seriesUid]; if (!_studyXml.RemoveSeries(_seriesUid)) { throw new ApplicationException(String.Format("Could not remove series {0} from study {1}", _seriesUid, _studyInstanceUid)); } } }
/// <summary> /// Gets the series details. /// </summary> /// <param name="seriesId">The series ID.</param> /// <param name="language">The language ID.</param> /// <param name="skipCache">if set to <c>true</c> [skip cache].</param> /// <returns> /// Series XML collection /// </returns> public SeriesXml GetSeriesDetails(string seriesId, string language, bool skipCache = false) { var output = new SeriesXml(); var path = DownloadSeriesZip(seriesId, language, skipCache); ZipFile zipFile; try { zipFile = ZipFile.Read(path); } catch { File.Delete(path); path = DownloadSeriesZip(seriesId, language, true); zipFile = ZipFile.Read(path); } string temp = Get.FileSystemPaths.PathDirTemp + Path.DirectorySeparatorChar + seriesId + Path.DirectorySeparatorChar; foreach (ZipEntry e in zipFile) { Directory.CreateDirectory(temp); e.Extract(temp, ExtractExistingFileAction.OverwriteSilently); if (e.FileName == Get.Scraper.TvDBLanguageAbbr + ".xml") { output.En = File.ReadAllText(temp + string.Format("{0}.xml", Get.Scraper.TvDBLanguageAbbr), Encoding.UTF8); } else { switch (e.FileName) { case "banners.xml": output.Banners = File.ReadAllText(temp + "banners.xml", Encoding.UTF8); break; case "actors.xml": output.Actors = File.ReadAllText(temp + "actors.xml", Encoding.UTF8); break; } } } Folders.DeleteDirectory(temp); return(output); }
/// <summary> /// Load all of the instances in a given <see cref="SeriesXml"/> file into the component for sending. /// </summary> /// <param name="seriesXml"></param> /// <param name="seriesPath"></param> /// <param name="patientsName"></param> /// <param name="patientId"></param> /// <param name="studyXml"></param> public void LoadSeriesFromSeriesXml(StudyXml studyXml, string seriesPath, SeriesXml seriesXml, string patientsName, string patientId) { foreach (InstanceXml instanceXml in seriesXml) { string instancePath = Path.Combine(seriesPath, instanceXml.SopInstanceUid + ServerPlatform.DicomFileExtension); var instance = new StorageInstance(instancePath); AddStorageInstance(instance); instance.SopClass = instanceXml.SopClass; instance.TransferSyntax = instanceXml.TransferSyntax; instance.SopInstanceUid = instanceXml.SopInstanceUid; instance.PatientId = patientId; instance.PatientsName = patientsName; instance.StudyInstanceUid = studyXml.StudyInstanceUid; } }
protected override void OnExecute(CommandProcessor theProcessor) { // Setup the insert parameters string seriesInstanceUid = _file.DataSet[DicomTags.SeriesInstanceUid].GetString(0, string.Empty); string sopinstanceUid = _file.MediaStorageSopInstanceUid; FileSize = 0; var finfo = new FileInfo(_file.Filename); if (finfo.Exists) { FileSize = finfo.Length; } // Save the collection for undo purposes SeriesXml seriesXml = _stream[seriesInstanceUid]; if (seriesXml != null) { InstanceXml instanceXml = seriesXml[sopinstanceUid]; if (instanceXml != null) { _saveCollection = instanceXml.Collection; } } if (false == _stream.RemoveFile(_file)) { Platform.Log(LogLevel.Warn, "SOP was unexpectedly not in XML Study Descriptor for file: {0}", _file.Filename); } if (false == _stream.AddFile(_file, FileSize, _outputSettings)) { Platform.Log(LogLevel.Error, "Unexpected error adding SOP to XML Study Descriptor for file {0}", _file.Filename); throw new ApplicationException("Unexpected error adding SOP to XML Study Descriptor for SOP: " + _file.MediaStorageSopInstanceUid); } // Write it back out. We flush it out with every added image so that if a failure happens, // we can recover properly. WriteStudyStream( Path.Combine(_studyStorageLocation.GetStudyPath(), _studyStorageLocation.StudyInstanceUid + ".xml"), Path.Combine(_studyStorageLocation.GetStudyPath(), _studyStorageLocation.StudyInstanceUid + ".xml.gz"), _stream); }
private static IList <BaseImageLevelUpdateCommand> BuildCommandsFromStudyXml(Type type, StudyXml studyXml, IDicomAttributeProvider originalDicomAttributeProvider) { var commandList = new List <BaseImageLevelUpdateCommand>(); EntityDicomMap fieldMap = EntityDicomMapManager.Get(type); //XmlDocument studyXmlDoc = studyXml.GetMemento(new StudyXmlOutputSettings()); // Get the First InstanceXml of the first image IEnumerator <SeriesXml> seriesEnumerator = studyXml.GetEnumerator(); seriesEnumerator.MoveNext(); SeriesXml seriesXml = seriesEnumerator.Current; IEnumerator <InstanceXml> instanceEnumerator = seriesXml.GetEnumerator(); instanceEnumerator.MoveNext(); InstanceXml instanceXml = instanceEnumerator.Current; foreach (DicomTag tag in fieldMap.Keys) { string originalValue = null; string newValue = null; DicomAttribute attribute; if (originalDicomAttributeProvider != null && originalDicomAttributeProvider.TryGetAttribute(tag, out attribute)) { originalValue = attribute.ToString(); } if (instanceXml != null) { attribute = instanceXml[tag]; } else { attribute = null; } if (attribute != null) { newValue = attribute.ToString(); } SetTagCommand cmd = new SetTagCommand(tag.TagValue, originalValue, newValue); commandList.Add(cmd); } return(commandList); }
/// <summary> /// Populate series search details into object. /// </summary> /// <param name="seriesSearchDetails">The series Search Details.</param> /// <returns> /// The series object. /// </returns> public Series OpenNewSeries(SearchDetails seriesSearchDetails) { SeriesXml rawData = this.GetSeriesDetails(seriesSearchDetails.SeriesID, seriesSearchDetails.Language); var details = new Series(); details.PopulateFullDetails(rawData); if (!string.IsNullOrEmpty(details.SeriesBannerUrl)) { string url = "http://cache.thetvdb.com/banners/_cache/" + details.SeriesBannerUrl; string imagePath = Downloader.ProcessDownload(url, DownloadType.Binary, Section.Tv); details.SmallBanner = ImageHandler.LoadImage(imagePath); } return(details); }
/// <summary> /// Load the first instance from the first series of the StudyXml file for a study. /// </summary> /// <param name="location">The storage location of the study.</param> /// <returns></returns> protected static DicomFile LoadInstance(StudyStorageLocation location) { string studyXml = Path.Combine(location.GetStudyPath(), location.StudyInstanceUid + ".xml"); if (!File.Exists(studyXml)) { return(null); } FileStream stream = FileStreamOpener.OpenForRead(studyXml, FileMode.Open); var theMemento = new StudyXmlMemento(); StudyXmlIo.Read(theMemento, stream); stream.Close(); stream.Dispose(); var xml = new StudyXml(); xml.SetMemento(theMemento); IEnumerator <SeriesXml> seriesEnumerator = xml.GetEnumerator(); if (seriesEnumerator.MoveNext()) { SeriesXml seriesXml = seriesEnumerator.Current; IEnumerator <InstanceXml> instanceEnumerator = seriesXml.GetEnumerator(); if (instanceEnumerator.MoveNext()) { InstanceXml instance = instanceEnumerator.Current; var file = new DicomFile("file.dcm", new DicomAttributeCollection(), instance.Collection) { TransferSyntax = instance.TransferSyntax }; return(file); } } return(null); }
/// <summary> /// Populates the the series object with details from a series xml object. /// </summary> /// <param name="xml">The series xml.</param> public void PopulateFullDetails(SeriesXml xml) { var docList = new XmlDocument(); docList.LoadXml(xml.En); XmlNodeList nodes = docList.GetElementsByTagName("Series"); var doc = new XmlDocument(); doc.LoadXml(nodes[0].OuterXml); this.ID = XRead.GetUInt(doc, "id"); this.AirsDayOfWeek = XRead.GetString(doc, "Airs_DayOfWeek"); this.AirsTime = XRead.GetString(doc, "Airs_Time"); this.ContentRating = XRead.GetString(doc, "ContentRating"); this.FirstAired = XRead.GetDateTime(doc, "FirstAired", "yyyy-MM-dd"); this.Genre = XRead.GetString(doc, "Genre").ToBindingStringList('|'); this.ImdbId = XRead.GetString(doc, "IMDB_ID"); this.Language = XRead.GetString(doc, "Language"); this.Network = XRead.GetString(doc, "Network"); this.NetworkID = XRead.GetString(doc, "NetworkID"); this.Overview = XRead.GetString(doc, "Overview"); this.Rating = XRead.GetDouble(doc, "Rating"); this.Runtime = XRead.GetInt(doc, "Runtime"); this.SeriesID = XRead.GetUInt(doc, "id"); this.SeriesName = XRead.GetString(doc, "SeriesName"); this.Status = XRead.GetString(doc, "Status"); this.Added = XRead.GetString(doc, "added"); this.AddedBy = XRead.GetString(doc, "addedby"); this.SeriesBannerUrl = XRead.GetString(doc, "banner"); this.FanartUrl = XRead.GetString(doc, "fanart"); this.Lastupdated = XRead.GetString(doc, "lastupdated"); this.Zap2It_Id = XRead.GetString(doc, "zap2it_id"); this.PosterUrl = XRead.GetString(doc, "poster"); nodes = docList.GetElementsByTagName("Episode"); int? count = 0; // Count Seasons foreach (XmlNode node in nodes) { var episode = new Episode(); episode.Populate(node.OuterXml); if (episode.SeasonNumber > count) { count = episode.SeasonNumber; } } // Extract main Actors var actorsDoc = new XDocument(XDocument.Parse(xml.Actors)); IEnumerable<XElement> linqActors = from a in actorsDoc.Descendants("Actor") select a; foreach (XElement a in linqActors) { string image = a.Element("Image").Value; if (!string.IsNullOrEmpty(image)) { image = TvDBFactory.GetImageUrl(image); } var m = new PersonModel(a.Element("Name").Value, image, a.Element("Role").Value); this.Actors.Add(m); } this.Banner.Populate(xml.Banners); // Create Seasons int count2; int.TryParse(count.ToString(), out count2); for (int i = 0; i < count2 + 1; i++) { var season = new Season { SeasonNumber = i }; List<string> seasonBanner = (from p in this.Banner.Season where p.BannerType2 == BannerType2.seasonwide && p.Season == season.SeasonNumber.ToString() select p.BannerPath).ToList(); if (seasonBanner.Count > 0) { season.BannerUrl = seasonBanner[0]; } List<string> seasonPoster = (from p in this.Banner.Season where p.Season == season.SeasonNumber.ToString() select p.BannerPath). ToList(); if (this.posterUrl != null && seasonPoster.Count > 0) { season.PosterUrl = seasonPoster[0]; } List<BannerDetails> seasonFanart = (from p in this.Banner.Fanart select p).ToList(); if (seasonFanart.Count > i) { season.FanartUrl = seasonFanart[i].BannerPath; } else if (seasonFanart.Count > 0) { season.FanartUrl = seasonFanart[0].BannerPath; } this.Seasons.Add(i, season); } foreach (XmlNode node in nodes) { var episode = new Episode(); bool result = episode.Populate(node.OuterXml); if (result) { int episodeNumber; int.TryParse(episode.SeasonNumber.ToString(), out episodeNumber); this.Seasons[episodeNumber].Episodes.Add(episode); } } }
internal Series(SeriesXml xml, Study parent, IDicomFileLoader dicomFileLoader) { _xml = xml; _parentStudy = parent; _dicomFileLoader = dicomFileLoader; _sopInstanceCollection = new SopInstanceCollection(this); _firstSopInstance = _sopInstanceCollection.FirstOrDefault(); }
/// <summary> /// Gets the series details. /// </summary> /// <param name="seriesId">The series ID.</param> /// <param name="language">The language ID.</param> /// <param name="skipCache">if set to <c>true</c> [skip cache].</param> /// <returns> /// Series XML collection /// </returns> public SeriesXml GetSeriesDetails(string seriesId, string language, bool skipCache = false) { var output = new SeriesXml(); var path = DownloadSeriesZip(seriesId, language, skipCache); ZipFile zipFile; try { zipFile = ZipFile.Read(path); } catch { File.Delete(path); path = DownloadSeriesZip(seriesId, language, true); zipFile = ZipFile.Read(path); } string temp = Get.FileSystemPaths.PathDirTemp + Path.DirectorySeparatorChar + seriesId + Path.DirectorySeparatorChar; foreach (ZipEntry e in zipFile) { Directory.CreateDirectory(temp); e.Extract(temp, ExtractExistingFileAction.OverwriteSilently); switch (e.FileName) { case "en.xml": output.En = File.ReadAllText(temp + "en.xml", Encoding.UTF8); break; case "banners.xml": output.Banners = File.ReadAllText(temp + "banners.xml", Encoding.UTF8); break; case "actors.xml": output.Actors = File.ReadAllText(temp + "actors.xml", Encoding.UTF8); break; } } Delete.DeleteDirectory(temp); return output; }
internal Series(Study parentStudy, SeriesXml seriesXml) { _parentStudy = parentStudy; _seriesXml = seriesXml; }
/// <summary> /// Load all of the instances in a given <see cref="SeriesXml"/> file into the component for sending. /// </summary> /// <param name="seriesXml"></param> /// <param name="location"></param> /// <param name="patientsName"></param> /// <param name="patientId"></param> /// <param name="studyXml"></param> private void LoadSeriesFromSeriesXml(StudyXml studyXml, StudyLocation location, SeriesXml seriesXml, string patientsName, string patientId) { foreach (InstanceXml instanceXml in seriesXml) { var instance = new StorageInstance(location.GetSopInstancePath(seriesXml.SeriesInstanceUid, instanceXml.SopInstanceUid)); AddStorageInstance(instance); instance.SopClass = instanceXml.SopClass; instance.TransferSyntax = instanceXml.TransferSyntax; instance.SopInstanceUid = instanceXml.SopInstanceUid; instance.PatientId = patientId; instance.PatientsName = patientsName; instance.StudyInstanceUid = studyXml.StudyInstanceUid; } }
private void ValidateSeries(StudyStorageLocation location, Series series, SeriesXml seriesXml) { Study study = location.Study; ServerPartition partition = location.ServerPartition; if (seriesXml == null) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Series {0} exists in the datbase but not in the study xml", series.SeriesInstanceUid)); } if (series.NumberOfSeriesRelatedInstances != seriesXml.NumberOfSeriesRelatedInstances) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Number of Series Related Instance in the database and xml for series {0} do not match: {1} vs {2}", series.SeriesInstanceUid, series.NumberOfSeriesRelatedInstances, seriesXml.NumberOfSeriesRelatedInstances)); } long seriesImageCount = DirectoryUtility.Count(location.GetSeriesPath(series.SeriesInstanceUid), "*" + ServerPlatform.DicomFileExtension, true, null); if (seriesXml.NumberOfSeriesRelatedInstances != seriesImageCount) { throw new StudyIntegrityValidationFailure(ValidationErrors.InconsistentObjectCount, new ValidationStudyInfo(study, partition), String.Format("Number of Series Related Instance in the xml for series {0} does not match number of images in the series folder: {1} vs {2}", series.SeriesInstanceUid, seriesXml.NumberOfSeriesRelatedInstances, seriesImageCount)); } }
private Series GetSeries(SeriesXml xml) { return new Series(xml, this, _dicomFileLoader); }
/// <summary> /// Populates the the series object with details from a series xml object. /// </summary> /// <param name="xml">The series xml.</param> public void PopulateFullDetails(SeriesXml xml) { var docList = new XmlDocument(); docList.LoadXml(xml.En); XmlNodeList nodes = docList.GetElementsByTagName("Series"); var doc = new XmlDocument(); doc.LoadXml(nodes[0].OuterXml); this.ID = XRead.GetUInt(doc, "id"); this.AirsDayOfWeek = XRead.GetString(doc, "Airs_DayOfWeek"); this.AirsTime = XRead.GetString(doc, "Airs_Time"); this.ContentRating = XRead.GetString(doc, "ContentRating"); this.FirstAired = XRead.GetDateTime(doc, "FirstAired", "yyyy-MM-dd"); this.Genre = XRead.GetString(doc, "Genre").ToBindingStringList('|'); this.ImdbId = XRead.GetString(doc, "IMDB_ID"); this.Language = XRead.GetString(doc, "Language"); this.Network = XRead.GetString(doc, "Network"); this.NetworkID = XRead.GetString(doc, "NetworkID"); this.Overview = XRead.GetString(doc, "Overview"); this.Rating = XRead.GetDouble(doc, "Rating"); this.Runtime = XRead.GetInt(doc, "Runtime"); this.SeriesID = XRead.GetUInt(doc, "id"); this.SeriesName = XRead.GetString(doc, "SeriesName"); this.Status = XRead.GetString(doc, "Status"); this.Added = XRead.GetString(doc, "added"); this.AddedBy = XRead.GetString(doc, "addedby"); this.SeriesBannerUrl = XRead.GetString(doc, "banner"); this.FanartUrl = XRead.GetString(doc, "fanart"); this.Lastupdated = XRead.GetString(doc, "lastupdated"); this.Zap2It_Id = XRead.GetString(doc, "zap2it_id"); this.PosterUrl = XRead.GetString(doc, "poster"); nodes = docList.GetElementsByTagName("Episode"); int?count = 0; // Count Seasons foreach (XmlNode node in nodes) { var episode = new Episode(); episode.Populate(node.OuterXml); if (episode.SeasonNumber > count) { count = episode.SeasonNumber; } } // Extract main Actors var actorsDoc = new XDocument(XDocument.Parse(xml.Actors)); IEnumerable <XElement> linqActors = from a in actorsDoc.Descendants("Actor") select a; foreach (XElement a in linqActors) { string image = a.Element("Image").Value; if (!string.IsNullOrEmpty(image)) { image = TvDBFactory.GetImageUrl(image); } var m = new PersonModel(a.Element("Name").Value, image, a.Element("Role").Value); this.Actors.Add(m); } this.Banner.Populate(xml.Banners); // Create Seasons int count2; int.TryParse(count.ToString(), out count2); for (int i = 0; i < count2 + 1; i++) { var season = new Season { SeasonNumber = i }; List <string> seasonBanner = (from p in this.Banner.Season where p.BannerType2 == BannerType2.seasonwide && p.Season == season.SeasonNumber.ToString() select p.BannerPath).ToList(); if (seasonBanner.Count > 0) { season.BannerUrl = seasonBanner[0]; //this.AddHighPriorityToBackgroundQueueWithCache(season.BannerUrl); } List <string> seasonPoster = (from p in this.Banner.Season where p.Season == season.SeasonNumber.ToString() select p.BannerPath). ToList(); if (this.posterUrl != null && seasonPoster.Count > 0) { season.PosterUrl = seasonPoster[0]; //this.AddHighPriorityToBackgroundQueueWithCache(season.PosterUrl); } List <BannerDetails> seasonFanart = (from p in this.Banner.Fanart select p).ToList(); if (seasonFanart.Count > i) { season.FanartUrl = seasonFanart[i].BannerPath; } else if (seasonFanart.Count > 0) { season.FanartUrl = seasonFanart[0].BannerPath; } if (!string.IsNullOrEmpty(season.FanartUrl)) { //this.AddHighPriorityToBackgroundQueueWithCache(season.FanartUrl); } this.Seasons.Add(i, season); } foreach (XmlNode node in nodes) { var episode = new Episode(); bool result = episode.Populate(node.OuterXml); if (result) { int episodeNumber; int.TryParse(episode.SeasonNumber.ToString(), out episodeNumber); this.Seasons[episodeNumber].Episodes.Add(episode); } } this.PreCacheSeriesThumbs(); }
/// <summary> /// Load all of the instances in a given <see cref="SeriesXml"/> file into the component for sending. /// </summary> /// <param name="seriesXml"></param> /// <param name="location"></param> /// <param name="patientsName"></param> /// <param name="patientId"></param> /// <param name="studyXml"></param> private void LoadSeriesFromSeriesXml(StudyXml studyXml, StudyLocation location, SeriesXml seriesXml, string patientsName, string patientId) { foreach (InstanceXml instanceXml in seriesXml) { var instance = new StorageInstance(location.GetSopInstancePath(seriesXml.SeriesInstanceUid, instanceXml.SopInstanceUid)); AddStorageInstance(instance); instance.SopClass = instanceXml.SopClass; instance.TransferSyntax = instanceXml.TransferSyntax; instance.SopInstanceUid = instanceXml.SopInstanceUid; instance.PatientId = patientId; instance.PatientsName = patientsName; instance.StudyInstanceUid = studyXml.StudyInstanceUid; } }
internal Series(Study parentStudy, SeriesXml seriesXml) { _parentStudy = parentStudy; _seriesXml = seriesXml; }
/// <summary> /// Load all of the instances in a given <see cref="SeriesXml"/> file into the component for sending. /// </summary> /// <param name="seriesXml"></param> /// <param name="seriesPath"></param> /// <param name="patientsName"></param> /// <param name="patientId"></param> /// <param name="studyXml"></param> public void LoadSeriesFromSeriesXml(StudyXml studyXml, string seriesPath, SeriesXml seriesXml, string patientsName, string patientId) { foreach (InstanceXml instanceXml in seriesXml) { string instancePath = Path.Combine(seriesPath, instanceXml.SopInstanceUid + ServerPlatform.DicomFileExtension); var instance = new StorageInstance(instancePath); AddStorageInstance(instance); instance.SopClass = instanceXml.SopClass; instance.TransferSyntax = instanceXml.TransferSyntax; instance.SopInstanceUid = instanceXml.SopInstanceUid; instance.PatientId = patientId; instance.PatientsName = patientsName; instance.StudyInstanceUid = studyXml.StudyInstanceUid; } }
public Series(SeriesXml xml, Study parent) { _xml = xml; ParentStudy = parent; }
private Series GetSeries(SeriesXml xml) { return(new Series(xml, this, _dicomFileLoader)); }
public Series(SeriesXml xml, Study parent) { _xml = xml; ParentStudy = parent; }