c0351ca633
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12810 a1c6a512-1295-4272-9138-f99709370657
270 lines
8.5 KiB
C++
270 lines
8.5 KiB
C++
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* Module: rbutil
|
|
* File: rbutilApp.cpp
|
|
*
|
|
* Copyright (C) 2005 Christi Alice Scarborough
|
|
*
|
|
* All files in this archive are subject to the GNU General Public License.
|
|
* See the file COPYING in the source tree root for full license agreement.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "rbutilApp.h"
|
|
#include "bootloaders.h"
|
|
|
|
GlobalVars* gv = new GlobalVars();
|
|
|
|
IMPLEMENT_APP(rbutilFrmApp)
|
|
|
|
bool rbutilFrmApp::OnInit()
|
|
{
|
|
wxString buf = wxT("");
|
|
|
|
wxLogVerbose(wxT("=== begin rbutilFrmApp::Oninit()"));
|
|
|
|
|
|
gv->stdpaths = new wxStandardPaths();
|
|
|
|
// Get application directory
|
|
// DANGER! GetDataDir() doesn't portably return the application directory
|
|
// We want to use the form below instead, but not until wxWidgets 2.8 is
|
|
// released. *Datadir gives the wrong dir for this on Linux/Mac even on Wx2.8 *
|
|
gv->AppDir = gv->stdpaths->GetExecutablePath().BeforeLast(PATH_SEP_CHR);
|
|
// buf = gv->stdpaths->GetDataDir(); buf.Append(PATH_SEP);
|
|
// gv->AppDir = buf.BeforeLast(PATH_SEP_CHR).c_str();
|
|
|
|
buf = gv->stdpaths->GetUserDataDir();
|
|
if (! wxDirExists(buf) )
|
|
{
|
|
wxLogNull lognull;
|
|
if (! wxMkdir(buf, 0777))
|
|
{
|
|
wxLogFatalError(wxT("Can't create data directory %s"),
|
|
buf.c_str());
|
|
}
|
|
}
|
|
|
|
buf += PATH_SEP wxT("rbutil.log");
|
|
gv->logfile = new wxFFile(buf, wxT("w"));
|
|
if (! gv->logfile->IsOpened() )
|
|
wxLogFatalError(wxT("Unable to open log file"));
|
|
|
|
gv->loggui = new wxLogGui();
|
|
gv->loggui->SetActiveTarget(gv->loggui);
|
|
gv->loggui->SetLogLevel(wxLOG_Message);
|
|
gv->logchain = new wxLogChain(
|
|
gv->logstderr = new wxLogStderr(gv->logfile->fp() ) );
|
|
|
|
buf = buf.Left(buf.Len() - 10);
|
|
buf.Append(wxT("download"));
|
|
if (! wxDirExists(buf) ) wxMkdir(buf, 0777);
|
|
|
|
wxFileSystem::AddHandler(new wxInternetFSHandler);
|
|
wxFileSystem::AddHandler(new wxZipFSHandler);
|
|
|
|
if (!ReadGlobalConfig(NULL))
|
|
{
|
|
ERR_DIALOG(gv->ErrStr->GetData(), wxT("Rockbox Utility"));
|
|
return FALSE;
|
|
}
|
|
ReadUserConfig();
|
|
|
|
rbutilFrm *myFrame = new rbutilFrm(NULL);
|
|
SetTopWindow(myFrame);
|
|
myFrame->Show(TRUE);
|
|
|
|
initIpodpatcher(); // reserve mem for ipodpatcher
|
|
wxInitAllImageHandlers(); //init Image handlers
|
|
|
|
wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()"));
|
|
return TRUE;
|
|
}
|
|
|
|
int rbutilFrmApp::OnExit()
|
|
{
|
|
wxLogVerbose(wxT("=== begin rbUtilFrmApp::OnExit()"));
|
|
|
|
WriteUserConfig();
|
|
|
|
gv->logfile->Close();
|
|
/* Enabling this code causes the program to crash. I
|
|
* have no idea why. (possibly because deleting non existing objects ? :-) )
|
|
wxLog::DontCreateOnDemand();
|
|
// Free a bunch of structures.
|
|
delete gv->GlobalConfig;
|
|
delete gv->ErrStr;
|
|
delete gv->stdpaths;
|
|
delete gv->platform;
|
|
|
|
delete gv->logstderr;
|
|
delete gv->logchain;
|
|
delete gv->logfile;
|
|
delete gv->loggui;
|
|
*/
|
|
wxLogVerbose(wxT("=== end rbUtilFrmApp::OnExit()"));
|
|
return 0;
|
|
}
|
|
|
|
bool rbutilFrmApp::ReadGlobalConfig(rbutilFrm* myFrame)
|
|
{
|
|
wxString buf, tmpstr, stack;
|
|
wxLogVerbose(wxT("=== begin rbutilFrmApp::ReadGlobalConfig(%p)"),
|
|
(void*) myFrame);
|
|
|
|
// Cross-platform compatibility: look for rbutil.ini in the same dir as the
|
|
// executable before trying the standard data directory. On Windows these
|
|
// are of course the same directory.
|
|
buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"), gv->AppDir.c_str() );
|
|
|
|
// if (! wxFileExists(buf) )
|
|
// {
|
|
// gv->ResourceDir = gv->stdpaths->GetResourcesDir();
|
|
// buf.Printf(wxT("%s" PATH_SEP "rbutil.ini"),
|
|
// gv->ResourceDir.c_str() );
|
|
// } else
|
|
// {
|
|
// gv->ResourceDir = gv->AppDir;
|
|
// }
|
|
|
|
wxFileInputStream* cfgis = new wxFileInputStream(buf);
|
|
|
|
if (!cfgis->CanRead()) {
|
|
gv->ErrStr = new wxString(wxT("Unable to open configuration file"));
|
|
return false;
|
|
}
|
|
|
|
gv->GlobalConfig = new wxFileConfig(*cfgis);
|
|
gv->GlobalConfigFile = buf;
|
|
|
|
unsigned int i = 0;
|
|
|
|
stack = gv->GlobalConfig->GetPath();
|
|
gv->GlobalConfig->SetPath(wxT("/platforms"));
|
|
while(gv->GlobalConfig->Read(buf.Format(wxT("platform%d"), i + 1),
|
|
&tmpstr)) {
|
|
wxString cur = tmpstr;
|
|
//gv->plat_id.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/name"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_name.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/platform"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_id.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/released"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_released.Add( (tmpstr == wxT("yes")) ? true : false ) ;
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/needsbootloader"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_needsbootloader.Add( (tmpstr == wxT("yes")) ? true : false ) ;
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/bootloadermethod"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_bootloadermethod.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/bootloadername"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_bootloadername.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/autodetect"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_autodetect.Add( (tmpstr == wxT("yes")) ? true : false ) ;
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/combinedname"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_combinedname.Add(tmpstr);
|
|
gv->GlobalConfig->Read(buf.Format(wxT("/%s/resolution"),
|
|
cur.c_str()), &tmpstr);
|
|
gv->plat_resolution.Add(tmpstr);
|
|
|
|
i++;
|
|
}
|
|
|
|
gv->GlobalConfig->SetPath(wxT("/general"));
|
|
gv->GlobalConfig->Read(wxT("default_platform"), &tmpstr, wxT("cthulhu"));
|
|
|
|
for (i=0; i< gv->plat_id.GetCount(); i++) {
|
|
if (gv->plat_id[i] == tmpstr) gv->curplatnum = i;
|
|
}
|
|
|
|
gv->GlobalConfig->Read(wxT("last_release"), &tmpstr);
|
|
gv->last_release = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("download_url"), &tmpstr);
|
|
gv->download_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("daily_url"), &tmpstr);
|
|
gv->daily_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("bleeding_url"), &tmpstr);
|
|
gv->bleeding_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("server_conf_url"), &tmpstr);
|
|
gv->server_conf_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("font_url"), &tmpstr);
|
|
gv->font_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("prog_name"), &tmpstr);
|
|
gv->prog_name = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("bootloader_url"), &tmpstr);
|
|
gv->bootloader_url = tmpstr;
|
|
|
|
gv->GlobalConfig->Read(wxT("themes_url"), &tmpstr);
|
|
gv->themes_url = tmpstr;
|
|
|
|
#ifdef __WXMSW__
|
|
gv->curdestdir = wxT("D:\\");
|
|
#else
|
|
gv->curdestdir = wxT("/mnt");
|
|
#endif
|
|
gv->GlobalConfig->SetPath(stack);
|
|
|
|
wxLogVerbose(wxT("=== end rbutilFrmApp::ReadGlobalConfig()"));
|
|
return true;
|
|
}
|
|
|
|
void rbutilFrmApp::ReadUserConfig()
|
|
{
|
|
wxString buf, str, stack;
|
|
|
|
buf.Printf(wxT("%s" PATH_SEP "RockboxUtility.cfg"),
|
|
gv->AppDir.c_str());
|
|
|
|
if (wxFileExists(buf) )
|
|
{
|
|
gv->portable = true;
|
|
}
|
|
else
|
|
{
|
|
gv->portable = false;
|
|
buf.Printf(wxT("%s" PATH_SEP "%s"),
|
|
gv->stdpaths->GetUserDataDir().c_str(), wxT("RockboxUtility.cfg"));
|
|
}
|
|
|
|
gv->UserConfig = new wxFileConfig(wxEmptyString, wxEmptyString, buf);
|
|
gv->UserConfigFile = buf;
|
|
gv->UserConfig->Set(gv->UserConfig); // Store wxWidgets internal settings
|
|
stack = gv->UserConfig->GetPath();
|
|
|
|
gv->UserConfig->SetPath(wxT("/defaults"));
|
|
if (gv->UserConfig->Read(wxT("curdestdir"), &str) ) gv->curdestdir = str;
|
|
if (gv->UserConfig->Read(wxT("curplatform"), &str) ) gv->curplat = str;
|
|
gv->UserConfig->SetPath(stack);
|
|
}
|
|
|
|
void rbutilFrmApp::WriteUserConfig()
|
|
{
|
|
gv->UserConfig->SetPath(wxT("/defaults"));
|
|
gv->UserConfig->Write(wxT("curdestdir"), gv->curdestdir);
|
|
gv->UserConfig->Write(wxT("curplatform"), gv->curplat);
|
|
|
|
delete gv->UserConfig;
|
|
|
|
}
|
|
|