13 Star 39 Fork 6

zjzdy / Offline-small-search

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
offline_pkg.cpp 31.67 KB
一键复制 编辑 原始数据 按行查看 历史
zjzdy 提交于 2016-07-30 21:06 . v2.2
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
#include "offline_pkg.h"
#include <QDebug>
offline_pkg::offline_pkg(QObject *parent) : QObject(parent)
{
zim_exist = false;
img.setPattern("[\"'\\(]([a-zA-Z0-9-_@&%\\?\\./\\\\]*\\.[a-gi-zA-GI-Z0-9]{2,4})[\"'\\)]");
img.setMinimal(true);
img.setCaseSensitivity(Qt::CaseInsensitive);
}
offline_pkg::~offline_pkg()
{
if(zim_exist)
{
delete zim_file;
zim_exist = false;
}
}
QString offline_pkg::type() const
{
return m_type;
}
void offline_pkg::setType(const QString & type)
{
m_type = type;
Q_EMIT typeChanged(m_type);
}
QString offline_pkg::path() const
{
return m_path;
}
void offline_pkg::setPath(const QString & path)
{
m_path = path;
Q_EMIT pathChanged(m_path);
if(zim_exist)
{
delete zim_file;
zim_exist = false;
}
if(QFile::exists(QString(path+"/data.zim")))
{
try{
zim_file = new zim::File(QString(path+"/data.zim").toLocal8Bit().toStdString());
qDebug()<<"open zim"<<path+"/data.zim";
zim_exist = true;
}
catch(...) {zim_exist = false;}
}
}
QString offline_pkg::name() const
{
return m_name;
}
void offline_pkg::setName(const QString & name)
{
m_name = name;
Q_EMIT nameChanged(m_name);
}
QString offline_pkg::name_code() const
{
return m_name_code;
}
void offline_pkg::setName_code(const QString & name_code)
{
m_name_code = name_code;
Q_EMIT name_codeChanged(m_name_code);
}
QString offline_pkg::count() const
{
return m_count;
}
void offline_pkg::setCount(const QString & count)
{
m_count = count;
Q_EMIT countChanged(m_count);
}
bool offline_pkg::enable() const
{
return m_enable;
}
void offline_pkg::setEnable(const bool & enable)
{
m_enable = enable;
Q_EMIT enableChanged(m_enable);
}
QString offline_pkg::home_url() const
{
return m_home_url;
}
void offline_pkg::setHome_url(const QString & home_url)
{
m_home_url = home_url;
Q_EMIT home_urlChanged(m_home_url);
}
bool offline_pkg::home_def() const
{
return m_home_def;
}
void offline_pkg::setHome_def(const bool & home_def)
{
m_home_def = home_def;
Q_EMIT home_defChanged(m_home_def);
}
bool offline_pkg::home_enable() const
{
return m_home_enable;
}
void offline_pkg::setHome_enable(const bool & home_enable)
{
m_home_enable = home_enable;
Q_EMIT home_enableChanged(m_home_enable);
}
QString offline_pkg::get_text_from_url(QString & url)
{
if(!zim_exist) return "";
QRegExp parse("[\\?#].*$");
parse.setMinimal(false);
url.remove(QRegExp("#.*$"));
QUrl url_a(url);
QString url_a1 = url_a.resolved(url).toString().replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
QString url_a2 = url_a.resolved(url).toString(QUrl::FullyEncoded).replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
url.replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
try{
auto it = zim_file->findx("A/"+url.toStdString());
if (!it.first)
{
it = zim_file->findx(url.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString());
if (!it.first)
{
it = zim_file->findx(url_a1.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url_a1.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString());
if (!it.first)
{
it = zim_file->findx(url_a2.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url_a2.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if(it.first)
{
if (it.second->isRedirect())
return QString::fromStdString(std::string(it.second->getRedirectArticle().getData().data(), it.second->getRedirectArticle().getData().size()));
else
return QString::fromStdString(std::string(it.second->getData().data(), it.second->getData().size()));
}
else return tr("对不起,没找到内容");
}
catch(...) {return tr("对不起,程序出错了!");}
}
QString offline_pkg::get_text_with_other_from_url(QString & url, QString &cache_dir)
{
if(!zim_exist) return "";
QRegExp parse("[\\?#].*$");
parse.setMinimal(false);
url.remove(QRegExp("#.*$"));
QUrl url_a(url);
QString url_a1 = url_a.resolved(url).toString().replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
QString url_a2 = url_a.resolved(url).toString(QUrl::FullyEncoded).replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
url.replace(QRegExp("[/\\\\]{2,}"),"/").remove(QRegExp("^/")).remove(parse);
try{
auto it = zim_file->findx("A/"+url.toStdString());
if (!it.first)
{
it = zim_file->findx(url.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString());
if (!it.first)
{
it = zim_file->findx(url_a1.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url_a1.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a1.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString());
if (!it.first)
{
it = zim_file->findx(url_a2.toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx(url_a2.toUtf8().toStdString());
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+".html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+".HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index.html");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX.HTML");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index.htm");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX.HTM");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toStdString()+"/index");
if (!it.first)
{
it = zim_file->findx("A/"+url_a2.toUtf8().toUpper().toStdString()+"/INDEX");
}
}
}
}
}
}
}
}
}
}
if(it.first)
{
if (it.second->isRedirect())
str = QString::fromStdString(std::string(it.second->getRedirectArticle().getData().data(), it.second->getRedirectArticle().getData().size()));
else
str = QString::fromStdString(std::string(it.second->getData().data(), it.second->getData().size()));
}
else return tr("对不起,没找到内容");
int pos = 0;
QString url2 = url;
url2.remove(QRegExp("[^/\\\\]*$"));
QUrl url3(url2);
QString url4;
QString url5;
dir.mkpath(cache_dir+url2);
while ((pos = img.indexIn(str, pos)) != -1)
{
pos += img.matchedLength();
url4 = url3.resolved(img.cap(1)).toString();
url5 = url3.resolved(img.cap(1)).toString(QUrl::FullyEncoded);
url4.remove(QRegExp("#.*$"));
url5.remove(QRegExp("#.*$"));
if(QFile::exists(cache_dir+url4)) continue;
if(QFile::exists(cache_dir+url5)) continue;
it = zim_file->findx(QString("A/"+url4).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url4).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toUtf8().toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url4).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toLocal8Bit().toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url5).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url5).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toUtf8().toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url5).replace(QRegExp("[/\\\\]{2,}"),"/").remove(parse).toLocal8Bit().toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url2+img.cap(1).replace(QRegExp("[/\\\\]{2,}"),"/")).toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url2+img.cap(1).replace(QRegExp("[/\\\\]{2,}"),"/")).toUtf8().toStdString());
if (!it.first) it = zim_file->findx(QString("A/"+url2+img.cap(1).replace(QRegExp("[/\\\\]{2,}"),"/")).toLocal8Bit().toStdString());
if (it.first)
{
img_file.setFileName(cache_dir+url2+img.cap(1));
fileinfo.setFile(img_file);
dir.mkpath(fileinfo.absolutePath());
if (it.second->isRedirect())
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getRedirectArticle().getData().data(), it.second->getRedirectArticle().getData().size());
img_file.close();
}
else
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getData().data(), it.second->getData().size());
img_file.flush();
img_file.close();
}
if (url2+img.cap(1) != url4)
{
img_file.setFileName(cache_dir+url4);
fileinfo.setFile(img_file);
dir.mkpath(fileinfo.absolutePath());
if (it.second->isRedirect())
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getRedirectArticle().getData().data(), it.second->getRedirectArticle().getData().size());
img_file.close();
}
else
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getData().data(), it.second->getData().size());
img_file.flush();
img_file.close();
}
}
if (url2+img.cap(1) != url5&&url5 != url4)
{
img_file.setFileName(cache_dir+url5);
fileinfo.setFile(img_file);
dir.mkpath(fileinfo.absolutePath());
if (it.second->isRedirect())
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getRedirectArticle().getData().data(), it.second->getRedirectArticle().getData().size());
img_file.close();
}
else
{
img_file.open(QFile::ReadWrite);
img_file.write(it.second->getData().data(), it.second->getData().size());
img_file.flush();
img_file.close();
}
}
}
}
return str;
}
catch(...) {return tr("对不起,程序出错了!");}
}
C++
1
https://gitee.com/zjzdy/Offline-small-search.git
git@gitee.com:zjzdy/Offline-small-search.git
zjzdy
Offline-small-search
Offline-small-search
master

搜索帮助