///////////////////////////////////////////////////////////////////////////////// // // This file is part of SACAMOS, cable models for EMI simulations in SPICE. // It was developed by the University of Nottingham and the Netherlands Aerospace // Centre (NLR) for ESA under contract number 4000112765/14/NL/HK. // // Copyright (C) 2015 - 2018 University of Nottingham // // SACAMOS is free software: you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation, either version 3 of the License, or (at your option) any later // version. // // SACAMOS is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. // // A copy of the GNU General Public License version 3 can be found in the // file GNU_GPL_v3 in the root or at . // // wxWidgets is currently licenced under the "wxWindows Library Licence". // A copy of the wxWindows Library Licence, Version 3.1 can be found in the file // wxWindows_Library_Licence_v3-1 in the root or at: // // // // The University of Nottingham can be contacted at: ggiemr@nottingham.ac.uk // // File Contents: // // NAME // SW1_GUIApp.cpp // // DESCRIPTIONbre // Main application GUI for SACAMOS // // AUTHOR(S) // Steve Greedy // ///////////////////////////////////////////////////////////////////////////////// #include "SW1_GUIApp.h" //(*AppHeaders #include "SW1_GUIMain.h" #include //*) IMPLEMENT_APP(SW1_GUIApp); bool SW1_GUIApp::OnInit() { wxTextFile BuildFile; wxString systeminfo, buildtext, guiversion, cmdversion; wxDateTime DateToday = wxDateTime::Now(); wxString str = DateToday.Format(wxT("%d-%m-%y"), wxDateTime::Local ); string Date = str.ToStdString(); string updatemessage; Logger::instance().log(Date, Logger::kLogLevelHeader); Logger::instance().log("", Logger::kLogLevelHeader); Logger::instance().log("SACAMOS STARTED", Logger::kLogLevelHeader); Logger::instance().log("===============", Logger::kLogLevelHeader); Logger::instance().log("Host Information:", Logger::kLogLevelHeader); Logger::instance().log("", Logger::kLogLevelHeader); systeminfo = wxGetHostName(); Logger::instance().log(systeminfo.ToStdString(), Logger::kLogLevelHeader); systeminfo = wxPlatformInfo::Get().GetOperatingSystemDescription(); Logger::instance().log(systeminfo.ToStdString(), Logger::kLogLevelHeader); Logger::instance().log("", Logger::kLogLevelHeader); Logger::instance().log("SACAMOS Build:", Logger::kLogLevelHeader); if (BuildFile.Open("resources/Build")) { for (int i = 0; i<8; i++) { buildtext = BuildFile[i]; if (i==1) guiversion = BuildFile[i]; if (i==5) cmdversion = BuildFile[i]; Logger::instance().log(buildtext.ToStdString(), Logger::kLogLevelHeader); } } BuildFile.Close(); wxString os_version = wxGetOsDescription(); wxStringTokenizer tokenizer(os_version, " "); wxString os_type = tokenizer.GetNextToken(); //(*AppInitialize bool wxsOK = true; wxInitAllImageHandlers(); if ( wxsOK ) { // Display splash screen if (splashimage.LoadFile("resources/Sacamos_About.png", wxBITMAP_TYPE_PNG)) { wxSplashScreen *splashscrn = new wxSplashScreen(splashimage, wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT, 2000, NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER|wxSTAY_ON_TOP); } if (os_type=="Windows") { wxYield(); wxSleep(2); //Frame->Show(true); } else { for (int i=0;i<20;i++) { wxYield(); wxMilliSleep(10); } } } //*) // Compare current version against latest release version Logger::instance().log("Checking for Software Update...", Logger::kLogLevelInfo); std::string latest_version,latest_version_number, latest_version_date; std::string current_version,current_version_number, current_version_date; wxString version_temp = ""; wxStringOutputStream out_stream(&version_temp); wxHTTP checkupdate; checkupdate.SetHeader(_T("Content-type"), _T("text/html; charset=utf-8")); checkupdate.SetTimeout(5); checkupdate.Connect(_T("128.243.70.77")); wxApp::IsMainLoopRunning(); wxInputStream *latest_versioninfo; latest_versioninfo = checkupdate.GetInputStream(_T("/UoN/SACAMOS/raw/master/version_information.inc")); if (checkupdate.GetError() == wxPROTO_NOERR) { Logger::instance().log("Connected to SACAMOS Repository", Logger::kLogLevelInfo); latest_versioninfo->Read(out_stream); latest_version = version_temp.ToStdString(); } else { //fail silently & log event Logger::instance().log("Could not connect to SACAMOS Repository", Logger::kLogLevelInfo); } wxDELETE(latest_versioninfo); checkupdate.Close(); if (wxsOK) { SW1_GUIFrame* Frame = new SW1_GUIFrame(0); Frame->Show(true); } std::istringstream stream{latest_version}; if (latest_version != "") { std::getline(stream, latest_version_number); if (latest_version_number != SACAMOS_V_NUMBER) { size_t pos; string latest_version_number_trimmed; pos = latest_version_number.find("="); latest_version_number_trimmed = latest_version_number.substr(pos+2); latest_version_number_trimmed = latest_version_number_trimmed.substr(0,latest_version_number_trimmed.size()-1); string current_version_number_trimmed; pos = SACAMOS_V_NUMBER.find("="); current_version_number_trimmed = SACAMOS_V_NUMBER.substr(pos+2); current_version_number_trimmed = current_version_number_trimmed.substr(0,latest_version_number_trimmed.size()); updatemessage = "You are running SACAMOS " + current_version_number_trimmed + "\n\n"; updatemessage+= "The latest version is " + latest_version_number_trimmed + "\n\n"; updatemessage+= "Please visit www.sacamos.org to download the latest version."; wxString myString(updatemessage); wxMessageBox(updatemessage,"Please Update"); Logger::instance().log("SACAMOS Update Available", Logger::kLogLevelInfo); } else { Logger::instance().log("SACAMOS Uptodate", Logger::kLogLevelInfo); } } return wxsOK; }