summaryrefslogtreecommitdiffstats
path: root/kpilot/kpilot/internalEditorAction.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/kpilot/internalEditorAction.cc')
-rw-r--r--kpilot/kpilot/internalEditorAction.cc394
1 files changed, 0 insertions, 394 deletions
diff --git a/kpilot/kpilot/internalEditorAction.cc b/kpilot/kpilot/internalEditorAction.cc
deleted file mode 100644
index bc4bdb3e..00000000
--- a/kpilot/kpilot/internalEditorAction.cc
+++ /dev/null
@@ -1,394 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 2003 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-*/
-
-/*
-** 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 kde-pim@kde.org
-*/
-
-#include <options.h>
-
-#include <tqtimer.h>
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <kmessagebox.h>
-#include <kdialog.h>
-#include <ktextedit.h>
-#include <kdialogbase.h>
-
-#include <pilotRecord.h>
-#include <pilotLocalDatabase.h>
-#include <pilotDatabase.h>
-#include <pilotSerialDatabase.h>
-#include "kpilotConfig.h"
-#include "internalEditorAction.h"
-
-#include <pilotAddress.h>
-#include <pilotMemo.h>
-#include <pilotDateEntry.h>
-#include <pilotTodoEntry.h>
-
-#include "khexedit/byteseditinterface.h"
-using namespace KHE;
-
-InternalEditorAction::InternalEditorAction(KPilotLink * p) :
- SyncAction(p, "internalSync")
-{
- FUNCTIONSETUP;
-}
-
-bool InternalEditorAction::exec()
-{
- FUNCTIONSETUP;
- emit logMessage(i18n("[Internal Editors]"));
- fInternalEditorSyncStatus=eSyncStarted;
- TQTimer::singleShot(0, this, TQT_SLOT(syncDirtyDB()));
- return true;
-}
-
-void InternalEditorAction::syncDirtyDB()
-{
- FUNCTIONSETUP;
-
- if (fInternalEditorSyncStatus!=eSyncDirtyDB)
- {
- fInternalEditorSyncStatus=eSyncDirtyDB;
- dirtyDBs=KPilotSettings::dirtyDatabases();
- emit logMessage(i18n("Databases with changed records: %1").arg(dirtyDBs.join(CSL1(", "))));
- dbIter=dirtyDBs.begin();
- }
- else
- {
- dbIter++;
- }
- if (dbIter==dirtyDBs.end())
- {
- KPilotSettings::setDirtyDatabases(TQStringList());
- KPilotConfig::sync();
- TQTimer::singleShot(0, this, TQT_SLOT(syncFlagsChangedDB()));
- return;
- }
-#ifdef DEBUG
- DEBUGKPILOT<<"syncDirtyDB for DB "<<(*dbIter)<<endl;
-#endif
- // open the local and the serial database and copy every
- // changed record from the PC to the handheld
-
- PilotRecord*rec=0L;
- PilotLocalDatabase*localDB=new PilotLocalDatabase(*dbIter, false);
- PilotDatabase *serialDB= deviceLink()->database(*dbIter);
- if (!localDB->isOpen() || !serialDB->isOpen())
- {
- emit logError(i18n("Unable to open the serial or local database for %1. "
- "Skipping it.").arg(*dbIter));
- goto nextDB;
- }
- while ( (rec=localDB->readNextModifiedRec()) )
- {
- int id=rec->id();
-#ifdef DEBUG
- DEBUGKPILOT<<"ID of modified record is "<<id<<endl;
- DEBUGKPILOT<<endl<<endl;
-#endif
- if (id>0)
- {
- PilotRecord*serrec=serialDB->readRecordById(id);
- if (serrec && (serrec->isModified()) )
- {
- bool kpilotOverrides=queryUseKPilotChanges(*dbIter, id, rec, serrec, localDB);
- if (kpilotOverrides)
- serialDB->writeRecord(rec);
- else
- localDB->writeRecord(serrec);
- }
- else
- serialDB->writeRecord(rec);
- }
- else
- {
-#ifdef DEBUG
- DEBUGKPILOT<<"Generating ID for Record "<<rec->id()<<" with data "<<endl;
- DEBUGKPILOT<<rec->data()<<endl;
- DEBUGKPILOT<<"-----------------------------------------"<<endl;
-#endif
- int id=serialDB->writeRecord(rec);
- rec->setID(id);
-#ifdef DEBUG
- DEBUGKPILOT<<"New ID is "<<id<<endl;
- DEBUGKPILOT<<endl<<endl<<endl;
-#endif
- //localDB->writeRecord(rec);
- localDB->updateID(id);
- }
- KPILOT_DELETE(rec);
- }
-
-nextDB:
- localDB->resetSyncFlags();
- KPILOT_DELETE(localDB);
- KPILOT_DELETE(serialDB);
- TQTimer::singleShot(0, this, TQT_SLOT(syncDirtyDB()));
-}
-
-bool InternalEditorAction::queryUseKPilotChanges(TQString dbName, recordid_t id, PilotRecord*localrec, PilotRecord*serialrec, PilotDatabase*db)
-{
- FUNCTIONSETUP;
- bool knownDB=true;
- TQString localEntry, serialEntry, recType(i18n("record"));
-
- if (dbName==CSL1("AddressDB") && db)
- {
- PilotAddressInfo info(db);
-
- PilotAddress localAddr(localrec);
- PilotAddress serialAddr(serialrec);
- localEntry=localAddr.getTextRepresentation(&info,Qt::RichText);
- serialEntry=serialAddr.getTextRepresentation(&info,Qt::RichText);
- recType=i18n("address");
- }
- else
- if (dbName==CSL1("ToDoDB") && db)
- {
- PilotToDoInfo info(db);
-
- PilotTodoEntry localTodo(localrec);
- PilotTodoEntry serialTodo(serialrec);
- localEntry=localTodo.getTextRepresentation(Qt::RichText);
- serialEntry=serialTodo.getTextRepresentation(Qt::RichText);
- recType=i18n("to-do entry");
- }
- else
- if (dbName==CSL1("MemoDB"))
- {
- PilotMemo localMemo(localrec);
- PilotMemo serialMemo(serialrec);
- localEntry=localMemo.getTextRepresentation(Qt::RichText);
- serialEntry=serialMemo.getTextRepresentation(Qt::RichText);
- recType=i18n("memo");
- }
- else
- if (dbName==CSL1("DatebookDB"))
- {
- PilotDateInfo info(db);
-
- PilotDateEntry localEvent(localrec);
- PilotDateEntry serialEvent(serialrec);
- localEntry=localEvent.getTextRepresentation(Qt::RichText);
- serialEntry=serialEvent.getTextRepresentation(Qt::RichText);
- recType=i18n("calendar entry");
- }
- else
- {
- knownDB=false;
- }
-
- TQString dialogText(i18n("The %1 with ID %2 of the database \"%3\" was changed "
- "on the handheld and in the internal editor. Shall the changes in KPilot be copied to the handheld, and so override the changes there?").
- arg(recType).arg(id).arg(dbName));
-
- KDialogBase*resdlg=new KDialogBase(0L, "internalresolutiondialog", true,
- i18n("Conflict in database %1").arg(*dbIter),
- KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true,
- i18n("Use KPilot"), i18n("Use Handheld") );
- resdlg->setButtonText(KDialogBase::Ok, i18n("Use &KPilot"));
- resdlg->setButtonText(KDialogBase::Cancel, i18n("Use &Handheld"));
-
- TQWidget*page=new TQWidget(resdlg);
- resdlg->setMainWidget(page);
- TQGridLayout*layout = new TQGridLayout( page, 1, 1);
-
- TQLabel *label=new TQLabel(dialogText, page);
- label->setAlignment( TQLabel::WordBreak );
- layout->addMultiCellWidget( label, 0,0, 0,1 );
-
- layout->addItem( new TQSpacerItem( 20, 10, TQSizePolicy::Minimum,
- TQSizePolicy::Fixed ), 1, 0 );
-
- if (knownDB)
- {
- label=new TQLabel(i18n("Entry in KPilot"), page);
- layout->addWidget( label, 2,0);
-
- KTextEdit*textBrowser = new KTextEdit(CSL1("<qt>")+localEntry+CSL1("</qt>"), TQString::null, page);
- textBrowser->setReadOnly(true);
- layout->addWidget( textBrowser, 3,0);
-
- label=new TQLabel(i18n("Entry on Handheld"), page);
- layout->addWidget( label, 2,1);
-
- textBrowser = new KTextEdit(CSL1("<qt>")+serialEntry+CSL1("</qt>"), TQString::null, page);
- textBrowser->setReadOnly(true);
- layout->addWidget( textBrowser, 3,1);
- }
- else
- {
- label=new TQLabel(i18n("Entry in KPilot"), page);
- layout->addMultiCellWidget( label, 2,2,0,1);
-
- // directly display the record's data:
- TQWidget *hexEdit = KHE::createBytesEditWidget( page, "LocalBufferEdit" );
- if( hexEdit )
- {
- KHE::BytesEditInterface* hexEditIf = KHE::bytesEditInterface( hexEdit );
- Q_ASSERT( hexEditIf ); // This should not fail!
- if( hexEditIf )
- {
- hexEditIf->setData( localrec->data(), localrec->size() );
-// Do we need the following call at all???
-// hexEditIf->setMaxDataSize( localrec->getLen() );
- hexEditIf->setReadOnly( true );
- }
- }
- else
- {
- TQLabel*tmpW = new TQLabel( i18n("To view and edit the record data, please install a hex editor (e.g. khexedit from kdeutils)."), page );
- tmpW->setBackgroundMode( Qt::PaletteMid );
- tmpW->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter | Qt::WordBreak);
- tmpW->setFrameShape( TQFrame::Panel );
- tmpW->setFrameShadow( TQFrame::Sunken );
- hexEdit = tmpW;
- }
- layout->addMultiCellWidget( hexEdit, 3,3,0,1);
-
- label=new TQLabel(i18n("Entry on Handheld"), page);
- layout->addMultiCellWidget( label, 4,4,0,1);
-
- // directly display the record's data:
- hexEdit = KHE::createBytesEditWidget( page, "SerialBufferEdit" );
- if( hexEdit )
- {
- KHE::BytesEditInterface* hexEditIf = KHE::bytesEditInterface( hexEdit );
- Q_ASSERT( hexEditIf ); // This should not fail!
- if( hexEditIf )
- {
- hexEditIf->setData( serialrec->data(), serialrec->size() );
-// Do we need the following call at all???
-// hexEditIf->setMaxDataSize( serialrec->getLen() );
- hexEditIf->setReadOnly( true );
- }
- }
- else
- {
- TQLabel*tmpW = new TQLabel( i18n("To view and edit the record data, please install a hex editor (e.g. khexedit from kdeutils)."), page );
- tmpW->setBackgroundMode( Qt::PaletteMid );
- tmpW->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter | Qt::WordBreak);
- tmpW->setFrameShape( TQFrame::Panel );
- tmpW->setFrameShadow( TQFrame::Sunken );
- hexEdit = tmpW;
- }
- layout->addMultiCellWidget( hexEdit, 5,5,0,1);
- }
-
- int res=resdlg->exec();
- KPILOT_DELETE(resdlg);
-
- return res==KDialogBase::Accepted;
-}
-
-
-void InternalEditorAction::syncFlagsChangedDB()
-{
- FUNCTIONSETUP;
- if (fInternalEditorSyncStatus!=eSyncFlagsChangedDB)
- {
- fInternalEditorSyncStatus=eSyncFlagsChangedDB;
- dirtyDBs=KPilotSettings::flagsChangedDatabases();
- emit logMessage(i18n("Databases with changed flags: %1").arg(dirtyDBs.join(CSL1(", "))));
- dbIter=dirtyDBs.begin();
- }
- else
- {
- dbIter++;
- }
- if (dbIter==dirtyDBs.end())
- {
- KPilotSettings::setFlagsChangedDatabases(TQStringList());
- KPilotConfig::sync();
- TQTimer::singleShot(0, this, TQT_SLOT(syncAppBlockChangedDB()));
- return;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT<<"syncFlagsChangedDB for DB "<<(*dbIter)<<endl;
-#endif
-emit logError(i18n("Setting the database flags on the handheld is not yet supported."));
-TQTimer::singleShot(0, this, TQT_SLOT(syncAppBlockChangedDB()));
-return;
-
- PilotLocalDatabase*localDB=new PilotLocalDatabase(*dbIter, false);
- PilotDatabase *serialDB=deviceLink()->database(*dbIter);
-
- // open the local and the serial database and copy the flags over
- // TODO: Implement the copying
- // TODO: Is there a way to detect if the flags were changed on the handheld?
-
- KPILOT_DELETE(localDB);
- KPILOT_DELETE(serialDB);
- TQTimer::singleShot(0, this, TQT_SLOT(syncAppBlockChangedDB()));
-}
-
-void InternalEditorAction::syncAppBlockChangedDB()
-{
- FUNCTIONSETUP;
- if (fInternalEditorSyncStatus!=eSyncAppBlockChangedDB)
- {
- fInternalEditorSyncStatus=eSyncAppBlockChangedDB;
- dirtyDBs=KPilotSettings::appBlockChangedDatabases();
- emit logMessage(i18n("Databases with changed AppBlock: %1").arg(dirtyDBs.join(CSL1(", "))));
- dbIter=dirtyDBs.begin();
- }
- else
- {
- dbIter++;
- }
- if (dbIter==dirtyDBs.end())
- {
- KPilotSettings::setAppBlockChangedDatabases(TQStringList());
- KPilotConfig::sync();
- TQTimer::singleShot(0, this, TQT_SLOT(cleanup()));
- return;
- }
-#ifdef DEBUG
- DEBUGKPILOT<<"syncAppBlockChangedDB for DB "<<(*dbIter)<<endl;
-#endif
-
- PilotLocalDatabase*localDB=new PilotLocalDatabase(*dbIter, false);
- PilotDatabase *serialDB=deviceLink()->database(*dbIter);
-
- unsigned char*appBlock=new unsigned char[0xFFFF];
- int len=localDB->readAppBlock(appBlock, 0xFFFF);
- // TODO: Check if the app block was changed on the handheld, and if so, do conflict resolution
- serialDB->writeAppBlock(appBlock, len);
-
- KPILOT_DELETE(localDB);
- KPILOT_DELETE(serialDB);
- TQTimer::singleShot(0, this, TQT_SLOT(syncAppBlockChangedDB()));
-}
-
-void InternalEditorAction::cleanup()
-{
- FUNCTIONSETUP;
- fInternalEditorSyncStatus=eSyncFinished;
- emit syncDone(this);
-}
-
-#include "internalEditorAction.moc"