예제 #1
0
파일: MediaDB.cs 프로젝트: XCVG/XSMP
        public void StartRebuild()
        {
            IsRebuilding = true;
            State        = MediaDBState.Loading;

            Console.WriteLine($"[MediaDB] Starting media database rebuild!");

            ScannerTokenSource?.Cancel();
            ScannerTask?.Wait();

            CloseDatabase();
            DeleteDatabaseFile();
            CreateDatabaseFile();
            OpenDatabase();

            IsRebuilding = false;
            StartMediaScan();
        }
예제 #2
0
파일: MediaDB.cs 프로젝트: XCVG/XSMP
        //entry point for media scan
        private void MediaScan(CancellationToken token)
        {
            State = MediaDBState.Scanning;

            int scanRetryCount = 0;

            //run media scan
            while (State != MediaDBState.Ready && scanRetryCount < UserConfig.Instance.MediaScannerRetryCount)
            {
                try
                {
                    MediaScanner.Scan(DBContext, token);
                    State = MediaDBState.Ready;
                }
                catch (Exception ex)
                {
                    if (ex is TaskCanceledException || ex is OperationCanceledException)
                    {
                        Console.WriteLine("[MediaDB] Media scanner aborted!");
                        State = MediaDBState.Loading;
                        break;
                    }
                    else
                    {
                        Console.Error.WriteLine("[MediaDB] Media scanner failed!");
                        Console.Error.WriteLine(ex);
                        State = MediaDBState.Error;
                        scanRetryCount++;
                    }
                }
            }

            //load playlists
            try
            {
                LoadPlaylists(token);
            }
            catch (Exception ex)
            {
                if (ex is TaskCanceledException || ex is OperationCanceledException)
                {
                    Console.WriteLine("[MediaDB] Playlist loading aborted!");
                    State = MediaDBState.Loading;
                }
                else
                {
                    Console.Error.WriteLine("[MediaDB] Playlist loading failed!");
                    Console.Error.WriteLine(ex);
                    State = MediaDBState.Error;
                }
            }

            //trim cache
            try
            {
                MediaTranscoder.TrimCache();
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("[MediaDB] Media cache trim failed!");
            }

            //needed? safe?
            IsRebuilding       = false;
            ScannerTask        = null;
            ScannerTokenSource = null;
        }