Ejemplo n.º 1
0
        private void btnSelect_Click(object sender, EventArgs e)
        {
            DbBrowser db = new DbBrowser();

            using (ItemSelector poetSeletor = new ItemSelector("انتخاب شاعر", db.Poets.ToArray(), null))
            {
                if (poetSeletor.ShowDialog(this) == DialogResult.OK)
                {
                    GanjoorPoet poet = poetSeletor.SelectedItem as GanjoorPoet;
                    PoetId = poet._ID;
                    txtSelectedPoetOrCategory.Text = poet._Name;
                    if (MessageBox.Show(
                            $"آیا تمایل دارید خوانش‌های بخش خاصی از آثار {poet._Name} را دریافت کنید؟",
                            "تأییدیه", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2,
                            MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign) == System.Windows.Forms.DialogResult.No)
                    {
                        db.CloseDb();

                        return;
                    }
                    using (CategorySelector catSelector = new CategorySelector(poet._ID, db))
                    {
                        if (catSelector.ShowDialog(this) == DialogResult.OK)
                        {
                            CatId = catSelector.SelectedCatID;
                            txtSelectedPoetOrCategory.Text = $"{poet._Name} » {db.GetCategory(CatId)._Text}";
                            db.CloseDb();
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private async Task _UpdatePoetStatsPage(Guid editingUserId, GanjoorPoet poet, List <GanjoorMetre> rhythms, RMuseumDbContext context)
        {
            var rhythmsCoupletCounts =
                await context.GanjoorVerses.Include(v => v.Poem).ThenInclude(p => p.Cat).AsNoTracking()
                .Where(v => v.Poem.Cat.PoetId == poet.Id && (v.VersePosition == VersePosition.Right || v.VersePosition == VersePosition.CenteredVerse1))
                .GroupBy(v => new { v.Poem.GanjoorMetreId })
                .Select(g => new { GanjoorMetreId = g.Key.GanjoorMetreId, Count = g.Count() })
                .ToListAsync();

            rhythmsCoupletCounts.Sort((a, b) => b.Count - a.Count);
            var sumRhythmsCouplets = rhythmsCoupletCounts.Sum(c => c.Count);

            string htmlText = $"<p>این آمار از میان {LanguageUtils.FormatMoney(sumRhythmsCouplets)} بیت شعر موجود در گنجور از {poet.Name} استخراج شده است.</p>{Environment.NewLine}";

            htmlText += $"<p>توجه فرمایید که این آمار به دلایلی از قبیل وجود چند نسخه از آثار شعرا در سایت (مثل آثار خیام یا وجود متن خلاصه و کامل هفت اورنگ جامی) و همینطور یک بیت محسوب شدن مصرع‌های بند قالبهای ترکیبی مثل مخمسها تقریبی و حدودی است و افزونگی دارد.</p>{Environment.NewLine}";
            htmlText += $"<p>آمار همهٔ شعرهای گنجور را <a href=\"/vazn\">اینجا</a> ببینید.</p>{Environment.NewLine}";
            htmlText += $"<p>وزنیابی دستی در بیشتر موارد با ملاحظهٔ تنها یک مصرع از شعر صورت گرفته و امکان وجود اشکال در آن (مخصوصاً اشتباه در تشخیص وزنهای قابل تبدیل از قبیل وزن مثنوی مولوی به جای وزن عروضی سریع مطوی مکشوف) وجود دارد. وزنیابی ماشینی نیز که جدیداً با استفاده از امکانات <a href=\"http://www.sorud.info/\">تارنمای سرود</a> اضافه شده بعضاً خطا دارد. برخی از بخشها شامل اشعاری با بیش از یک وزن هستند که در این صورت عمدتاً وزن ابیات آغازین و برای بعضی منظومه‌ها وزن غالب منظومه به عنوان وزن آن بخش منظور شده است.</p>{Environment.NewLine}";
            htmlText += $"<table>{Environment.NewLine}" +
                        $"<tr class=\"h\">{Environment.NewLine}" +
                        $"<td class=\"c1\">ردیف</td>{Environment.NewLine}" +
                        $"<td class=\"c2\">وزن</td>{Environment.NewLine}" +
                        $"<td class=\"c3\">تعداد ابیات</td>{Environment.NewLine}" +
                        $"<td class=\"c4\">درصد از کل</td>{Environment.NewLine}" +
                        $"</tr>{Environment.NewLine}";

            for (int i = 0; i < rhythmsCoupletCounts.Count; i++)
            {
                if (i % 2 == 0)
                {
                    htmlText += $"<tr class=\"e\">{Environment.NewLine}";
                }
                else
                {
                    htmlText += $"<tr>{Environment.NewLine}";
                }

                htmlText += $"<td class=\"c1\">{(i + 1).ToPersianNumbers()}</td>{Environment.NewLine}";
                string rhythm = rhythmsCoupletCounts[i].GanjoorMetreId == null ? "وزنیابی نشده" :
                                $"<a href=\"/vazn/?v={Uri.EscapeDataString(rhythms.Where(r => r.Id == rhythmsCoupletCounts[i].GanjoorMetreId).Single().Rhythm)}&amp;a={poet.Id}\">{rhythms.Where(r => r.Id == rhythmsCoupletCounts[i].GanjoorMetreId).Single().Rhythm}</a>";
                htmlText += $"<td class=\"c2\">{rhythm}</td>{Environment.NewLine}";
                htmlText += $"<td class=\"c3\">{LanguageUtils.FormatMoney(rhythmsCoupletCounts[i].Count)}</td>{Environment.NewLine}";
                htmlText += $"<td class=\"c4\">{(rhythmsCoupletCounts[i].Count * 100.0 / sumRhythmsCouplets).ToString("N2", new CultureInfo("fa-IR")).ToPersianNumbers()}</td>{Environment.NewLine}";

                htmlText += $"</tr>{Environment.NewLine}";
            }
            htmlText += $"</table>{Environment.NewLine}";

            var poetUrl = (await context.GanjoorCategories.Where(c => c.ParentId == null && c.PoetId == poet.Id).SingleAsync()).FullUrl;

            var pageUrl = $"{poetUrl}/vazn";

            var dbPage = await context.GanjoorPages.Where(p => p.FullUrl == pageUrl).SingleOrDefaultAsync();

            if (dbPage != null)
            {
                await _UpdatePageHtmlText(context, editingUserId, dbPage, "به روزرسانی خودکار صفحهٔ آمار وزنها", htmlText);
            }
            else
            {
                var maxPageId = await context.GanjoorPoems.MaxAsync(p => p.Id);

                if (await context.GanjoorPages.MaxAsync(p => p.Id) > maxPageId)
                {
                    maxPageId = await context.GanjoorPages.MaxAsync(p => p.Id);
                }
                var         pageId     = 1 + maxPageId;
                GanjoorPage dbPoemPage = new GanjoorPage()
                {
                    Id = pageId,
                    GanjoorPageType = GanjoorPageType.ProsodyAndStats,
                    Published       = true,
                    PageOrder       = -1,
                    Title           = "آمار اوزان عروضی",
                    FullTitle       = $"{poet.Nickname} » آمار اوزان عروضی",
                    UrlSlug         = "vazn",
                    FullUrl         = pageUrl,
                    HtmlText        = htmlText,
                    PoetId          = poet.Id,
                    PostDate        = DateTime.Now,
                    ParentId        = (await context.GanjoorPages.Where(p => p.FullUrl == poetUrl).SingleAsync()).Id
                };
                context.GanjoorPages.Add(dbPoemPage);
                await context.SaveChangesAsync();
            }
        }