import tools from '../unify/tools.js'; import socketMessage from '../unify/socketMessage.js'; import unify from '../unify/unify.js'; import groupsFlat from '../server/themeGroups.js'; export default class debug { objects = new Array(); socketManager = false; parseFilename( filename ) { if( filename[0] == "-" ) { return false; } if( !filename ) { filename = "Unknown"; } var emtpySpaces = 28 - filename.length; for( var c = 0; c < emtpySpaces; c++) { filename += " "; } return filename; } processDebugMessage( message ) { switch( message.parameters.action ) { case "log": this.logDebugMessage( message ); break; case "addObject": this.addDebugObject( message ); break; case "updateFile": this.updateFile( message ); break; } } checkVisible( element ) { return element.offsetWidth > 0 || element.offsetHeight > 0; } getVisibleInherites( className, visible ) { var core = document.cores[0]; this.cacheArray = new Array(); var objects = core.dependencieMap[className]; if( !objects ) { return false; } for (var b = 0; b < objects.length; b++) { var object = objects[b]; if( tools.isVisible( object.element ) || visible ) { this.cacheArray.push( object ); } } console.log("created cache array", this.cacheArray); } async updateFile( message ) { var parameters = message.parameters; var file = parameters.file; var fullPath = file.path + "/" + file.name; var currentPath = "../cache/platforms/"+document.config.os+"/"+document.config.device+"/"+document.config.tint+"/" + fullPath + "?disableCache=" + Math.random(); console.log("message", message); console.log("currentPath", currentPath); var newImport = await import(currentPath); var newInstance = new newImport.default(); unify.extend( newInstance ); console.log("newInstance", newInstance); var className = newInstance.getClassName(); this.getVisibleInherites( className, false ); newInstance.create = false; this.updateMainObjects( newInstance ); this.updateInherites( newInstance ); var that = this; setTimeout(function(){ that.getVisibleInherites( className, true ); that.updateInherites( newInstance ); }, 1000); //function () { //this.getVisibleInherites( className, true ); //this.updateInherites( newInstance ); //} } updateInherites() { var objects = this.cacheArray; for ( var c = 0; c < objects.length; c++ ) { var object = objects[c]; this.instantiateInheritence( object ); } } updateMainObjects( newInstance ) { var core = document.cores[0]; var idObjects = core.classObjects[ newInstance.getClassName() ]; if( idObjects ) { idObjects = idObjects.filter( n => n ); console.log( idObjects ); for ( var i = 0; i < idObjects.length; i++ ) { var object = idObjects[i]; object.updateProperties( newInstance ); } } } async instantiateInheritence( object ) { var newConstructor = object.constructor; if( object.__sourcePath ) { var currentPath = "../cache/platforms/" + document.config.os + "/" + document.config.device + "/" + document.config.tint +"/" + object.__sourcePath + "?disableCache=" + Math.random(); var newImport = await import( currentPath ); if( newImport.default ) { var newInstance = new newImport.default(); unify.extend( newInstance ); console.log("Hot swap Unify Object", object.getClassName(), object.element, newInstance["background"]); var reload = object.updateProperties( newInstance ); } } else { console.log("error object doesnt have sourcePath", object); } } addDebugObject( message ) { var object = cycle.retrocycle( message.parameters.object ); if( object.applicationPathString ) { console.log( "add object", object ); var div = document.createElement("div"); div.innerHTML = object.applicationPathString; var socket = this.socketManager.socket; div.onclick = function(){ console.log( object.applicationPathString ); var message = new socketMessage(); message.controller = "settings"; message.method = "debugObject"; message.object = object.applicationPathString; socket.send( JSON.stringify( message ) ); this.style.color = "green"; console.log( this.style.color ); }; document.body.appendChild( div ); } } logDebugMessage( message ) { var parameters = message.parameters; var parameter1 = cycle.retrocycle( parameters.parameter1 ); var parameter2 = cycle.retrocycle( parameters.parameter2 ); var parameter3 = cycle.retrocycle( parameters.parameter3 ); if(parameter1 == "clear_console") { console.clear(); } var filename = parameters.filename; if( parameters.lineNumber ) { filename += ":" + parameters.lineNumber; } filename = this.parseFilename( filename ); if( parameters.parameter3 ) { console.log( filename, parameter1, parameter2, parameter3 ); } else if( parameters.parameter2 ) { console.log( filename, parameter1, parameter2 ); } else { console.log( filename, parameter1 ); } } }