File size: 4,329 Bytes
e26fba6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using BlueTube.Viewer.Properties;
using System.Collections.Specialized;
using System.Reflection;
using System.IO;
using System.Windows.Forms;
using Ionic.Zip;
using System.Diagnostics;

namespace BlueTube.Viewer
{
    public class UpdaterService
    {
        static UpdaterService()
        {
           
        }

        public Version GetLatestAppVersion()
        {
            try
            {
                string result;
                if (GetResource(UrlConstants.AppVersionCheckUrl, out result))
                {
                    var version = new Version(result);
                    return version;
                }
            }

            catch { }
            return Constants.AppVersion;
        }

        public bool DownloadAppUpdate()
        {

            var file = Path.Combine(Application.StartupPath, "_app.zip");
            if (File.Exists(file))
                File.Delete(file);
            try
            {
                var version = GetLatestAppVersion();
                if (version > Constants.AppVersion)
                {
                    if (Download(UrlConstants.AppDownloadUrl, file))
                    {
                        using (ZipFile zip1 = ZipFile.Read(file))
                        {
                            if (Directory.Exists(Constants.UpdaterFolder))
                                Directory.Delete(Constants.UpdaterFolder, true);
                            Directory.CreateDirectory(Constants.UpdaterFolder);
                            zip1.ExtractAll(Constants.UpdaterFolder, ExtractExistingFileAction.OverwriteSilently);
                            var path = Path.Combine(Constants.UpdaterFolder, Constants.AppExecutableName);
                            return File.Exists(path) && Constants.AppVersion < AssemblyName.GetAssemblyName(path).Version;
                        }
                    }

                }
            }
            catch { }
            finally
            {
                try
                {
                    if (File.Exists(file))
                        File.Delete(file);
                }
                catch { }
            }
            return false; 
           
        }

        public bool ExecuteUpdater()
        {
            try
            {
                var path = Path.Combine(Constants.UpdaterFolder, Constants.AppExecutableName);
                if(File.Exists(path) && Constants.AppVersion < AssemblyName.GetAssemblyName(path).Version)
                {
                    var process = Process.Start(Constants.UpdaterProgram);
                    return true;
                }
            }
            catch { }
            return false;
        } 

        private bool Download(string url, string filePath)
        {
            using (var client = new WebClient())
            {
                try
                {
                    url = url + "?uid=" + Constants.UniqueId.ToString();
                    client.DownloadFile(url, filePath);
                }
                catch { return false; }
            }
            return true;
        }

        private bool PostResource(string url, NameValueCollection data, out string result)
        {
            result = null;
            try
            {
                using (var client = new WebClient())
                {
                    data.Add("uid", Constants.UniqueId.ToString());
                    byte[] responsebytes = client.UploadValues(url, "POST", data);
                    result = Encoding.UTF8.GetString(responsebytes);
                }
            }
            catch { return false; }
            return true;
        }

        private bool GetResource(string url, out string result)
        {
            result = null;
            try
            {
                url = url + "?uid=" + Constants.UniqueId.ToString();
                using (var client = new WebClient())
                {
                    result= client.DownloadString(url);
                }
            }
            catch { return false; }
            return true;
        }
    }
}