Exemplo n.º 1
0
        public static bool HasTagV1(FileInfo file)
        {
            if (VirtualDrive.FileLength(file.FullName) < HeaderV1.totalSize)
            {
                return(false);
            }

            byte[] arr = new byte[3];

            try
            {
                using (Stream stream = OpenInStream(file))
                {
                    stream.Seek(
                        stream.Length - HeaderV1.totalSize,
                        System.IO.SeekOrigin.Begin);

                    stream.Read(arr, 0, arr.Length);
                }
            }
            catch (System.Exception)
            {
            }

            return(HasTagV1(arr));
        }
Exemplo n.º 2
0
        public void Load(string fileName)
        {
            Tag tag = TagUtils.ReadTag(new FileInfo(fileName));

            int bitrate = -1;

            if (!Object.ReferenceEquals(tag, null))
            {
                try
                {
                    int tagSize = TagUtils.TagSizeV2(new FileInfo(fileName));
                    using (Stream stream = VirtualDrive.OpenInStream(fileName))
                    {
                        stream.Seek(tagSize, SeekOrigin.Begin);
                        bitrate = ID3MediaFileHeader.MP3Header.ReadBitrate(
                            stream, VirtualDrive.FileLength(fileName));
                    }
                }
                catch (Exception)
                {
                    bitrate = -1;
                }
            }

            Init(fileName, tag, bitrate);
        }
Exemplo n.º 3
0
            public void Run()
            {
                foreach (string fileName in FileNames)
                {
                    if (Abort)
                    {
                        return;
                    }

                    Tag tag = TagUtils.ReadTag(new FileInfo(fileName));

                    fileToTagMap[fileName] = tag;

                    if (!Object.ReferenceEquals(tag, null))
                    {
                        try
                        {
                            int tagSize = TagUtils.TagSizeV2(new FileInfo(fileName));
                            using (Stream stream = VirtualDrive.OpenInStream(fileName))
                            {
                                stream.Seek(tagSize, SeekOrigin.Begin);
                                fileToBitrate[tag] = ID3MediaFileHeader.MP3Header.ReadBitrate(
                                    stream, VirtualDrive.FileLength(fileName));
                            }
                        }
                        catch (Exception)
                        {
                            fileToBitrate[tag] = -1;
                        }
                    }
                }
            }
Exemplo n.º 4
0
        public void RequestPlaying(string filename)
        {
            TagModel model = DocNode.Create <TagModel>();

            model.FileNameFull = filename;

            try
            {
                int tagSize = TagUtils.TagSizeV2(new FileInfo(filename));
                using (Stream stream = VirtualDrive.OpenInStream(filename))
                {
                    stream.Seek(tagSize, SeekOrigin.Begin);
                    model.Bitrate.Value = ID3MediaFileHeader.MP3Header.ReadBitrate(
                        stream, VirtualDrive.FileLength(filename));
                }
            }
            catch (Exception)
            {
            }

            FileInfo fileInfo = new FileInfo(filename);

            FileTreeModel.ExpandAndSelect(fileInfo.DirectoryName, true);

            RequestPlaying(model);
        }
Exemplo n.º 5
0
        private static void TestUndoFileWriter()
        {
            UndoFileWriter writer = new UndoFileWriter(
                VirtualDrive.VirtualFileName("TestUndoFileWriter.txt"));

            for (int i = 0; i < 4; i++)
            {
                List <string> parameters = new List <string>();
                for (int j = 0; j < i; j++)
                {
                    parameters.Add("line" + j);
                }

                writer.Write(new SerializedCommand(
                                 typeof(TestClass),
                                 SerializedCommand.UndoRedo.Do,
                                 "TestUndoFileWriter",
                                 parameters.ToArray()));
            }

            writer.Close();

            UnitTest.Test(VirtualDrive.FileLength(
                              VirtualDrive.VirtualFileName("TestUndoFileWriter.txt")) > 0);
        }
