Exemplo n.º 1
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            prgPreloader.Visibility = Visibility.Visible;
            bool   isAbsolute = _proxy.CheckAbsolute(book, ServerData.Book) == true ? true : false;
            string booksPath  = _proxy.GetItemProperty(book, ServerData.Book, PropertyData.Path);

            txtName.Text = _proxy.GetItemProperty(book, ServerData.Book, PropertyData.Name);

            string path = isAbsolute ? booksPath : $@"Temp\Books\{booksPath}";

            if (!isAbsolute)
            {
                if (!Directory.Exists(@"Temp\Books"))
                {
                    Directory.CreateDirectory(@"Temp\Books");
                }
                byte[] res = _proxy.DownloadAsync(booksPath, FilesType.Books).Result;
                if (res != null)
                {
                    using (FileStream fs = File.OpenWrite(path))
                    {
                        Task.WaitAll(fs.WriteAsync(res, 0, res.Length));
                        fs.Dispose();
                    }
                }
            }
            if (!File.Exists(path))
            {
                MessageBox.Show($"This file does not exist!\n({path})", "Wrong", MessageBoxButton.OK, MessageBoxImage.Error);
                Close();
                return;
            }
            string data = "";

            if (System.IO.Path.GetExtension(path) == ".epub")
            {
                EpubBook book = EpubReader.Read(path);
                data = book.ToPlainText();
            }
            else if (System.IO.Path.GetExtension(path) == ".pdf")
            {
                PdfReader reader = new PdfReader(path);
                string    text   = string.Empty;
                for (int page = 1; page <= reader.NumberOfPages; page++)
                {
                    text += PdfTextExtractor.GetTextFromPage(reader, page);
                }
                reader.Close();
                data = text;
            }
            else
            {
                using (FileStream fs = new FileStream(path, FileMode.Open))
                {
                    using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                    {
                        data = sr.ReadToEndAsync().Result;
                        sr.Dispose();
                    }
                }
            }

            Thread thd = new Thread(new ThreadStart(() =>
            {
                _words.AddRange(data.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries));

                Dispatcher.InvokeAsync(new Action(() =>
                {
                    foreach (string item in _words)
                    {
                        _totalWords += item.Split(" \\/=+-/^@$%{}|&\n\r\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length;
                    }
                    _max            = (_totalWords / _maxWordsPerPage) + 1;
                    txtMax.Text     = $"of {_max}";
                    slPages.Maximum = _max;

                    int?bm = _proxy.GetLastMarkAsync(book, user, ServerData.Book).Result;
                    if (bm != null)
                    {
                        txtPage.Text = _proxy.GetItemProperty(Convert.ToInt32(bm), ServerData.Bookmark, PropertyData.Position);
                        ChangePage(Convert.ToInt32(txtPage.Text));
                    }
                    else
                    {
                        ChangePage(1);
                    }
                    if (Convert.ToInt32(txtPage.Text) == _max)
                    {
                        btnLast.IsEnabled = btnNext.IsEnabled = false;
                        slPages.IsEnabled = false;
                    }
                    prgPreloader.Visibility = Visibility.Collapsed;
                }));
            }))
            {
                IsBackground = true
            };

            thd.Start();
        }