コード例 #1
0
ファイル: Season.cs プロジェクト: madams74/tvrename
 public Season(SeriesInfo theSeries, int number, int seasonid)
 {
     this.TheSeries = theSeries;
     this.SeasonNumber = number;
     this.SeasonID = seasonid;
     this.Episodes = new System.Collections.Generic.List<Episode>();
 }
コード例 #2
0
        public void DicomType_IsSeries()
        {
            // Arrange 
            var series = new SeriesInfo();

            // Act + Assert
            Assert.That(series.DicomType, Is.EqualTo(DicomInfoType.Series));
        }
コード例 #3
0
        public void SeriesInstanceUID_Setter_AfterGettingHashCode_ThrowsException()
        {
            // Arrange
            var series = new SeriesInfo
            {
                SeriesInstanceUID = new InfoIdentifier("123")
            };

            // Act
            series.GetHashCode();

            // Assert
            Assert.That(() => series.SeriesInstanceUID = new InfoIdentifier("321"), Throws.InvalidOperationException);
        }
コード例 #4
0
        public void Equals_SeriesWithSameUIDAreNotEqual()
        {
            // Arrange
            var series1 = new SeriesInfo
            {
                SeriesInstanceUID = new InfoIdentifier("123")
            };
            var series2 = new SeriesInfo
            {
                SeriesInstanceUID = new InfoIdentifier("321")
            };

            // Act
            var result = series1.Equals(series2);

            // Assert
            Assert.That(result, Is.False);
        }
コード例 #5
0
        public void Equals_SeriesWithSameUIDAreEqual()
        {
            // Arrange
            var infoIdentifier = new InfoIdentifier("123");
            var series1 = new SeriesInfo
            {
                SeriesInstanceUID = infoIdentifier
            };
            var series2 = new SeriesInfo
            {
                SeriesInstanceUID = infoIdentifier
            };

            // Act
            var result = series1.Equals(series2);

            // Assert
            Assert.That(result, Is.True);
        }
コード例 #6
0
        protected override IEnumerable<SeriesInfo> GetSeriesInfoAt(Point point)
        {
            if (XAxis.GetCurrentCoordinateCalculator() == null) return base.GetSeriesInfoAt(point);
            var xData = (IComparable)XAxis.GetCurrentCoordinateCalculator().GetDataValue(point.X);
            var yData = (IComparable)YAxis.GetCurrentCoordinateCalculator().GetDataValue(point.Y);

            var nonNullAnnotations = ParentSurface.Annotations.Where
               (u => u.X1 != null && u.X2 != null && u.Y1 != null && u.Y2 != null &&
                   Math.Round(decimal.Parse(u.X1.ToString())) != 0 && Math.Round(decimal.Parse(u.X2.ToString())) != 1);

            var annotations = nonNullAnnotations.Where(u =>
                ((double.Parse(u.X1.ToString()) + RadiusToGetElement >= double.Parse(xData.ToString())
                && double.Parse(u.X1.ToString()) - RadiusToGetElement <= double.Parse(xData.ToString()))
                ||
                double.Parse(u.Y1.ToString()) + RadiusToGetElement >= double.Parse(yData.ToString())
                && double.Parse(u.Y1.ToString()) - RadiusToGetElement <= double.Parse(yData.ToString()))
                ||
                (double.Parse(u.X2.ToString()) + RadiusToGetElement >= double.Parse(xData.ToString()) &&
                double.Parse(u.X2.ToString()) - RadiusToGetElement <= double.Parse(xData.ToString())
                ||
                double.Parse(u.Y2.ToString()) + RadiusToGetElement >= double.Parse(yData.ToString()) &&
                double.Parse(u.Y2.ToString()) - RadiusToGetElement <= double.Parse(yData.ToString())));

            var lst = new List<SeriesInfo>();
            foreach (var annotation in annotations.Where(u => u.GetType() == typeof(LineAnnotationExtended)))
            {
                if (ParentSurface.RenderableSeries.Any())
                {
                    var seriesInfo = new SeriesInfo(ParentSurface.RenderableSeries[0]);
                    seriesInfo.YValue = yData;
                    seriesInfo.XValue = xData;
                    lst.Add(seriesInfo);
                }
            }

            if (lst != null && lst.Any()) lst[0].IsHit = true;

            return lst;
        }
