Windows/tempConnectWindow.js

/**
 *      _  _ 
 *     | \| |
 *     | .` |
 *     |_|\_|eptune
 *
 *     Capstone Project 2022
 * 
 *     About Window
 */

const NodeGUI = require("@nodegui/nodegui");
const NeptuneWindow = require("./NeptuneWindow");
const os = require('os');



class tempConnectWindow extends NeptuneWindow {

	constructor(arg) {
		super(arg);

        try {
            this.setWindowTitle('Neptune | tempConnectWindow');
            this.setFixedSize(500, 300);
            this.setWindowFlag(NodeGUI.WindowType.Dialog | NodeGUI.WindowType.MSWindowsFixedSizeDialogHint, true);
        
            let centralwidget = new NodeGUI.QWidget();
            centralwidget.setObjectName("centalwidget");
            
            let step1Label = new NodeGUI.QLabel(centralwidget);
            step1Label.setObjectName("step1Label");
            step1Label.setGeometry(10, 50, 650, 24);
            let font = new NodeGUI.QFont();
            // font.setPointSize(12);
            // font.setBold(false);
            // font.setWeight(75);
            step1Label.setFont(font);
            step1Label.setText("Step1: Open the android app while the desktop app is open.")

            let step2Label = new NodeGUI.QLabel(centralwidget);
            step2Label.setObjectName("step2Label");
            step2Label.setGeometry(10, 75, 650, 24);
            step2Label.setFont(font);
            step2Label.setText("Step 2: Tap \"Add New Device\" and fill in your IP Address.");
            
            let step3Label = new NodeGUI.QLabel(centralwidget);
            step3Label.setObjectName("step3Label");
            step3Label.setGeometry(10, 100, 650, 24);
            step3Label.setFont(font);
            step3Label.setText("Devices on the same network should connect automatically.");

            var ips = [];
            try {
                var networkInterfaces = os.networkInterfaces();
                let interfaceNames = Object.keys(networkInterfaces);
                interfaceNames.forEach((interfaceName) => {
                    try {
                        let addresses = Object.values(networkInterfaces[interfaceName]);

                        addresses.forEach((address) => {
                            if (address === undefined)
                                return;


                            if (address.family === "IPv4" && !address.internal) {
                                ips.push(address.address + " [" + interfaceName + "]");
                            }
                        });
                    } catch {}
                });
            } catch (err) {
                // huh
            }
            let IpLabel = new NodeGUI.QLabel(centralwidget);
            IpLabel.setObjectName("IpLabel");
            IpLabel.setGeometry(10, 110, 600, 125);
            IpLabel.setFont(font);
            let text = "Unable to lookup your IP addresses. Run `ipconfig` in Command Prompt to view your device's IP."
            if (ips !== undefined && ips.length > 0) {
                text = "Your IP address" + ((ips.length > 1)? "es:\n\t" : ": ") + ips.join("\n\t");
            }
            IpLabel.setText(text);
            // Your IP address: 127.0.0.1 (Wi-Fi)
            // Your IP addresses:\n127.0.0.1 (Wi-Fi)\n127.0.0.1 (not Wi-Fi)
            let titleLabel = new NodeGUI.QLabel(centralwidget);
            titleLabel.setObjectName("titleLabel");
            titleLabel.setGeometry(135, 20, 600, 28);
            let font1 = new NodeGUI.QFont();
            font1.setPointSize(14);
            font1.setBold(false);
            font1.setWeight(75);
            titleLabel.setFont(font1);
            titleLabel.setText("How to connect a device")

            let closeButton = new NodeGUI.QPushButton(centralwidget);
            closeButton.setObjectName("closeButton");
            closeButton.setGeometry(140, 230, 221, 37);
            closeButton.setFont(font1);
            closeButton.setText("Close Window");
            closeButton.addEventListener('clicked', (checked) => this.close());
            closeButton.setCursor(NodeGUI.CursorShape.PointingHandCursor);

            this.setCentralWidget(centralwidget);
            let statusbar = new NodeGUI.QStatusBar(this);
            statusbar.setObjectName("statusbar");
            this.setStatusBar(statusbar);
        }
        catch (e) {
            console.log(e);
            this.close();
        }
    }
}
module.exports = tempConnectWindow;