using System; using System.Collections.Generic; using System.Text; using System.Net; using MovieFinder.Client.Properties; using System.Collections.Specialized; using System.Reflection; using System.IO; using System.Windows.Forms; using Ionic.Zip; using System.Diagnostics; namespace MovieFinder.Client { public class UpdaterService { static UpdaterService() { } public int GetLatestMovieDatabaseVersion() { try { if (Settings.Default.MovieDBVersionCheckedWhen.AddDays(1) < DateTime.Now) { string result; if (GetResource(UrlConstants.MovieDatabaseVersionCheckUrl, out result)) { var version = Program.MovieDBVersion; Int32.TryParse(result.Trim(), out version); return version; } } } catch { } return Program.MovieDBVersion; } public Version GetLatestAppVersion() { try { if (Settings.Default.AppVersionCheckedWhen.AddDays(1) < DateTime.Now) { string result; if (GetResource(UrlConstants.AppVersionCheckUrl, out result)) { var version = new Version(result); return version; } } } catch { } return Assembly.GetExecutingAssembly().GetName().Version; } public bool DownloadMovieDatabase() { try { if (Directory.Exists(Constants.TempFolder)) Directory.Delete(Constants.TempFolder, true); Directory.CreateDirectory(Constants.TempFolder); var file = Path.Combine(Constants.TempFolder, "_db.zip"); var version = GetLatestMovieDatabaseVersion(); if (version > Program.MovieDBVersion) { if (Download(UrlConstants.MovieDatabaseDownloadUrl, file)) { using (ZipFile zip1 = ZipFile.Read(file)) { foreach (ZipEntry e in zip1.Entries) { e.Extract(Constants.TempFolder, ExtractExistingFileAction.OverwriteSilently); File.Copy(Path.Combine(Constants.TempFolder, e.FileName), Constants.MovieDatabaseFilePath, true); } return true; } } } } catch {} finally { try { if (Directory.Exists(Constants.TempFolder)) Directory.Delete(Constants.TempFolder, true); } catch { } } return false; } 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.LatestDownloadedAppVersion) { 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); Settings.Default.LatestDownloadedAppVersion = version.ToString(); Settings.Default.Save(); return true; } } } } catch { } finally { try { if (File.Exists(file)) File.Delete(file); } catch { } } return false; } public bool ExecuteUpdater() { try { if (Constants.LatestDownloadedAppVersion > Assembly.GetExecutingAssembly().GetName().Version) { if (File.Exists(Constants.UpdaterProgram)) { var process = Process.Start(Constants.UpdaterProgram); return true; } } } catch { } return false; } private bool Download(string url, string filePath) { using (var client = new WebClient()) { try { 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()) { 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 { using (var client = new WebClient()) { result= client.DownloadString(url); } } catch { return false; } return true; } } }