public static BitmapSource GetThumbnailForWindows(string inputMoviePath, LoadCounter loadCounter) { BitmapSource bitmapSource; try { var shellFile = ShellFile.FromFilePath(inputMoviePath); shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly; bitmapSource = shellFile.Thumbnail.ExtraLargeBitmapSource; } catch (Exception ex) { logger.Warn($"[{inputMoviePath}]サムネイル画像の取得に失敗しました。"); var shellFile = ShellFile.FromFilePath(inputMoviePath); shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly; bitmapSource = shellFile.Thumbnail.ExtraLargeBitmapSource; loadCounter.WarningCount++; Console.WriteLine(ex.StackTrace); } return(bitmapSource); }
private void LoadTs(CancellationToken token) { BindingOperations.EnableCollectionSynchronization(Util.Data, new object()); var task = Task.Factory.StartNew(() => { try { Util.Data.Clear(); GC.Collect(); var folder = Properties.Settings.Default.SaveFolder; var blacklist = Properties.Settings.Default.BlackList.Split(','); IEnumerable<string> files = Directory.EnumerateFiles(@folder,"*", SearchOption.AllDirectories).Where(name => name.EndsWith(".ts",StringComparison.CurrentCultureIgnoreCase) || name.EndsWith(".m2t", StringComparison.CurrentCultureIgnoreCase) || name.EndsWith(".mts", StringComparison.CurrentCultureIgnoreCase) || name.EndsWith(".m2ts", StringComparison.CurrentCultureIgnoreCase)).Where(names => { foreach (var black in blacklist) { if (Regex.IsMatch(names, @".+\\" + black +@"\\.+")) return false; } return true; }); LoadCounter loadCounter = new LoadCounter(progressDiag,progress,now,loadingText,files.Count()); foreach (string str in files) { try { token.ThrowIfCancellationRequested(); var program = new ReadTxtFile(str + ".program.txt"); var image = Util.GetThumbnailForWindows(str, loadCounter);//Windows標準のサムネイル取得 image.Freeze(); Util.Data.Add(new Files(program.Title, str, program.Series, program.Company, program.SeriesInfo, program.GenreIndex, program.Genre, program.Length, program.Starttime, program.Endtime, DateTime.Now, image, program.Epinum)); loadCounter.NowCount++; } catch (IndexOutOfRangeException) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}.program.txt]EDCB録画結果ファイルのパースに失敗しました。"); } catch (FormatException) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}.program.txt]EDCB録画結果ファイルのパースに失敗しました。"); } catch (FileNotFoundException) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}.program.txt]EDCB録画結果ファイルが見つかりませんでした。EDCBにて録画時に番組情報を保存するようにしてあるか確認してください。"); } catch (IOException ex) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}]ファイルを開く際にIOエラーが発生しました。 IOエラー詳細:{ex.Message}"); } catch (NullReferenceException) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}]やべぇーヌルッてしまった。。。ということで解析不能なTSファイルがありました。"); } catch (InvalidOperationException) { loadCounter.ErrorCount++; Util.logger.Warn($"[{str}]サムネイルが取得出来なかったためTSアイコンに差し替えました。"); } catch (AggregateException) { loadCounter.ErrorCount++; Util.logger.Error($"[{str}]TSファイル内から番組情報を取得しようとしましたが見つかりませんでした。"); } } } catch (OperationCanceledException) { Dispatcher.Invoke(() => { loadingText.Content = "TSファイル読み込み状況\nキャンセル"; }); } catch (ArgumentException) { MessageBox.Show("設定画面にて録画保存フォルダの設定がされていないようです。設定しなおしてください。"); Util.logger.Warn("設定画面にて録画保存フォルダの設定がされていないようです。設定しなおしてください。"); } catch (DirectoryNotFoundException) { MessageBox.Show("設定で指定されている録画保存フォルダのパスが正しくないようです。設定しなおしてください。\n"); Util.logger.Warn("設定で指定されている録画保存フォルダのパスが正しくないようです。設定しなおしてください。"); } catch (UnauthorizedAccessException) { MessageBox.Show("ファイルにアクセスする権利がありません。このアプリを管理者で実行するかアクセス制御を見直してください。"); Util.logger.Warn("ファイルにアクセスする権利がありません。このアプリを管理者で実行するかアクセス制御を見直してください。"); } catch (SecurityException) { MessageBox.Show("ファイルにアクセスする権利がありません。このアプリを管理者で実行するかアクセス制御を見直してください。"); Util.logger.Warn("ファイルにアクセスする権利がありません。このアプリを管理者で実行するかアクセス制御を見直してください。"); } catch (IOException ex) { MessageBox.Show("ファイルを開く際にIOエラーが発生しました。\n\nIOエラー詳細:" + ex.Message); Util.logger.Error($"ファイルを開く際にIOエラーが発生しました。 IOエラー詳細:{ex.Message}"); } Dispatcher.Invoke(() => { CancelButton.IsEnabled = true; Diag.IsOpen = false; }); }); }