コード例 #7
0
		private static void FillGeneralSeriesModule(IDicomAttributeProvider target, IDicomAttributeProvider source, SeriesInfo seriesInfo)
		{
			var sourceModule = new GeneralSeriesModuleIod(source);
			var targetModule = new GeneralSeriesModuleIod(target);

			targetModule.Modality = sourceModule.Modality;
			targetModule.PatientPosition = string.Empty;
			targetModule.SeriesDateTime = seriesInfo.SeriesDateTime;
			targetModule.SeriesDescription = seriesInfo.SeriesDescription;
			targetModule.SeriesInstanceUid = seriesInfo.SeriesInstanceUid;
			targetModule.SeriesNumber = seriesInfo.SeriesNumber;
			targetModule.AnatomicalOrientationType = sourceModule.AnatomicalOrientationType;
			// body part examined and (series) laterality are not filled in because they may vary for multiple SC images
			// we'll use Image Laterality instead, and BPE is optional anyway
		}
コード例 #8
0
        public void SerializeToJson_CorrectOutput()
        {
            // Arrange
            var series = new SeriesInfo
            {
                StudyInstanceUID = new InfoIdentifier("123.456"),
                SeriesInstanceUID = new InfoIdentifier("456.789"),
                Modality = "MR"
            };

            // Act
            var result = JsonConvert.SerializeObject(series);

            // Assert
            Assert.That(result, Is.EqualTo("{\"StudyInstanceUID\":\"123.456\",\"SeriesInstanceUID\":\"456.789\",\"Modality\":\"MR\"}"));
        }
コード例 #9
0
        public void GetHashCode_SeriesWithSameUIDAreNotEqual()
        {
            // Arrange
            var series1 = new SeriesInfo
            {
                SeriesInstanceUID = new InfoIdentifier("123")
            };
            var series2 = new SeriesInfo
            {
                SeriesInstanceUID = new InfoIdentifier("456")
            };
            
            // Act
            var hash1 = series1.GetHashCode();
            var hash2 = series2.GetHashCode();

            // Assert
            Assert.That(hash1, Is.Not.EqualTo(hash2));
        }
コード例 #10
0
 public Task <IEnumerable <RemoteSearchResult> > GetSearchResults(SeriesInfo idInfo, CancellationToken cancellationToken)
 {
     return(GetSearchResults(idInfo, "tv", cancellationToken));
 }
コード例 #11
0
        public void Equals_WithDifferentType_ReturnsFalse()
        {
            // Arrange
            var infoIdentifier = new InfoIdentifier("123");
            var series = new SeriesInfo
            {
                SeriesInstanceUID = infoIdentifier
            };

            // Act
            var result = series.Equals(new object());

            // Assert
            Assert.That(result, Is.False);
        }
コード例 #12
0
        protected SeriesInfo GetSeriesFromTags(IDictionary <string, IList <string> > extractedTags)
        {
            SeriesInfo seriesInfo = new SeriesInfo();

            if (extractedTags[MatroskaConsts.TAG_EPISODE_TITLE] != null)
            {
                seriesInfo.Episode = extractedTags[MatroskaConsts.TAG_EPISODE_TITLE].FirstOrDefault();
            }

            if (extractedTags[MatroskaConsts.TAG_SERIES_TITLE] != null)
            {
                seriesInfo.Series = extractedTags[MatroskaConsts.TAG_SERIES_TITLE].FirstOrDefault();
            }

            if (extractedTags[MatroskaConsts.TAG_SERIES_IMDB_ID] != null)
            {
                string imdbId;
                foreach (string candidate in extractedTags[MatroskaConsts.TAG_SERIES_IMDB_ID])
                {
                    if (ImdbIdMatcher.TryMatchImdbId(candidate, out imdbId))
                    {
                        seriesInfo.ImdbId = imdbId;
                        break;
                    }
                }
            }

            // On Series, the counting tag is "TVDB"
            if (extractedTags[MatroskaConsts.TAG_SERIES_TVDB_ID] != null)
            {
                int tmp;
                foreach (string candidate in extractedTags[MatroskaConsts.TAG_SERIES_TVDB_ID])
                {
                    if (int.TryParse(candidate, out tmp) == true)
                    {
                        seriesInfo.TvdbId = tmp;
                        break;
                    }
                }
            }

            int tmpInt;

            if (extractedTags[MatroskaConsts.TAG_SEASON_NUMBER] != null && int.TryParse(extractedTags[MatroskaConsts.TAG_SEASON_NUMBER].FirstOrDefault(), out tmpInt))
            {
                seriesInfo.SeasonNumber = tmpInt;
            }

            if (extractedTags[MatroskaConsts.TAG_EPISODE_NUMBER] != null)
            {
                int episodeNum;

                foreach (string s in extractedTags[MatroskaConsts.TAG_EPISODE_NUMBER])
                {
                    if (int.TryParse(s, out episodeNum))
                    {
                        if (!seriesInfo.EpisodeNumbers.Contains(episodeNum))
                        {
                            seriesInfo.EpisodeNumbers.Add(episodeNum);
                        }
                    }
                }
            }
            return(seriesInfo);
        }
