A music player that connects to your cloud/distributed storage.
1// Prevents additional console window on Windows in release, DO NOT REMOVE!!
2#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3
4use tauri::{webview::Url, AppHandle, WebviewBuilder, WebviewUrl, WindowBuilder};
5use tauri::{Manager, Runtime};
6use tauri_plugin_positioner::{Position, WindowExt};
7use tauri_plugin_window_state::{StateFlags, WindowExt as WindowStateExt};
8
9// 🚀 PRODUCTION
10
11#[cfg(not(dev))]
12fn main() {
13 let port = 44999;
14 let url = format!("http://localhost:{}", port).parse().unwrap();
15
16 let builder = default_builder().plugin(tauri_plugin_localhost::Builder::new(port).build());
17
18 setup(url, builder)
19}
20
21// 💣 DEVELOPMENT
22
23#[cfg(dev)]
24fn main() {
25 let port = 8000;
26 let url = format!("http://localhost:{}", port).parse().unwrap();
27
28 let builder = default_builder();
29
30 setup(url, builder)
31}
32
33// BUILDER
34
35fn default_builder() -> tauri::Builder<tauri::Wry> {
36 tauri::Builder::default()
37 .plugin(tauri_plugin_fs::init())
38 .plugin(tauri_plugin_shell::init())
39 .plugin(tauri_plugin_dialog::init())
40 .plugin(tauri_plugin_window_state::Builder::default().build())
41}
42
43// WINDOWS
44
45fn build_window(app: &AppHandle, url: Url) {
46 let monitor = app.primary_monitor().unwrap();
47
48 let height;
49 let width;
50
51 match monitor {
52 Some(m) => {
53 height = (m.size().height as f64 / m.scale_factor()) - 80.0;
54 width = (m.size().width as f64 / m.scale_factor()) - 40.0;
55 }
56
57 None => {
58 height = 675.0;
59 width = 1080.0;
60 }
61 }
62
63 let mut window_builder = WindowBuilder::new(app, "main")
64 .title("Diffuse")
65 .theme(None)
66 .inner_size(width, height);
67
68 window_builder = title_styles(window_builder);
69
70 let window = window_builder.build().unwrap();
71 window.move_window(Position::Center).unwrap();
72 window.restore_state(StateFlags::all()).unwrap();
73
74 let webview_builder = WebviewBuilder::new("main", WebviewUrl::External(url))
75 .auto_resize()
76 .enable_clipboard_access()
77 .user_agent("Chrome");
78
79 window
80 .add_child(
81 webview_builder,
82 tauri::LogicalPosition::new(0, 0),
83 window.inner_size().unwrap(),
84 )
85 .unwrap();
86
87 window.set_resizable(true).unwrap();
88}
89
90#[cfg(target_os = "macos")]
91fn title_styles<R: Runtime, M: Manager<R>>(builder: WindowBuilder<R, M>) -> WindowBuilder<R, M> {
92 return builder
93 .title_bar_style(tauri::TitleBarStyle::Overlay)
94 .hidden_title(true);
95}
96
97#[cfg(not(target_os = "macos"))]
98fn title_styles<R: Runtime, M: Manager<R>>(builder: WindowBuilder<R, M>) -> WindowBuilder<R, M> {
99 return builder;
100}
101
102// SETUP
103
104fn setup(url: Url, builder: tauri::Builder<tauri::Wry>) {
105 builder
106 .setup(move |app| {
107 build_window(app.handle(), url);
108 Ok(())
109 })
110 .run(tauri::generate_context!())
111 .expect("error while running tauri application");
112}