Exemplo n.º 1
0
        private void View()
        {
            var hm = new HentaiModel {
                Link  = Link,
                Title = "lul"
            };

            if (Link.ToLower().Contains("hentai.org"))
            {
                hm.Site = "ExHentai.org";
            }
            else if (Link.ToLower().Contains("nhentai"))
            {
                hm.Site = "nHentai.net";
            }
            else if (Link.ToLower().Contains("hentai.cafe"))
            {
                hm.Site = "Hentai.cafe";
            }
            else
            {
                return;
            }
            var viewWindow = new HentaiViewerWindow {
                DataContext           = new HentaiViewerWindowViewModel(hm),
                WindowStartupLocation = WindowStartupLocation.CenterScreen
            };

            viewWindow.Show();
        }
        //private bool _saving;

        public HentaiViewerWindowViewModel(HentaiModel hentai, bool saveEnabled = true)
        {
            Hentai            = hentai;
            CopyLinkCommand   = new ActionCommand(() => Clipboard.SetText(Hentai.Link));
            ChangeModeCommand = new ActionCommand(ChangeMode);
            JumpCommand       = new ActionCommand(Jump);
            ImageObjects      = new ReadOnlyObservableCollection <object>(_imageObjects);
            GetImagesCommand  = new ActionCommand(async() =>
            {
                FetchButtonVisibility = Visibility.Collapsed;
                PregressBarVisibility = Visibility.Visible;
                var links             = new List <object>();
                if (!hentai.IsSavedGallery)
                {
                    var files = Directory.GetFiles(hentai.SavePath).ToList();
                    files.ForEach(links.Add);
                    files.Remove("INFO.json");
                    SetPages(files.Count, files.Count);
                }
                else
                {
                    links = await SelectSiteAsync(hentai);
                }

                _images   = new ObservableCollection <object>(links);
                Images    = new ReadOnlyObservableCollection <object>(_images);
                PagesList = new ReadOnlyObservableCollection <int>(_pagesList);
                PageIntList();
                PregressBarVisibility = Visibility.Collapsed;
                foreach (var link in links)
                {
                    if (_isClosing || _imageObjects.Count == 5)
                    {
                        break;
                    }
                    _imageObjects.Add(new ImageModel
                    {
                        PageNumber = links.IndexOf(link) + 1,
                        Source     = link,
                        IsGif      = link.ToString().Contains(".gif")
                    });
                    await Task.Delay(10);
                    Loaded++;
                }
                SaveEnabled = saveEnabled;
            });
            SaveImagesCommand = new ActionCommand(() =>
            {
                if (SaveProgress == Visibility.Collapsed)
                {
                    SaveImagesAsync();
                }
            });
            Setting = SettingsController.Settings;
            if (Setting.Other.InstantFetch)
            {
                GetImagesCommand.Execute(null);
            }
        }
Exemplo n.º 3
0
        //private bool _dialogIsOpen = false;
        private void OpenDialog()
        {
            //if (_dialogIsOpen) {
            //	return;
            //}
            //_dialogIsOpen = true;
            //var dia = new GalleryLinkDialog();
            //await DialogHost.Show(dia);
            //_dialogIsOpen = false;

            if (!Clipboard.ContainsText() && !Clipboard.GetText().StartsWith("http"))
            {
                return;
            }
            var link = Clipboard.GetText();
            var hm   = new HentaiModel {
                Link  = link,
                Title = "lul"
            };

            if (link.ToLower().Contains("hentai.org/g/"))
            {
                hm.Site = "ExHentai.org";
            }
            else if (link.ToLower().Contains("nhentai.net/g/"))
            {
                hm.Site = "nHentai.net";
            }
            else if (link.ToLower().Contains("hentai.cafe"))
            {
                hm.Site = "Hentai.cafe";
            }
            else if (link.ToLower().Contains("pururin.us/gallery/"))
            {
                hm.Site = "Pururin.us";
            }
            else if (link.ToLower().Contains("imgur.com/a/"))
            {
                hm.Site = "Imgur.com";
            }
            else
            {
                return;
            }
            var viewWindow = new HentaiViewerWindow {
                DataContext           = new HentaiViewerWindowViewModel(hm),
                WindowStartupLocation = WindowStartupLocation.CenterScreen
            };

            viewWindow.Show();
            viewWindow.Focus();
        }
        private async Task <List <object> > SelectSiteAsync(HentaiModel hentai)
        {
            switch (hentai.Site)
            {
            case "Hentai.cafe":
            {
                var(paths, count) = await HentaiCafe.CollectImagesTaskAsync(hentai, SetPages);

                Pages = $"{paths.Count} : {count}";
                return(paths);
            }

            case "nHentai.net":
            {
                var(paths, count) = await NHentai.CollectImagesTaskAsync(hentai, SetPages);

                Pages = $"{paths.Count} : {count}";
                return(paths);
            }

            case "ExHentai.org":
            {
                var(paths, count) = await ExHentai.CollectImagesTaskAsync(hentai, SetPages);

                Pages = $"{paths.Count} : {count}";
                return(paths);
            }

            case "Pururin.us":
            {
                var(paths, count) = await Pururin.CollectImagesTaskAsync(hentai, SetPages);

                Pages = $"{paths.Count} : {count}";
                return(paths);
            }

            case "Imgur.com":
            {
                var(paths, count) = await Sites.Imgur.CollectImagesTaskAsync(hentai, SetPages);

                Pages = $"{paths.Count} : {count}";
                return(paths);
            }

            default:
                return(null);
            }
        }
