Ejemplo n.º 1
0
        public async Task <IActionResult> Index()
        {
            var updateCount = int.Parse(_settingsKeeper.GetSetting("NumberOfUpdatesToShow").Value);

            ViewData["LatestReleases"] = await _naniWebContext.Chapters.OrderByDescending(chp => chp.ReleaseDate).Take(updateCount).Include(chp => chp.Series).ToArrayAsync();

            return(View("Home"));
        }
Ejemplo n.º 2
0
        public IActionResult SignUp()
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Profile"));
            }

            if (!bool.Parse(_settingsKeeper.GetSetting("EnableRegistration").Value))
            {
                return(RedirectToAction("SignIn"));
            }

            return(View());
        }
Ejemplo n.º 3
0
 public IActionResult ChangeEmail()
 {
     return(bool.Parse(_settingsKeeper.GetSetting("EnableEmailRecovery").Value) ? (IActionResult)View("NewEmail") : RedirectToAction("Index"));
 }
Ejemplo n.º 4
0
        public async Task <IActionResult> Add(ChapterAdd chapterAdd)
        {
            if (ModelState.IsValid)
            {
                var series = await _naniWebContext.Series.SingleAsync(srs => srs.Id == chapterAdd.SeriesId);

                var chapter = new Chapter
                {
                    Volume        = chapterAdd.Volume ?? 0,
                    ChapterNumber = chapterAdd.ChapterNumber,
                    Name          = chapterAdd.Name ?? string.Empty,
                    SeriesId      = series.Id,
                    Pages         = new List <Page>(),
                    ReleaseDate   = DateTime.UtcNow
                };

                var temp        = Utils.CurrentDirectory.CreateSubdirectory($"Temp{Path.DirectorySeparatorChar}{Guid.NewGuid()}");
                var tempPages   = temp.CreateSubdirectory("Pages");
                var destination = $"{_webHostEnvironment.WebRootPath}{Path.DirectorySeparatorChar}images{Path.DirectorySeparatorChar}pages{Path.DirectorySeparatorChar}";
                var pagesZip    = $"{temp.FullName}{Path.DirectorySeparatorChar}pages.zip";
                Directory.CreateDirectory(destination);

                using (var stream = System.IO.File.Create(pagesZip))
                {
                    await chapterAdd.Pages.CopyToAsync(stream);
                }

                ZipFile.ExtractToDirectory(pagesZip, tempPages.FullName);
                var pageList = tempPages.EnumerateFiles().Where(fl => fl.Extension == ".png").OrderBy(fl => fl.Name.Length).ThenBy(fl => fl.Name).ToList();

                if (pageList.Count == 0)
                {
                    temp.Delete(true);

                    TempData["Error"] = true;

                    return(RedirectToAction("Add"));
                }

                for (var i = 0; i < pageList.Count; i++)
                {
                    var page = new Page
                    {
                        PageNumber = i
                    };

                    do
                    {
                        page.Id = Guid.NewGuid();
                    } while (System.IO.File.Exists($"{destination}{page.Id}.png"));

                    chapter.Pages.Add(page);

                    pageList[i].CopyTo($"{destination}{page.Id}.png");
                }

                await _naniWebContext.Chapters.AddAsync(chapter);

                await _naniWebContext.SaveChangesAsync();

                var siteName           = _settingsKeeper.GetSetting("SiteName").Value;
                var chapterUrl         = $"{_settingsKeeper.GetSetting("SiteUrl").Value}{Url.Action("Project", "Home", new {urlSlug = series.UrlSlug, chapterNumber = chapter.ChapterNumber})}";
                var chapterDownloadUrl = $"{_settingsKeeper.GetSetting("SiteUrl").Value}{Url.Action("Download", "Home", new {urlSlug = series.UrlSlug, chapterNumber = chapter.ChapterNumber})}";
                var iconUrl            = $"{_settingsKeeper.GetSetting("SiteUrl").Value}/assets/icon.png";
                var tasks = new Task[4];

                tasks[0] = Task.Run(async() =>
                {
                    var mangadexSeries = await _naniWebContext.MangadexSeries.SingleOrDefaultAsync(srs => srs.SeriesId == series.Id);

                    MangadexChapter mangadexChapter = null;

                    if (chapterAdd.UploadToMangadex && mangadexSeries.MangadexId > 0)
                    {
                        using (var stream = System.IO.File.OpenRead(pagesZip))
                        {
                            mangadexChapter = await _mangadexUploader.UploadChapter(chapter, mangadexSeries, stream);
                        }
                    }

                    if (mangadexChapter == null)
                    {
                        mangadexChapter = new MangadexChapter
                        {
                            Chapter    = chapter,
                            ChapterId  = chapter.Id,
                            MangadexId = 0
                        }
                    }
                    ;

                    await _naniWebContext.MangadexChapters.AddAsync(mangadexChapter);
                    await _naniWebContext.SaveChangesAsync();
                });
                tasks[1] = Task.Run(async() =>
                {
                    await _firebaseCloudMessaging.SendNotification($"A new release is available at {siteName}!", $"New chapter of {series.Name} is available at {siteName}!", chapterUrl, iconUrl, $"series_{series.Id}");
                });
                tasks[2] = Task.Run(async() =>
                {
                    if (chapterAdd.AnnounceOnDiscord)
                    {
                        await _discordBot.SendMessage($"@everyone **{series.Name}** - Chapter {chapter.ChapterNumber} is out!{Environment.NewLine}Read it here: {chapterUrl}{Environment.NewLine}Download it here: {chapterDownloadUrl}");
                    }
                });
                tasks[3] = Task.Run(async() =>
                {
                    if (chapterAdd.AnnounceOnReddit)
                    {
                        await _redditPoster.PostLink("/r/manga", $"[DISC] {series.Name} - Chapter {chapter.ChapterNumber}", chapterUrl, chapterAdd.RedditNsfw);
                    }
                });

                await Task.WhenAll(tasks);

                temp.Delete(true);

                return(RedirectToAction("List", "SeriesManager", new { id = series.Id }));
            }

            TempData["Error"] = true;

            return(RedirectToAction("Add"));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Install(SignUpForm signUpForm)
        {
            if (Utils.IsInstalled())
            {
                return(RedirectToAction("Index", "Home"));
            }

            if (ModelState.IsValid)
            {
                var tasks = new List <Task>();

                await _naniWebContext.Database.MigrateAsync();

                var npgsqlConnection = (NpgsqlConnection)_naniWebContext.Database.GetDbConnection();
                npgsqlConnection.Open();
                npgsqlConnection.ReloadTypes();
                _settingsKeeper.SynchronizeSettings();

                var user = new IdentityUser <int>
                {
                    UserName       = signUpForm.Username,
                    Email          = signUpForm.Email,
                    EmailConfirmed = true
                };

                tasks.Add(Task.Run(async() =>
                {
                    await _userManager.CreateAsync(user, signUpForm.Password);
                    await _userManager.AddToRoleAsync(user, "Administrator");
                }));
                tasks.Add(Task.Run(async() => await System.IO.File.WriteAllTextAsync($"{Utils.CurrentDirectory.FullName}{Path.DirectorySeparatorChar}installed.txt", Utils.InstallationId)));
                tasks.Add(Task.Run(async() =>
                {
                    var manifest = new ManifestBuilder
                    {
                        ShortName = _settingsKeeper.GetSetting("SiteName").Value,
                        Name      = _settingsKeeper.GetSetting("SiteName").Value,
                        Icons     = new[]
                        {
                            new ManifestBuilder.Icon
                            {
                                Src   = "assets/icon.png",
                                Type  = "image/png",
                                Sizes = "512x512"
                            }
                        },
                        ThemeColor      = "#FFF",
                        BackgroundColor = "#FFF",
                        GcmSenderId     = "103953800507"
                    };

                    await manifest.BuildManifest(_webHostEnvironment);
                }));
                await Task.WhenAll(tasks);

                await _signInManager.PasswordSignInAsync(user, signUpForm.Password, false, false);

                return(RedirectToAction("General", "SettingsManager"));
            }

            TempData["Error"] = true;

            return(View());
        }
Ejemplo n.º 6
0
        public IActionResult General()
        {
            var model = new GeneralForm
            {
                SiteName              = _settingsKeeper.GetSetting("SiteName").Value,
                SiteDescription       = _settingsKeeper.GetSetting("SiteDescription").Value,
                SiteUrl               = _settingsKeeper.GetSetting("SiteUrl").Value,
                EnableRegistration    = bool.Parse(_settingsKeeper.GetSetting("EnableRegistration").Value),
                NumberOfUpdatesToShow = byte.Parse(_settingsKeeper.GetSetting("NumberOfUpdatesToShow").Value),
                SiteFooter            = _settingsKeeper.GetSetting("SiteFooterCode").Value,
                SiteSideBar           = _settingsKeeper.GetSetting("SiteSideBar").Value,
                SiteAboutPage         = _settingsKeeper.GetSetting("SiteAboutPage").Value
            };

            return(View("GeneralSettings", model));
        }