/// <summary>
 /// Asserts that the <paramref name="sqlItem"/> contains equivalent values from the <paramref name="item"/>.
 /// </summary>
 /// <param name="item">The container with expected values.</param>
 /// <param name="sqlItem">The container with actual values.</param>
 private static void AssertItem(Item item, SqlItem sqlItem)
 {
     Assert.AreEqual(item.Id.ToString(), string.Format(IdUrlTemplate, sqlItem.Id));
     Assert.AreEqual(item.Title, sqlItem.Title);
     Assert.AreEqual(item.Description, sqlItem.Description);
     AssertResource(item.Resources[0], sqlItem.Resources.First());
 }
Пример #2
0
        public void ShouldFilterResultsWhenLoadingLibraryWithFilter()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, libraryId);

                Container container = Container.CreateContainer(libraryId.ToString());
                container.Title = "Test";

                Item item1 = SqlHelper.CreateSqlVideoItem();
                item1.Title = "FilterItem";
                Item item2 = SqlHelper.CreateSqlAudioItem();
                item2.Title = "Test";
                Item item3 = SqlHelper.CreateSqlImageItem();
                item3.Title = "Test2";

                container.Items.Add(item1);
                container.Items.Add(item2);
                container.Items.Add(item3);

                context.AddToContainer(container);

                context.SaveChanges();

                var filter = "Filter";

                var library = dataProvider.LoadLibrary(filter, 0);

                Assert.AreEqual(1, library.Items.Count);
            }
        }
        /// <summary>
        /// Asserts that the <paramref name="item"/> contains equivalent values from the <paramref name="sqlItem"/>.
        /// </summary>
        /// <param name="sqlItem">The item with expected values.</param>
        /// <param name="item">The item with actual values.</param>
        private static void AssertItem(SqlItem sqlItem, AudioItem item)
        {
            if (item != null)
            {
                var resource = sqlItem.Resources.First();

                Assert.AreEqual(resource.AudioFormat.Duration, item.Duration);
            }
        }
        /// <summary>
        /// Asserts that the <paramref name="item"/> contains equivalent values from the <paramref name="sqlItem"/>.
        /// </summary>
        /// <param name="sqlItem">The item with expected values.</param>
        /// <param name="item">The item with actual values.</param>
        private static void AssertItem(SqlItem sqlItem, ImageItem item)
        {
            if (item != null)
            {
                var resource = sqlItem.Resources.First();

                Assert.AreEqual(resource.ImageFormat.ResolutionX, item.Width);
                Assert.AreEqual(resource.ImageFormat.ResolutionY, item.Height);
            }
        }
        /// <summary>
        /// Asserts that the <paramref name="item"/> contains equivalent values from the <paramref name="sqlItem"/>.
        /// </summary>
        /// <param name="sqlItem">The item with expected values.</param>
        /// <param name="item">The item with actual values.</param>
        private static void AssertItem(SqlItem sqlItem, Item item)
        {
            Assert.AreEqual(string.Format(IdUrlTemplate, sqlItem.Id), item.Id.ToString());
            Assert.AreEqual(sqlItem.Title, item.Title);
            Assert.AreEqual(sqlItem.Description, item.Description);

            AssertItem(sqlItem, item as VideoItem);
            AssertItem(sqlItem, item as AudioItem);
            AssertItem(sqlItem, item as ImageItem);
        }
Пример #6
0
        public void ShouldLoadLibrary()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Container container = Container.CreateContainer(1);
                container.Title = "Test";

                Container childContainer = Container.CreateContainer(2);
                childContainer.Title = "ChildContainer";

                Item item = SqlHelper.CreateSqlVideoItem();
                item.Id = 1;
                item.Resources.First().Id = 1;
                item.Resources.First().VideoFormat.Id = 1;

                Item childItem = SqlHelper.CreateSqlVideoItem();
                childItem.Id = 2;
                childItem.Resources.First().Id = 2;
                childItem.Resources.First().VideoFormat.Id = 2;

                container.Items.Add(item);
                childContainer.Items.Add(childItem);

                container.Containers.Add(childContainer);
                context.AddToContainer(container);

                context.SaveChanges();

                var library = dataProvider.LoadLibrary(1000);

                Assert.AreEqual(container.Title, library.Title);
                Assert.AreEqual(1, library.Items.Count);
                Assert.AreEqual(1, library.Containers.Count);
                Assert.AreEqual(childContainer.Title, library.Containers[0].Title);
                Assert.AreEqual(0, library.Containers[0].Items.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Id), library.Items[0].Id.ToString());
                Assert.AreEqual(item.Title, library.Items[0].Title);
                Assert.AreEqual(item.Description, library.Items[0].Description);
                Assert.IsInstanceOfType(library.Items[0], typeof(VideoItem));
                Assert.AreEqual(1, library.Items[0].Resources.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Resources.First().Id), library.Items[0].Resources[0].Id.ToString());
                Assert.AreEqual(item.Resources.First().Ref, library.Items[0].Resources[0].Ref);
                Assert.AreEqual(item.Resources.First().ResourceType, library.Items[0].Resources[0].ResourceType);
                Assert.AreEqual(item.Resources.First().VideoFormat.Duration, ((VideoItem)library.Items[0]).Duration);
                Assert.AreEqual(item.Resources.First().VideoFormat.FrameRate, ((VideoItem)library.Items[0]).FrameRate.ToString());
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionX, ((VideoItem)library.Items[0]).Width);
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionY, ((VideoItem)library.Items[0]).Height);
            }
        }