Exemplo n.º 5
0
        public static async Task <(List <object>, int)> CollectImagesTaskAsync(HentaiModel hentai,
                                                                               Action <int, int> setPages)
        {
            //var mockUrl = "https://api.imgur.com/3/album/5F5Cy/images";

            //https://imgur.com/a/LNKof
            var galleryId = hentai.Link.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last();

            var    client   = new ImgurClient("b9a0d31f5189a6e");
            var    endpoint = new AlbumEndpoint(client);
            IAlbum album;

            try {
                album = await endpoint.GetAlbumAsync(galleryId);
            }
            catch (ImgurException e) {
                hentai.Title = e.Message;
                return(new List <object>(), 0);
            }
            if (hentai.Title == "lul")
            {
                hentai.Title = album.Title ?? album.Link;
            }
            if (Directory.Exists(hentai.SavePath))
            {
                //var files = Directory.GetFiles(hentai.SavePath, "*.png");
                var files =
                    new DirectoryInfo(hentai.SavePath).GetFileSystemInfos("*.???")
                    .OrderBy(fs => int.Parse(fs.Name.Split('.')[0]));
                var paths = new List <object>();
                files.ToList().ForEach(p => paths.Add(p.FullName));
                if (files.ToList().Count == album.ImagesCount)
                {
                    setPages(files.Count(), album.ImagesCount);
                }
                return(new List <object>(paths), album.ImagesCount);
            }
            setPages(album.Images.Count(), album.ImagesCount);
            return(new List <object>(album.Images.Select(i => i.Link).ToList()),
                   album.ImagesCount);
        }
Exemplo n.º 6
0
        public static async Task <(List <object>, int)> CollectImagesTaskAsync(HentaiModel hentai,
                                                                               Action <int, int> setPages)
        {
            if (Directory.Exists(hentai.SavePath) && hentai.IsSavedGallery)
            {
                var files =
                    new DirectoryInfo(hentai.SavePath).GetFileSystemInfos("*.???")
                    .OrderBy(fs => int.Parse(fs.Name.Split('.')[0]));
                var paths = new List <object>();
                files.ToList().ForEach(p => paths.Add(p.FullName));
                return(new List <object>(paths), files.Count());
            }
            //http://pururin.us/gallery/32056/rem-ram-revolution
            //http://pururin.us/assets/image/data/32056/1.jpg
            var _galleryId = hentai.Link.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[3];
            var document   = await ParseHtmlStringAsync(await GetHtmlStringAsync(hentai.Link));

            var pages =
                int.Parse(Regex.Match(document.DocumentElement.OuterHtml, "<li>([0-9]+) Pages</li>").Groups[1].Value);

            if (hentai.Title == "lul")
            {
                var firstOrDefault =
                    document.All.FirstOrDefault(h => h.LocalName == "h1" && h.ClassList.Contains("otitle"));
                if (firstOrDefault != null)
                {
                    hentai.Title = firstOrDefault.TextContent;
                }
            }
            var images = new List <object>();

            for (var i = 1; i <= pages; i++)
            {
                images.Add($"http://pururin.us/assets/image/data/{_galleryId}/{i}.jpg");
            }

            return(images, pages);
        }
