1#![allow(proc_macro_derive_resolution_fallback)]
3
4#![crate_type = "lib"]
5
6#[macro_use]
7extern crate clap;
8extern crate config;
9
10extern crate rusqlite;
11extern crate time;
12extern crate uuid;
13
14pub mod mods;
15use mods::util as Util;
16use mods::models as Models;
17use mods::sql as Sql;
18use mods::capabilities as Capabilities;
19
20pub mod cc {
21 use Capabilities;
22 use Sql;
23 use Util;
24 use rusqlite::{Connection};
25
26 fn get_connection() -> Connection {
27 let settings: Util::Settings = Util::get_settings();
28 Sql::establish_connection(&settings.sqlite_connection_string)
29 }
30
31 pub fn duplicates() {
32 println!("Searching for duplicate files...");
33 Capabilities::find_duplicates(&get_connection());
34 }
35
36 pub fn hash(root_directory: &str) {
37 println!("Hashing...");
38 Capabilities::start_hashing(&root_directory, &get_connection());
39 }
40
41 pub fn orphans() {
42 println!("Removing orphans from database...");
43 Capabilities::delete_missing_listings(&mut get_connection());
44 }
45
46 pub fn setup() {
47 println!("Setting up database...");
48 match Capabilities::setup(&get_connection()) {
49 Ok(_x) => {
50 println!("Database setup successfully.");
51 },
52 Err(_err) => {
53 println!("Error when trying to setup database.");
54 }
55 };
56 std::process::exit(0);
57 }
58
59 pub fn tag(listing_id: &str, tags: Vec<&str>) {
60 for tag in tags {
61 Capabilities::tag_listing(&get_connection(), &listing_id, tag);
62 }
63 println!("Tag(s) applied successfully!");
64 std::process::exit(0);
65 }
66
67 pub fn delete_tag(tag_id: &str) {
68 Capabilities::delete_tag(&mut get_connection(), tag_id);
69 }
70
71 pub fn new_tag(tag: &str) {
72 Capabilities::create_tag(&get_connection(), tag);
73 }
74
75 pub fn delete_tag_listing(listing_tag_id: &str) {
76 Capabilities::delete_listing_tag(&get_connection(), listing_tag_id);
77 }
78}