Пример #1
0
        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);
        }
Пример #2
0
        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();
            }
        }