// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2009 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see .
#if defined(_WIN32) && !defined(__STDWX_H__)
#include "boinc_win.h"
#elif defined(_WIN32) && defined(__STDWX_H__)
#include "stdwx.h"
#endif
#include "error_numbers.h"
#include "notice.h"
NOTICE::NOTICE() {
clear();
}
NOTICE::~NOTICE() {
clear();
}
// This is to parse our own XML.
// parse_rss() parses an RSS feed item.
//
int NOTICE::parse(XML_PARSER& xp) {
char tag[1024];
bool is_tag;
clear();
while (!xp.get(tag, sizeof(tag), is_tag)) {
if (!is_tag) continue;
if (!strcmp(tag, "/notice")) {
return 0;
}
if (xp.parse_int(tag, "seqno", seqno)) continue;
if (xp.parse_str(tag, "title", title, sizeof(title))) continue;
if (xp.parse_string(tag, "description", description)) {
xml_unescape(description); // 2nd pass
continue;
}
if (xp.parse_double(tag, "create_time", create_time)) continue;
if (xp.parse_double(tag, "arrival_time", arrival_time)) continue;
if (xp.parse_bool(tag, "is_private", is_private)) continue;
if (xp.parse_str(tag, "category", category, sizeof(category))) continue;
if (xp.parse_str(tag, "link", link, sizeof(link))) continue;
if (xp.parse_str(tag, "project_name", project_name, sizeof(project_name))) continue;
if (xp.parse_str(tag, "guid", guid, sizeof(guid))) continue;
if (xp.parse_str(tag, "feed_url", feed_url, sizeof(feed_url))) continue;
}
return ERR_XML_PARSE;
}
void NOTICE::write(MIOFILE& f, bool for_gui) {
f.printf(
"\n"
" %s\n"
" \n"
" %f\n"
" %f\n"
" %d\n"
" %s\n"
" %s\n"
" %s\n",
title,
description.c_str(),
create_time,
arrival_time,
is_private?1:0,
project_name,
category,
link
);
if (!for_gui) {
f.printf(
" %s\n", guid
);
} else {
f.printf(
" %d\n", seqno
);
}
f.printf(
"\n"
);
}
void NOTICE::clear() {
seqno = 0;
strcpy(title, "");
description = "";
create_time = 0;
arrival_time = 0;
is_private = 0;
strcpy(category, "");
strcpy(link, "");
strcpy(project_name, "");
strcpy(guid, "");
strcpy(feed_url, "");
}