Exemplo n.º 6
0
        private void ProcessFileForAdd(string fileName, HashSet <string> filenamesCaseInsensitive)
        {
            if (filenamesCaseInsensitive.Contains(fileName))
            {
                return;
            }

            try
            {
                ID3.Tag tag = ID3.TagUtils.ReadTag(new FileInfo(fileName));

                if (!Object.ReferenceEquals(tag, null))
                {
                    ID3.TagEditor editor = new ID3.TagEditor(tag);

                    int bitrate = -1;
                    if (!Object.ReferenceEquals(tag, null))
                    {
                        try
                        {
                            int tagSize = TagUtils.TagSizeV2(new FileInfo(fileName));
                            using (Stream stream = VirtualDrive.OpenInStream(fileName))
                            {
                                stream.Seek(tagSize, SeekOrigin.Begin);
                                bitrate = ID3MediaFileHeader.MP3Header.ReadBitrate(
                                    stream, VirtualDrive.FileLength(fileName));
                            }
                        }
                        catch (Exception)
                        {
                            bitrate = -1;
                        }
                    }

                    var track = new Tracks();

                    track.ID          = Guid.NewGuid();
                    track.Artist      = ShrinkText(editor.Artist, 64);
                    track.Title       = ShrinkText(editor.Title, 64);
                    track.Album       = ShrinkText(editor.Album, 64);
                    track.Filename    = ShrinkText(fileName, 1024);
                    track.ReleaseYear = ShrinkText(editor.ReleaseYear, 10);
                    track.TrackNumber = ShrinkText(editor.TrackNumber, 10);
                    track.PartOfSet   = ShrinkText(editor.PartOfSet, 10);
                    track.ContentType = ShrinkText(editor.ContentType, 64);
                    track.FullText    = ShrinkText(track.Artist + track.Title + track.Album + track.ContentType, 256);
                    track.Bitrate     = ShrinkText(bitrate.ToString(), 10);

                    databaseChanger.AddTrack(track);
                }
            }
            catch (Exception)
            {
            }
        }
Exemplo n.º 7
0
        public static byte[] LoadFileBinary(string filename)
        {
            long length = VirtualDrive.FileLength(filename);

            byte[] result = new byte[length];

            using (Stream stream = VirtualDrive.OpenInStream(filename))
            {
                stream.Read(result, 0, (int)length);
                return(result);
            }
        }
Exemplo n.º 8
0
        private static void TestTagUtilsWriteRawBiggerNeverShrink()
        {
            string fileName = VirtualDrive.VirtualFileName("TestTagUtilsWriteRawBiggerNeverShrink\\t1.mp3");

            TestTags.WriteDemoMp3(fileName, TestTags.demoTag2_3);

            FileInfo fileInfo = new FileInfo(fileName);

            TagUtils.WriteTagV2(TestTags.demoTag2_4, fileInfo, Rewriter.Strategy.NeverShrink);
            UnitTest.Test(VirtualDrive.FileLength(fileName) == TestTags.demoTag2_4.Length + TestTags.mpegDummy.Length);
            TagUtils.StripTagV2(fileInfo, 0);
            UnitTest.Test(ArrayUtils.IsEqual(VirtualDrive.Load(fileName), TestTags.mpegDummy));
        }
Exemplo n.º 9
0
        public static byte[] ReadTagV1Raw(FileInfo file)
        {
            Debug.Assert(HasTagV1(file));

            CheckMpegOffset(file);

            using (BinaryReader reader = OpenReader(file))
            {
                reader.BaseStream.Seek(
                    VirtualDrive.FileLength(file.FullName) - HeaderV1.totalSize,
                    SeekOrigin.Begin);

                return(reader.ReadBytes(HeaderV1.totalSize));
            }
        }
Exemplo n.º 10
0
        public static long MpegDataSize(FileInfo file)
        {
            long fileLength = VirtualDrive.FileLength(file.FullName);

            if (HasTagV2(file))
            {
                fileLength -= (TagSizeV2(file) + OffsetTagToMpegHeader(file));
            }
            if (HasTagV1(file))
            {
                fileLength -= TagSizeV1(file);
            }

            return(fileLength);
        }
Exemplo n.º 11
0
        public static void Rewrite(FileInfo file, long cutBeg, long cutEnd, long padBeg, long padEnd)
        {
            long beg = cutBeg;
            long end = VirtualDrive.FileLength(file.FullName) - cutEnd;

            BinaryReader reader = OpenReader(file);
            BinaryWriter writer = OpenWriter(new FileInfo(file + ".tmp"));

            WriteZeroBytes(writer, padBeg);
            CopyBytes(reader, writer, beg, end - beg);
            WriteZeroBytes(writer, padEnd);

            reader.Close();
            writer.Close();

            VirtualDrive.ReplaceFile(file.FullName + ".tmp", file.FullName);
        }
