mirror of
https://github.com/YACReader/yacreader
synced 2025-07-19 13:34:44 -04:00
QsLog
YACReader
YACReaderLibrary
comic_vine
db
qml
server
controllers
lib
bfHttpServer
bfLogging
bfTemplateEngine
bfTemplateEngine.pri
template.cpp
template.h
templatecache.cpp
templatecache.h
templateloader.cpp
templateloader.h
documentcache.h
requestmapper.cpp
requestmapper.h
server.pri
startup.cpp
startup.h
static.cpp
static.h
YACReaderLibrary.icns
YACReaderLibrary.pro
add_library_dialog.cpp
add_library_dialog.h
bundle_creator.cpp
bundle_creator.h
classic_comics_view.cpp
classic_comics_view.h
comic_flow.cpp
comic_flow.h
comic_flow_widget.cpp
comic_flow_widget.h
comics_remover.cpp
comics_remover.h
comics_view.cpp
comics_view.h
create_library_dialog.cpp
create_library_dialog.h
db_helper.cpp
db_helper.h
export_comics_info_dialog.cpp
export_comics_info_dialog.h
export_library_dialog.cpp
export_library_dialog.h
files.qrc
grid_comics_view.cpp
grid_comics_view.h
icon.ico
icon.rc
icon2.ico
icon3.ico
images.qrc
images_osx.qrc
images_win.qrc
import_comics_info_dialog.cpp
import_comics_info_dialog.h
import_library_dialog.cpp
import_library_dialog.h
import_widget.cpp
import_widget.h
library_creator.cpp
library_creator.h
library_window.cpp
library_window.h
main.cpp
no_libraries_widget.cpp
no_libraries_widget.h
options_dialog.cpp
options_dialog.h
package_manager.cpp
package_manager.h
properties_dialog.cpp
properties_dialog.h
qml.qrc
rename_library_dialog.cpp
rename_library_dialog.h
server_config_dialog.cpp
server_config_dialog.h
yacreader_libraries.cpp
yacreader_libraries.h
yacreader_local_server.cpp
yacreader_local_server.h
yacreader_main_toolbar.cpp
yacreader_main_toolbar.h
yacreaderlibrary_es.qm
yacreaderlibrary_es.ts
yacreaderlibrary_fr.ts
yacreaderlibrary_nl.ts
yacreaderlibrary_pt.ts
yacreaderlibrary_ru.ts
yacreaderlibrary_source.ts
yacreaderlibrary_tr.ts
common
compressed_archive
custom_widgets
dependencies
files
images
release
CHANGELOG.txt
COPYING.txt
INSTALL.txt
README.txt
YACReader.desktop
YACReader.pro
YACReaderLibrary.desktop
background.png
cleanOSX.sh
compileOSX.sh
compileX11.sh
create-dmg
generateVS2010Projects.bat
icon.icns
releaseOSX.sh
110 lines
3.6 KiB
C++
110 lines
3.6 KiB
C++
/**
|
|
@file
|
|
@author Stefan Frings
|
|
*/
|
|
|
|
#include "templateloader.h"
|
|
#include <QFile>
|
|
#include <QFileInfo>
|
|
#include <QStringList>
|
|
#include <QDir>
|
|
#include <QSet>
|
|
#include <QApplication>
|
|
|
|
TemplateLoader::TemplateLoader(QSettings* settings, QObject* parent)
|
|
: QObject(parent)
|
|
{
|
|
templatePath=settings->value("path","./server/templates").toString();
|
|
// Convert relative path to absolute, based on the directory of the config file.
|
|
#ifdef Q_OS_WIN32
|
|
if (QDir::isRelativePath(templatePath) && settings->format()!=QSettings::NativeFormat)
|
|
#else
|
|
if (QDir::isRelativePath(templatePath))
|
|
#endif
|
|
{
|
|
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
|
QFileInfo configFile(QString(DATADIR)+"/YACReader");
|
|
templatePath=QFileInfo(QString(DATADIR)+"/YACReader",templatePath).absoluteFilePath();
|
|
#else
|
|
QFileInfo configFile(QApplication::applicationDirPath());
|
|
templatePath=QFileInfo(QApplication::applicationDirPath(),templatePath).absoluteFilePath();
|
|
#endif
|
|
}
|
|
fileNameSuffix=settings->value("suffix",".tpl").toString();
|
|
QString encoding=settings->value("encoding").toString();
|
|
if (encoding.isEmpty()) {
|
|
textCodec=QTextCodec::codecForLocale();
|
|
}
|
|
else {
|
|
textCodec=QTextCodec::codecForName(encoding.toLocal8Bit());
|
|
}
|
|
qDebug("TemplateLoader: path=%s, codec=%s",qPrintable(templatePath),textCodec->name().data());
|
|
}
|
|
|
|
TemplateLoader::~TemplateLoader() {}
|
|
|
|
QString TemplateLoader::tryFile(QString localizedName) {
|
|
QString fileName=templatePath+"/"+localizedName+fileNameSuffix;
|
|
qDebug("TemplateCache: trying file %s",qPrintable(fileName));
|
|
QFile file(fileName);
|
|
if (file.exists()) {
|
|
file.open(QIODevice::ReadOnly);
|
|
QString document=textCodec->toUnicode(file.readAll());
|
|
file.close();
|
|
if (file.error()) {
|
|
qCritical("TemplateLoader: cannot load file %s, %s",qPrintable(fileName),qPrintable(file.errorString()));
|
|
return "";
|
|
}
|
|
else {
|
|
return document;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
Template TemplateLoader::getTemplate(QString templateName, QString locales) {
|
|
mutex.lock();
|
|
QSet<QString> tried; // used to suppress duplicate attempts
|
|
QStringList locs=locales.split(',',QString::SkipEmptyParts);
|
|
|
|
// Search for exact match
|
|
foreach (QString loc,locs) {
|
|
loc.replace(QRegExp(";.*"),"");
|
|
loc.replace('-','_');
|
|
QString localizedName=templateName+"-"+loc.trimmed();
|
|
if (!tried.contains(localizedName)) {
|
|
QString document=tryFile(localizedName);
|
|
if (!document.isEmpty()) {
|
|
mutex.unlock();
|
|
return Template(document,localizedName);
|
|
}
|
|
tried.insert(localizedName);
|
|
}
|
|
}
|
|
|
|
// Search for correct language but any country
|
|
foreach (QString loc,locs) {
|
|
loc.replace(QRegExp("[;_-].*"),"");
|
|
QString localizedName=templateName+"-"+loc.trimmed();
|
|
if (!tried.contains(localizedName)) {
|
|
QString document=tryFile(localizedName);
|
|
if (!document.isEmpty()) {
|
|
mutex.unlock();
|
|
return Template(document,localizedName);
|
|
}
|
|
tried.insert(localizedName);
|
|
}
|
|
}
|
|
|
|
// Search for default file
|
|
QString document=tryFile(templateName);
|
|
if (!document.isEmpty()) {
|
|
mutex.unlock();
|
|
return Template(document,templateName);
|
|
}
|
|
|
|
qCritical("TemplateCache: cannot find template %s",qPrintable(templateName));
|
|
mutex.unlock();
|
|
return Template("",templateName);
|
|
}
|