correct place for filesystemandroid.cpp
This commit is contained in:
parent
21dee36398
commit
bdc28e632e
7 changed files with 116 additions and 846 deletions
|
@ -1,115 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://github.com/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include "filesystem.h"
|
|
||||||
#include <QtAndroidExtras>
|
|
||||||
|
|
||||||
|
|
||||||
FILESYSTEM *FILESYSTEM::instance()
|
|
||||||
{
|
|
||||||
static FILESYSTEM filesystem;
|
|
||||||
return &filesystem;
|
|
||||||
}
|
|
||||||
|
|
||||||
FILESYSTEM::FILESYSTEM(QObject *parent) : QObject(parent){}
|
|
||||||
|
|
||||||
void FILESYSTEM::setDirectory(QString Directory)
|
|
||||||
{
|
|
||||||
if (Directory!=m_Directory) {
|
|
||||||
m_Directory = Directory;
|
|
||||||
emit directoryChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString FILESYSTEM::Directory() const
|
|
||||||
{
|
|
||||||
return m_Directory;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString FILESYSTEM::homePath() const
|
|
||||||
{
|
|
||||||
QAndroidJniObject activity =QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative","activity", "()Landroid/app/Activity;");
|
|
||||||
QAndroidJniObject dir = activity.callObjectMethod("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", NULL);
|
|
||||||
QString homeDir=dir.toString();
|
|
||||||
return homeDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FILESYSTEM::fileexist(QString name)
|
|
||||||
{ return QFile::exists(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FILESYSTEM::makeDir(QString name)
|
|
||||||
{
|
|
||||||
QDir dir(m_Directory);
|
|
||||||
if (dir.mkdir(name)){
|
|
||||||
emit success(name);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
emit error(name,1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FILESYSTEM::makePath(QString name)
|
|
||||||
{
|
|
||||||
QDir dir(m_Directory);
|
|
||||||
if (dir.mkpath(name)){
|
|
||||||
emit success(name);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
emit error(name,1);}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FILESYSTEM::rmDir()
|
|
||||||
{
|
|
||||||
QDir dir(m_Directory);
|
|
||||||
if (dir.removeRecursively()){
|
|
||||||
emit success(m_Directory);
|
|
||||||
}
|
|
||||||
else {emit error(m_Directory,1);}
|
|
||||||
}
|
|
||||||
|
|
||||||
void FILESYSTEM::rmFile(QString name)
|
|
||||||
{
|
|
||||||
QDir dir(m_Directory);
|
|
||||||
if(dir.remove(name)){
|
|
||||||
emit success(name);
|
|
||||||
}
|
|
||||||
else {emit error(name,1);}
|
|
||||||
}
|
|
||||||
QFileInfoList FILESYSTEM::fileList()
|
|
||||||
{
|
|
||||||
QDir dir(m_Directory);
|
|
||||||
QStringList filters;
|
|
||||||
filters << "*.png" <<"*.PNG" << "*.jpg" << "*.JPG" << "*.JPEG";
|
|
||||||
dir.setNameFilters(filters);
|
|
||||||
dir.setSorting(QDir::Time | QDir::Reversed);
|
|
||||||
return dir.entryInfoList();
|
|
||||||
}
|
|
1
source-android/common/filesystemandroid.cpp
Symbolic link
1
source-android/common/filesystemandroid.cpp
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../source-linux/common/filesystemandroid.cpp
|
|
@ -1,73 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://git.friendi.ca/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
//#include <QtAndroidExtras/QAndroidJniObject>
|
|
||||||
//#include <QtAndroidExtras/QAndroidJniEnvironment>
|
|
||||||
#include "alarm.h"
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
#include <QtDBus/QtDBus>
|
|
||||||
//#include "AndroidNative/systemdispatcher.h"
|
|
||||||
|
|
||||||
ALARM *ALARM::instance()
|
|
||||||
{
|
|
||||||
static ALARM alarm;
|
|
||||||
return &alarm;
|
|
||||||
}
|
|
||||||
|
|
||||||
ALARM::ALARM(QObject *parent) : QObject(parent){}
|
|
||||||
|
|
||||||
void ALARM::setAlarm(int interval)
|
|
||||||
{
|
|
||||||
qDebug() << interval;
|
|
||||||
QVariantMap message;
|
|
||||||
message["value"] = interval;
|
|
||||||
// AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
|
|
||||||
// AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message);
|
|
||||||
//AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ALARM::notify(QString title, QString text, int id)
|
|
||||||
{
|
|
||||||
qDebug() << title << text;
|
|
||||||
QVariantMap message;
|
|
||||||
message["title"] = title;
|
|
||||||
message["message"] = text;
|
|
||||||
QDBusConnection bus = QDBusConnection::sessionBus();
|
|
||||||
QDBusInterface dbus_iface("org.freedesktop.Notifications", "/org/freedesktop/Notifications",
|
|
||||||
"org.freedesktop.Notifications", bus);
|
|
||||||
QString appname="Friendiqa";
|
|
||||||
uint v=12321;
|
|
||||||
if (dbus_iface.isValid()){
|
|
||||||
|
|
||||||
dbus_iface.call("Notify",appname,v,"",title,text,"","",5000);
|
|
||||||
}
|
|
||||||
// AndroidNative::SystemDispatcher::instance()->dispatch("Notifier.notify", message);
|
|
||||||
}
|
|
115
source-linux/common/filesystemandroid.cpp
Normal file
115
source-linux/common/filesystemandroid.cpp
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
// This file is part of Friendiqa
|
||||||
|
// https://github.com/lubuwest/Friendiqa
|
||||||
|
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
|
||||||
|
//
|
||||||
|
// 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 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// In addition, as a special exception, the copyright holders give
|
||||||
|
// permission to link the code of portions of this program with the
|
||||||
|
// OpenSSL library under certain conditions as described in each
|
||||||
|
// individual source file, and distribute linked combinations including
|
||||||
|
// the two.
|
||||||
|
//
|
||||||
|
// You must obey the GNU General Public License in all respects for all
|
||||||
|
// of the code used other than OpenSSL. If you modify file(s) with this
|
||||||
|
// exception, you may extend this exception to your version of the
|
||||||
|
// file(s), but you are not obligated to do so. If you do not wish to do
|
||||||
|
// so, delete this exception statement from your version. If you delete
|
||||||
|
// this exception statement from all source files in the program, then
|
||||||
|
// also delete it here.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include "filesystem.h"
|
||||||
|
#include <QtAndroidExtras>
|
||||||
|
|
||||||
|
|
||||||
|
FILESYSTEM *FILESYSTEM::instance()
|
||||||
|
{
|
||||||
|
static FILESYSTEM filesystem;
|
||||||
|
return &filesystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILESYSTEM::FILESYSTEM(QObject *parent) : QObject(parent){}
|
||||||
|
|
||||||
|
void FILESYSTEM::setDirectory(QString Directory)
|
||||||
|
{
|
||||||
|
if (Directory!=m_Directory) {
|
||||||
|
m_Directory = Directory;
|
||||||
|
emit directoryChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString FILESYSTEM::Directory() const
|
||||||
|
{
|
||||||
|
return m_Directory;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString FILESYSTEM::homePath() const
|
||||||
|
{
|
||||||
|
QAndroidJniObject activity =QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative","activity", "()Landroid/app/Activity;");
|
||||||
|
QAndroidJniObject dir = activity.callObjectMethod("getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", NULL);
|
||||||
|
QString homeDir=dir.toString();
|
||||||
|
return homeDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FILESYSTEM::fileexist(QString name)
|
||||||
|
{ return QFile::exists(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FILESYSTEM::makeDir(QString name)
|
||||||
|
{
|
||||||
|
QDir dir(m_Directory);
|
||||||
|
if (dir.mkdir(name)){
|
||||||
|
emit success(name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit error(name,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FILESYSTEM::makePath(QString name)
|
||||||
|
{
|
||||||
|
QDir dir(m_Directory);
|
||||||
|
if (dir.mkpath(name)){
|
||||||
|
emit success(name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit error(name,1);}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FILESYSTEM::rmDir()
|
||||||
|
{
|
||||||
|
QDir dir(m_Directory);
|
||||||
|
if (dir.removeRecursively()){
|
||||||
|
emit success(m_Directory);
|
||||||
|
}
|
||||||
|
else {emit error(m_Directory,1);}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FILESYSTEM::rmFile(QString name)
|
||||||
|
{
|
||||||
|
QDir dir(m_Directory);
|
||||||
|
if(dir.remove(name)){
|
||||||
|
emit success(name);
|
||||||
|
}
|
||||||
|
else {emit error(name,1);}
|
||||||
|
}
|
||||||
|
QFileInfoList FILESYSTEM::fileList()
|
||||||
|
{
|
||||||
|
QDir dir(m_Directory);
|
||||||
|
QStringList filters;
|
||||||
|
filters << "*.png" <<"*.PNG" << "*.jpg" << "*.JPG" << "*.JPEG";
|
||||||
|
dir.setNameFilters(filters);
|
||||||
|
dir.setSorting(QDir::Time | QDir::Reversed);
|
||||||
|
return dir.entryInfoList();
|
||||||
|
}
|
|
@ -1,97 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://github.com/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QtQml/QQmlEngine>
|
|
||||||
//#include <QAndroidService>
|
|
||||||
//#include <QtAndroid>
|
|
||||||
#include <QtQuick>
|
|
||||||
#include "xhr.h"
|
|
||||||
#include "updatenews.h"
|
|
||||||
#include "filesystem.h"
|
|
||||||
#include "remoteauthasyncimageprovider.h"
|
|
||||||
//#include "alarm.h"
|
|
||||||
//#include "AndroidNative/systemdispatcher.h"
|
|
||||||
//#include "AndroidNative/environment.h"
|
|
||||||
//#include "AndroidNative/debug.h"
|
|
||||||
//#include "AndroidNative/mediascannerconnection.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
|
||||||
#include <QtAndroidExtras/QAndroidJniObject>
|
|
||||||
#include <QtAndroidExtras/QAndroidJniEnvironment>
|
|
||||||
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
|
|
||||||
Q_UNUSED(vm);
|
|
||||||
qDebug("NativeInterface::JNI_OnLoad()"); // It must call this function within JNI_OnLoad to enable System Dispatcher
|
|
||||||
|
|
||||||
AndroidNative::SystemDispatcher::registerNatives();
|
|
||||||
return JNI_VERSION_1_6;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
//qDebug()<< "argv Friendiqa"<< argv[0] <<" argv2" <<argv[1];
|
|
||||||
if (qstrcmp(argv[1],"-service")==0){
|
|
||||||
//qDebug()<<"FriendiqaMain Service";
|
|
||||||
//QAndroidService app(argc, argv);
|
|
||||||
UPDATENEWS* updatenews= UPDATENEWS::instance();
|
|
||||||
updatenews->setDatabase();
|
|
||||||
updatenews->login();
|
|
||||||
updatenews->startsync();
|
|
||||||
//app.connect (updatenews,SIGNAL(quitapp()),&app,SLOT(quit()));
|
|
||||||
//QtAndroid::androidService().callMethod<void>("stopSelf");
|
|
||||||
//return app.exec();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
QApplication app(argc, argv);
|
|
||||||
QQuickView view;
|
|
||||||
QTranslator qtTranslator;
|
|
||||||
qtTranslator.load("friendiqa-" + QLocale::system().name(),":/translations");
|
|
||||||
app.installTranslator(&qtTranslator);
|
|
||||||
RemoteAuthAsyncImageProvider *imageProvider = new RemoteAuthAsyncImageProvider;
|
|
||||||
view.engine()->addImageProvider("remoteauthimage",imageProvider);
|
|
||||||
view.rootContext()->setContextProperty("remoteauth", imageProvider);
|
|
||||||
XHR* xhr = XHR::instance();
|
|
||||||
view.rootContext()->setContextProperty("xhr", xhr);
|
|
||||||
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
|
||||||
view.rootContext()->setContextProperty("filesystem", filesystem);
|
|
||||||
ALARM* alarm = ALARM::instance();
|
|
||||||
view.rootContext()->setContextProperty("alarm", alarm);
|
|
||||||
UPDATENEWS* updatenews = UPDATENEWS::instance();
|
|
||||||
view.rootContext()->setContextProperty("updatenews", updatenews);
|
|
||||||
view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
|
|
||||||
view.show();
|
|
||||||
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,121 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://github.com/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include "uploadableimage.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include <QBuffer>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QUrl>
|
|
||||||
|
|
||||||
void UploadableImage::setSource(const QString &a) {
|
|
||||||
if (a != m_source) {
|
|
||||||
m_source = a;
|
|
||||||
//m_base64 = "";
|
|
||||||
m_mimetype = "";
|
|
||||||
m_filename = "";
|
|
||||||
|
|
||||||
qDebug() << "UploadableImage::setSource : " << m_source;
|
|
||||||
|
|
||||||
if (m_source=="") {
|
|
||||||
emit sourceChanged();
|
|
||||||
//emit base64Changed();
|
|
||||||
emit mimetypeChanged();
|
|
||||||
emit filenameChanged();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QImage fullimage = QImage(QUrl(m_source).toLocalFile());
|
|
||||||
if (fullimage.width() > 800 || fullimage.height() > 800) {
|
|
||||||
if (fullimage.width() > fullimage.height()) {
|
|
||||||
m_image = fullimage.scaledToWidth(800);
|
|
||||||
} else {
|
|
||||||
m_image = fullimage.scaledToHeight(800);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
m_image = fullimage;
|
|
||||||
}
|
|
||||||
qDebug() << "UploadableImage::setSource : " << m_image.width() << "x" << m_image.height();
|
|
||||||
emit sourceChanged();
|
|
||||||
|
|
||||||
QFileInfo fi(m_source);
|
|
||||||
|
|
||||||
m_filename = fi.fileName();
|
|
||||||
emit filenameChanged();
|
|
||||||
|
|
||||||
QString filetype = fi.suffix().toUpper();
|
|
||||||
if (filetype!="PNG" && filetype!="JPG") {
|
|
||||||
filetype = "JPG";
|
|
||||||
}
|
|
||||||
qDebug() << "UploadableImage::setSource : " << "Saving as " << filetype;
|
|
||||||
|
|
||||||
m_mimetype = "image/"+filetype.toLower();
|
|
||||||
emit mimetypeChanged();
|
|
||||||
|
|
||||||
/*
|
|
||||||
QByteArray byteArray;
|
|
||||||
QBuffer buffer(&byteArray);
|
|
||||||
m_image.save(&buffer, filetype.toLatin1().constData());
|
|
||||||
QString b64 = QString::fromLatin1(byteArray.toBase64().data());
|
|
||||||
|
|
||||||
for(int k=0; k<b64.length(); k+=76) {
|
|
||||||
m_base64 += b64.mid(k,76) + "\n";
|
|
||||||
}
|
|
||||||
m_base64 = m_base64.trimmed();
|
|
||||||
|
|
||||||
emit base64Changed();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString UploadableImage::source() const {
|
|
||||||
return m_source;
|
|
||||||
}
|
|
||||||
|
|
||||||
//QString UploadableImage::base64() const {
|
|
||||||
// return m_base64;
|
|
||||||
//}
|
|
||||||
|
|
||||||
QString UploadableImage::filename() const {
|
|
||||||
return m_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString UploadableImage::mimetype() const {
|
|
||||||
return m_mimetype;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray UploadableImage::bytes() {
|
|
||||||
QByteArray byteArray;
|
|
||||||
QBuffer buffer(&byteArray);
|
|
||||||
m_image.save(&buffer, "PNG");
|
|
||||||
return byteArray;
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://github.com/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#ifndef UPLOADABLEIMAGE_H
|
|
||||||
#define UPLOADABLEIMAGE_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QQuickItem>
|
|
||||||
#include <QImage>
|
|
||||||
|
|
||||||
class UploadableImage : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
|
|
||||||
//Q_PROPERTY(QString base64 READ base64 NOTIFY base64Changed)
|
|
||||||
Q_PROPERTY(QString filename READ filename NOTIFY filenameChanged)
|
|
||||||
Q_PROPERTY(QString mimetype READ mimetype NOTIFY mimetypeChanged)
|
|
||||||
Q_PROPERTY(QByteArray bytes READ bytes)
|
|
||||||
|
|
||||||
public:
|
|
||||||
void setSource(const QString &a);
|
|
||||||
QString source() const;
|
|
||||||
|
|
||||||
//QString base64() const;
|
|
||||||
QString filename() const;
|
|
||||||
QString mimetype() const;
|
|
||||||
|
|
||||||
QByteArray bytes();
|
|
||||||
signals:
|
|
||||||
void sourceChanged();
|
|
||||||
//void base64Changed();
|
|
||||||
void filenameChanged();
|
|
||||||
void mimetypeChanged();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_source;
|
|
||||||
QImage m_image;
|
|
||||||
//QString m_base64;
|
|
||||||
QString m_filename;
|
|
||||||
QString m_mimetype;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // UPLOADABLEIMAGE_H
|
|
|
@ -1,369 +0,0 @@
|
||||||
// This file is part of Friendiqa
|
|
||||||
// https://github.com/lubuwest/Friendiqa
|
|
||||||
// Copyright (C) 2017 Marco R. <thomasschmidt45@gmx.net>
|
|
||||||
//
|
|
||||||
// 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 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// In addition, as a special exception, the copyright holders give
|
|
||||||
// permission to link the code of portions of this program with the
|
|
||||||
// OpenSSL library under certain conditions as described in each
|
|
||||||
// individual source file, and distribute linked combinations including
|
|
||||||
// the two.
|
|
||||||
//
|
|
||||||
// You must obey the GNU General Public License in all respects for all
|
|
||||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
||||||
// exception, you may extend this exception to your version of the
|
|
||||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
||||||
// so, delete this exception statement from your version. If you delete
|
|
||||||
// this exception statement from all source files in the program, then
|
|
||||||
// also delete it here.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include "xhr.h"
|
|
||||||
|
|
||||||
#include <QHttpPart>
|
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QUrlQuery>
|
|
||||||
#include <QList>
|
|
||||||
#include <QDataStream>
|
|
||||||
#include <QJsonDocument>
|
|
||||||
#include <QJsonObject>
|
|
||||||
#include "uploadableimage.h"
|
|
||||||
|
|
||||||
XHR *XHR::instance()
|
|
||||||
{
|
|
||||||
static XHR xhr;
|
|
||||||
return &xhr;
|
|
||||||
}
|
|
||||||
|
|
||||||
XHR::XHR(QObject *parent) : QObject(parent)
|
|
||||||
{
|
|
||||||
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setUrl(QString url)
|
|
||||||
{
|
|
||||||
if (url!=m_url) {
|
|
||||||
m_url = url;
|
|
||||||
emit urlChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setApi(QString api)
|
|
||||||
{
|
|
||||||
if (api!=m_api) {
|
|
||||||
m_api = api;
|
|
||||||
emit apiChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setLogin(QString login)
|
|
||||||
{
|
|
||||||
if (login!=m_login) {
|
|
||||||
m_login = login;
|
|
||||||
emit loginChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setFilename(QString filename)
|
|
||||||
{
|
|
||||||
if (filename!=m_filename) {
|
|
||||||
m_filename = filename;
|
|
||||||
emit filenameChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setContactlist(QList<QString> contactlist)
|
|
||||||
{
|
|
||||||
if (contactlist!=m_contactlist) {
|
|
||||||
m_contactlist = contactlist;
|
|
||||||
emit contactlistChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setFilelist(QList<QString> filelist)
|
|
||||||
{
|
|
||||||
if (filelist!=m_filelist) {
|
|
||||||
m_filelist = filelist;
|
|
||||||
emit filelistChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setImagedir(QString imagedir)
|
|
||||||
{
|
|
||||||
if (imagedir!=m_imagedir) {
|
|
||||||
m_imagedir = imagedir;
|
|
||||||
emit imagedirChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void XHR::setDownloadtype(QString downloadtype)
|
|
||||||
{
|
|
||||||
if (downloadtype!=m_downloadtype) {
|
|
||||||
m_downloadtype = downloadtype;
|
|
||||||
emit downloadtypeChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::url() const
|
|
||||||
{
|
|
||||||
return m_url;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::api() const
|
|
||||||
{
|
|
||||||
return m_api;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::login() const
|
|
||||||
{
|
|
||||||
return m_login;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::filename() const
|
|
||||||
{
|
|
||||||
return m_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<QString> XHR::contactlist() const
|
|
||||||
{
|
|
||||||
return m_contactlist;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<QString> XHR::filelist() const
|
|
||||||
{
|
|
||||||
return m_filelist;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::imagedir() const
|
|
||||||
{
|
|
||||||
return m_imagedir;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::downloadtype() const
|
|
||||||
{
|
|
||||||
return m_downloadtype;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::networktype()
|
|
||||||
{
|
|
||||||
return nc.bearerTypeFamily() + nc.bearerTypeName();
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setParam(QString name, QString value)
|
|
||||||
{
|
|
||||||
params.insert(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::setImageFileParam(QString name, QString url)
|
|
||||||
{
|
|
||||||
files.insert(name, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::clearParams()
|
|
||||||
{
|
|
||||||
files.clear();
|
|
||||||
params.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::download()
|
|
||||||
{
|
|
||||||
QUrl requrl(m_url);
|
|
||||||
if(m_downloadtype=="picturelist"){
|
|
||||||
QByteArray loginData = m_login.toLocal8Bit().toBase64();
|
|
||||||
QString headerData = "Basic " + loginData;
|
|
||||||
request.setRawHeader("Authorization", headerData.toLocal8Bit());
|
|
||||||
}
|
|
||||||
request.setUrl(requrl);
|
|
||||||
reply = manager.get(request);
|
|
||||||
reply->ignoreSslErrors();
|
|
||||||
connect(reply, &QNetworkReply::readyRead,this, &XHR::onReadyRead);
|
|
||||||
//connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64)));
|
|
||||||
connect(reply, &QNetworkReply::finished,this, &XHR::onRequestFinished);
|
|
||||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::get()
|
|
||||||
{
|
|
||||||
QUrlQuery query;
|
|
||||||
|
|
||||||
QHashIterator<QString, QString> i(params);
|
|
||||||
while(i.hasNext()) {
|
|
||||||
i.next();
|
|
||||||
query.addQueryItem(i.key(), i.value());
|
|
||||||
//qDebug()<<i.key() << " value "<< i.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl requrl(m_url+m_api);
|
|
||||||
//qDebug() << "API "<< requrl<<m_api;
|
|
||||||
requrl.setQuery(query);
|
|
||||||
QByteArray loginData = m_login.toLocal8Bit().toBase64();
|
|
||||||
QString headerData = "Basic " + loginData;
|
|
||||||
request.setRawHeader("Authorization", headerData.toLocal8Bit());
|
|
||||||
request.setUrl(requrl);
|
|
||||||
reply = manager.get(request);
|
|
||||||
|
|
||||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
|
||||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
|
||||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::getlist()
|
|
||||||
{
|
|
||||||
if(dlindex < m_filelist.size()) {
|
|
||||||
QString cleanfilename;
|
|
||||||
if (m_downloadtype=="contactlist"){cleanfilename = m_contactlist.at(dlindex)+"-"+ m_filelist.at(dlindex).section('/',-1).section('?',0,0);
|
|
||||||
XHR::setFilename(imagedir()+"contacts/"+cleanfilename);
|
|
||||||
XHR::setUrl(m_filelist.at(dlindex));}
|
|
||||||
else {
|
|
||||||
XHR::setUrl(m_filelist.at(dlindex));}
|
|
||||||
XHR::download();
|
|
||||||
} else {dlindex=0;m_downloadtype="";m_contactlist.clear();m_filelist.clear();}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void XHR::post()
|
|
||||||
{
|
|
||||||
//qDebug() << "start post to " << m_url;
|
|
||||||
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
|
|
||||||
|
|
||||||
QHashIterator<QString, QString> iparams(params);
|
|
||||||
while(iparams.hasNext()) {
|
|
||||||
iparams.next();
|
|
||||||
//qDebug() << "\t add param " << iparams.key() << " : " << iparams.value();
|
|
||||||
QHttpPart textPart;
|
|
||||||
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"" + iparams.key() + "\""));
|
|
||||||
|
|
||||||
|
|
||||||
textPart.setBody(iparams.value().toUtf8());
|
|
||||||
multiPart->append(textPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
UploadableImage uimg;
|
|
||||||
QHashIterator<QString, QString> ifiles(files);
|
|
||||||
while(ifiles.hasNext()) {
|
|
||||||
ifiles.next();
|
|
||||||
|
|
||||||
uimg.setSource(ifiles.value());
|
|
||||||
//qDebug() << "\t image: " << uimg.mimetype() << ", " << ifiles.key();
|
|
||||||
|
|
||||||
QHttpPart imagePart;
|
|
||||||
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(uimg.mimetype()));
|
|
||||||
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"" + ifiles.key() + "\"; filename=\""+uimg.filename()+"\""));
|
|
||||||
imagePart.setBody(uimg.bytes());
|
|
||||||
multiPart->append(imagePart);
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray loginData = m_login.toLocal8Bit().toBase64();
|
|
||||||
QString headerData = "Basic " + loginData;
|
|
||||||
request.setRawHeader(QByteArray("Authorization"), headerData.toLocal8Bit());
|
|
||||||
|
|
||||||
request.setUrl(m_url+m_api);
|
|
||||||
reply = manager.post(request, multiPart);
|
|
||||||
qDebug() << "\t request sent";
|
|
||||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
|
||||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
|
||||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
|
||||||
qDebug() << "\t reply signals connected";
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::onReplyError(QNetworkReply::NetworkError code)
|
|
||||||
{
|
|
||||||
qDebug() << code;
|
|
||||||
emit this->error( bufferToString(), m_url,m_api, (int) code);
|
|
||||||
buffer.clear();
|
|
||||||
reply->deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::onReplySuccess()
|
|
||||||
{
|
|
||||||
qDebug() << "!";
|
|
||||||
emit this->success(buffer, m_api);
|
|
||||||
buffer.clear();
|
|
||||||
// reply->deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::onRequestFinished()
|
|
||||||
{
|
|
||||||
qDebug()<<"download requestFinished ";
|
|
||||||
// Save the file here
|
|
||||||
if (buffer.isNull()){qDebug() << "File empty"<<m_url; buffer.clear(); emit this->error(m_downloadtype,m_url,m_api,1);}
|
|
||||||
else if (m_downloadtype=="picturelist") {
|
|
||||||
QJsonDocument jsonResponse = QJsonDocument::fromJson(buffer);
|
|
||||||
QJsonObject jsonObject = jsonResponse.object();
|
|
||||||
int arraystart=buffer.indexOf('{"data":"')+8;
|
|
||||||
int arraylength=buffer.indexOf('"',9)-arraystart;
|
|
||||||
QByteArray b64=buffer.mid(arraystart,arraylength);
|
|
||||||
QString helpfilename=jsonObject["filename"].toString();
|
|
||||||
QString helpfile=helpfilename.left(helpfilename.lastIndexOf("."));
|
|
||||||
QString filesuffix="";
|
|
||||||
if (jsonObject["type"].toString()=="image/jpeg"){filesuffix=".jpg";}
|
|
||||||
else if (jsonObject["type"].toString()=="image/png"){filesuffix=".png";}
|
|
||||||
else {filesuffix="";}
|
|
||||||
if (helpfilename==""){// check if file has any filename
|
|
||||||
helpfile=jsonObject["id"].toString();
|
|
||||||
setFilename(imagedir()+"albums/"+jsonObject["album"].toString()+"/"+jsonObject["id"].toString()+filesuffix);
|
|
||||||
}
|
|
||||||
else{setFilename(imagedir()+"albums/"+jsonObject["album"].toString()+"/"+helpfile+filesuffix);}
|
|
||||||
//qDebug()<<"Filename "<<m_filename;
|
|
||||||
QFile file(m_filename);
|
|
||||||
file.open(QIODevice::WriteOnly);
|
|
||||||
file.write(QByteArray::fromBase64(b64));
|
|
||||||
buffer.clear();
|
|
||||||
b64.clear();
|
|
||||||
file.close();
|
|
||||||
jsonObject["data"]="";
|
|
||||||
jsonObject["filename"]=helpfile+filesuffix;
|
|
||||||
emit this->downloadedjson(m_downloadtype,m_url,m_filename,dlindex,jsonObject);
|
|
||||||
if(downloadtype()=="picturelist"){dlindex=dlindex+1;XHR::getlist();}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
QFile file(m_filename);
|
|
||||||
file.open(QIODevice::WriteOnly);
|
|
||||||
file.write(buffer);
|
|
||||||
buffer.clear();
|
|
||||||
file.close();
|
|
||||||
emit this->downloaded(m_downloadtype,m_url,m_filename,dlindex);
|
|
||||||
if(downloadtype()=="contactlist"){dlindex=dlindex+1;XHR::getlist();}
|
|
||||||
|
|
||||||
//reply->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void XHR::onReadyRead()
|
|
||||||
{
|
|
||||||
qDebug() << ".";
|
|
||||||
buffer += reply->readAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
//void XHR::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
|
|
||||||
//{
|
|
||||||
// qDebug() << "Bytes: " << bytesRead<<" / "<<totalBytes;
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
void XHR::onSSLError(const QList<QSslError> &errors)
|
|
||||||
{
|
|
||||||
qDebug() << "XHR::onSSLError :" ;
|
|
||||||
QListIterator<QSslError> ierrs(errors);
|
|
||||||
while(ierrs.hasNext()) {
|
|
||||||
qDebug() << "\t" << ierrs.next().errorString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString XHR::bufferToString()
|
|
||||||
{
|
|
||||||
return QTextCodec::codecForName("utf-8")->toUnicode(buffer);
|
|
||||||
}
|
|
Loading…
Reference in a new issue