Exemplo n.º 12
0
        private static void TestTagUtilsWriteTagBiggerQuantize()
        {
            string fileName = VirtualDrive.VirtualFileName("TestTagUtilsWriteTagBiggerQuantize\\t1.mp3");

            TestTags.WriteDemoMp3(fileName, TestTags.demoTag2_3);
            FileInfo fileInfo = new FileInfo(fileName);
            Tag      tag      = TagUtils.ReadTag(fileInfo);
            Frame    f        = new Frame(tag.DescriptionMap, "MCDI");

            (f.Content as FrameContentBinary).Content = new byte[1024];
            tag.Add(f);

            TagUtils.WriteTagV2(tag, fileInfo, Rewriter.Strategy.Quantize);
            UnitTest.Test(VirtualDrive.FileLength(fileName) == 2048 + TestTags.mpegDummy.Length);
            TagUtils.StripTagV2(fileInfo, 0);
            UnitTest.Test(ArrayUtils.IsEqual(VirtualDrive.Load(fileName), TestTags.mpegDummy));
        }
Exemplo n.º 13
0
        private static void TestTagUtilsWriteTagSmallerExact()
        {
            Tag   tag = TagUtils.RawToTag(TestTags.demoTag2_3);
            Frame f   = new Frame(tag.DescriptionMap, "MCDI");

            (f.Content as FrameContentBinary).Content = new byte[1024];
            tag.Add(f);

            string fileName = VirtualDrive.VirtualFileName("TestTagUtilsWriteTagSmallerExact\\t1.mp3");

            TestTags.WriteDemoMp3(fileName, TagUtils.TagToRaw(tag));

            tag.Remove(f);
            FileInfo fileInfo = new FileInfo(fileName);

            TagUtils.WriteTagV2(tag, fileInfo, Rewriter.Strategy.Exact);
            UnitTest.Test(VirtualDrive.FileLength(fileName) == TagUtils.TagToRaw(tag).Length + TestTags.mpegDummy.Length);
            TagUtils.StripTagV2(fileInfo, 0);
            UnitTest.Test(ArrayUtils.IsEqual(VirtualDrive.Load(fileName), TestTags.mpegDummy));
        }
Exemplo n.º 14
0
        public static void WriteTagV1(Tag tag, FileInfo file)
        {
            using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write))
            {
                bool existingTag = HasTagV1(file);
                long fileLength  = VirtualDrive.FileLength(file.FullName);

                using (Writer writer = new Writer(file))
                {
                    if (existingTag)
                    {
                        writer.Seek(fileLength - HeaderV1.totalSize, SeekOrigin.Begin);
                    }
                    else
                    {
                        writer.Seek(fileLength, SeekOrigin.Begin);
                    }
                    tag.Write(writer);
                }
            }
        }
Exemplo n.º 15
0
        public static bool HasTagV2(FileInfo file)
        {
            if (VirtualDrive.FileLength(file.FullName) < HeaderV2.headerSize)
            {
                return(false);
            }

            byte[] arr = new byte[3];

            try
            {
                using (Stream stream = OpenInStream(file))
                {
                    stream.Read(arr, 0, arr.Length);
                }
            }
            catch (System.Exception)
            {
            }

            return(HasTagV2(arr));
        }
Exemplo n.º 16
0
        public static void WriteTagV1(byte[] raw, FileInfo file)
        {
            using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write))
            {
                bool existingTag = HasTagV1(file);
                long fileLength  = VirtualDrive.FileLength(file.FullName);

                using (BinaryWriter writer = OpenWriter(file))
                {
                    if (existingTag)
                    {
                        writer.BaseStream.Seek(fileLength - HeaderV1.totalSize, SeekOrigin.Begin);
                    }
                    else
                    {
                        writer.BaseStream.Seek(fileLength, SeekOrigin.Begin);
                    }

                    writer.Write(raw);
                }
            }

            CheckMpegOffset(file);
        }
Exemplo n.º 17
0
 public static bool AreFilesEqual(string fileName0, string fileName1)
 {
     return(Math.Min(VirtualDrive.FileLength(fileName0), VirtualDrive.FileLength(fileName1))
            == CountEqualBytes(fileName0, fileName1));
 }