コード例 #13
0
        public void lvwSchedule_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            string commandName = e.CommandName.ToLower();

            if (!commandName.StartsWith("x"))
            {
                return;
            }

            ScheduleBLL scheduleDB = new ScheduleBLL();

            bool dbModified = false;

            string xPath = (string)e.CommandArgument;

            if (commandName.Equals("xdelete"))
            {
                if (scheduleDB.deleteItem(xPath))
                {
                    lvwSchedule.DataBind();
                    dbModified = true;
                }
            }
            else
            {
                SeriesInfo seriesInfo = new SeriesInfo();

                DropDownList ddlMonth       = (DropDownList)e.Item.FindControl("ddlMonth");
                DropDownList ddlYear        = (DropDownList)e.Item.FindControl("ddlYear");
                TextBox      txtTitle       = (TextBox)e.Item.FindControl("txtTitle");
                CheckBox     chkCustomTitle = (CheckBox)e.Item.FindControl("chkCustomTitle");
                CheckBox     chkVisible     = (CheckBox)e.Item.FindControl("chkVisible");

                // Set the new series information data
                seriesInfo.Date        = new DateTime(int.Parse(ddlYear.SelectedValue), int.Parse(ddlMonth.SelectedValue), 1);
                seriesInfo.Title       = txtTitle.Text;
                seriesInfo.CustomTitle = chkCustomTitle.Checked;
                seriesInfo.Visible     = chkVisible.Checked;

                // Update or save the series info based on the command name
                if (commandName.Equals("xupdate"))
                {
                    if (scheduleDB.saveChanges(xPath, seriesInfo))
                    {
                        lvwSchedule.EditIndex = -1;
                        dbModified            = true;
                    }
                }
                else   // xinsert
                {
                    if (scheduleDB.saveNewItem(seriesInfo))
                    {
                        lvwSchedule.DataBind();
                        dbModified = true;
                    }
                }

                if (dbModified)
                {
                    string strScript = "highLightSeries('" + seriesInfo.Date.ToShortDateString() + "');";
                    ScriptManager.RegisterStartupScript(Page, this.GetType(), "hlSeries", strScript, true);
                }
            }

            displayDbError(dbModified, scheduleDB.Error, commandName);
        }
コード例 #14
0
        public void Equals_WithItself_ReturnsTrue()
        {
            // Arrange
            var infoIdentifier = new InfoIdentifier("123");
            var series = new SeriesInfo
            {
                SeriesInstanceUID = infoIdentifier
            };

            // Act
            var result = series.Equals(series);

            // Assert
            Assert.That(result, Is.True);
        }
コード例 #15
0
 public async Task <EpisodeInfo[]> ListEpisodesAsync(SeriesInfo seriesInfo)
 => await ListEpisodesAsync(series_id : seriesInfo.Id);
