示例#1
0
        public async Task <IGallery> GetGallery(int id, string token = null)
        {
            using (var db = new LocalDbSourceContext())
            {
                var dbGallery = await db.ViewerGallery
                                .Include(vg => vg.ViewerGalleryTags)
                                .ThenInclude(vgt => vgt.Tag)
                                .FirstAsync(vg => vg.Gid == id.ToString());

                var gallery = new ExGallery();

                gallery.Category       = dbGallery.Category.ToEnum <GalleryCategory>();
                gallery.FileCount      = dbGallery.Filecount ?? 0;
                gallery.FileSize       = dbGallery.Filesize ?? 0;
                gallery.Id             = Convert.ToInt32(dbGallery.Gid);
                gallery.IsExpunged     = dbGallery.Expunged != "False";
                gallery.PostedDateTime = Convert.ToDateTime(dbGallery.Posted);
                gallery.Rating         = Convert.ToDouble(dbGallery.Rating);
                gallery.TagStrings     =
                    dbGallery.ViewerGalleryTags.Select(vgt => vgt.Tag).Select(t => $"{t.Scope}:{t.Name}").ToList();
                gallery.Title    = dbGallery.Title;
                gallery.TitleJpn = dbGallery.TitleJpn;
                gallery.Token    = dbGallery.Token;
                gallery.Uploader = dbGallery.Uploader;

                return(gallery);
            }
        }
示例#2
0
        private static async Task StartImageDownloadAsync(ExGallery gallery, ExGalleryImageListItem image, StorageFile file, BackgroundDownloader downloader)
        {
            Debug.WriteLine(image.Link);

            var htmlSource = await ExClient.GetStringWithExCookie($"{image.Link}");

            Uri uri = new Uri(ExImage.GetImageUriFromHtml(htmlSource));
            DownloadOperation download = downloader.CreateDownload(uri, file);

            download.StartAsync();
        }
示例#3
0
        private static string GetPrefix(ExGallery g)
        {
            switch (g.ParsedLanguage)
            {
            default:
            case LanguageType.Other:
            case LanguageType.NotApplicable:
            case LanguageType.Japanese:
                return("");

            case LanguageType.English:
                return("[Eng]");

            case LanguageType.Chinese:
                return("[中]");

            case LanguageType.Dutch:
                return("[Dutch]");

            case LanguageType.French:
                return("[Fr]");

            case LanguageType.German:
                return("[De]");

            case LanguageType.Hungarian:
                return("[Magyar]");

            case LanguageType.Italian:
                return("[it]");

            case LanguageType.Korean:
                return("[한]");

            case LanguageType.Polish:
                return("[Pol]");

            case LanguageType.Portuguese:
                return("[Port]");

            case LanguageType.Russian:
                return("[русский]");

            case LanguageType.Spanish:
                return("[Es]");

            case LanguageType.Thai:
                return("[ไทย]");

            case LanguageType.Vietnamese:
                return("[Việt]");
            }
        }
示例#4
0
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            try
            {
                // Load the gallery info
                if (GalleryViewModel.Gallery == null || GalleryViewModel.Gallery.Count == 0 || (e.NavigationParameter as string) != GalleryViewModel.Gallery?.Link)
                {
                    this.GalleryViewModel = new GalleryViewModel();

                    this.GalleryViewModel.Gallery = await ExGallery.DownloadGalleryAsync(e.NavigationParameter as string, 1, 3);
                }
            }
            catch (Exception ex)
            {
            }
        }
示例#5
0
        public static async Task StartGalleryDownloadAsync(ExGallery gallery, StorageFolder galleryFolder)
        {
            // Download image list
            await gallery.LoadAllItemsAsync();


            BackgroundTransferCompletionGroup completionGroup = new BackgroundTransferCompletionGroup();

            BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
            {
                Name = "DownloadFinished"
            };

            builder.SetTrigger(completionGroup.Trigger);
            BackgroundTaskRegistration taskRegistration = builder.Register();

            BackgroundDownloader downloader = new BackgroundDownloader(completionGroup)
            {
                TransferGroup = BackgroundTransferGroup.CreateGroup("Gallery")
            };

            downloader.TransferGroup.TransferBehavior = BackgroundTransferBehavior.Parallel;


            // Create tasks and file for each pic
            StorageFile[] files = new StorageFile[gallery.Count];
            foreach (var image in gallery)
            {
                files[gallery.IndexOf(image)] = await galleryFolder.CreateFileAsync($"{gallery.IndexOf(image) + 1}.jpg", CreationCollisionOption.ReplaceExisting);
            }

            // Get the image uri and download data for each pic
            List <Task> getImageUriTasks = new List <Task>();

            foreach (var image in gallery)
            {
                if (files[gallery.IndexOf(image)] != null)
                {
                    getImageUriTasks.Add(StartImageDownloadAsync(gallery, image, files[gallery.IndexOf(image)], downloader));
                }
            }
            await Task.WhenAll(getImageUriTasks);


            downloader.CompletionGroup.Enable();
        }
