diff --git a/gui/interfaces/main.ui b/gui/interfaces/main.ui index f68962f..c5b9821 100644 --- a/gui/interfaces/main.ui +++ b/gui/interfaces/main.ui @@ -135,6 +135,7 @@ True True True + True diff --git a/gui/src/ui.rs b/gui/src/ui.rs index 14f4d72..6c623bb 100644 --- a/gui/src/ui.rs +++ b/gui/src/ui.rs @@ -3,7 +3,7 @@ use anyhow::Result; use blue_recorder_core::ffmpeg_linux::Ffmpeg; #[cfg(target_os = "windows")] use blue_recorder_core::ffmpeg_windows::Ffmpeg; -use blue_recorder_core::utils::{is_wayland, RecordMode}; +use blue_recorder_core::utils::{is_wayland, play_record, RecordMode}; use chrono::Utc; use cpal::traits::{DeviceTrait, HostTrait}; use libadwaita::{Application, Window}; @@ -116,6 +116,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag let screen_grab_icon: Image = builder.object("screen_grab_icon").unwrap(); let screen_grab_label: Label = builder.object("screen_grab_label").unwrap(); let select_window: Window = builder.object("select_window").unwrap(); + #[cfg(target_os = "windows")] let select_window_label: Label = builder.object("select_window_label").unwrap(); let speaker_switch: CheckButton = builder.object("speakerswitch").unwrap(); let stop_button: Button = builder.object("stopbutton").unwrap(); @@ -195,7 +196,7 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag let output_device = if host_output_device.is_some() { host_output_device.unwrap().name()? } else { - String::from("") + String::new() }; audio_source_combobox.append(Some("default"), &get_bundle("audio-input", None)); @@ -771,19 +772,24 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag })); // Record button + let _audio_input_switch = audio_input_switch.clone(); //let bundle_msg = get_bundle("already-exist", None); let _delay_spin = delay_spin.clone(); delay_window_button.set_label(&get_bundle("delay-window-stop", None)); delay_window_title.set_label(&get_bundle("delay-title", None)); let _delay_window = delay_window.clone(); let _delay_window_button = delay_window_button.clone(); + let _error_dialog = error_dialog.clone(); + let _error_message = error_message.clone(); let _ffmpeg_record_interface = ffmpeg_record_interface.clone(); //let main_context = glib::MainContext::default(); let _main_window = main_window.clone(); let _play_button = play_button.clone(); let _record_button = record_button.clone(); let _record_time_label = record_time_label.clone(); + let _speaker_switch = speaker_switch.clone(); let _stop_button = stop_button.clone(); + let _video_switch = video_switch.clone(); record_button.set_tooltip_text(Some(&get_bundle("record-tooltip", None))); record_label.set_label(&get_bundle("record", None)); //let wayland_record = main_context.block_on(WaylandRecorder::new()); @@ -807,37 +813,159 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag _area_capture.height, mode, ); - /*match start_video_record { - None => { - // Do nothing if the start_record function return nothing + let start_audio_input_record = _ffmpeg_record_interface.borrow_mut().start_input_audio(); + let start_audio_output_record = _ffmpeg_record_interface.borrow_mut().start_output_audio(); + if !_audio_input_switch.is_active() && + !_speaker_switch.is_active() && + !_video_switch.is_active() + { + // Do nothing + } else { + start_timer(record_time_label.clone()); + record_time_label.set_visible(true); + if hide_switch.is_active() { + _main_window.minimize(); } - _ => { - //start_timer(record_time_label.clone()); - record_time_label.set_visible(true); - if hide_switch.is_active() { - _main_window.minimize(); + _audio_input_switch.set_sensitive(false); + _speaker_switch.set_sensitive(false); + _video_switch.set_sensitive(false); + _play_button.hide(); + _record_button.hide(); + _stop_button.show(); + if _audio_input_switch.is_active() { + match start_audio_input_record { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + _record_button.show(); + _stop_button.hide(); + }, } - _play_button.hide(); - _record_button.hide(); - _stop_button.show(); } - }*/ + if _speaker_switch.is_active() { + match start_audio_output_record { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + _record_button.show(); + _stop_button.hide(); + }, + } + } + if _video_switch.is_active() { + match start_video_record { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + _record_button.show(); + _stop_button.hide(); + }, + } + } + } } }); // Stop record button + let _audio_input_switch = audio_input_switch.clone(); + let _error_dialog = error_dialog.clone(); + let _error_message = error_message.clone(); let mut _ffmpeg_record_interface = ffmpeg_record_interface.clone(); let _play_button = play_button.clone(); + let _speaker_switch = speaker_switch.clone(); let _stop_button = stop_button.clone(); + let _video_switch = video_switch.clone(); stop_button.set_tooltip_text(Some(&get_bundle("stop-tooltip", None))); stop_label.set_label(&get_bundle("stop-recording", None)); stop_button.connect_clicked(move |_| { _record_time_label.set_visible(false); - //stop_timer(_record_time_label.clone()); - //_ffmpeg_record_interface.borrow_mut().clone().stop_record(); + stop_timer(_record_time_label.clone()); + if _audio_input_switch.is_active() { + match _ffmpeg_record_interface.borrow_mut().stop_input_audio() { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + record_button.show(); + _stop_button.hide(); + }, + } + } + if _speaker_switch.is_active() { + match _ffmpeg_record_interface.borrow_mut().stop_output_audio() { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + record_button.show(); + _stop_button.hide(); + }, + } + } + if _video_switch.is_active() { + match _ffmpeg_record_interface.borrow_mut().stop_video() { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); + record_button.show(); + _stop_button.hide(); + }, + } + } + _audio_input_switch.set_sensitive(true); + _speaker_switch.set_sensitive(true); + _video_switch.set_sensitive(true); record_button.show(); _stop_button.hide(); _play_button.show(); + _play_button.set_sensitive(false); + _play_button.set_tooltip_text(Some(&get_bundle("play-inactive-tooltip", None))); }); // Delay window button @@ -845,9 +973,22 @@ fn build_ui(application: &Application, error_dialog: MessageDialog, error_messag delay_window_button.connect_clicked(move |_| {}); // Play button - //let mut _ffmpeg_record_interface = ffmpeg_record_interface.clone(); + let _error_dialog = error_dialog.clone(); + let _error_message = error_message.clone(); + let mut _ffmpeg_record_interface = ffmpeg_record_interface.clone(); play_button.connect_clicked(move |_| { - //_ffmpeg_record_interface.borrow_mut().clone().play_record(); + let file_name = _ffmpeg_record_interface.borrow_mut().filename.clone(); + match play_record(&file_name) { + Ok(_) => { + // Do nothing + }, + Err(error) => { + let text_buffer = TextBuffer::new(None); + text_buffer.set_text(&format!("{}", error)); + _error_message.set_buffer(Some(&text_buffer)); + _error_dialog.show(); + }, + } }); // About dialog diff --git a/locales/ar.ftl b/locales/ar.ftl index c4a6de7..d8ec1ea 100644 --- a/locales/ar.ftl +++ b/locales/ar.ftl @@ -172,13 +172,15 @@ format-tooltip = لاختيار صيغة الخَرج frames-tooltip = عدد الإطارات في الثانية hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل -video-bitrate-tooltip = Set video bitrate in KB/s +play-tooltip = Click to play video +play-inactive-tooltip = Please wait until the file is saved record-tooltip = يبدأ تسجيل الشاشة screen-tooltip = يحدد الشاشة ليسجلها show-area-tooltip = Show selected area during record speaker-tooltip = Speakr sound recording stop-tooltip = وقف تسجيل الشاشة tray-minimize-tooltip = Minimize application to tray icon +video-bitrate-tooltip = Set video bitrate in KB/s video-tooltip = يسجل الشاشة wayland-tooltip = غير مدعوم في وايلاند window-tooltip = يحدد نافذة ليسجلها diff --git a/locales/ar_YE.ftl b/locales/ar_YE.ftl index c4a6de7..d8ec1ea 100644 --- a/locales/ar_YE.ftl +++ b/locales/ar_YE.ftl @@ -172,13 +172,15 @@ format-tooltip = لاختيار صيغة الخَرج frames-tooltip = عدد الإطارات في الثانية hide-tooltip = لإخفاء نافذة المسجل الأزرق عند بدء التسجيل mouse-tooltip = يظهر مؤشر الفأرة عند التسجيل -video-bitrate-tooltip = Set video bitrate in KB/s +play-tooltip = Click to play video +play-inactive-tooltip = Please wait until the file is saved record-tooltip = يبدأ تسجيل الشاشة screen-tooltip = يحدد الشاشة ليسجلها show-area-tooltip = Show selected area during record speaker-tooltip = Speakr sound recording stop-tooltip = وقف تسجيل الشاشة tray-minimize-tooltip = Minimize application to tray icon +video-bitrate-tooltip = Set video bitrate in KB/s video-tooltip = يسجل الشاشة wayland-tooltip = غير مدعوم في وايلاند window-tooltip = يحدد نافذة ليسجلها diff --git a/locales/en.ftl b/locales/en.ftl index 223ae86..a5ca725 100644 --- a/locales/en.ftl +++ b/locales/en.ftl @@ -172,13 +172,15 @@ format-tooltip = Select file format frames-tooltip = Set frames rate hide-tooltip = Hide window when start recording mouse-tooltip = Mouse appears in video recording -video-bitrate-tooltip = Set video bitrate in KB/s +play-tooltip = Click to play video +play-inactive-tooltip = Please wait until the file is saved record-tooltip = Start screen record screen-tooltip = Select screen to record show-area-tooltip = Show selected area during record speaker-tooltip = Speakr sound recording stop-tooltip = Stop screen recording tray-minimize-tooltip = Minimize application to tray icon +video-bitrate-tooltip = Set video bitrate in KB/s video-tooltip = Video recording wayland-tooltip = Not supported in Wayland window-tooltip = Select window to record diff --git a/locales/en_US.ftl b/locales/en_US.ftl index 223ae86..a5ca725 100644 --- a/locales/en_US.ftl +++ b/locales/en_US.ftl @@ -172,13 +172,15 @@ format-tooltip = Select file format frames-tooltip = Set frames rate hide-tooltip = Hide window when start recording mouse-tooltip = Mouse appears in video recording -video-bitrate-tooltip = Set video bitrate in KB/s +play-tooltip = Click to play video +play-inactive-tooltip = Please wait until the file is saved record-tooltip = Start screen record screen-tooltip = Select screen to record show-area-tooltip = Show selected area during record speaker-tooltip = Speakr sound recording stop-tooltip = Stop screen recording tray-minimize-tooltip = Minimize application to tray icon +video-bitrate-tooltip = Set video bitrate in KB/s video-tooltip = Video recording wayland-tooltip = Not supported in Wayland window-tooltip = Select window to record