コード例 #16
0
ファイル: EpisodeFileOrganizer.cs プロジェクト: voxadam/Emby
        public async Task <FileOrganizationResult> OrganizeWithCorrection(EpisodeFileOrganizationRequest request, AutoOrganizeOptions options, CancellationToken cancellationToken)
        {
            var result = _organizationService.GetResult(request.ResultId);

            try
            {
                Series series = null;

                if (request.NewSeriesProviderIds.Count > 0)
                {
                    // We're having a new series here
                    SeriesInfo seriesRequest = new SeriesInfo();
                    seriesRequest.ProviderIds = request.NewSeriesProviderIds;

                    var refreshOptions = new MetadataRefreshOptions(_fileSystem);
                    series      = new Series();
                    series.Id   = Guid.NewGuid();
                    series.Name = request.NewSeriesName;

                    int year;
                    if (int.TryParse(request.NewSeriesYear, out year))
                    {
                        series.ProductionYear = year;
                    }

                    var seriesFolderName = series.Name;
                    if (series.ProductionYear.HasValue)
                    {
                        seriesFolderName = string.Format("{0} ({1})", seriesFolderName, series.ProductionYear);
                    }

                    seriesFolderName = _fileSystem.GetValidFilename(seriesFolderName);

                    series.Path = Path.Combine(request.TargetFolder, seriesFolderName);

                    series.ProviderIds = request.NewSeriesProviderIds;

                    await series.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
                }

                if (series == null)
                {
                    // Existing Series
                    series = (Series)_libraryManager.GetItemById(new Guid(request.SeriesId));
                }

                await OrganizeEpisode(result.OriginalPath,
                                      series,
                                      request.SeasonNumber,
                                      request.EpisodeNumber,
                                      request.EndingEpisodeNumber,
                                      null,
                                      options,
                                      true,
                                      request.RememberCorrection,
                                      result,
                                      cancellationToken).ConfigureAwait(false);

                await _organizationService.SaveResult(result, CancellationToken.None).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                result.Status        = FileSortingStatus.Failure;
                result.StatusMessage = ex.Message;
            }

            return(result);
        }
コード例 #17
0
        protected async Task ExtractEpisodeFanArt(Guid mediaItemId, IDictionary <Guid, IList <MediaItemAspect> > aspects)
        {
            bool             shouldCacheLocal = false;
            IResourceLocator mediaItemLocator = null;

            if (!BaseInfo.IsVirtualResource(aspects))
            {
                mediaItemLocator = GetResourceLocator(aspects);
                if (mediaItemLocator == null)
                {
                    return;
                }

                //Whether local fanart should be stored in the fanart cache
                shouldCacheLocal = ShouldCacheLocalFanArt(mediaItemLocator.NativeResourcePath,
                                                          SeriesMetadataExtractor.CacheLocalFanArt, SeriesMetadataExtractor.CacheOfflineFanArt);
            }

            if (!shouldCacheLocal && SeriesMetadataExtractor.SkipFanArtDownload)
            {
                return; //Nothing to do
            }
            EpisodeInfo episodeInfo = new EpisodeInfo();

            episodeInfo.FromMetadata(aspects);

            //Episode fanart
            if (AddToCache(mediaItemId))
            {
                if (shouldCacheLocal)
                {
                    await ExtractEpisodeFolderFanArt(mediaItemLocator, mediaItemId, episodeInfo.ToString()).ConfigureAwait(false);
                }
                if (!SeriesMetadataExtractor.SkipFanArtDownload)
                {
                    await OnlineMatcherService.Instance.DownloadSeriesFanArtAsync(mediaItemId, episodeInfo).ConfigureAwait(false);
                }
            }

            //Actor fanart may be stored in the season or series directory, so get the actors now
            IList <Tuple <Guid, string> > actors = null;

            if (MediaItemAspect.TryGetAspect(aspects, VideoAspect.Metadata, out SingleMediaItemAspect videoAspect))
            {
                var actorNames = videoAspect.GetCollectionAttribute <string>(VideoAspect.ATTR_ACTORS);
                if (actorNames != null)
                {
                    RelationshipExtractorUtils.TryGetMappedLinkedIds(PersonAspect.ROLE_ACTOR, aspects, actorNames.ToList(), out actors);
                }
            }

            //Take advantage of the audio language being known and download season and series too

            //Season fanart
            if (RelationshipExtractorUtils.TryGetLinkedId(SeasonAspect.ROLE_SEASON, aspects, out Guid seasonMediaItemId) &&
                AddToCache(seasonMediaItemId))
            {
                SeasonInfo seasonInfo = episodeInfo.CloneBasicInstance <SeasonInfo>();
                if (shouldCacheLocal)
                {
                    await ExtractSeasonFolderFanArt(mediaItemLocator, seasonMediaItemId, seasonInfo.ToString(), seasonInfo.SeasonNumber, actors).ConfigureAwait(false);
                }
                if (!SeriesMetadataExtractor.SkipFanArtDownload)
                {
                    await OnlineMatcherService.Instance.DownloadSeriesFanArtAsync(seasonMediaItemId, seasonInfo).ConfigureAwait(false);
                }
            }

            //Series fanart
            if (RelationshipExtractorUtils.TryGetLinkedId(SeriesAspect.ROLE_SERIES, aspects, out Guid seriesMediaItemId) &&
                AddToCache(seriesMediaItemId))
            {
                SeriesInfo seriesInfo = episodeInfo.CloneBasicInstance <SeriesInfo>();
                if (shouldCacheLocal)
                {
                    await ExtractSeriesFolderFanArt(mediaItemLocator, seriesMediaItemId, seriesInfo.ToString(), actors).ConfigureAwait(false);
                }
                if (!SeriesMetadataExtractor.SkipFanArtDownload)
                {
                    await OnlineMatcherService.Instance.DownloadSeriesFanArtAsync(seriesMediaItemId, seriesInfo).ConfigureAwait(false);
                }
            }
        }
