/////////////////////////////////////////////////////////////////////////////////
//
// 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;
}