OSDN Git Service

reformat
[kita/kita.git] / kita / src / libkita / favoritethreads.cpp
1 /***************************************************************************
2 *   Copyright (C) 2004 by Kita Developers                                 *
3 *   ikemo@users.sourceforge.jp                                            *
4 *                                                                         *
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 ***************************************************************************/
10
11 #include "favoritethreads.h"
12 #include "thread.h"
13 #include "threadindex.h"
14 #include "boardmanager.h"
15 #include "datmanager.h"
16 #include "kita_misc.h"
17
18 #include <kdebug.h>
19
20 #include <qstylesheet.h>
21 #include <qdom.h>
22
23 // FavoriteThreadItem
24 FavoriteThreadItem::FavoriteThreadItem()
25 {}
26
27 FavoriteThreadItem::~ FavoriteThreadItem()
28 {}
29
30 bool FavoriteThreadItem::operator==( const FavoriteThreadItem& item ) const
31 {
32     return ( m_datURL == item.m_datURL );
33 }
34
35 // FavoriteThreads
36 FavoriteThreads* FavoriteThreads::instance = 0;
37
38 FavoriteThreads::FavoriteThreads()
39 {}
40
41 FavoriteThreads::~FavoriteThreads()
42 {}
43
44 FavoriteThreads* FavoriteThreads::getInstance()
45 {
46     if ( ! instance ) {
47         instance = new FavoriteThreads();
48     }
49     return instance;
50 }
51
52 void FavoriteThreads::insert( const QString& datURL )
53 {
54     if ( ! m_threadList.contains( datURL ) ) {
55         m_threadList.append( datURL );
56     }
57 }
58
59 void FavoriteThreads::remove( const QString& datURL )
60 {
61     m_threadList.remove( datURL );
62 }
63
64 bool FavoriteThreads::contains( const QString& datURL )
65 {
66     if ( getInstance() ->m_threadList.contains( datURL ) ) {
67         return true;
68     } else {
69         return false;
70     }
71 }
72
73 const QValueList<FavoriteThreadItem> FavoriteThreads::threadList() const
74 {
75     return m_threadList;
76 }
77
78 bool FavoriteThreads::readFromXML( const QString& xml )
79 {
80     FavoriteThreads * instance = FavoriteThreads::getInstance();
81     instance->m_threadList.clear();
82
83     QDomDocument document;
84     if ( ! document.setContent( xml, true ) ) {
85         return false;
86     }
87
88     QDomElement root = document.documentElement();
89
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 );
96         }
97         node = node.nextSibling();
98     }
99     return true;
100 }
101
102 void FavoriteThreads::processThreadNode( QDomNode& node )
103 {
104     QDomNode datURLNode = node.namedItem( "daturl" );
105     QDomNode nameNode = node.namedItem( "name" );
106
107     if ( !datURLNode.isElement() || !nameNode.isElement() ) return ;
108
109     QString url = datURLNode.toElement().text();
110     QString name = nameNode.toElement().text();
111
112     KURL datURL = Kita::getDatURL( url );
113     Kita::Thread* thread = Kita::Thread::getByURL( datURL );
114     thread->setThreadName( name );
115     Kita::ThreadIndex::loadIndex( thread, datURL );
116
117     FavoriteThreads::getInstance() ->insert( datURL.prettyURL() );
118 }
119
120 const QString FavoriteThreads::toXML() const
121 {
122     QDomDocument document;
123
124     //    QDomProcessingInstruction pi = document.createProcessingInstruction( "xml", "version=\"1.0\"" );
125     //    document.appendChild( pi );
126
127     QDomElement root = document.createElementNS( "http://kita.sourceforge.jp/ns/favorites", "favorites" );
128     document.appendChild( root );
129
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 );
135
136         QDomElement datURLElement = document.createElement( "daturl" );
137         threadElement.appendChild( datURLElement );
138         datURLElement.appendChild( document.createTextNode( datURL ) );
139
140         QString threadName = Kita::DatManager::threadName( datURL );
141         QDomElement nameElement = document.createElement( "name" );
142         threadElement.appendChild( nameElement );
143         nameElement.appendChild( document.createTextNode( threadName ) );
144
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 ) );
149
150         // board
151         QDomElement board = document.createElementNS( "http://kita.sourceforge.jp/ns/board", "board" );
152         threadElement.appendChild( board );
153
154         QString boardURL = Kita::BoardManager::boardURL( datURL );
155         QDomElement boardURLElement = document.createElement( "url" );
156         board.appendChild( boardURLElement );
157         boardURLElement.appendChild( document.createTextNode( boardURL ) );
158
159         QString boardName = Kita::BoardManager::boardName( boardURL );
160         QDomElement boardNameElement = document.createElement( "name" );
161         board.appendChild( boardNameElement );
162         boardNameElement.appendChild( document.createTextNode( boardName ) );
163     }
164     return document.toString( 0 );
165 }
166
167 void FavoriteThreads::replace( QString fromURL, QString toURL )
168 {
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();
179         }
180     }
181 }
182
183 QString FavoriteThreads::getDatURL( int i )
184 {
185     if ( getInstance() ->m_threadList.count() > i ) {
186         return getInstance() ->m_threadList[ i ].m_datURL;
187     } else {
188         return QString::null;
189     }
190 }