コード例 #18
0
        public virtual ActionResult Details(string id, string slug, Guid key)
        {
            var post = RavenSession
                       .Include <Post>(x => x.CommentsId)
                       .Include(x => x.AuthorId)
                       .Load("posts/" + id);

            if (post == null)
            {
                return(HttpNotFound());
            }

            if (post.IsPublicPost(key) == false)
            {
                return(HttpNotFound());
            }

            SeriesInfo seriesInfo = GetSeriesInfo(post.Title);

            var comments = RavenSession.Load <PostComments>(post.CommentsId) ?? new PostComments();
            var vm       = new PostViewModel
            {
                Post     = post.MapTo <PostViewModel.PostDetails>(),
                Comments = comments.Comments
                           .OrderBy(x => x.CreatedAt)
                           .MapTo <PostViewModel.Comment>(),
                NextPost          = RavenSession.GetNextPrevPost(post, true),
                PreviousPost      = RavenSession.GetNextPrevPost(post, false),
                AreCommentsClosed = comments.AreCommentsClosed(post, BlogConfig.NumberOfDayToCloseComments),
                SeriesInfo        = seriesInfo
            };

            vm.Post.Author = RavenSession.Load <User>(post.AuthorId).MapTo <PostViewModel.UserDetails>();

            var comment = TempData["new-comment"] as CommentInput;

            if (comment != null)
            {
                var newCommentEmailHash = EmailHashResolver.Resolve(comment.Email);
                var newCommentContent   = MarkdownResolver.Resolve(comment.Body);
                if (vm.Comments.Any(x =>
                                    x.Author == comment.Name &&
                                    x.EmailHash == newCommentEmailHash &&
                                    x.Body.ToString() == newCommentContent.ToString()) == false)
                {
                    vm.Comments.Add(new PostViewModel.Comment
                    {
                        CreatedAt = DateTimeOffset.Now.UtcDateTime.ToString(),
                        Author    = comment.Name,
                        Body      = newCommentContent,
                        Id        = -1,
                        Url       = UrlResolver.Resolve(comment.Url),
                        Tooltip   = "Comment by " + comment.Name,
                        EmailHash = newCommentEmailHash
                    });
                }
            }

            if (vm.Post.Slug != slug)
            {
                return(RedirectToActionPermanent("Details", new { id, vm.Post.Slug }));
            }

            SetWhateverUserIsTrustedCommenter(vm);

            return(View("Details", vm));
        }
コード例 #19
0
        private async Task <Series> AutoDetectSeries(
            string seriesName,
            int?seriesYear,
            TvFileOrganizationOptions options,
            CancellationToken cancellationToken)
        {
            if (options.AutoDetectSeries)
            {
                RemoteSearchResult finalResult = null;

                #region Search One

                var seriesInfo = new SeriesInfo
                {
                    Name = seriesName,
                    Year = seriesYear
                };

                var searchResultsTask = await _providerManager.GetRemoteSearchResults <Series, SeriesInfo>(new RemoteSearchQuery <SeriesInfo>
                {
                    SearchInfo = seriesInfo
                }, cancellationToken);

                #endregion

                // Group series by name and year (if 2 series with the exact same name, the same year ...)
                var groupedResult = searchResultsTask.GroupBy(p => new { p.Name, p.ProductionYear },
                                                              p => p,
                                                              (key, g) => new { Key = key, Result = g.ToList() }).ToList();

                if (groupedResult.Count == 1)
                {
                    finalResult = groupedResult.First().Result.First();
                }
                else if (groupedResult.Count > 1)
                {
                    var filtredResult = groupedResult
                                        .Select(i => new { Ref = i, Score = NameUtils.GetMatchScore(seriesName, seriesYear, i.Key.Name, i.Key.ProductionYear) })
                                        .Where(i => i.Score > 0)
                                        .OrderByDescending(i => i.Score)
                                        .Select(i => i.Ref)
                                        .FirstOrDefault();
                    finalResult = filtredResult?.Result.First();
                }

                if (finalResult != null)
                {
                    // We are in the good position, we can create the item
                    var organizationRequest = new EpisodeFileOrganizationRequest
                    {
                        NewSeriesName        = finalResult.Name,
                        NewSeriesProviderIds = finalResult.ProviderIds,
                        NewSeriesYear        = finalResult.ProductionYear,
                        TargetFolder         = options.DefaultSeriesLibraryPath
                    };

                    return(await CreateNewSeries(organizationRequest, finalResult, options, cancellationToken).ConfigureAwait(false));
                }
            }

            return(null);
        }
