diff options
Diffstat (limited to 'conduits/memofileconduit/memofile.cc')
-rw-r--r-- | conduits/memofileconduit/memofile.cc | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/conduits/memofileconduit/memofile.cc b/conduits/memofileconduit/memofile.cc new file mode 100644 index 0000000..3a7ff6c --- /dev/null +++ b/conduits/memofileconduit/memofile.cc @@ -0,0 +1,239 @@ +/* memofile.cc KPilot +** +** Copyright (C) 2004-2007 by Jason 'vanRijn' Kasper +** +*/ + +/* +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU Lesser General Public License as published by +** the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser 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 "memofile.h" + +Memofile::Memofile(PilotMemo * memo, TQString categoryName, TQString fileName, TQString baseDirectory) : + PilotMemo(memo,memo->text()), _categoryName(categoryName), _filename(fileName), _baseDirectory(baseDirectory) +{ + _lastModified = 0; + _size = 0; + _modified = _modifiedByPalm = false; +} + +Memofile::Memofile(recordid_t id, int category, uint lastModifiedTime, uint size, + TQString categoryName, TQString fileName, TQString baseDirectory) : + PilotMemo(), _categoryName(categoryName), + _filename(fileName),_baseDirectory(baseDirectory) +{ + setID(id); + PilotRecordBase::setCategory(category); + _lastModified = lastModifiedTime; + _size = size; + _modified = _modifiedByPalm = false; +} + +Memofile::Memofile(int category, TQString categoryName, TQString fileName, TQString baseDirectory) : + PilotMemo(), + _categoryName(categoryName), _filename(fileName), _baseDirectory(baseDirectory) +{ + setID(0); + _new = true; + PilotRecordBase::setCategory(category); + _modified = true; + _modifiedByPalm = false; + _lastModified = 0; + _size = 0; +} + +bool Memofile::load() +{ + FUNCTIONSETUP; + if (filename().isEmpty()) { + DEBUGKPILOT << fname + << ": I was asked to load, but have no filename to load. " + << endl; + return false; + } + + TQFile f( filenameAbs() ); + if ( !f.open( IO_ReadOnly ) ) { + DEBUGKPILOT << fname + << ": Couldn't open file: [" << filenameAbs() << "] to read. " + << endl; + return false; + } + + TQTextStream ts( &f ); + + TQString text,title,body; + title = filename(); + body = ts.read(); + + // funky magic. we want the text of the memofile to have the filename + // as the first line.... + if (body.startsWith(title)) { + text = body; + } else { + DEBUGKPILOT << fname + << ": text of your memofile: [" << filename() + << "] didn't include the filename as the first line. fixing it..." << endl; + text = title + CSL1("\n") + body; + } + + // check length of text. if it's over the allowable length, warn user. + // NOTE: We don't need to truncate this here, since PilotMemo::setText() + // does it for us. + int _len = text.length(); + int _maxlen = PilotMemo::MAX_MEMO_LEN; + if (_len > _maxlen) { + DEBUGKPILOT << fname << ": memofile: [" << filename() + << "] length: [" << _len << "] is over maximum: [" + << _maxlen << "] and will be truncated to fit." << endl; + } + + setText(text); + f.close(); + + return true; +} + +void Memofile::setID(recordid_t i) +{ + if (i != id()) + _modifiedByPalm = true; + + PilotMemo::setID(i); +} + +bool Memofile::save() +{ + bool result = true; + + if ((isModified() && isLoaded()) || _modifiedByPalm) { + result = saveFile(); + } + + return result; +} + +bool Memofile::deleteFile() +{ + FUNCTIONSETUP; + DEBUGKPILOT << fname + << ": deleting file: [" << filenameAbs() << "]." << endl; + return TQFile::remove(filenameAbs()); + +} + +bool Memofile::saveFile() +{ + FUNCTIONSETUP; + + if (filename().isEmpty()) { + DEBUGKPILOT << fname + << ": I was asked to save, but have no filename to save to. " + << endl; + return false; + } + + DEBUGKPILOT << fname + << ": saving memo to file: [" + << filenameAbs() << "]" << endl; + + + TQFile f( filenameAbs() ); + if ( !f.open( IO_WriteOnly ) ) { + DEBUGKPILOT << fname + << ": Couldn't open file: [" << filenameAbs() << "] to write your memo to. " + << "This won't end well." << endl; + return false; + } + + TQTextStream stream(&f); + stream << text() << endl; + f.close(); + + _lastModified = getFileLastModified(); + _size = getFileSize(); + + return true; + +} + +bool Memofile::isModified(void) +{ + // first, check to see if this file is deleted.... + if (!fileExists()) { + return true; + } + + bool modByTimestamp = false; + bool modBySize = false; + + if (_lastModified > 0) + modByTimestamp = isModifiedByTimestamp(); + + if (_size > 0) + modBySize = isModifiedBySize(); + + bool ret = _modified || modByTimestamp || modBySize; + + return ret; +} + +bool Memofile::isModifiedByTimestamp() +{ + if (_lastModified <=0) { + return true; + } + + uint lastModifiedTime = getFileLastModified(); + if ( lastModifiedTime != _lastModified) { + return true; + } + + return false; +} + +bool Memofile::isModifiedBySize() +{ + if (_size <=0) { + return true; + } + + uint size = getFileSize(); + if ( size != _size) { + return true; + } + + return false; +} + +uint Memofile::getFileLastModified() +{ + TQFileInfo f = TQFileInfo(filenameAbs()); + uint lastModifiedTime = f.lastModified().toTime_t(); + return lastModifiedTime; +} + +uint Memofile::getFileSize() +{ + TQFileInfo f = TQFileInfo(filenameAbs()); + uint size = f.size(); + return size; +} |