MCPcopy Create free account
hub / github.com/Moosync/Moosync / start_scan

Method start_scan

src-tauri/file_scanner/src/scanner.rs:71–149  ·  view source on GitHub ↗
(
        &self,
        dir: String,
        thumbnail_dir: String,
        artist_split: String,
        scan_threads: f64,
        song_tx: Sender<(Option<String>, Vec<Song>)>,
        playlist_tx:

Source from the content-addressed store, hash-verified

69 )
70 )]
71 pub fn start_scan(
72 &self,
73 dir: String,
74 thumbnail_dir: String,
75 artist_split: String,
76 scan_threads: f64,
77 song_tx: Sender<(Option<String>, Vec<Song>)>,
78 playlist_tx: Sender<Vec<QueryablePlaylist>>,
79 ) -> Result<()> {
80 let mut state = self.state.lock().unwrap();
81 if *state != ScanState::UNDEFINED {
82 *state = ScanState::QUEUED;
83 return Ok(());
84 }
85
86 *state = ScanState::SCANNING;
87 let (_progress_tx, _progress_rx) = mpsc::channel::<u8>();
88
89 let threads = scan_threads;
90
91 let cpus = num_cpus::get();
92 let thread_count = if threads <= 0f64 || threads as usize > cpus {
93 cpus
94 } else {
95 threads as usize
96 };
97
98 let mut song_pool = ThreadPool::new(thread_count);
99
100 let thumbnail_dir = PathBuf::from_str(thumbnail_dir.as_str()).unwrap();
101 let dir = PathBuf::from_str(dir.as_str()).unwrap();
102
103 let song_scanner = SongScanner::new(
104 dir.clone(),
105 &mut song_pool,
106 thumbnail_dir.clone(),
107 artist_split,
108 );
109
110 let (tx_song, rx_song) = mpsc::channel::<(Option<String>, Result<Song>)>();
111 let (tx_playlist, rx_playlist) = mpsc::channel::<Result<QueryablePlaylist>>();
112
113 song_scanner.start(tx_song.clone())?;
114 let playlist_scanner = PlaylistScanner::new(dir, thumbnail_dir, song_scanner);
115 playlist_scanner.start(tx_song, tx_playlist)?;
116
117 for item in rx_playlist {
118 match item {
119 Ok(playlist) => {
120 // let _ = database.create_playlist(playlist);
121 playlist_tx.send(vec![playlist]).unwrap();
122 }
123 Err(e) => tracing::error!("Scan playlist error: {:}", e),
124 }
125 }
126
127 for item in rx_song {
128 match item.1 {

Callers 1

start_scan_innerFunction · 0.45

Calls 3

cloneMethod · 0.80
sendMethod · 0.80
startMethod · 0.45

Tested by

no test coverage detected