コード例 #20
0
		private static void FillGeneralImageModule(IDicomAttributeProvider target, IDicomAttributeProvider source, SeriesInfo seriesInfo)
		{
			var sourceModule = new GeneralImageModuleIod(source);
			var targetModule = new GeneralImageModuleIod(target);

			targetModule.InstanceNumber = seriesInfo.GetNextInstanceNumber();
			targetModule.PatientOrientation = string.Empty;
			targetModule.ContentDateTime = Platform.Time;
			targetModule.ImageType = sourceModule.ImageType;
			targetModule.DerivationDescription = sourceModule.DerivationDescription;
			targetModule.DerivationCodeSequence = sourceModule.DerivationCodeSequence;
			targetModule.SourceImageSequence = sourceModule.SourceImageSequence;
			targetModule.ImageComments = sourceModule.ImageComments;
			targetModule.QualityControlImage = sourceModule.QualityControlImage;
			targetModule.BurnedInAnnotation = sourceModule.BurnedInAnnotation;
			targetModule.RecognizableVisualFeatures = sourceModule.RecognizableVisualFeatures;
			targetModule.LossyImageCompression = sourceModule.LossyImageCompression;
			targetModule.LossyImageCompressionRatio = sourceModule.LossyImageCompressionRatio;
			targetModule.LossyImageCompressionMethod = sourceModule.LossyImageCompressionMethod;
		}
