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