resume and torrent parsing done
This commit is contained in:
parent
38320773a5
commit
dc5e75587f
1 changed files with 64 additions and 2 deletions
66
src/main.rs
66
src/main.rs
|
|
@ -1,4 +1,5 @@
|
||||||
use std::{fs::{self, DirEntry}, path::Path};
|
use std::{fs::{self, DirEntry}, path::Path};
|
||||||
|
use bencode::decode;
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
|
|
||||||
|
|
@ -7,7 +8,7 @@ mod bencode;
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
enum Command {
|
enum Command {
|
||||||
Index {
|
Index {
|
||||||
#[arg(short='p', long, default_value="torman.db", help="path to transmission dir with torrents and resume")]
|
#[arg(short='p', long, default_value="torman.db", help="path to transmission dir with \"torrents\" and \"resume\" dirs")]
|
||||||
path: String
|
path: String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +52,68 @@ fn index(db: Connection, path: &String) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
println!("{}", hash);
|
// parse the resume file
|
||||||
|
let (resume, _) = {
|
||||||
|
let resume_data = match fs::read(entry.path()) {
|
||||||
|
Ok(data) => data,
|
||||||
|
Err(_) => {
|
||||||
|
eprintln!("failed to read {} resume file", hash);
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
match decode(&resume_data) {
|
||||||
|
Ok(value) => value,
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("failed to parse {} resume file: {:#?}", hash, e);
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// parse the torrent file
|
||||||
|
let torrent_path = {
|
||||||
|
let mut torrent_name = hash.to_owned();
|
||||||
|
torrent_name.push_str(".torrent");
|
||||||
|
|
||||||
|
Path::new(path).join("torrents").join(torrent_name)
|
||||||
|
};
|
||||||
|
|
||||||
|
let (torrent, _) = {
|
||||||
|
let torrent_data = match fs::read(torrent_path) {
|
||||||
|
Ok(data) => data,
|
||||||
|
Err(_) => {
|
||||||
|
eprintln!("failed to read {} torrent file", hash);
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
match decode(&torrent_data) {
|
||||||
|
Ok(value) => value,
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("failed to parse {} torrent file: {:#?}", hash, e);
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// make table row
|
||||||
|
let hash = hash;
|
||||||
|
let name = resume.get_string("name");
|
||||||
|
let destination = resume.get_string("destination");
|
||||||
|
let downloaded = resume.get_integer("downloaded");
|
||||||
|
let uploaded = resume.get_integer("uploaded");
|
||||||
|
|
||||||
|
let announce = torrent.get_string("announce");
|
||||||
|
let comment = torrent.get_string("comment");
|
||||||
|
let created_by = torrent.get_string("created_by");
|
||||||
|
let creation_date = torrent.get_integer("creation_date");
|
||||||
|
let publisher = torrent.get_string("publisher");
|
||||||
|
let publisher_url = torrent.get_string("publisher-url");
|
||||||
|
|
||||||
|
dbg!(hash, name, destination, downloaded, uploaded, announce, comment, created_by, creation_date, publisher, publisher_url);
|
||||||
|
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue