Add help window, adjust window sizes, add error handling for when Transit is down
[SnapShooter.git] / SnapShooter / MainWindow.xaml.cs
1 using System;
2 using System.IO;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Net;
6 using System.Text;
7 using System.Net;
8 using System.Windows;
9 using System.Windows.Controls;
10 using System.Windows.Data;
11 using System.Windows.Documents;
12 using System.Windows.Input;
13 using System.Windows.Media;
14 using System.Windows.Media.Imaging;
15 using System.Windows.Navigation;
16 using System.Windows.Shapes;
17 using System.Windows.Threading;
18 using Microsoft.WindowsAPICodePack.Taskbar;
19 using Microsoft.WindowsAPICodePack.Shell;
20 using DominionOfAwesome;
21
22 namespace SnapShooter {
23     /// <summary>
24     /// Interaction logic for MainWindow.xaml
25     /// </summary>
26     public partial class MainWindow : Window {
27         DispatcherTimer dt;
28         StockIcon foundstuff;
29
30         public MainWindow() {
31             InitializeComponent();
32             dt = new DispatcherTimer();
33             foundstuff = new StockIcon(StockIconIdentifier.Info, StockIconSizes.ShellSize, false, false);
34         }
35
36         private void Window_Loaded(object sender, RoutedEventArgs e) {
37             dt.Interval = new TimeSpan(0, 0, 1);
38             dt.Tick += new EventHandler(dt_Tick);
39             dt.Start();
40         }
41
42         void dt_Tick(object sender, EventArgs e) {
43             if (Clipboard.ContainsImage()) {
44                 TaskbarManager.Instance.SetOverlayIcon(foundstuff.Icon, "Found Image");
45
46                 string filename = System.IO.Path.Combine(
47                     Environment.GetEnvironmentVariable("TEMP"),
48                     "SnapShoot.jpg"
49                 );
50
51                 Action localCleanup = new Action(delegate {
52                     File.Delete(filename);
53                     TaskbarManager.Instance.SetOverlayIcon(null, "");
54                 });
55
56                 BitmapSource b = Clipboard.GetImage();
57                 FileStream s = new FileStream(filename, FileMode.Create);
58                 JpegBitmapEncoder j = new JpegBitmapEncoder();
59                 j.QualityLevel = 85;
60                 j.Frames.Add(BitmapFrame.Create(b));
61                 j.Save(s);
62                 s.Close();
63
64                 Transit t = new Transit();
65                 try {
66                     t.Create();
67                 } catch (WebException we) {
68                     MessageBox.Show("Could not connect to Transit: " + we.Message + "\nThe Clipboard has been cleared.", "FFFFFFFUUUUUUUUUUUUUU-");
69                     Clipboard.Clear();
70                     localCleanup();
71                     return;
72                 }
73
74                 t.TransferProgress += delegate(object sender2, TransferProgressArgs tpe) {
75                     TaskbarManager.Instance.SetProgressValue((int)tpe.PercentComplete, 100);
76                 };
77                 t.TransferComplete += delegate {
78                     TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
79                     Dispatcher.Invoke(new Action(delegate {
80                         Clipboard.SetText(t.Url);
81                         localCleanup();
82
83                         SnapShotItem i = new SnapShotItem();
84                         i.TransitURL = t.Url;
85                         SnapShots.Items.Add(i);
86                     }), null);
87                 };
88                 t.UploadAsync(filename);
89
90                 Clipboard.Clear();
91             }
92         }
93
94         private void Enabled_Checked(object sender, RoutedEventArgs e) {
95             if (dt == null) return;
96
97             dt.Start();
98         }
99
100         private void Enabled_Unchecked(object sender, RoutedEventArgs e) {
101             if (dt == null) return;
102
103             dt.Stop();
104         }
105
106         private void Help_Click(object sender, RoutedEventArgs e) {
107             HelpWindow helpWindow = new HelpWindow();
108             helpWindow.ShowDialog();
109         }
110     }
111 }