Code reorganized.
This commit is contained in:
parent
3f5d790d3c
commit
a9ef4d2aef
1 changed files with 45 additions and 40 deletions
85
src/main.rs
85
src/main.rs
|
@ -1,6 +1,6 @@
|
||||||
mod pocketbook;
|
mod pocketbook;
|
||||||
|
|
||||||
use rusqlite::{named_params, Connection, Result, NO_PARAMS};
|
use rusqlite::{named_params, Connection, Result, Transaction, NO_PARAMS};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
|
@ -111,17 +111,14 @@ struct BookEntry {
|
||||||
filepath: String,
|
filepath: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn fix_firstauthor(tx: &Transaction) -> i32 {
|
||||||
let mut authors_fixed = 0;
|
let mut authors_fixed = 0;
|
||||||
|
|
||||||
let mut conn = Connection::open("/mnt/ext1/system/explorer-3/explorer-3.db").unwrap();
|
// Get book ids from entries where we have something like "firstname lastname" in author
|
||||||
let tx = conn.transaction().unwrap();
|
// but no "lastname, firstname" in fistauthor
|
||||||
{
|
// Get also book ids from the special case where we have multiple authors (separated by ", " in authors)
|
||||||
// Get book ids from entries where we have something like "firstname lastname" in author
|
// but no ampersand ("&") in firstauthor
|
||||||
// but no "lastname, firstname" in fistauthor
|
let mut stmt = tx.prepare(r"
|
||||||
// Get also book ids from the special case where we have multiple authors (separated by ", " in authors)
|
|
||||||
// but no ampersand ("&") in firstauthor
|
|
||||||
let mut stmt = tx.prepare(r"
|
|
||||||
SELECT files.book_id, folders.name, files.filename
|
SELECT files.book_id, folders.name, files.filename
|
||||||
FROM files INNER JOIN folders
|
FROM files INNER JOIN folders
|
||||||
ON files.folder_id = folders.id
|
ON files.folder_id = folders.id
|
||||||
|
@ -134,44 +131,52 @@ fn main() {
|
||||||
AND files.storageid = 1
|
AND files.storageid = 1
|
||||||
;").unwrap();
|
;").unwrap();
|
||||||
|
|
||||||
let mut rows = stmt.query(NO_PARAMS).unwrap();
|
let mut rows = stmt.query(NO_PARAMS).unwrap();
|
||||||
let mut bookentries = Vec::new();
|
let mut bookentries = Vec::new();
|
||||||
|
|
||||||
while let Some(row) = rows.next().unwrap() {
|
while let Some(row) = rows.next().unwrap() {
|
||||||
let book_id: i32 = row.get(0).unwrap();
|
let book_id: i32 = row.get(0).unwrap();
|
||||||
let prefix: String = row.get(1).unwrap();
|
let prefix: String = row.get(1).unwrap();
|
||||||
let filename: String = row.get(2).unwrap();
|
let filename: String = row.get(2).unwrap();
|
||||||
let filepath = format!("{}/{}", prefix, filename);
|
let filepath = format!("{}/{}", prefix, filename);
|
||||||
bookentries.push(BookEntry {
|
bookentries.push(BookEntry {
|
||||||
id: book_id,
|
id: book_id,
|
||||||
filepath,
|
filepath,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for entry in bookentries {
|
for entry in bookentries {
|
||||||
let file = File::open(entry.filepath.as_str());
|
let file = File::open(entry.filepath.as_str());
|
||||||
let file = match file {
|
let file = match file {
|
||||||
Err(_) => continue,
|
Err(_) => continue,
|
||||||
Ok(file) => file,
|
Ok(file) => file,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut archive = ZipArchive::new(BufReader::new(file)).unwrap();
|
let mut archive = ZipArchive::new(BufReader::new(file)).unwrap();
|
||||||
|
|
||||||
let container = archive.by_name("META-INF/container.xml").unwrap();
|
let container = archive.by_name("META-INF/container.xml").unwrap();
|
||||||
|
|
||||||
if let Some(opf_file) = get_root_file(container).unwrap() {
|
if let Some(opf_file) = get_root_file(container).unwrap() {
|
||||||
let opf = archive.by_name(opf_file.as_str()).unwrap();
|
let opf = archive.by_name(opf_file.as_str()).unwrap();
|
||||||
if let Some(file_as) = get_attribute_file_as(opf) {
|
if let Some(file_as) = get_attribute_file_as(opf) {
|
||||||
let mut stmt = tx
|
let mut stmt = tx
|
||||||
.prepare("UPDATE books_impl SET firstauthor = :file_as WHERE id = :book_id")
|
.prepare("UPDATE books_impl SET firstauthor = :file_as WHERE id = :book_id")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
stmt.execute_named(named_params![":file_as": file_as, ":book_id": entry.id])
|
stmt.execute_named(named_params![":file_as": file_as, ":book_id": entry.id])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
authors_fixed = authors_fixed + 1;
|
authors_fixed = authors_fixed + 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
authors_fixed
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut conn = Connection::open("/mnt/ext1/system/explorer-3/explorer-3.db").unwrap();
|
||||||
|
|
||||||
|
let tx = conn.transaction().unwrap();
|
||||||
|
let authors_fixed = fix_firstauthor(&tx);
|
||||||
tx.commit().unwrap();
|
tx.commit().unwrap();
|
||||||
|
|
||||||
if cfg!(target_arch = "arm") {
|
if cfg!(target_arch = "arm") {
|
||||||
|
|
Loading…
Reference in a new issue