~ubuntu-branches/ubuntu/oneiric/kdeplasma-addons/oneiric

« back to all changes in this revision

Viewing changes to dataengines/pastebin/backends/imagebinca.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-11-26 13:35:18 UTC
  • mfrom: (1.1.37 upstream)
  • Revision ID: james.westby@ubuntu.com-20101126133518-oxz33xjsoi02ty9f
Tags: 4:4.5.80-0ubuntu1
* New upstream beta release
* Disable kubuntu_02_microblog_default_configuration.diff does not apply
* New package plasma-containments-addons

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 *   Copyright (C) 2007 by Artur Duque de Souza <morpheuz@gmail.com>       *
3
 
 *                         Vardhman Jain <vardhman@gmail.com>              *
4
 
 *                         Gilles Caulier <caulier.gilles@gmail.com>       *
5
 
 *                                                                         *
6
 
 *   This program is free software; you can redistribute it and/or modify  *
7
 
 *   it under the terms of the GNU General Public License as published by  *
8
 
 *   the Free Software Foundation; either version 2 of the License, or     *
9
 
 *   (at your option) any later version.                                   *
10
 
 *                                                                         *
11
 
 *   This program is distributed in the hope that it will be useful,       *
12
 
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13
 
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14
 
 *   GNU General Public License for more details.                          *
15
 
 *                                                                         *
16
 
 *   You should have received a copy of the GNU General Public License     *
17
 
 *   along with this program; if not, write to the                         *
18
 
 *   Free Software Foundation, Inc.,                                       *
19
 
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
20
 
 ***************************************************************************/
21
 
 
22
 
#include "imagebinca.h"
23
 
 
24
 
#include <QFile>
25
 
#include <QString>
26
 
 
27
 
#include <kmimetype.h>
28
 
#include <kurl.h>
29
 
#include <krandom.h>
30
 
#include <kapplication.h>
31
 
#include <KDebug>
32
 
 
33
 
ImagebinCAServer::ImagebinCAServer(const QString &server)
34
 
{
35
 
    if (server.isEmpty()) {
36
 
        m_server = IMAGEBINCA_SERVER;
37
 
    } else {
38
 
        m_server = server;
39
 
    }
40
 
 
41
 
    m_privacy = 0; //config.readEntry("imagebinPrivacy", 0);
42
 
 
43
 
    m_boundary  = "----------";
44
 
    m_boundary += KRandom::randomString(42 + 13).toAscii();
45
 
}
46
 
 
47
 
ImagebinCAServer::~ImagebinCAServer()
48
 
{
49
 
}
50
 
 
51
 
void ImagebinCAServer::finished(KJob *job)
52
 
{
53
 
    Q_UNUSED(job);
54
 
 
55
 
    if (_data.length() == 0) {
56
 
        kDebug() << "Error!!! " << _data;
57
 
        emit postError();
58
 
        return;
59
 
    }
60
 
 
61
 
    QString url(_data);
62
 
    QRegExp re("<p>You can find this at <a href='([^<]+)'>([^<]+)</a></p>");
63
 
    if (!re.exactMatch(url)) {
64
 
        emit postError();
65
 
        return;
66
 
    }
67
 
    QString pasteUrl = re.cap(1);
68
 
 
69
 
    emit postFinished(pasteUrl);
70
 
}
71
 
 
72
 
 
73
 
void ImagebinCAServer::readKIOData(KIO::Job *job, const QByteArray &data)
74
 
{
75
 
    Q_UNUSED(job);
76
 
 
77
 
    if (data.length() == 0) {
78
 
        return;
79
 
    }
80
 
 
81
 
    _data.append(data);
82
 
}
83
 
 
84
 
// taken from flickr KIPI Plugin
85
 
void ImagebinCAServer::finish()
86
 
{
87
 
    QByteArray str;
88
 
    str += "--";
89
 
    str += m_boundary;
90
 
    str += "--";
91
 
 
92
 
    m_buffer.append(str);
93
 
}
94
 
 
95
 
