diff options
Diffstat (limited to 'knotes/knoteslegacy.cpp')
-rw-r--r-- | knotes/knoteslegacy.cpp | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/knotes/knoteslegacy.cpp b/knotes/knoteslegacy.cpp new file mode 100644 index 000000000..1d239d2d6 --- /dev/null +++ b/knotes/knoteslegacy.cpp @@ -0,0 +1,270 @@ +/******************************************************************* + KNotes -- Notes for the KDE project + + Copyright (c) 2002-2004, Michael Brade <brade@kde.org> + + 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; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*******************************************************************/ + +#include <qfile.h> +#include <qfont.h> +#include <qpoint.h> +#include <qcolor.h> +#include <qstringlist.h> +#include <qtextstream.h> + +#include <kdebug.h> +#include <kapplication.h> +#include <kglobal.h> +#include <kurl.h> +#include <kstandarddirs.h> +#include <ksimpleconfig.h> +#include <kio/netaccess.h> + +#include <unistd.h> + +#include "knoteslegacy.h" +#include "knoteconfig.h" +#include "version.h" + +#include "libkcal/calendarlocal.h" +#include "libkcal/journal.h" + +#include <netwm.h> + +using namespace KCal; + + +void KNotesLegacy::cleanUp() +{ + // remove old (KDE 1.x) local config file if it still exists + QString configfile = KGlobal::dirs()->saveLocation( "config" ) + "knotesrc"; + if ( QFile::exists( configfile ) ) { + KSimpleConfig *test = new KSimpleConfig( configfile ); + test->setGroup( "General" ); + double version = test->readDoubleNumEntry( "version", 1.0 ); + delete test; + + if ( version == 1.0 ) { + if ( !( checkAccess( configfile, W_OK ) && + QFile::remove( configfile ) ) ) + { + kdError(5500) << k_funcinfo << "Could not delete old config file " << configfile << endl; + } + } + } +} + +bool KNotesLegacy::convert( CalendarLocal *calendar ) +{ + bool converted = false; + + QDir noteDir( KGlobal::dirs()->saveLocation( "appdata", "notes/" ) ); + QStringList notes = noteDir.entryList( QDir::Files, QDir::Name ); + for ( QStringList::Iterator note = notes.begin(); note != notes.end(); note++ ) + { + QString file = noteDir.absFilePath( *note ); + KSimpleConfig* test = new KSimpleConfig( file ); + test->setGroup( "General" ); + double version = test->readDoubleNumEntry( "version", 1.0 ); + + if ( version < 3.0 ) + { + delete test; + + // create the new note + Journal *journal = new Journal(); + bool success; + + if ( version < 2.0 ) + success = convertKNotes1Config( journal, noteDir, *note ); + else + success = convertKNotes2Config( journal, noteDir, *note ); + + // could not convert file => do not add a new note + if ( !success ) + delete journal; + else + { + calendar->addJournal( journal ); + converted = true; + } + } + // window state changed for version 3.2 + else if ( version < 3.2 ) + { + uint state = test->readUnsignedLongNumEntry( "state", NET::SkipTaskbar ); + test->writeEntry( "ShowInTaskbar", (state & NET::SkipTaskbar) ? false : true ); + test->writeEntry( "KeepAbove", (state & NET::KeepAbove) ? true : false ); + test->deleteEntry( "state" ); + delete test; + } + } + + return converted; +} + +bool KNotesLegacy::convertKNotes1Config( Journal *journal, QDir& noteDir, + const QString& file ) +{ + QFile infile( noteDir.absFilePath( file ) ); + if ( !infile.open( IO_ReadOnly ) ) + { + kdError(5500) << k_funcinfo << "Could not open input file: \"" + << infile.name() << "\"" << endl; + return false; + } + + QTextStream input( &infile ); + + // get the name + journal->setSummary( input.readLine() ); + + QStringList props = QStringList::split( '+', input.readLine() ); + + // robustness + if ( props.count() != 13 ) + { + kdWarning(5500) << k_funcinfo << "The file \"" << infile.name() + << "\" lacks version information but is not a valid " + << "KNotes 1 config file either!" << endl; + return false; + } + + // the new configfile's name + QString configFile = noteDir.absFilePath( journal->uid() ); + + // set the defaults + KIO::NetAccess::copy( + KURL( KGlobal::dirs()->saveLocation( "config" ) + "knotesrc" ), + KURL( configFile ), + 0 + ); + + KNoteConfig config( KSharedConfig::openConfig( configFile, false, false ) ); + config.readConfig(); + config.setVersion( KNOTES_VERSION ); + + // get the geometry + config.setWidth( props[3].toUInt() ); + config.setHeight( props[4].toUInt() ); + + // get the background color + uint red = input.readLine().toUInt(); + uint green = input.readLine().toUInt(); + uint blue = input.readLine().toUInt(); + config.setBgColor( QColor( red, green, blue ) ); + + // get the foreground color + red = input.readLine().toUInt(); + green = input.readLine().toUInt(); + blue = input.readLine().toUInt(); + config.setFgColor( QColor( red, green, blue ) ); + + // get the font + QString fontfamily = input.readLine(); + if ( fontfamily.isEmpty() ) + fontfamily = QString( "Sans Serif" ); + uint size = input.readLine().toUInt(); + size = QMAX( size, 4 ); + uint weight = input.readLine().toUInt(); + bool italic = ( input.readLine().toUInt() == 1 ); + QFont font( fontfamily, size, weight, italic ); + + config.setTitleFont( font ); + config.setFont( font ); + + // 3d frame? Not supported yet! + input.readLine(); + + // autoindent + config.setAutoIndent( input.readLine().toUInt() == 1 ); + + // KNotes 1 never had rich text + config.setRichText( false ); + + int note_desktop = props[0].toUInt(); + + // hidden or on all desktops? + if ( input.readLine().toUInt() == 1 ) + note_desktop = 0; + else if ( props[11].toUInt() == 1 ) + note_desktop = NETWinInfo::OnAllDesktops; + + config.setDesktop( note_desktop ); + config.setPosition( QPoint( props[1].toUInt(), props[2].toUInt() ) ); + config.setKeepAbove( props[12].toUInt() & 2048 ); + + config.writeConfig(); + + // get the text + QString text; + while ( !input.atEnd() ) + { + text.append( input.readLine() ); + if ( !input.atEnd() ) + text.append( '\n' ); + } + + journal->setDescription( text ); + + if ( !infile.remove() ) + kdWarning(5500) << k_funcinfo << "Could not delete input file: \"" << infile.name() << "\"" << endl; + + return true; +} + +bool KNotesLegacy::convertKNotes2Config( Journal *journal, QDir& noteDir, + const QString& file ) +{ + QString configFile = noteDir.absFilePath( journal->uid() ); + + // new name for config file + if ( !noteDir.rename( file, journal->uid() ) ) + { + kdError(5500) << k_funcinfo << "Could not rename input file: \"" + << noteDir.absFilePath( file ) << "\" to \"" + << configFile << "\"!" << endl; + return false; + } + + // update the config + KConfig config( configFile ); + config.setGroup( "Data" ); + journal->setSummary( config.readEntry( "name" ) ); + config.deleteGroup( "Data", true ); + config.setGroup( "General" ); + config.writeEntry( "version", KNOTES_VERSION ); + config.setGroup( "WindowDisplay" ); + uint state = config.readUnsignedLongNumEntry( "state", NET::SkipTaskbar ); + config.writeEntry( "ShowInTaskbar", (state & NET::SkipTaskbar) ? false : true ); + config.writeEntry( "KeepAbove", (state & NET::KeepAbove) ? true : false ); + config.deleteEntry( "state" ); + + // load the saved text and put it in the journal + QFile infile( noteDir.absFilePath( "." + file + "_data" ) ); + if ( infile.open( IO_ReadOnly ) ) + { + QTextStream input( &infile ); + input.setEncoding( QTextStream::UnicodeUTF8 ); + journal->setDescription( input.read() ); + if ( !infile.remove() ) + kdWarning(5500) << k_funcinfo << "Could not delete data file: \"" << infile.name() << "\"" << endl; + } + else + kdWarning(5500) << k_funcinfo << "Could not open data file: \"" << infile.name() << "\"" << endl; + + return true; +} |