airgorah 0.7.0

A WiFi auditing software that can perform deauth attacks and passwords cracking
use gtk4::prelude::*;
use gtk4::*;

pub struct ErrorDialog;

impl ErrorDialog {
    pub fn spawn(parent: &impl IsA<Window>, title: &str, message: &str) {
        let dialog = MessageDialog::builder()
            .text(title)
            .secondary_text(message)
            .decorated(true)
            .message_type(MessageType::Error)
            .buttons(ButtonsType::Close)
            .modal(true)
            .transient_for(parent)
            .build();

        log::error!("{}", message.to_lowercase());

        dialog.connect_response(move |this, _| {
            this.close();
        });
        dialog.show();
    }
}

pub struct PanicDialog;

impl PanicDialog {
    pub fn spawn(parent: &impl IsA<Window>, message: &str) {
        let dialog = MessageDialog::builder()
            .text("Error")
            .secondary_text(message)
            .decorated(true)
            .message_type(MessageType::Error)
            .buttons(ButtonsType::Close)
            .modal(true)
            .transient_for(parent)
            .build();

        log::error!("{}", message.to_lowercase());

        dialog.connect_response(move |this, _| {
            this.close();
            std::process::exit(1);
        });
        dialog.connect_close(move |_| {
            std::process::exit(1);
        });
        dialog.show();
    }
}

pub struct UpdateDialog;

impl UpdateDialog {
    pub fn spawn(parent: &impl IsA<Window>, version: &str, new_version: &str) {
        let title = format!("Update available ({} -> {})", version, new_version);
        let link = "https://github.com/martin-olivier/airgorah/releases/latest";

        let dialog = MessageDialog::builder()
            .text(title)
            .secondary_text(link)
            .decorated(true)
            .message_type(MessageType::Info)
            .modal(true)
            .transient_for(parent)
            .build();

        dialog.add_button("Close", ResponseType::Close);
        dialog.add_button("Copy Link", ResponseType::Other(42));

        dialog.connect_response(|this, response| {
            if response == ResponseType::Other(42) {
                if let Some(display) = gdk::Display::default() {
                    display.clipboard().set_text(link);
                }
            }
            this.close();
        });
        dialog.show();
    }
}