Пример #7
0
        public void ShouldLoadMediaBin()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Project project = Project.CreateProject(1, "creator", DateTime.Now);

                Item item = SqlHelper.CreateSqlVideoItem();
                item.Id = 1;
                item.Resources.First().Id = 1;
                item.Resources.First().VideoFormat.Id = 1;
                Item childItem = SqlHelper.CreateSqlVideoItem();
                childItem.Id = 2;
                childItem.Resources.First().Id = 2;
                childItem.Resources.First().VideoFormat.Id = 2;

                context.AddToItem(item);
                context.AddToItem(childItem);

                context.SaveChanges();

                Container mediaBin = Container.CreateContainer(1);
                mediaBin.Items.Add(item);

                Container childContainer = Container.CreateContainer(2);
                childContainer.Items.Add(childItem);
                mediaBin.Containers.Add(childContainer);

                context.AddToContainer(mediaBin);

                context.SaveChanges();

                var mediaBinContainer = dataProvider.LoadMediaBin(new Uri(string.Format(IdUrlTemplate, mediaBin.Id)));

                Assert.AreEqual(1, mediaBinContainer.Items.Count);
                Assert.AreEqual(1, mediaBinContainer.Containers.Count);
                Assert.AreEqual(0, mediaBinContainer.Containers[0].Items.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Id), mediaBinContainer.Items[0].Id.ToString());
                Assert.AreEqual(item.Title, mediaBinContainer.Items[0].Title);
                Assert.AreEqual(item.Description, mediaBinContainer.Items[0].Description);
                Assert.IsInstanceOfType(mediaBinContainer.Items[0], typeof(VideoItem));
                Assert.AreEqual(1, mediaBinContainer.Items[0].Resources.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Resources.First().Id), mediaBinContainer.Items[0].Resources[0].Id.ToString());
                Assert.AreEqual(item.Resources.First().Ref, mediaBinContainer.Items[0].Resources[0].Ref);
                Assert.AreEqual(item.Resources.First().VideoFormat.Duration, ((VideoItem)mediaBinContainer.Items[0]).Duration);
                Assert.AreEqual(item.Resources.First().VideoFormat.FrameRate, ((VideoItem)mediaBinContainer.Items[0]).FrameRate.ToString());
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionX, ((VideoItem)mediaBinContainer.Items[0]).Width);
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionY, ((VideoItem)mediaBinContainer.Items[0]).Height);
            }
        }
        /// <summary>
        /// Creates a sql item for testing.
        /// </summary>
        /// <returns>A sql item with values.</returns>
        public static SqlItem CreateSqlItem()
        {
            var item = new SqlItem();

            item.Id          = 1;
            item.Title       = "Title";
            item.Description = "Description";
            item.Resources.Add(CreateSqlResource());

            return(item);
        }
        /// <summary>
        /// Asserts that the <paramref name="item"/> contains equivalent values from the <paramref name="sqlItem"/>.
        /// </summary>
        /// <param name="sqlItem">The item with expected values.</param>
        /// <param name="item">The item with actual values.</param>
        private static void AssertItem(SqlItem sqlItem, VideoItem item)
        {
            if (item != null)
            {
                var resource = sqlItem.Resources.First();

                Assert.AreEqual(resource.VideoFormat.ResolutionX, item.Width);
                Assert.AreEqual(resource.VideoFormat.ResolutionY, item.Height);
                Assert.AreEqual(resource.VideoFormat.Duration, item.Duration);
                Assert.AreEqual(resource.VideoFormat.FrameRate, item.FrameRate.ToString());
            }
        }
        /// <summary>
        /// Creates a sql shot for testing.
        /// </summary>
        /// <param name="item">The sql item associated to the shot being created.</param>
        /// <returns>A sql shot with values.</returns>
        private static SqlShot CreateSqlShot(SqlItem item)
        {
            var shot = new SqlShot();

            shot.Id           = 1;
            shot.Item         = item;
            shot.ItemMarkIn   = 10;
            shot.ItemMarkOut  = 20.5;
            shot.TrackMarkIn  = 60;
            shot.TrackMarkOut = 200;
            shot.Volume       = (decimal)0.7;
            shot.Comments.Add(CreateSqlComment());

            return(shot);
        }
