Preference *Data = NULL;
Preference *LastData = NULL;
- while (!Done && StrBuf_ServGetln(ReadBuf))
- {
+ while (!Done) {
+ StrBuf_ServGetln(ReadBuf);
if ( (StrLength(ReadBuf)==3) &&
!strcmp(ChrPtr(ReadBuf), "000")) {
Done = 1;
}
if ((ChrPtr(ReadBuf)[0] == ' ') &&
- (Data != NULL)) {
- StrBufAppendBuf(Data->Val, ReadBuf, 1);
+ (LastData != NULL)) {
+ StrBufAppendBuf(LastData->Val, ReadBuf, 1);
}
else {
LastData = Data = malloc(sizeof(Preference));
DestroyPreference(Data);
LastData = NULL;
}
+ Data = NULL;
}
}
GetPrefTypes(*List);
StrBuf *ReadBuf;
long msgnum = 0L;
- ReadBuf = NewStrBuf();
+ ReadBuf = NewStrBufPlain(NULL, SIZ * 4);
if (goto_config_room(ReadBuf) != 0) {
FreeStrBuf(&ReadBuf);
return; /* oh well. */
FreeStrBuf(&ReadBuf);
}
-/**
- * \brief Goto the user's configuration room, creating it if necessary.
- * \return 0 on success or nonzero upon failure.
+/*
+ * Goto the user's configuration room, creating it if necessary.
+ * returns 0 on success or nonzero upon failure.
*/
int goto_config_room(StrBuf *Buf)
{
serv_printf("GOTO %s", USERCONFIGROOM);
StrBuf_ServGetln(Buf);
- if (GetServerStatus(Buf, NULL) != 2) { /* try to create the config room if not there */
+ if (GetServerStatus(Buf, NULL) != 2) { /* try to create the config room if not there */
serv_printf("CRE8 1|%s|4|0", USERCONFIGROOM);
StrBuf_ServGetln(Buf);
GetServerStatus(Buf, NULL);
serv_printf("GOTO %s", USERCONFIGROOM);
StrBuf_ServGetln(Buf);
- if (GetServerStatus(Buf, NULL) != 2)
+ if (GetServerStatus(Buf, NULL) != 2) {
return(1);
+ }
}
return(0);
}
int n = 0;
size_t offset, nchars;
if (SubBuf == NULL)
- SubBuf = NewStrBuf();
+ SubBuf = NewStrBufPlain(NULL, SIZ);
nchars = 1;
offset = 0;
while (nchars > 0) {
void offer_start_page(StrBuf *Target, WCTemplputParams *TP)
{
wprintf("<a href=\"change_start_page?startpage=");
- urlescputs(ChrPtr(WC->this_page));
+ urlescputs(ChrPtr(WC->Hdr->this_page));
wprintf("\">");
wprintf(_("Make this my start page"));
wprintf("</a>");
-#ifdef TECH_PREVIEW
- wprintf("<br/><a href=\"rss?room=");
- urlescputs(ChrPtr(WC->wc_roomname));
- wprintf("\" title=\"RSS 2.0 feed for ");
- escputs(ChrPtr(WC->wc_roomname));
- wprintf("\"><img alt=\"RSS\" border=\"0\" src=\"static/xml_button.gif\"/></a>\n");
-#endif
}
}
+void LoadStartpage(StrBuf *URL, long lvalue)
+{
+ const char *pch;
+ pch = strchr(ChrPtr(URL), '?');
+ if (pch == NULL) {
+ /* purge the sins of the past... */
+ pch = strchr(ChrPtr(URL), '&');
+ if (pch != NULL) {
+ StrBufPeek(URL, pch, -1, '?');
+ WC->SavePrefsToServer = 1;
+ }
+ }
+}
+
+
void
InitModule_PREFERENCES
(void)
WebcitAddUrlHandler(HKEY("set_preferences"), set_preferences, 0);
WebcitAddUrlHandler(HKEY("change_start_page"), change_start_page, 0);
+ RegisterPreference("startpage", _("Prefered startpage"), PRF_STRING, LoadStartpage);
RegisterNamespace("OFFERSTARTPAGE", 0, 0, offer_start_page, CTX_NONE);
RegisterNamespace("PREF:ROOM:VALUE", 1, 2, tmplput_CFG_RoomValue, CTX_NONE);
PreferenceHooks = NewHash(1, NULL);
}
+
+
void
ServerShutdownModule_PREFERENCES
(void)
DeleteHash(&PreferenceHooks);
}
+void
+SessionDetachModule__PREFERENCES
+(wcsession *sess)
+{
+ if (sess->SavePrefsToServer) {
+ save_preferences();
+ sess->SavePrefsToServer = 0;
+ }
+}
void
SessionNewModule_PREFERENCES