%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/catalog.varak.net/bookUploader/
Upload File :
Create Path :
Current File : /www/varak.net/catalog.varak.net/bookUploader/MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Serialization;
using Microsoft.Win32;

namespace bookUploader
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private ObservableCollection<Author> _authors = new ObservableCollection<Author>();
        private ObservableCollection<Book> _books = new ObservableCollection<Book>();
        private ObservableCollection<Language> _languages = new ObservableCollection<Language>();
        private ObservableCollection<Genre> _genres = new ObservableCollection<Genre>();
        private Book _currentBook = new Book();

        public MainWindow()
        {
            // get authors
            string data = Utils.HttpGetAuth("http://catalog.varak.net/data/authors", "waritko", "Pojka8uj");
            byte[] buff = Encoding.UTF8.GetBytes(data);
            MemoryStream ms = new MemoryStream(buff);
            DataContractSerializer serializer = new DataContractSerializer(typeof(List<Author>));
            List<Author> authors = (List<Author>)serializer.ReadObject(ms);
            Authors = new ObservableCollection<Author>(authors);
            // get genres
            data = Utils.HttpGetAuth("http://catalog.varak.net/data/genres", "waritko", "Pojka8uj");
            buff = Encoding.UTF8.GetBytes(data);
            ms = new MemoryStream(buff);
            serializer = new DataContractSerializer(typeof(List<Genre>));
            List<Genre> genres = (List<Genre>)serializer.ReadObject(ms);
            Genres = new ObservableCollection<Genre>(genres);
            // get languages
            data = Utils.HttpGetAuth("http://catalog.varak.net/data/languages", "waritko", "Pojka8uj");
            buff = Encoding.UTF8.GetBytes(data);
            ms = new MemoryStream(buff);
            serializer = new DataContractSerializer(typeof(List<Language>));
            List<Language> languages = (List<Language>)serializer.ReadObject(ms);
            Languages = new ObservableCollection<Language>(languages);

            if (File.Exists("queue.xml"))
            {
                var rdr = File.OpenRead("queue.xml");
                serializer = new DataContractSerializer(typeof(List<Book>));
                List<Book> books = (List<Book>) serializer.ReadObject(rdr);
                Books = new ObservableCollection<Book>(books);
            }
            CurrentBook.Author = authors.First().ID;
            CurrentBook.Genre = Genres.First().ID;
            CurrentBook.Language = Languages.First().ID;
            Utils.Authors = Authors;
            Utils.Genres = Genres;
            Utils.Languages = Languages;
            InitializeComponent();
        }

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
        #endregion

        public ObservableCollection<Author> Authors
        {
            get
            {
                return _authors;
            }
            set
            {
                _authors = value;
                OnPropertyChanged("Authors");
            }
        }

        public ObservableCollection<Book> Books
        {
            get { return _books; }
            set
            {
                _books = value;
                OnPropertyChanged("Books");
            }
        }

        public Book CurrentBook
        {
            get { return _currentBook; }
            set
            {
                _currentBook = value;
                OnPropertyChanged("CurrentBook");
            }
        }

        public ObservableCollection<Language> Languages
        {
            get { return _languages; }
            set
            {
                _languages = value;
                OnPropertyChanged("Languages");
            }
        }

        public ObservableCollection<Genre> Genres
        {
            get { return _genres; }
            set
            {
                _genres = value;
                OnPropertyChanged("Genres");
            }
        }

        private void MainWindow_OnClosed(object sender, EventArgs e)
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(List<Book>));
            XmlWriter writer = new XmlTextWriter("queue.xml", UTF8Encoding.UTF8){Formatting = Formatting.Indented, IndentChar = ' ', Indentation = 4};
            serializer.WriteObject(writer, Books.ToList());
            writer.Close();
        }

        private void BtnAdd_OnClick(object sender, RoutedEventArgs e)
        {
            if (CurrentBook.File.Trim() != "" && CurrentBook.Name.Trim() != "")
            {
                CurrentBook.AuthorName = Authors.First(p => p.ID == CurrentBook.Author).DisplayName;
                Books.Add(CurrentBook);
                CurrentBook = new Book {Author = CurrentBook.Author, Language = CurrentBook.Language, Genre = CurrentBook.Genre};
            }
        }

        private void BtnOpenFile_OnClick(object sender, RoutedEventArgs e)
        {
            OpenFileDialog odf = new OpenFileDialog();
            odf.Filter = "EPUB books|*.epub|All Files|*.*";
            if (odf.ShowDialog() == true)
            {
                CurrentBook.File = odf.FileName;
            }
        }

        private void BtnUpload_OnClick(object sender, RoutedEventArgs e)
        {
            progressBar.Visibility = Visibility.Visible;
            progressBar.Maximum = Books.Count;
            progressBar.Minimum = 0;
            ThreadPool.QueueUserWorkItem(PerformUpload);
        }

        private void PerformUpload(Object stateInfo)
        {
            foreach (var book in Books)
            {
                NameValueCollection nvc = new NameValueCollection();
                nvc.Add("create", "Vytvořit");
                nvc.Add("name", book.Name);
                nvc.Add("author", book.Author.ToString());
                nvc.Add("genre", book.Genre.ToString());
                nvc.Add("language", book.Language.ToString());
                if (Utils.HttpUploadFile("http://catalog.varak.net/stanza/homepage/add?do=addForm-submit", book.File,
                                         "file", "application/epub+zip", nvc))
                {
                    book.IsUploaded = true;
                    Dispatcher.Invoke(new Action(() => progressBar.Value++));
                }
            }
            foreach (var book in Books.Where(p => p.IsUploaded).ToList())
            {
                Dispatcher.Invoke(new Action(() =>Books.Remove(book)));
            }
            Dispatcher.Invoke(new Action(() => progressBar.Visibility = Visibility.Hidden));
        }
    }
}

Zerion Mini Shell 1.0