TwitterMicroBlog plugin made operational.
[choqok:choqok-obsolete.git] / microblogs / twitter / twittereditaccount.cpp
1 /*
2 This file is part of Choqok, the KDE micro-blogging client
3
4 Copyright (C) 2008-2009 Mehrdad Momeny <mehrdad.momeny@gmail.com>
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License as
8 published by the Free Software Foundation; either version 2 of
9 the License or (at your option) version 3 or any later version
10 accepted by the membership of KDE e.V. (or its successor approved
11 by the membership of KDE e.V.), which shall act as a proxy
12 defined in Section 14 of version 3 of the license.
13
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, see http://www.gnu.org/licenses/
22 */
23
24 #include "twittereditaccount.h"
25 #include "twittermicroblog.h"
26 #include "twitteraccount.h"
27 #include <KDebug>
28 #include <kio/jobclasses.h>
29 #include <kio/netaccess.h>
30 #include <kio/job.h>
31 #include <KMessageBox>
32 #include <QDomDocument>
33 #include <KToolInvocation>
34
35
36 TwitterEditAccountWidget::TwitterEditAccountWidget(TwitterMicroBlog *microblog,
37                                                     TwitterAccount* account, QWidget* parent)
38     : ChoqokEditAccountWidget(account, parent), mAccount(account)
39 {
40     setupUi(this);
41     if(mAccount) {
42         groupBoxRegister->hide();
43         kcfg_username->setText( mAccount->username() );
44         kcfg_password->setText( mAccount->password() );
45         kcfg_alias->setText( mAccount->alias() );
46         kcfg_readonly->setChecked( mAccount->isReadOnly() );
47         kcfg_secure->setChecked( mAccount->useSecureConnection() );
48     } else {
49         setAccount( mAccount = new TwitterAccount(microblog, microblog->serviceName()) );
50         kcfg_alias->setText( microblog->serviceName() );
51     }
52     kcfg_alias->setFocus(Qt::OtherFocusReason);
53 }
54
55 TwitterEditAccountWidget::~TwitterEditAccountWidget()
56 {
57 }
58
59 bool TwitterEditAccountWidget::validateData()
60 {
61     if(kcfg_alias->text().isEmpty() || kcfg_username->text().isEmpty() ||
62         kcfg_password->text().isEmpty() )
63         return false;
64     else
65         return true;
66 }
67
68 Choqok::Account* TwitterEditAccountWidget::apply()
69 {
70     if ( !verifyCredentials() )
71         return 0;
72     mAccount->setAlias(kcfg_alias->text());
73     mAccount->setReadOnly(kcfg_readonly->isChecked());
74     mAccount->setUseSecureConnection(kcfg_secure->isChecked());
75     mAccount->writeConfig();
76     return mAccount;
77 }
78
79 void TwitterEditAccountWidget::slotRegisterNewAccount()
80 {
81     KToolInvocation::invokeBrowser( "http://twitter.com/signup" );
82 }
83
84 bool TwitterEditAccountWidget::verifyCredentials()
85 {
86     kDebug();
87     KUrl url( "http://twitter.com/account/verify_credentials.xml" );
88     if(kcfg_secure->isChecked())
89         url.setScheme("https");
90     url.setUserName(kcfg_username->text());
91     url.setPassword(kcfg_password->text());
92
93     KIO::TransferJob *job = KIO::get( url, KIO::Reload, KIO::HideProgressInfo );
94     if ( !job ) {
95         kDebug() << "Cannot create an http GET request.";
96         QString errMsg = i18n ( "Cannot create an http GET request." );
97         KMessageBox::error(this, errMsg);
98         return false;
99     }
100     QByteArray data;
101     if( KIO::NetAccess::synchronousRun(job, this, &data) ) {
102         QDomDocument document;
103         document.setContent ( data );
104         QDomElement root = document.documentElement();
105         if ( root.tagName() == "user" ) {
106             QDomNode node2 = root.firstChild();
107             QString timeStr;
108             while ( !node2.isNull() ) {
109                 if ( node2.toElement().tagName() == "id" ) {
110                     mAccount->setUsername( kcfg_username->text() );
111                     mAccount->setPassword( kcfg_password->text() );
112                     mAccount->setUserId( node2.toElement().text() );
113                     return true;
114                     break;
115                 }
116                 node2 = node2.nextSibling();
117             }
118         } else if ( root.tagName() == "hash" ) {
119             QDomNode node2 = root.firstChild();
120             while ( !node2.isNull() ) {
121                 if ( node2.toElement().tagName() == "error" ) {
122                     KMessageBox::detailedError(this, i18n ( "Authentication failed" ), node2.toElement().text() );
123                     return false;
124                 }
125                 node2 = node2.nextSibling();
126             }
127         } else {
128             kError() << "ERROR, unrecognized result, buffer is: " << data;
129             KMessageBox::error( this, i18n ( "Unrecognized result." ) );
130             return false;
131         }
132     } else {
133         KMessageBox::detailedError(this, i18n("Authentication failed"),
134                                     job->errorString());
135         return false;
136     }
137     return false;
138 }
139