Пример #11
0
        public void ShouldLimitResultsWhenLoadingLibraryWithMaxNumberOfItems()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Container container = Container.CreateContainer(1);
                container.Title = "Test";

                Item item1 = SqlHelper.CreateSqlVideoItem();
                item1.Id = 1;
                item1.Resources.First().Id = 1;
                item1.Resources.First().VideoFormat.Id = 1;
                Item item2 = SqlHelper.CreateSqlAudioItem();
                item2.Id = 2;
                item2.Resources.First().Id = 2;
                item2.Resources.First().AudioFormat.Id = 2;
                Item item3 = SqlHelper.CreateSqlImageItem();
                item3.Id = 3;
                item3.Resources.First().Id = 3;
                item3.Resources.First().ImageFormat.Id = 3;

                container.Items.Add(item1);
                container.Items.Add(item2);
                container.Items.Add(item3);

                context.AddToContainer(container);

                context.SaveChanges();

                var maxNumberOfItems = 2;

                var library = dataProvider.LoadLibrary(maxNumberOfItems);

                Assert.AreEqual(maxNumberOfItems, library.Items.Count);
            }
        }
        /// <summary>
        /// Converts the <see cref="SqlItem"/> to <see cref="MediaItem"/>.
        /// </summary>
        /// <param name="item">The <see cref="SqlItem"/>.</param>
        /// <returns>The <see cref="MediaItem"/>.</returns>
        private static MediaItem ConvertToMediaItem(SqlItem item, IMetadataLocator metadataLocator)
        {
            MediaItem mediaItem = new MediaItem();

            if (item.ItemType.ToUpperInvariant() == "video".ToUpperInvariant())
            {
                bool                   isAdaptiveStreaming     = false;
                Uri                    thumbnailUri            = null;
                IList <string>         dataStreams             = new List <string>();
                List <AudioStreamInfo> audioStreamsInformation = new List <AudioStreamInfo>();
                IList <string>         videoStreamInformation  = new List <string>();
                SmpteFrameRate         smpteFrameRate          = SmpteFrameRate.Smpte2997NonDrop;
                double                 duration = 0;
                double                 width    = 0;
                double                 height   = 0;

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlVideoResource = item.Resources
                                                   .Where(x => x.ResourceType.ToUpperInvariant().Contains("smoothstream".ToUpper(CultureInfo.InvariantCulture)))
                                                   .FirstOrDefault();
                    if (sqlVideoResource != null)
                    {
                        isAdaptiveStreaming = true;
                        Uri      manifestUri = new Uri(sqlVideoResource.Ref);
                        Metadata metadata    = metadataLocator.GetMetadata(manifestUri);

                        if (metadata != null)
                        {
                            IEnumerable <StreamInfo> audioStream = metadata.MetadataFields.SingleOrDefault(mf => mf.Name.Equals("AudioStreams", StringComparison.OrdinalIgnoreCase)).Value as IEnumerable <StreamInfo>;

                            if (audioStream != null)
                            {
                                foreach (StreamInfo streamInfo in audioStream)
                                {
                                    string name = null;

                                    if (streamInfo.Attributes.ContainsKey("Name"))
                                    {
                                        name = streamInfo.Attributes["Name"];
                                    }

                                    bool isStereo = true;

                                    if (streamInfo.QualityLevels.Count > 0 && streamInfo.QualityLevels.FirstOrDefault().Attributes.ContainsKey("Channels"))
                                    {
                                        isStereo = streamInfo.QualityLevels.FirstOrDefault().Attributes["Channels"] == "2";
                                    }

                                    audioStreamsInformation.Add(new AudioStreamInfo {
                                        IsStereo = isStereo, Name = name
                                    });
                                }
                            }

                            MetadataField videoStreamMetadataField = metadata.MetadataFields.SingleOrDefault(mf => mf.Name.Equals("VideoStreams", StringComparison.OrdinalIgnoreCase));

                            if (videoStreamMetadataField != null)
                            {
                                IList <string> videoStreams = videoStreamMetadataField.Value as IList <string>;

                                if (videoStreams != null)
                                {
                                    videoStreamInformation = videoStreams;
                                }
                            }
                        }
                    }
                    else if (item.Resources.Any(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))))
                    {
                        sqlVideoResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).First();
                    }
                    else
                    {
                        sqlVideoResource = item.Resources.First();
                    }

                    if (sqlVideoResource.VideoFormat != null)
                    {
                        duration = sqlVideoResource.VideoFormat.Duration.GetValueOrDefault();
                        width    = sqlVideoResource.VideoFormat.ResolutionX.GetValueOrDefault();
                        height   = sqlVideoResource.VideoFormat.ResolutionY.GetValueOrDefault();

                        if (sqlVideoResource.VideoFormat.FrameRate == null || !Enum.TryParse(sqlVideoResource.VideoFormat.FrameRate, true, out smpteFrameRate))
                        {
                            smpteFrameRate = SmpteFrameRate.Smpte2997NonDrop;
                        }
                    }

                    SqlResource sqlThumbnailResource = item.Resources
                                                       .Where(x => x.ResourceType.Equals("Thumbnail", StringComparison.OrdinalIgnoreCase))
                                                       .FirstOrDefault();
                    if (sqlThumbnailResource != null)
                    {
                        thumbnailUri = new Uri(sqlThumbnailResource.Ref);
                    }

                    SqlResource sqlDataStreamResource = item.Resources
                                                        .Where(x => x.ResourceType.Equals("DataStreams", StringComparison.OrdinalIgnoreCase))
                                                        .FirstOrDefault();
                    if (sqlDataStreamResource != null)
                    {
                        dataStreams = string.IsNullOrWhiteSpace(sqlDataStreamResource.Ref)
                            ? dataStreams
                            : sqlDataStreamResource.Ref.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
                    }
                }

                mediaItem = CreateVideoItem(CreateUri(item.Id), isAdaptiveStreaming, dataStreams, thumbnailUri, duration, smpteFrameRate, width, height, audioStreamsInformation, videoStreamInformation);
            }
            else if (item.ItemType.ToUpperInvariant() == "audio".ToUpperInvariant())
            {
                AudioItem audioItem = new AudioItem {
                    Id = CreateUri(item.Id)
                };

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).FirstOrDefault();

                    if (sqlResource == null)
                    {
                        sqlResource = item.Resources.First();
                    }

                    if (sqlResource.AudioFormat != null)
                    {
                        audioItem.Duration = sqlResource.AudioFormat.Duration;
                    }
                }

                mediaItem = audioItem;
            }
            else if (item.ItemType.ToUpperInvariant() == "IMAGE")
            {
                ImageItem imageItem = new ImageItem {
                    Id = CreateUri(item.Id)
                };

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).FirstOrDefault();

                    if (sqlResource == null)
                    {
                        sqlResource = item.Resources.First();
                    }

                    if (sqlResource.ImageFormat != null)
                    {
                        imageItem.Width  = sqlResource.ImageFormat.ResolutionX.GetValueOrDefault();
                        imageItem.Height = sqlResource.ImageFormat.ResolutionY.GetValueOrDefault();
                    }
                }

                mediaItem = imageItem;
            }

            mediaItem.Title       = item.Title;
            mediaItem.Description = item.Description;

            foreach (SqlResource sqlResource in item.Resources.Where(
                         r => !r.ResourceType.Equals("DataStreams", StringComparison.OrdinalIgnoreCase) && !r.ResourceType.Equals("Thumbnail", StringComparison.OrdinalIgnoreCase)))
            {
                mediaItem.Resources.Add(ConvertToResource(sqlResource));
            }

            return(mediaItem);
        }