示例#6
0
        public ReadingViewModel(ExGallery gallery)
        {
            _gallery = gallery;
            _gallery.CollectionChanged += _gallery_CollectionChanged;

            // Create vm for each previewed image
            foreach (var item in _gallery)
            {
                _imageViewModels.Add(new ImageViewModel(item));
            }

            // Add dummy vm for all un-previewed images
            while (_imageViewModels.Count < gallery.FileCount)
            {
                _imageViewModels.Add(new ImageViewModel());
            }
        }
示例#7
0
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            try
            {
                if (GalleryViewModel.Gallery == null || GalleryViewModel.Gallery.Count == 0 || (e.NavigationParameter as string) != GalleryViewModel.Gallery?.Link)
                {
                    this.GalleryViewModel.Gallery = await ExGallery.DownloadGalleryAsync(e.NavigationParameter as string, 1, 3);


                    var f = new ImageWallRows <ExGalleryImageListItem>();
                    f.ItemsSource = this.GalleryViewModel.Gallery;
                    this.GalleryViewModel.GalleryImages = f;
                    //GalleryWall.DataContext = f;
                }
            }
            catch (Exception ex)
            {
                var x = ex.GetType();
            }
        }
示例#8
0
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Load Images
            try
            {
                readyForConnectedAnimation = false;
                var galleryLinkFromLastPage = QueryString.Parse(e.NavigationParameter as string)["link"];

                // Get ExGallery
                if (App.Current.Resources.ContainsKey("Gallery"))
                {
                    this.ReadingViewModel = new ReadingViewModel(App.Current.Resources["Gallery"] as ExGallery);
                }
                else
                {
                    this.ReadingViewModel = new ReadingViewModel(await ExGallery.DownloadGalleryAsync(galleryLinkFromLastPage, 1, 3));
                }
                this.ReadingViewModel.CurrentImageIndex = -1;
                flipView.SelectedIndex = -1;

                // Jump to Page
                indexFromLastPage = int.Parse(QueryString.Parse(e.NavigationParameter as string)["page"]);

                if (this.ReadingViewModel.CurrentImageIndex != indexFromLastPage)
                {
                    readyForConnectedAnimation = true;
                    this.ReadingViewModel.CurrentImageIndex = indexFromLastPage;
                }
                else
                {
                    // Handle the connected animation
                    flipView.UpdateLayout();
                    HandleConnectedAnimation();
                }
            }
            catch (Exception ex)
            {
            }
        }
示例#9
0
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Load Images
            try
            {
                var galleryLinkFromLastPage = QueryString.Parse(e.NavigationParameter as string)["link"];

                // Get ExGallery
                if (App.Current.Resources.ContainsKey("Gallery"))
                {
                    this.ReadingViewModel.Gallery = App.Current.Resources["Gallery"] as ExGallery;
                }
                else
                {
                    this.ReadingViewModel.Gallery = await ExGallery.DownloadGalleryAsync(galleryLinkFromLastPage, 1, 3);
                }

                // Load all image item
                var images = new ObservableCollection <ExImage>();
                await this.ReadingViewModel.Gallery.LoadAllItemsAsync();

                foreach (var item in this.ReadingViewModel.Gallery)
                {
                    images.Add(new ExImage()
                    {
                        Link = item.Link, Thumb = item.Thumb
                    });
                }
                this.ReadingViewModel.Images = images;

                // Jump to Page
                var indexFromLastPage = int.Parse(QueryString.Parse(e.NavigationParameter as string)["page"]);
                this.ReadingViewModel.CurrentImageIndex = indexFromLastPage;
            }
            catch (Exception ex)
            {
            }
        }