You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kpilot/conduits/memofileconduit/memofile.cc

240 lines
5.3 KiB

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