269 lines
9.9 KiB
Rust
269 lines
9.9 KiB
Rust
#[derive(Debug)]
|
|
pub struct App {
|
|
pub kind: AppKind,
|
|
pub default_project_name: String,
|
|
pub drp_client_id: String,
|
|
pub process_search_string: String,
|
|
pub config_search_string: String,
|
|
}
|
|
#[derive(Debug, PartialEq, Eq)]
|
|
pub enum AppKind {
|
|
C4d,
|
|
Maya,
|
|
ThreeDsMax,
|
|
AfterEffects,
|
|
PremierePro,
|
|
Illustrator,
|
|
Photoshop,
|
|
Indesign,
|
|
DavinciResolve,
|
|
Clarisse,
|
|
Marvelous,
|
|
Calvary,
|
|
Ableton,
|
|
FL,
|
|
}
|
|
|
|
pub struct Apps {
|
|
C4d: App,
|
|
Maya: App,
|
|
ThreeDsMax: App,
|
|
AfterEffects: App,
|
|
PremierePro: App,
|
|
Illustrator: App,
|
|
Photoshop: App,
|
|
Indesign: App,
|
|
DavinciResolve: App,
|
|
Clarisse: App,
|
|
Marvelous: App,
|
|
Calvary: App,
|
|
Ableton: App,
|
|
FL: App,
|
|
}
|
|
impl Apps {
|
|
pub fn as_iter(&self) -> [&App; 14] {
|
|
let APPS: [&App; 14] = [
|
|
&self.C4d,
|
|
&self.Maya,
|
|
&self.ThreeDsMax,
|
|
&self.AfterEffects,
|
|
&self.PremierePro,
|
|
&self.Illustrator,
|
|
&self.Photoshop,
|
|
&self.Indesign,
|
|
&self.DavinciResolve,
|
|
&self.Clarisse,
|
|
&self.Marvelous,
|
|
&self.Calvary,
|
|
&self.Ableton,
|
|
&self.FL,
|
|
];
|
|
APPS
|
|
}
|
|
}
|
|
impl AppKind {
|
|
pub fn as_iter() -> [AppKind; 14] {
|
|
let APPKINDS: [AppKind; 14] = [
|
|
AppKind::C4d,
|
|
AppKind::Maya,
|
|
AppKind::ThreeDsMax,
|
|
AppKind::AfterEffects,
|
|
AppKind::PremierePro,
|
|
AppKind::Illustrator,
|
|
AppKind::Photoshop,
|
|
AppKind::Indesign,
|
|
AppKind::DavinciResolve,
|
|
AppKind::Clarisse,
|
|
AppKind::Marvelous,
|
|
AppKind::Calvary,
|
|
AppKind::Ableton,
|
|
AppKind::FL,
|
|
];
|
|
APPKINDS
|
|
}
|
|
}
|
|
impl Apps {
|
|
pub fn construct_apps() -> Apps {
|
|
Apps {
|
|
C4d: App {
|
|
default_project_name: "Cinema 4D Project".to_string(),
|
|
drp_client_id: "936296341250904065".to_string(),
|
|
process_search_string: "Cinema 4D R".to_string(),
|
|
config_search_string: "c4d".to_string(),
|
|
kind: AppKind::C4d,
|
|
},
|
|
Maya: App {
|
|
default_project_name: "Autodesk Maya Project".to_string(),
|
|
drp_client_id: "1016369550276694106".to_string(),
|
|
process_search_string: "Autodesk Maya".to_string(),
|
|
config_search_string: "maya".to_string(),
|
|
kind: AppKind::Maya,
|
|
},
|
|
ThreeDsMax: App {
|
|
default_project_name: "3ds Max Project".to_string(),
|
|
drp_client_id: "1016395801402036315".to_string(),
|
|
process_search_string: " Autodesk 3ds Max".to_string(),
|
|
config_search_string: "threedsmax".to_string(),
|
|
kind: AppKind::ThreeDsMax,
|
|
},
|
|
AfterEffects: App {
|
|
default_project_name: "After Effects Project".to_string(),
|
|
drp_client_id: "1016395319522623539".to_string(),
|
|
process_search_string: "Adobe After Effects".to_string(),
|
|
config_search_string: "after_effects".to_string(),
|
|
kind: AppKind::AfterEffects,
|
|
},
|
|
PremierePro: App {
|
|
default_project_name: "Premiere Pro Project".to_string(),
|
|
drp_client_id: "1016396017832300555".to_string(),
|
|
process_search_string: "Adobe Premiere Pro".to_string(),
|
|
config_search_string: "premiere_pro".to_string(),
|
|
kind: AppKind::PremierePro,
|
|
},
|
|
Illustrator: App {
|
|
default_project_name: "Illustrator Project".to_string(),
|
|
drp_client_id: "1017491707819991071".to_string(),
|
|
process_search_string: "Adobe Illustrator".to_string(),
|
|
config_search_string: "illustrator".to_string(),
|
|
kind: AppKind::Illustrator,
|
|
},
|
|
Photoshop: App {
|
|
default_project_name: "Photoshop Project".to_string(),
|
|
drp_client_id: "1017493347415371917".to_string(),
|
|
process_search_string: "Photoshop".to_string(),
|
|
config_search_string: "photoshop".to_string(),
|
|
kind: AppKind::Photoshop,
|
|
},
|
|
Indesign: App {
|
|
default_project_name: "Indesign Project".to_string(),
|
|
drp_client_id: "1017493794456862781".to_string(),
|
|
process_search_string: "Indesign".to_string(),
|
|
config_search_string: "indesign".to_string(),
|
|
kind: AppKind::Indesign,
|
|
},
|
|
DavinciResolve: App {
|
|
default_project_name: "Davinci Resolve Project".to_string(),
|
|
drp_client_id: "1016371757722128516".to_string(),
|
|
process_search_string: "Davinci Resolve".to_string(),
|
|
config_search_string: "davinci_resolve".to_string(),
|
|
kind: AppKind::DavinciResolve,
|
|
},
|
|
Clarisse: App {
|
|
default_project_name: "Isotropix Clarisse Project".to_string(),
|
|
drp_client_id: "1016372248128532500".to_string(),
|
|
process_search_string: "Isotropix Clarisse".to_string(),
|
|
config_search_string: "clarisse".to_string(),
|
|
kind: AppKind::Clarisse,
|
|
},
|
|
Marvelous: App {
|
|
default_project_name: "Marvelous Designer Project".to_string(),
|
|
drp_client_id: "1016372646046351423".to_string(),
|
|
process_search_string: "Marvelous Designer".to_string(),
|
|
config_search_string: "marvelous".to_string(),
|
|
kind: AppKind::Marvelous,
|
|
},
|
|
Calvary: App {
|
|
default_project_name: "Cavalry Project".to_string(),
|
|
drp_client_id: "1016374130037243974".to_string(),
|
|
process_search_string: "calvary.exe".to_string(),
|
|
config_search_string: "calvary".to_string(),
|
|
kind: AppKind::Calvary,
|
|
},
|
|
Ableton: App {
|
|
default_project_name: "Ableton Project".to_string(),
|
|
drp_client_id: "1016375030227161150".to_string(),
|
|
process_search_string: "Ableton Live".to_string(),
|
|
config_search_string: "ableton".to_string(),
|
|
kind: AppKind::Ableton,
|
|
},
|
|
FL: App {
|
|
default_project_name: "FL Studio Project".to_string(),
|
|
drp_client_id: "1016393561140375712".to_string(),
|
|
process_search_string: "FL Studio".to_string(),
|
|
config_search_string: "fl".to_string(),
|
|
kind: AppKind::FL,
|
|
},
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Apps {
|
|
pub fn find_app(&self, str: &String) -> Option<&App> {
|
|
for app in self.as_iter() {
|
|
if str.contains(&app.process_search_string) {
|
|
return Some(&app);
|
|
}
|
|
}
|
|
None
|
|
}
|
|
pub fn find_config_app(&self, str: &str) -> Option<&App> {
|
|
for app in self.as_iter() {
|
|
if str == app.config_search_string {
|
|
return Some(app);
|
|
}
|
|
}
|
|
return None;
|
|
}
|
|
}
|
|
|
|
impl App {
|
|
pub fn parse(&self, window_title: &String) -> String {
|
|
match self.kind {
|
|
AppKind::C4d => {
|
|
let mut end_i: usize = window_title.len();
|
|
let mut start_i: usize = 0;
|
|
for (i, char) in window_title.chars().enumerate() {
|
|
if char == '[' {
|
|
start_i = i;
|
|
match window_title.find(".c4d]") {
|
|
Some(i) => end_i = i as usize,
|
|
None => match window_title.find(" - Main") {
|
|
Some(i) => end_i = i as usize - 1,
|
|
None => end_i = window_title.len() - 1,
|
|
},
|
|
};
|
|
}
|
|
}
|
|
return window_title[start_i + 1..end_i].to_string();
|
|
}
|
|
AppKind::Maya => {
|
|
let match_index = match window_title.as_str().find(".mb* - Autodesk Maya") {
|
|
Some(i) => i,
|
|
None => match window_title.as_str().find(".mb - Autodesk Maya") {
|
|
Some(i) => i + 4,
|
|
None => {
|
|
return String::from("Autodesk Maya Project");
|
|
}
|
|
},
|
|
};
|
|
return window_title[..match_index as usize].to_string();
|
|
}
|
|
AppKind::AfterEffects => {
|
|
let mut proj_name = String::new();
|
|
for i in (0..window_title.len() - 2).rev() {
|
|
if window_title.chars().nth(i).unwrap() == '\\' {
|
|
for char in window_title.chars().skip(i + 1) {
|
|
proj_name.push(char);
|
|
}
|
|
return proj_name;
|
|
}
|
|
}
|
|
if proj_name == "" {
|
|
proj_name = window_title.clone();
|
|
}
|
|
proj_name
|
|
}
|
|
AppKind::ThreeDsMax => self.default_project_name.clone(),
|
|
AppKind::PremierePro => self.default_project_name.clone(),
|
|
AppKind::Illustrator => self.default_project_name.clone(),
|
|
AppKind::Photoshop => self.default_project_name.clone(),
|
|
AppKind::Indesign => self.default_project_name.clone(),
|
|
AppKind::DavinciResolve => self.default_project_name.clone(),
|
|
AppKind::Clarisse => self.default_project_name.clone(),
|
|
AppKind::Marvelous => self.default_project_name.clone(),
|
|
AppKind::Calvary => self.default_project_name.clone(),
|
|
AppKind::Ableton => self.default_project_name.clone(),
|
|
AppKind::FL => self.default_project_name.clone(),
|
|
}
|
|
}
|
|
}
|