コード例 #21
0
		public IPresentationImage CreateSecondaryCapture(IPresentationImage image)
		{
			var imageSopProvider = image as IImageSopProvider;
			if (imageSopProvider == null)
			{
				const string msg = "image must implement IImageSopProvider";
				throw new ArgumentException(msg, "image");
			}

			SeriesInfo seriesInfo;
			var seriesKey = MakeSeriesKey(imageSopProvider.Frame.StudyInstanceUid, imageSopProvider.Sop.Modality);
			if (!_seriesInfo.TryGetValue(seriesKey, out seriesInfo))
				_seriesInfo[seriesKey] = seriesInfo = new SeriesInfo(_nextSeriesNumberDelegate.Invoke(imageSopProvider.Frame.StudyInstanceUid));

			var dcf = CreatePrototypeFile(imageSopProvider.Sop.DataSource);
			FillGeneralSeriesModule(dcf.DataSet, imageSopProvider.Frame, seriesInfo);
			FillScEquipmentModule(dcf.DataSet, Manufacturer, ManufacturersModelName, SoftwareVersions);
			FillFrameOfReferenceModule(dcf.DataSet, imageSopProvider.Frame);
			FillGeneralImageModule(dcf.DataSet, imageSopProvider.Frame, seriesInfo);
			FillScImageModule(dcf.DataSet, imageSopProvider.Frame);
			FillImagePlaneModule(dcf.DataSet, imageSopProvider.Frame);
			FillSopCommonModule(dcf.DataSet, SopClass.SecondaryCaptureImageStorageUid);
			FillAuxiliaryImageData(dcf.DataSet, imageSopProvider.Frame);

			if (image is GrayscalePresentationImage)
			{
				FillModalityLutModule(dcf.DataSet, imageSopProvider.Frame);
				FillVoiLutModule(dcf.DataSet, imageSopProvider.Frame);

				// create image pixel last - this method may need to override some attributes set previously
				CreateImagePixelModuleGrayscale(dcf.DataSet, imageSopProvider.Frame);
			}
			else if (image is ColorPresentationImage)
			{
				// create image pixel last - this method may need to override some attributes set previously
				CreateImagePixelModuleColor(dcf.DataSet, imageSopProvider.Frame);
			}
			else
			{
				// create image pixel last - this method may need to override some attributes set previously
				CreateImagePixelModuleRasterRgb(dcf.DataSet, image);
			}

			dcf.MediaStorageSopClassUid = dcf.DataSet[DicomTags.SopClassUid].ToString();
			dcf.MediaStorageSopInstanceUid = dcf.DataSet[DicomTags.SopInstanceUid].ToString();
			_files.Add(dcf);

			using (var sop = new ImageSop(new LocalSopDataSource(dcf)))
			{
				var secondaryCapture = PresentationImageFactory.Create(sop).Single();
				try
				{
					var presentationState = DicomSoftcopyPresentationState.IsSupported(image) ? DicomSoftcopyPresentationState.Create(image) : null;
					if (presentationState != null)
					{
						presentationState.DeserializeOptions |= DicomSoftcopyPresentationStateDeserializeOptions.IgnoreImageRelationship;
						presentationState.Deserialize(secondaryCapture);

						// override the spatial transform of the secondary capture because the presentation state doesn't save exact parameters
						var sourceTransform = image as ISpatialTransformProvider;
						var targetTransform = secondaryCapture as ISpatialTransformProvider;
						if (sourceTransform != null && targetTransform != null)
						{
							targetTransform.SpatialTransform.CenterOfRotationXY = sourceTransform.SpatialTransform.CenterOfRotationXY;
							targetTransform.SpatialTransform.FlipX = sourceTransform.SpatialTransform.FlipX;
							targetTransform.SpatialTransform.FlipY = sourceTransform.SpatialTransform.FlipY;
							targetTransform.SpatialTransform.RotationXY = sourceTransform.SpatialTransform.RotationXY;
							targetTransform.SpatialTransform.Scale = sourceTransform.SpatialTransform.Scale;
							targetTransform.SpatialTransform.TranslationX = sourceTransform.SpatialTransform.TranslationX;
							targetTransform.SpatialTransform.TranslationY = sourceTransform.SpatialTransform.TranslationY;

							var sourceImageTransform = sourceTransform as IImageSpatialTransform;
							var targetImageTransform = targetTransform as IImageSpatialTransform;
							if (sourceImageTransform != null && targetImageTransform != null)
								targetImageTransform.ScaleToFit = sourceImageTransform.ScaleToFit;
						}
					}

					// force a render to update the client rectangle and scaling of the image
					secondaryCapture.RenderImage(image.ClientRectangle).Dispose();
				}
				catch (Exception ex)
				{
					Platform.Log(LogLevel.Warn, ex, "An error has occurred while deserializing the image presentation state.");
				}
				return secondaryCapture;
			}
		}
