mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
268 lines
8.5 KiB
C++
268 lines
8.5 KiB
C++
/*
|
|
* This file is part of KJots
|
|
*
|
|
* Copyright 2008 Stephen Kelly <steveire@gmail.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 library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA
|
|
*/
|
|
|
|
|
|
#include "knowitimporter.h"
|
|
|
|
|
|
#include <QFile>
|
|
#include <QTextStream>
|
|
|
|
#include <KStandardDirs>
|
|
#include <KUrl>
|
|
#include <KTemporaryFile>
|
|
#include <KLocalizedString>
|
|
|
|
#include <kdebug.h>
|
|
|
|
KnowItImporter::KnowItImporter()
|
|
{
|
|
}
|
|
|
|
void KnowItImporter::importFromUrl( const KUrl& url )
|
|
{
|
|
// TODO PORT
|
|
#if 0
|
|
KJotsBook *book = new KJotsBook();
|
|
buildNoteTree(url);
|
|
|
|
// foreach ()
|
|
// kDebug();
|
|
buildDomDocument();
|
|
|
|
|
|
KTemporaryFile file;
|
|
file.setPrefix( KStandardDirs::locateLocal( "data", "kjots/" ) );
|
|
file.setSuffix( ".book" );
|
|
file.setAutoRemove( false );
|
|
|
|
if ( file.open() ) {
|
|
file.write( "<?xml version='1.0' encoding='UTF-8' ?>\n<!DOCTYPE KJots>\n<KJots>\n" );
|
|
file.write( m_domDoc.toByteArray() );
|
|
file.write( "</KJots>\n" );
|
|
kDebug() << file.fileName();
|
|
QString newFileName = file.fileName();
|
|
file.close();
|
|
book->openBook( newFileName );
|
|
}
|
|
|
|
|
|
return book;
|
|
#endif
|
|
}
|
|
|
|
QDomElement KnowItImporter::addNote( const KnowItNote& note)
|
|
{
|
|
QDomElement newElement;
|
|
int childNotesCount = m_childNotes[ note.id ].size();
|
|
// int childNotesCount = note.childNotes.size();
|
|
kDebug() << note.title << childNotesCount;
|
|
if (childNotesCount > 0)
|
|
{
|
|
newElement = m_domDoc.createElement(QLatin1String("KJotsBook"));
|
|
|
|
} else {
|
|
newElement = m_domDoc.createElement(QLatin1String("KJotsPage"));
|
|
}
|
|
|
|
QDomElement titleTag = m_domDoc.createElement( QLatin1String("Title") );
|
|
titleTag.appendChild( m_domDoc.createTextNode( note.title ) );
|
|
newElement.appendChild( titleTag );
|
|
QDomElement idTag = m_domDoc.createElement( QLatin1String("ID") );
|
|
idTag.appendChild( m_domDoc.createTextNode( QLatin1String("0") ) ); // Gets a valid id later.
|
|
newElement.appendChild( idTag );
|
|
|
|
if (childNotesCount > 0)
|
|
{
|
|
QDomElement openTag = m_domDoc.createElement( QLatin1String("Open") );
|
|
openTag.appendChild( m_domDoc.createTextNode( QLatin1String("1") ) );
|
|
newElement.appendChild( openTag );
|
|
|
|
QDomElement titlePage = m_domDoc.createElement(QLatin1String("KJotsPage"));
|
|
QDomElement titlePageTitleTag = m_domDoc.createElement( QLatin1String("Title") );
|
|
titlePageTitleTag.appendChild( m_domDoc.createTextNode( note.title ) );
|
|
titlePage.appendChild( titlePageTitleTag );
|
|
QDomElement titlePageIdTag = m_domDoc.createElement( QLatin1String("ID" ));
|
|
titlePageIdTag.appendChild( m_domDoc.createTextNode( QLatin1String("0") ) ); // Gets a valid id later.
|
|
titlePage.appendChild( titlePageIdTag );
|
|
QDomElement titlePageTextTag = m_domDoc.createElement( QLatin1String("Text" ));
|
|
titlePageTextTag.appendChild( m_domDoc.createCDATASection( note.content ) );
|
|
titlePage.appendChild( titlePageTextTag );
|
|
newElement.appendChild( titlePage );
|
|
|
|
foreach (int id, m_childNotes[ note.id ] )
|
|
{
|
|
QDomElement e = addNote( m_noteHash.value(id) );
|
|
newElement.appendChild(e);
|
|
}
|
|
} else {
|
|
QString contents = note.content;
|
|
if ( note.links.size() > 0 ) {
|
|
if ( contents.endsWith( QLatin1String("</body></html>") ) ) {
|
|
contents.chop( 14 );
|
|
}
|
|
contents.append( QLatin1String("<br /><br /><p><b>Links:</b></p>\n<ul>\n") );
|
|
for ( int i = 0; i < note.links.size(); ++i ) {
|
|
kDebug() << "link" << note.links[i].first << note.links[i].second;
|
|
contents.append( QString::fromLatin1( "<li><a href=\"%1\">%2</a></li>\n" )
|
|
.arg( note.links[i].first )
|
|
.arg( note.links[i].second ) );
|
|
}
|
|
contents.append( QLatin1String("</ul></body></html>") );
|
|
}
|
|
|
|
|
|
QDomElement textTag = m_domDoc.createElement( QLatin1String("Text") );
|
|
textTag.appendChild( m_domDoc.createCDATASection( contents ) );
|
|
newElement.appendChild( textTag );
|
|
}
|
|
|
|
return newElement;
|
|
|
|
|
|
}
|
|
|
|
void KnowItImporter::buildDomDocument()
|
|
{
|
|
QDomElement parent = m_domDoc.createElement( QLatin1String("KJotsBook") );
|
|
QDomElement titleTag = m_domDoc.createElement( QLatin1String("Title") );
|
|
titleTag.appendChild( m_domDoc.createTextNode( i18nc("Name for the top level book created to hold the imported data.", "KNowIt Import") ) );
|
|
parent.appendChild( titleTag );
|
|
QDomElement idTag = m_domDoc.createElement( QLatin1String("ID") );
|
|
idTag.appendChild( m_domDoc.createTextNode( QLatin1String("0") ) ); // Gets a valid id later.
|
|
parent.appendChild( idTag );
|
|
QDomElement openTag = m_domDoc.createElement( QLatin1String("Open") );
|
|
openTag.appendChild( m_domDoc.createTextNode( QLatin1String("1") ) );
|
|
parent.appendChild( openTag );
|
|
m_domDoc.appendChild( parent );
|
|
|
|
foreach (const KnowItNote &n, m_notes)
|
|
{
|
|
QDomElement e = addNote( n );
|
|
parent.appendChild(e);
|
|
kDebug() << n.title;
|
|
}
|
|
kDebug() << m_domDoc.toString();
|
|
}
|
|
|
|
void KnowItImporter::buildNoteTree( const KUrl& url )
|
|
{
|
|
|
|
QFile knowItFile( url.toLocalFile() );
|
|
if ( knowItFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
|
|
QSet<QByteArray> entryHeaders;
|
|
entryHeaders << "\\NewEntry" << "\\CurrentEntry";
|
|
|
|
int id = 1;
|
|
|
|
QTextStream in( &knowItFile );
|
|
while ( !in.atEnd() ) {
|
|
QString line = in.readLine();
|
|
|
|
kDebug() << "got line: " << line;
|
|
|
|
if ( line.trimmed().isEmpty() ) {
|
|
continue;
|
|
}
|
|
|
|
foreach( const QByteArray &header, entryHeaders ) {
|
|
if ( line.startsWith( QLatin1String(header) ) ) {
|
|
kDebug() << "init" << line << header;
|
|
line = line.right( line.size() - header.size() ).trimmed();
|
|
kDebug() << "header tag removed: " << line;
|
|
|
|
QStringList list = line.split( QLatin1Char(' ') );
|
|
int startOfTitle = line.indexOf( QLatin1Char(' ') );
|
|
bool ok = false;
|
|
|
|
kDebug() << "depth" << list.at( 0 ).trimmed();
|
|
|
|
int depth = list.at( 0 ).trimmed().toInt( &ok );
|
|
kDebug() << ok << "valid depth";
|
|
if ( ok ) {
|
|
QString title = line.right( line.size() - startOfTitle ).trimmed();
|
|
KnowItNote n;
|
|
n.title = title;
|
|
n.depth = depth;
|
|
n.id = id;
|
|
if (depth == 0)
|
|
{
|
|
n.parent = 0;
|
|
} else {
|
|
n.parent = m_lastNoteAtLevel[depth - 1].id;
|
|
}
|
|
|
|
QString contentLine = in.readLine();
|
|
//QList< QPair <QString, QString> > links;
|
|
QString contents;
|
|
QString url;
|
|
QString target;
|
|
while (( !in.atEnd() ) && ( !contentLine.trimmed().isEmpty() ) ) {
|
|
kDebug() << contentLine;
|
|
if ( contentLine.startsWith( QLatin1String("\\Link") ) ) {
|
|
url = contentLine.right( contentLine.size() - 5 ).trimmed();
|
|
contentLine = in.readLine();
|
|
continue;
|
|
}
|
|
if ( contentLine.startsWith( QLatin1String("\\Descr") ) ) {
|
|
target = contentLine.right( contentLine.size() - 6 ).trimmed();
|
|
contentLine = in.readLine();
|
|
continue;
|
|
}
|
|
if ( !url.isEmpty() && !target.isEmpty() ) {
|
|
QPair< QString, QString > link;
|
|
link.first = url;
|
|
link.second = target;
|
|
n.links << link;
|
|
url.clear();
|
|
target.clear();
|
|
}
|
|
contents.append( contentLine );
|
|
contentLine = in.readLine();
|
|
}
|
|
|
|
|
|
n.content = contents;
|
|
|
|
m_noteHash.insert(id, n);
|
|
m_childNotes[n.parent].append(id);
|
|
id++;
|
|
|
|
if ( m_lastNoteAtLevel.size() == depth )
|
|
{
|
|
m_lastNoteAtLevel.append(n);
|
|
} else {
|
|
m_lastNoteAtLevel[depth] = n;
|
|
}
|
|
|
|
if (depth == 0)
|
|
{
|
|
m_notes.append(n);
|
|
}
|
|
}
|
|
break; // If found first header, don't check for second one.
|
|
}
|
|
} // Foreach header.
|
|
} // At end of stream
|
|
} // File open.
|
|
}
|
|
|
|
|