Exemplo n.º 7
0
        public static async Task <(List <object>, int)> CollectImagesTaskAsync(HentaiModel hentai,
                                                                               Action <int, int> setPages)
        {
            if (Directory.Exists(hentai.SavePath) && hentai.IsSavedGallery)
            {
                var files =
                    new DirectoryInfo(hentai.SavePath).GetFileSystemInfos("*.???")
                    .OrderBy(fs => int.Parse(fs.Name.Split('.')[0]));
                var paths = new List <object>();
                files.ToList().ForEach(p => paths.Add(p.FullName));
                return(new List <object>(paths), files.Count());
            }
            var url = hentai.Link;
            //Let's create a new parser using this configuration
            var parser = new HtmlParser();
            //Just get the DOM representation
            var entryPage = await parser.ParseAsync(await GetHtmlStringAsync(url));

            var entryLink =
                entryPage.All.Where(l => l.LocalName == "a" && l.ClassList.Contains("x-btn-large")).ToList()[0]
                .GetAttribute("href");

            if (hentai.Title == "lul")
            {
                var firstOrDefault = entryPage.All.FirstOrDefault(h => h.LocalName == "h3");
                if (firstOrDefault != null)
                {
                    hentai.Title = firstOrDefault.TextContent;
                }
            }
            var blankurl = entryLink + "page/";

            if (!entryLink.EndsWith("page/1"))
            {
                entryLink = entryLink + "page/1";
            }

            var html = await GetHtmlStringAsync(entryLink);

            var match = Regex.Match(html,
                                    "<div class=\"text\">([0-9]+) ⤵</div>",
                                    RegexOptions.IgnoreCase);
            var retlist           = new List <object>();
            var lastChapterNumber = int.Parse(match.Groups[1].Value);

            setPages(0, lastChapterNumber);
            for (var i = 1; i <= lastChapterNumber; i++)
            {
                var htmlpage = await parser.ParseAsync(await GetHtmlStringAsync($"{blankurl}{i}"));

                var img = htmlpage.All.First(im => im.LocalName == "img" && im.ClassList.Contains("open") &&
                                             im.HasAttribute("src") &&
                                             im.GetAttribute("src")
                                             .Contains("https://cdn.hentai.cafe/manga/content/comics/"))
                          .GetAttribute("src");
                retlist.Add(img);
                setPages(i, lastChapterNumber);
            }

            return(retlist, lastChapterNumber);
        }
Exemplo n.º 8
0
        public static async Task <(List <object>, int)> CollectImagesTaskAsync(HentaiModel hentai,
                                                                               Action <int, int> setPages)
        {
            if (Directory.Exists(hentai.SavePath) && hentai.IsSavedGallery)
            {
                var files =
                    new DirectoryInfo(hentai.SavePath).GetFileSystemInfos("*.???")
                    .OrderBy(fs => int.Parse(fs.Name.Split('.')[0]));
                var paths = new List <object>();
                files.ToList().ForEach(p => paths.Add(p.FullName));
                return(new List <object>(paths), files.Count());
            }
            var url      = hentai.Link;
            var document = await ParseHtmlStringAsync(await GetHtmlStringAsync(url));

            var pages =
                int.Parse(Regex.Match(document.DocumentElement.OuterHtml, "<div>([0-9]+) pages</div>").Groups[1].Value);

            setPages(0, pages);
            if (hentai.Title == "lul")
            {
                var firstOrDefault = document.All.FirstOrDefault(h => h.LocalName == "h1");
                if (firstOrDefault != null)
                {
                    hentai.Title = firstOrDefault.TextContent;
                }
            }
            var thumbnailcontainer =
                document.All.First(
                    c => c.LocalName == "div" && c.HasAttribute("id") && c.GetAttribute("id") == "thumbnail-container");
            var imgt = thumbnailcontainer.Children
                       .Select(thumbnailcontainerChild => thumbnailcontainerChild.Children[0].Children[0]).ToList();
            //var imgTags = thumbnailcontainer?.Children.Where(i => i.LocalName == "img" && i.ClassList.Contains("lazyload"));

            var images =
                imgt?.Select(
                    element =>
                    $"{element.GetAttribute("data-src").Replace("t.j", ".j").Replace("/t.", "/i.").Replace("t.pn", ".pn")}")
                .Cast <object>()
                .ToList();

            //img link https://t.nhentai.net/galleries/775571/6.jpg
            // overview link https://nhentai.net/g/124787/

            //var imagelinktmp = url.Replace("/g/", "/galleries/").Replace("://t.", "://i.");
            //for (int i = 1; i <= pages; i++) {
            //	images.Add($"{imagelinktmp}{i}.jpg");
            //}
            setPages(images.Count, pages);
            var ims = new List <object>();

            foreach (var image in images)
            {
                if (image.ToString().StartsWith("http"))
                {
                    ims.Add(image);
                    continue;
                }
                ims.Add($"https:{image}");
            }
            return(ims, pages);
        }