Пример #13
0
        public void ShouldDeleteProject()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Item item = Item.CreateItem(1, "title", "Video");
                item.Description = "description";
                item.Resources   = new EntityCollection <Resource>();
                Resource resource = Resource.CreateResource(1, "\test\test.wmv", "Master");
                resource.VideoFormat             = VideoFormat.CreateVideoFormat(1);
                resource.VideoFormat.Duration    = 10;
                resource.VideoFormat.FrameRate   = "Smpte25";
                resource.VideoFormat.ResolutionX = 200;
                resource.VideoFormat.ResolutionY = 500;
                item.Resources.Add(resource);

                context.AddToItem(item);

                TitleTemplate titleTemplate = TitleTemplate.CreateTitleTemplate(1, "TemplateName");

                context.AddToTitleTemplate(titleTemplate);

                context.SaveChanges();

                Project project = Project.CreateProject(1, "creator", DateTime.Now);
                project.Duration         = 100;
                project.Resolution       = "HD";
                project.AutoSaveInterval = 100;
                project.StartTimeCode    = 3600;
                project.SmpteFrameRate   = "Smpte2997NonDrop";
                project.RippleMode       = true;

                Container mediaBin = Container.CreateContainer(1);
                mediaBin.Items.Add(item);

                Container container = Container.CreateContainer(2);
                mediaBin.Containers.Add(container);

                project.MediaBin = mediaBin;

                Comment comment = Comment.CreateComment(1, "Text", "Timeline", "user", DateTime.Today);
                comment.MarkIn  = 1200;
                comment.MarkOut = 1500;

                Comment shotComment = Comment.CreateComment(2, "Text", "Shot", "user", DateTime.Today);
                shotComment.MarkIn  = 170;
                shotComment.MarkOut = 180;

                project.Comments.Add(comment);
                project.Comments.Add(shotComment);

                Track track = Track.CreateTrack(1, "Video");

                Shot shot = Shot.CreateShot(1);
                shot.Item         = item;
                shot.ItemMarkIn   = 150;
                shot.ItemMarkOut  = 200;
                shot.TrackMarkIn  = 500;
                shot.TrackMarkOut = 0;
                shot.Volume       = 5;
                shot.Comments.Add(shotComment);

                track.Shots = new EntityCollection <Shot>();
                track.Shots.Add(shot);

                project.Tracks.Add(track);

                Title title = Title.CreateTitle(1, 600, 100, "Main", "Sub");
                title.TitleTemplate = titleTemplate;

                project.Titles.Add(title);

                context.AddToProject(project);

                context.SaveChanges();

                var retrievedProject = dataProvider.LoadProject(new Uri(string.Format("http://temp/{0}", project.Id)));

                bool result = dataProvider.DeleteProject(new Uri(string.Format("http://temp/{0}", project.Id)));
                var  retrievedDeletedProject = dataProvider.LoadProject(new Uri(string.Format("http://temp/{0}", project.Id)));

                Assert.IsTrue(result);
                Assert.IsNull(retrievedDeletedProject.Id);
            }
        }
