Compare commits

..

No commits in common. "master" and "v1.0.2" have entirely different histories.

15 changed files with 246 additions and 293 deletions

15
.drp_config Normal file
View file

@ -0,0 +1,15 @@
SHOULD_EXCLUDE_BE_ANONYMOUS:{
n
}
PORTFOLIO_LINK:{
djkato.net
}
EXCLUDE_CHARACTERS_LIST:{
no_drp
}
HIDE_PORTFOLIO_ROW:{
no
}

113
Cargo.lock generated
View file

@ -251,14 +251,12 @@ dependencies = [
[[package]]
name = "drp_creative"
version = "1.0.4"
version = "1.0.2"
dependencies = [
"discord-rich-presence",
"lazy_static",
"regex",
"self_update",
"serde",
"toml 0.7.6",
"tray-item",
"win-msgbox",
"windows",
@ -280,12 +278,6 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "equivalent"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
[[package]]
name = "errno"
version = "0.3.1"
@ -649,7 +641,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
"indexmap 1.9.3",
"indexmap",
"slab",
"tokio",
"tokio-util",
@ -662,12 +654,6 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
[[package]]
name = "heck"
version = "0.4.0"
@ -777,17 +763,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
]
[[package]]
name = "indexmap"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
dependencies = [
"equivalent",
"hashbrown 0.14.0",
"hashbrown",
]
[[package]]
@ -1038,7 +1014,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.15",
]
[[package]]
@ -1147,7 +1123,7 @@ checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
dependencies = [
"once_cell",
"thiserror",
"toml 0.5.9",
"toml",
]
[[package]]
@ -1176,9 +1152,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.64"
version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
dependencies = [
"unicode-ident",
]
@ -1194,9 +1170,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.29"
version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
dependencies = [
"proc-macro2",
]
@ -1370,22 +1346,19 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.170"
version = "1.0.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a56657f512baabca8f840542f9ca8152aecf182c473c26e46e58d6aab4f6e439"
dependencies = [
"serde_derive",
]
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
[[package]]
name = "serde_derive"
version = "1.0.170"
version = "1.0.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77d477848e6b23adba0db397777d5aad864555bc17fd9c89abb3b8009788b7b8"
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 1.0.109",
]
[[package]]
@ -1399,15 +1372,6 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@ -1458,9 +1422,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.25"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
dependencies = [
"proc-macro2",
"quote",
@ -1476,7 +1440,7 @@ dependencies = [
"cfg-expr",
"heck",
"pkg-config",
"toml 0.5.9",
"toml",
"version-compare",
]
@ -1593,40 +1557,6 @@ dependencies = [
"serde",
]
[[package]]
name = "toml"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit",
]
[[package]]
name = "toml_datetime"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.19.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78"
dependencies = [
"indexmap 2.0.0",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
[[package]]
name = "tower-service"
version = "0.3.2"
@ -2077,15 +2007,6 @@ dependencies = [
"find-winsdk",
]
[[package]]
name = "winnow"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
version = "0.5.1"

View file

@ -1,8 +1,8 @@
[package]
name = "drp_creative"
version = "1.0.4"
version = "1.0.2"
edition = "2021"
authors = ["djkatovfx@gmail.com"]
author = "https://djkato.net"
[dependencies]
discord-rich-presence = "0.2.2"
@ -11,8 +11,6 @@ tray-item = "0.7.0"
lazy_static = "1.4.0"
self_update = { version = "0.36.0", features = ["archive-zip"] }
win-msgbox = "0.1.2"
serde = { version = "1.0.170", features = ["derive"] }
toml = "0.7.6"
[dependencies.windows]
version = "0.39.0"

View file

@ -1 +0,0 @@
ko_fi: djkato

View file

@ -1,4 +1,3 @@
<a href='https://ko-fi.com/A0A8Q3SVZ' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi4.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
# Discord Rich Presence for Creative Apps
### Show your friends what you're working on, be it in Adobe Suite, Autodesk Suite, Cinema 4D or many more!
This app runs in the background and looks for processes, then parses the windows title and turns it into a project name to display with Discords Rich Presence.
@ -7,7 +6,7 @@ Examples:
![example1](https://i.imgur.com/yFzQh6O.png)
![example2](https://i.imgur.com/fziotzt.png)
![example3](https://i.imgur.com/9SEXuQr.png)
![example4](https://i.imgur.com/ANAW6Ub.png)
## how to install:
1. Grab the latest version from the [Releases](https://github.com/djkato/DRP_Creative/releases) page, then make a folder in `C:/Program Files/` and call it whatever, for example `DRP Creative`.
3. Put the exe inside the folder you created and create a link to it.
@ -18,21 +17,29 @@ Examples:
## How to use:
- App updates will be notified and suggested on startup via popup window.
- When it's running, you'll notice a new icon appear on your Taskbar. If you want to include/exclude the **currently open project** from showing up, click on the icon and click on `Remove project from include/exclude list`.
- There are two modes for the keywords list:
1. Exclude(default): If the currently open project files name contains the keyword anywhere, it will show the default project name instead.
2. Include: All projects will show default names, unless the the currently open project files name contains a keyword, then it will display the real name. This is a good alternative if you find yourself hiding more than showing what you're working on.
- If you don't want to see the default project names, and instead just not display anything, you can change that behavior by setting `show_default_when_excluded` to `false` in the config file.
- If you don't like the *"Portfolio: [your link]"* line on your status, you can disable it by setting `hide_portfolio_link` to `true`
- When it's running, you'll notice a new icon appear on your Taskbar. If you want to exclude the **currently open project** from showing up, click on the icon and click on `Don't show current project`.
![icon showcase](https://i.imgur.com/nADffGB.png)
Example `drp_config.toml`:
```toml
keywords_list = ["WORK", "Untitled 681*"]
show_default_when_excluded = true # or false
portfolio_link = "djkato.net"
hide_portfolio_row = false
should_list_include_or_exclude = "Include" # Or "Exclude", capital sensitive
- To change the portfolio website or remove excluded projects and words from the program, run the program at least once, and a `.drp_config` file will appear. You can open this with any text editor and rewrite the lines there. be gentle though, program expects a certain format for the file ^^'
- To disable the portfolio row, there's a "HIDE_PORTFOLIO_ROW" setting.
Example `.drp_config`:
```json
SHOULD_EXCLUDE_BE_ANONYMOUS:{
n
}
PORTFOLIO_LINK:{
djkato.net
}
EXCLUDE_CHARACTERS_LIST:{
no_drp
}
HIDE_PORTFOLIO_ROW:{
no
}
```
### Currently supported programs:
**Full support:**

View file

@ -1,5 +0,0 @@
keywords_list = []
show_default_when_excluded = true
portfolio_link = "djkato.net"
hide_portfolio_row = false
should_list_include_or_exclude = "Exclude"

View file

@ -1,2 +0,0 @@
'Process_list_dump.exe' is not recognized as an internal or external command,
operable program or batch file.

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 256.4 256.4" style="enable-background:new 0 0 256.4 256.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#00005B;}
.st1{fill:#9999FF;}
</style>
<g>
<path class="st0" d="M65.9,34.1h124.7c18.9,0,34.2,15.3,34.2,34.2v119.9c0,18.9-15.3,34.2-34.2,34.2H65.9
c-18.9,0-34.2-15.3-34.2-34.2V68.3C31.7,49.4,47,34.1,65.9,34.1z"/>
<g>
<path class="st1" d="M107.5,146.7H77.6l-6.1,19c-0.2,0.8-0.8,1.2-1.5,1.1H54.9c-0.9,0-1.1-0.5-0.9-1.4L79.9,91
c0.2-0.8,0.5-1.7,0.8-2.6c0.4-1.7,0.7-3.4,0.7-5.1c-0.1-0.4,0.2-0.8,0.7-0.9c0.1,0,0.2,0,0.2,0h20.6c0.5,0,1,0.2,1.1,0.7
l29.2,82.5c0.2,0.9,0,1.3-0.8,1.3h-16.8c-0.5,0.1-1.1-0.3-1.3-0.9L107.5,146.7z M82.3,130.7h20.4c-0.5-1.7-1.1-3.7-1.9-5.8
c-0.8-2.2-1.4-4.5-2.2-6.9c-0.8-2.5-1.5-4.9-2.3-7.4s-1.5-4.8-2.2-7.2c-0.7-2.3-1.2-4.4-1.8-6.2h-0.2c-0.8,3.5-1.6,6.9-2.7,10.4
c-1.2,3.8-2.4,7.9-3.7,11.9C84.8,123.5,83.5,127.3,82.3,130.7L82.3,130.7z"/>
<path class="st1" d="M194.8,103.4v49.3c0,2.2,0,4.1,0.1,5.8c0.1,1.7,0.2,3.2,0.2,4.4c0.2,1.3,0.2,2,0.3,2.9
c0.1,0.8-0.2,1.1-0.9,1.1h-13.8c-0.7,0.1-1.3-0.3-1.5-0.9c-0.2-0.7-0.3-1.4-0.5-2c-0.2-0.5-0.2-1.1-0.2-1.7c-2.6,2.3-5.7,4-9.1,5
c-2.9,0.8-5.9,1.2-9,1.2s-5.9-0.4-8.7-1.4c-2.6-0.9-5-2.4-6.9-4.4c-2.1-2.3-3.6-4.9-4.5-7.8c-1.1-3.7-1.7-7.5-1.6-11.4v-39.9
c-0.1-0.5,0.2-1,0.8-1.1c0.1,0,0.2,0,0.2,0h15.4c0.5-0.1,1,0.2,1.1,0.8c0,0.1,0,0.2,0,0.2v37.8c0,3.5,0.8,6.3,2.3,8.4
c1.5,2,4.7,3.1,8.3,3.1c1.9,0,3.7-0.3,5.5-1c1.9-0.7,3.5-1.5,5-2.6v-45.7c0-0.5,0.4-0.9,1.1-0.9H194c0.4-0.1,0.9,0.2,0.9,0.7
C194.8,103.3,194.8,103.4,194.8,103.4z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
program icons/ae.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View file

@ -249,10 +249,7 @@ impl Apps {
impl Apps {
pub fn find_app(&self, str: &String) -> Option<&App> {
for app in self.as_iter() {
if str
.to_lowercase()
.contains(&app.process_search_string.to_lowercase())
{
if str.contains(&app.process_search_string) {
return Some(&app);
}
}
@ -264,13 +261,20 @@ impl App {
pub fn parse(&self, window_title: &String) -> String {
match self.kind {
AppKind::C4d => {
if let Some(split1) = window_title.rsplit_once("]") {
if let Some(split2) = split1.0.rsplit_once("[") {
return split2.1.to_string();
}
}
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;
if let Some(curr_end_i) = window_title.rfind("] - ") {
end_i = curr_end_i;
} else {
return self.default_project_name.clone();
}
}
}
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 + 5,

View file

@ -1,91 +1,136 @@
use serde::{Deserialize, Serialize};
use std::{
fs,
io::{Read, Write},
};
use std::fs;
#[derive(Debug, Serialize, Deserialize)]
#[derive(Debug)]
pub struct Config {
pub keywords_list: Vec<String>,
pub show_default_when_excluded: bool,
pub exclude_keywords_list: Vec<String>,
pub should_exclude_be_invisible: bool,
pub portfolio_link: String,
pub hide_portfolio_row: bool,
pub should_list_include_or_exclude: IncludeExclude,
}
impl Default for Config {
fn default() -> Self {
Config {
keywords_list: Vec::new(),
should_list_include_or_exclude: IncludeExclude::Exclude,
portfolio_link: "djkato.net".to_owned(),
hide_portfolio_row: false,
show_default_when_excluded: true,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub enum IncludeExclude {
Include,
Exclude,
}
impl Config {
pub fn add_project(&mut self, project_name: &String) {
if self.keywords_list.contains(&project_name) {
pub fn load() -> Config {
let default_config = use_default_config();
//if no config file, parse default config file and try save it, then use it
let config_file: Config = match fs::read_to_string(".drp_config") {
Result::Err(_err) => {
let def_config = parse_config_file(&default_config);
make_config_file(&def_config);
def_config
}
Result::Ok(val) => parse_config_file(&val),
};
config_file
}
}
impl Config {
pub fn exclude_project(&mut self, project_name: &String) {
if self.exclude_keywords_list.contains(&project_name) {
return;
}
self.keywords_list.push(project_name.clone());
self.write();
self.exclude_keywords_list.push(project_name.clone());
make_config_file(&self);
}
}
fn parse_config_file(config_file: &String) -> Config {
let mut exclude_keywords_list: Vec<String> = Vec::new();
let mut should_exclude_be_invisible = false;
let mut portfolio_link = String::new();
let mut hide_portfolio_row = false;
for (i, line) in config_file.lines().enumerate() {
if line.contains("SHOULD_EXCLUDE_BE_ANONYMOUS:") {
match config_file
.lines()
.nth(i + 1)
.expect("index out of bounds")
.to_lowercase()
.as_str()
.trim()
{
"n" => should_exclude_be_invisible = false,
"no" => should_exclude_be_invisible = false,
"y" => should_exclude_be_invisible = true,
"yes" => should_exclude_be_invisible = true,
_ => should_exclude_be_invisible = false,
}
}
if line.contains("EXCLUDE_CHARACTERS_LIST:") {
for arg_line in config_file.lines().skip(i + 1) {
if arg_line.trim().contains("}") {
break;
}
exclude_keywords_list.push(arg_line.to_string())
}
}
if line.contains("PORTFOLIO_LINK:") {
for arg_line in config_file.lines().skip(i) {
if arg_line.trim().contains("}") {
break;
}
portfolio_link = arg_line.to_string();
}
}
if line.contains("HIDE_PORTFOLIO_ROW:") {
match config_file
.lines()
.nth(i + 1)
.expect("index out of bounds")
.to_lowercase()
.as_str()
.trim()
{
"n" => hide_portfolio_row = false,
"no" => hide_portfolio_row = false,
"y" => hide_portfolio_row = true,
"yes" => hide_portfolio_row = true,
_ => hide_portfolio_row = false,
}
}
}
Config {
exclude_keywords_list,
should_exclude_be_invisible,
portfolio_link,
hide_portfolio_row,
}
}
pub fn remove_project(&mut self, project_name: &String) {
if self.keywords_list.contains(&project_name) {
self.keywords_list.remove(
self.keywords_list
.iter()
.position(|proj| proj == project_name)
.unwrap(),
fn make_config_file(config: &Config) {
let mut config_file = String::from("SHOULD_EXCLUDE_BE_ANONYMOUS:{");
config_file = config_file
+ match config.should_exclude_be_invisible {
true => "\ny\n}\n",
false => "\nn\n}\n",
};
config_file = config_file + "\nPORTFOLIO_LINK:{\ndjkato.net\n}\n";
config_file = config_file + "\nEXCLUDE_CHARACTERS_LIST:{";
for exclusive_word in &config.exclude_keywords_list {
config_file = config_file + format!("\n{}", exclusive_word).as_str();
}
config_file = config_file + "\n}\n";
match fs::write(".drp_config", config_file) {
_ => (),
}
}
fn use_default_config() -> String {
let str = String::from(
"SHOULD_EXCLUDE_BE_ANONYMOUS:{
n
}
PORTFOLIO_LINK:{
djkato.net
}
EXCLUDE_CHARACTERS_LIST:{
no_drp
}
",
);
self.write();
}
}
pub fn load_from_file(&mut self) {
if !std::path::Path::new("drp_config.toml").exists() {
self.write();
} else {
let mut file = fs::File::options()
.read(true)
.open("drp_config.toml")
.expect(
"Config file exists but can't be acccessed. Check permissions for the file.",
);
let mut content = String::new();
file.read_to_string(&mut content)
.expect("config file not valid");
if content.is_empty() {
self.write();
}
*self = toml::from_str::<Config>(content.as_str())
.expect("Config file exists, but the format of it is wrong.");
}
}
pub fn write(&self) {
let mut file = fs::File::options()
.write(true)
.create(true)
.truncate(true)
.open("drp_config.toml")
.expect("Couldn't write to file");
let buff =
toml::ser::to_string_pretty(self).expect("Something is wrong with the default config");
file.write_all(buff.as_bytes())
.expect("Failed to write files");
}
str
}

View file

@ -7,7 +7,7 @@ pub mod config;
pub mod program_status;
pub mod self_updater;
pub mod tray_icon;
use crate::config::{Config, IncludeExclude};
use crate::config::Config;
use crate::program_status::*;
use crate::self_updater::try_update;
use app::{App, Apps};
@ -21,9 +21,7 @@ fn main() {
Err(e) => println!("Failed to update! {e}"),
}
let apps = Apps::construct_apps();
let mut config = Config::default();
config.load_from_file();
let mut config = Config::load();
let timeout = time::Duration::from_millis(5000);
@ -35,37 +33,17 @@ fn main() {
let mut drp_is_running = false;
let mut discord_client: Option<DiscordIpcClient> = None;
let mut current_app_option: Option<&App> = None;
'main: loop {
loop {
if let Some(current_app) = current_app_option {
if let Some(real_project_name) = is_program_still_running(&current_app) {
project_name = match config.should_list_include_or_exclude {
IncludeExclude::Exclude => real_project_name.clone(),
IncludeExclude::Include => current_app.default_project_name.clone(),
};
for listed_word in &config.keywords_list {
match &config.should_list_include_or_exclude {
&IncludeExclude::Exclude => {
if real_project_name.contains(listed_word.as_str()) {
if !&config.show_default_when_excluded {
continue 'main;
}
//if project name includes filtered words, use default project name
for excluded_word in &config.exclude_keywords_list {
if real_project_name.contains(excluded_word.as_str()) {
project_name = current_app.default_project_name.clone();
} else {
project_name = real_project_name.clone();
}
}
&IncludeExclude::Include => {
if real_project_name.contains(listed_word.as_str()) {
project_name = real_project_name.clone();
} else {
if !&config.show_default_when_excluded {
continue 'main;
}
project_name = current_app.default_project_name.clone();
}
}
}
}
//If discord client isn't connected create and conenct it
if !drp_is_running {
//make a new client with current_app ID
@ -108,10 +86,7 @@ fn main() {
//if discord client exists, update status
if let Some(dc) = discord_client.as_mut() {
match dc.set_activity(activity) {
Ok(_) => (),
Err(e) => {
dbg!(e);
}
_ => (),
}
}
}
@ -124,26 +99,20 @@ fn main() {
//respond to tray icon messages
match tray_receiver.try_recv() {
Ok(msg) => match msg {
tray_icon::Message::AddProjectToList => {
if let Some(real_project_name) = is_program_still_running(&current_app) {
config.add_project(&real_project_name);
tray_icon::Message::AnonymiseProject => {
//only exclude project name if it's not the default one
for app in apps.as_iter() {
if app.kind == current_app.kind {
if app.default_project_name != project_name {
config.exclude_project(&project_name);
}
}
tray_icon::Message::RemoveProjectFromList => {
if let Some(real_project_name) = is_program_still_running(&current_app) {
config.remove_project(&real_project_name);
}
}
tray_icon::Message::Quit => {
println!("qiuitting!");
exit(0)
}
tray_icon::Message::OpenOptionsFile => {
let _ = std::process::Command::new("notepad")
.arg("drp_config.toml")
.current_dir("./")
.spawn();
}
},
Err(_err) => (),
}
@ -151,8 +120,8 @@ fn main() {
//respond to tray icon messages
match tray_receiver.try_recv() {
Ok(msg) => match msg {
tray_icon::Message::AnonymiseProject => {}
tray_icon::Message::Quit => exit(0),
_ => (),
},
Err(_err) => (),
}

View file

@ -8,10 +8,7 @@ pub fn get_running_program(apps: &Apps) -> Option<(&App, String)> {
for window_name in running_window_names {
//println!("{}", &window_name);
if let Some(app) = apps.find_app(&window_name) {
if !window_name.contains("- Google Chrome")
|| !window_name.contains(" Mozilla Firefox")
|| !window_name.contains("- Brave")
{
if !window_name.contains("- Google Chrome") {
//So googling it won't affect the DRP lol
return Some((&app, app.parse(&window_name)));
}
@ -23,14 +20,8 @@ pub fn is_program_still_running(app: &App) -> Option<String> {
let running_window_names = unsafe { get_running_windows_titles() };
for window_name in running_window_names {
if window_name
.to_lowercase()
.contains(&app.process_search_string.to_lowercase())
{
if !window_name.contains("- Google Chrome")
|| !window_name.contains(" Mozilla Firefox")
|| !window_name.contains("- Brave")
{
if window_name.contains(&app.process_search_string) {
if !window_name.contains("- Google Chrome") {
//So googling it won't affect the DRP lol
return Some(app.parse(&window_name));
}

View file

@ -4,38 +4,23 @@ use {std::sync::mpsc, tray_item::TrayItem};
pub enum Message {
Quit,
AddProjectToList,
RemoveProjectFromList,
OpenOptionsFile,
AnonymiseProject,
}
pub fn create_tray() -> (Receiver<Message>, TrayItem) {
let mut tray = TrayItem::new("DRP Creative", "drp-icon").unwrap();
let (tx, rx) = mpsc::channel();
let tx1 = tx.clone();
let tx2 = tx.clone();
let tx3 = tx.clone();
let tx4 = tx.clone();
tray.add_menu_item("Open options file", move || {
tx4.send(Message::OpenOptionsFile).unwrap();
})
.unwrap();
tray.add_label("DRP Creative Options").unwrap();
tray.add_menu_item("Add project to include/exclude list", move || {
tx1.send(Message::AddProjectToList).unwrap();
})
.unwrap();
tray.add_menu_item("Remove project from include/exclude list", move || {
println!("REMOVE");
tx3.send(Message::RemoveProjectFromList).unwrap();
tray.add_menu_item("Don't show current project", move || {
tx.send(Message::AnonymiseProject).unwrap();
})
.unwrap();
tray.add_menu_item("Quit", move || {
tx2.send(Message::Quit).unwrap();
tx1.send(Message::Quit).unwrap();
})
.unwrap();
return (rx, tray);
}