ApiSettings.cs 8.36 KB
using DirectShowLib;
using MoyaAdminLib;
using MoyaAdminUI.MoyaAPI;
using MoyaSignup.Dataclasses;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//using Touchless.Vision.Camera;

namespace MoyaSignup
{
    public partial class ApiSettings : Form
    {
        public ApiSettings()
        {
            InitializeComponent();
        }

        private List<DsDeviceContainer> webCams = new List<DsDeviceContainer>();
        public List<DsDeviceContainer> Webcams
        {
            get { return webCams; }
            set { webCams = value; }
        }

        private void SaveButton_Click(object sender, EventArgs e)
        {
            ApiCredential apiCredential = null;

            if (resetApiTokenCheckBox.Checked)
            {
                try
                {
                    apiCredential = RestClient.GetApiCredential(usernameTextBox.Text, pwTextBox.Text, Properties.Settings.Default.ApiApplicationKey, apiURLTextBox.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to get api credentials: " + ex.Message);
                }
                
                if (apiCredential != null)
                {
                    Properties.Settings.Default.ApiURL = apiURLTextBox.Text;
                    Properties.Settings.Default.ApiUser = apiCredential.authname;
                    Properties.Settings.Default.ApiPass = apiCredential.secret;
                    Properties.Settings.Default.ApiTokenSet = true;
                }
            }

            if (usbRadioButton.Checked)
            {
                if (printerNameComboBox.SelectedItem != null)
                {
                    Properties.Settings.Default.PrinterTypeSelected = 0;
                    Properties.Settings.Default.ReceiptPrinterName = (string)printerNameComboBox.SelectedItem;
                }

            }
            else
            {
                if (printerModelComboBox.SelectedItem != null)
                {
                    Properties.Settings.Default.PrinterTypeSelected = 1;
                    Properties.Settings.Default.ThermoPrinter = (int)printerModelComboBox.SelectedItem;
                }

                if (printerPortComboBox.SelectedItem != null)
                {
                    string comPort = (string)this.printerPortComboBox.SelectedItem;
                    Debug.WriteLine("[ApiSettings] Selected modemport is '" + comPort + "'");
                    foreach (string p in SerialPort.GetPortNames())
                    {
                        if (comPort == p || comPort.Contains("(" + p + ")"))
                        {
                            Debug.WriteLine("[ApiSettings] Setting modemport to '" + p + "'");
                            Properties.Settings.Default.printerPort = p;
                            break;
                        }
                    }
                }
            }

            foreach(DsDeviceContainer webCamContainer in webcamsCheckedListBox.CheckedItems)
            {
                webCams.Add(webCamContainer);
            }

            Properties.Settings.Default.Save();

            RestClient.ApiApplicationKey = Properties.Settings.Default.ApiApplicationKey;
            RestClient.ApiPass = Properties.Settings.Default.ApiPass;
            RestClient.ApiUser = Properties.Settings.Default.ApiUser;
            RestClient.ApiURL = Properties.Settings.Default.ApiURL;
            this.DialogResult = System.Windows.Forms.DialogResult.OK;

        }

        private void ApiSettings_Load(object sender, EventArgs e)
        {
            if(Properties.Settings.Default.ApiTokenSet)
            {
                resetApiTokenCheckBox.Checked = false;
            } else
            {
                resetApiTokenCheckBox.Checked = true;
            }

            apiURLTextBox.Text = Properties.Settings.Default.ApiURL;
            //usernameTextBox.Text = Properties.Settings.Default.ApiUser;
            //pwTextBox.Text = Properties.Settings.Default.ApiPass;
            
            printerModelComboBox.Items.Add(ThermoPrinterLibrary.ThermoPrinter.Models.IDP3210);
            printerModelComboBox.Items.Add(ThermoPrinterLibrary.ThermoPrinter.Models.TMT188II);

            printerPortComboBox.Items.Clear();

            foreach(string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                printerNameComboBox.Items.Add(printer);
                if (printer == Properties.Settings.Default.ReceiptPrinterName)
                    printerNameComboBox.SelectedItem = printer;
            }

            if (Properties.Settings.Default.PrinterTypeSelected == 0)
                usbRadioButton.Checked = true;
            else if (Properties.Settings.Default.PrinterTypeSelected == 1)
                serialRadioButton.Checked = true;

            try
            {
                using (var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPEntity"))
                {
                    string[] portnames = SerialPort.GetPortNames();
                    foreach (ManagementObject queryObj in searcher.Get())
                    {
                        if (queryObj["Caption"] != null)
                        {
                            string port = queryObj["Caption"].ToString();
                            if (port.Contains("(COM"))
                            {
                                printerPortComboBox.Items.Add(port);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Failed to get serial ports. Trying with the old way..");
                if (printerPortComboBox.Items.Count == 0)
                {
                    foreach (string p in SerialPort.GetPortNames())
                    {
                        SerialPort port = new SerialPort(p);

                        try
                        {
                            port.Open();
                            port.Close();

                        }
                        catch
                        {
                            continue;
                        }

                        printerPortComboBox.Items.Add(p);
                    }
                }
            }
            DsDevice[] captureDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
            int i = 0;
            for (i = 0; i < captureDevices.Length; i++)
            {
                DsDeviceContainer device = new DsDeviceContainer();
                device.Device = captureDevices[i];
                device.Idx = i;
                int idx = webcamsCheckedListBox.Items.Add(device);
                if (captureDevices[i].Name.Contains("720p"))
                    webcamsCheckedListBox.SetItemChecked(idx, true);
            }

            textBox1.Text += "\r\n" + Path.Combine(Program.AppDataPath, "debug.log");
        }

        private void resetApiTokenCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            if(!resetApiTokenCheckBox.Checked)
            {
                apiURLTextBox.ReadOnly = true;
                usernameTextBox.ReadOnly = true;
                pwTextBox.ReadOnly = true;
            } else
            {
                apiURLTextBox.ReadOnly = false;
                usernameTextBox.ReadOnly = false;
                pwTextBox.ReadOnly = false;
            }
        }

        private void usbRadioButton_CheckedChanged(object sender, EventArgs e)
        {
            if(usbRadioButton.Checked)
            {
                serialRadioButton.Checked = false;
                printerModelComboBox.Enabled = false;
                printerPortComboBox.Enabled = false;

                printerNameComboBox.Enabled = true;
            }
        }

        private void serialRadioButton_CheckedChanged(object sender, EventArgs e)
        {
            if(serialRadioButton.Checked)
            {
                usbRadioButton.Checked = false;
                printerNameComboBox.Enabled = false;

                printerModelComboBox.Enabled = true;
                printerPortComboBox.Enabled = true;
            }
        }
    }
}