%PDF- %PDF-
Direktori : /www/varak.net/catalog.varak.net/bookUploader/ |
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)); } } }