File indexing completed on 2023-09-24 08:19:52

0001 /* ============================================================
0002  *
0003  * This file is a part of KDE project
0004  *
0005  *
0006  * Date        : 2005-07-07
0007  * Description : a kipi plugin to export images to Flickr web service
0008  *
0009  * Copyright (C) 2005-2008 by Vardhman Jain <vardhman at gmail dot com>
0010  * Copyright (C) 2008-2018 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * This program is free software; you can redistribute it
0013  * and/or modify it under the terms of the GNU General
0014  * Public License as published by the Free Software Foundation;
0015  * either version 2, or (at your option) any later version.
0016  *
0017  * This program is distributed in the hope that it will be useful,
0018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0020  * GNU General Public License for more details.
0021  *
0022  * ============================================================ */
0023 
0024 #include "mpform.h"
0025 
0026 // Qt includes
0027 
0028 #include <QFile>
0029 #include <QUrl>
0030 #include <QApplication>
0031 #include <QMimeDatabase>
0032 #include <QMimeType>
0033 #include <QtGlobal>
0034 #include <QTime>
0035 
0036 // Local includes
0037 
0038 #include "kipiplugins_debug.h"
0039 #include "kputil.h"
0040 
0041 namespace KIPIFlickrPlugin
0042 {
0043 
0044 MPForm::MPForm()
0045 {
0046     m_boundary  = "----------";
0047     m_boundary += KIPIPlugins::KPRandomGenerator::randomString(42 + 13).toLatin1();
0048 }
0049 
0050 MPForm::~MPForm()
0051 {
0052 }
0053 
0054 void MPForm::reset()
0055 {
0056     m_buffer.resize(0);
0057 }
0058 
0059 void MPForm::finish()
0060 {
0061     QByteArray str;
0062     str += "--";
0063     str += m_boundary;
0064     str += "--";
0065     m_buffer.append(str);
0066 }
0067 
0068 bool MPForm::addPair(const QString& name, const QString& value, const QString& contentType)
0069 {
0070     QByteArray str;
0071     QString content_length = QString::fromLatin1("%1").arg(value.length());
0072 
0073     str += "--";
0074     str += m_boundary;
0075     str += "\r\n";
0076 
0077     if (!name.isEmpty())
0078     {
0079         str += "Content-Disposition: form-data; name=\"";
0080         str += name.toLatin1();
0081         str += "\"\r\n";
0082     }
0083 
0084     if (!contentType.isEmpty())
0085     {
0086         str += "Content-Type: " + QByteArray(contentType.toLatin1());
0087         str += "\r\n";
0088         str += "Mime-version: 1.0 ";
0089         str += "\r\n";
0090     }
0091 
0092     str += "Content-Length: ";
0093     str += content_length.toLatin1();
0094     str += "\r\n\r\n";
0095     str += value.toUtf8();
0096 
0097     m_buffer.append(str);
0098     m_buffer.append("\r\n");
0099     return true;
0100 }
0101 
0102 bool MPForm::addFile(const QString& name, const QString& path)
0103 {
0104     QMimeDatabase db;
0105     QMimeType ptr = db.mimeTypeForUrl(QUrl::fromLocalFile(path));
0106     QString mime  = ptr.name();
0107 
0108     if (mime.isEmpty())
0109     {
0110         // if we ourselves can't determine the mime of the local file,
0111         // very unlikely the remote site will be able to identify it
0112         return false;
0113     }
0114 
0115     QFile imageFile(path);
0116 
0117     if (!imageFile.open(QIODevice::ReadOnly))
0118     {
0119         return false;
0120     }
0121 
0122     QByteArray imageData = imageFile.readAll();
0123 
0124     QByteArray str;
0125     QString file_size = QString::fromLatin1("%1").arg(imageFile.size());
0126     imageFile.close();
0127 
0128     str += "--";
0129     str += m_boundary;
0130     str += "\r\n";
0131     str += "Content-Disposition: form-data; name=\"";
0132     str += name.toLatin1();
0133     str += "\"; ";
0134     str += "filename=\"";
0135     str += QFile::encodeName(QUrl::fromLocalFile(path).fileName());
0136     str += "\"\r\n";
0137     str += "Content-Length: ";
0138     str += file_size.toLatin1();
0139     str += "\r\n";
0140     str += "Content-Type: ";
0141     str +=  mime.toLatin1();
0142     str += "\r\n\r\n";
0143 
0144     m_buffer.append(str);
0145     m_buffer.append(imageData);
0146     m_buffer.append("\r\n");
0147 
0148     return true;
0149 }
0150 
0151 QString MPForm::contentType() const
0152 {
0153     return QString(QString::fromLatin1("multipart/form-data; boundary=") + QLatin1String(m_boundary));
0154 }
0155 
0156 QString MPForm::boundary() const
0157 {
0158     return QLatin1String(m_boundary);
0159 }
0160 
0161 QByteArray MPForm::formData() const
0162 {
0163     return m_buffer;
0164 }
0165 
0166 } // namespace KIPIFlickrPlugin