Пример #14
0
        public void ShouldSaveProject()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Item item = Item.CreateItem(1, "title", "Video");
                item.Description = "description";
                item.Resources   = new EntityCollection <Resource>();
                Resource resource = Resource.CreateResource(1, "\test\test.wmv", "Master");
                resource.VideoFormat             = VideoFormat.CreateVideoFormat(1);
                resource.VideoFormat.Duration    = 10;
                resource.VideoFormat.FrameRate   = "Smpte25";
                resource.VideoFormat.ResolutionX = 200;
                resource.VideoFormat.ResolutionY = 500;
                item.Resources.Add(resource);

                context.AddToItem(item);

                TitleTemplate titleTemplate = TitleTemplate.CreateTitleTemplate(1, "TestTemplateName");

                context.AddToTitleTemplate(titleTemplate);

                context.SaveChanges();

                Services.Contracts.VideoItem videoItem = new Services.Contracts.VideoItem();
                videoItem.Id          = new Uri(string.Format(IdUrlTemplate, 1));
                videoItem.Title       = "title";
                videoItem.Description = "description";

                Services.Contracts.Resource videoResource = new Services.Contracts.Resource();
                videoResource.Id  = new Uri(string.Format(IdUrlTemplate, 1));
                videoResource.Ref = "\test\test.wmv";

                videoItem.Resources.Add(videoResource);

                Services.Contracts.Project project = new Services.Contracts.Project();
                project.Id               = new Uri(string.Format(IdUrlTemplate, 1));
                project.Duration         = 100;
                project.Resolution       = "HD";
                project.AutoSaveInterval = 100;
                project.StartTimeCode    = 3600;
                project.SmpteFrameRate   = "Smpte2997NonDrop";
                project.RippleMode       = true;
                project.Creator          = "creator";
                project.Created          = DateTime.Now;

                Services.Contracts.MediaBin mediaBin = new Services.Contracts.MediaBin();
                mediaBin.Id = new Uri(string.Format(IdUrlTemplate, 1));
                mediaBin.Items.Add(videoItem);

                Services.Contracts.Container container = new Services.Contracts.Container();
                container.Id    = new Uri(string.Format(IdUrlTemplate, 2));
                container.Title = "Test";
                mediaBin.Containers.Add(container);

                project.MediaBin = mediaBin;

                Services.Contracts.Track track = new Services.Contracts.Track();
                track.Id        = new Uri(string.Format(IdUrlTemplate, 1));
                track.TrackType = "Video";

                Services.Contracts.Comment shotComment = new Services.Contracts.Comment();
                shotComment.Id      = new Uri(string.Format(IdUrlTemplate, 1));
                shotComment.Creator = "user";
                shotComment.Created = DateTime.Today;
                shotComment.Type    = "Shot";
                shotComment.Text    = "Text";
                shotComment.MarkIn  = 170;
                shotComment.MarkOut = 180;

                Services.Contracts.Shot shot = new Services.Contracts.Shot();
                shot.Id           = new Uri(string.Format(IdUrlTemplate, 1));
                shot.Source       = videoItem;
                shot.SourceAnchor = new Anchor {
                    MarkIn = 150, MarkOut = 200
                };
                shot.TrackAnchor = new Anchor {
                    MarkIn = 500, MarkOut = 0
                };
                shot.Volume = 50;

                shot.Comments.Add(shotComment);

                track.Shots.Add(shot);

                Services.Contracts.Sequence sequence = new Services.Contracts.Sequence();
                sequence.Id = new Guid();

                project.Sequences.Add(sequence);

                project.Sequences[0].Tracks.Add(track);

                Services.Contracts.Comment comment = new Services.Contracts.Comment();
                comment.Id      = new Uri(string.Format(IdUrlTemplate, 2));
                comment.Creator = "user";
                comment.Created = DateTime.Today;
                comment.Type    = "Timeline";
                comment.Text    = "Text";
                comment.MarkIn  = 1200;
                comment.MarkOut = 1500;

                project.Comments.Add(comment);
                project.Comments.Add(shotComment);

                Services.Contracts.Title title = new Services.Contracts.Title();
                title.Id          = new Uri(string.Format(IdUrlTemplate, 1));
                title.TrackAnchor = new Anchor {
                    MarkIn = 600, MarkOut = 100
                };
                title.TextBlockCollection.Add(new TextBlock {
                    Text = "Main"
                });
                title.TextBlockCollection.Add(new TextBlock {
                    Text = "Sub"
                });
                title.TitleTemplate = new Services.Contracts.TitleTemplate {
                    Id = new Uri(string.Format(IdUrlTemplate, titleTemplate.Id)), TemplateName = titleTemplate.TemplateName
                };

                project.Titles.Add(title);

                var result = dataProvider.SaveProject(project);

                Assert.IsTrue(result);

                Project retrievedProject = context.Project.Include("Tracks")
                                           .Include("Tracks.Shots")
                                           .Include("Tracks.Shots.Comments")
                                           .Include("Tracks.Shots.Item")
                                           .Include("Tracks.Shots.Item.Resources")
                                           .Include("Tracks.Shots.Item.Resources.VideoFormat")
                                           .Include("Tracks.Shots.Item.Resources.AudioFormat")
                                           .Include("Tracks.Shots.Item.Resources.ImageFormat")
                                           .Include("Comments")
                                           .Include("MediaBin")
                                           .Include("MediaBin.Containers")
                                           .Include("Titles")
                                           .Include("Titles.TitleTemplate")
                                           .Where(x => x.Id == 1).FirstOrDefault();

                Assert.IsNotNull(retrievedProject);
                Assert.AreEqual(project.Duration, retrievedProject.Duration);
                Assert.AreEqual(project.Resolution, retrievedProject.Resolution);
                Assert.AreEqual(project.Resolution, retrievedProject.Resolution);
                Assert.AreEqual(project.AutoSaveInterval, retrievedProject.AutoSaveInterval);
                Assert.AreEqual(project.StartTimeCode, retrievedProject.StartTimeCode);
                Assert.AreEqual(project.SmpteFrameRate, retrievedProject.SmpteFrameRate);
                Assert.AreEqual(project.RippleMode, retrievedProject.RippleMode);
                Assert.AreEqual(project.Creator, retrievedProject.Creator);
                Assert.IsNotNull(retrievedProject.MediaBin);
                Assert.AreEqual(mediaBin.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.MediaBin.Id));
                Assert.AreEqual(0, retrievedProject.MediaBin.Items.Count);
                Assert.AreEqual(1, retrievedProject.MediaBin.Containers.Count);
                Assert.AreEqual(1, retrievedProject.Tracks.Count);
                Assert.AreEqual(track.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Tracks.First().Id));
                Assert.AreEqual(track.TrackType, retrievedProject.Tracks.First().TrackType);
                Assert.AreEqual(track.Shots.Count, retrievedProject.Tracks.First().Shots.Count);
                Assert.AreEqual(shot.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Tracks.First().Shots.First().Id));
                Assert.AreEqual(shot.TrackAnchor.MarkIn, retrievedProject.Tracks.First().Shots.First().TrackMarkIn);
                Assert.AreEqual(shot.TrackAnchor.MarkOut, retrievedProject.Tracks.First().Shots.First().TrackMarkOut);
                Assert.AreEqual(shot.SourceAnchor.MarkIn, retrievedProject.Tracks.First().Shots.First().ItemMarkIn);
                Assert.AreEqual(shot.Volume, retrievedProject.Tracks.First().Shots.First().Volume);
                Assert.AreEqual(1, retrievedProject.Tracks.First().Shots.First().Comments.Count);
                Assert.AreEqual(shotComment.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Tracks.First().Shots.First().Comments.First().Id));
                Assert.AreEqual(shotComment.Text, retrievedProject.Tracks.First().Shots.First().Comments.First().Text);
                Assert.AreEqual(shotComment.Creator, retrievedProject.Tracks.First().Shots.First().Comments.First().Creator);
                Assert.AreEqual(shotComment.Created, retrievedProject.Tracks.First().Shots.First().Comments.First().Created);
                Assert.AreEqual(shotComment.Type, retrievedProject.Tracks.First().Shots.First().Comments.First().CommentType);
                Assert.AreEqual(shotComment.MarkIn, retrievedProject.Tracks.First().Shots.First().Comments.First().MarkIn);
                Assert.AreEqual(shotComment.MarkOut, retrievedProject.Tracks.First().Shots.First().Comments.First().MarkOut);
                Assert.AreEqual(videoItem.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Tracks.First().Shots.First().Item.Id));
                Assert.AreEqual(videoItem.Title, retrievedProject.Tracks.First().Shots.First().Item.Title);
                Assert.AreEqual(videoItem.Description, retrievedProject.Tracks.First().Shots.First().Item.Description);
                Assert.AreEqual("video", retrievedProject.Tracks.First().Shots.First().Item.ItemType.ToLowerInvariant());
                Assert.AreEqual(videoItem.Resources[0].Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Tracks.First().Shots.First().Item.Resources.First().Id));
                Assert.AreEqual(videoItem.Resources[0].Ref, retrievedProject.Tracks.First().Shots.First().Item.Resources.First().Ref);
                Assert.AreEqual(item, retrievedProject.Tracks.First().Shots.First().Item);
                Assert.AreEqual(2, retrievedProject.Comments.Count);
                Assert.AreEqual(comment.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Comments.ElementAt(1).Id));
                Assert.AreEqual(comment.Text, retrievedProject.Comments.ElementAt(1).Text);
                Assert.AreEqual(comment.Creator, retrievedProject.Comments.ElementAt(1).Creator);
                Assert.AreEqual(comment.Created, retrievedProject.Comments.ElementAt(1).Created);
                Assert.AreEqual(comment.Type, retrievedProject.Comments.ElementAt(1).CommentType);
                Assert.AreEqual(comment.MarkIn, retrievedProject.Comments.ElementAt(1).MarkIn);
                Assert.AreEqual(comment.MarkOut, retrievedProject.Comments.ElementAt(1).MarkOut);
                Assert.AreEqual(shotComment.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Comments.ElementAt(0).Id));
                Assert.AreEqual(shotComment.Text, retrievedProject.Comments.ElementAt(0).Text);
                Assert.AreEqual(shotComment.Creator, retrievedProject.Comments.ElementAt(0).Creator);
                Assert.AreEqual(shotComment.Created, retrievedProject.Comments.ElementAt(0).Created);
                Assert.AreEqual(shotComment.Type, retrievedProject.Comments.ElementAt(0).CommentType);
                Assert.AreEqual(shotComment.MarkIn, retrievedProject.Comments.ElementAt(0).MarkIn);
                Assert.AreEqual(shotComment.MarkOut, retrievedProject.Comments.ElementAt(0).MarkOut);
                Assert.AreEqual(1, retrievedProject.Titles.Count);
                Assert.AreEqual(title.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Titles.ElementAt(0).Id));
                Assert.AreEqual(title.TextBlockCollection[0].Text, retrievedProject.Titles.ElementAt(0).MainText);
                Assert.AreEqual(title.TextBlockCollection[1].Text, retrievedProject.Titles.ElementAt(0).SubText);
                Assert.AreEqual(title.TrackAnchor.MarkIn, retrievedProject.Titles.ElementAt(0).TrackMarkIn);
                Assert.AreEqual(title.TrackAnchor.MarkOut, retrievedProject.Titles.ElementAt(0).TrackMarkOut);
                Assert.AreEqual(title.TitleTemplate.Id.ToString(), string.Format(IdUrlTemplate, retrievedProject.Titles.ElementAt(0).TitleTemplate.Id));
                Assert.AreEqual(title.TitleTemplate.TemplateName, retrievedProject.Titles.ElementAt(0).TitleTemplate.TemplateName);
            }
        }
