115 lines
4.0 KiB
C#
115 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace MKVTest
|
|
{
|
|
class MkvFileInfo
|
|
{
|
|
|
|
public MkvFile GetAttributes(string filePath)
|
|
{
|
|
var file = new MkvFile { Tracks = GetShit(filePath, out MkvSegmentInformation info), SegementInformation = info };
|
|
return file;
|
|
}
|
|
|
|
private static List<MkvTrack> GetShit(string filePath, out MkvSegmentInformation information)
|
|
{
|
|
var tracks = new List<MkvTrack>();
|
|
information = null;
|
|
var command = "/C mkvinfo.exe \"" + filePath + "\" > info.txt";
|
|
var process = new System.Diagnostics.Process();
|
|
var startInfo = new System.Diagnostics.ProcessStartInfo
|
|
{
|
|
WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
|
|
FileName = "cmd.exe",
|
|
Arguments = command
|
|
};
|
|
process.StartInfo = startInfo;
|
|
if (!Form1.CheckFiles())
|
|
{
|
|
MessageBox.Show(@"The two required files, mkvpropedit.exe and mkvinfo.exe are missing from this program's startup folder. These files are required to edit MKV files.", @"Missing Required Files");
|
|
}
|
|
process.Start();
|
|
while (!process.HasExited)
|
|
{
|
|
|
|
}
|
|
var info = File.ReadAllLines("info.txt");
|
|
var readingSegInfo = false;
|
|
var readingTrack = false;
|
|
var track = new MkvTrack();
|
|
for (var i = 0; i < info.Length; i++)
|
|
{
|
|
if (info[i] == "|+ Segment information")
|
|
{
|
|
readingSegInfo = true;
|
|
readingTrack = false;
|
|
continue;
|
|
}
|
|
|
|
if (info[i] == "| + A track")
|
|
{
|
|
readingTrack = true;
|
|
readingSegInfo = false;
|
|
if (track.Name == null && track.Language == null) continue;
|
|
tracks.Add(track);
|
|
track = new MkvTrack();
|
|
}
|
|
|
|
if (readingSegInfo)
|
|
{
|
|
if (info[i].Contains("Title:"))
|
|
{
|
|
var index = info[i].IndexOf(":", StringComparison.Ordinal) + 1;
|
|
var seg = new MkvSegmentInformation
|
|
{
|
|
Title = info[i].Substring(index, info[i].Length - index).Trim()
|
|
};
|
|
information = seg;
|
|
}
|
|
}
|
|
|
|
if (readingTrack)
|
|
{
|
|
if (info[i].Contains("Name:"))
|
|
{
|
|
var index = info[i].IndexOf(":", StringComparison.Ordinal) + 1;
|
|
track.Name = info[i].Substring(index, (info[i].Length - index)).Trim();
|
|
if(track.Type == MkvTrack.TrackType.Subtitle) tracks.Add(track);
|
|
}
|
|
|
|
if (info[i].Contains("Language:"))
|
|
{
|
|
var index = info[i].IndexOf(":", StringComparison.Ordinal) + 1;
|
|
track.Language = info[i].Substring(index, (info[i].Length - index)).Trim();
|
|
}
|
|
|
|
if (info[i].Contains("Video track"))
|
|
{
|
|
track.Type = MkvTrack.TrackType.Video;
|
|
}
|
|
if (info[i].Contains("Audio track"))
|
|
{
|
|
track.Type = MkvTrack.TrackType.Audio;
|
|
}
|
|
if (info[i].Contains("Track type: subtitles"))
|
|
{
|
|
track.Type = MkvTrack.TrackType.Subtitle;
|
|
}
|
|
}
|
|
}
|
|
if (information == null)
|
|
{
|
|
information = new MkvSegmentInformation();
|
|
}
|
|
|
|
return tracks;
|
|
}
|
|
}
|
|
}
|