%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));
}
}
}