00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "knconfig.h"
00016
00017 #include "kndisplayedheader.h"
00018 #include "knglobals.h"
00019 #include "settings.h"
00020 #include "utilities.h"
00021
00022 #include <klocale.h>
00023 #include <kstandarddirs.h>
00024 #include <kdebug.h>
00025 #include <kiconloader.h>
00026 #include <kiconeffect.h>
00027
00028
00029 KNode::Appearance::Appearance()
00030 {
00031 recreateLVIcons();
00032 i_cons[newFups] = UserIcon("newsubs");
00033 i_cons[eyes] = UserIcon("eyes");
00034 i_cons[ignore] = UserIcon("ignore");
00035 i_cons[mail] = SmallIcon("mail-message");
00036 i_cons[posting] = UserIcon("article");
00037 i_cons[canceledPosting] = SmallIcon("edit-delete");
00038 i_cons[savedRemote] = SmallIcon("edit-copy");
00039 i_cons[group] = UserIcon("group");
00040 }
00041
00042
00043 void KNode::Appearance::recreateLVIcons()
00044 {
00045 QPixmap tempPix = UserIcon("greyball");
00046
00047 QImage tempImg=tempPix.toImage();
00048 KIconEffect::colorize(tempImg, knGlobals.settings()->readArticleColor(), 1.0);
00049 i_cons[greyBall] = QPixmap::fromImage(tempImg);
00050
00051 tempImg=tempPix.toImage();
00052 KIconEffect::colorize(tempImg, knGlobals.settings()->unreadArticleColor(), 1.0);
00053 i_cons[redBall] = QPixmap::fromImage(tempImg);
00054
00055 tempPix = UserIcon("greyballchk");
00056
00057 tempImg=tempPix.toImage();
00058 KIconEffect::colorize(tempImg, knGlobals.settings()->readArticleColor(), 1.0);
00059 i_cons[greyBallChkd] = QPixmap::fromImage(tempImg);
00060
00061 tempImg=tempPix.toImage();
00062 KIconEffect::colorize(tempImg, knGlobals.settings()->unreadArticleColor(), 1.0);
00063 i_cons[redBallChkd] = QPixmap::fromImage(tempImg);
00064 }
00065
00066
00067
00068
00069
00070 KNode::DisplayedHeaders::DisplayedHeaders()
00071 {
00072 QString fname( KStandardDirs::locate( "data","knode/headers.rc" ) );
00073
00074 if (!fname.isNull()) {
00075 KConfig headerConf( fname, KConfig::SimpleConfig);
00076 QStringList headers = headerConf.groupList();
00077 headers.removeAll("<default>");
00078 headers.sort();
00079
00080 KNDisplayedHeader *h;
00081 QList<int> flags;
00082
00083 QStringList::Iterator it;
00084 for( it = headers.begin(); it != headers.end(); ++it ) {
00085 h=createNewHeader();
00086 KConfigGroup cg(&headerConf, (*it));
00087 h->setName(cg.readEntry("Name"));
00088 h->setTranslateName(cg.readEntry("Translate_Name",true));
00089 h->setHeader(cg.readEntry("Header"));
00090 flags=cg.readEntry("Flags",QList<int>());
00091 if(h->name().isNull() || h->header().isNull() || (flags.count()!=8)) {
00092 kDebug(5003) <<"KNConfig::DisplayedHeaders::DisplayedHeaders() : ignoring invalid/incomplete Header";
00093 remove(h);
00094 }
00095 else {
00096 for (int i=0; i<8; i++)
00097 h->setFlag(i, (flags[i]>0));
00098 h->createTags();
00099 }
00100 }
00101 }
00102 }
00103
00104
00105 KNode::DisplayedHeaders::~DisplayedHeaders()
00106 {
00107 for ( KNDisplayedHeader::List::Iterator it = mHeaderList.begin(); it != mHeaderList.end(); ++it )
00108 delete (*it);
00109 }
00110
00111
00112 void KNode::DisplayedHeaders::save()
00113 {
00114 if(!d_irty)
00115 return;
00116
00117 kDebug(5003) <<"KNConfig::DisplayedHeaders::save()";
00118
00119 QString dir( KStandardDirs::locateLocal( "data", "knode/" ) );
00120 if (dir.isNull()) {
00121 KNHelper::displayInternalFileError();
00122 return;
00123 }
00124 KConfig headerConf(dir+"headers.rc", KConfig::SimpleConfig);
00125 QStringList oldHeaders = headerConf.groupList();
00126
00127 QStringList::Iterator oldIt=oldHeaders.begin();
00128 for( ;oldIt != oldHeaders.end(); ++oldIt )
00129 headerConf.deleteGroup((*oldIt));
00130
00131 QList<int> flags;
00132 int idx=0;
00133 QString group;
00134
00135 for ( KNDisplayedHeader::List::Iterator it = mHeaderList.begin(); it != mHeaderList.end(); ++it ) {
00136 group.setNum(idx++);
00137 while (group.length()<3)
00138 group.prepend("0");
00139 KConfigGroup cg(&headerConf, group);
00140 cg.writeEntry("Name",(*it)->name());
00141 cg.writeEntry("Translate_Name",(*it)->translateName());
00142 cg.writeEntry("Header",(*it)->header());
00143 flags.clear();
00144 for (int i=0; i<8; i++) {
00145 if ((*it)->flag(i))
00146 flags << 1;
00147 else
00148 flags << 0;
00149 }
00150 cg.writeEntry("Flags",flags);
00151 }
00152 headerConf.sync();
00153 d_irty = false;
00154 }
00155
00156
00157 KNDisplayedHeader* KNode::DisplayedHeaders::createNewHeader()
00158 {
00159 KNDisplayedHeader *h=new KNDisplayedHeader();
00160 mHeaderList.append( h );
00161
00162 return h;
00163 }
00164
00165
00166 void KNode::DisplayedHeaders::remove(KNDisplayedHeader *h)
00167 {
00168 if ( !mHeaderList.removeAll( h ) )
00169 kDebug(5003) <<"KNConfig::DisplayedHeaders::remove() : cannot find pointer in list!";
00170
00171 }
00172
00173
00174 void KNode::DisplayedHeaders::up(KNDisplayedHeader *h)
00175 {
00176 int idx = mHeaderList.indexOf( h );
00177 if ( idx != -1 ) {
00178 mHeaderList.takeAt( idx );
00179 mHeaderList.insert( idx - 1, h );
00180 }
00181 else kDebug(5003) <<"KNConfig::DisplayedHeaders::up() : item not found in list";
00182 }
00183
00184
00185 void KNode::DisplayedHeaders::down(KNDisplayedHeader *h)
00186 {
00187 int idx = mHeaderList.indexOf( h );
00188 if ( idx != -1 ) {
00189 mHeaderList.takeAt( idx );
00190 mHeaderList.insert( idx + 1, h );
00191 }
00192 else kDebug(5003) <<"KNConfig::DisplayedHeaders::down() : item not found in list";
00193 }
00194
00195
00196
00197
00198
00199 KNode::XHeader::XHeader(const QString &s)
00200 {
00201 int pos = s.indexOf(": ");
00202 if ( pos != -1 ) {
00203 mName = s.left( pos );
00204 pos += 2;
00205 mValue = s.right( s.length() - pos );
00206 }
00207 }
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217 KNode::Cleanup::Cleanup( bool global ) :
00218
00219 d_oExpire( true ), r_emoveUnavailable( true ), p_reserveThr( true ),
00220 e_xpireInterval( 5 ), r_eadMaxAge( 10 ), u_nreadMaxAge( 15 ),
00221 mGlobal(global), mDefault(!global), mLastExpDate( QDate::currentDate() )
00222 {
00223 if (mGlobal) {
00224 loadConfig( knGlobals.config()->group( "EXPIRE" ) );
00225 }
00226 }
00227
00228
00229 void KNode::Cleanup::loadConfig(const KConfigGroup &conf)
00230 {
00231
00232 d_oExpire = conf.readEntry( "doExpire", true );
00233 r_emoveUnavailable = conf.readEntry( "removeUnavailable", true );
00234 p_reserveThr = conf.readEntry( "saveThreads", true );
00235 e_xpireInterval = conf.readEntry( "expInterval", 5 );
00236 r_eadMaxAge = conf.readEntry( "readDays", 10 );
00237 u_nreadMaxAge = conf.readEntry( "unreadDays", 15 );
00238 mLastExpDate = conf.readEntry( "lastExpire", QDateTime() ).date();
00239
00240
00241 if (mGlobal) {
00242 d_oCompact = conf.readEntry( "doCompact", true );
00243 c_ompactInterval = conf.readEntry( "comInterval", 5 );
00244 mLastCompDate = conf.readEntry( "lastCompact", QDateTime() ).date();
00245 }
00246
00247 if (!mGlobal)
00248 mDefault = conf.readEntry( "UseDefaultExpConf", true );
00249 }
00250
00251
00252 void KNode::Cleanup::saveConfig(KConfigGroup &conf)
00253 {
00254
00255 conf.writeEntry( "doExpire", d_oExpire );
00256 conf.writeEntry( "removeUnavailable", r_emoveUnavailable );
00257 conf.writeEntry( "saveThreads", p_reserveThr );
00258 conf.writeEntry( "expInterval", e_xpireInterval );
00259 conf.writeEntry( "readDays", r_eadMaxAge );
00260 conf.writeEntry( "unreadDays", u_nreadMaxAge );
00261 conf.writeEntry( "lastExpire", QDateTime(mLastExpDate) );
00262
00263
00264 if (mGlobal) {
00265 conf.writeEntry( "doCompact", d_oCompact );
00266 conf.writeEntry( "comInterval", c_ompactInterval );
00267 conf.writeEntry( "lastCompact", QDateTime(mLastCompDate) );
00268 }
00269
00270 if (!mGlobal)
00271 conf.writeEntry( "UseDefaultExpConf", mDefault );
00272
00273 conf.sync();
00274 }
00275
00276
00277 void KNode::Cleanup::save()
00278 {
00279 kDebug(5003) <<"KNConfig::Cleanup::save()";
00280 if (mGlobal) {
00281 KConfigGroup conf( knGlobals.config(), "EXPIRE" );
00282 saveConfig( conf );
00283 }
00284 }
00285
00286
00287 bool KNode::Cleanup::expireToday()
00288 {
00289 if (!d_oExpire)
00290 return false;
00291
00292 QDate today = QDate::currentDate();
00293 if (mLastExpDate == today)
00294 return false;
00295
00296 return (mLastExpDate.daysTo( today ) >= e_xpireInterval);
00297 }
00298
00299
00300 void KNode::Cleanup::setLastExpireDate()
00301 {
00302 mLastExpDate = QDateTime::currentDateTime().date();
00303 }
00304
00305
00306 bool KNode::Cleanup::compactToday()
00307 {
00308 if (!d_oCompact)
00309 return false;
00310
00311 QDate today = QDate::currentDate();
00312 if (mLastCompDate == today)
00313 return false;
00314
00315 return (mLastCompDate.daysTo( today ) >= c_ompactInterval);
00316 }
00317
00318
00319 void KNode::Cleanup::setLastCompactDate()
00320 {
00321 mLastCompDate = QDateTime::currentDateTime().date();
00322 }
00323
00324
00325
00326
00327
00328 #include "knconfig.moc"