File: notice.cpp

package info (click to toggle)
boinc 7.14.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 111,132 kB
  • sloc: cpp: 163,589; php: 113,173; ansic: 49,284; pascal: 35,620; xml: 17,864; java: 13,521; python: 6,551; sh: 4,082; perl: 1,843; makefile: 1,796; objc: 1,543; sql: 959; csh: 126; lisp: 47
file content (116 lines) | stat: -rw-r--r-- 3,398 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// 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 <http://www.gnu.org/licenses/>.

#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 "str_replace.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) {
    clear();
    while (!xp.get_tag()) {
        if (!xp.is_tag) continue;
        if (xp.match_tag("/notice")) {
            if (strcasestr(description.c_str(), "youtube.com")) {
                is_youtube_video = true;
            }
            return 0;
        }
        if (xp.parse_int("seqno", seqno)) continue;
        if (xp.parse_str("title", title, sizeof(title))) continue;
        if (xp.parse_string("description", description)) continue;
        if (xp.parse_double("create_time", create_time)) continue;
        if (xp.parse_double("arrival_time", arrival_time)) continue;
        if (xp.parse_bool("is_private", is_private)) continue;
        if (xp.parse_str("category", category, sizeof(category))) continue;
        if (xp.parse_str("link", link, sizeof(link))) continue;
        if (xp.parse_str("project_name", project_name, sizeof(project_name))) continue;
        if (xp.parse_str("guid", guid, sizeof(guid))) continue;
        if (xp.parse_str("feed_url", feed_url, sizeof(feed_url))) continue;
    }
    return ERR_XML_PARSE;
}


void NOTICE::write(MIOFILE& f, bool for_gui) {
    f.printf(
        "<notice>\n"
        "   <title>%s</title>\n"
        "   <description><![CDATA[\n%s\n]]></description>\n"
        "   <create_time>%f</create_time>\n"
        "   <arrival_time>%f</arrival_time>\n"
        "   <is_private>%d</is_private>\n"
        "   <project_name>%s</project_name>\n"
        "   <category>%s</category>\n"
        "   <link>%s</link>\n",
        title,
        description.c_str(),
        create_time,
        arrival_time,
        is_private?1:0,
        project_name,
        category,
        link
    );
    if (for_gui) {
        f.printf(
            "   <seqno>%d</seqno>\n", seqno
        );
    } else {
        f.printf(
            "   <guid>%s</guid>\n", guid
        );
    }
    f.printf(
        "</notice>\n"
     );
}


void NOTICE::clear() {
    seqno = 0;
    safe_strcpy(title, "");
    description = "";
    create_time = 0;
    arrival_time = 0;
    is_private = false;
    is_youtube_video = false;
    safe_strcpy(category, "");
    safe_strcpy(link, "");
    safe_strcpy(project_name, "");
    safe_strcpy(guid, "");
    safe_strcpy(feed_url, "");
    keep = false;
}