1- use crate :: utils:: { pretty_dates, request, write_json_to_file} ;
1+ use crate :: utils:: { bytes_to_best_size , pretty_dates, request, write_json_to_file} ;
22use serde:: { Deserialize , Deserializer , Serialize } ;
33use serde_json:: Value ;
44use std:: { path:: PathBuf , vec} ;
@@ -11,6 +11,7 @@ pub struct DownloadData {
1111 pub html_url : String ,
1212 pub body : String ,
1313 pub assets : Vec < Asset > ,
14+ pub downloads : i64 ,
1415}
1516
1617impl DownloadData {
@@ -30,7 +31,24 @@ impl DownloadData {
3031 html_url,
3132 body,
3233 assets : Vec :: new ( ) ,
34+ downloads : 0 ,
35+ }
36+ }
37+
38+ pub fn display ( & self ) {
39+ println ! ( "{} - {:>10}" , self . name. to_ascii_uppercase( ) , self . tag) ;
40+ if self . body != "" {
41+ println ! ( " {}" , self . body) ;
42+ }
43+ println ! ( " {:<14}: {}" , "HTML URL" , self . html_url) ;
44+ println ! ( " {:<14}: {}" , "Downloads" , self . downloads) ;
45+ println ! ( " {:<14}: {}" , "Created at" , self . created_at) ;
46+ println ! ( " {:<14}: {}" , "Published at" , self . published_at) ;
47+ println ! ( " {:<14}: {}" , "ASSETS" , self . assets. len( ) ) ;
48+ for asset in & self . assets {
49+ asset. display ( ) ;
3350 }
51+ println ! ( ) ;
3452 }
3553}
3654
@@ -61,6 +79,19 @@ impl Asset {
6179 updated_at,
6280 }
6381 }
82+
83+ pub fn display ( & self ) {
84+ println ! (
85+ " {:<14}: {}" ,
86+ self . name. to_uppercase( ) ,
87+ bytes_to_best_size( self . size)
88+ ) ;
89+ println ! ( " {:<14}: {}" , "Download URL" , self . download_url) ;
90+ println ! ( " {:<14}: {}" , "Downloads" , self . downloads) ;
91+ println ! ( " {:<14}: {}" , "Created at" , self . created_at) ;
92+ println ! ( " {:<14}: {}" , "Updated at" , self . updated_at) ;
93+ println ! ( )
94+ }
6495}
6596
6697pub fn downloads_command (
@@ -86,13 +117,16 @@ pub fn downloads_command(
86117 std:: process:: exit ( 0 )
87118 }
88119
89- let simple_data = simplify_json_release_data ( & json) ;
90- println ! ( "amount: {}" , simple_data. len( ) ) ;
91-
92120 if all && !display {
93121 println ! ( "{:#?}" , json) ;
94122 } else if all && display {
95- // show the json without all, but in pretty format
123+ let simple_data = simplify_json_release_data ( & json) ;
124+ let mut download_count = 0 ;
125+ for release in simple_data {
126+ release. display ( ) ;
127+ download_count += release. downloads ;
128+ }
129+ println ! ( "Total Downloads: {}" , download_count) ;
96130 } else if !all && !display {
97131 // if individual, get latest download url, and sum all item count
98132 // {download_url: Vec<(String name, String link for each asset of latest)>, html_url: String, download_count: i32}
@@ -127,8 +161,8 @@ fn simplify_json_release_data(json: &Value) -> Vec<DownloadData> {
127161 let mut download = DownloadData :: new (
128162 name. to_string ( ) ,
129163 tag. to_string ( ) ,
130- published_at . to_string ( ) ,
131- created_at . to_string ( ) ,
164+ pretty_dates ( & published_at ) ,
165+ pretty_dates ( & created_at ) ,
132166 html_url. to_string ( ) ,
133167 body. to_string ( ) ,
134168 ) ;
@@ -146,13 +180,14 @@ fn simplify_json_release_data(json: &Value) -> Vec<DownloadData> {
146180
147181 let asset = Asset :: new (
148182 download_url. to_string ( ) ,
149- created_at . to_string ( ) ,
183+ pretty_dates ( & created_at ) ,
150184 downloads. to_owned ( ) ,
151185 name. to_string ( ) ,
152186 size. to_owned ( ) ,
153- updated_at . to_string ( ) ,
187+ pretty_dates ( & updated_at ) ,
154188 ) ;
155189
190+ download. downloads += downloads;
156191 download. assets . push ( asset) ;
157192 }
158193
0 commit comments