Пример #15
0
        public void ShouldLoadProject()
        {
            var context = new RoughCutEditorEntities();

            using (TransactionScope transactionScope = new TransactionScope())
            {
                var libraryId    = CreateId(typeof(Services.Contracts.Container).Name);
                var dataProvider = new DataProvider(this.loggerService, null, libraryId);

                Item item = Item.CreateItem(1, "title", "Video");
                item.Description = "description";
                item.Resources   = new EntityCollection <Resource>();
                Resource resource = Resource.CreateResource(1, "\test\test.wmv", "Master");
                resource.VideoFormat             = VideoFormat.CreateVideoFormat(1);
                resource.VideoFormat.Duration    = 10;
                resource.VideoFormat.FrameRate   = "Smpte25";
                resource.VideoFormat.ResolutionX = 200;
                resource.VideoFormat.ResolutionY = 500;
                item.Resources.Add(resource);

                context.AddToItem(item);

                TitleTemplate titleTemplate = TitleTemplate.CreateTitleTemplate(1, "TemplateName");

                context.AddToTitleTemplate(titleTemplate);

                context.SaveChanges();

                Project project = Project.CreateProject(1, "creator", DateTime.Now);
                project.Duration         = 100;
                project.Resolution       = "HD";
                project.AutoSaveInterval = 100;
                project.StartTimeCode    = 3600;
                project.SmpteFrameRate   = "Smpte2997NonDrop";
                project.RippleMode       = true;

                Container mediaBin = Container.CreateContainer(1);
                mediaBin.Items.Add(item);

                Container container = Container.CreateContainer(2);
                container.Items.Add(item);
                mediaBin.Containers.Add(container);

                project.MediaBin = mediaBin;

                Comment comment = Comment.CreateComment(3, "Text", "Timeline", "user", DateTime.Today);
                comment.MarkIn  = 1200;
                comment.MarkOut = 1500;

                Comment shotComment = Comment.CreateComment(4, "Text", "Shot", "user", DateTime.Today);
                shotComment.MarkIn  = 170;
                shotComment.MarkOut = 180;

                project.Comments.Add(comment);
                project.Comments.Add(shotComment);

                Track track = Track.CreateTrack(1, "Video");

                Shot shot = Shot.CreateShot(1);
                shot.Item         = item;
                shot.ItemMarkIn   = 150;
                shot.ItemMarkOut  = 200;
                shot.TrackMarkIn  = 500;
                shot.TrackMarkOut = 0;
                shot.Volume       = 5;
                shot.Comments.Add(shotComment);

                track.Shots = new EntityCollection <Shot>();
                track.Shots.Add(shot);

                project.Tracks.Add(track);

                Title title = Title.CreateTitle(1, 600, 100, "Main", "Sub");
                title.TitleTemplate = titleTemplate;

                project.Titles.Add(title);

                context.AddToProject(project);

                context.SaveChanges();

                var retrievedProject = dataProvider.LoadProject(new Uri(string.Format(IdUrlTemplate, project.Id)));

                Assert.AreEqual(project.Duration, retrievedProject.Duration);
                Assert.AreEqual(project.Resolution, retrievedProject.Resolution);
                Assert.AreEqual(project.AutoSaveInterval, retrievedProject.AutoSaveInterval);
                Assert.AreEqual(project.StartTimeCode, retrievedProject.StartTimeCode);
                Assert.AreEqual(project.SmpteFrameRate, retrievedProject.SmpteFrameRate);
                Assert.AreEqual(project.RippleMode, retrievedProject.RippleMode);
                Assert.AreEqual(project.Creator, retrievedProject.Creator);
                Assert.IsNotNull(retrievedProject.MediaBin);
                Assert.AreEqual(string.Format(IdUrlTemplate, mediaBin.Id), retrievedProject.MediaBin.Id.ToString());
                Assert.AreEqual(1, retrievedProject.MediaBin.Items.Count);
                Assert.AreEqual(1, retrievedProject.MediaBin.Containers.Count);
                Assert.AreEqual(0, retrievedProject.MediaBin.Containers[0].Items.Count);
                Assert.AreEqual(1, retrievedProject.Sequences[0].Tracks.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, track.Id), retrievedProject.Sequences[0].Tracks[0].Id.ToString());
                Assert.AreEqual(track.TrackType, retrievedProject.Sequences[0].Tracks[0].TrackType);
                Assert.AreEqual(track.Shots.Count, retrievedProject.Sequences[0].Tracks[0].Shots.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, shot.Id), retrievedProject.Sequences[0].Tracks[0].Shots[0].Id.ToString());
                Assert.AreEqual(shot.TrackMarkIn, retrievedProject.Sequences[0].Tracks[0].Shots[0].TrackAnchor.MarkIn);
                Assert.AreEqual(shot.TrackMarkOut, retrievedProject.Sequences[0].Tracks[0].Shots[0].TrackAnchor.MarkOut);
                Assert.AreEqual(shot.ItemMarkIn, retrievedProject.Sequences[0].Tracks[0].Shots[0].SourceAnchor.MarkIn);
                Assert.AreEqual(shot.ItemMarkOut, retrievedProject.Sequences[0].Tracks[0].Shots[0].SourceAnchor.MarkOut);
                Assert.AreEqual(shot.Volume, retrievedProject.Sequences[0].Tracks[0].Shots[0].Volume);
                Assert.AreEqual(1, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, shotComment.Id), retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].Id.ToString());
                Assert.AreEqual(shotComment.Creator, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].Creator);
                Assert.AreEqual(shotComment.Created, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].Created);
                Assert.AreEqual(shotComment.Text, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].Text);
                Assert.AreEqual(shotComment.CommentType, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].Type);
                Assert.AreEqual(shotComment.MarkIn, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].MarkIn);
                Assert.AreEqual(shotComment.MarkOut, retrievedProject.Sequences[0].Tracks[0].Shots[0].Comments[0].MarkOut);
                Assert.AreEqual(2, retrievedProject.Comments.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, comment.Id), retrievedProject.Comments[1].Id.ToString());
                Assert.AreEqual(comment.Created, retrievedProject.Comments[1].Created);
                Assert.AreEqual(comment.Creator, retrievedProject.Comments[1].Creator);
                Assert.AreEqual(comment.Text, retrievedProject.Comments[1].Text);
                Assert.AreEqual(comment.CommentType, retrievedProject.Comments[1].Type);
                Assert.AreEqual(comment.MarkIn, retrievedProject.Comments[1].MarkIn);
                Assert.AreEqual(comment.MarkOut, retrievedProject.Comments[1].MarkOut);
                Assert.AreEqual(string.Format(IdUrlTemplate, shotComment.Id), retrievedProject.Comments[0].Id.ToString());
                Assert.AreEqual(shotComment.Created, retrievedProject.Comments[0].Created);
                Assert.AreEqual(shotComment.Creator, retrievedProject.Comments[0].Creator);
                Assert.AreEqual(shotComment.Text, retrievedProject.Comments[0].Text);
                Assert.AreEqual(shotComment.CommentType, retrievedProject.Comments[0].Type);
                Assert.AreEqual(shotComment.MarkIn, retrievedProject.Comments[0].MarkIn);
                Assert.AreEqual(shotComment.MarkOut, retrievedProject.Comments[0].MarkOut);
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Id), retrievedProject.Sequences[0].Tracks[0].Shots[0].Source.Id.ToString());
                Assert.AreEqual(item.Title, retrievedProject.Sequences[0].Tracks[0].Shots[0].Source.Title);
                Assert.AreEqual(item.Description, retrievedProject.Sequences[0].Tracks[0].Shots[0].Source.Description);
                Assert.IsInstanceOfType(retrievedProject.Sequences[0].Tracks[0].Shots[0].Source, typeof(VideoItem));
                Assert.AreEqual(string.Format(IdUrlTemplate, item.Resources.First().Id), retrievedProject.Sequences[0].Tracks[0].Shots[0].Source.Resources[0].Id.ToString());
                Assert.AreEqual(item.Resources.First().Ref, retrievedProject.Sequences[0].Tracks[0].Shots[0].Source.Resources[0].Ref);
                Assert.AreEqual(item.Resources.First().VideoFormat.Duration, ((VideoItem)retrievedProject.Sequences[0].Tracks[0].Shots[0].Source).Duration);
                Assert.AreEqual(item.Resources.First().VideoFormat.FrameRate, ((VideoItem)retrievedProject.Sequences[0].Tracks[0].Shots[0].Source).FrameRate.ToString());
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionX, ((VideoItem)retrievedProject.Sequences[0].Tracks[0].Shots[0].Source).Width);
                Assert.AreEqual(item.Resources.First().VideoFormat.ResolutionY, ((VideoItem)retrievedProject.Sequences[0].Tracks[0].Shots[0].Source).Height);
                Assert.AreEqual(1, retrievedProject.Titles.Count);
                Assert.AreEqual(string.Format(IdUrlTemplate, title.Id), retrievedProject.Titles[0].Id.ToString());
                Assert.AreEqual(title.MainText, retrievedProject.Titles[0].TextBlockCollection[0].Text);
                Assert.AreEqual(title.SubText, retrievedProject.Titles[0].TextBlockCollection[1].Text);
                Assert.AreEqual(title.TrackMarkIn, retrievedProject.Titles[0].TrackAnchor.MarkIn);
                Assert.AreEqual(title.TrackMarkOut, retrievedProject.Titles[0].TrackAnchor.MarkOut);
                Assert.AreEqual(string.Format(IdUrlTemplate, title.TitleTemplate.Id), retrievedProject.Titles[0].TitleTemplate.Id.ToString());
                Assert.AreEqual(title.TitleTemplate.TemplateName, retrievedProject.Titles[0].TitleTemplate.TemplateName);
            }
        }
        /// <summary>
        /// Converts the <see cref="SqlItem"/> to <see cref="MediaItem"/>.
        /// </summary>
        /// <param name="item">The <see cref="SqlItem"/>.</param>
        /// <returns>The <see cref="MediaItem"/>.</returns>
        private static MediaItem ConvertToMediaItem(SqlItem item)
        {
            MediaItem mediaItem = new MediaItem();

            if (item.ItemType.ToUpperInvariant() == "video".ToUpperInvariant())
            {
                VideoItem videoItem = new VideoItem {
                    Id = new Uri(item.Id)
                };

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("smoothstream".ToUpper(CultureInfo.InvariantCulture))).FirstOrDefault();

                    if (sqlResource == null)
                    {
                        if (item.Resources.Any(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))))
                        {
                            sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).First();
                        }
                        else
                        {
                            sqlResource = item.Resources.First();
                        }
                    }

                    if (sqlResource.VideoFormat != null)
                    {
                        videoItem.Duration = sqlResource.VideoFormat.Duration.GetValueOrDefault();
                        videoItem.Width    = sqlResource.VideoFormat.ResolutionX.GetValueOrDefault();
                        videoItem.Height   = sqlResource.VideoFormat.ResolutionY.GetValueOrDefault();

                        if (sqlResource.VideoFormat.FrameRate != null)
                        {
                            if (Enum.IsDefined(typeof(SmpteFrameRate), sqlResource.VideoFormat.FrameRate))
                            {
                                videoItem.FrameRate = (SmpteFrameRate)Enum.Parse(typeof(SmpteFrameRate), sqlResource.VideoFormat.FrameRate);
                            }
                        }
                    }
                }

                mediaItem = videoItem;
            }
            else if (item.ItemType.ToUpperInvariant() == "audio".ToUpperInvariant())
            {
                AudioItem audioItem = new AudioItem {
                    Id = new Uri(item.Id)
                };

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).FirstOrDefault();

                    if (sqlResource == null)
                    {
                        sqlResource = item.Resources.First();
                    }

                    if (sqlResource.AudioFormat != null)
                    {
                        audioItem.Duration = sqlResource.AudioFormat.Duration;
                    }
                }

                mediaItem = audioItem;
            }
            else if (item.ItemType.ToUpperInvariant() == "IMAGE")
            {
                ImageItem imageItem = new ImageItem {
                    Id = new Uri(item.Id)
                };

                if (item.Resources.Count() > 0)
                {
                    SqlResource sqlResource = item.Resources.Where(x => x.ResourceType.ToUpperInvariant().Contains("master".ToUpper(CultureInfo.InvariantCulture))).FirstOrDefault();

                    if (sqlResource == null)
                    {
                        sqlResource = item.Resources.First();
                    }

                    if (sqlResource.ImageFormat != null)
                    {
                        imageItem.Width  = sqlResource.ImageFormat.ResolutionX.GetValueOrDefault();
                        imageItem.Height = sqlResource.ImageFormat.ResolutionY.GetValueOrDefault();
                    }
                }

                mediaItem = imageItem;
            }

            mediaItem.Title       = item.Title;
            mediaItem.Description = item.Description;

            foreach (SqlResource sqlResource in item.Resources)
            {
                mediaItem.Resources.Add(ConvertToResource(sqlResource));
            }

            return(mediaItem);
        }