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.
basket/src/softwareimporters.cpp

697 lines
25 KiB

/***************************************************************************
* Copyright (C) 2003 by Sébastien Laoût *
* slaout@linux62.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 <tqstring.h>
#include <tqdir.h>
#include <kstandarddirs.h>
#include <tdelocale.h>
#include <tdefiledialog.h>
#include <tqptrstack.h>
#include <tqlayout.h>
#include <tqvbuttongroup.h>
#include <tqradiobutton.h>
#include <tdemessagebox.h>
#include <tqtextedit.h>
#include "softwareimporters.h"
#include "basket.h"
#include "basketfactory.h"
#include "notefactory.h"
#include "global.h"
#include "bnpview.h"
#include "xmlwork.h"
#include "tools.h"
/** class TreeImportDialog: */
TreeImportDialog::TreeImportDialog(TQWidget *parent)
: KDialogBase(KDialogBase::Swallow, i18n("Import Hierarchy"), KDialogBase::Ok | KDialogBase::Cancel,
KDialogBase::Ok, parent, /*name=*/"ImportHierarchy", /*modal=*/true, /*separator=*/false)
{
TQWidget *page = new TQWidget(this);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, /*margin=*/0, spacingHint());
m_choices = new TQVButtonGroup(i18n("How to Import the Notes?"), page);
new TQRadioButton(i18n("&Keep original hierarchy (all notes in separate baskets)"), m_choices);
new TQRadioButton(i18n("&First level notes in separate baskets"), m_choices);
new TQRadioButton(i18n("&All notes in one basket"), m_choices);
m_choices->setButton(0);
topLayout->addWidget(m_choices);
topLayout->addStretch(10);
setMainWidget(page);
}
TreeImportDialog::~TreeImportDialog()
{
}
int TreeImportDialog::choice()
{
return m_choices->selectedId();
}
/** class TextFileImportDialog: */
TextFileImportDialog::TextFileImportDialog(TQWidget *parent)
: KDialogBase(KDialogBase::Swallow, i18n("Import Text File"), KDialogBase::Ok | KDialogBase::Cancel,
KDialogBase::Ok, parent, /*name=*/"ImportTextFile", /*modal=*/true, /*separator=*/false)
{
TQWidget *page = new TQWidget(this);
TQVBoxLayout *topLayout = new TQVBoxLayout(page, /*margin=*/0, spacingHint());
m_choices = new TQVButtonGroup(i18n("Format of the Text File"), page);
new TQRadioButton(i18n("Notes separated by an &empty line"), m_choices);
new TQRadioButton(i18n("One &note per line"), m_choices);
new TQRadioButton(i18n("Notes begin with a &dash (-)"), m_choices);
new TQRadioButton(i18n("Notes begin with a &star (*)"), m_choices);
m_anotherSeparator = new TQRadioButton(i18n("&Use another separator:"), m_choices);
TQWidget *indentedTextEdit = new TQWidget(m_choices);
TQHBoxLayout *hLayout = new TQHBoxLayout(indentedTextEdit, /*margin=*/0, spacingHint());
hLayout->addSpacing(20);
m_customSeparator = new TQTextEdit(indentedTextEdit);
m_customSeparator->setTextFormat(TQt::PlainText);
hLayout->addWidget(m_customSeparator);
m_choices->insertChild(TQT_TQOBJECT(indentedTextEdit));
new TQRadioButton(i18n("&All in one note"), m_choices);
m_choices->setButton(0);
topLayout->addWidget(m_choices);
connect( m_customSeparator, TQT_SIGNAL(textChanged()), this, TQT_SLOT(customSeparatorChanged()) );
setMainWidget(page);
}
TextFileImportDialog::~TextFileImportDialog()
{
}
TQString TextFileImportDialog::separator()
{
switch (m_choices->selectedId()) {
default:
case 0: return "\n\n";
case 1: return "\n";
case 2: return "\n-";
case 3: return "\n*";
case 4: return m_customSeparator->text();
case 5: return "";
}
}
void TextFileImportDialog::customSeparatorChanged()
{
if (!m_anotherSeparator->isOn())
m_anotherSeparator->toggle();
}
/** namespace SoftwareImporters: */
TQString SoftwareImporters::fromICS(const TQString &ics)
{
TQString result = ics;
// Remove escaped '\' characters and append the text to the body
int pos = 0;
while ( (pos = result.find('\\', pos)) != -1 ) {
if ((uint)pos == result.length() - 1) // End of string
break;
if (result[pos+1] == 'n') {
result.replace(pos, 2, '\n');
} else if (result[pos+1] == 'r') {
result.replace(pos, 2, '\r');
} else if (result[pos+1] == 't') {
result.replace(pos, 2, '\t');
} else if (result[pos] == '\\') {
result.remove(pos, 1); // Take care of "\\", "\,", "\;" and other escaped characters I haven't noticed
++pos;
}
}
return result;
}
TQString SoftwareImporters::fromTomboy(TQString tomboy)
{
// The first line is the note title, and we already have it, so we remove it (yes, that's pretty stupid to duplicate it in the content...):
tomboy = tomboy.mid(tomboy.find("\n")).stripWhiteSpace();
// Font styles and decorations:
tomboy.replace("<bold>", "<b>");
tomboy.replace("</bold>", "</b>");
tomboy.replace("<italic>", "<i>");
tomboy.replace("</italic>", "</i>");
tomboy.replace("<strikethrough>", "<span style='text-decoration: line-through'>");
tomboy.replace("</strikethrough>", "</span>");
// Highlight not supported by TQTextEdit:
tomboy.replace("<highlight>", "<span style='color:#ff0080'>");
tomboy.replace("</highlight>", "</span>");
// Font sizes:
tomboy.replace("<size:small>", "<span style='font-size: 7pt'>");
tomboy.replace("</size:small>", "</span>");
tomboy.replace("<size:large>", "<span style='font-size: 16pt'>");
tomboy.replace("</size:large>", "</span>");
tomboy.replace("<size:huge>", "<span style='font-size: 20pt'>");
tomboy.replace("</size:huge>", "</span>");
// Internal links to other notes aren't supported yet by BasKet Note Pads:
tomboy.replace("<link:internal>", "");
tomboy.replace("</link:internal>", "");
// In the Tomboy file, new lines are "\n" and not "<br>":
tomboy.replace("\n", "<br>\n");
// Preserve consecutive spaces:
return "<html><head><meta name=\"qrichtext\" content=\"1\" /></head><body>" + tomboy + "</body></html>";
}
Note* SoftwareImporters::insertTitledNote(Basket *parent, const TQString &title, const TQString &content, TQt::TextFormat format/* = TQt::PlainText*/, Note *parentNote/* = 0*/)
{
Note *nGroup = new Note(parent);
Note *nTitle = NoteFactory::createNoteText(title, parent);
nTitle->addState(Tag::stateForId("title"));
Note *nContent;
if (format == TQt::PlainText)
nContent = NoteFactory::createNoteText(content, parent);
else
nContent = NoteFactory::createNoteHtml(content, parent);
if (parentNote == 0)
parentNote = parent->firstNote(); // In the first column!
parent->insertNote(nGroup, parentNote, Note::BottomColumn, TQPoint(), /*animate=*/false);
parent->insertNote(nTitle, nGroup, Note::BottomColumn, TQPoint(), /*animate=*/false);
parent->insertNote(nContent, nTitle, Note::BottomInsert, TQPoint(), /*animate=*/false);
return nGroup;
}
void SoftwareImporters::finishImport(Basket *basket)
{
// Unselect the last inserted group:
basket->unselectAll();
// Focus the FIRST note (the last inserted note is currently focused!):
basket->setFocusedNote(basket->firstNoteShownInStack());
// Relayout every notes at theire new place and simulate a load animation (because already loaded just after the creation).
// Without a relayouting, notes on the bottom would comes from the top (because they were inserted on top) and clutter the animation load:
basket->relayoutNotes(/*animate=*/false);
basket->animateLoad();
basket->save();
}
void SoftwareImporters::importKJots()
{
TQString dirPath = locateLocal("appdata","") + "/../kjots/"; // I think the assumption is good
TQDir dir(dirPath, TQString(), TQDir::Name | TQDir::IgnoreCase, TQDir::Files | TQDir::NoSymLinks);
TQStringList list = dir.entryList();
if (list.isEmpty())
return;
BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/i18n("From KJots"), /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/0);
Basket *kjotsBasket = Global::bnpView->currentBasket();
for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file
TQFile file(dirPath + *it);
if (file.open(IO_ReadOnly)) {
TQTextStream stream(&file);
stream.setEncoding(TQTextStream::Locale);
TQString buf = stream.readLine();
// IT IS A NOTEBOOK FILE, AT THE VERION 0.6.x and older:
if ( !buf.isNull() && buf.left(9) == "\\NewEntry") {
// First create a basket for it:
BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/KURL(file.name()).fileName(), /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/kjotsBasket);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
TQString title, body;
bool haveAnEntry = false;
while (1) {
if (buf.left(9) == "\\NewEntry") {
if (haveAnEntry) // Do not add note the first time
insertTitledNote(basket, title, Tools::stripEndWhiteSpaces(body));
title = buf.mid(10, buf.length()); // Problem : basket will be saved
body = ""; // New note will then be created // EACH time a note is imported
haveAnEntry = true;
} else if (buf.left(3) != "\\ID") { // Don't care of the ID
// Remove escaped '\' characters and append the text to the body
int pos = 0;
while ( (pos = buf.find('\\', pos)) != -1 )
if (buf[++pos] == '\\')
buf.remove(pos, 1);
body.append(buf + "\n");
}
buf = stream.readLine();
if (buf.isNull()) // OEF
break;
}
// Add the ending note (there isn't any other "\\NewEntry" to do it):
if (haveAnEntry)
insertTitledNote(basket, title, Tools::stripEndWhiteSpaces(body));
finishImport(basket);
// IT IS A NOTEBOOK XML FILE, AT THE VERION 0.7.0 and later:
} else if ( (*it).endsWith(".book") /*&& !buf.isNull() && (buf.left(2) == "<!" / *<!DOCTYPE...* / || buf.left(2) == "<?" / *<?xml...* /)*/) {
TQDomDocument *doc = XMLWork::openFile("KJots", dirPath + *it);
if (doc == 0)
continue;
TQString bookTitle = XMLWork::getElementText(doc->documentElement(), "KJotsBook/Title");
// First create a basket for it:
BasketFactory::newBasket(/*icon=*/"kjots", /*name=*/bookTitle, /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/kjotsBasket);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
TQDomElement docElem = XMLWork::getElement(doc->documentElement(), "KJotsBook");
for ( TQDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling() ) {
TQDomElement e = n.toElement();
if ( (!e.isNull()) && e.tagName() == "KJotsPage" )
insertTitledNote(basket, XMLWork::getElementText(e, "Title"), XMLWork::getElementText(e, "Text"));
}
finishImport(basket);
}
file.close();
}
}
}
void SoftwareImporters::importKNotes()
{
TQString dirPath = locateLocal("appdata","") + "/../knotes/"; // I thing the assumption is good
TQDir dir(dirPath, TQString(), TQDir::Name | TQDir::IgnoreCase, TQDir::Files | TQDir::NoSymLinks);
TQStringList list = dir.entryList();
for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file
if ( ! (*it).endsWith(".ics") ) // Don't process *.ics~ and otehr files
continue;
TQFile file(dirPath + *it);
if (file.open(IO_ReadOnly)) {
TQTextStream stream(&file);
stream.setEncoding(TQTextStream::UnicodeUTF8);
// First create a basket for it:
BasketFactory::newBasket(/*icon=*/"knotes", /*name=*/i18n("From KNotes"), /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/0);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
bool inVJournal = false;
bool inDescription = false;
bool isRichText = false;
TQString title, body;
TQString buf;
while (1) {
buf = stream.readLine();
if (buf.isNull()) // OEF
break;
if ( !buf.isNull() && buf == "BEGIN:VJOURNAL") {
inVJournal = true;
} else if (inVJournal && buf.startsWith("SUMMARY:")) {
title = buf.mid(8, buf.length());
} else if (inVJournal && buf.startsWith("DESCRIPTION:")) {
body = buf.mid(12, buf.length());
inDescription = true;
} else if (inDescription && buf.startsWith(" ")) {
body += buf.mid(1, buf.length());
} else if (buf.startsWith("X-TDE-KNotes-RichText:")) {
isRichText = XMLWork::trueOrFalse(buf.mid(22, buf.length() - 22).stripWhiteSpace(), "false");
} else if (buf == "END:VJOURNAL") {
insertTitledNote(basket, fromICS(title), fromICS(body), (isRichText ? TQt::RichText : TQt::PlainText));
inVJournal = false;
inDescription = false;
isRichText = false;
title = "";
body = "";
} else
inDescription = false;
}
// Bouh : duplicate code
// In case of unvalide ICAL file!
if ( ! body.isEmpty() ) // Add the ending note
insertTitledNote(basket, fromICS(title), fromICS(body), (isRichText ? TQt::RichText : TQt::PlainText));
file.close();
finishImport(basket);
}
}
}
void SoftwareImporters::importStickyNotes()
{
// Sticky Notes file is usually located in ~/.gnome2/stickynotes_applet
// We will search all directories in "~/" that contain "gnome" in the name,
// and will search for "stickynotes_applet" file (that should be XML file with <stickynotes> root.
TQDir dir(TQDir::home().absPath(), TQString(), TQDir::Name | TQDir::IgnoreCase,
TQDir::Dirs | TQDir::NoSymLinks | TQDir::Hidden);
TQStringList founds;
TQStringList list = dir.entryList();
for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each folder
if ( (*it).contains("gnome", false) ) {
TQString fullPath = TQDir::home().absPath() + "/" + (*it) + "/stickynotes_applet";
if (dir.exists(fullPath))
founds += fullPath;
}
}
for ( TQStringList::Iterator it = founds.begin(); it != founds.end(); ++it ) { // For each file
TQFile file(*it);
TQDomDocument *doc = XMLWork::openFile("stickynotes", *it);
if (doc == 0)
continue;
// First create a basket for it:
BasketFactory::newBasket(/*icon=*/"gnome", /*name=*/i18n("From Sticky Notes"), /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/0);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
TQDomElement docElem = doc->documentElement();
for ( TQDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling() ) {
TQDomElement e = n.toElement();
if ( (!e.isNull()) && e.tagName() == "note" )
insertTitledNote(basket, e.attribute("title"), e.text());
}
finishImport(basket);
}
}
// TODO: FIXME: Code duplicated from notecontent.cpp but with UTF-8 encoding.
// TODO: FIXME: Later, merge!
TQString loadUtf8FileToString(const TQString &fileName)
{
TQFile file(fileName);
if (file.open(IO_ReadOnly)) {
TQTextStream stream(&file);
stream.setEncoding(TQTextStream::UnicodeUTF8);
TQString text;
text = stream.read();
file.close();
return text;
} else
return "";
}
void SoftwareImporters::importTomboy()
{
TQString dirPath = TQDir::home().absPath() + "/.tomboy/"; // I thing the assumption is good
TQDir dir(dirPath, TQString(), TQDir::Name | TQDir::IgnoreCase, TQDir::Files | TQDir::NoSymLinks);
Basket *basket = 0; // Create the basket ONLY if we found at least one note to add!
TQStringList list = dir.entryList();
for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { // For each file
if ( ! (*it).endsWith(".note") )
continue;
TQDomDocument *doc = XMLWork::openFile("note", dirPath + *it);
if (doc == 0)
continue;
if (basket == 0) {
// First create a basket for it:
BasketFactory::newBasket(/*icon=*/"tomboy", /*name=*/i18n("From Tomboy"), /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/0);
basket = Global::bnpView->currentBasket();
basket->load();
}
TQDomElement docElem = doc->documentElement();
TQString title = XMLWork::getElementText(docElem, "title");
// DOES NOT REALLY WORKS:
//TQDomElement contentElement = XMLWork::getElement(docElem, "text/note-content");
//TQString content = XMLWork::innerXml(contentElement);
// Isolate "<note-content version="0.1">CONTENT</note-content>"!
TQString xml = loadUtf8FileToString(dirPath + *it);
xml = xml.mid(xml.find("<note-content "));
xml = xml.mid(xml.find(">") + 1);
xml = xml.mid(0, xml.find("</note-content>"));
if (!title.isEmpty() && !/*content*/xml.isEmpty())
insertTitledNote(basket, title, fromTomboy(xml/*content*/), TQt::RichText);
}
if (basket)
finishImport(basket);
}
void SoftwareImporters::importTextFile()
{
TQString fileName = KFileDialog::getOpenFileName(":ImportTextFile", "*|All files");
if (fileName.isEmpty())
return;
TextFileImportDialog dialog;
if (dialog.exec() == TQDialog::Rejected)
return;
TQString separator = dialog.separator();
TQFile file(fileName);
if (file.open(IO_ReadOnly)) {
TQTextStream stream(&file);
stream.setEncoding(TQTextStream::Locale);
TQString content = stream.read();
TQStringList list = (separator.isEmpty()
? TQStringList(content)
: TQStringList::split(separator, content, /*allowEmptyEntries=*/false)
);
// First create a basket for it:
TQString title = i18n("From TextFile.txt", "From %1").arg(KURL(fileName).fileName());
BasketFactory::newBasket(/*icon=*/"txt", title, /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", /*createIn=*/0);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
// Import every notes:
for (TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
Note *note = NoteFactory::createNoteFromText((*it).stripWhiteSpace(), basket);
basket->insertNote(note, basket->firstNote(), Note::BottomColumn, TQPoint(), /*animate=*/false);
}
// Finish the export:
finishImport(basket);
}
}
/** @author Petri Damsten <petri.damsten@iki.fi>
*/
void SoftwareImporters::importKnowIt()
{
KURL url = KFileDialog::getOpenURL(":ImportKnowIt",
"*.kno|KnowIt files\n*|All files");
if (!url.isEmpty())
{
TQFile file(url.path());
TQFileInfo info(url.path());
Basket* basket = 0;
TQPtrStack<Basket> baskets;
TQString text;
int hierarchy = 0;
TreeImportDialog dialog;
if (dialog.exec() == TQDialog::Rejected)
return;
hierarchy = dialog.choice();
BasketFactory::newBasket(/*icon=*/"knowit",
/*name=*/info.baseName(),
/*backgroundImage=*/"",
/*backgroundColor=*/TQColor(),
/*textColor=*/TQColor(),
/*templateName=*/"1column",
/*createIn=*/0);
basket = Global::bnpView->currentBasket();
basket->load();
baskets.push(basket);
if(file.open(IO_ReadOnly))
{
TQTextStream stream(&file);
uint level = 0;
TQString name;
TQString line;
TQStringList links;
TQStringList descriptions;
stream.setEncoding(TQTextStream::UnicodeUTF8);
while(1)
{
line = stream.readLine();
if(line.startsWith("\\NewEntry") ||
line.startsWith("\\CurrentEntry") || stream.atEnd())
{
while(level + 1 < baskets.count())
baskets.pop();
if(level + 1 > baskets.count())
baskets.push(basket);
if(!name.isEmpty())
{
if((level == 0 && hierarchy == 1) ||
(hierarchy == 0))
{
BasketFactory::newBasket(/*icon=*/"knowit",
/*name=*/name,
/*backgroundImage=*/"",
/*backgroundColor=*/TQColor(),
/*textColor=*/TQColor(),
/*templateName=*/"1column",
/*createIn=*/baskets.top());
basket = Global::bnpView->currentBasket();
basket->load();
}
if(!text.stripWhiteSpace().isEmpty() ||
hierarchy == 2 ||
(hierarchy == 1 && level > 0))
{
insertTitledNote(basket, name, text, TQt::RichText);
}
for(uint j = 0; j < links.count(); ++j)
{
Note* link;
if(descriptions.count() < j+1 || descriptions[j].isEmpty())
link = NoteFactory::createNoteLink(links[j], basket);
else
link = NoteFactory::createNoteLink(links[j],
descriptions[j], basket);
basket->insertCreatedNote(link);
}
finishImport(basket);
}
if(stream.atEnd())
break;
int i = line.find("Entry") + 6;
int n = line.find(' ', i);
level = line.mid(i, n - i).toInt();
name = line.mid(n+1);
text = "";
links.clear();
descriptions.clear();
}
else if(line.startsWith("\\Link"))
{
links.append(line.mid(6));
}
else if(line.startsWith("\\Descr"))
{
while(descriptions.count() < links.count() - 1)
descriptions.append("");
descriptions.append(line.mid(7));
}
else
{
text += line + "\n";
}
}
file.close();
}
}
}
void SoftwareImporters::importTuxCards()
{
TQString fileName = KFileDialog::getOpenFileName(":ImportTuxCards", "*|All files");
if (fileName.isEmpty())
return;
TreeImportDialog dialog;
if (dialog.exec() == TQDialog::Rejected)
return;
int hierarchy = dialog.choice();
TQDomDocument *document = XMLWork::openFile("tuxcards_data_file"/*"InformationCollection"*/, fileName);
if (document == 0) {
KMessageBox::error(0, i18n("Can not import that file. It is either corrupted or not a TuxCards file."), i18n("Bad File Format"));
return;
}
TQDomElement collection = document->documentElement();
int remainingHierarchy = (hierarchy == 0 ? 65000 : 3 - hierarchy);
importTuxCardsNode(collection, /*parentBasket=*/0, /*parentNote=*/0, remainingHierarchy);
}
// TODO: <InformationElement isOpen="true" isEncripted="false"
void SoftwareImporters::importTuxCardsNode(const TQDomElement &element, Basket *parentBasket, Note *parentNote, int remainingHierarchy)
{
for (TQDomNode n = element.firstChild(); !n.isNull(); n = n.nextSibling()) {
TQDomElement e = n.toElement();
if (e.isNull() || e.tagName() != "InformationElement") // Cannot handle that!
continue;
TQString icon = e.attribute("iconFileName");
TQString name = XMLWork::getElementText(e, "Description");
TQString content = XMLWork::getElementText(e, "Information");
bool isRichText = (e.attribute("informationFormat") == "RTF");
bool isEncrypted = (e.attribute("isEncripted") == "true");
if (icon.isEmpty() || icon == "none")
icon = "tuxcards";
Note *nContent;
if (isEncrypted) {
KMessageBox::information(0, i18n("A note is encrypted. The importer does not yet support encrypted notes. Please remove the encryption with TuxCards and re-import the file."), i18n("Encrypted Notes not Supported Yet"));
isRichText = true;
content = i18n("<font color='red'><b>Encrypted note.</b><br>The importer do not support encrypted notes yet. Please remove the encryption with TuxCards and re-import the file.</font>");
}
if (remainingHierarchy > 0) {
BasketFactory::newBasket(icon, name, /*backgroundImage=*/"", /*backgroundColor=*/TQColor(), /*textColor=*/TQColor(), /*templateName=*/"1column", parentBasket);
Basket *basket = Global::bnpView->currentBasket();
basket->load();
if (isRichText)
nContent = NoteFactory::createNoteHtml(content, basket);
else
nContent = NoteFactory::createNoteText(content, basket);
basket->insertNote(nContent, basket->firstNote(), Note::BottomColumn, TQPoint(), /*animate=*/false);
importTuxCardsNode(e, basket, 0, remainingHierarchy - 1);
finishImport(basket);
} else {
Note *nGroup = insertTitledNote(parentBasket, name, content, (isRichText ? TQt::RichText : TQt::PlainText), parentNote);
importTuxCardsNode(e, parentBasket, nGroup, remainingHierarchy - 1);
}
}
}
#include "softwareimporters.moc"