public static WebCache_Media ToMediaRequest(this MediaStoreInfo m, string ed2k) { if (m == null) { return(null); } WebCache_Media n = new WebCache_Media { ED2K = ed2k }; n.MediaInfo = m.MediaInfo; n.Version = m.Version; return(n); }
public static MediaStoreInfo GetMediaInfo(string filename, IFile file) { if (file == null) { return(null); } try { lock (_lock) { MediaStoreInfo m = null; Thread mediaInfoThread = new Thread(() => { if (minstance == null) { minstance = new MediaInfo(); } if (minstance.Open(filename) == 0) { return; //it's a boolean response. } minstance.Option("Inform", "JSON"); minstance.Option("Complete", "1"); minstance.Option("SkipBinaryData", "1"); string version = minstance.Option("Info_Version"); m = new MediaStoreInfo(); string minfo = minstance.Inform(); //Remove @ref m.MediaInfo = remref.Replace(minfo, string.Empty); m.Version = ParseVersion(version); }); mediaInfoThread.Start(); bool finished = mediaInfoThread.Join(TimeSpan.FromMinutes(5)); //TODO Move Timeout to settings if (!finished) { try { mediaInfoThread.Abort(); } catch { /*ignored*/ } try { CloseMediaInfo(); } catch { /*ignored*/ } return(null); } return(m); } } finally { minstance?.Close(); GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; GC.Collect(); } }