33 #include <qdatetime.h>
34 #include <qmimedata.h>
36 #define METADATA_KDE_OWNER "http://www.kde.org"
37 #define METADATA_FREEDESKTOP_OWNER "http://freedesktop.org"
38 #define METADATA_MIME_OWNER "http://www.freedesktop.org/standards/shared-mime-info"
42 static QDomNode
cd(QDomNode node,
const QString &name,
bool create)
44 QDomNode subnode = node.namedItem(name);
45 if (create && subnode.isNull())
47 subnode = node.ownerDocument().createElement(name);
48 node.appendChild(subnode);
55 return cd(node, name,
true);
60 QDomNode subnode = node.firstChild();
63 subnode = node.ownerDocument().createTextNode(
"");
64 node.appendChild(subnode);
66 return subnode.toText();
73 QDomElement metadataElement;
74 for ( QDomNode _node = parent.firstChild(); !_node.isNull(); _node = _node.nextSibling() ) {
75 QDomElement elem = _node.toElement();
76 if ( !elem.isNull() && elem.tagName() ==
"metadata" ) {
77 const QString owner = elem.attribute(
"owner" );
78 if ( owner == forOwner )
80 if ( owner.isEmpty() && forOwnerIsKDE )
81 metadataElement = elem;
84 if ( create && metadataElement.isNull() ) {
85 metadataElement = parent.ownerDocument().createElement(
"metadata" );
86 parent.appendChild(metadataElement);
87 metadataElement.setAttribute(
"owner", forOwner );
89 }
else if (!metadataElement.isNull() && forOwnerIsKDE) {
93 return metadataElement;
110 return element.attribute(
"folded") ==
"no";
132 if ( bk.element == child.
element )
144 for( QDomElement elem = start; !elem.isNull(); )
147 if (tag == folder || tag == bookmark || tag == separator)
150 elem = elem.nextSiblingElement();
152 elem = elem.previousSiblingElement();
154 return QDomElement();
161 QDomDocument doc =
element.ownerDocument();
162 QDomElement groupElem = doc.createElement(
"folder" );
163 element.appendChild( groupElem );
164 QDomElement textElem = doc.createElement(
"title" );
165 groupElem.appendChild( textElem );
166 textElem.appendChild( doc.createTextNode( text ) );
175 QDomDocument doc =
element.ownerDocument();
176 Q_ASSERT(!doc.isNull());
177 QDomElement sepElem = doc.createElement(
"separator" );
178 element.appendChild( sepElem );
182 #ifndef KDE_NO_DEPRECATED
196 if (
element.firstChild().isNull() )
201 if ( !firstChild.isNull() )
209 return (!n.isNull());
222 QDomDocument doc =
element.ownerDocument();
223 QDomElement elem = doc.createElement(
"bookmark" );
224 elem.setAttribute(
"href", url.
url() );
226 QDomElement textElem = doc.createElement(
"title" );
227 elem.appendChild( textElem );
228 textElem.appendChild( doc.createTextNode( text ) );
244 return (
element.attribute(
"toolbar") ==
"yes" );
249 if (
element.attribute(
"toolbar") ==
"yes" )
251 for (QDomNode n =
element.firstChild(); !n.isNull() ; n = n.nextSibling() )
253 QDomElement e = n.toElement();
255 if ( e.tagName() ==
"folder" )
257 if ( e.attribute(
"toolbar") ==
"yes" )
262 if (!result.isNull())
267 return QDomElement();
275 if ( bm.isSeparator() || bm.isGroup() )
295 return ( tag ==
"folder"
301 return (
element.tagName() ==
"separator");
311 QDomElement parent =
element.parentNode().toElement();
312 return !parent.isNull();
323 return i18n(
"--- separator ---");
326 text.replace(
'\n',
' ');
332 QDomNode titleNode =
element.namedItem(
"title");
333 if (titleNode.isNull()) {
334 titleNode =
element.ownerDocument().createElement(
"title");
335 element.appendChild(titleNode);
338 if (titleNode.firstChild().isNull()) {
339 QDomText domtext = titleNode.ownerDocument().createTextNode(
"");
340 titleNode.appendChild(domtext);
343 QDomText domtext = titleNode.firstChild().toText();
344 domtext.setData(fullText);
360 QDomElement iconElement =
cd(metaDataNode,
"bookmark:icon",
false).toElement();
366 icon =
element.attribute(
"icon");
368 return "internet-web-browser";
371 if (icon ==
"bookmark_folder") {
372 return "folder-bookmarks";
374 if (icon.isEmpty()) {
378 icon =
"folder-bookmarks";
386 if (!_mimeType.isEmpty()) {
403 QDomElement iconElement =
cd_or_create(metaDataNode,
"bookmark:icon").toElement();
404 iconElement.setAttribute (
"name", icon );
407 if(!
element.attribute(
"icon").isEmpty())
408 element.removeAttribute(
"icon");
417 description.replace(
'\n',
' ');
423 QDomNode descNode =
element.namedItem(
"desc");
424 if (descNode.isNull()) {
425 descNode =
element.ownerDocument().createElement(
"desc");
429 if (descNode.firstChild().isNull()) {
430 QDomText domtext = descNode.ownerDocument().createTextNode(
QString());
431 descNode.appendChild(domtext);
434 QDomText domtext = descNode.firstChild().toText();
435 domtext.setData(description);
441 QDomElement mimeTypeElement =
cd(metaDataNode,
"mime:mime-type",
false).toElement();
442 return mimeTypeElement.attribute(
"type");
448 QDomElement iconElement =
cd_or_create(metaDataNode,
"mime:mime-type").toElement();
449 iconElement.setAttribute (
"type", mimeType );
454 if(
element.hasAttribute(
"showintoolbar"))
456 bool show =
element.attribute(
"showintoolbar") ==
"yes";
457 const_cast<QDomElement *
>(&
element)->removeAttribute(
"showintoolbar");
482 if (
element.tagName() ==
"xbel" )
487 if (
element.parentNode().isNull())
494 int pos = group.
indexOf(*
this);
512 QDomDocument doc(
"xbel");
513 QDomElement elem = doc.createElement(
"xbel");
514 doc.appendChild( elem );
526 if(A == error || B == error)
532 uint lastCommonSlash = 0;
533 uint lastPos = A.length() < B.length() ? A.length() : B.length();
534 for(uint i=0; i < lastPos; ++i)
537 return A.left(lastCommonSlash);
541 return A.left(lastCommonSlash);
548 const uint timet = QDateTime::currentDateTime().toTime_t();
554 int currentCount = countStr.toInt(&ok);
565 return address.left( address.lastIndexOf(QLatin1Char(
'/')) );
570 return address.mid( address.lastIndexOf(QLatin1Char(
'/')) + 1 ).toInt();
590 if (infoNode.isNull())
return QDomNode();
597 for ( QDomElement e = metaDataNode.firstChildElement(); !e.isNull(); e = e.nextSiblingElement() )
599 if ( e.tagName() == key ) {
615 text.setData( value );
632 QStack<KBookmarkGroup> stack;
637 if(stack.count() == 1)
639 if(stack.count() > 0) {
643 bk = stack.top().next(bk);
651 bk = stack.top().next(bk);
671 bookmarkList.append( *
this );
683 QDomDocument doc(
"xbel" );
684 QDomElement elem = doc.createElement(
"xbel" );
685 doc.appendChild( elem );
687 for ( const_iterator it =
begin(),
end = this->
end() ; it !=
end ; ++it ) {
688 urls.append( (*it).url() );
689 elem.appendChild( (*it).internalElement().cloneNode(
true ) );
695 mimeData->setData(
"application/x-xbel", doc.toByteArray() );
708 #ifndef KDE_NO_DEPRECATED
712 kWarning(7043) <<
"Deprecated method called, with wrong lifetime of QDomDocument, will probably crash";
720 QByteArray payload = mimeData->data(
"application/x-xbel" );
721 if ( !payload.isEmpty() ) {
722 doc.setContent( payload );
723 QDomElement elem = doc.documentElement();
724 const QDomNodeList children = elem.childNodes();
725 for (
int childno = 0; childno < children.count(); childno++)
727 bookmarks.append(
KBookmark( children.item(childno).toElement() ));
732 if ( !urls.isEmpty() )
734 KUrl::List::ConstIterator uit = urls.begin();
735 KUrl::List::ConstIterator uEnd = urls.end();
736 for ( ; uit != uEnd ; ++uit )
740 (*uit).prettyUrl(), (*uit) ));