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 ***************************************************************************/
10 #include "threadindex.h"
18 #include "threadinfo.h"
19 #include "kita_misc.h"
20 #include "datmanager.h"
24 QString ThreadIndex::getSubject( const KURL& url )
26 QString indexPath = Kita::Cache::getIndexPath( url );
27 KConfig config( indexPath );
28 return getSubjectPrivate( config );
31 void ThreadIndex::setSubject( const KURL& url, const QString& str )
33 QString indexPath = Kita::Cache::getIndexPath( url );
34 KConfig config( indexPath );
35 setSubjectPrivate( str, config );
38 int ThreadIndex::getResNum( const KURL& url )
40 QString indexPath = Kita::Cache::getIndexPath( url );
41 KConfig config( indexPath );
42 return getResNumPrivate( url, config );
45 void ThreadIndex::setResNum( const KURL& url, int resNum )
47 QString indexPath = Kita::Cache::getIndexPath( url );
48 KConfig config( indexPath );
49 setResNumPrivate( resNum, config );
52 int ThreadIndex::getReadNum( const KURL& url )
54 QString indexPath = Kita::Cache::getIndexPath( url );
55 KConfig config( indexPath );
56 return getReadNumPrivate( url, config, TRUE );
59 void ThreadIndex::setReadNum( const KURL& url, int readNum )
61 QString indexPath = Kita::Cache::getIndexPath( url );
62 KConfig config( indexPath );
63 setReadNumPrivate( readNum, config );
66 int ThreadIndex::getViewPos( const KURL& url )
68 QString indexPath = Kita::Cache::getIndexPath( url );
69 KConfig config( indexPath );
70 return getViewPosPrivate( config );
73 void ThreadIndex::setViewPos( const KURL& url, int viewPos )
75 QString indexPath = Kita::Cache::getIndexPath( url );
76 KConfig config( indexPath );
77 setViewPosPrivate( viewPos, config );
80 void ThreadIndex::setMarkList( const KURL& url, const QValueList< int >& markList )
82 QString indexPath = Kita::Cache::getIndexPath( url );
83 KConfig config( indexPath );
84 setMarkListPrivate( markList, config );
88 /*------------------------------------------------------------*/
91 /* load thread information */ /* public */ /* static */
92 void ThreadIndex::loadIndex( Kita::Thread* thread, const KURL& url, bool checkCached )
94 QString indexPath = Kita::Cache::getIndexPath( url );
95 KConfig config( indexPath );
97 /* load read number */
98 int readNum = getReadNumPrivate( url, config, checkCached );
99 if( readNum == 0 ) return; /* cache does not exist. */
100 thread->setReadNum( readNum );
102 /* load thread name */
103 QString subject = getSubjectPrivate( config );
104 if( subject == QString::null && thread->threadName() != QString::null ){
105 subject = thread->threadName();
106 config.writeEntry( "Subject", subject );
108 if( subject == QString::null ) thread->setThreadName( "?" );
109 else thread->setThreadName( subject );
111 /* load res number */
112 thread->setResNum( getResNumPrivate( url, config ) );
115 thread->setViewPos( getViewPosPrivate( config ) );
116 if( thread->viewPos() > thread->readNum() ) thread->setReadNum( thread->viewPos() );
119 thread->setMarkList( getMarkListPrivate( config ) );
124 /* save thread information */ /* public */ /* static */
125 void ThreadIndex::saveIndex( const Kita::Thread* thread, const KURL& url )
127 /* If readNum == 0, delete idx file */
128 if( thread->readNum() == 0 ){
130 QString indexPath = Kita::DatManager::getCacheIndexPath( url );
131 QFile::remove( indexPath );
132 qDebug("delete %s",indexPath.ascii());
135 QString indexPath = Kita::Cache::getIndexPath( url );
136 KConfig config( indexPath );
138 /* save thread name */
139 setSubjectPrivate( thread->threadName(), config );
141 /* save res number */
142 setResNumPrivate( thread->resNum(), config );
144 /* save read number */
145 setReadNumPrivate( thread->readNum(), config );
148 setViewPosPrivate( thread->viewPos(), config );
151 setMarkListPrivate( thread->markList(), config );
154 KURL datURL = Kita::getDatURL( url );
155 int num = ( thread->viewPos() ? thread->viewPos() : thread->readNum() );
156 KitaThreadInfo::setResNum( datURL.prettyURL(), thread->resNum() );
157 KitaThreadInfo::setReadNum( datURL.prettyURL(), num );
161 /*------------------------------------------------------------------*/
163 /* private */ /* static */
164 QString ThreadIndex::getSubjectPrivate( KConfig& config )
166 return config.readEntry( "Subject" );
169 /* private */ /* static */
170 void ThreadIndex::setSubjectPrivate( const QString& str, KConfig& config )
172 config.writeEntry( "Subject", str );
177 /* private */ /* static */
178 int ThreadIndex::getResNumPrivate( const KURL& url, KConfig& config )
180 int resNum = config.readNumEntry( "ResNum" );
182 /* use obsoleted "cache" file */
184 KURL datURL = Kita::getDatURL( url );
185 resNum = KitaThreadInfo::readNum( datURL.prettyURL() );
186 if( resNum ) config.writeEntry( "ResNum", resNum );
192 /* private */ /* static */
193 void ThreadIndex::setResNumPrivate( int resNum, KConfig& config )
195 config.writeEntry( "ResNum", resNum );
200 /* private */ /* static */
201 int ThreadIndex::getReadNumPrivate( const KURL& url, KConfig& config, bool checkCached )
203 /* If cache does not exist, return 0 */
206 QString path = Kita::DatManager::getCachePath( url );
207 if( ! QFile::exists( path ) ){
208 qDebug("%s does not exits",path.ascii());
213 int readNum = config.readNumEntry( "ReadNum" );
217 /* use ViewPos instead of ReadNum. */
218 readNum = config.readNumEntry( "ViewPos" );
220 /* use obsoleted "cache" file */
222 KURL datURL = Kita::getDatURL( url );
223 readNum = KitaThreadInfo::readNum( datURL.prettyURL() );
226 if( readNum ) config.writeEntry( "ReadNum", readNum );
232 /* private */ /* static */
233 void ThreadIndex::setReadNumPrivate( int readNum, KConfig& config )
235 config.writeEntry( "ReadNum", readNum );
240 /* private */ /* static */
241 int ThreadIndex::getViewPosPrivate( KConfig& config )
243 return config.readNumEntry( "ViewPos" );
246 /* private */ /* static */
247 void ThreadIndex::setViewPosPrivate( int viewPos, KConfig& config )
249 config.writeEntry( "ViewPos", viewPos );
254 /* private */ /* static */
255 QValueList< int > ThreadIndex::getMarkListPrivate( KConfig& config )
257 return config.readIntListEntry( "Mark" );
260 /* private */ /* static */
261 void ThreadIndex::setMarkListPrivate( const QValueList< int >& markList, KConfig& config )
263 config.writeEntry( "Mark", markList );