diff options
author | Michele Calgaro <[email protected]> | 2021-05-29 19:05:31 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2021-05-29 19:31:17 +0900 |
commit | 66abbed5e08370412b81be1628590898ceeeb604 (patch) | |
tree | b31703c326b690ad90f926f97ce0e92e70bf7cdd /conduits/sysinfoconduit/sysinfo-conduit.cpp | |
parent | 51b78ed87ec5219dc0413aa86132f16cb0a8cab1 (diff) | |
download | kpilot-66abbed5e08370412b81be1628590898ceeeb604.tar.gz kpilot-66abbed5e08370412b81be1628590898ceeeb604.zip |
Renaming of files in preparation for code style tools.
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'conduits/sysinfoconduit/sysinfo-conduit.cpp')
-rw-r--r-- | conduits/sysinfoconduit/sysinfo-conduit.cpp | 611 |
1 files changed, 611 insertions, 0 deletions
diff --git a/conduits/sysinfoconduit/sysinfo-conduit.cpp b/conduits/sysinfoconduit/sysinfo-conduit.cpp new file mode 100644 index 0000000..08c0f14 --- /dev/null +++ b/conduits/sysinfoconduit/sysinfo-conduit.cpp @@ -0,0 +1,611 @@ +/* KPilot +** +** Copyright (C) 2003 by Reinhold Kainhofer +** +*/ + +/* +** This program 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 2 of the License, or +** (at your option) any later version. +** +** This program 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. +** +** You should have received a copy of the GNU General Public License +** along with this program in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to [email protected]. +*/ + +#include "options.h" + +#include <pi-version.h> + +#include <tqtimer.h> +#include <tqdir.h> +#include <tqfileinfo.h> +#include <tqregexp.h> +#include <tdeconfig.h> +#include <kdebug.h> + +#include <pilotSysInfo.h> +#include <pilotUser.h> +#include <pilotCard.h> +#include <kpilotlink.h> +#include <kstandarddirs.h> +#include <pilotSerialDatabase.h> + +#include <sys/utsname.h> + +#include "sysinfo-factory.h" +#include "sysinfo-conduit.moc" +#include "sysinfoSettings.h" + +const TQString SysInfoConduit::defaultpage = CSL1("KPilot System Information Page\n" +"==============================\n" +"(Kpilot was unable to find the correct template file, \n" +"so this simple template was used.)\n\n" +"<!--#ifhardware#\n" +"-) Hardware Information\n" +" DeviceID: #deviceid#\n" +" Device name: #devicename#\n" +" Device model: #devicemodel#\n" +" Manufacturer: #manufacturer#\n" +" Connected via: #devicetype#\n" +"#endifhardware#-->\n" +"\n" +"<!--#ifuser#\n" +"-) User Information\n" +" Handheld User Name: #username#\n" +" Handheld Password: #pw#\n" +" Handheld User ID: #uid#\n" +" Viewer ID: #viewerid#\n" +"#endifuser#-->\n" +"\n" +"<!--#ifmemory#\n" +"-) Memory Information\n" +" ROM: #rom# kB total\n" +" Total RAM: #totalmem# kB total\n" +" Free RAM: #freemem# kB free\n" +"#endifmemory#-->\n" +"\n" +"<!--#ifstorage#\n" +"-) Storage Information\n" +" Number of cards: #cards#\n" +" Memory on cards: #storagemem#\n" +"#endifstorage#-->\n" +"\n" +"<!--#ifdblist#\n" +"-) List of Databases on Handheld\n" +" Available Databases: #dblist(%1,)#\n" +"#endifdblist#-->\n" +"\n" +"<!--#ifrecords#\n" +"-) Number of addresses, to-dos, events, and memos\n" +" Addresses: #addresses# entries in Addressbook\n" +" Events: #events# entries in Calendar\n" +" To-dos: #todos# entries in To-do list\n" +" Memos: #memos# memos\n" +"#endifrecords#-->\n" +"\n" +"<!--#ifsync#\n" +"-) Synchronization Information\n" +" Last sync attempt: #lastsync#\n" +" Last successful sync: #lastsuccsync#\n" +" Last sync with PC (ID): #lastsyncpc#\n" +"#endifsync#-->\n" +"\n" +"<!--#ifpcversion#\n" +"-) Version Information (Desktop)\n" +" Operating System: #os#\n" +" Hostname: #hostname#\n" +" TQt Version: #qt#\n" +" KDE Version: #kde#\n" +" KPilot Version: #kpilot#\n" +" Pilot-Link Version: #pilotlink#\n" +"#endifpcversion#-->\n" +"\n" +"<!--#ifpalmversion#\n" +"-) Version Information (Handheld)\n" +" PalmOS: #palmos#\n" +"#endifpalmversion#-->\n" +"\n" +"<!--#ifdebug#\n" +"-) Debug Information\n" +" #debug#\n" +"#endifdebug#-->\n" +"\n" +"------------------------------------------------------------\n" +"Page created <!--#date#--> by the KPilot System Information conduit.\n" +""); + + + /** possible fields in the templates are: + * - hardware + * - user + * - memory + * - storage + * - dblist + * - recnumber + * - syncinfo + * - pcversion + * - palmversion + * - debug + */ + + +// Something to allow us to check what revision +// the modules are that make up a binary distribution. + +extern "C" +{ + +unsigned long version_conduit_sysinfo = Pilot::PLUGIN_API; + +} + + + +SysInfoConduit::SysInfoConduit(KPilotLink * o, + const char *n, + const TQStringList & a) : + ConduitAction(o, n, a) +{ + FUNCTIONSETUP; + fConduitName=i18n("System Information"); +} + + + +SysInfoConduit::~SysInfoConduit() +{ + FUNCTIONSETUP; +} + + + +void SysInfoConduit::readConfig() +{ + fOutputFile = SysinfoSettings::outputFile(); + fOutputType = (eOutputTypeEnum) SysinfoSettings::outputFormat(); + fTemplateFile = SysinfoSettings::templateFile(); + fHardwareInfo = SysinfoSettings::hardwareInfo(); + fUserInfo = SysinfoSettings::userInfo(); + fMemoryInfo = SysinfoSettings::memoryInfo(); + fStorageInfo = SysinfoSettings::storageInfo(); + fDBList = SysinfoSettings::databaseList(); + fRecordNumber = SysinfoSettings::recordNumbers(); + fSyncInfo = SysinfoSettings::syncInfo(); + fKDEVersion = SysinfoSettings::kDEVersion(); + fPalmOSVersion = SysinfoSettings::palmOSVersion(); + fDebugInfo = SysinfoSettings::debugInformation(); +} + + +/* virtual */ bool SysInfoConduit::exec() +{ + FUNCTIONSETUP; + + readConfig(); + + TQTimer::singleShot(0, this, TQT_SLOT(hardwareInfo())); + return true; +} + +void SysInfoConduit::hardwareInfo() +{ + FUNCTIONSETUP; + if (fHardwareInfo) { + TQString unknown = i18n("unknown"); + + /* Retrieve values for + * - #deviceid# + * - #devicename# + * - #devicemodel# + * - #manufactorer# + * - #devicetype# + */ + KPilotSysInfo sysinfo = fHandle->getSysInfo(); + fValues[CSL1("deviceid")] = TQString::fromLatin1(sysinfo.getProductID()); + + const KPilotCard *device = fHandle->getCardInfo(); + if (device) + { + fValues[CSL1("devicename")] = TQString::fromLatin1(device->getCardName()); + fValues[CSL1("devicemodel")] = unknown; // TODO + fValues[CSL1("manufacturer")] = TQString::fromLatin1(device->getCardManufacturer()); + } + else + { + fValues[CSL1("devicename")] = unknown; + fValues[CSL1("devicemodel")] = unknown; + fValues[CSL1("manufacturer")] = unknown; + } + + fValues[CSL1("devicetype")] = unknown; + + KPILOT_DELETE(device); + keepParts.append(CSL1("hardware")); + } else removeParts.append(CSL1("hardware")); + TQTimer::singleShot(0, this, TQT_SLOT(userInfo())); +} + +void SysInfoConduit::userInfo() +{ + FUNCTIONSETUP; + if (fUserInfo) + { + /* Retrieve values for + * - #username# + * - #uid# + */ + KPilotUser user=fHandle->getPilotUser(); + fValues[CSL1("username")] = user.name(); + if (user.passwordLength()>0) + { + fValues[CSL1("pw")] = i18n("Password set"); + } + else + { + fValues[CSL1("pw")] = i18n("No password set"); + } + fValues[CSL1("uid")] = TQString::number(user.data()->userID); + fValues[CSL1("viewerid")] = TQString::number(user.data()->viewerID); + keepParts.append(CSL1("user")); + } + else + { + removeParts.append(CSL1("user")); + } + TQTimer::singleShot(0, this, TQT_SLOT(memoryInfo())); +} + +void SysInfoConduit::memoryInfo() +{ + FUNCTIONSETUP; + if (fMemoryInfo) { + /* Retrieve values for + * - #rom# + * - #totalmem# + * - #freemem# + */ + const KPilotCard *device = fHandle->getCardInfo(); + if (device) + { + fValues[CSL1("rom")] = TQString::number(device->getRomSize()/1024); + fValues[CSL1("totalmem")] = TQString::number(device->getRamSize()/1024); + fValues[CSL1("freemem")] = TQString::number(device->getRamFree()/1024); + } + keepParts.append(CSL1("memory")); + } else removeParts.append(CSL1("memory")); + TQTimer::singleShot(0, this, TQT_SLOT(storageInfo())); +} + +void SysInfoConduit::storageInfo() +{ + FUNCTIONSETUP; + if (fStorageInfo) { + /* Retrieve values for + * - $cards$ + */ + const KPilotCard *device = fHandle->getCardInfo(1); + if (device) { + fValues[CSL1("cards")] = CSL1("%1 (%2, %3 kB of %3 kB free)") + .arg(TQString::fromLatin1(device->getCardName())) + .arg(TQString::fromLatin1(device->getCardManufacturer())) + .arg(device->getRamFree()/1024) + .arg(device->getRamSize()/1024); + KPILOT_DELETE(device); + } else { + fValues[CSL1("cards")] = i18n("No Cards available via pilot-link"); + } + keepParts.append(CSL1("storage")); + } else removeParts.append(CSL1("storage")); + TQTimer::singleShot(0, this, TQT_SLOT(dbListInfo())); +} + +void SysInfoConduit::dbListInfo() +{ + FUNCTIONSETUP; + if (fDBList) { + /* Retrieve values for + * - #dblist(structure)# + */ + dblist=deviceLink()->getDBList(); + keepParts.append(CSL1("dblist")); + } else removeParts.append(CSL1("dblist")); + TQTimer::singleShot(0, this, TQT_SLOT(recNumberInfo())); +} + +void SysInfoConduit::recNumberInfo() +{ + FUNCTIONSETUP; + if (fRecordNumber) { + /* Retrieve values for + * - #addresses# + * - #events# + * - #todos# + * - #memos# + */ + PilotDatabase *fDatabase = 0L; + TQString ERROR = CSL1("ERROR"); + fValues[CSL1("addresses")] = ERROR; + fValues[CSL1("events")] = ERROR; + fValues[CSL1("todos")] = ERROR; + fValues[CSL1("memos")] = ERROR; + fDatabase = deviceLink()->database(CSL1("AddressDB")); + if (fDatabase) { + fValues[CSL1("addresses")] = TQString::number(fDatabase->recordCount()); + KPILOT_DELETE(fDatabase); + } + fDatabase = deviceLink()->database(CSL1("DatebookDB")); + if (fDatabase) { + fValues[CSL1("events")] = TQString::number(fDatabase->recordCount()); + KPILOT_DELETE(fDatabase); + } + fDatabase = deviceLink()->database(CSL1("ToDoDB")); + if (fDatabase) { + fValues[CSL1("todos")] = TQString::number(fDatabase->recordCount()); + KPILOT_DELETE(fDatabase); + } + fDatabase = deviceLink()->database(CSL1("MemoDB")); + if (fDatabase) { + fValues[CSL1("memos")] = TQString::number(fDatabase->recordCount()); + KPILOT_DELETE(fDatabase); + } + keepParts.append(CSL1("records")); + } else removeParts.append(CSL1("records")); + TQTimer::singleShot(0, this, TQT_SLOT(syncInfo())); +} + +void SysInfoConduit::syncInfo() +{ + FUNCTIONSETUP; + if (fSyncInfo) { + /* Retrieve values for + * - #lastsync# + * - #lastsuccsync# + * - #lastsyncpc# + */ + KPilotUser user = deviceLink()->getPilotUser(); + time_t lastsync = user.getLastSyncDate(); + TQDateTime qlastsync; + qlastsync.setTime_t(lastsync); + fValues[CSL1("lastsync")] = qlastsync.toString(Qt::LocalDate); + lastsync = user.getLastSuccessfulSyncDate(); + qlastsync.setTime_t(lastsync); + fValues[CSL1("lastsuccsync")] = qlastsync.toString(Qt::LocalDate); + fValues[CSL1("lastsyncpc")] = TQString::number(user.getLastSyncPC()); + keepParts.append(CSL1("sync")); + } else removeParts.append(CSL1("sync")); + TQTimer::singleShot(0, this, TQT_SLOT(pcVersionInfo())); +} + +void SysInfoConduit::pcVersionInfo() +{ + FUNCTIONSETUP; + if (fKDEVersion) { + /* Retrieve values for + * - #os# + * - #qt# + * - #kde# + * - #kpilot# + * - #pilotlink# + */ + fValues[CSL1("kpilot")] = TQString::fromLatin1(KPILOT_VERSION); + fValues[CSL1("kde")] = i18n("unknown"); + fValues[CSL1("qt")] = i18n("unknown"); + fValues[CSL1("os")] = i18n("unknown"); + fValues[CSL1("hostname")] = i18n("unknown"); + struct utsname name; + if (uname (&name) >= 0) { + fValues[CSL1("os")] = CSL1("%1 %3, %5") + .arg(TQString::fromLatin1(name.sysname)) + .arg(TQString::fromLatin1(name.release)) + .arg(TQString::fromLatin1(name.machine)); + fValues[CSL1("hostname")] = CSL1("%2").arg(TQString::fromLatin1(name.nodename)); + } +#ifdef TDE_VERSION_STRING + fValues[CSL1("kde")] = TQString::fromLatin1(TDE_VERSION_STRING); +#endif +#ifdef TQT_VERSION_STR + fValues[CSL1("qt")] = TQString::fromLatin1(TQT_VERSION_STR); +#endif + fValues[CSL1("pilotlink")] = CSL1("%1.%2.%3%4") + .arg(PILOT_LINK_VERSION) + .arg(PILOT_LINK_MAJOR) + .arg(PILOT_LINK_MINOR) +#ifdef PILOT_LINK_PATCH + .arg(TQString::fromLatin1(PILOT_LINK_PATCH)); +#else + .arg(TQString()); +#endif + keepParts.append(CSL1("pcversion")); + } else removeParts.append(CSL1("pcversion")); + TQTimer::singleShot(0, this, TQT_SLOT(palmVersionInfo())); +} + +void SysInfoConduit::palmVersionInfo() +{ + FUNCTIONSETUP; + if (fPalmOSVersion) { + /* Retrieve values for + * - #palmos# + */ +/* fValues["palmos"] = TQString("PalmOS %1.%2 (compat %3.%4)") + .arg(fHandle->getSysInfo()->getMajorVersion()) + .arg(fHandle->getSysInfo()->getMinorVersion()) + .arg(fHandle->getSysInfo()->getCompatMajorVersion()) + .arg(fHandle->getSysInfo()->getCompatMinorVersion());*/ + KPilotSysInfo i = deviceLink()->getSysInfo(); + fValues[CSL1("palmos")] = CSL1("PalmOS %1.%2").arg(i.getMajorVersion()).arg(i.getMinorVersion()); + + keepParts.append(CSL1("palmversion")); + } else removeParts.append(CSL1("palmversion")); + TQTimer::singleShot(0, this, TQT_SLOT(debugInfo())); +} + +void SysInfoConduit::debugInfo() +{ + FUNCTIONSETUP; + if (fDebugInfo) { + /* Retrieve values for + * - #debug# + */ + fValues[CSL1("debug")] = i18n("No debug data"); + keepParts.append(CSL1("debug")); + } else removeParts.append(CSL1("debug")); + TQTimer::singleShot(0, this, TQT_SLOT(writeFile())); +} + +void SysInfoConduit::writeFile() +{ + FUNCTIONSETUP; + + fValues[CSL1("date")] = TQDateTime::currentDateTime().toString(Qt::LocalDate); + + TQString output; + // Open the template file + TQString templatefile; + switch(fOutputType) + { + case eOutputText: + templatefile=locate("data", CSL1("kpilot/sysinfoconduit/Template.txt")); + break; + case eOutputTemplate: + templatefile=fTemplateFile; + break; + case eOutputHTML: + default: + templatefile=locate("data", CSL1("kpilot/sysinfoconduit/Template.html")); + break; + } + + // Read in the template, close the file + bool loaded=false; + if (!templatefile.isEmpty()){ +#ifdef DEBUG + DEBUGKPILOT<<"Loading template file "<<templatefile<<endl; +#endif + TQFile infile(templatefile); + if (infile.open(IO_ReadOnly)) { + TQTextStream instream(&infile); + output = instream.read(); + infile.close(); + loaded=true; + } + } + + if (!loaded) + { + WARNINGKPILOT << "Loading template file " << templatefile + <<" failed. Using default template instead." << endl; + output=defaultpage; + } + + // Remove all parts not extracted + for ( TQStringList::Iterator it = removeParts.begin(); it != removeParts.end(); ++it ) { + TQRegExp re(CSL1("<!--#if%1#.*#endif%1#-->").arg(*it).arg(*it)); + re.setMinimal(true); + output.remove(re); + } + for ( TQStringList::Iterator it = keepParts.begin(); it != keepParts.end(); ++it ) { + TQRegExp re(CSL1("<!--#if%1#(.*)#endif%1#-->").arg(*it).arg(*it)); + re.setMinimal(true); + output.replace(re, CSL1("\\1")); + } + + // Do a loop through all keys in fValues + TQMap<TQString,TQString>::Iterator it; + for ( it = fValues.begin(); it != fValues.end(); ++it ) { + output.replace(CSL1("#%1#").arg(it.key()), it.data()); + } + + // Insert the list of databases + TQRegExp re(CSL1("#dblist\\[(.*)\\]#")); + re.setMinimal(true); + while (re.search(output)>=0){ + TQString dbstring; + TQString subpatt=re.cap(1); + for (KPilotLink::DBInfoList::ConstIterator i = dblist.begin(); i != dblist.end(); ++i ) { + DBInfo dbi = *i; + TQString newpatt(subpatt); + char tmpchr[5]; + ::memset(&tmpchr[0], 0, 5); + /* Patterns for the dblist argument: + * %0 .. Database name + * %1 .. type + * %2 .. creator + * %3 .. index + * %4 .. flags + * %5 .. miscFlags + * %6 .. version + * %7 .. createDate + * %8 .. modifyDate + * %9 .. backupDate + */ + newpatt.replace(CSL1("%0"), TQString::fromLatin1(dbi.name)); + set_long(&tmpchr[0],dbi.type); + newpatt.replace(CSL1("%1"), TQString::fromLatin1(tmpchr)); + set_long(&tmpchr[0],dbi.creator); + newpatt.replace(CSL1("%2"), TQString::fromLatin1(tmpchr)); + newpatt.replace(CSL1("%3"), TQString::number(dbi.index)); + newpatt.replace(CSL1("%4"), TQString::number(dbi.flags)); + newpatt.replace(CSL1("%5"), TQString::number(dbi.miscFlags)); + newpatt.replace(CSL1("%6"), TQString::number(dbi.version)); + TQDateTime tm; + tm.setTime_t(dbi.createDate); + newpatt.replace(CSL1("%7"), tm.toString(Qt::LocalDate)); + tm.setTime_t(dbi.modifyDate); + newpatt.replace(CSL1("%8"), tm.toString(Qt::LocalDate)); + tm.setTime_t(dbi.backupDate); + newpatt.replace(CSL1("%9"), tm.toString(Qt::LocalDate)); + + dbstring.append(newpatt); + } + // Now, just replace the whole found pattern by the string we just constructed. + output.replace(re.cap(0), dbstring); + } + + // Write out the result + TQFile outfile(fOutputFile); +#ifdef DEBUG + DEBUGKPILOT << fname << ": Writing file <" << fOutputFile << ">" << endl; +#endif + if (fOutputFile.isEmpty() || (!outfile.open(IO_WriteOnly)) ) { + TQFileInfo fi(TQDir::home(), CSL1("KPilotSysInfo.")+TQFileInfo(templatefile).extension() ); + fOutputFile=fi.absFilePath(); + WARNINGKPILOT << "Unable to open output file, using " << fOutputFile << " instead." << endl; + emit logMessage(i18n("Unable to open output file, using %1 instead.").arg(fOutputFile)); + outfile.setName(fOutputFile); + if (!outfile.open(IO_WriteOnly)) { + WARNINGKPILOT<< "Unable to open " << fOutputFile << endl; + emit logError(i18n("Unable to open %1").arg(fOutputFile)); + TQTimer::singleShot(0, this, TQT_SLOT(cleanup())); + return; + } + } + + // Finally, write the actual text out to the file. + TQTextStream outstream(&outfile); + outstream<<output; + outfile.close(); + + emit logMessage(i18n("Handheld system information written to the file %1").arg(fOutputFile)); + TQTimer::singleShot(0, this, TQT_SLOT(cleanup())); +} + +void SysInfoConduit::cleanup() +{ + FUNCTIONSETUP; + // Nothing to clean up so far (Do I have memory leaks somewhere?) + emit syncDone(this); +} |