Re-factored duplicated code

This commit is contained in:
Antoine Gersant 2020-01-19 01:01:43 -08:00
parent 2b30307488
commit 028633d0e6

View file

@ -341,43 +341,29 @@ pub fn populate(db: &DB) -> Result<()> {
Ok(()) Ok(())
} }
fn insert_songs(receiver: Receiver<NewSong>, db: DB) { fn flush_directories(db: &DB, entries: &Vec<NewDirectory>) {
let mut new_entries = Vec::new(); if db.connect()
new_entries.reserve_exact(INDEX_BUILDING_INSERT_BUFFER_SIZE); .and_then(|connection|{
diesel::insert_into(directories::table)
loop { .values(entries)
match receiver.recv() { .execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822
Ok(s) => { .map_err(Error::new)
new_entries.push(s); })
if new_entries.len() >= INDEX_BUILDING_INSERT_BUFFER_SIZE { .is_err() {
if db.connect() error!("Could not insert new directories in database");
.and_then(|connection|{
diesel::insert_into(songs::table)
.values(&new_entries)
.execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822
.map_err(Error::new)
})
.is_err() {
error!("Could not insert new songs in database");
}
new_entries.clear();
}
},
Err(_) => break,
}
} }
}
if new_entries.len() > 0 { fn flush_songs(db: &DB, entries: &Vec<NewSong>) {
if db.connect() if db.connect()
.and_then(|connection|{ .and_then(|connection|{
diesel::insert_into(songs::table) diesel::insert_into(songs::table)
.values(&new_entries) .values(entries)
.execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822 .execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822
.map_err(Error::new) .map_err(Error::new)
}) })
.is_err() { .is_err() {
error!("Could not insert new songs in database"); error!("Could not insert new songs in database");
}
} }
} }
@ -390,16 +376,7 @@ fn insert_directories(receiver: Receiver<NewDirectory>, db: DB) {
Ok(s) => { Ok(s) => {
new_entries.push(s); new_entries.push(s);
if new_entries.len() >= INDEX_BUILDING_INSERT_BUFFER_SIZE { if new_entries.len() >= INDEX_BUILDING_INSERT_BUFFER_SIZE {
if db.connect() flush_directories(&db, &new_entries);
.and_then(|connection|{
diesel::insert_into(directories::table)
.values(&new_entries)
.execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822
.map_err(Error::new)
})
.is_err() {
error!("Could not insert new directories in database");
}
new_entries.clear(); new_entries.clear();
} }
}, },
@ -408,15 +385,28 @@ fn insert_directories(receiver: Receiver<NewDirectory>, db: DB) {
} }
if new_entries.len() > 0 { if new_entries.len() > 0 {
if db.connect() flush_directories(&db, &new_entries);
.and_then(|connection|{ }
diesel::insert_into(directories::table) }
.values(&new_entries)
.execute(&*connection) // TODO https://github.com/diesel-rs/diesel/issues/1822 fn insert_songs(receiver: Receiver<NewSong>, db: DB) {
.map_err(Error::new) let mut new_entries = Vec::new();
}) new_entries.reserve_exact(INDEX_BUILDING_INSERT_BUFFER_SIZE);
.is_err() {
error!("Could not insert new directories in database"); loop {
} match receiver.recv() {
Ok(s) => {
new_entries.push(s);
if new_entries.len() >= INDEX_BUILDING_INSERT_BUFFER_SIZE {
flush_songs(&db, &new_entries);
new_entries.clear();
}
},
Err(_) => break,
}
}
if new_entries.len() > 0 {
flush_songs(&db, &new_entries);
} }
} }