initial commit
This commit is contained in:
@@ -8,7 +8,5 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
||||
|
||||
qt_standard_project_setup(REQUIRES 6.8)
|
||||
|
||||
add_compile_definitions(QT_NO_CAST_FROM_ASCII)
|
||||
|
||||
add_subdirectory(plugins)
|
||||
add_subdirectory(app)
|
||||
|
||||
+11
-11
@@ -14,15 +14,15 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
|
||||
|
||||
set(PROJECT_SOURCES
|
||||
main.cpp
|
||||
cmainwindow.cpp
|
||||
cmainwindow.h
|
||||
cmainwindow.ui
|
||||
cmainwindow.cpp
|
||||
cmainwindow.h
|
||||
cmainwindow.ui
|
||||
)
|
||||
|
||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||
qt_add_executable(fontManager
|
||||
MANUAL_FINALIZATION
|
||||
${PROJECT_SOURCES}
|
||||
MANUAL_FINALIZATION
|
||||
${PROJECT_SOURCES}
|
||||
ifontprovider.h
|
||||
cfont.h cfont.cpp
|
||||
|
||||
@@ -33,15 +33,15 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
|
||||
else()
|
||||
if(ANDROID)
|
||||
add_library(fontManager SHARED
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
add_library(fontManager SHARED
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
# Define properties for Android with Qt 5 after find_package() calls as:
|
||||
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
|
||||
else()
|
||||
add_executable(fontManager
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
add_executable(fontManager
|
||||
${PROJECT_SOURCES}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
+7
-6
@@ -1,8 +1,9 @@
|
||||
#include "cfont.h"
|
||||
|
||||
#include <QFile>
|
||||
|
||||
cFont::cFont(QObject *parent)
|
||||
: QObject{parent}
|
||||
|
||||
cFont::cFont()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -76,7 +77,7 @@ QDate cFont::lastModified() {
|
||||
return m_lastModified;
|
||||
}
|
||||
|
||||
void cFont::setFiles(const QMap<QString, QFile>& files) {
|
||||
void cFont::setFiles(const QMap<QString, QString>& files) {
|
||||
for (auto [key, value] : files.asKeyValueRange()) {
|
||||
m_files.insert(key, value);
|
||||
}
|
||||
@@ -86,19 +87,19 @@ void cFont::clearFiles() {
|
||||
m_files.clear();
|
||||
}
|
||||
|
||||
void cFont::addFiles(const QMap<QString, QFile>& files) {
|
||||
void cFont::addFiles(const QMap<QString, QString>& files) {
|
||||
for (auto [key, value] : files.asKeyValueRange()) {
|
||||
if (!m_files.contains(key))
|
||||
m_files.insert(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
void cFont::addFiles(const QString& variant, const QFile& file) {
|
||||
void cFont::addFiles(const QString& variant, const QString& file) {
|
||||
if (!m_files.contains(variant))
|
||||
m_files.insert(variant, file);
|
||||
}
|
||||
|
||||
QMap<QString, QFile> cFont::files() {
|
||||
QMap<QString, QString> cFont::files() {
|
||||
return m_files;
|
||||
}
|
||||
|
||||
|
||||
+8
-10
@@ -2,18 +2,16 @@
|
||||
#define CFONT_H
|
||||
|
||||
|
||||
#include <QObject>
|
||||
//#include <QObject>
|
||||
#include <QString>
|
||||
#include <QDate>
|
||||
#include <QMap>
|
||||
#include <QFile>
|
||||
|
||||
|
||||
class cFont : public QObject
|
||||
class cFont
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit cFont(QObject *parent = nullptr);
|
||||
explicit cFont();
|
||||
|
||||
void setFamily(const QString& family);
|
||||
QString family();
|
||||
@@ -36,11 +34,11 @@ public:
|
||||
void setLastModified(const QDate& lastModified);
|
||||
QDate lastModified();
|
||||
|
||||
void setFiles(const QMap<QString, QFile>& files);
|
||||
void setFiles(const QMap<QString, QString>& files);
|
||||
void clearFiles();
|
||||
void addFiles(const QMap<QString, QFile>& files);
|
||||
void addFiles(const QString& variant, const QFile& file);
|
||||
QMap<QString, QFile> files();
|
||||
void addFiles(const QMap<QString, QString>& files);
|
||||
void addFiles(const QString& variant, const QString& file);
|
||||
QMap<QString, QString> files();
|
||||
|
||||
void setCategory(const QString& category);
|
||||
QString category();
|
||||
@@ -54,7 +52,7 @@ private:
|
||||
QStringList m_subsets;
|
||||
QString m_version;
|
||||
QDate m_lastModified;
|
||||
QMap<QString, QFile> m_files;
|
||||
QMap<QString, QString> m_files;
|
||||
QString m_category;
|
||||
QString m_kind;
|
||||
|
||||
|
||||
+12
-6
@@ -11,10 +11,11 @@
|
||||
|
||||
cMainWindow::cMainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::cMainWindow)
|
||||
{
|
||||
, ui(new Ui::cMainWindow) {
|
||||
ui->setupUi(this);
|
||||
|
||||
QList<cFont> fonts;
|
||||
|
||||
QDir pluginsDir = QDir(QApplication::applicationDirPath());
|
||||
|
||||
const auto entryList = pluginsDir.entryList(QDir::Files);
|
||||
@@ -25,19 +26,24 @@ cMainWindow::cMainWindow(QWidget *parent)
|
||||
auto *interface = qobject_cast<IFontProvider *>(plugin);
|
||||
if (!interface)
|
||||
return;
|
||||
qDebug() << "API Version: " << interface->pluginAPIVersion();
|
||||
qDebug() << "Name: " << interface->name();
|
||||
qDebug() << "Version: " << interface->version();
|
||||
|
||||
fonts = interface->search("");
|
||||
qDebug() << fonts.count();
|
||||
|
||||
fonts.clear();
|
||||
fonts = interface->search("Roboto");
|
||||
qDebug() << fonts.count();
|
||||
}
|
||||
#if 0
|
||||
else
|
||||
qDebug() << loader.errorString();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
cMainWindow::~cMainWindow()
|
||||
{
|
||||
cMainWindow::~cMainWindow() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
+15
-3
@@ -4,14 +4,26 @@
|
||||
|
||||
#include <QtPlugin>
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
|
||||
#include "cfont.h"
|
||||
|
||||
|
||||
class IFontProvider
|
||||
{
|
||||
public:
|
||||
virtual ~IFontProvider() = default;
|
||||
virtual QString name() = 0;
|
||||
virtual QString version() = 0;
|
||||
enum Sort {
|
||||
alpha,
|
||||
date,
|
||||
popularity,
|
||||
style
|
||||
};
|
||||
|
||||
virtual ~IFontProvider() = default;
|
||||
virtual QString pluginAPIVersion() = 0;
|
||||
virtual QString name() = 0;
|
||||
virtual QString version() = 0;
|
||||
virtual QList<cFont> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) = 0;
|
||||
};
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
+2
-2
@@ -2,10 +2,10 @@
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
cMainWindow w;
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
||||
@@ -3,11 +3,10 @@
|
||||
|
||||
qt_add_plugin(googlefonts
|
||||
CLASS_NAME GoogleFonts
|
||||
cgooglefonts.cpp cgooglefonts.h
|
||||
cgooglefonts.cpp cgooglefonts.h ../../app/cfont.cpp ../../app/cfont.h
|
||||
)
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets
|
||||
OPTIONAL_COMPONENTS PrintSupport)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network)
|
||||
|
||||
set_target_properties(googlefonts PROPERTIES
|
||||
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}"
|
||||
@@ -21,6 +20,7 @@ target_link_libraries(googlefonts PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
Qt6::Network
|
||||
)
|
||||
|
||||
if(TARGET Qt6::PrintSupport)
|
||||
|
||||
@@ -4,21 +4,174 @@
|
||||
#include "cgooglefonts.h"
|
||||
#include <QString>
|
||||
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
#include <QEventLoop>
|
||||
|
||||
cGoogleFonts::cGoogleFonts()
|
||||
{
|
||||
#include <QUrl>
|
||||
#include <QUrlQuery>
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
|
||||
|
||||
QStringList arrayToString(const QJsonArray& array) {
|
||||
QStringList list;
|
||||
|
||||
foreach (const QJsonValue& item, array) {
|
||||
list.append(item.toString());
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
cGoogleFonts::~cGoogleFonts()
|
||||
{
|
||||
QMap<QString, QString> objectToMap(const QJsonObject& object) {
|
||||
QMap<QString, QString> list;
|
||||
|
||||
for (const QString &key : object.keys()) {
|
||||
QJsonValue value = object.value(key);
|
||||
list.insert(key, value.toString());
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
QString cGoogleFonts::name()
|
||||
{
|
||||
cGoogleFonts::cGoogleFonts() {
|
||||
m_key = tr("AIzaSyCqPgQFvG-k4lbPF7L0oqJLKJxoC1O6R90");
|
||||
}
|
||||
|
||||
cGoogleFonts::~cGoogleFonts() {
|
||||
}
|
||||
|
||||
QString cGoogleFonts::pluginAPIVersion() {
|
||||
return tr("1.0");
|
||||
}
|
||||
|
||||
QString cGoogleFonts::name() {
|
||||
return tr("Google Fonts");
|
||||
}
|
||||
|
||||
QString cGoogleFonts::version()
|
||||
{
|
||||
QString cGoogleFonts::version() {
|
||||
return tr("0.1");
|
||||
}
|
||||
|
||||
QList<cFont> cGoogleFonts::search(const QString& family, const QString& subset, const Sort& sort) {
|
||||
QNetworkAccessManager networkManager;
|
||||
QString urlString = "https://www.googleapis.com/webfonts/v1/webfonts";
|
||||
QUrlQuery query;
|
||||
|
||||
query.addQueryItem("key", m_key);
|
||||
|
||||
if(!family.isEmpty())
|
||||
query.addQueryItem("family", family);
|
||||
|
||||
if(!subset.isEmpty())
|
||||
query.addQueryItem("subset", subset);
|
||||
|
||||
switch(sort)
|
||||
{
|
||||
case Sort::alpha:
|
||||
query.addQueryItem("sort", "alpha");
|
||||
break;
|
||||
case Sort::date:
|
||||
query.addQueryItem("sort", "date");
|
||||
break;
|
||||
case Sort::popularity:
|
||||
query.addQueryItem("sort", "popularity");
|
||||
break;
|
||||
case Sort::style:
|
||||
query.addQueryItem("sort", "style");
|
||||
break;
|
||||
default:
|
||||
query.addQueryItem("sort", "alpha");
|
||||
break;
|
||||
}
|
||||
|
||||
QUrl url(urlString);
|
||||
url.setQuery(query);
|
||||
|
||||
QNetworkRequest request(url);
|
||||
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
||||
|
||||
QNetworkReply* reply = networkManager.get(request);
|
||||
QEventLoop loop;
|
||||
|
||||
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||
loop.exec();
|
||||
|
||||
QByteArray data = reply->readAll();
|
||||
delete reply;
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(data);
|
||||
if(doc.isNull()) {
|
||||
qDebug() << "Error: JSON return is empty";
|
||||
return QList<cFont>();
|
||||
}
|
||||
|
||||
if(!doc.isObject()) {
|
||||
qDebug() << "Error: invalid JSON";
|
||||
return QList<cFont>();
|
||||
}
|
||||
|
||||
QJsonObject root = doc.object();
|
||||
|
||||
if(!root.contains("items")) {
|
||||
qDebug() << "Error: no fonts found";
|
||||
return QList<cFont>();
|
||||
}
|
||||
|
||||
QJsonValue itemsV = root.value("items");
|
||||
if(!itemsV.isArray()) {
|
||||
qDebug() << "Error: no fonts found";
|
||||
return QList<cFont>();
|
||||
}
|
||||
|
||||
QJsonArray items = itemsV.toArray();
|
||||
|
||||
if(!items.count())
|
||||
return QList<cFont>();
|
||||
|
||||
QList<cFont> fontList;
|
||||
|
||||
foreach (const QJsonValue& item, items) {
|
||||
if (item.isObject()) {
|
||||
cFont font;
|
||||
QJsonObject obj = item.toObject();
|
||||
|
||||
if(obj.contains("family"))
|
||||
font.setFamily(obj.value("family").toString());
|
||||
else
|
||||
continue;
|
||||
|
||||
if(obj.contains("variants"))
|
||||
font.setVariants(arrayToString(obj.value("variants").toArray()));
|
||||
|
||||
if(obj.contains("subsets"))
|
||||
font.setSubsets(arrayToString(obj.value("subsets").toArray()));
|
||||
|
||||
if(obj.contains("version"))
|
||||
font.setVersion(obj.value("version").toString());
|
||||
|
||||
if(obj.contains("lastModified"))
|
||||
font.setLastModified(QDate::fromString(obj.value("lastModified").toString()));
|
||||
|
||||
if(obj.contains("files")) {
|
||||
QJsonObject filesObj = obj.value("files").toObject();
|
||||
|
||||
font.setFiles(objectToMap(filesObj));
|
||||
}
|
||||
|
||||
if(obj.contains("category"))
|
||||
font.setCategory(obj.value("category").toString());
|
||||
|
||||
if(obj.contains("kind"))
|
||||
font.setKind(obj.value("kind").toString());
|
||||
|
||||
fontList.append(font);
|
||||
}
|
||||
}
|
||||
|
||||
return fontList;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,13 @@ public:
|
||||
cGoogleFonts();
|
||||
~cGoogleFonts() override;
|
||||
|
||||
QString name() override;
|
||||
QString version() override;
|
||||
QString pluginAPIVersion() override;
|
||||
QString name() override;
|
||||
QString version() override;
|
||||
|
||||
QList<cFont> search(const QString& family, const QString& subset = QString(), const Sort& sort = Sort::popularity) override;
|
||||
private:
|
||||
QString m_key;
|
||||
};
|
||||
|
||||
#endif //CGOOGLEFONTS_H
|
||||
|
||||
Reference in New Issue
Block a user