1 /***************************************************************************
2 * Copyright (C) 2004 by Kita Developers *
3 * ikemo@users.sourceforge.jp *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 ***************************************************************************/
11 #include "favoritethreads.h"
13 #include "threadindex.h"
14 #include "boardmanager.h"
15 #include "datmanager.h"
16 #include "kita_misc.h"
20 #include <qstylesheet.h>
24 FavoriteThreadItem::FavoriteThreadItem()
27 FavoriteThreadItem::~ FavoriteThreadItem()
30 bool FavoriteThreadItem::operator==( const FavoriteThreadItem& item ) const
32 return ( m_datURL == item.m_datURL );
36 FavoriteThreads* FavoriteThreads::instance = 0;
38 FavoriteThreads::FavoriteThreads()
41 FavoriteThreads::~FavoriteThreads()
44 FavoriteThreads* FavoriteThreads::getInstance()
47 instance = new FavoriteThreads();
52 void FavoriteThreads::insert( const QString& datURL )
54 if ( ! m_threadList.contains( datURL ) ) {
55 m_threadList.append( datURL );
59 void FavoriteThreads::remove( const QString& datURL )
61 m_threadList.remove( datURL );
64 bool FavoriteThreads::contains( const QString& datURL )
66 if ( getInstance() ->m_threadList.contains( datURL ) ) {
73 const QValueList<FavoriteThreadItem> FavoriteThreads::threadList() const
78 bool FavoriteThreads::readFromXML( const QString& xml )
80 FavoriteThreads * instance = FavoriteThreads::getInstance();
81 instance->m_threadList.clear();
83 QDomDocument document;
84 if ( ! document.setContent( xml, true ) ) {
88 QDomElement root = document.documentElement();
90 QDomNode node = root.firstChild();
91 while ( !node.isNull() ) {
92 if ( node.isElement() &&
93 node.nodeName() == QString( "thread" ) &&
94 node.namespaceURI() == QString( "http://kita.sourceforge.jp/ns/thread" ) ) {
95 processThreadNode( node );
97 node = node.nextSibling();
102 void FavoriteThreads::processThreadNode( QDomNode& node )
104 QDomNode datURLNode = node.namedItem( "daturl" );
105 QDomNode nameNode = node.namedItem( "name" );
107 if ( !datURLNode.isElement() || !nameNode.isElement() ) return ;
109 QString url = datURLNode.toElement().text();
110 QString name = nameNode.toElement().text();
112 KURL datURL = Kita::getDatURL( url );
113 Kita::Thread* thread = Kita::Thread::getByURL( datURL );
114 thread->setThreadName( name );
115 Kita::ThreadIndex::loadIndex( thread, datURL );
117 FavoriteThreads::getInstance() ->insert( datURL.prettyURL() );
120 const QString FavoriteThreads::toXML() const
122 QDomDocument document;
124 // QDomProcessingInstruction pi = document.createProcessingInstruction( "xml", "version=\"1.0\"" );
125 // document.appendChild( pi );
127 QDomElement root = document.createElementNS( "http://kita.sourceforge.jp/ns/favorites", "favorites" );
128 document.appendChild( root );
130 QValueList<FavoriteThreadItem>::const_iterator it;
131 for ( it = threadList().begin(); it != threadList().end(); ++it ) {
132 QString datURL = ( *it ).m_datURL;
133 QDomElement threadElement = document.createElementNS( "http://kita.sourceforge.jp/ns/thread", "thread" );
134 root.appendChild( threadElement );
136 QDomElement datURLElement = document.createElement( "daturl" );
137 threadElement.appendChild( datURLElement );
138 datURLElement.appendChild( document.createTextNode( datURL ) );
140 QString threadName = Kita::DatManager::threadName( datURL );
141 QDomElement nameElement = document.createElement( "name" );
142 threadElement.appendChild( nameElement );
143 nameElement.appendChild( document.createTextNode( threadName ) );
145 QString resNum = QString::number( Kita::DatManager::getResNum( datURL ) );
146 QDomElement resNumElement = document.createElement( "resnum" );
147 threadElement.appendChild( resNumElement );
148 resNumElement.appendChild( document.createTextNode( resNum ) );
151 QDomElement board = document.createElementNS( "http://kita.sourceforge.jp/ns/board", "board" );
152 threadElement.appendChild( board );
154 QString boardURL = Kita::BoardManager::boardURL( datURL );
155 QDomElement boardURLElement = document.createElement( "url" );
156 board.appendChild( boardURLElement );
157 boardURLElement.appendChild( document.createTextNode( boardURL ) );
159 QString boardName = Kita::BoardManager::boardName( boardURL );
160 QDomElement boardNameElement = document.createElement( "name" );
161 board.appendChild( boardNameElement );
162 boardNameElement.appendChild( document.createTextNode( boardName ) );
164 return document.toString( 0 );
167 void FavoriteThreads::replace( QString fromURL, QString toURL )
169 if ( FavoriteThreads::getInstance() == NULL ) return ;
170 QValueList<FavoriteThreadItem>& threadList = FavoriteThreads::getInstance() ->m_threadList;
171 QValueList<FavoriteThreadItem>::iterator it;
172 for ( it = threadList.begin(); it != threadList.end(); ++it ) {
173 QString url = ( *it ).m_datURL;
174 if ( url.find( fromURL ) == 0 ) {
175 url = url.replace( 0, fromURL.length(), toURL );
176 threadList.remove( it );
177 threadList.prepend( url );
178 it = threadList.begin();
183 QString FavoriteThreads::getDatURL( int i )
185 if ( getInstance() ->m_threadList.count() > i ) {
186 return getInstance() ->m_threadList[ i ].m_datURL;
188 return QString::null;