11use anyhow:: { bail, Result } ;
22use log:: { debug, error, info} ;
33use rayon:: iter:: { IntoParallelRefIterator , ParallelIterator } ;
4- use std:: { collections:: HashMap , path:: Path , time:: Instant } ;
4+ use std:: {
5+ collections:: { HashMap , HashSet } ,
6+ path:: Path ,
7+ time:: SystemTime ,
8+ } ;
59
610use crate :: {
7- card:: Card , cli:: LanguageCode , localizer:: Localizer , scraper:: OpTcgScraper , storage:: DataStore ,
11+ card:: Card ,
12+ cli:: LanguageCode ,
13+ localizer:: Localizer ,
14+ scraper:: OpTcgScraper ,
15+ storage:: { DataStore , PullMode , VegaMetaStats } ,
816 utils,
917} ;
1018
@@ -23,7 +31,7 @@ pub fn pull_cards(
2331 let store = DataStore :: new ( output_dir, language) ;
2432
2533 eprintln ! ( "fetching all cards for pack {pack_id}..." ) ;
26- let start = Instant :: now ( ) ;
34+ let start = SystemTime :: now ( ) ;
2735
2836 let cards = scraper. fetch_cards ( pack_id) ?;
2937 if cards. is_empty ( ) {
@@ -58,79 +66,24 @@ pub fn pull_cards(
5866 } ) ;
5967 }
6068
61- let duration = start. elapsed ( ) ;
69+ println ! (
70+ "downloaded cards for pack {} to: {}" ,
71+ pack_id,
72+ output_dir. display( )
73+ ) ;
74+
75+ let duration = start. elapsed ( ) ?;
6276
6377 info ! ( "list_cards took: {:?}" , duration) ;
78+
79+ store. write_vega_stats ( VegaMetaStats :: new (
80+ language,
81+ start. into ( ) ,
82+ duration. as_millis ( ) . try_into ( ) ?,
83+ with_images,
84+ PullMode :: SinglePack ,
85+ HashSet :: from ( [ pack_id. to_owned ( ) ] ) ,
86+ ) ) ?;
87+
6488 Ok ( ( ) )
6589}
66-
67- // pub fn download_images_fast(
68- // language: LanguageCode,
69- // cards: Vec<Card>,
70- // output_dir: &Path,
71- // user_agent: Option<String>,
72- // ) -> Result<()> {
73- // let localizer = Localizer::load(language)?;
74- // let scraper = OpTcgScraper::new(localizer, user_agent);
75- //
76- // if output_dir.exists() {
77- // error!("output directory already `{}` exists", output_dir.display());
78- // bail!(
79- // "cannot create directory `{}` to store images because it already exists",
80- // output_dir.display()
81- // );
82- // }
83- //
84- // match fs::create_dir_all(output_dir) {
85- // Ok(_) => info!("successfully created `{}`", output_dir.display()),
86- // Err(e) => bail!("failed to create `{}`: {}", output_dir.display(), e),
87- // }
88- //
89- // info!("downloading images...");
90- // let start = Instant::now();
91- //
92- // let mut handles = vec![];
93- //
94- // let completed_count = Arc::new(AtomicUsize::new(0));
95- // let all_cards = cards.len();
96- //
97- // let scraper = Arc::new(scraper);
98- // let output_dir = output_dir.to_path_buf();
99- //
100- // for card in cards.into_iter() {
101- // let scraper = Arc::clone(&scraper);
102- // let output_dir = output_dir.clone();
103- // let completed_count = Arc::clone(&completed_count);
104- //
105- // let handle = thread::spawn(move || {
106- // let img_url = card.img_url.clone();
107- // let img_path = download_card_image(&output_dir, &scraper, card).unwrap();
108- // let current = completed_count.fetch_add(1, Ordering::SeqCst) + 1;
109- //
110- // eprintln!(
111- // "[{}/{}] succesfully saved image `{}` to `{}`",
112- // current,
113- // all_cards,
114- // img_url,
115- // img_path.display()
116- // );
117- //
118- // debug!(
119- // "[{}/{}] saved image `{}` to `{}`",
120- // current,
121- // all_cards,
122- // img_url,
123- // img_path.display()
124- // );
125- // });
126- // handles.push(handle);
127- // }
128- //
129- // for handle in handles {
130- // handle.join().unwrap();
131- // }
132- //
133- // let duration = start.elapsed();
134- // info!("downloading images took: {:?}", duration);
135- // Ok(())
136- // }
0 commit comments