// taken from flickr KIPI Plugin
96
 
bool ImagebinCAServer::addPair(const QString& name, const QString& value)
97
 
{
98
 
     QByteArray str;
99
 
 
100
 
     str += "--";
101
 
     str += m_boundary;
102
 
     str += "\r\n";
103
 
     str += "Content-Disposition: form-data; name=\"";
104
 
     str += name.toAscii();
105
 
     str += "\"";
106
 
     str += "\r\n\r\n";
107
 
     str += value.toUtf8();
108
 
     str += "\r\n";
109
 
 
110
 
     m_buffer.append(str);
111
 
     return true;
112
 
}
113
 
 
114
 
// taken from flickr KIPI Plugin
115
 
bool ImagebinCAServer::addFile(const QString& name,const QString& path)
116
 
{
117
 
    KMimeType::Ptr ptr = KMimeType::findByUrl(path);
118
 
    QString mime = ptr->name();
119
 
    if (mime.isEmpty()) {
120
 
        // if we ourselves can't determine the mime of the local file,
121
 
        // very unlikely the remote site will be able to identify it
122
 
        return false;
123
 
    }
124
 
 
125
 
    QFile imageFile(path);
126
 
    if (!imageFile.open(QIODevice::ReadOnly)) {
127
 
        return false;
128
 
    }
129
 
 
130
 
    QByteArray imageData = imageFile.readAll();
131
 
    imageFile.close();
132
 
 
133
 
    QByteArray str;
134
 
 
135
 
    str += "--";
136
 
    str += m_boundary;
137
 
    str += "\r\n";
138
 
    str += "Content-Disposition: form-data; name=\"";
139
 
    str += name.toAscii();
140
 
    str += "\"; ";
141
 
    str += "filename=\"";
142
 
    str += QFile::encodeName(KUrl(path).fileName()).replace(".tmp", ".jpg");
143
 
    str += "\"";
144
 
    str += "\r\n";
145
 
    str += "Content-Type: ";
146
 
    str +=  mime.toAscii();
147
 
    str += "\r\n\r\n";
148
 
 
149
 
    m_buffer.append(str);
150
 
 
151
 
    int oldSize = m_buffer.size();
152
 
    m_buffer.resize(oldSize + imageData.size() + 2);
153
 
    memcpy(m_buffer.data() + oldSize, imageData.data(), imageData.size());
154
 
    m_buffer[m_buffer.size()-2] = '\r';
155
 
    m_buffer[m_buffer.size()-1] = '\n';
156
 
 
157
 
    return true;
158
 
}
159
 
 
160
 
 
161
 
void ImagebinCAServer::post(const QString& content)
162
 
{
163
 
    KUrl url(QString("%1/upload.php").arg(m_server));
164
 
    addPair("t", "file");
165
 
    addPair("name", QFile::encodeName(KUrl(content).fileName()));
166
 
    addPair("tags", "plasma");
167
 
 
168
 
    QString adult;
169
 
    if(m_privacy == 0){
170
 
      adult = "f";
171
 
    } else {
172
 
      adult = "t";
173
 
    }
174
 
 
175
 
    addPair("adult", adult);
176
 
    addFile("f", content);
177
 
    finish();
178
 
 
179
 
    _data.clear();
180
 
 
181
 
    KIO::TransferJob *tf = KIO::http_post(url, m_buffer, KIO::HideProgressInfo);
182
 
 
183
 
    tf->addMetaData("content-type","Content-Type: multipart/form-data; boundary=" + m_boundary);
184
 
 
185
 
    connect(tf, SIGNAL(data(KIO::Job*, const QByteArray&)),
186
 
            this, SLOT(readKIOData(KIO::Job*, const QByteArray&)));
187
 
 
188
 
    connect(tf, SIGNAL(result(KJob *)), this, SLOT(finished(KJob *)));
189
 
}