Exemplo n.º 9
0
        public static async Task <(List <object>, int)> CollectImagesTaskAsync(HentaiModel hentai,
                                                                               Action <int, int> setPages)
        {
            if (Directory.Exists(hentai.SavePath) && !hentai.IsSavedGallery)
            {
                var files =
                    new DirectoryInfo(hentai.SavePath).GetFileSystemInfos("*.???")
                    .OrderBy(fs => int.Parse(fs.Name.Split('.')[0]));
                var paths = new List <object>();
                files.ToList().ForEach(p => paths.Add(p.FullName));
                return(new List <object>(paths), files.Count());
            }
            var url    = hentai.Link;
            var client = new RestClient {
                UserAgent =
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.70 Safari/537.36",
                Encoding        = Encoding.UTF8,
                Timeout         = 60000,
                BaseUrl         = new Uri(url),
                CookieContainer = GetCookies()
            };

            if (hentai.Link.Contains("g.e-hentai.org"))
            {
                client.CookieContainer.Add(new Cookie("nw", "1", "/", "g.e-hentai.org"));
            }
            var document = await ParseHtmlStringAsync(await GetHtmlStringAsync(client));

            if (hentai.Title == "lul")
            {
                hentai.Title = document.Title.Replace(" - ExHentai.org", string.Empty);
            }
            var urlsplit      = url.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            var galleryid     = urlsplit[urlsplit.Length - 2];
            var ptag          = document.All.Where(p => p.LocalName == "p" && p.ClassList.Contains("gpc"));
            var showingimages = ptag.First().TextContent.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            var pn            = showingimages[showingimages.Length - 2].Trim().Replace(",", string.Empty);
            var pages         = int.Parse(pn, CultureInfo.InvariantCulture);

            setPages(0, pages);
            var imgpagestd =
                document.All.Where(
                    t => t.LocalName == "a" && t.HasAttribute("href") && t.GetAttribute("href").Contains("?p="));
            var impagelink = new List <string> {
                url
            };

            foreach (var element in imgpagestd)
            {
                var link = element.GetAttribute("href");
                if (!impagelink.Contains(link))
                {
                    impagelink.Add(link);
                }
            }

            var imgagelinkpages = new List <string>();

            foreach (var imgpage in impagelink)
            {
                client.BaseUrl = new Uri(imgpage);
                var html = await ParseHtmlStringAsync(await GetHtmlStringAsync(client));

                var atags =
                    html.All.Where(
                        t =>
                        t.LocalName == "a" && t.HasAttribute("href") &&
                        t.GetAttribute("href").Contains($"{galleryid}-"));
                foreach (var element in atags)
                {
                    if (!imgagelinkpages.Contains(element.GetAttribute("href")))
                    {
                        imgagelinkpages.Add(element.GetAttribute("href"));
                    }
                }

                //https://exhentai.org/s/8cbbff2c8a/1069378-1
                imgagelinkpages = new List <string>(imgagelinkpages.OrderBy(x => int.Parse(x.Split('-').Last())));
            }
            var images = new List <object>();

            for (var index = 0; index < imgagelinkpages.Count; index++)
            {
                var imgagelinkpage = imgagelinkpages[index];
                client.BaseUrl = new Uri(imgagelinkpage);
                var html = await ParseHtmlStringAsync(await GetHtmlStringAsync(client));

                var atags =
                    html.All.Where(
                        t => t.LocalName == "img" && t.HasAttribute("id") && t.Id.Contains("img"));
                if (atags.Count(c => c.HasAttribute("id")) == 0)
                {
                    atags = html.All.Where(
                        t => t.LocalName == "img" && t.HasAttribute("src") &&
                        t.GetAttribute("src").Contains("keystamp"));
                }
                var imglist = atags.Select(element => element.GetAttribute("src"));
                images.AddRange(imglist);
                setPages(index, pages);
            }
            return(images, pages);
        }