Example #1
0
        ///<summary>Get when a video file was taken.</summary>
        ///<returns>True if this file had data.</returns>
        private static bool GetVideoDateTaken(string path, out DateTime dateTaken, out DateTakenSrc src)
        {
            dateTaken = DateTime.Now;
            src       = DateTakenSrc.Now;

            try
            {
                IEnumerable <MetadataExtractor.Directory> directories = QuickTimeMetadataReader.ReadMetadata(new FileStream(path, FileMode.Open));
                QuickTimeMovieHeaderDirectory             directory   = directories.OfType <QuickTimeMovieHeaderDirectory>().FirstOrDefault();

                if (directory != null && directory.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTaken))
                {
                    src = DateTakenSrc.Metadata;
                    return(true);
                }
            }
            catch (Exception)
            {
                src = DateTakenSrc.Now;
                bool hasData = GetFilenameTimestamp(Path.GetFileName(path), out dateTaken, out src);
                if (hasData)
                {
                    return(true);
                }

                dateTaken = DateTime.Now;
                src       = DateTakenSrc.Now;
                return(false);
            }

            return(false);
        }
Example #2
0
        public void ExifRead_ParseQuickTimeDateTime_NoVideoUsedSet()
        {
            var currentCultureThreeLetterIsoLanguageName = CultureInfo.CurrentCulture.ThreeLetterISOLanguageName;

            CultureInfo.CurrentCulture = new CultureInfo("EN-us");

            var fakeStorage = new FakeIStorage();
            var item        = new ReadMetaExif(fakeStorage, new AppSettings
            {
                VideoUseLocalTime = null,
                CameraTimeZone    = ""
            });

            var dir = new QuickTimeMovieHeaderDirectory();

            dir.Set(QuickTimeMovieHeaderDirectory.TagCreated, "Tue Oct 11 09:40:04 2011");

            var result = item.ParseQuickTimeDateTime(new CameraMakeModel("test", "test"),
                                                     new List <Directory> {
                dir
            }, CultureInfo.InvariantCulture);

            var expectedExifDateTime = new DateTime(2011, 10, 11, 9, 40, 4).ToLocalTime();

            CultureInfo.CurrentCulture = new CultureInfo(currentCultureThreeLetterIsoLanguageName);

            Assert.AreEqual(expectedExifDateTime, result);
        }
Example #3
0
        public void ExifRead_ParseQuickTimeDateTime_AssumeUtc_CameraTimeZoneMissing()
        {
            var currentCultureThreeLetterIsoLanguageName = CultureInfo.CurrentCulture.ThreeLetterISOLanguageName;

            CultureInfo.CurrentCulture = new CultureInfo("EN-us");

            // CameraTimeZone = "Europe/London" is missing

            var fakeStorage = new FakeIStorage();

            var item = new ReadMetaExif(fakeStorage);

            var dir = new QuickTimeMovieHeaderDirectory();

            dir.Set(QuickTimeMovieHeaderDirectory.TagCreated, "Tue Oct 11 09:40:04 2011");

            var result = item.ParseQuickTimeDateTime(new CameraMakeModel(),
                                                     new List <Directory> {
                dir
            }, CultureInfo.InvariantCulture);

            var expectedExifDateTime = new DateTime(2011, 10, 11, 9, 40, 4);

            CultureInfo.CurrentCulture = new CultureInfo(currentCultureThreeLetterIsoLanguageName);

            Assert.AreEqual(expectedExifDateTime, result);
        }
Example #4
0
        public void ExifRead_GetExifDateTimeTest_QuickTimeMovieHeaderDirectory_AssumeLocal()
        {
            var orgCulture =
                CultureInfo.CurrentCulture.ThreeLetterISOLanguageName;

            CultureInfo.CurrentCulture = new CultureInfo("EN-us");

            var container = new List <Directory>();
            var dir2      = new QuickTimeMovieHeaderDirectory();

            dir2.Set(QuickTimeMovieHeaderDirectory.TagCreated, "Tue Oct 11 09:40:04 2011");
            container.Add(dir2);

            var result = new ReadMetaExif(null, new AppSettings {
                VideoUseLocalTime = new List <CameraMakeModel>
                {
                    new CameraMakeModel("Apple", string.Empty)
                },
                CameraTimeZone = "Europe/London"
            }).GetExifDateTime(container);

            CultureInfo.CurrentCulture = new CultureInfo(orgCulture);

            var expectedExifDateTime = new DateTime(2011, 10, 11, 10, 40, 4);

            Assert.AreEqual(expectedExifDateTime, result);
        }
 protected override void CreateDirectory()
 {
     if (Directories == null)
     {
         return;
     }
     if (quickTimeMovieHeaderDir == null)
     {
         quickTimeMovieHeaderDir = Directories.OfType <QuickTimeMovieHeaderDirectory>().FirstOrDefault();
     }
     if (quickTimeTrackHeaderDir == null)
     {
         quickTimeTrackHeaderDir = Directories.OfType <QuickTimeTrackHeaderDirectory>().FirstOrDefault();
     }
     if (quickTimeMetadataHeaderDir == null)
     {
         quickTimeMetadataHeaderDir = Directories.OfType <QuickTimeMetadataHeaderDirectory>().FirstOrDefault();
     }
 }
Example #6
0
        public static bool TryGetMetadataTagDateTime(this string imageFilePath, out DateTime dateTime)
        {
            dateTime = DateTime.MinValue;

            IReadOnlyList <MetadataDirectory> directories = ImageMetadataReader.ReadMetadata(imageFilePath);

            FileTypeDirectory fileTypeDirectory = directories?
                                                  .OfType <FileTypeDirectory>()
                                                  .FirstOrDefault();

            if (fileTypeDirectory == null)
            {
                return(false);
            }

            if (fileTypeDirectory.GetDescription(FileTypeDirectory.TagDetectedFileTypeName) == "JPEG")
            {
                ExifSubIfdDirectory subIfdDirectory = directories
                                                      .OfType <ExifSubIfdDirectory>()
                                                      .FirstOrDefault();

                return(subIfdDirectory != null &&
                       subIfdDirectory.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out dateTime));
            }

            if (fileTypeDirectory.GetDescription(FileTypeDirectory.TagDetectedFileTypeName) == "QuickTime")
            {
                QuickTimeMovieHeaderDirectory quickTimeMovieHeaderDirectory = directories
                                                                              .OfType <QuickTimeMovieHeaderDirectory>()
                                                                              .FirstOrDefault();

                return(quickTimeMovieHeaderDirectory != null &&
                       quickTimeMovieHeaderDirectory.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTime));
            }

            return(false);
        }