Added FileIO QML Plugin
This commit is contained in:
parent
11fc75f3c1
commit
d1a44054d7
5 changed files with 309 additions and 1 deletions
7
FileIO/FileIO.pri
Normal file
7
FileIO/FileIO.pri
Normal file
|
@ -0,0 +1,7 @@
|
|||
QT += core declarative
|
||||
|
||||
INCLUDEPATH += $$PWD/src
|
||||
|
||||
HEADERS += $$PWD/src/fileio.h
|
||||
|
||||
SOURCES += $$PWD/src/fileio.cpp
|
120
FileIO/docs/FileIO.md
Normal file
120
FileIO/docs/FileIO.md
Normal file
|
@ -0,0 +1,120 @@
|
|||
# FileIO
|
||||
|
||||
## General
|
||||
|
||||
A QML-Plugin which provides basic file operations.
|
||||
|
||||
## Including FileIO in Your Project
|
||||
|
||||
First copy the FileIO-directory into your project path somewhere:
|
||||
|
||||
my-project
|
||||
|--my-project.pro
|
||||
|--src
|
||||
|--FileIO
|
||||
| |--src
|
||||
| |--FileIO.pri
|
||||
|--my-project.cpp
|
||||
|
||||
Next include FileIO.pri into my-project.pro:
|
||||
|
||||
TARGET = my-project
|
||||
|
||||
CONFIG += sailfishapp
|
||||
|
||||
SOURCES += src/my-project.cpp
|
||||
|
||||
.
|
||||
.
|
||||
.
|
||||
|
||||
include (src/FileIO/FileIO.pri)
|
||||
|
||||
Now you can include the header in your main cpp and register the component:
|
||||
|
||||
#include <QtQuick>
|
||||
#include <sailfishapp.h>
|
||||
#include <QGuiApplication>
|
||||
#include "fileio.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Get App and QML-View objects
|
||||
QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
|
||||
QScopedPointer<QQuickView> view(SailfishApp::createView());
|
||||
|
||||
// Register FileIO Class
|
||||
qmlRegisterType<FileIO, 1>("harbour.my-project.FileIO", 1, 0, "FileIO");
|
||||
|
||||
// Prepare the QML and set Homedir
|
||||
view->setSource(SailfishApp::pathTo("qml/my-project.qml"));
|
||||
view->show();
|
||||
|
||||
// Run the app
|
||||
return app->exec();
|
||||
}
|
||||
|
||||
Now you can use the FileIO Object in your QML
|
||||
|
||||
## Using the QML Object
|
||||
|
||||
Here are some short examples:
|
||||
|
||||
### Reading Files
|
||||
|
||||
import harbour.my-project.FileIO 1.0
|
||||
|
||||
FileIO {
|
||||
id: myFile
|
||||
source: "/home/nemo/some-file.txt"
|
||||
onError: { console.log(msg); }
|
||||
}
|
||||
|
||||
var content = myFile.read()
|
||||
|
||||
First the FileIO-Plugin is imported in the QML file. Now a FileIO object with the ID myFile is created. The property **source** holds the filename of the file to read or write. The signal **onError** is called when something goes wrong, **msg** contains the error message.
|
||||
|
||||
After declaring the object the method **read()** is used, it retuns the contenst of the file as a string.
|
||||
|
||||
### Writing files
|
||||
|
||||
import harbour.my-project.FileIO 1.0
|
||||
|
||||
FileIO {
|
||||
id: myFile
|
||||
source: "/home/nemo/some-file.txt"
|
||||
onError: { console.log(msg); }
|
||||
}
|
||||
|
||||
myFile.write("Hello World")
|
||||
|
||||
The declaration stays the same as for reading files.
|
||||
|
||||
For writing the method **write("content")** is called. This mehtod will write the passed string to the file defined in **source**. The content of the file will be replaced with the content passed to the method.
|
||||
|
||||
### Checking if a File Exists
|
||||
|
||||
import harbour.my-project.FileIO 1.0
|
||||
|
||||
FileIO { id: fileIO }
|
||||
|
||||
if (fileIO.exists("/home/nemo/myfile.txt")) {
|
||||
console.log("file exists");
|
||||
} else {
|
||||
console.log("file does not exists");
|
||||
}
|
||||
|
||||
The method **exists(file)** gets passed the path of the file or directory to check. If the file or directory exists the method will return **true**, otherwise it will return **false**
|
||||
|
||||
The method **exists()** can also be called without a parameter, in this case it will check if the file defined in **source** exists.
|
||||
|
||||
|
||||
### Creating Directories
|
||||
|
||||
import harbour.my-project.FileIO 1.0
|
||||
|
||||
FileIO { id: fileIO }
|
||||
|
||||
fileIO.mkpath("/tmp/directory");
|
||||
|
||||
The method **mkpath(directory)** will create the given directory, if it does not exist already. The method will return **true** if the directory exists or was successfully created, otherwise it will return **false**
|
113
FileIO/src/fileio.cpp
Normal file
113
FileIO/src/fileio.cpp
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Copyright (c) 2014, Stefan Brand <seiichiro@seiichiro0185.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. The names of the contributors may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "fileio.h"
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include <QTextStream>
|
||||
|
||||
FileIO::FileIO(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QString FileIO::read()
|
||||
{
|
||||
if (mSource.isEmpty()){
|
||||
emit error("source is empty");
|
||||
return QString();
|
||||
}
|
||||
|
||||
QFile file(mSource);
|
||||
QString fileContent;
|
||||
if ( file.open(QIODevice::ReadOnly) ) {
|
||||
QString line;
|
||||
QTextStream t( &file );
|
||||
do {
|
||||
line = t.readLine();
|
||||
fileContent += line;
|
||||
} while (!line.isNull());
|
||||
|
||||
file.close();
|
||||
} else {
|
||||
emit error("Unable to open the file");
|
||||
return QString();
|
||||
}
|
||||
return fileContent;
|
||||
}
|
||||
|
||||
bool FileIO::write(const QString& data)
|
||||
{
|
||||
if (mSource.isEmpty())
|
||||
return false;
|
||||
|
||||
QFile file(mSource);
|
||||
if (!file.open(QFile::WriteOnly | QFile::Truncate))
|
||||
return false;
|
||||
|
||||
QTextStream out(&file);
|
||||
out << data;
|
||||
|
||||
file.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FileIO::exists()
|
||||
{
|
||||
if (mSource.isEmpty()) {
|
||||
emit error("Source is empty!");
|
||||
return false;
|
||||
}
|
||||
|
||||
QFile file(mSource);
|
||||
return file.exists();
|
||||
}
|
||||
|
||||
bool FileIO::exists(const QString& filename)
|
||||
{
|
||||
if (filename.isEmpty()) {
|
||||
emit error("Source is empty!");
|
||||
return false;
|
||||
}
|
||||
|
||||
QFile file(filename);
|
||||
return file.exists();
|
||||
}
|
||||
|
||||
bool FileIO::mkpath(const QString& dirpath) {
|
||||
if (dirpath.isEmpty()) {
|
||||
emit error("Source is empty!");
|
||||
return false;
|
||||
}
|
||||
|
||||
QDir dir(dirpath);
|
||||
return dir.mkpath(dirpath);
|
||||
}
|
64
FileIO/src/fileio.h
Normal file
64
FileIO/src/fileio.h
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Copyright (c) 2014, Stefan Brand <seiichiro@seiichiro0185.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. The names of the contributors may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef FILEIO_H
|
||||
#define FILEIO_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
class FileIO : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
|
||||
|
||||
explicit FileIO(QObject *parent = 0);
|
||||
|
||||
Q_INVOKABLE QString read();
|
||||
Q_INVOKABLE bool write(const QString& data);
|
||||
Q_INVOKABLE bool exists();
|
||||
Q_INVOKABLE bool exists(const QString& filename);
|
||||
Q_INVOKABLE bool mkpath(const QString& dirpath);
|
||||
|
||||
QString source() { return mSource; };
|
||||
|
||||
public slots:
|
||||
void setSource(const QString& source) { mSource = source; };
|
||||
|
||||
signals:
|
||||
void sourceChanged(const QString& source);
|
||||
void error(const QString& msg);
|
||||
|
||||
private:
|
||||
QString mSource;
|
||||
};
|
||||
|
||||
#endif // FILEIO_H
|
|
@ -7,3 +7,7 @@ In this repository I will collect general components for Sailfish Silica Apps th
|
|||
### NotifyBanner
|
||||
|
||||
Show a notification banner at the top of your app.
|
||||
|
||||
### FileIO
|
||||
|
||||
A QML-Plugin to do basic file operations like reading and writing text files.
|
Loading…
Reference in a new issue