/// <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);
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
 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));
     }
 }
Esempio n. 5
0
        /// <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;
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
 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));
         }
     }
 }
Esempio n. 8
0
        /// <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);
        }
Esempio n. 9
0
        /// <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;
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        /// <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);
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 14
0
        /// <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);
                }
            }
        }
Esempio n. 15
0
		internal Series(SeriesXml xml, Study parent, IDicomFileLoader dicomFileLoader)
		{
			_xml = xml;
			_parentStudy = parent;
			_dicomFileLoader = dicomFileLoader;
			_sopInstanceCollection = new SopInstanceCollection(this);
			_firstSopInstance = _sopInstanceCollection.FirstOrDefault();
		}
Esempio n. 16
0
        /// <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;
        }
Esempio n. 17
0
		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));
            }

        }
Esempio n. 20
0
		private Series GetSeries(SeriesXml xml)
		{
			return new Series(xml, this, _dicomFileLoader);
		}
Esempio n. 21
0
        /// <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();
        }
Esempio n. 22
0
        /// <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;
            }
        }
Esempio n. 23
0
 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;
     }
 }
Esempio n. 25
0
 public Series(SeriesXml xml, Study parent)
 {
     _xml = xml;
     ParentStudy = parent;
 }
Esempio n. 26
0
 private Series GetSeries(SeriesXml xml)
 {
     return(new Series(xml, this, _dicomFileLoader));
 }
Esempio n. 27
0
 public Series(SeriesXml xml, Study parent)
 {
     _xml        = xml;
     ParentStudy = parent;
 }