Skip to content

Commit

Permalink
Merge branch 'jb41147' into 'master'
Browse files Browse the repository at this point in the history
Expose mimeType and handle empty file

See merge request mer-core/libcontentaction!5
  • Loading branch information
rainemak committed Jun 12, 2018
2 parents 64f0a31 + 888c23f commit 2222710
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
52 changes: 50 additions & 2 deletions declarative/declarativecontentaction.cpp
Expand Up @@ -26,40 +26,86 @@
#include <QtCore/QUrl>
#include <QtCore/QFile>
#include <QtCore/QDebug>
#include <QtCore/QMimeDatabase>

DeclarativeContentAction::DeclarativeContentAction(QObject *parent)
: QObject(parent), m_error(NoError)
: QObject(parent)
, m_error(NoError)
, m_mimeDatabase(nullptr)
{
}

DeclarativeContentAction::~DeclarativeContentAction()
{
delete m_mimeDatabase;
}

DeclarativeContentAction::Error DeclarativeContentAction::error() const
{
return m_error;
}

QString DeclarativeContentAction::mimeType() const
{
return m_mimeType;
}

void DeclarativeContentAction::updateMimeType(const QUrl &url)
{
if (!m_mimeDatabase) {
m_mimeDatabase = new QMimeDatabase;
}

QString mimeType = m_mimeDatabase->mimeTypeForUrl(url).name();
if (m_mimeType != mimeType) {
m_mimeType = mimeType;
emit mimeTypeChanged();
}
}

bool DeclarativeContentAction::trigger(const QUrl &url)
{
m_error = NoError;
QString oldMimeType = m_mimeType;
m_mimeType.clear();

if (!url.isValid()) {
qWarning() << Q_FUNC_INFO << "Invalid URL!";
m_error = InvalidUrl;
emit errorChanged();
if (m_mimeType != oldMimeType) {
emit mimeTypeChanged();
}
return false;
}

if (url.isLocalFile()) {
if (!QFile::exists(url.toLocalFile())) {
QFile file(url.toLocalFile());
if (!file.exists()) {
qWarning() << Q_FUNC_INFO << "File doesn't exist!";
m_error = FileDoesNotExist;
emit errorChanged();
if (m_mimeType != oldMimeType) {
emit mimeTypeChanged();
}

return false;
}

if (file.size() == 0) {
m_error = FileIsEmpty;
emit errorChanged();
if (m_mimeType != oldMimeType) {
emit mimeTypeChanged();
}
return false;
}

ContentAction::Action action = ContentAction::Action::defaultActionForFile(url);
if (!action.isValid()) {
m_error = FileTypeNotSupported;
emit errorChanged();
updateMimeType(url);
return false;
}

Expand All @@ -68,13 +114,15 @@ bool DeclarativeContentAction::trigger(const QUrl &url)
ContentAction::Action action = ContentAction::Action::defaultActionForScheme(url.toString());
if (!action.isValid()) {
m_error = UrlSchemeNotSupported;
updateMimeType(url);
emit errorChanged();
return false;
}

action.trigger();
}

updateMimeType(url);
return true;
}

14 changes: 14 additions & 0 deletions declarative/declarativecontentaction.h
Expand Up @@ -24,11 +24,17 @@

#include <QtCore/QObject>

QT_BEGIN_NAMESPACE
class QMimeDatabase;
QT_END_NAMESPACE


class DeclarativeContentAction: public QObject
{
Q_OBJECT

Q_PROPERTY(Error error READ error NOTIFY errorChanged)
Q_PROPERTY(QString mimeType READ mimeType NOTIFY mimeTypeChanged)

Q_ENUMS(Error)

Expand All @@ -37,21 +43,29 @@ class DeclarativeContentAction: public QObject
NoError,
FileTypeNotSupported,
FileDoesNotExist,
FileIsEmpty,
UrlSchemeNotSupported,
InvalidUrl
};

explicit DeclarativeContentAction(QObject *parent = 0);
virtual ~DeclarativeContentAction();

Q_INVOKABLE bool trigger(const QUrl &url);

Error error() const;
QString mimeType() const;

signals:
void errorChanged();
void mimeTypeChanged();

private:
void updateMimeType(const QUrl &url);

Error m_error;
QString m_mimeType;
QMimeDatabase *m_mimeDatabase;
};

#endif // DECLARATIVECONTENTACTION_H

0 comments on commit 2222710

Please sign in to comment.