public static void SaveRatingModel(string filename, ZipArtistsRatingModel model) { JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new JavaScriptDateTimeConverter()); serializer.NullValueHandling = NullValueHandling.Ignore; Monitor.Instance.Push($"Write file: {filename}"); using (StreamWriter sw = new StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filename))) using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, model); } }
public void AddBookmark(string artist, string category = "None") { if (rating_model == null) { rating_model = new ZipArtistsRatingModel(); rating_model.BookmarkCategory = new List <Tuple <string, string, Color> >(); rating_model.Rating = new Dictionary <string, int>(); } if (rating_model.BookmarkCategory.Any(x => x.Item1 == artist && x.Item2 == category)) { return; } rating_model.BookmarkCategory.Add(Tuple.Create(artist, category, Colors.White)); ZipArtistsModelManager.SaveRatingModel(rate_filename, rating_model); }
private async void StackPanel_MouseDown(object sender, MouseButtonEventArgs e) { var item = sender as ListBoxItem; if (item.Tag.ToString() == "New") { var cofd = new CommonOpenFileDialog(); cofd.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; cofd.IsFolderPicker = true; if (cofd.ShowDialog(this) == CommonFileDialogResult.Ok) { CollectStatusPanel.Visibility = Visibility.Visible; await Task.Run(() => ProcessPath(cofd.FileName)); } } else if (item.Tag.ToString() == "Open") { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; ofd.Filter = "데이터 파일 (*.json)|*.json"; if (ofd.ShowDialog() == true) { // 열기 try { model = ZipArtistsModelManager.OpenModel(ofd.FileName); var raw = System.IO.Path.GetFileNameWithoutExtension(ofd.FileName); rate_filename = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(ofd.FileName), raw + "-rating.json"); if (File.Exists(rate_filename)) { rating_model = ZipArtistsModelManager.OpenRatingModel(rate_filename); } } catch { MessageBox.Show("옳바른 파일이 아닙니다!", "Zip Listing", MessageBoxButton.OK, MessageBoxImage.Error); return; } bool offline = false; if (!Directory.Exists(model.RootDirectory)) { if (MessageBox.Show($"루트 디렉토리 \"{model.RootDirectory}\"를 찾을 수 없습니다! 디렉토리 위치가 변경되었다면 직접 루트 디렉토리를 수정해주세요!\r\n오프라인 모드로 열까요?", "Zip Listing", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == MessageBoxResult.No) { return; } offline = true; } algorithm.Build(model); artist_list = model.ArtistList.ToList(); // 초기화 elems.Clear(); artist_list.ForEach(x => elems.Add(Tuple.Create(x, Tuple.Create(model.RootDirectory + x.Key, 0, offline)))); day_before = raws = elems; sort_data(align_column, align_row); ArticleCount.Text = $"작가 {artist_list.Count.ToString("#,#")}명"; PageCount.Text = $"작품 {artist_list.Select(x => x.Value.ArticleData.Count).Sum().ToString("#,#")}개"; max_page = artist_list.Count / show_elem_per_page; initialize_page(); stack_clear(); stack_push(); } } else if (item.Tag.ToString() == "Back") { stack_back(); } else if (item.Tag.ToString() == "Forward") { stack_forward(); } else if (item.Tag.ToString() == "Align") { var dialog = new ZipArtistsSorting(align_column, align_row); if ((bool)(await DialogHost.Show(dialog, "RootDialog"))) { int column = dialog.AlignColumnIndex; int row = dialog.AlignRowIndex; if (column == align_column && row == align_row) { return; } sort_data(column, row); align_column = column; align_row = row; initialize_page(); stack_push(); } } else if (item.Tag.ToString() == "Filter") { if (raws.Count == 0) { return; } var dialog = new ZipArtistsFilter(raws.Select(x => DateTime.Parse(x.Item1.Value.LastAccessDate)).ToList(), starts, ends, show_bookmark); if ((bool)(await DialogHost.Show(dialog, "RootDialog"))) { if (dialog.StartDate.SelectedDate.HasValue) { starts = dialog.StartDate.SelectedDate; } if (dialog.EndDate.SelectedDate.HasValue) { ends = dialog.EndDate.SelectedDate.Value.AddMilliseconds(23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000 + 999); } if (dialog.ShowBookmark.IsChecked.HasValue) { show_bookmark = dialog.ShowBookmark.IsChecked.Value; } elems = day_before; filter_data(); max_page = elems.Count / show_elem_per_page; initialize_page(); stack_push(); } } else if (item.Tag.ToString() == "Statistics") { if (artist_list == null || artist_list.Count == 0) { return; } var dialog = new ZipArtistsStatistics(artist_list); await DialogHost.Show(dialog, "RootDialog"); } else if (item.Tag.ToString() == "Tool") { var dialog = new ZipArtistsTool(); await DialogHost.Show(dialog, "RootDialog"); } }