# applications-rs
> This crate is used to
>
> - get a list of installed applications on the system
> - get the frontmost application
> - get a list of running applications
## Platforms
- [x] Mac
- [x] Linux
- [x] Windows
## Usage
```rust
use applications::{common::SearchPath, AppInfo, AppInfoContext, AppTrait};
fn main() {
let mut ctx = AppInfoContext::new(vec![SearchPath::new(
std::path::PathBuf::from("/home/user/..."),
1,
)]);
ctx.refresh_apps().unwrap(); // must refresh apps before getting them
let apps = ctx.get_all_apps();
println!("Apps: {:#?}", apps);
let frontmost_app = ctx.get_frontmost_application().unwrap();
println!("Frontmost App: {:#?}", frontmost_app);
let running_apps = ctx.get_running_apps();
println!("Running Apps: {:#?}", running_apps);
}
```
## How?
> How and where to search for available desktop applications on each platform?
### Linux
Desktop applications are specified in files that ends with `.desktop`. `echo $XDG_DATA_DIRS` to see a list of paths where these desktop files could reside in.
The `.desktop` files are in toml format. Parse them with [toml](https://crates.io/crates/toml) crate.
The `Exec` can be used to launch the app, and `Icon` field contains the app icon.
### MacOS
The simplest way is to search in `/Applications` folder. The app icon is in `.icns` format.
Apple silicon macs can now run iOS apps. iOS app icons are in `.png` format.
`system_profiler` command can be used to get installed applications.
`system_profiler SPApplicationsDataType` is the command to use to get a full list of applications.
### Windows
https://crates.io/crates/winreg could be useful. Ask chatgpt for sample code.
## Libraries
- https://crates.io/crates/icns: Read and write icns files, convert into PNG format.