1- using System . Net . Http ;
1+ using System . IO ;
2+ using System . IO . Compression ;
3+ using System . Net . Http ;
24using System . Threading . Tasks ;
35
46namespace Core . Services
57{
68 public interface IWebService
79 {
810 Task < string > CheckForLatestRelease ( ) ;
11+ Task < string > DownloadLatestRelease ( ) ;
912 }
1013
1114 public class WebService : IWebService
1215 {
1316 IDataService _db ;
1417 static HttpClient client = new HttpClient ( ) ;
18+ static string _repoUrl = "https://api.github.com/repos/blogifierdotnet/Blogifier/releases/latest" ;
1519
1620 public WebService ( IDataService db )
1721 {
@@ -27,9 +31,8 @@ public WebService(IDataService db)
2731 public async Task < string > CheckForLatestRelease ( )
2832 {
2933 string result = "" ;
30- var url = "https://api.github.com/repos/blogifierdotnet/Blogifier/releases/latest" ;
34+ HttpResponseMessage response = await client . GetAsync ( _repoUrl ) ;
3135
32- HttpResponseMessage response = await client . GetAsync ( url ) ;
3336 if ( response . IsSuccessStatusCode )
3437 {
3538 var repo = await response . Content . ReadAsAsync < Data . Github . Repository > ( ) ;
@@ -48,5 +51,45 @@ public async Task<string> CheckForLatestRelease()
4851
4952 return await Task . FromResult ( result ) ;
5053 }
54+
55+ public async Task < string > DownloadLatestRelease ( )
56+ {
57+ var uloadDir = "_upgrade" ;
58+ var msg = "" ;
59+ try
60+ {
61+ HttpResponseMessage response = await client . GetAsync ( _repoUrl ) ;
62+ if ( response . IsSuccessStatusCode )
63+ {
64+ var repo = await response . Content . ReadAsAsync < Data . Github . Repository > ( ) ;
65+ var zipUrl = repo . assets [ 0 ] . browser_download_url ;
66+ var zipPath = $ "{ uloadDir } { Path . DirectorySeparatorChar . ToString ( ) } { repo . tag_name } .zip";
67+
68+ using ( var client = new HttpClient ( ) )
69+ {
70+ using ( var result = await client . GetAsync ( zipUrl ) )
71+ {
72+ if ( result . IsSuccessStatusCode )
73+ {
74+ var zipBites = await result . Content . ReadAsByteArrayAsync ( ) ;
75+
76+ if ( ! Directory . Exists ( uloadDir ) )
77+ Directory . CreateDirectory ( uloadDir ) ;
78+
79+ File . WriteAllBytes ( zipPath , zipBites ) ;
80+
81+ ZipFile . ExtractToDirectory ( zipPath , uloadDir ) ;
82+ }
83+ }
84+ }
85+ }
86+ }
87+ catch ( System . Exception ex )
88+ {
89+ msg = ex . Message ;
90+ }
91+
92+ return await Task . FromResult ( msg ) ;
93+ }
5194 }
5295}
0 commit comments