/***************************************************************************
- * Copyright (C) 2003 by Hideki Ikemoto *
- * ikemo@users.sourceforge.jp *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- ***************************************************************************/
+* Copyright (C) 2003 by Hideki Ikemoto *
+* ikemo@users.sourceforge.jp *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+***************************************************************************/
#include "thread.h"
ThreadFactory* ThreadFactory::instance = 0;
Thread::Thread()
-{
-}
+{}
Thread::Thread( const QString& datURL, const QString& threadName )
- : m_datURL( datURL ), m_threadName( threadName )
-{
-}
-
-Thread::Thread( const Thread& obj )
-{
- m_datURL = obj.m_datURL;
- m_threadName = obj.m_threadName;
- setResNum( obj.resNum() );
-}
+ : m_datURL( datURL ), m_threadName( threadName )
+{}
Thread::~Thread()
-{
-}
-
-Thread& Thread::operator=( const Thread& obj )
-{
- m_datURL = obj.m_datURL;
- m_threadName = obj.m_threadName;
- setResNum( obj.resNum() );
-
- return *this;
-}
+{}
const QString& Thread::datURL() const
{
- return m_datURL;
+ return m_datURL;
}
const QString Thread::url() const
const QString Thread::datID() const
{
- return KURL( m_datURL ).filename().section( ".", 0, 0 );
+ return KURL( m_datURL ).filename().section( ".", 0, 0 );
}
int Thread::resNum() const
const QString& Thread::name() const
{
- return m_threadName;
+ return m_threadName;
}
void Thread::setResNum( int resNum )
const QString& Thread::boardName() const
{
- Board* board = Board::getByURL( boardURL() );
+ Board * board = Board::getByURL( boardURL() );
return board->name();
}
const QString Thread::boardURL() const
{
- return datToBoard( m_datURL );
+ return datToBoard( m_datURL );
}
const QString Thread::boardID() const
{
- return KURL( datToBoard( m_datURL ) ).fileName();
+ return KURL( datToBoard( m_datURL ) ).fileName();
}
const QString Thread::toXmlFragment() const
{
- QString ret;
+ QString ret;
- ret += "<thread xmlns=\"http://kita.sourceforge.jp/ns/thread\">\n";
- ret += QString("<daturl>%1</daturl>\n").arg( m_datURL );
- ret += QString("<name>%1</name>\n").arg( m_threadName );
- ret += QString("<resnum>%1</resnum>\n").arg( resNum() );
+ ret += "<thread xmlns=\"http://kita.sourceforge.jp/ns/thread\">\n";
+ ret += QString( "<daturl>%1</daturl>\n" ).arg( m_datURL );
+ ret += QString( "<name>%1</name>\n" ).arg( m_threadName );
+ ret += QString( "<resnum>%1</resnum>\n" ).arg( resNum() );
- // FIXME: Board¥¯¥é¥¹¤«¤é¥³¥Ô¡¼
- ret += "<board xmlns=\"http://kita.sourceforge.jp/ns/board\">\n";
- ret += QString("<url>%1</url>\n").arg( boardURL() );
- ret += QString("<name>%1</name>\n").arg( boardName() );
- ret += "</board>\n";
+ // FIXME: Board¥¯¥é¥¹¤«¤é¥³¥Ô¡¼
+ ret += "<board xmlns=\"http://kita.sourceforge.jp/ns/board\">\n";
+ ret += QString( "<url>%1</url>\n" ).arg( boardURL() );
+ ret += QString( "<name>%1</name>\n" ).arg( boardName() );
+ ret += "</board>\n";
- ret += "</thread>\n";
+ ret += "</thread>\n";
- return ret;
+ return ret;
}
Thread Thread::fromXml( const QString& xml )
{
- Thread thread;
-
- ThreadXmlParser parser;
- QXmlSimpleReader reader;
- QXmlInputSource source;
- source.setData( xml );
- reader.setContentHandler( &parser );
- reader.parse( &source );
-
- if( parser.isValid() ) {
- thread = parser.getThread();
- } else {
- kdError() << "inValid" << endl;
- }
-
- return thread;
+ Thread thread;
+
+ ThreadXmlParser parser;
+ QXmlSimpleReader reader;
+ QXmlInputSource source;
+ source.setData( xml );
+ reader.setContentHandler( &parser );
+ reader.parse( &source );
+
+ if ( parser.isValid() ) {
+ thread = parser.getThread();
+ } else {
+ kdError() << "inValid" << endl;
+ }
+
+ return thread;
}
+ThreadXmlParser::ThreadXmlParser()
+ : m_boardParser( 0 ), m_inBoard( false ), m_isValid( false ), m_inThread( false )
+{};
+
bool ThreadXmlParser::startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts )
{
- if( m_inBoard ) {
- m_boardParser->startElement( namespaceURI, localName, qName, atts );
- } else if( m_inThread ) {
- if( localName == "daturl" ) {
- } else if( localName == "name" ) {
- } else if( localName == "resnum" ) {
- } else if( localName == "board" ) {
- m_inBoard = true;
- m_boardParser = new BoardXmlParser();
- m_boardParser->startElement( namespaceURI, localName, qName, atts );
+ if ( m_inBoard ) {
+ m_boardParser->startElement( namespaceURI, localName, qName, atts );
+ } else if ( m_inThread ) {
+ if ( localName == "daturl" ) {} else if ( localName == "name" ) {} else if ( localName == "resnum" ) {} else if ( localName == "board" ) {
+ m_inBoard = true;
+ m_boardParser = new BoardXmlParser();
+ m_boardParser->startElement( namespaceURI, localName, qName, atts );
+ } else {
+ // error
+ return false;
+ }
} else {
- // error
- return false;
+ if ( localName == "thread" ) {
+ m_inThread = true;
+ } else {
+ // error
+ return false;
+ }
}
- } else {
- if( localName == "thread" ) {
- m_inThread = true;
- } else {
- // error
- return false;
- }
- }
- return true;
+ return true;
}
// TODO: <resnum>¤ÏFavorites¤Ç¤Ï»È¤ï¤Ê¤¤¤³¤È¤Ë¤Ê¤Ã¤¿¤Î¤Çºï½ü¤¹¤ëɬÍפ¢¤ê¡£
bool ThreadXmlParser::endElement( const QString& namespaceURI, const QString& localName, const QString& qName )
{
- if( localName == "board" ) {
- m_inBoard = false;
- m_boardParser->endElement( namespaceURI, localName, qName );
-
- delete m_boardParser;
- m_boardParser = 0;
-
- // create board;
- } else if( m_inBoard ) {
- m_boardParser->endElement( namespaceURI, localName, qName );
- } else if( localName == "thread" ) {
- m_inThread = false;
- m_thread = Kita::Thread( m_datUrlStr, m_threadName );
- KitaThreadInfo::setResNum( m_datUrlStr, m_resNum );
- m_isValid = true;
- // create thread;
- } else if( localName == "daturl" ) {
- m_datUrlStr = m_characters;
- } else if( localName == "name" ) {
- m_threadName = m_characters;
- } else if( localName == "resnum" ) {
- m_resNum = m_characters.toInt();
- } else {
- // error
- return false;
- }
- return true;
+ if ( localName == "board" ) {
+ m_inBoard = false;
+ m_boardParser->endElement( namespaceURI, localName, qName );
+
+ delete m_boardParser;
+ m_boardParser = 0;
+
+ // create board;
+ } else if ( m_inBoard ) {
+ m_boardParser->endElement( namespaceURI, localName, qName );
+ } else if ( localName == "thread" ) {
+ m_inThread = false;
+ m_thread = Kita::Thread( m_datUrlStr, m_threadName );
+ KitaThreadInfo::setResNum( m_datUrlStr, m_resNum );
+ m_isValid = true;
+ // create thread;
+ } else if ( localName == "daturl" ) {
+ m_datUrlStr = m_characters;
+ } else if ( localName == "name" ) {
+ m_threadName = m_characters;
+ } else if ( localName == "resnum" ) {
+ m_resNum = m_characters.toInt();
+ } else {
+ // error
+ return false;
+ }
+ return true;
}
bool ThreadXmlParser::characters( const QString& ch )
{
- if( m_inBoard ) {
- m_boardParser->characters( ch );
- } else {
- m_characters = ch;
- }
- return true;
+ if ( m_inBoard ) {
+ m_boardParser->characters( ch );
+ } else {
+ m_characters = ch;
+ }
+ return true;
}
QString ThreadAccess::get()
{
- if ( KURL( m_thread.datURL() ).protocol() != "k2ch" ) {
- KIO::SlaveConfig::self()->setConfigData("http",
- KURL( m_thread.datURL() ).host(),
- "UserAgent",
- QString( "Monazilla/1.00 (Kita/%1)" ).arg( VERSION ) );
- }
+ if ( KURL( m_thread.datURL() ).protocol() != "k2ch" ) {
+ KIO::SlaveConfig::self() ->setConfigData( "http",
+ KURL( m_thread.datURL() ).host(),
+ "UserAgent",
+ QString( "Monazilla/1.00 (Kita/%1)" ).arg( VERSION ) );
+ }
- KIO::TransferJob* job = KIO::get(m_thread.datURL(), true, true);
- m_currentJob = job;
+ KIO::TransferJob* job = KIO::get( m_thread.datURL(), true, true );
+ m_currentJob = job;
- connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)),
- SLOT(slotReceiveThreadData(KIO::Job*, const QByteArray&)));
- connect(job, SIGNAL(result(KIO::Job*)), SLOT(slotThreadResult(KIO::Job*)));
- connect(job, SIGNAL(redirection(KIO::Job *, const KURL&) ), SLOT(slotRedirection(KIO::Job *, const KURL&) ) );
+ connect( job, SIGNAL( data( KIO::Job*, const QByteArray& ) ),
+ SLOT( slotReceiveThreadData( KIO::Job*, const QByteArray& ) ) );
+ connect( job, SIGNAL( result( KIO::Job* ) ), SLOT( slotThreadResult( KIO::Job* ) ) );
+ connect( job, SIGNAL( redirection( KIO::Job *, const KURL& ) ), SLOT( slotRedirection( KIO::Job *, const KURL& ) ) );
- // use 'HTTP-Headers' metadata.
- job->addMetaData("PropagateHttpHeader", "true");
+ // use 'HTTP-Headers' metadata.
+ job->addMetaData( "PropagateHttpHeader", "true" );
- enter_loop();
+ enter_loop();
- QCp932Codec codec;
- return codec.toUnicode( m_threadData );
+ QCp932Codec codec;
+ return codec.toUnicode( m_threadData );
}
// from netaccess.cpp
void ThreadAccess::enter_loop()
{
- QWidget dummy( 0, 0, WType_Dialog | WShowModal );
- dummy.setFocusPolicy( QWidget::NoFocus );
- qt_enter_modal(&dummy);
- qApp->enter_loop();
- qt_leave_modal(&dummy);
+ QWidget dummy( 0, 0, WType_Dialog | WShowModal );
+ dummy.setFocusPolicy( QWidget::NoFocus );
+ qt_enter_modal( &dummy );
+ qApp->enter_loop();
+ qt_leave_modal( &dummy );
}
-void ThreadAccess::slotRedirection(KIO::Job *, const KURL & newURL)
+void ThreadAccess::slotRedirection( KIO::Job *, const KURL & newURL )
{
- kdDebug() << "Redirected to newURL: " << newURL.url() << endl;
- Kita::Board::setName( datToBoard( newURL.url() ), m_thread.boardName() );
- m_thread = Kita::Thread( newURL.url() );
- emit redirection( newURL.url() );
+ kdDebug() << "Redirected to newURL: " << newURL.url() << endl;
+ Kita::Board::setName( datToBoard( newURL.url() ), m_thread.boardName() );
+ m_thread = Kita::Thread( newURL.url() );
+ emit redirection( newURL.url() );
}
void ThreadAccess::slotReceiveThreadData( KIO::Job*, const QByteArray& data )
{
- QCString cstr(data.data(), data.size()+1);
- m_threadData.append(cstr);
+ QCString cstr( data.data(), data.size() + 1 );
+ m_threadData.append( cstr );
}
-void ThreadAccess::slotThreadResult(KIO::Job* job)
+void ThreadAccess::slotThreadResult( KIO::Job* job )
{
- m_currentJob = 0;
- if(job->error()) {
- job->showErrorDialog();
- } else {
- m_header = job->queryMetaData("HTTP-Headers");
- }
- qApp->exit_loop();
+ m_currentJob = 0;
+ if ( job->error() ) {
+ job->showErrorDialog();
+ } else {
+ m_header = job->queryMetaData( "HTTP-Headers" );
+ }
+ qApp->exit_loop();
}
void ThreadAccess::killJob()
{
- if( m_currentJob ) m_currentJob->kill();
+ if ( m_currentJob ) m_currentJob->kill();
}
int ThreadAccess::serverTime()
// parse HTTP headers
QStringList headerList = QStringList::split( "\n", m_header );
QRegExp regexp( "Date: (...), (..) (...) (....) (..:..:..) .*" );
- QString dateStr = headerList.grep(regexp)[0];
- if( regexp.search(dateStr) == -1 ) {
+ QString dateStr = headerList.grep( regexp ) [ 0 ];
+ if ( regexp.search( dateStr ) == -1 ) {
// invalid date format
return QDateTime::currentDateTime().toTime_t();
} else {
// I hate this format ;p
- QString usLocalDateStr = regexp.cap(1) + " " + regexp.cap(3) + " " +
- regexp.cap(2) + " " + regexp.cap(5) + " " +
- regexp.cap(4);
+ QString usLocalDateStr = regexp.cap( 1 ) + " " + regexp.cap( 3 ) + " " +
+ regexp.cap( 2 ) + " " + regexp.cap( 5 ) + " " +
+ regexp.cap( 4 );
// 1970/01/01 00:00:00 GMT
- QDateTime zeroTime(QDate(1970, 1, 1), QTime(0, 0));
- return zeroTime.secsTo(QDateTime::fromString(usLocalDateStr));
+ QDateTime zeroTime( QDate( 1970, 1, 1 ), QTime( 0, 0 ) );
+ return zeroTime.secsTo( QDateTime::fromString( usLocalDateStr ) );
}
}
void ThreadFactory::insertThread( Thread& thread )
{
- if( ! instance ) {
- instance = new ThreadFactory();
- }
+ if ( ! instance ) {
+ instance = new ThreadFactory();
+ }
- Thread* new_thread = new Thread( thread.datURL(), thread.name() );
- KitaThreadInfo::setResNum( thread.datURL(), thread.resNum() );
- instance->m_dict.insert( thread.datURL(), new_thread );
+ Thread* new_thread = new Thread( thread.datURL(), thread.name() );
+ KitaThreadInfo::setResNum( thread.datURL(), thread.resNum() );
+ instance->m_dict.insert( thread.datURL(), new_thread );
}
Thread* ThreadFactory::getThread( QString& datURL )
{
- if( ! instance ) {
- instance = new ThreadFactory();
- }
+ if ( ! instance ) {
+ instance = new ThreadFactory();
+ }
- return instance->m_dict[ datURL ];
+ return instance->m_dict[ datURL ];
}
#include "thread.moc"
/***************************************************************************
- * Copyright (C) 2003 by Hideki Ikemoto *
- * ikemo@users.sourceforge.jp *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- ***************************************************************************/
+* Copyright (C) 2003 by Hideki Ikemoto *
+* ikemo@users.sourceforge.jp *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+***************************************************************************/
#ifndef KITATHREAD_H
#define KITATHREAD_H
-#include <kurl.h>
-
#include <qobject.h>
#include <qxml.h>
#include <qdict.h>
-namespace KIO {
- class Job;
+namespace KIO
+{
+ class Job;
};
-namespace Kita {
-
-/**
-@author Hideki Ikemoto
-*/
- class Board;
- class BoardXmlParser;
-
- class Thread
- {
- QString m_datURL;
- QString m_threadName;
- public:
- Thread( const QString& datURL, const QString& threadName = QString::null );
- Thread();
- Thread( const Thread& obj );
- ~Thread();
- Thread& operator=( const Thread& obj );
- const QString& datURL() const;
- const QString url() const;
- const QString datID() const;
- int resNum() const;
- const QString& name() const;
- void setName(const QString& name) { m_threadName = name; }
- void setResNum(int resNum);
- const QString& boardName() const;
- const QString boardURL() const;
- const QString boardID() const;
-
- const QString toXmlFragment() const;
- static Thread fromXml( const QString& xml );
- };
-
- class ThreadFactory
- {
- public:
- static void insertThread( Thread& thread );
- static Thread* getThread( QString& datURL );
- private:
- ThreadFactory() {};
- ~ThreadFactory() {};
- static ThreadFactory* instance;
- QDict<Thread> m_dict;
- };
-
- class ThreadXmlParser : public QXmlDefaultHandler
- {
- QString m_datUrlStr;
- QString m_threadName;
- int m_resNum;
- Thread m_thread;
- BoardXmlParser* m_boardParser;
-
- QString m_characters;
-
- bool m_inBoard;
- bool m_isValid;
- bool m_inThread;
- public:
- ThreadXmlParser() : m_boardParser(0), m_inBoard(false), m_isValid(false), m_inThread(false) {};
- ~ThreadXmlParser() {};
- bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts );
- bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName );
- bool characters( const QString& ch );
- bool isValid() const { return m_isValid; }
- Thread getThread() const { return m_thread; }
- };
-
- class ThreadAccess : public QObject {
- Q_OBJECT
-
- Thread m_thread;
- KIO::Job* m_currentJob;
- QCString m_threadData;
- QString m_header;
- public:
- ThreadAccess( const Thread& thread ) : m_thread(thread) {};
- ~ThreadAccess() {};
- QString get();
- void killJob();
- int serverTime();
- private:
- void enter_loop();
- private slots:
- void slotReceiveThreadData( KIO::Job* job, const QByteArray& data );
- void slotRedirection( KIO::Job* job, const KURL& );
- void slotThreadResult( KIO::Job* job );
- signals:
- void redirection( const QString& );
- };
+class KURL;
+
+namespace Kita
+{
+ /**
+ @author Hideki Ikemoto
+ */
+ class Board;
+ class BoardXmlParser;
+
+ class Thread
+ {
+ public:
+ Thread( const QString& datURL, const QString& threadName = QString::null );
+ Thread();
+ ~Thread();
+
+ const QString& datURL() const;
+ const QString url() const;
+ const QString datID() const;
+ void setName( const QString& name ) { m_threadName = name; }
+ const QString& name() const;
+ void setResNum( int resNum );
+ int resNum() const;
+ const QString& boardName() const;
+ const QString boardURL() const;
+ const QString boardID() const;
+
+ const QString toXmlFragment() const;
+ static Thread fromXml( const QString& xml );
+
+ private:
+ QString m_datURL;
+ QString m_threadName;
+ };
+
+ class ThreadFactory
+ {
+ public:
+ static void insertThread( Thread& thread );
+ static Thread* getThread( QString& datURL );
+
+ private:
+ static ThreadFactory* instance;
+ QDict<Thread> m_dict;
+
+ ThreadFactory() {};
+ ~ThreadFactory() {};
+ };
+
+ class ThreadXmlParser : public QXmlDefaultHandler
+ {
+ public:
+ ThreadXmlParser();
+ ~ThreadXmlParser() {};
+ bool startElement( const QString& namespaceURI,
+ const QString& localName,
+ const QString& qName,
+ const QXmlAttributes& atts );
+ bool endElement( const QString& namespaceURI,
+ const QString& localName,
+ const QString& qName );
+ bool characters( const QString& ch );
+ bool isValid() const { return m_isValid; }
+ Thread getThread() const { return m_thread; }
+
+ private:
+ QString m_datUrlStr;
+ QString m_threadName;
+ int m_resNum;
+ Thread m_thread;
+ BoardXmlParser* m_boardParser;
+
+ QString m_characters;
+
+ bool m_inBoard;
+ bool m_isValid;
+ bool m_inThread;
+ };
+
+ class ThreadAccess : public QObject
+ {
+ Q_OBJECT
+
+ public:
+ ThreadAccess( const Thread& thread ) : m_thread( thread ) {};
+ ~ThreadAccess() {};
+
+ QString get();
+ void killJob();
+ int serverTime();
+
+ private:
+ void enter_loop();
+
+ Thread m_thread;
+ KIO::Job* m_currentJob;
+ QCString m_threadData;
+ QString m_header;
+
+ private slots:
+ void slotReceiveThreadData( KIO::Job* job, const QByteArray& data );
+ void slotRedirection( KIO::Job* job, const KURL& );
+ void slotThreadResult( KIO::Job* job );
+
+ signals:
+ void redirection( const QString& );
+ };
};
#endif