Simplified code.
This commit is contained in:
@@ -47,8 +47,8 @@ static GWEN_MSG *_handlePostAdd(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq);
|
|||||||
static GWEN_MSG *_handlePostEdit(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id);
|
static GWEN_MSG *_handlePostEdit(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id);
|
||||||
static int _writeAddPage(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, GWEN_DB_NODE *dbValues, GWEN_BUFFER *pageBuf);
|
static int _writeAddPage(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, GWEN_DB_NODE *dbValues, GWEN_BUFFER *pageBuf);
|
||||||
static int _writeEditPage(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, GWEN_DB_NODE *dbValues, GWEN_BUFFER *pageBuf);
|
static int _writeEditPage(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, GWEN_DB_NODE *dbValues, GWEN_BUFFER *pageBuf);
|
||||||
static GWEN_MSG *_addRoomCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq);
|
static GWEN_MSG *_addOrEditAndCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id);
|
||||||
static GWEN_MSG *_editRoomCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id);
|
static int _addOrEditRoom(AQH_HTTP_URLHANDLER *uh, const AQH_ROOM *newRoom, int id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -287,38 +287,26 @@ void _handleGetEdit(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id, GWEN_
|
|||||||
|
|
||||||
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
||||||
sto=AqHomeHttpService_GetStorage(sv);
|
sto=AqHomeHttpService_GetStorage(sv);
|
||||||
if (sto) {
|
if (id>0) {
|
||||||
if (id>0) {
|
const AQH_ROOM *r;
|
||||||
const AQH_ROOM *r;
|
|
||||||
|
|
||||||
r=AQH_Storage_GetRoomById(sto, id);
|
r=AQH_Storage_GetRoomById(sto, id);
|
||||||
if (r) {
|
if (r) {
|
||||||
GWEN_DB_NODE *db;
|
GWEN_DB_NODE *db;
|
||||||
int rv;
|
|
||||||
|
|
||||||
db=GWEN_DB_Group_new("room");
|
db=GWEN_DB_Group_new("room");
|
||||||
rv=AQH_Room_toDb(r, db);
|
AQH_Room_toDb(r, db);
|
||||||
if (rv>=0)
|
_writeEditPage(uh, rq, db, pageBuf);
|
||||||
_writeEditPage(uh, rq, db, pageBuf);
|
GWEN_DB_Group_free(db);
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "Error writing room %d to db", id);
|
|
||||||
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Internal error."));
|
|
||||||
}
|
|
||||||
GWEN_DB_Group_free(db);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "Room %d not found", id);
|
|
||||||
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Room not found."));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(NULL, "Missing room id");
|
DBG_ERROR(NULL, "Room %d not found", id);
|
||||||
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Missing or invalid room id."));
|
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Room not found."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(NULL, "No storage");
|
DBG_ERROR(NULL, "Missing room id");
|
||||||
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Internal error."));
|
GWEN_Buffer_AppendArgs(pageBuf, "<p><font color=\"red\">%s</font></p>", I18N("Missing or invalid room id."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -411,18 +399,8 @@ GWEN_MSG *_handlePostAdd(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq)
|
|||||||
protocol=AQH_HttpRequest_GetProtocol(rq);
|
protocol=AQH_HttpRequest_GetProtocol(rq);
|
||||||
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
||||||
perms=AQH_HttpRequest_GetModulePerms(rq);
|
perms=AQH_HttpRequest_GetModulePerms(rq);
|
||||||
if (perms & AQHOME_HTTP_PERMS_ADD_ROOM) {
|
if (perms & AQHOME_HTTP_PERMS_ADD_ROOM)
|
||||||
AQH_STORAGE *sto;
|
return _addOrEditAndCreateResponse(uh, rq, 0);
|
||||||
|
|
||||||
sto=AqHomeHttpService_GetStorage(sv);
|
|
||||||
if (sto) {
|
|
||||||
return _addRoomCreateResponse(uh, rq);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "No storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 403, "Forbidden", protocol, NULL);
|
return AQH_HttpService_CreateResponseMsg(sv, 403, "Forbidden", protocol, NULL);
|
||||||
}
|
}
|
||||||
@@ -439,17 +417,8 @@ GWEN_MSG *_handlePostEdit(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id)
|
|||||||
protocol=AQH_HttpRequest_GetProtocol(rq);
|
protocol=AQH_HttpRequest_GetProtocol(rq);
|
||||||
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
||||||
perms=AQH_HttpRequest_GetModulePerms(rq);
|
perms=AQH_HttpRequest_GetModulePerms(rq);
|
||||||
if (perms & AQHOME_HTTP_PERMS_ADD_ROOM) {
|
if (perms & AQHOME_HTTP_PERMS_EDIT_ROOM) {
|
||||||
AQH_STORAGE *sto;
|
return _addOrEditAndCreateResponse(uh, rq, id);
|
||||||
|
|
||||||
sto=AqHomeHttpService_GetStorage(sv);
|
|
||||||
if (sto) {
|
|
||||||
return _editRoomCreateResponse(uh, rq, id);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "No storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 403, "Forbidden", protocol, NULL);
|
return AQH_HttpService_CreateResponseMsg(sv, 403, "Forbidden", protocol, NULL);
|
||||||
@@ -458,119 +427,107 @@ GWEN_MSG *_handlePostEdit(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
GWEN_MSG *_addRoomCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq)
|
GWEN_MSG *_addOrEditAndCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id)
|
||||||
{
|
{
|
||||||
AQH_SERVICE *sv;
|
AQH_SERVICE *sv;
|
||||||
const char *protocol;
|
const char *protocol;
|
||||||
GWEN_DB_NODE *db;
|
GWEN_DB_NODE *db;
|
||||||
const char *roomName;
|
AQH_ROOM *r;
|
||||||
const char *roomDescr;
|
int rv;
|
||||||
AQH_STORAGE *sto;
|
|
||||||
|
|
||||||
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
||||||
protocol=AQH_HttpRequest_GetProtocol(rq);
|
protocol=AQH_HttpRequest_GetProtocol(rq);
|
||||||
db=AQH_HttpRequest_GetDbPostBody(rq);
|
db=AQH_HttpRequest_GetDbPostBody(rq);
|
||||||
|
|
||||||
roomName=GWEN_DB_GetCharValue(db, "name", 0, NULL);
|
r=AQH_Room_fromDb(db);
|
||||||
roomDescr=GWEN_DB_GetCharValue(db, "description", 0, NULL);
|
rv=_addOrEditRoom(uh, r, id);
|
||||||
|
AQH_Room_free(r);
|
||||||
if (!(roomName && *roomName)) {
|
if (rv<0) {
|
||||||
DBG_INFO(NULL, "Missing room name");
|
switch(rv) {
|
||||||
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Missing room name"), 1, db, _writeAddPage);
|
case GWEN_ERROR_INVALID:
|
||||||
}
|
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Missing fields"), 1, db, _writeAddPage);
|
||||||
|
case GWEN_ERROR_FOUND:
|
||||||
sto=AqHomeHttpService_GetStorage(sv);
|
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Room already exists"), 1, db, _writeEditPage);
|
||||||
if (sto) {
|
case GWEN_ERROR_NOT_FOUND:
|
||||||
AQH_ROOM *r;
|
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Room not found"), 1, db, _writeEditPage);
|
||||||
int rv;
|
case GWEN_ERROR_IO:
|
||||||
|
case GWEN_ERROR_INTERNAL:
|
||||||
r=AQH_Room_new();
|
default:
|
||||||
AQH_Room_SetName(r, roomName);
|
|
||||||
if (roomDescr && *roomDescr)
|
|
||||||
AQH_Room_SetDescription(r, roomDescr);
|
|
||||||
|
|
||||||
rv=AqHomeHttpService_LockStorage(sv);
|
|
||||||
if (rv<0) {
|
|
||||||
DBG_ERROR(NULL, "Error locking storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
||||||
}
|
}
|
||||||
if (AQH_Storage_GetRoomByName(sto, roomName)!=NULL) {
|
|
||||||
DBG_INFO(NULL, "Room \"%s\" already exists", roomName);
|
|
||||||
AqHomeHttpService_UnlockStorage(sv);
|
|
||||||
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Room already exists"), 1, db, _writeAddPage);
|
|
||||||
}
|
|
||||||
AQH_Storage_AddRoom(sto, r);
|
|
||||||
AQH_Storage_AddRuntimeFlags(sto, AQH_STORAGE_RTFLAGS_MODIFIED);
|
|
||||||
|
|
||||||
rv=AqHomeHttpService_UnlockStorage(sv);
|
|
||||||
if (rv<0) {
|
|
||||||
DBG_ERROR(NULL, "Error unlocking storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
|
||||||
return AQH_HttpService_CreateRedirectingResponseMsg(sv, protocol, "/rooms/list");
|
|
||||||
}
|
}
|
||||||
else
|
return AQH_HttpService_CreateRedirectingResponseMsg(sv, protocol, "/rooms/list");
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GWEN_MSG *_editRoomCreateResponse(AQH_HTTP_URLHANDLER *uh, AQH_HTTP_REQUEST *rq, int id)
|
int _addOrEditRoom(AQH_HTTP_URLHANDLER *uh, const AQH_ROOM *newRoom, int id)
|
||||||
{
|
{
|
||||||
AQH_SERVICE *sv;
|
AQH_SERVICE *sv;
|
||||||
const char *protocol;
|
|
||||||
GWEN_DB_NODE *db;
|
|
||||||
const char *roomName;
|
|
||||||
const char *roomDescr;
|
|
||||||
AQH_STORAGE *sto;
|
AQH_STORAGE *sto;
|
||||||
|
const char *roomName;
|
||||||
|
int rv;
|
||||||
|
|
||||||
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
sv=AQH_HttpUrlHandler_GetHttpService(uh);
|
||||||
protocol=AQH_HttpRequest_GetProtocol(rq);
|
sto=AqHomeHttpService_GetStorage(sv);
|
||||||
db=AQH_HttpRequest_GetDbPostBody(rq);
|
|
||||||
|
|
||||||
roomName=GWEN_DB_GetCharValue(db, "name", 0, NULL);
|
|
||||||
roomDescr=GWEN_DB_GetCharValue(db, "description", 0, NULL);
|
|
||||||
|
|
||||||
|
roomName=AQH_Room_GetName(newRoom);
|
||||||
if (!(roomName && *roomName)) {
|
if (!(roomName && *roomName)) {
|
||||||
DBG_INFO(NULL, "Missing room name");
|
DBG_INFO(NULL, "Missing room name");
|
||||||
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Missing room name"), 1, db, _writeAddPage);
|
return GWEN_ERROR_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
sto=AqHomeHttpService_GetStorage(sv);
|
rv=AqHomeHttpService_LockStorage(sv);
|
||||||
if (sto) {
|
if (rv<0) {
|
||||||
AQH_ROOM *r;
|
DBG_ERROR(NULL, "Error locking storage");
|
||||||
int rv;
|
return GWEN_ERROR_IO;
|
||||||
|
}
|
||||||
|
|
||||||
rv=AqHomeHttpService_LockStorage(sv);
|
if (id>0) {
|
||||||
if (rv<0) {
|
AQH_ROOM *r;
|
||||||
DBG_ERROR(NULL, "Error locking storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
r=AQH_Storage_GetRoomById(sto, id);
|
r=AQH_Storage_GetRoomById(sto, id);
|
||||||
if (r==NULL) {
|
if (r==NULL) {
|
||||||
AqHomeHttpService_UnlockStorage(sv);
|
AqHomeHttpService_UnlockStorage(sv);
|
||||||
DBG_ERROR(NULL, "Room %d not found", id);
|
DBG_ERROR(NULL, "Room %d not found", id);
|
||||||
return AQH_HttpUrlHandler_CreatePageMessage(uh, rq, "red", I18N("Room not found"), 1, db, _writeEditPage);
|
return GWEN_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
AQH_Room_SetId(r, id);
|
||||||
/* edit room */
|
|
||||||
AQH_Room_SetName(r, roomName);
|
AQH_Room_SetName(r, roomName);
|
||||||
if (roomDescr && *roomDescr)
|
AQH_Room_SetDescription(r, AQH_Room_GetDescription(newRoom));
|
||||||
AQH_Room_SetDescription(r, roomDescr);
|
|
||||||
AQH_Storage_AddRuntimeFlags(sto, AQH_STORAGE_RTFLAGS_MODIFIED);
|
AQH_Storage_AddRuntimeFlags(sto, AQH_STORAGE_RTFLAGS_MODIFIED);
|
||||||
|
|
||||||
rv=AqHomeHttpService_UnlockStorage(sv);
|
|
||||||
if (rv<0) {
|
|
||||||
DBG_ERROR(NULL, "Error unlocking storage");
|
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
|
||||||
}
|
|
||||||
return AQH_HttpService_CreateRedirectingResponseMsg(sv, protocol, "/rooms/list");
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
return AQH_HttpService_CreateResponseMsg(sv, 500, "Internal error", protocol, NULL);
|
AQH_ROOM *r;
|
||||||
|
|
||||||
|
r=AQH_Storage_GetRoomByName(sto, roomName);
|
||||||
|
if (r) {
|
||||||
|
DBG_ERROR(NULL, "Room %s exists", roomName);
|
||||||
|
return GWEN_ERROR_FOUND;
|
||||||
|
}
|
||||||
|
AQH_Storage_AddRoom(sto, r);
|
||||||
|
AQH_Storage_AddRuntimeFlags(sto, AQH_STORAGE_RTFLAGS_MODIFIED);
|
||||||
|
}
|
||||||
|
|
||||||
|
rv=AqHomeHttpService_UnlockStorage(sv);
|
||||||
|
if (rv<0) {
|
||||||
|
DBG_ERROR(NULL, "Error unlocking storage");
|
||||||
|
return GWEN_ERROR_IO;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: applyRoom(uh, rq, r, id)
|
||||||
|
* share code!
|
||||||
|
*
|
||||||
|
* check values
|
||||||
|
*
|
||||||
|
* if id==0:
|
||||||
|
* - lookup room
|
||||||
|
* - add room if not already found
|
||||||
|
* else
|
||||||
|
* set room data
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user