コード例 #22
0
ファイル: MapCallback.cs プロジェクト: SDRC-India/sdrcdevinfo
    private SeriesData GetSeriesInfo(DI_MapDataColumns mapDataColumns, DataTable SeriesDataTable, bool isMyData, string dbNid, string LanguageCode)
    {
        SeriesData RetVal = null;
        Hashtable Indicators = new Hashtable();
        DataTable dtDistinctIUSs = null;
        DataTable dtDistinctIndicatorNIds = null;
        Hashtable IUSs = null;
        SeriesInfo seriesInfo;
        List<string> distinctIUSNIds = new List<string>();
        List<string> columnsToSkipFilter = new List<string>();
        List<string> distinctColumns = new List<string>();
        string SeriesName = string.Empty;

        try
        {
            if (SeriesDataTable.Rows.Count > 0)
            {
                seriesInfo = new SeriesInfo();
                RetVal = new SeriesData();
                if (!isMyData)
                {
                    //get theme name IndicatorUnitSubgroup from Database

                    _DBCon = Global.GetDbConnection(int.Parse(dbNid));
                    dtDistinctIndicatorNIds = SeriesDataTable.DefaultView.ToTable(true, mapDataColumns.SeriesNid);
                    dtDistinctIUSs = SeriesDataTable.DefaultView.ToTable(true, mapDataColumns.SeriesNid);
                    this.SetTimeLogIntoFile("Start getting IUSs Nmaes from Procedure sp_getIUSNames_-> " + DateTime.Now.ToLongTimeString());
                    IUSs = getIUSNames(dtDistinctIUSs, LanguageCode);
                    this.SetTimeLogIntoFile("Ends getting IUSs Nmaes from Procedure sp_getIUSNames_-> " + DateTime.Now.ToLongTimeString());
                    foreach (object key in IUSs.Keys)
                    {
                        seriesInfo = new SeriesInfo();
                        seriesInfo.SeriesID = key.ToString();
                        seriesInfo.SeriesName = IUSs[key].ToString();
                        RetVal.Add(seriesInfo);
                    }
                }
                else
                {
                    columnsToSkipFilter.Add(mapDataColumns.AreaID);
                    columnsToSkipFilter.Add(mapDataColumns.AreaName);
                    columnsToSkipFilter.Add(mapDataColumns.DataValue);
                    columnsToSkipFilter.Add(mapDataColumns.NumericData);
                    columnsToSkipFilter.Add(mapDataColumns.TimePeriod);
                    columnsToSkipFilter.Add(mapDataColumns.isMRD);

                    //set row filter
                    foreach (DataColumn column in SeriesDataTable.Columns)
                    {
                        if (!columnsToSkipFilter.Contains(column.ColumnName))
                        {
                            distinctColumns.Add(column.ColumnName);
                        }
                    }

                    dtDistinctIndicatorNIds = SeriesDataTable.DefaultView.ToTable(true, distinctColumns.ToArray());
                    foreach (DataRow row in dtDistinctIndicatorNIds.Rows)
                    {
                        seriesInfo = new SeriesInfo();
                        SeriesName = string.Empty;
                        seriesInfo.SeriesID = Convert.ToString(row[mapDataColumns.SeriesNid]);
                        foreach (string columnName in distinctColumns)
                        {
                            if (columnName != mapDataColumns.SeriesNid)
                            {
                                SeriesName += Convert.ToString(row[columnName]) + ", ";
                            }
                        }

                        seriesInfo.SeriesName = SeriesName.TrimEnd(", ".ToCharArray());
                        RetVal.Add(seriesInfo);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Global.CreateExceptionString(ex, null);

            throw;
        }

        return RetVal;
    }
コード例 #23
0
        public override void Update(MediaItem mediaItem)
        {
            base.Update(mediaItem);
            if (mediaItem == null)
            {
                return;
            }

            SeriesInfo seriesInfo = new SeriesInfo();

            if (!seriesInfo.FromMetadata(mediaItem.Aspects))
            {
                return;
            }

            Series    = seriesInfo.SeriesName.Text ?? "";
            StoryPlot = seriesInfo.Description.Text ?? "";

            AvailableSeasons  = "";
            TotalSeasons      = "";
            AvailableEpisodes = "";
            TotalEpisodes     = "";

            int?count;

            if (mediaItem.Aspects.ContainsKey(SeriesAspect.ASPECT_ID))
            {
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_AVAILABLE_SEASONS, out count))
                {
                    AvailableSeasons = count.Value.ToString();
                }

                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_NUM_SEASONS, out count))
                {
                    TotalSeasons = count.Value.ToString();
                }

                if (VirtualMediaHelper.ShowVirtualSeriesMedia)
                {
                    Seasons = string.IsNullOrEmpty(TotalSeasons) ? AvailableSeasons : TotalSeasons;
                }
                else
                {
                    Seasons = AvailableSeasons;
                }

                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_AVAILABLE_EPISODES, out count))
                {
                    AvailableEpisodes = count.Value.ToString();
                }

                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_NUM_EPISODES, out count))
                {
                    TotalEpisodes = count.Value.ToString();
                }

                if (VirtualMediaHelper.ShowVirtualSeriesMedia)
                {
                    Episodes = string.IsNullOrEmpty(TotalEpisodes) ? AvailableEpisodes : TotalEpisodes;
                }
                else
                {
                    Episodes = AvailableEpisodes;
                }

                string text;
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_SERIES_NAME, out text))
                {
                    SimpleTitle = text;
                    Series      = text;
                }
                if (MediaItemAspect.TryGetAttribute(mediaItem.Aspects, SeriesAspect.ATTR_DESCRIPTION, out text))
                {
                    StoryPlot = text;
                }
            }

            FireChange();
        }