Skip to content
Snippets Groups Projects
api.js 12.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    "use strict";
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    import Luci from "../luci.js";
    import ApiMqttIn from "./api-mqtt-in.js";
    import ApiMqttOut from "./api-mqtt-out.js";
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    class Api {
    
    
        static baseURL = "/api/";
    
        // /api/luci/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        static callbackGetLuci = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the luci of the user from the server
         * @returns {*} all the lights of the user
         */
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        static getLuci = callback => {
            Api.callbackGetLuci = callback;
            ApiMqttOut.getStatusLuci();
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        static sendLuciWeb = luci => {
            if( Api.callbackGetLuci == null)
                return;
    
            const callback = Api.callbackGetLuci;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            Api.callbackGetLuci = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * adds a new luce to the server
         * @param {luceTemplate} luce the luce to add to the server
         * @returns {*} null if the light was added
         */
    
        static makeNewLuci = async luce => {
            if (luce == null)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("luce must be defined");
            const url = Api.baseURL + "luci/";
            const response = await fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify(luce)
            });
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return null;
            else
    
                throw await response.json();
        };
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        static callbackLuciStato = null;
        static toggleForLuciStato = null;
    
        static fixedCallbackLuciStato = null;
    
        // /api/luci/stato/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * changes the status of a luce on the server
         * @param {luceTemplate} luce the luce to change the status of
         * @returns {*} null if the light's status was changed
         */
    
        static setLuciStato = (luce,toggle,callback,fixedCallback) => {
            if(Api.fixedCallbackLuciStato == null)
                Api.fixedCallbackLuciStato = fixedCallback;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            Api.callbackLuciStato = callback;
            Api.toggleForLuciStato = toggle;
            ApiMqttOut.setLuciStato(luce);
        }
    
        static sendLuciStatoWeb = response => {
            if(response == null){
                const callback = Api.callbackLuciStato;
                const toggle = Api.toggleForLuciStato;
                Api.callbackLuciStato = null;
                Api.toggleForLuciStato = null;
                callback(toggle);
            } else {
                Api.fixedCallbackLuciStato(response);
            }
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/scenari/
    
        static callbackGetScenari = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the scenari of the user from the server
         * @returns {*} all the scenarios of the user
         */
    
        static getScenari = callback => {
            Api.callbackGetScenari = callback;
            ApiMqttOut.getAllFromScenari();
    
        static sendScenariWeb = scenari => {
            if( Api.callbackGetScenari == null)
                return;
            const callback = Api.callbackGetScenari;
            Api.callbackGetScenari = null;
            callback(scenari);
        }
    
        // /api/scenari/attiva/
    
        static callbackSetScenarioStatus = null;
        static scenarioSetScenarioStatus = null;
        static activatingSetScenarioStatus = null;
        static isActivatingNewScenarioSetScenarioStatus = null;
    
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * activates or deactivates a scenario on the server
         * @param {scenarioTemplate} scenario the scenario to activate or deactivate
         * @returns {*} null if the scenario was activated or deactivated
         */
    
        static setScenarioStatus = (scenario,activating,isActivatingNewScenario,callback) => {
            Api.callbackSetScenarioStatus = callback;
            Api.scenarioSetScenarioStatus = scenario;
            Api.activatingSetScenarioStatus = activating;
            Api.isActivatingNewScenarioSetScenarioStatus = isActivatingNewScenario;
            ApiMqttOut.setScenarioStatus(scenario);
    
        static sendWebNewScenarioStatus = scenarioNome => {
            if( Api.callbackSetScenarioStatus == null)
                return;
            const callback = Api.callbackSetScenarioStatus;
            const scenario = Api.scenarioSetScenarioStatus;
            const activating = Api.activatingSetScenarioStatus;
            const isActivatingNewScenario = Api.isActivatingNewScenarioSetScenarioStatus;
            Api.callbackSetScenarioStatus = null;
            Api.scenarioSetScenarioStatus = null;
            Api.activatingSetScenarioStatus = null;
            Api.isActivatingNewScenarioSetScenarioStatus = null;
    
            // FIXME forse dovrei controllare scenarioNome
    
            callback(scenario,activating,isActivatingNewScenario);
        }
    
        // /api/scenari/registra/
    
        static recordingRecordScenario = null;
        static endRecordingModalLauncherRecordScenario = null;
        static registraBtnRecordScenario = null;
        static learnINBtnRecordScenario = null;
        static callbackRecordScenario = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * starts/stop the recording of a scenario
         * @param {Boolean} recording true to start the recording, false to stop it
         * @returns {*} null if the recording was started or stopped
         */
    
        static recordScenario = (recording,endRecordingModalLauncher,registraBtn,learnINBtn,callback) => {
            Api.recordingRecordScenario = recording;//true se voglio registrare
            Api.endRecordingModalLauncherRecordScenario = endRecordingModalLauncher;
            Api.callbackRecordScenario = callback;
            Api.learnINBtnRecordScenario = learnINBtn;
            Api.registraBtnRecordScenario = registraBtn;
            ApiMqttOut.recordScenario(learnINBtn);
        }
        static retriesRecordScenario = 0;
        static sendWebScenarioAutoma = stato => {
            if( Api.callbackRecordScenario == null)
                return;
            const recording = Api.recordingRecordScenario;
            const statoAspettato = recording ? 1 : 0;
            if(stato !== statoAspettato && Api.retriesRecordScenario < 3){
                Api.retriesRecordScenario++;
                ApiMqttOut.recordScenario(Api.learnINBtnRecordScenario);
            }
            const endRecordingModalLauncher = Api.endRecordingModalLauncherRecordScenario;
            const callback = Api.callbackRecordScenario;
            const registraBtn = Api.registraBtnRecordScenario;
            Api.recordingRecordScenario = null;
            Api.endRecordingModalLauncherRecordScenario = null;
            Api.callbackRecordScenario = null;
            Api.learnINBtnRecordScenario = null;
            Api.registraBtnRecordScenario = null;
            Api.retriesRecordScenario = 0;
            callback(recording,endRecordingModalLauncher,registraBtn);
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        }
    
        // /api/scenari/salva/
    
        static callbackSaveScenario = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * tells the server to save the currently recorded scenario
         * @returns {*} the scenario if it was saved
         */
    
        static saveScenario = (nome,callback) => {
            Api.callbackSaveScenario = callback;
            ApiMqttOut.saveScenario(nome);
    
    
        static sendWebSavedScenario = scenario => {
            if( Api.callbackSaveScenario == null)
                return;
            const callback = Api.callbackSaveScenario;
            Api.callbackSaveScenario = null;
            callback(scenario);
        }
    
        // /api/antifurto/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
    
         * gets everything about the antifurto (stato, allarme, attenzione (valore progress bar), soglia, sensori)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
         * @returns {*} the antifurto's values
         */
        static getAntifurto = async () => {
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            
            // const url = Api.baseURL + "antifurto/";
            // const response = await fetch(url);
            // const data = await response.json();
            // if (response.ok)
            //     return data;
            // else
            //     throw data;
    
        };
        // /api/antifurto/stato/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the status of the antifurto
         * @returns {*} the antifurto's status
         */
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /*static getAntifurtoStatus = async () => {
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const url = Api.baseURL + "antifurto/stato/";
            const response = await fetch(url);
            const data = await response.json();
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return data;
            else
    
                throw data;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        };*/
    
        static newStatusSetAntifurtoStatus = null;
        static antifurtoINbtnSetAntifurtoStatus = null;
        static payloadSetAntifurtoStatus = null;
        static callbackSetAntifurtoStatus = null;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status of the antifurto
         * @param {Boolean} status the new status of the antifurto
         * @returns {*} null if the status was changed
         */
    
        static setAntifurtoStatus = (newStatus,antifurtoINbtn,payload,callback) => {
            Api.newStatusSetAntifurtoStatus = newStatus;
            Api.antifurtoINbtnSetAntifurtoStatus = antifurtoINbtn;
            Api.payloadSetAntifurtoStatus = payload;
            Api.callbackSetAntifurtoStatus = callback;
            ApiMqttOut.setAntifurtoStatus(antifurtoINbtn);
    
        static retriesSetAntifurtoStatus = 0;
        static sendWebAntifurtoAutoma = stato => {
            if( Api.callbackSetAntifurtoStatus == null)
                return;
            const newStatus = Api.newStatusSetAntifurtoStatus;
            const expectedStatus = newStatus ? 2 : 0;
            if(stato !== expectedStatus && Api.retriesSetAntifurtoStatus < 3){
                Api.retriesSetAntifurtoStatus++;
                ApiMqttOut.setAntifurtoStatus(Api.antifurtoINbtnSetAntifurtoStatus);
            }
            const payload = Api.payloadSetAntifurtoStatus;
            const callback = Api.callbackSetAntifurtoStatus;
            Api.newStatusSetAntifurtoStatus = null;
            Api.antifurtoINbtnSetAntifurtoStatus = null;
            Api.payloadSetAntifurtoStatus = null;
            Api.callbackSetAntifurtoStatus = null;
            Api.retriesSetAntifurtoStatus = 0;
            callback(payload.previousStatus,newStatus,payload.fromScenari,payload.fromServer,payload.fromBellClick);
        }
    
        // /api/antifurto/allarme/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * gets the status of the antifurto's alarm
         * @returns {*} the antifurto's alarm status
         */
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /*static getAntifurtoAllarme = async () => {
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            const url = Api.baseURL + "antifurto/allarme/";
            const response = await fetch(url);
            const data = await response.json();
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return data;
            else
    
                throw data;
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        };*/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status of the antifurto's alarm
         * @param {Boolean} allarme the new status of the antifurto's alarm
         * @returns {*} null if the status was changed
         */
    
        static setAntifurtoAllarme = async allarme => {
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            if (allarme == null || typeof allarme.stato !== 'boolean')
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("allarme must be a set boolean");
            const url = Api.baseURL + "antifurto/allarme/";
            const response = await fetch(url, {
                method: "PUT",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify(allarme)
            });
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return null;
    
            else
                throw await response.json();
        };
        // /api/antifurto/attenzione/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the status for the progress bar of the antifurto's alarm
         * @param {Number} attenzione the new value of the antifurto's attention
         * @returns {*} null if the value was changed 
         */
    
        static setAntifurtoAttenzione = async attenzione => {
            if (attenzione == null || isNaN(parseInt(attenzione)))
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("attenzione must be a set integer");
            const val = parseInt(attenzione);
    
            if (val < 0 || val > 100)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("attenzione must be between 0 and 100");
            const url = Api.baseURL + "antifurto/attenzione/";
            const response = await fetch(url, {
                method: "PUT",
                headers: {
                    "Content-Type": "application/json"
                },
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                body: JSON.stringify({attenzione:val})
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            });
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return null;
    
            else
                throw await response.json();
        };
        // /api/antifurto/soglia/
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
        /**
         * sets the value of the antifurto's threshold
         * @param {Number} soglia the user's value of the antifurto's threshold
         * @returns {*} null if the value was changed
         */
    
        static setAntifurtoSoglia = async soglia => {
            if (soglia == null || isNaN(parseInt(soglia)))
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("soglia must be a set integer");
            const val = parseInt(soglia);
    
            if (val < 0 || val > 100)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                throw new Error("soglia must be between 0 and 100");
            const url = Api.baseURL + "antifurto/soglia/";
            const response = await fetch(url, {
                method: "PUT",
                headers: {
                    "Content-Type": "application/json"
                },
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                body: JSON.stringify({soglia:val})
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
            });
    
            if (response.ok)
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
                return null;
    
            else
                throw await response.json();
        };
    
    Alfredo Chissotti's avatar
    Alfredo Chissotti committed
    }
    
    export default Api;