Welcome to mirror list, hosted at ThFree Co, Russian Federation.

rmnews_8c_source.html « public - gitlab.com/Remmina/remminadoc.gitlab.io.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f36f9acea749a91995245083bbe1341af97c6ccb (plain)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Remmina - The GTK+ Remote Desktop Client: rmnews.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="org.remmina.Remmina.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Remmina - The GTK+ Remote Desktop Client
   &#160;<span id="projectnumber">v1.4.27</span>
   </div>
   <div id="projectbrief">Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('rmnews_8c_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">rmnews.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="rmnews_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * Boston, MA  02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *  In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *  permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *  individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  for all of the code used other than OpenSSL. *  If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *  file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *  version of the file(s), but you are not obligated to do so. *  If you</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> *  do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *  version. *  If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> *  files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;gio/gdesktopappinfo.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;gio/gio.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &lt;glib/gi18n.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;glib/gstdio.h&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &lt;libsoup/soup.h&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;time.h&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina_8h.html">remmina.h</a>&quot;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__main_8h.html">remmina_main.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__log_8h.html">remmina_log.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__public_8h.html">remmina_public.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__sodium_8h.html">remmina_sodium.h</a>&quot;</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>&quot;</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__scheduler_8h.html">remmina_scheduler.h</a>&quot;</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="remmina__sysinfo_8h.html">remmina_sysinfo.h</a>&quot;</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rmnews_8h.html">rmnews.h</a>&quot;</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#define ARR_SIZE(arr) (sizeof((arr)) / sizeof((arr[0])))</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">/* Neas file buffer */</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#define READ_BUFFER_LEN 1024</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">/* Timers */</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#define RMNEWS_CHECK_1ST_MS 3000</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#define RMNEWS_CHECK_INTERVAL_MS 12000</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">/* How many seconds before to get news */</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#define RMNEWS_INTERVAL_SEC 604800</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">/* TODO: move in config.h */</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">#define REMMINA_URL &quot;https://remmina.org/&quot;</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#define RMNEWS_OUTPUT &quot;/var/tmp/latest_news.md&quot;</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="rmnews_8c.html#ae1bb737d0381441eebbf3652b3ef416d">   73</a></span>&#160;<span class="keyword">static</span> <a class="code" href="struct___remmina_news_dialog.html">RemminaNewsDialog</a> *<a class="code" href="rmnews_8c.html#ae1bb737d0381441eebbf3652b3ef416d">rmnews_news_dialog</a>;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">#define GET_OBJ(object_name) gtk_builder_get_object(rmnews_news_dialog-&gt;builder, object_name)</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">   76</a></span>&#160;<span class="keyword">static</span> SoupSession *<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="preprocessor">#if SOUP_MAJOR_VERSION &lt; 3</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">#define soup_message_get_status(message) message-&gt;status_code</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#define soup_message_get_response_headers(message) message-&gt;response_headers</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a565782499953048b5e51934123195e29">   83</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> gchar *<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a> = NULL;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="keyword">static</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">   86</a></span>&#160;<span class="keyword">const</span> gchar *<a class="code" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[] = {</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="stringliteral">&quot;x-scheme-handler/rdp&quot;</span>,</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="stringliteral">&quot;x-scheme-handler/spice&quot;</span>,</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="stringliteral">&quot;x-scheme-handler/vnc&quot;</span>,</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="stringliteral">&quot;x-scheme-handler/remmina&quot;</span>,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="stringliteral">&quot;application/x-remmina&quot;</span>,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    NULL</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;};</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="rmnews_8c.html#af4777302c760225b833206545e9f437d">   95</a></span>&#160;gint <a class="code" href="rmnews_8c.html#af4777302c760225b833206545e9f437d">eweekdays</a>[7] = {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    86400,</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    172800,</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    259200,</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    345600,</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    432000,</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    518400,</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    604800</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;};</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="preprocessor">#if SOUP_CHECK_VERSION (2, 99, 2)</span></div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a78c63694cb6197f185242acac0ea1575">  107</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a78c63694cb6197f185242acac0ea1575">rmnews_on_stream_splice</a> (GObject *source, GAsyncResult *result, gpointer user_data)</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;{</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        GError *error = NULL;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        g_output_stream_splice_finish (G_OUTPUT_STREAM (source),</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;                                       result,</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                                       &amp;error);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;                g_printerr (<span class="stringliteral">&quot;Failed to download: %s\n&quot;</span>, error-&gt;message);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;                g_error_free (error);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        }</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;}</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a0b8a063b164dbf0798982daa9399a793">  122</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a0b8a063b164dbf0798982daa9399a793">rmnews_news_switch_state_set_cb</a>()</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;{</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">if</span> (rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a> &amp;&amp; \</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        gtk_switch_get_active(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a>)) {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> = TRUE;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> = FALSE;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    }</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;}</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a7825b2c9facea97439f5780d83e86798">  135</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a7825b2c9facea97439f5780d83e86798">rmnews_defaultcl_on_click</a>()</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;{</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    g_autoptr(GError) error = NULL;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    GDesktopAppInfo *desktop_info;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    GAppInfo *info = NULL;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    g_autofree gchar *<span class="keywordtype">id</span> = g_strconcat(REMMINA_APP_ID, <span class="stringliteral">&quot;.desktop&quot;</span>, NULL);</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    desktop_info = g_desktop_app_info_new(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">if</span> (!desktop_info)</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    info = G_APP_INFO(desktop_info);</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">for</span> (i = 0; <a class="code" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i]; i++) {</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        <span class="keywordflow">if</span> (!g_app_info_set_as_default_for_type(info, <a class="code" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i], &amp;error))</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Failed to set &#39;%s&#39; as the default application for secondary content type &#39;%s&#39;: %s&quot;</span>,</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                  g_app_info_get_name(info), <a class="code" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i], error-&gt;message);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Set &#39;%s&#39; as the default application for &#39;%s&#39;&quot;</span>,</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                      g_app_info_get_name(info),</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                      <a class="code" href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i]);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    }</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;}</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a11d7277ba911522ac40656774cbe41b9">  161</a></span>&#160;<span class="keyword">static</span> gchar *<a class="code" href="rmnews_8c.html#a11d7277ba911522ac40656774cbe41b9">rmnews_get_file_contents</a>(gchar *path)</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    gsize size;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    gchar *content;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">if</span> (g_file_get_contents(path, &amp;content, &amp;size, NULL)) {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        <span class="keywordflow">if</span> (!g_utf8_validate(content, size, NULL)) {</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;%s content is not UTF-8&quot;</span>, path);</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            g_free(content);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;            content = NULL;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        }</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="comment">//return g_markup_escape_text(content, strlen(content));</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">return</span> content;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;}</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="rmnews_8c.html#aaa3ec81813c3b38be1f75885e6005a00">  177</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#aaa3ec81813c3b38be1f75885e6005a00">rmnews_close_clicked</a>(GtkButton *btn, gpointer user_data)</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;{</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">if</span> (rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a>)</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        gtk_widget_destroy(GTK_WIDGET(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a>));</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a> = NULL;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    g_free(rmnews_news_dialog);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    rmnews_news_dialog = NULL;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;}</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="rmnews_8c.html#adf38ed099d3ac477aea7e3bbd6d95bd4">  187</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rmnews_8c.html#adf38ed099d3ac477aea7e3bbd6d95bd4">rmnews_dialog_deleted</a>(GtkButton *btn, gpointer user_data)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;{</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    gtk_widget_destroy(GTK_WIDGET(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a>));</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a> = NULL;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    g_free(rmnews_news_dialog);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    rmnews_news_dialog = NULL;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;}</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">  198</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">rmnews_show_news</a>(GtkWindow *parent)</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;{</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#a0e2a887037f1ac58aa26fae55187601a">disablenews</a>) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    rmnews_news_dialog = g_new0(<a class="code" href="struct___remmina_news_dialog.html">RemminaNewsDialog</a>, 1);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#aa44d2c89a170a509ebb082082efac813">retval</a> = 1;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a04d61af97919ea321ca384711edd2015">builder</a> = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">&quot;/org/remmina/Remmina/src/../data/ui/remmina_news.glade&quot;</span>);</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">dialog</a> = GTK_DIALOG(gtk_builder_get_object(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a04d61af97919ea321ca384711edd2015">builder</a>, <span class="stringliteral">&quot;RemminaNewsDialog&quot;</span>));</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a94584de47018f068c242e5f527e3b84f">rmnews_text_view</a> = GTK_TEXT_VIEW(GET_OBJ(<span class="stringliteral">&quot;rmnews_text_view&quot;</span>));</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#ae4b71b4e789e65063db67f51ce4feb26">rmnews_label</a> = GTK_LABEL(GET_OBJ(<span class="stringliteral">&quot;rmnews_label&quot;</span>));</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a041c5c6f7776a3cdfd1fbcc700dfc749">rmnews_defaultcl_label</a> = GTK_LABEL(GET_OBJ(<span class="stringliteral">&quot;rmnews_defaultcl_label&quot;</span>));</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a5f1f924669db7285fac6087e08d6ce19">rmnews_defaultcl_button</a> = GTK_BUTTON(GET_OBJ(<span class="stringliteral">&quot;rmnews_defaultcl_switch&quot;</span>));</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a> = GTK_SWITCH(GET_OBJ(<span class="stringliteral">&quot;rmnews_news_switch&quot;</span>));</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> == 1)</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        gtk_switch_set_active(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a>, TRUE);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        gtk_switch_set_active(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a>, FALSE);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    gtk_widget_set_sensitive(GTK_WIDGET(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">rmnews_news_switch</a>), RMNEWS_ENABLE_NEWS);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a24dd17da12072e324ce165a9873d59ad">rmnews_button_close</a> = GTK_BUTTON(GET_OBJ(<span class="stringliteral">&quot;rmnews_button_close&quot;</span>));</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    gtk_widget_set_can_default(GTK_WIDGET(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a24dd17da12072e324ce165a9873d59ad">rmnews_button_close</a>), TRUE);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    gtk_widget_grab_default(GTK_WIDGET(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a24dd17da12072e324ce165a9873d59ad">rmnews_button_close</a>));</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> == 1) {</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        gchar *contents = <a class="code" href="rmnews_8c.html#a11d7277ba911522ac40656774cbe41b9">rmnews_get_file_contents</a>(g_strdup(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>));</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        <span class="keywordflow">if</span> (contents) {</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;            gtk_label_set_markup(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#ae4b71b4e789e65063db67f51ce4feb26">rmnews_label</a>, contents);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;            g_free(contents);</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        }</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    }</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    g_signal_connect(rmnews_news_dialog-&gt;<a class="code" href="struct___remmina_news_dialog.html#a24dd17da12072e324ce165a9873d59ad">rmnews_button_close</a>, <span class="stringliteral">&quot;clicked&quot;</span>,</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;             G_CALLBACK(<a class="code" href="rmnews_8c.html#aaa3ec81813c3b38be1f75885e6005a00">rmnews_close_clicked</a>), (gpointer)rmnews_news_dialog);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    g_signal_connect(rmnews_news_dialog-&gt;dialog, <span class="stringliteral">&quot;close&quot;</span>,</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;             G_CALLBACK(<a class="code" href="rmnews_8c.html#aaa3ec81813c3b38be1f75885e6005a00">rmnews_close_clicked</a>), NULL);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    g_signal_connect(rmnews_news_dialog-&gt;dialog, <span class="stringliteral">&quot;delete-event&quot;</span>,</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;             G_CALLBACK(<a class="code" href="rmnews_8c.html#adf38ed099d3ac477aea7e3bbd6d95bd4">rmnews_dialog_deleted</a>), NULL);</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="comment">/* Connect signals */</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    gtk_builder_connect_signals(rmnews_news_dialog-&gt;builder, NULL);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="comment">/* Show the non-modal news dialog */</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    gtk_widget_show_all(GTK_WIDGET(rmnews_news_dialog-&gt;dialog));</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    gtk_window_present(GTK_WINDOW(rmnews_news_dialog-&gt;dialog));</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    <span class="keywordflow">if</span> (parent)</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        gtk_window_set_transient_for(GTK_WINDOW(rmnews_news_dialog-&gt;dialog), parent);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    gtk_window_set_modal(GTK_WINDOW(rmnews_news_dialog-&gt;dialog), TRUE);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;}</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="preprocessor">#if SOUP_CHECK_VERSION (2, 99, 2)</span></div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">  252</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">rmnews_get_url_cb</a> (GObject *source, GAsyncResult *result, gpointer user_data)</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;{</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *name;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *header;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    GFile *output_file;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    gchar *filesha = NULL;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    gchar *filesha_after = NULL;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    GError *error = NULL;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        GInputStream *in = soup_session_send_finish (SOUP_SESSION (source), result, &amp;error);</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Failed to send request: %s&quot;</span>, error-&gt;message);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        g_error_free (error);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    }</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    GDateTime *gdt = g_date_time_new_now_utc();</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    gint64 unixts = g_date_time_to_unix(gdt);</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    g_date_time_unref(gdt);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>) {</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Calculating the SHA1 of the local file&quot;</span>);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        filesha = <a class="code" href="remmina__utils_8c.html#aff7d3597f23cae366973218cc01a2ae8">remmina_sha1_file</a>(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 is %s&quot;</span>, filesha);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <span class="keywordflow">if</span> (filesha == NULL || filesha[0] == 0) filesha = <span class="stringliteral">&quot;0\0&quot;</span>;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Opening %s output file for writing&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                GFile *output_file = g_file_new_for_commandline_arg (<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        GOutputStream *out = G_OUTPUT_STREAM (g_file_replace (output_file, NULL, NULL,</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;                            G_FILE_CREATE_REPLACE_DESTINATION, NULL, &amp;error));</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;                <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Failed to create \&quot;%s\&quot;: %s&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>, error-&gt;message);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;            g_free(filesha); filesha = NULL;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                        g_error_free (error);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                        g_object_unref (in);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;                        g_object_unref (output_file);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;            g_object_unref (out);</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;                        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;                }</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        <span class="comment">/* Start downloading to the file */</span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        <span class="comment">// g_output_stream_splice_async (G_OUTPUT_STREAM (out), in,</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        <span class="comment">//      G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        <span class="comment">//      G_PRIORITY_DEFAULT,</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <span class="comment">//      NULL,</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        <span class="comment">//      rmnews_on_stream_splice,</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        <span class="comment">// NULL);</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        g_output_stream_splice (G_OUTPUT_STREAM (out), in,</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;              G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;              NULL,</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;              &amp;error);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;Failed to download: %s&quot;</span>, error-&gt;message);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;            <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;            g_free(filesha); filesha = NULL;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;            g_error_free (error);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;                        g_object_unref (in);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;                        g_object_unref (output_file);</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;            g_object_unref (out);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        filesha_after = <a class="code" href="remmina__utils_8c.html#aff7d3597f23cae366973218cc01a2ae8">remmina_sha1_file</a>(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 after download is %s&quot;</span>, filesha_after);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="keywordflow">if</span> (g_strcmp0(filesha, filesha_after) != 0) {</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 differs, we show the news and reset the counter&quot;</span>);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = 0;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            GtkWindow *parent = <a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>();</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;            <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> &amp;&amp; <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;            <a class="code" href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">rmnews_show_news</a>(parent);</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        }</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="comment">/* Increase counter with number of successful GETs */</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> + 1;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        g_free(filesha); filesha = NULL;</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        g_object_unref (out);</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot open output file for writing, because output_file_path is NULL&quot;</span>);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        }</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;        g_object_unref (in);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;}</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="rmnews_8c.html#aa360ccd2808c76aab98c1fc4bc336c38">  357</a></span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">rmnews_get_url_cb</a>(SoupSession *<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>, SoupMessage *msg, gpointer data)</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;{</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *name;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *header;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    g_autoptr(SoupBuffer) sb;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    FILE *output_file = NULL;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    gchar *filesha = NULL;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    gchar *filesha_after = NULL;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    GDateTime *gdt;</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    gint64 unixts;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    gint status;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    status = soup_message_get_status(msg);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Status code %d&quot;</span>, status);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    name = soup_message_get_uri(msg)-&gt;path;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    gdt = g_date_time_new_now_utc();</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    unixts = g_date_time_to_unix(gdt);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    g_date_time_unref(gdt);</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <span class="keywordflow">if</span> (SOUP_STATUS_IS_REDIRECTION(status)) {</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        header = soup_message_headers_get_one(soup_message_get_response_headers(msg),</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                              <span class="stringliteral">&quot;Location&quot;</span>);</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Redirection detected&quot;</span>);</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;        <span class="keywordflow">if</span> (header) {</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;            SoupURI *uri;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;            <span class="keywordtype">char</span> *uri_string;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;  -&gt; %s\n&quot;</span>, header);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;            uri = soup_uri_new_with_base(soup_message_get_uri(msg), header);</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;            uri_string = soup_uri_to_string(uri, FALSE);</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;            <a class="code" href="rmnews_8c.html#a341ebc424e040f8f8a2e5e46b1920c7e">rmnews_get_url</a>(uri_string);</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;            g_free(uri_string);</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;            soup_uri_free(uri);</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        }</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    }</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">if</span> (!SOUP_STATUS_IS_SUCCESSFUL(status)) {</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Could not access %s: %s&quot;</span>, name , soup_status_get_phrase(status));</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Status 200&quot;</span>);</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>) {</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Calculating the SHA1 of the local file&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;            filesha = <a class="code" href="remmina__utils_8c.html#aff7d3597f23cae366973218cc01a2ae8">remmina_sha1_file</a>(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 is %s&quot;</span>, filesha);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;            <span class="keywordflow">if</span> (filesha == NULL || filesha[0] == 0) filesha = <span class="stringliteral">&quot;0\0&quot;</span>;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Opening %s output file for writing&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;            output_file = fopen(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>, <span class="stringliteral">&quot;w&quot;</span>);</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;            <span class="keywordflow">if</span> (!output_file) {</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                REMMINA_DEBUG(<span class="stringliteral">&quot;Error trying to create file %s.&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;                <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;                g_free(filesha); filesha = NULL;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;            }</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot open output file for writing, because output_file_path is NULL&quot;</span>);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;            REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;            <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        }</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        sb = soup_message_body_flatten(msg-&gt;response_body);</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        <span class="keywordflow">if</span> (output_file) {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;            fwrite(sb-&gt;data, 1, sb-&gt;length, output_file);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>) {</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;                fclose(output_file);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;                filesha_after = <a class="code" href="remmina__utils_8c.html#aff7d3597f23cae366973218cc01a2ae8">remmina_sha1_file</a>(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;            }</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;            REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 after download is %s&quot;</span>, filesha_after);</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;            <span class="keywordflow">if</span> (g_strcmp0(filesha, filesha_after) != 0) {</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;                REMMINA_DEBUG(<span class="stringliteral">&quot;SHA1 differs, we show the news and reset the counter&quot;</span>);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;                <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = 0;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;                REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                REMMINA_DEBUG (<span class="stringliteral">&quot;Saving preferences&quot;</span>);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                GtkWindow *parent = <a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>();</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> &amp;&amp; <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE)</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;                    <a class="code" href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">rmnews_show_news</a>(parent);</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;                <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;            }</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            <span class="comment">/* Increase counter with number of successful GETs */</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> + 1;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;            <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;            g_free(filesha); filesha = NULL;</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        }</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    }</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    g_object_unref(msg);</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;}</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a59416d6e8999802e8b145b0338331081">  471</a></span>&#160;gchar *<a class="code" href="rmnews_8c.html#a59416d6e8999802e8b145b0338331081">rmnews_get_uid</a>()</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;{</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    GChecksum *chs;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keyword">const</span> gchar *uname, *hname;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keyword">const</span> gchar *uid_suffix;</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    gchar *uid_prefix;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    gchar *uid;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="comment">/* This code is very similar to remmina_stats_get_uid() */</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a> == NULL || <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a>[0] == 0) {</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        <span class="comment">/* Generate a new UUID_PREFIX for news on this installation */</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        uid_prefix = <a class="code" href="remmina__utils_8c.html#a483959ec642cece17e1b79506e71b00e">remmina_gen_random_uuid</a>();</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a>)</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;            g_free(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a>);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a> = uid_prefix;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    }</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    uname = g_get_user_name();</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    hname = g_get_host_name();</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    chs = g_checksum_new(G_CHECKSUM_SHA256);</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    g_checksum_update(chs, (<span class="keyword">const</span> guchar *)uname, strlen(uname));</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    g_checksum_update(chs, (<span class="keyword">const</span> guchar *)hname, strlen(hname));</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    uid_suffix = g_checksum_get_string(chs);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    uid = g_strdup_printf(<span class="stringliteral">&quot;02-%s-%.10s&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">periodic_rmnews_uuid_prefix</a>, uid_suffix);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    g_checksum_free(chs);</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="keywordflow">return</span> uid;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;}</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="rmnews_8h.html#a341ebc424e040f8f8a2e5e46b1920c7e">  504</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a341ebc424e040f8f8a2e5e46b1920c7e">rmnews_get_url</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *url)</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;{</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    SoupMessage *msg;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    msg = soup_message_new(<span class="stringliteral">&quot;GET&quot;</span>, url);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    soup_message_set_flags(msg, SOUP_MESSAGE_NO_REDIRECT);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Fetching %s&quot;</span>, url);</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#if SOUP_CHECK_VERSION (2, 99, 2)</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="comment">// Use soup_session_send_async or soup_session_send_and_read_async</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    soup_session_send_async ( <a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>, msg, G_PRIORITY_DEFAULT,</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;            NULL,           <span class="comment">// cancellable</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;            <a class="code" href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">rmnews_get_url_cb</a>,  <span class="comment">// callback</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;            NULL);          <span class="comment">// user_data</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    g_object_ref(msg);</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    soup_session_queue_message(<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>, msg, <a class="code" href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">rmnews_get_url_cb</a>, NULL);</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;}</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a26cb497eeb30a956dcdc5790b393a301">  527</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a26cb497eeb30a956dcdc5790b393a301">rmnews_get_news</a>()</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;{</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    SoupLogger *logger = NULL;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <span class="keywordtype">int</span> fd;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    gchar *uid;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    gchar mage[20], gcount[20];</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keyword">struct </span>stat sb;</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">&quot;/&quot;</span>, g_get_user_cache_dir(), REMMINA_APP_ID, NULL);</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    gint d = g_mkdir_with_parents(cachedir, 0750);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="keywordflow">if</span> (d &lt; 0)</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;        <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a> = RMNEWS_OUTPUT;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;        <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a> = g_build_path(<span class="stringliteral">&quot;/&quot;</span>, cachedir, <span class="stringliteral">&quot;latest_news.md&quot;</span>, NULL);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Output file set to %s&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> == 0 &amp;&amp;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> == 0) {</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;        g_file_set_contents(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>, <span class="stringliteral">&quot;&quot;</span>, 0, NULL);</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;        <span class="comment">/* Just a symolic date */</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = 191469343000;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;periodic_rmnews_last_get set to %ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a>);</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        REMMINA_DEBUG (<span class="stringliteral">&quot;Preferences NOT saved&quot;</span>);</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    }</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    fd = g_open(<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Returned %d while creating %s&quot;</span>, fd, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="comment">/* If we cannot create the remmina_news file, we avoid connections */</span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <span class="keywordflow">if</span> (fd &lt; 0) {</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Cannot store the remmina news file&quot;</span>);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    }</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    g_close(fd, NULL);</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Output file %s created successfully&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>) {</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Output file set to %s&quot;</span>, <a class="code" href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a>);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    }</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Gathering news&quot;</span>);</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="comment">/* Build the session with all of the features we need */</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a> = soup_session_new_with_options (<span class="stringliteral">&quot;user-agent&quot;</span>, <span class="stringliteral">&quot;get &quot;</span>,</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;                                                 <span class="stringliteral">&quot;accept-language-auto&quot;</span>, TRUE,</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;                                                 <span class="stringliteral">&quot;timeout&quot;</span>, 15,</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;                                                 NULL);</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;<span class="preprocessor">#if SOUP_CHECK_VERSION (2, 99, 2)</span></div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    soup_session_add_feature_by_type (<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>, SOUP_TYPE_COOKIE_JAR);</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    logger = soup_logger_new(SOUP_LOGGER_LOG_NONE);</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a> = g_object_new(SOUP_TYPE_SESSION,</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;                   SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;                   SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;                   SOUP_SESSION_USER_AGENT, <span class="stringliteral">&quot;get &quot;</span>,</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;                   SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;                   NULL);</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    logger = soup_logger_new(SOUP_LOGGER_LOG_NONE, -1);</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="comment">/* TODO: Catch log level and set SOUP_LOGGER_LOG_MINIMAL or more */</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    soup_session_add_feature(<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>, SOUP_SESSION_FEATURE(logger));</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    g_object_unref(logger);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    gchar *lang = <a class="code" href="remmina__utils_8c.html#a0f10e190a6dd212fcb0cf36ce81c8324">remmina_utils_get_lang</a>();</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    REMMINA_DEBUG(<span class="stringliteral">&quot;Language %s&quot;</span>, lang);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    uid = <a class="code" href="rmnews_8c.html#a59416d6e8999802e8b145b0338331081">rmnews_get_uid</a>();</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    <span class="keywordflow">if</span> (stat(<span class="stringliteral">&quot;/etc/machine-id&quot;</span>, &amp;sb) == 0)</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;        sprintf(mage, <span class="stringliteral">&quot;%ld&quot;</span>, (<span class="keywordtype">long</span>)(time(NULL) - sb.st_mtim.tv_sec));</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        strcpy(mage, <span class="stringliteral">&quot;0&quot;</span>);</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    sprintf(gcount, <span class="stringliteral">&quot;%ld&quot;</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a>);</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <a class="code" href="rmnews_8c.html#a341ebc424e040f8f8a2e5e46b1920c7e">rmnews_get_url</a>(g_strconcat(REMMINA_URL,</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;                   <span class="stringliteral">&quot;news/remmina_news.php?lang=&quot;</span>,</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;                   lang,</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;                   <span class="stringliteral">&quot;&amp;ver=&quot;</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;                   VERSION,</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;                   <span class="stringliteral">&quot;&amp;uid=&quot;</span>,</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;                   uid,</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;                   <span class="stringliteral">&quot;&amp;sa=0&quot;</span>,</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;                   <span class="stringliteral">&quot;&amp;mage=&quot;</span>,</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;                   mage,</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;                   <span class="stringliteral">&quot;&amp;gcount=&quot;</span>,</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;                   gcount,</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;                   NULL));</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    g_free(uid);</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    g_object_unref(<a class="code" href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a>);</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="rmnews_8c.html#a88b2d9ce9e7bc64373e2eb7f904a0814">  624</a></span>&#160;<span class="keyword">static</span> gboolean <a class="code" href="rmnews_8c.html#a88b2d9ce9e7bc64373e2eb7f904a0814">rmnews_periodic_check</a>(gpointer user_data)</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;{</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    GDateTime *gdt;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    gint64 unixts;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    glong next = 0;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    gdt = g_date_time_new_now_utc();</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    unixts = g_date_time_to_unix(gdt);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    g_date_time_unref(gdt);</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="comment">/* if remmina_pref is not writable ... */</span></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a0dd25f5b3a055b936a5fa327bc71f19c">remmina_pref_is_rw</a>() == FALSE &amp;&amp; <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> == 0) {</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;        <span class="comment">/* We randomly set periodic_rmnews_last_get to a day between today</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="comment">         * and 7 days ago */</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        gint randidx = randombytes_uniform(8);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        REMMINA_DEBUG(<span class="stringliteral">&quot;Setting a random periodic_rmnews_last_get to %d - %d&quot;</span>, unixts, <a class="code" href="rmnews_8c.html#af4777302c760225b833206545e9f437d">eweekdays</a>[randidx]);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = unixts - <a class="code" href="rmnews_8c.html#af4777302c760225b833206545e9f437d">eweekdays</a>[randidx];</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    }</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    <span class="comment">//REMMINA_DEBUG(&quot;periodic_rmnews_last_get is %ld&quot;, remmina_pref.periodic_rmnews_last_get);</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> == 0 &amp;&amp; <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> &lt; 1) {</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> =</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;            (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> &gt; 1514764800 ? <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> : 0);</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    }</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    next = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> + RMNEWS_INTERVAL_SEC;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <span class="keywordflow">if</span> (unixts &gt; next || (unixts &lt; remmina_pref.periodic_rmnews_last_get &amp;&amp; unixts &gt; 1514764800)) {</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <span class="comment">//REMMINA_DEBUG(&quot;remmina_pref.periodic_news_permitted is %d&quot;, remmina_pref.periodic_news_permitted);</span></div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">periodic_news_permitted</a> == 1) {</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;            <a class="code" href="rmnews_8c.html#a26cb497eeb30a956dcdc5790b393a301">rmnews_get_news</a>();</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> == 0) {</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;            <a class="code" href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">rmnews_show_news</a>(<a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>());</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;            <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> = 1;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;            <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        }</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    }</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    <span class="keywordflow">return</span> G_SOURCE_CONTINUE;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;}</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno"><a class="line" href="rmnews_8h.html#a8433da15acb3138804b4816189e8fc3a">  664</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="rmnews_8c.html#a8433da15acb3138804b4816189e8fc3a">rmnews_schedule</a>()</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;{</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    TRACE_CALL(__func__);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    <a class="code" href="remmina__scheduler_8c.html#a8ee49eb86004b98070d1514c2612251a">remmina_scheduler_setup</a>(<a class="code" href="rmnews_8c.html#a88b2d9ce9e7bc64373e2eb7f904a0814">rmnews_periodic_check</a>,</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                NULL,</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                RMNEWS_CHECK_1ST_MS,</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                RMNEWS_CHECK_INTERVAL_MS);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;}</div><div class="ttc" id="remmina__sodium_8h_html"><div class="ttname"><a href="remmina__sodium_8h.html">remmina_sodium.h</a></div></div>
<div class="ttc" id="rmnews_8c_html_a0b8a063b164dbf0798982daa9399a793"><div class="ttname"><a href="rmnews_8c.html#a0b8a063b164dbf0798982daa9399a793">rmnews_news_switch_state_set_cb</a></div><div class="ttdeci">void rmnews_news_switch_state_set_cb()</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00122">rmnews.c:122</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_aa44d2c89a170a509ebb082082efac813"><div class="ttname"><a href="struct___remmina_news_dialog.html#aa44d2c89a170a509ebb082082efac813">_RemminaNewsDialog::retval</a></div><div class="ttdeci">gint retval</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00046">rmnews.h:46</a></div></div>
<div class="ttc" id="remmina__main_8c_html_a7740488de65c0e642895cc9dfba07b6e"><div class="ttname"><a href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a></div><div class="ttdeci">GtkWindow * remmina_main_get_window()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01645">remmina_main.c:1645</a></div></div>
<div class="ttc" id="rmnews_8c_html_af58ee02676e8c920a6e9b4676bb86abe"><div class="ttname"><a href="rmnews_8c.html#af58ee02676e8c920a6e9b4676bb86abe">rmnews_show_news</a></div><div class="ttdeci">void rmnews_show_news(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00198">rmnews.c:198</a></div></div>
<div class="ttc" id="rmnews_8c_html_aaa3ec81813c3b38be1f75885e6005a00"><div class="ttname"><a href="rmnews_8c.html#aaa3ec81813c3b38be1f75885e6005a00">rmnews_close_clicked</a></div><div class="ttdeci">static void rmnews_close_clicked(GtkButton *btn, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00177">rmnews.c:177</a></div></div>
<div class="ttc" id="remmina_8h_html"><div class="ttname"><a href="remmina_8h.html">remmina.h</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a041c5c6f7776a3cdfd1fbcc700dfc749"><div class="ttname"><a href="struct___remmina_news_dialog.html#a041c5c6f7776a3cdfd1fbcc700dfc749">_RemminaNewsDialog::rmnews_defaultcl_label</a></div><div class="ttdeci">GtkLabel * rmnews_defaultcl_label</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00042">rmnews.h:42</a></div></div>
<div class="ttc" id="remmina__trace__calls_8h_html"><div class="ttname"><a href="remmina__trace__calls_8h.html">remmina_trace_calls.h</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a24dd17da12072e324ce165a9873d59ad"><div class="ttname"><a href="struct___remmina_news_dialog.html#a24dd17da12072e324ce165a9873d59ad">_RemminaNewsDialog::rmnews_button_close</a></div><div class="ttdeci">GtkButton * rmnews_button_close</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00041">rmnews.h:41</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a652393d5775f6abb7a3b97e1d250797f"><div class="ttname"><a href="struct___remmina_news_dialog.html#a652393d5775f6abb7a3b97e1d250797f">_RemminaNewsDialog::dialog</a></div><div class="ttdeci">GtkDialog * dialog</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00037">rmnews.h:37</a></div></div>
<div class="ttc" id="rmnews_8c_html_a8ebbcba2c07af0938b3c29e316747d12"><div class="ttname"><a href="rmnews_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a></div><div class="ttdeci">static const gchar * supported_mime_types[]</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00086">rmnews.c:86</a></div></div>
<div class="ttc" id="struct___remmina_pref_html_ad11e485a8fdb8af1fded85f68f4ba7c4"><div class="ttname"><a href="struct___remmina_pref.html#ad11e485a8fdb8af1fded85f68f4ba7c4">_RemminaPref::periodic_news_permitted</a></div><div class="ttdeci">gboolean periodic_news_permitted</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00239">remmina_pref.h:239</a></div></div>
<div class="ttc" id="rmnews_8c_html_adf38ed099d3ac477aea7e3bbd6d95bd4"><div class="ttname"><a href="rmnews_8c.html#adf38ed099d3ac477aea7e3bbd6d95bd4">rmnews_dialog_deleted</a></div><div class="ttdeci">static gboolean rmnews_dialog_deleted(GtkButton *btn, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00187">rmnews.c:187</a></div></div>
<div class="ttc" id="rmnews_8c_html_a9a0c1177e67a08c991e5344196ebac01"><div class="ttname"><a href="rmnews_8c.html#a9a0c1177e67a08c991e5344196ebac01">rmnews_get_url_cb</a></div><div class="ttdeci">static void rmnews_get_url_cb(GObject *source, GAsyncResult *result, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00252">rmnews.c:252</a></div></div>
<div class="ttc" id="remmina__main_8h_html"><div class="ttname"><a href="remmina__main_8h.html">remmina_main.h</a></div></div>
<div class="ttc" id="remmina__scheduler_8c_html_a8ee49eb86004b98070d1514c2612251a"><div class="ttname"><a href="remmina__scheduler_8c.html#a8ee49eb86004b98070d1514c2612251a">remmina_scheduler_setup</a></div><div class="ttdeci">void * remmina_scheduler_setup(GSourceFunc cb, gpointer cb_data, guint first_interval, guint interval)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__scheduler_8c_source.html#l00064">remmina_scheduler.c:64</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a94584de47018f068c242e5f527e3b84f"><div class="ttname"><a href="struct___remmina_news_dialog.html#a94584de47018f068c242e5f527e3b84f">_RemminaNewsDialog::rmnews_text_view</a></div><div class="ttdeci">GtkTextView * rmnews_text_view</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00039">rmnews.h:39</a></div></div>
<div class="ttc" id="remmina__utils_8h_html"><div class="ttname"><a href="remmina__utils_8h.html">remmina_utils.h</a></div><div class="ttdoc">General utility functions, non-GTK related. </div></div>
<div class="ttc" id="remmina__public_8h_html"><div class="ttname"><a href="remmina__public_8h.html">remmina_public.h</a></div></div>
<div class="ttc" id="remmina__utils_8c_html_a483959ec642cece17e1b79506e71b00e"><div class="ttname"><a href="remmina__utils_8c.html#a483959ec642cece17e1b79506e71b00e">remmina_gen_random_uuid</a></div><div class="ttdeci">gchar * remmina_gen_random_uuid()</div><div class="ttdoc">Generate a random sting of chars to be used as part of UID for news or stats. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__utils_8c_source.html#l00505">remmina_utils.c:505</a></div></div>
<div class="ttc" id="rmnews_8c_html_a175c6dbec04bf34e3f2a5bd791d2d336"><div class="ttname"><a href="rmnews_8c.html#a175c6dbec04bf34e3f2a5bd791d2d336">session</a></div><div class="ttdeci">static SoupSession * session</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00076">rmnews.c:76</a></div></div>
<div class="ttc" id="remmina__log_8h_html"><div class="ttname"><a href="remmina__log_8h.html">remmina_log.h</a></div></div>
<div class="ttc" id="remmina__utils_8c_html_a0f10e190a6dd212fcb0cf36ce81c8324"><div class="ttname"><a href="remmina__utils_8c.html#a0f10e190a6dd212fcb0cf36ce81c8324">remmina_utils_get_lang</a></div><div class="ttdeci">gchar * remmina_utils_get_lang()</div><div class="ttdoc">Return the current language defined in the LC_ALL. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__utils_8c_source.html#l00287">remmina_utils.c:287</a></div></div>
<div class="ttc" id="rmnews_8c_html_a78c63694cb6197f185242acac0ea1575"><div class="ttname"><a href="rmnews_8c.html#a78c63694cb6197f185242acac0ea1575">rmnews_on_stream_splice</a></div><div class="ttdeci">static void rmnews_on_stream_splice(GObject *source, GAsyncResult *result, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00107">rmnews.c:107</a></div></div>
<div class="ttc" id="remmina__scheduler_8h_html"><div class="ttname"><a href="remmina__scheduler_8h.html">remmina_scheduler.h</a></div></div>
<div class="ttc" id="struct___remmina_pref_html_a87044f758cc0e9c975b02c3f94147e06"><div class="ttname"><a href="struct___remmina_pref.html#a87044f758cc0e9c975b02c3f94147e06">_RemminaPref::periodic_rmnews_uuid_prefix</a></div><div class="ttdeci">gchar * periodic_rmnews_uuid_prefix</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00242">remmina_pref.h:242</a></div></div>
<div class="ttc" id="remmina__utils_8c_html_aff7d3597f23cae366973218cc01a2ae8"><div class="ttname"><a href="remmina__utils_8c.html#aff7d3597f23cae366973218cc01a2ae8">remmina_sha1_file</a></div><div class="ttdeci">gchar * remmina_sha1_file(const gchar *filename)</div><div class="ttdoc">Create a hexadecimal string version of the SHA-1 digest of the contents of the named file...</div><div class="ttdef"><b>Definition:</b> <a href="remmina__utils_8c_source.html#l00460">remmina_utils.c:460</a></div></div>
<div class="ttc" id="rmnews_8c_html_af4777302c760225b833206545e9f437d"><div class="ttname"><a href="rmnews_8c.html#af4777302c760225b833206545e9f437d">eweekdays</a></div><div class="ttdeci">gint eweekdays[7]</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00095">rmnews.c:95</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a14ee9c2823a4519ed84705fd0fe49ec8"><div class="ttname"><a href="struct___remmina_news_dialog.html#a14ee9c2823a4519ed84705fd0fe49ec8">_RemminaNewsDialog::rmnews_news_switch</a></div><div class="ttdeci">GtkSwitch * rmnews_news_switch</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00044">rmnews.h:44</a></div></div>
<div class="ttc" id="rmnews_8h_html"><div class="ttname"><a href="rmnews_8h.html">rmnews.h</a></div></div>
<div class="ttc" id="rmnews_8c_html_a565782499953048b5e51934123195e29"><div class="ttname"><a href="rmnews_8c.html#a565782499953048b5e51934123195e29">output_file_path</a></div><div class="ttdeci">static const gchar * output_file_path</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00083">rmnews.c:83</a></div></div>
<div class="ttc" id="rmnews_8c_html_ae1bb737d0381441eebbf3652b3ef416d"><div class="ttname"><a href="rmnews_8c.html#ae1bb737d0381441eebbf3652b3ef416d">rmnews_news_dialog</a></div><div class="ttdeci">static RemminaNewsDialog * rmnews_news_dialog</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00073">rmnews.c:73</a></div></div>
<div class="ttc" id="struct___remmina_pref_html_a1b13dc96ccf8ebad045f02c58eb1d005"><div class="ttname"><a href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">_RemminaPref::periodic_rmnews_get_count</a></div><div class="ttdeci">glong periodic_rmnews_get_count</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00241">remmina_pref.h:241</a></div></div>
<div class="ttc" id="remmina__public_8c_html_a4573e086e1ff8507eb9447b25bf11b92"><div class="ttname"><a href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a></div><div class="ttdeci">GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00572">remmina_public.c:572</a></div></div>
<div class="ttc" id="remmina__file__manager_8c_html_ace1098aad45256ac0b0155cb042472e9"><div class="ttname"><a href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a></div><div class="ttdeci">static gchar * cachedir</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00052">remmina_file_manager.c:52</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_ae4b71b4e789e65063db67f51ce4feb26"><div class="ttname"><a href="struct___remmina_news_dialog.html#ae4b71b4e789e65063db67f51ce4feb26">_RemminaNewsDialog::rmnews_label</a></div><div class="ttdeci">GtkLabel * rmnews_label</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00040">rmnews.h:40</a></div></div>
<div class="ttc" id="rmnews_8c_html_a88b2d9ce9e7bc64373e2eb7f904a0814"><div class="ttname"><a href="rmnews_8c.html#a88b2d9ce9e7bc64373e2eb7f904a0814">rmnews_periodic_check</a></div><div class="ttdeci">static gboolean rmnews_periodic_check(gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00624">rmnews.c:624</a></div></div>
<div class="ttc" id="rmnews_8c_html_a8433da15acb3138804b4816189e8fc3a"><div class="ttname"><a href="rmnews_8c.html#a8433da15acb3138804b4816189e8fc3a">rmnews_schedule</a></div><div class="ttdeci">void rmnews_schedule()</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00664">rmnews.c:664</a></div></div>
<div class="ttc" id="remmina_8c_html_a0e2a887037f1ac58aa26fae55187601a"><div class="ttname"><a href="remmina_8c.html#a0e2a887037f1ac58aa26fae55187601a">disablenews</a></div><div class="ttdeci">gboolean disablenews</div><div class="ttdef"><b>Definition:</b> <a href="remmina_8c_source.html#l00087">remmina.c:87</a></div></div>
<div class="ttc" id="rcw_8c_html_a29701ae152ba15f6d8921f395174d2df"><div class="ttname"><a href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a></div><div class="ttdeci">RemminaPref remmina_pref</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00079">rcw.c:79</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a04d61af97919ea321ca384711edd2015"><div class="ttname"><a href="struct___remmina_news_dialog.html#a04d61af97919ea321ca384711edd2015">_RemminaNewsDialog::builder</a></div><div class="ttdeci">GtkBuilder * builder</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00036">rmnews.h:36</a></div></div>
<div class="ttc" id="remmina__pref_8h_html"><div class="ttname"><a href="remmina__pref_8h.html">remmina_pref.h</a></div></div>
<div class="ttc" id="remmina__pref_8c_html_ae17aaf37449083a4322b6748c8f3a39f"><div class="ttname"><a href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a></div><div class="ttdeci">gboolean remmina_pref_save(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l00799">remmina_pref.c:799</a></div></div>
<div class="ttc" id="rmnews_8c_html_a11d7277ba911522ac40656774cbe41b9"><div class="ttname"><a href="rmnews_8c.html#a11d7277ba911522ac40656774cbe41b9">rmnews_get_file_contents</a></div><div class="ttdeci">static gchar * rmnews_get_file_contents(gchar *path)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00161">rmnews.c:161</a></div></div>
<div class="ttc" id="rmnews_8c_html_a341ebc424e040f8f8a2e5e46b1920c7e"><div class="ttname"><a href="rmnews_8c.html#a341ebc424e040f8f8a2e5e46b1920c7e">rmnews_get_url</a></div><div class="ttdeci">void rmnews_get_url(const char *url)</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00504">rmnews.c:504</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html"><div class="ttname"><a href="struct___remmina_news_dialog.html">_RemminaNewsDialog</a></div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00035">rmnews.h:35</a></div></div>
<div class="ttc" id="rmnews_8c_html_a59416d6e8999802e8b145b0338331081"><div class="ttname"><a href="rmnews_8c.html#a59416d6e8999802e8b145b0338331081">rmnews_get_uid</a></div><div class="ttdeci">gchar * rmnews_get_uid()</div><div class="ttdoc">Try to get a unique system+user ID to identify this remmina user and avoid some duplicated task...</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00471">rmnews.c:471</a></div></div>
<div class="ttc" id="remmina_8c_html_ab4a9a67c5372ff07b71d0558679ab7ae"><div class="ttname"><a href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a></div><div class="ttdeci">gboolean kioskmode</div><div class="ttdef"><b>Definition:</b> <a href="remmina_8c_source.html#l00086">remmina.c:86</a></div></div>
<div class="ttc" id="rmnews_8c_html_a7825b2c9facea97439f5780d83e86798"><div class="ttname"><a href="rmnews_8c.html#a7825b2c9facea97439f5780d83e86798">rmnews_defaultcl_on_click</a></div><div class="ttdeci">void rmnews_defaultcl_on_click()</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00135">rmnews.c:135</a></div></div>
<div class="ttc" id="remmina__pref_8c_html_a0dd25f5b3a055b936a5fa327bc71f19c"><div class="ttname"><a href="remmina__pref_8c.html#a0dd25f5b3a055b936a5fa327bc71f19c">remmina_pref_is_rw</a></div><div class="ttdeci">gboolean remmina_pref_is_rw(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l00789">remmina_pref.c:789</a></div></div>
<div class="ttc" id="struct___remmina_pref_html_a58fce08bda1efaeefd8b65f6463f67c6"><div class="ttname"><a href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">_RemminaPref::periodic_rmnews_last_get</a></div><div class="ttdeci">glong periodic_rmnews_last_get</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00240">remmina_pref.h:240</a></div></div>
<div class="ttc" id="struct___remmina_news_dialog_html_a5f1f924669db7285fac6087e08d6ce19"><div class="ttname"><a href="struct___remmina_news_dialog.html#a5f1f924669db7285fac6087e08d6ce19">_RemminaNewsDialog::rmnews_defaultcl_button</a></div><div class="ttdeci">GtkButton * rmnews_defaultcl_button</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8h_source.html#l00043">rmnews.h:43</a></div></div>
<div class="ttc" id="remmina__sysinfo_8h_html"><div class="ttname"><a href="remmina__sysinfo_8h.html">remmina_sysinfo.h</a></div></div>
<div class="ttc" id="rmnews_8c_html_a26cb497eeb30a956dcdc5790b393a301"><div class="ttname"><a href="rmnews_8c.html#a26cb497eeb30a956dcdc5790b393a301">rmnews_get_news</a></div><div class="ttdeci">void rmnews_get_news()</div><div class="ttdef"><b>Definition:</b> <a href="rmnews_8c_source.html#l00527">rmnews.c:527</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="rmnews_8c.html">rmnews.c</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>