mirror of
https://github.com/YACReader/yacreader
synced 2025-06-03 09:08:20 -04:00
Generaci?n preliminar del ?ndice alfabetico (web)
Ordenaci?n naturalSorting para el contenido + fusi?n de folders/comics Se han a?adido expresiones regulares para parsear las URIs
This commit is contained in:
parent
dc6fcf3677
commit
989b5704e2
@ -28,7 +28,7 @@ ComicDB::ComicDB(qulonglong cparentId, QString cname, QString cpath, QString cha
|
|||||||
_hasCover = true;
|
_hasCover = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<LibraryItem *> ComicDB::getComicsFromParent(qulonglong parentId, QSqlDatabase & db)
|
QList<LibraryItem *> ComicDB::getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
||||||
{
|
{
|
||||||
QList<LibraryItem *> list;
|
QList<LibraryItem *> list;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ QList<LibraryItem *> ComicDB::getComicsFromParent(qulonglong parentId, QSqlDatab
|
|||||||
currentItem->path = record.value(3).toString();
|
currentItem->path = record.value(3).toString();
|
||||||
currentItem->info.load(record.value(4).toString(),db);
|
currentItem->info.load(record.value(4).toString(),db);
|
||||||
int lessThan = 0;
|
int lessThan = 0;
|
||||||
if(list.isEmpty())
|
if(list.isEmpty() || !sort)
|
||||||
list.append(currentItem);
|
list.append(currentItem);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
ComicDB(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database);
|
ComicDB(qulonglong cparentId, QString cname, QString cpath, QString chash, QSqlDatabase & database);
|
||||||
//Comic(QString fn, QString fp):name(fn),path(fp),knownParent(false), knownId(false){};
|
//Comic(QString fn, QString fp):name(fn),path(fp),knownParent(false), knownId(false){};
|
||||||
|
|
||||||
static QList<LibraryItem *> getComicsFromParent(qulonglong parentId, QSqlDatabase & db);
|
static QList<LibraryItem *> getComicsFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
||||||
bool isDir();
|
bool isDir();
|
||||||
|
|
||||||
bool load(qulonglong id, QSqlDatabase & db);
|
bool load(qulonglong id, QSqlDatabase & db);
|
||||||
|
@ -33,7 +33,7 @@ qulonglong Folder::insert(QSqlDatabase & db)
|
|||||||
return query.lastInsertId().toULongLong();
|
return query.lastInsertId().toULongLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<LibraryItem *> Folder::getFoldersFromParent(qulonglong parentId, QSqlDatabase & db)
|
QList<LibraryItem *> Folder::getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort)
|
||||||
{
|
{
|
||||||
QList<LibraryItem *> list;
|
QList<LibraryItem *> list;
|
||||||
|
|
||||||
@ -52,7 +52,8 @@ QList<LibraryItem *> Folder::getFoldersFromParent(qulonglong parentId, QSqlDatab
|
|||||||
//TODO sort by sort indicator and name
|
//TODO sort by sort indicator and name
|
||||||
currentItem = new Folder(record.value("id").toULongLong(),record.value("parentId").toULongLong(),record.value("name").toString(),record.value("path").toString());
|
currentItem = new Folder(record.value("id").toULongLong(),record.value("parentId").toULongLong(),record.value("name").toString(),record.value("path").toString());
|
||||||
int lessThan = 0;
|
int lessThan = 0;
|
||||||
if(list.isEmpty())
|
|
||||||
|
if(list.isEmpty() || !sort)
|
||||||
list.append(currentItem);
|
list.append(currentItem);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ public:
|
|||||||
Folder(qulonglong id, QSqlDatabase & db);//loads a folder from db;
|
Folder(qulonglong id, QSqlDatabase & db);//loads a folder from db;
|
||||||
void setId(qulonglong sid){id = sid;knownId = true;};
|
void setId(qulonglong sid){id = sid;knownId = true;};
|
||||||
void setFather(qulonglong pid){parentId = pid;knownParent = true;};
|
void setFather(qulonglong pid){parentId = pid;knownParent = true;};
|
||||||
static QList<LibraryItem *> getFoldersFromParent(qulonglong parentId, QSqlDatabase & db);
|
static QList<LibraryItem *> getFoldersFromParent(qulonglong parentId, QSqlDatabase & db, bool sort = true);
|
||||||
qulonglong insert(QSqlDatabase & db);
|
qulonglong insert(QSqlDatabase & db);
|
||||||
bool isDir(){return true;};
|
bool isDir(){return true;};
|
||||||
void removeFromDB(QSqlDatabase & db);
|
void removeFromDB(QSqlDatabase & db);
|
||||||
|
@ -1347,7 +1347,7 @@ QList<LibraryItem *> LibraryWindow::getFolderContentFromLibrary(const QString &
|
|||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
|
||||||
|
|
||||||
QList<LibraryItem *> list = Folder::getFoldersFromParent(folderId,db);
|
QList<LibraryItem *> list = Folder::getFoldersFromParent(folderId,db,false);
|
||||||
|
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(libraries.value(libraryName));
|
QSqlDatabase::removeDatabase(libraries.value(libraryName));
|
||||||
@ -1359,7 +1359,7 @@ QList<LibraryItem *> LibraryWindow::getFolderComicsFromLibrary(const QString & l
|
|||||||
{
|
{
|
||||||
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
|
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
|
||||||
|
|
||||||
QList<LibraryItem *> list = ComicDB::getComicsFromParent(folderId,db);
|
QList<LibraryItem *> list = ComicDB::getComicsFromParent(folderId,db,false);
|
||||||
|
|
||||||
db.close();
|
db.close();
|
||||||
QSqlDatabase::removeDatabase(libraries.value(libraryName));
|
QSqlDatabase::removeDatabase(libraries.value(libraryName));
|
||||||
|
@ -6,6 +6,16 @@
|
|||||||
#include "template.h"
|
#include "template.h"
|
||||||
#include "../static.h"
|
#include "../static.h"
|
||||||
|
|
||||||
|
#include "qnaturalsorting.h"
|
||||||
|
|
||||||
|
struct LibraryItemSorter
|
||||||
|
{
|
||||||
|
bool operator()(const LibraryItem * a,const LibraryItem * b) const
|
||||||
|
{
|
||||||
|
return naturalSortLessThanCI(a->name,b->name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
extern LibraryWindow * mw;
|
extern LibraryWindow * mw;
|
||||||
|
|
||||||
FolderController::FolderController() {}
|
FolderController::FolderController() {}
|
||||||
@ -16,10 +26,8 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
|
|
||||||
HttpSession session=Static::sessionStore->getSession(request,response);
|
HttpSession session=Static::sessionStore->getSession(request,response);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QString y = session.get("xxx").toString();
|
QString y = session.get("xxx").toString();
|
||||||
response.writeText(QString("session xxx : %1 <br/>").arg(y));
|
//response.writeText(QString("session xxx : %1 <br/>").arg(y));
|
||||||
|
|
||||||
Template t=Static::templateLoader->getTemplate("folder",request.getHeader("Accept-Language"));
|
Template t=Static::templateLoader->getTemplate("folder",request.getHeader("Accept-Language"));
|
||||||
t.enableWarnings();
|
t.enableWarnings();
|
||||||
@ -30,6 +38,13 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
QList<LibraryItem *> folderContent = mw->getFolderContentFromLibrary(libraryName,parentId);
|
QList<LibraryItem *> folderContent = mw->getFolderContentFromLibrary(libraryName,parentId);
|
||||||
QList<LibraryItem *> folderComics = mw->getFolderComicsFromLibrary(libraryName,parentId);
|
QList<LibraryItem *> folderComics = mw->getFolderComicsFromLibrary(libraryName,parentId);
|
||||||
|
|
||||||
|
folderContent.append(folderComics);
|
||||||
|
|
||||||
|
qSort(folderContent.begin(),folderContent.end(),LibraryItemSorter());
|
||||||
|
folderComics.clear();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
qulonglong backId = mw->getParentFromComicFolderId(libraryName,parentId);
|
qulonglong backId = mw->getParentFromComicFolderId(libraryName,parentId);
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +87,7 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
int numFolderPages = numFolders / 10 + ((numFolders%10)>0?1:0);
|
int numFolderPages = numFolders / 10 + ((numFolders%10)>0?1:0);
|
||||||
int numPages = totalLength / 10 + ((totalLength%10)>0?1:0);
|
int numPages = totalLength / 10 + ((totalLength%10)>0?1:0);
|
||||||
|
|
||||||
response.writeText(QString("Number of pages : %1 <br/>").arg(numPages));
|
//response.writeText(QString("Number of pages : %1 <br/>").arg(numPages));
|
||||||
|
|
||||||
if(page < 0)
|
if(page < 0)
|
||||||
page = 0;
|
page = 0;
|
||||||
@ -90,9 +105,27 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
while(i<numFoldersAtCurrentPage)
|
while(i<numFoldersAtCurrentPage)
|
||||||
{
|
{
|
||||||
|
LibraryItem * item = folderContent.at(i + (page*10));
|
||||||
t.setVariable(QString("element%1.name").arg(i),folderContent.at(i + (page*10))->name);
|
t.setVariable(QString("element%1.name").arg(i),folderContent.at(i + (page*10))->name);
|
||||||
t.setVariable(QString("element%1.url").arg(i),"/library/"+libraryName+"/folder/"+QString("%1").arg(folderContent.at(i + (page*10))->id));
|
if(item->isDir())
|
||||||
t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*10))->id));
|
{
|
||||||
|
t.setVariable(QString("element%1.image.width").arg(i),"92px");
|
||||||
|
t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
|
||||||
|
|
||||||
|
t.setVariable(QString("element%1.browse").arg(i),QString("<a href=\"%1\">Browse</a>").arg(QString("/library/%1/folder/%2").arg(libraryName).arg(item->id)));
|
||||||
|
|
||||||
|
//t.setVariable(QString("element%1.url").arg(i),"/library/"+libraryName+"/folder/"+QString("%1").arg(folderContent.at(i + (page*10))->id));
|
||||||
|
t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/folder/"+QString("%1/info").arg(folderContent.at(i + (page*10))->id));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const ComicDB * comic = (ComicDB *)item;
|
||||||
|
t.setVariable(QString("element%1.browse").arg(i),"");
|
||||||
|
t.setVariable(QString("element%1.image.width").arg(i),"80px");
|
||||||
|
t.setVariable(QString("element%1.downloadurl").arg(i),"/library/"+libraryName+"/comic/"+QString("%1").arg(comic->id));
|
||||||
|
//t.setVariable(QString("element%1.image.url").arg(i),"/images/f.png");
|
||||||
|
t.setVariable(QString("element%1.image.url").arg(i),QString("/library/%1/cover/%2.jpg").arg(libraryName).arg(comic->info.hash));
|
||||||
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,8 +155,8 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
|
|
||||||
if(numComics == 0)
|
if(numComics == 0)
|
||||||
numComicsAtCurrentPage = 0;
|
numComicsAtCurrentPage = 0;
|
||||||
response.writeText(QString("numComicsAtCurrentPage : %1 <br/>").arg(numComicsAtCurrentPage));
|
//response.writeText(QString("numComicsAtCurrentPage : %1 <br/>").arg(numComicsAtCurrentPage));
|
||||||
response.writeText(QString("comicsOffset : %1 <br/>").arg(comicsOffset));
|
//response.writeText(QString("comicsOffset : %1 <br/>").arg(comicsOffset));
|
||||||
|
|
||||||
t.loop("elementcomic",numComicsAtCurrentPage);
|
t.loop("elementcomic",numComicsAtCurrentPage);
|
||||||
//
|
//
|
||||||
@ -143,21 +176,62 @@ void FolderController::service(HttpRequest& request, HttpResponse& response)
|
|||||||
|
|
||||||
if(numPages > 1)
|
if(numPages > 1)
|
||||||
{
|
{
|
||||||
t.loop("page",numPages);
|
QMap<QString,int> indexCount;
|
||||||
int z = 0;
|
|
||||||
while(z < numPages)
|
QString firstChar;
|
||||||
{
|
int xyz = 1;
|
||||||
|
for(QList<LibraryItem *>::const_iterator itr=folderContent.constBegin();itr!=folderContent.constEnd();itr++)
|
||||||
t.setVariable(QString("page%1.url").arg(z),"/library/"+libraryName+"/folder/"+QString("%1").arg(parentId)+QString("?page=%1").arg(z));
|
{
|
||||||
if(page == z)
|
firstChar = QString((*itr)->name[0]).toUpper();
|
||||||
t.setVariable(QString("page%1.number").arg(z),QString("<strong>%1</strong>").arg(z));
|
firstChar = firstChar.normalized(QString::NormalizationForm_D).at(0);//TODO _D or _KD??
|
||||||
else
|
bool ok;
|
||||||
t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z));
|
int dec = firstChar.toInt(&ok, 10);
|
||||||
z++;
|
if(ok)
|
||||||
}
|
firstChar = "#";
|
||||||
|
//response.writeText(QString("%1 - %2 <br />").arg((*itr)->name).arg(xyz));
|
||||||
|
if(indexCount.contains(firstChar))
|
||||||
|
indexCount.insert(firstChar, indexCount.value(firstChar)+1);
|
||||||
|
else
|
||||||
|
indexCount.insert(firstChar, 1);
|
||||||
|
|
||||||
|
xyz++;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QString> index = indexCount.keys();
|
||||||
|
qSort(index.begin(),index.end(),naturalSortLessThanCI);
|
||||||
|
t.loop("index",index.length());
|
||||||
|
int i=0;
|
||||||
|
int count=0;
|
||||||
|
int indexPage=0;
|
||||||
|
for(QList<QString>::const_iterator itr=index.constBegin();itr!=index.constEnd();itr++)
|
||||||
|
{
|
||||||
|
//response.writeText(QString("%1 - %2 <br />").arg(*itr).arg(count));
|
||||||
|
t.setVariable(QString("index%1.indexname").arg(i), *itr);
|
||||||
|
t.setVariable(QString("index%1.url").arg(i),QString("/library/%1/folder/%2?page=%3").arg(libraryName).arg(parentId).arg(indexPage));
|
||||||
|
i++;
|
||||||
|
count += indexCount.value(*itr);
|
||||||
|
indexPage = count/elementsPerPage;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
t.loop("page",numPages);
|
||||||
|
int z = 0;
|
||||||
|
while(z < numPages)
|
||||||
|
{
|
||||||
|
|
||||||
|
t.setVariable(QString("page%1.url").arg(z),QString("/library/%1/folder/%2?page=%3").arg(libraryName).arg(parentId).arg(z));
|
||||||
|
if(page == z)
|
||||||
|
t.setVariable(QString("page%1.number").arg(z),QString("<strong>%1</strong>").arg(z));
|
||||||
|
else
|
||||||
|
t.setVariable(QString("page%1.number").arg(z),QString("%1").arg(z));
|
||||||
|
z++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
t.loop("page",0);
|
t.loop("page",0);
|
||||||
|
t.loop("index",0);
|
||||||
|
}
|
||||||
|
|
||||||
response.write(t.toLatin1(),true);
|
response.write(t.toLatin1(),true);
|
||||||
|
|
||||||
|
@ -1,61 +1,67 @@
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@author Stefan Frings
|
@author Stefan Frings
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "requestmapper.h"
|
#include "requestmapper.h"
|
||||||
#include "static.h"
|
#include "static.h"
|
||||||
#include "staticfilecontroller.h"
|
#include "staticfilecontroller.h"
|
||||||
#include "controllers/dumpcontroller.h"
|
#include "controllers/dumpcontroller.h"
|
||||||
#include "controllers/templatecontroller.h"
|
#include "controllers/templatecontroller.h"
|
||||||
#include "controllers/formcontroller.h"
|
#include "controllers/formcontroller.h"
|
||||||
#include "controllers/fileuploadcontroller.h"
|
#include "controllers/fileuploadcontroller.h"
|
||||||
#include "controllers/sessioncontroller.h"
|
#include "controllers/sessioncontroller.h"
|
||||||
|
|
||||||
#include "controllers/librariescontroller.h"
|
#include "controllers/librariescontroller.h"
|
||||||
#include "controllers/foldercontroller.h"
|
#include "controllers/foldercontroller.h"
|
||||||
#include "controllers/covercontroller.h"
|
#include "controllers/covercontroller.h"
|
||||||
#include "controllers/comiccontroller.h"
|
#include "controllers/comiccontroller.h"
|
||||||
#include "controllers/folderinfocontroller.h"
|
#include "controllers/folderinfocontroller.h"
|
||||||
#include "controllers/pagecontroller.h"
|
#include "controllers/pagecontroller.h"
|
||||||
|
|
||||||
RequestMapper::RequestMapper(QObject* parent)
|
RequestMapper::RequestMapper(QObject* parent)
|
||||||
:HttpRequestHandler(parent) {}
|
:HttpRequestHandler(parent) {}
|
||||||
|
|
||||||
void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
|
void RequestMapper::service(HttpRequest& request, HttpResponse& response) {
|
||||||
QByteArray path=request.getPath();
|
QByteArray path=request.getPath();
|
||||||
qDebug("RequestMapper: path=%s",path.data());
|
qDebug("RequestMapper: path=%s",path.data());
|
||||||
|
|
||||||
//primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
|
QRegExp folder("/library/.+/folder/[0-9]+/?");//(?page=[0-9]+)?
|
||||||
if(path == "/")
|
QRegExp folderInfo("/library/.+/folder/[0-9]+/info/?");
|
||||||
{
|
QRegExp comic("/library/.+/comic/[0-9]+/?");
|
||||||
LibrariesController().service(request, response);
|
QRegExp comicClose("/library/.+/comic/[0-9]+/close/?");
|
||||||
}
|
QRegExp cover("/library/.+/cover/[0-9a-f]+.jpg");
|
||||||
|
QRegExp comicPage("/library/.+/comic/[0-9]+/page/[0-9]+/?");
|
||||||
//listar el contenido del folder
|
|
||||||
else if(path.contains("folder") && !path.contains("info"))
|
//primera petición, se ha hecho un post, se sirven las bibliotecas si la seguridad mediante login no está habilitada
|
||||||
{
|
if(path == "/")
|
||||||
FolderController().service(request, response);
|
{
|
||||||
}
|
LibrariesController().service(request, response);
|
||||||
else if (path.contains("folder") && path.contains("info"))
|
}
|
||||||
{
|
//listar el contenido del folder
|
||||||
FolderInfoController().service(request, response);
|
else if(folder.exactMatch(path))
|
||||||
}
|
{
|
||||||
else if(path.contains("cover") )
|
FolderController().service(request, response);
|
||||||
{
|
}
|
||||||
CoverController().service(request, response);
|
else if (folderInfo.exactMatch(path))
|
||||||
}
|
{
|
||||||
else if(path.contains("comic") && !path.contains("page"))
|
FolderInfoController().service(request, response);
|
||||||
{
|
}
|
||||||
ComicController().service(request, response);
|
else if(cover.exactMatch(path))
|
||||||
}
|
{
|
||||||
else if(path.contains("page"))
|
CoverController().service(request, response);
|
||||||
{
|
}
|
||||||
PageController().service(request,response);
|
else if(comic.exactMatch(path))
|
||||||
}
|
{
|
||||||
else
|
ComicController().service(request, response);
|
||||||
{
|
}
|
||||||
Static::staticFileController->service(request, response);
|
else if(comicPage.exactMatch(path))
|
||||||
}
|
{
|
||||||
|
PageController().service(request,response);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Static::staticFileController->service(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -16,14 +16,12 @@
|
|||||||
|
|
||||||
<ul id="itemContainer">
|
<ul id="itemContainer">
|
||||||
{loop element}
|
{loop element}
|
||||||
<li><img style="width: 92px" src="/images/f.png"/><a href="{element.url}">{element.name}</a> - <a href="{element.downloadurl}">Download</a></li>
|
<li><img style="width: {element.image.width}" src="{element.image.url}"/> <p>{element.name}</p> {element.browse} - <a href="{element.downloadurl}">Download</a></li>
|
||||||
{end element}
|
{end element}
|
||||||
|
|
||||||
{loop elementcomic}
|
|
||||||
<li><img style="width: 80px" src="{elementcomic.coverulr}" /> <a href="{elementcomic.url}">{elementcomic.name}</a></li>
|
|
||||||
{end elementcomic}
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<div>{loop index} <a href="{index.url}"> {index.indexname} </a> {end index}</div>
|
||||||
|
<br />
|
||||||
<div>{loop page} <a href="{page.url}"> {page.number} </a> {end page}</div>
|
<div>{loop page} <a href="{page.url}"> {page.number} </a> {end page}</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user