1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// suppress warnings for issue #50504 <https://github.com/rust-lang/rust/issues/50504>
#![allow(proc_macro_derive_resolution_fallback)]

#![crate_type = "lib"]

#[macro_use]
extern crate clap;
extern crate config;

#[macro_use]
extern crate diesel;

extern crate uuid;

use clap::{Arg, App, SubCommand};

pub mod schema;
use ::schema as Schema;

pub mod mods;
use mods::util as Util;
use mods::models as Models;
use mods::sql as Sql;
use mods::capabilities as Capabilities;

pub mod cc {
    use Capabilities;
    use Sql;
    use Util;
    use diesel::{PgConnection};

    fn get_connection() -> PgConnection {
        let settings: Util::Settings = Util::get_settings();
        Sql::establish_connection(&settings.pg_connection_string)
    }

    pub fn duplicates() {
        println!("Searching for duplicate files...");
        Capabilities::find_duplicates(&get_connection());
    }

    pub fn hash(root_directory: &str) {
        println!("Hashing...");
        Capabilities::start_hashing(&root_directory, &get_connection());
    }

    pub fn orphans() {
        println!("Removing orphans from database...");
        Capabilities::delete_missing_listings(&get_connection());
    }

    pub fn tag(listing_id: &str, tags: Vec<&str>) {
        for tag in tags {
            Capabilities::tag_listing(&get_connection(), &listing_id, tag);
        }
        println!("Tag(s) applied successfully!");
        std::process::exit(0);
    }
}