1
0
Fork 0
mirror of https://github.com/deltachat/deltachat-core.git synced 2025-10-06 03:50:08 +02:00
deltachat-core/docs/user/html/mrmsg_8c_source.html
2017-11-14 02:47:49 +01:00

138 lines
85 KiB
HTML

<!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.11"/>
<title>Delta Chat Core C-Library: /home/bpetersen/projects/deltachat-core/src/mrmsg.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="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>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="user.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="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Delta Chat Core C-Library
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">mrmsg.c</div> </div>
</div><!--header-->
<div class="contents">
<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"> *</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Delta Chat Core</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright (C) 2017 Björn Petersen</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Contact: r10s@b44t.com, http://b44t.com</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * This program is free software: you can redistribute it and/or modify it under</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * the terms of the GNU General Public License as published by the Free Software</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Foundation, either version 3 of the License, or (at your option) any later</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * This program is distributed in the hope that it will be useful, but WITHOUT</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License along with</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * this program. If not, see http://www.gnu.org/licenses/ .</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"> ******************************************************************************/</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;mrmailbox_internal.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;mrimap.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;mrsmtp.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;mrjob.h&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;mrpgp.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &quot;mrmimefactory.h&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a80f470eb34af414ff28e7d3b3c715b48"> 41</a></span>&#160;<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* <a class="code" href="structmrmsg__t.html#a80f470eb34af414ff28e7d3b3c715b48">mrmsg_new</a>()</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="structmrmsg__t.html">mrmsg_t</a>* ths = NULL;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span>( (ths=calloc(1, <span class="keyword">sizeof</span>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>)))==NULL ) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; exit(15); <span class="comment">/* cannot allocate little memory, unrecoverable error */</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a> = MR_MSG_UNDEFINED;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#aca59d28054d3e15b4fe6ca74073d91f4">m_state</a> = MR_STATE_UNDEFINED;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a> = <a class="code" href="structmrparam__t.html#a6824cd599508690ca1d383b9f229f4e3">mrparam_new</a>();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> ths;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#aa33212e41efff643aa7290753f3d9b02"> 66</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structmrmsg__t.html#aa33212e41efff643aa7290753f3d9b02">mrmsg_unref</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388">mrmsg_empty</a>(msg);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="structmrparam__t.html#ac89d8855a852f5704c3cc596e2a3d208">mrparam_unref</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; free(msg);</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"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388"> 87</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388">mrmsg_empty</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; free(msg-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; msg-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a> = NULL;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; free(msg-&gt;m_rfc724_mid);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; msg-&gt;m_rfc724_mid = NULL;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; free(msg-&gt;m_server_folder);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; msg-&gt;m_server_folder = NULL;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; mrparam_set_packed(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, NULL);</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; msg-&gt;m_mailbox = NULL;</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;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#ae940aa79a261e1a427b12baefbee2d23"> 125</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structmrmsg__t.html#ae940aa79a261e1a427b12baefbee2d23">mrmsg_set_text</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg, <span class="keyword">const</span> <span class="keywordtype">char</span>* text)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span>( msg==NULL || text==NULL ) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; free(msg-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; msg-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a> = safe_strdup(text);</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"> 135</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keywordtype">void</span> mrmsg_guess_msgtype_from_suffix(<span class="keyword">const</span> <span class="keywordtype">char</span>* pathNfilename, <span class="keywordtype">int</span>* ret_msgtype, <span class="keywordtype">char</span>** ret_mime)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span>( pathNfilename == NULL || ret_msgtype == NULL || ret_mime == NULL) {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; *ret_msgtype = MR_MSG_UNDEFINED;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; *ret_mime = NULL;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordtype">char</span>* s = mr_get_filesuffix_lc(pathNfilename);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">if</span>( s == NULL ) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</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; <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">&quot;mp3&quot;</span>)==0 ) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; *ret_msgtype = MR_MSG_AUDIO;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; *ret_mime = safe_strdup(<span class="stringliteral">&quot;audio/mpeg&quot;</span>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">&quot;mp4&quot;</span>)==0 ) {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; *ret_msgtype = MR_MSG_VIDEO;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; *ret_mime = safe_strdup(<span class="stringliteral">&quot;video/mp4&quot;</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">&quot;jpg&quot;</span>)==0 || strcmp(s, <span class="stringliteral">&quot;jpeg&quot;</span>)==0 ) {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; *ret_msgtype = MR_MSG_IMAGE;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; *ret_mime = safe_strdup(<span class="stringliteral">&quot;image/jpeg&quot;</span>);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">&quot;png&quot;</span>)==0 ) {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; *ret_msgtype = MR_MSG_IMAGE;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; *ret_mime = safe_strdup(<span class="stringliteral">&quot;image/png&quot;</span>);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">&quot;gif&quot;</span>)==0 ) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; *ret_msgtype = MR_MSG_GIF;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; *ret_mime = safe_strdup(<span class="stringliteral">&quot;image/gif&quot;</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;cleanup:</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; free(s);</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"> 187</span>&#160;</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;<span class="keywordtype">int</span> mrmsg_set_from_stmt__(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* ths, sqlite3_stmt* row, <span class="keywordtype">int</span> row_offset) <span class="comment">/* field order must be MR_MSG_FIELDS */</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;{</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388">mrmsg_empty</a>(ths);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a793898c8da24c717dc2bb1d91faac801">m_id</a> = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; ths-&gt;m_rfc724_mid = safe_strdup((<span class="keywordtype">char</span>*)sqlite3_column_text (row, row_offset++));</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; ths-&gt;m_server_folder= safe_strdup((<span class="keywordtype">char</span>*)sqlite3_column_text (row, row_offset++));</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; ths-&gt;m_server_uid = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#ac19bdc40e452c8997dd58474a7be6880">m_chat_id</a> = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">m_from_id</a> = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#ad549fc02587ba284fda2bbecd162b16a">m_to_id</a> = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#aba09cb77cdabd1e2b2e6262d25388801">m_timestamp</a> = (time_t)sqlite3_column_int64(row, row_offset++);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a> = sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#aca59d28054d3e15b4fe6ca74073d91f4">m_state</a> = sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#aa4fbc319d61c755ce929e658ad75b21e">m_is_msgrmsg</a> = sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a> = safe_strdup((<span class="keywordtype">char</span>*)sqlite3_column_text (row, row_offset++));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; mrparam_set_packed( ths-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, (<span class="keywordtype">char</span>*)sqlite3_column_text (row, row_offset++));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; ths-&gt;<a class="code" href="structmrmsg__t.html#a0570bbfc3add48dafb0ae70390b47adb">m_starred</a> = sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>( ths-&gt;<a class="code" href="structmrmsg__t.html#ac19bdc40e452c8997dd58474a7be6880">m_chat_id</a> == MR_CHAT_ID_DEADDROP ) {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; mr_truncate_n_unwrap_str(ths-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>, 256, 0); <span class="comment">/* 256 characters is about a half screen on a 5&quot; smartphone display */</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="keywordtype">int</span> mrmsg_load_from_db__(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* ths, <a class="code" href="structmrmailbox__t.html">mrmailbox_t</a>* mailbox, uint32_t <span class="keywordtype">id</span>)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; sqlite3_stmt* stmt;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span>( ths==NULL || mailbox==NULL || mailbox-&gt;m_sql==NULL ) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> 0;</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;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; stmt = mrsqlite3_predefine__(mailbox-&gt;m_sql, SELECT_ircftttstpb_FROM_msg_WHERE_i,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="stringliteral">&quot;SELECT &quot;</span> MR_MSG_FIELDS <span class="stringliteral">&quot; FROM msgs m WHERE m.id=?;&quot;</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; sqlite3_bind_int(stmt, 1, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span>( sqlite3_step(stmt) != SQLITE_ROW ) {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span>( !mrmsg_set_from_stmt__(ths, stmt, 0) ) { <span class="comment">/* also calls mrmsg_empty() */</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; ths-&gt;m_mailbox = mailbox;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> 1;</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;</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#afc3d94448ada0ad7142cf168cab1462e"> 263</a></span>&#160;<a class="code" href="structmrpoortext__t.html">mrpoortext_t</a>* <a class="code" href="structmrmsg__t.html#afc3d94448ada0ad7142cf168cab1462e">mrmsg_get_summary</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg, <a class="code" href="structmrchat__t.html">mrchat_t</a>* chat)</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;{</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="structmrpoortext__t.html">mrpoortext_t</a>* ret = mrpoortext_new();</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="structmrcontact__t.html">mrcontact_t</a>* contact = NULL;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="structmrchat__t.html">mrchat_t</a>* chat_to_delete = NULL;</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; <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>( chat == NULL ) {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">if</span>( (chat=<a class="code" href="structmrmailbox__t.html#ad106b9c23b3a559b524a37bb5504e096">mrmailbox_get_chat</a>(msg-&gt;m_mailbox, msg-&gt;<a class="code" href="structmrmsg__t.html#ac19bdc40e452c8997dd58474a7be6880">m_chat_id</a>)) == NULL ) {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; chat_to_delete = chat;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span>( msg-&gt;<a class="code" href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">m_from_id</a> != MR_CONTACT_ID_SELF &amp;&amp; chat-&gt;m_type == MR_CHAT_TYPE_GROUP ) {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; contact = <a class="code" href="structmrmailbox__t.html#a057660d94350ff98eca72785c6e88962">mrmailbox_get_contact</a>(chat-&gt;<a class="code" href="structmrchat__t.html#abf3e1a34f567e168bc0597f9a544a50d">m_mailbox</a>, msg-&gt;<a class="code" href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">m_from_id</a>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; mrpoortext_fill(ret, msg, chat, contact);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;cleanup:</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="structmrcontact__t.html#acdff2696f48b1d5cdbc67a8466322b25">mrcontact_unref</a>(contact);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="structmrchat__t.html#a3b1befb4542c1bad915f2175c7c2a2b9">mrchat_unref</a>(chat_to_delete);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;}</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a9980da92916e42081f2f39ccc72c1696"> 302</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="structmrmsg__t.html#a9980da92916e42081f2f39ccc72c1696">mrmsg_show_padlock</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">/* a padlock guarantees that the message is e2ee _and_ answers will be as well */</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span>( msg != NULL ) {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">if</span>( msg-&gt;m_mailbox &amp;&amp; msg-&gt;m_mailbox-&gt;m_e2ee_enabled ) {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">if</span>( <a class="code" href="structmrparam__t.html#aba7d11db241c2ebbadab67895b84dae8">mrparam_get_int</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_GUARANTEE_E2EE, 0) != 0 ) {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="keywordtype">void</span> mrmsg_get_authorNtitle_from_filename(<span class="keyword">const</span> <span class="keywordtype">char</span>* pathNfilename, <span class="keywordtype">char</span>** ret_author, <span class="keywordtype">char</span>** ret_title)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;{</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">/* function extracts AUTHOR and TITLE from a path given as `/path/other folder/AUTHOR - TITLE.mp3`</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment"> if the mark ` - ` is not preset, the whole name (without suffix) is used as the title and the author is NULL. */</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">char</span> *author = NULL, *title = NULL, *p;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; mr_split_filename(pathNfilename, &amp;title, NULL);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; p = strstr(title, <span class="stringliteral">&quot; - &quot;</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span>( p ) {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; *p = 0;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; author = title;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; title = safe_strdup(&amp;p[3]);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">if</span>( ret_author ) { *ret_author = author; } <span class="keywordflow">else</span> { free(author); }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span>( ret_title ) { *ret_title = title; } <span class="keywordflow">else</span> { free(title); }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;}</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a8c8c1f342f01439ae40c5cf37532387e"> 340</a></span>&#160;<span class="keywordtype">char</span>* <a class="code" href="structmrmsg__t.html#a8c8c1f342f01439ae40c5cf37532387e">mrmsg_get_summarytext</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg, <span class="keywordtype">int</span> approx_characters)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">return</span> safe_strdup(NULL);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> mrmsg_get_summarytext_by_raw(msg-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a>, msg-&gt;<a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>, msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, approx_characters);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;}</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="keywordtype">char</span>* mrmsg_get_summarytext_by_raw(<span class="keywordtype">int</span> type, <span class="keyword">const</span> <span class="keywordtype">char</span>* text, <a class="code" href="structmrparam__t.html">mrparam_t</a>* param, <span class="keywordtype">int</span> approx_characters)</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; <span class="keywordtype">char</span>* ret = NULL;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordtype">char</span>* pathNfilename = NULL, *label = NULL, *value = NULL;</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; <span class="keywordflow">switch</span>( type ) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">case</span> MR_MSG_IMAGE:</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; ret = mrstock_str(MR_STR_IMAGE);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">case</span> MR_MSG_GIF:</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; ret = mrstock_str(MR_STR_GIF);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">case</span> MR_MSG_VIDEO:</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; ret = mrstock_str(MR_STR_VIDEO);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">case</span> MR_MSG_VOICE:</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; ret = mrstock_str(MR_STR_VOICEMESSAGE);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">case</span> MR_MSG_AUDIO:</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span>( (value=<a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(param, MRP_TRACKNAME, NULL))==NULL ) { <span class="comment">/* although we send files with &quot;author - title&quot; in the filename, existing files may follow other conventions, so this lookup is neccessary */</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(param, MRP_FILE, <span class="stringliteral">&quot;ErrFilename&quot;</span>);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; mrmsg_get_authorNtitle_from_filename(pathNfilename, NULL, &amp;value);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; label = mrstock_str(MR_STR_AUDIO);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; ret = mr_mprintf(<span class="stringliteral">&quot;%s: %s&quot;</span>, label, value);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">case</span> MR_MSG_FILE:</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(param, MRP_FILE, <span class="stringliteral">&quot;ErrFilename&quot;</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; value = mr_get_filename(pathNfilename);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; label = mrstock_str(MR_STR_FILE);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ret = mr_mprintf(<span class="stringliteral">&quot;%s: %s&quot;</span>, label, value);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span>( text ) {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; ret = safe_strdup(text);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; mr_truncate_n_unwrap_str(ret, approx_characters, 1);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">/* cleanup */</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; free(pathNfilename);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; free(label);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; free(value);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">if</span>( ret == NULL ) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; ret = safe_strdup(NULL);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;}</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="keywordtype">char</span>* mrmsg_get_fullpath(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;{</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">char</span>* ret = NULL;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; ret = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_FILE, NULL);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;cleanup:</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">return</span> ret? ret : safe_strdup(NULL);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;}</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="keywordtype">char</span>* mrmsg_get_filename(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">char</span>* ret = NULL, *pathNfilename = NULL;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_FILE, NULL);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span>( pathNfilename == NULL ) {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">goto</span> cleanup;</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;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; ret = mr_get_filename(pathNfilename);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;cleanup:</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; free(pathNfilename);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">return</span> ret? ret : safe_strdup(NULL);</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;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#ad87b7df007489b3a47c3fde79978a58a"> 480</a></span>&#160;<a class="code" href="structmrpoortext__t.html">mrpoortext_t</a>* <a class="code" href="structmrmsg__t.html#ad87b7df007489b3a47c3fde79978a58a">mrmsg_get_mediainfo</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</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; <a class="code" href="structmrpoortext__t.html">mrpoortext_t</a>* ret = mrpoortext_new();</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordtype">char</span> *pathNfilename = NULL;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="structmrcontact__t.html">mrcontact_t</a>* contact = NULL;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span>( msg == NULL || msg-&gt;m_mailbox == NULL ) {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</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; <span class="keywordflow">if</span>( msg-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a> == MR_MSG_VOICE )</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span>( (contact = <a class="code" href="structmrmailbox__t.html#a057660d94350ff98eca72785c6e88962">mrmailbox_get_contact</a>(msg-&gt;m_mailbox, msg-&gt;<a class="code" href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">m_from_id</a>))==NULL ) {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = safe_strdup((contact-&gt;<a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a>&amp;&amp;contact-&gt;<a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a>[0])? contact-&gt;<a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a> : contact-&gt;<a class="code" href="structmrcontact__t.html#aaedd60ba4cad97bb87ba5a55958341e5">m_addr</a>);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> = mrstock_str(MR_STR_VOICEMESSAGE);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_AUTHORNAME, NULL);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_TRACKNAME, NULL);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>( ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> &amp;&amp; ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>[0] &amp;&amp; ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> &amp;&amp; ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a>[0] ) {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; free(ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>); ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = NULL;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; free(ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a>); ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> = NULL;</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; pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_FILE, NULL);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">if</span>( pathNfilename == NULL ) {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; mrmsg_get_authorNtitle_from_filename(pathNfilename, &amp;ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>, &amp;ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a>);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>( ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> == NULL &amp;&amp; ret-&gt;<a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> != NULL ) {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; ret-&gt;<a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = mrstock_str(MR_STR_AUDIO);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;cleanup:</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; free(pathNfilename);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <a class="code" href="structmrcontact__t.html#acdff2696f48b1d5cdbc67a8466322b25">mrcontact_unref</a>(contact);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="keywordtype">int</span> mrmsg_is_increation__(<span class="keyword">const</span> <a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</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"> 527</span>&#160; <span class="keywordtype">int</span> is_increation = 0;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">if</span>( MR_MSG_NEEDS_ATTACHMENT(msg-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a>) )</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordtype">char</span>* pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>, MRP_FILE, NULL);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordflow">if</span>( pathNfilename ) {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordtype">char</span>* totest = mr_mprintf(<span class="stringliteral">&quot;%s.increation&quot;</span>, pathNfilename);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span>( mr_file_exist(totest) ) {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; is_increation = 1;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; free(totest);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; free(pathNfilename);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> is_increation;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;}</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="keywordtype">int</span> mrmsg_is_increation(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">/* surrounds mrmsg_is_increation__() with locking and error checking */</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordtype">int</span> is_increation = 0;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">if</span>( msg &amp;&amp; msg-&gt;m_mailbox &amp;&amp; MR_MSG_NEEDS_ATTACHMENT(msg-&gt;<a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a>) <span class="comment">/*additional check for speed reasons*/</span> )</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; mrsqlite3_lock(msg-&gt;m_mailbox-&gt;m_sql);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; is_increation = mrmsg_is_increation__(msg);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; mrsqlite3_unlock(msg-&gt;m_mailbox-&gt;m_sql);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">return</span> is_increation;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;}</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="comment">/* Internal function similar to mrmsg_save_param_to_disk() but without locking. */</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="keywordtype">void</span> mrmsg_save_param_to_disk__(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;{</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span>( msg == NULL || msg-&gt;m_mailbox == NULL || msg-&gt;m_mailbox-&gt;m_sql == NULL ) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; sqlite3_stmt* stmt = mrsqlite3_predefine__(msg-&gt;m_mailbox-&gt;m_sql, UPDATE_msgs_SET_param_WHERE_id,</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="stringliteral">&quot;UPDATE msgs SET param=? WHERE id=?;&quot;</span>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; sqlite3_bind_text(stmt, 1, msg-&gt;<a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>-&gt;m_packed, -1, SQLITE_STATIC);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; sqlite3_bind_int (stmt, 2, msg-&gt;<a class="code" href="structmrmsg__t.html#a793898c8da24c717dc2bb1d91faac801">m_id</a>);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; sqlite3_step(stmt);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;}</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a0bc3ce5f2ef0065547e4aee0143d22ef"> 590</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structmrmsg__t.html#a0bc3ce5f2ef0065547e4aee0143d22ef">mrmsg_save_param_to_disk</a>(<a class="code" href="structmrmsg__t.html">mrmsg_t</a>* msg)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;{</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span>( msg == NULL || msg-&gt;m_mailbox == NULL || msg-&gt;m_mailbox-&gt;m_sql == NULL ) {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; mrsqlite3_lock(msg-&gt;m_mailbox-&gt;m_sql);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; mrmsg_save_param_to_disk__(msg);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; mrsqlite3_unlock(msg-&gt;m_mailbox-&gt;m_sql);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;}</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="ttc" id="structmrmsg__t_html_aa4fbc319d61c755ce929e658ad75b21e"><div class="ttname"><a href="structmrmsg__t.html#aa4fbc319d61c755ce929e658ad75b21e">mrmsg_t::m_is_msgrmsg</a></div><div class="ttdeci">int m_is_msgrmsg</div><div class="ttdoc">Set to 1 if the message was sent by another messenger. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00075">mrmsg.h:75</a></div></div>
<div class="ttc" id="structmrmailbox__t_html_ad106b9c23b3a559b524a37bb5504e096"><div class="ttname"><a href="structmrmailbox__t.html#ad106b9c23b3a559b524a37bb5504e096">mrmailbox_t::mrmailbox_get_chat</a></div><div class="ttdeci">mrchat_t * mrmailbox_get_chat(mrmailbox_t *mailbox, uint32_t chat_id)</div><div class="ttdoc">Get a chat object of type mrchat_t by a chat_id. </div><div class="ttdef"><b>Definition:</b> <a href="mrmailbox_8c_source.html#l01709">mrmailbox.c:1709</a></div></div>
<div class="ttc" id="structmrcontact__t_html"><div class="ttname"><a href="structmrcontact__t.html">mrcontact_t</a></div><div class="ttdoc">An object representing a single contact in memory. </div><div class="ttdef"><b>Definition:</b> <a href="mrcontact_8h_source.html#l00038">mrcontact.h:38</a></div></div>
<div class="ttc" id="structmrpoortext__t_html_a54e10365f38dddd070a2ab68f4177331"><div class="ttname"><a href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">mrpoortext_t::m_text2</a></div><div class="ttdeci">char * m_text2</div><div class="ttdoc">may be NULL </div><div class="ttdef"><b>Definition:</b> <a href="mrpoortext_8h_source.html#l00039">mrpoortext.h:39</a></div></div>
<div class="ttc" id="structmrmailbox__t_html"><div class="ttname"><a href="structmrmailbox__t.html">mrmailbox_t</a></div><div class="ttdoc">An object representing a single mailbox. </div><div class="ttdef"><b>Definition:</b> <a href="mrmailbox_8h_source.html#l00141">mrmailbox.h:141</a></div></div>
<div class="ttc" id="structmrchat__t_html_a3b1befb4542c1bad915f2175c7c2a2b9"><div class="ttname"><a href="structmrchat__t.html#a3b1befb4542c1bad915f2175c7c2a2b9">mrchat_t::mrchat_unref</a></div><div class="ttdeci">void mrchat_unref(mrchat_t *chat)</div><div class="ttdoc">Free a chat object. </div><div class="ttdef"><b>Definition:</b> <a href="mrchat_8c_source.html#l00160">mrchat.c:160</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a3896e269c90cbf0f563ab0848fb44c65"><div class="ttname"><a href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">mrmsg_t::m_type</a></div><div class="ttdeci">int m_type</div><div class="ttdoc">Message type as one of the MR_MSG_* contstants. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00060">mrmsg.h:60</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a8c8c1f342f01439ae40c5cf37532387e"><div class="ttname"><a href="structmrmsg__t.html#a8c8c1f342f01439ae40c5cf37532387e">mrmsg_t::mrmsg_get_summarytext</a></div><div class="ttdeci">char * mrmsg_get_summarytext(mrmsg_t *msg, int approx_characters)</div><div class="ttdoc">Get a message summary as a single line of text. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00340">mrmsg.c:340</a></div></div>
<div class="ttc" id="structmrmsg__t_html_ac19bdc40e452c8997dd58474a7be6880"><div class="ttname"><a href="structmrmsg__t.html#ac19bdc40e452c8997dd58474a7be6880">mrmsg_t::m_chat_id</a></div><div class="ttdeci">uint32_t m_chat_id</div><div class="ttdoc">Chat ID the message belongs to. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00049">mrmsg.h:49</a></div></div>
<div class="ttc" id="structmrparam__t_html_ac89d8855a852f5704c3cc596e2a3d208"><div class="ttname"><a href="structmrparam__t.html#ac89d8855a852f5704c3cc596e2a3d208">mrparam_t::mrparam_unref</a></div><div class="ttdeci">void mrparam_unref(mrparam_t *param)</div><div class="ttdoc">Free an parameter list object created eg. </div><div class="ttdef"><b>Definition:</b> <a href="mrparam_8c_source.html#l00090">mrparam.c:90</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a80f470eb34af414ff28e7d3b3c715b48"><div class="ttname"><a href="structmrmsg__t.html#a80f470eb34af414ff28e7d3b3c715b48">mrmsg_t::mrmsg_new</a></div><div class="ttdeci">mrmsg_t * mrmsg_new()</div><div class="ttdoc">Create new message object. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00041">mrmsg.c:41</a></div></div>
<div class="ttc" id="structmrpoortext__t_html_af3b56661ccf1c783f397c15c310cf36f"><div class="ttname"><a href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">mrpoortext_t::m_text1</a></div><div class="ttdeci">char * m_text1</div><div class="ttdoc">may be NULL </div><div class="ttdef"><b>Definition:</b> <a href="mrpoortext_8h_source.html#l00038">mrpoortext.h:38</a></div></div>
<div class="ttc" id="structmrcontact__t_html_acdff2696f48b1d5cdbc67a8466322b25"><div class="ttname"><a href="structmrcontact__t.html#acdff2696f48b1d5cdbc67a8466322b25">mrcontact_t::mrcontact_unref</a></div><div class="ttdeci">void mrcontact_unref(mrcontact_t *ths)</div><div class="ttdoc">Free a contact object. </div><div class="ttdef"><b>Definition:</b> <a href="mrcontact_8c_source.html#l00049">mrcontact.c:49</a></div></div>
<div class="ttc" id="structmrpoortext__t_html"><div class="ttname"><a href="structmrpoortext__t.html">mrpoortext_t</a></div><div class="ttdoc">the poortext object and some function accessing it. </div><div class="ttdef"><b>Definition:</b> <a href="mrpoortext_8h_source.html#l00035">mrpoortext.h:35</a></div></div>
<div class="ttc" id="structmrparam__t_html_a23e24e8700e17ede6dd385fc90330f76"><div class="ttname"><a href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_t::mrparam_get</a></div><div class="ttdeci">char * mrparam_get(mrparam_t *param, int key, const char *def)</div><div class="ttdoc">Get value of a parameter. </div><div class="ttdef"><b>Definition:</b> <a href="mrparam_8c_source.html#l00186">mrparam.c:186</a></div></div>
<div class="ttc" id="structmrmsg__t_html_afc3d94448ada0ad7142cf168cab1462e"><div class="ttname"><a href="structmrmsg__t.html#afc3d94448ada0ad7142cf168cab1462e">mrmsg_t::mrmsg_get_summary</a></div><div class="ttdeci">mrpoortext_t * mrmsg_get_summary(mrmsg_t *msg, mrchat_t *chat)</div><div class="ttdoc">Get a summary for a message. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00263">mrmsg.c:263</a></div></div>
<div class="ttc" id="structmrmsg__t_html_ad87b7df007489b3a47c3fde79978a58a"><div class="ttname"><a href="structmrmsg__t.html#ad87b7df007489b3a47c3fde79978a58a">mrmsg_t::mrmsg_get_mediainfo</a></div><div class="ttdeci">mrpoortext_t * mrmsg_get_mediainfo(mrmsg_t *msg)</div><div class="ttdoc">Get real author and title. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00480">mrmsg.c:480</a></div></div>
<div class="ttc" id="structmrchat__t_html_abf3e1a34f567e168bc0597f9a544a50d"><div class="ttname"><a href="structmrchat__t.html#abf3e1a34f567e168bc0597f9a544a50d">mrchat_t::m_mailbox</a></div><div class="ttdeci">mrmailbox_t * m_mailbox</div><div class="ttdoc">!= NULL </div><div class="ttdef"><b>Definition:</b> <a href="mrchat_8h_source.html#l00058">mrchat.h:58</a></div></div>
<div class="ttc" id="structmrmsg__t_html"><div class="ttname"><a href="structmrmsg__t.html">mrmsg_t</a></div><div class="ttdoc">An object representing a single message in memory. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00040">mrmsg.h:40</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a9980da92916e42081f2f39ccc72c1696"><div class="ttname"><a href="structmrmsg__t.html#a9980da92916e42081f2f39ccc72c1696">mrmsg_t::mrmsg_show_padlock</a></div><div class="ttdeci">int mrmsg_show_padlock(mrmsg_t *msg)</div><div class="ttdoc">Check if a padlock should be shown beside the message. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00302">mrmsg.c:302</a></div></div>
<div class="ttc" id="structmrmsg__t_html_ad549fc02587ba284fda2bbecd162b16a"><div class="ttname"><a href="structmrmsg__t.html#ad549fc02587ba284fda2bbecd162b16a">mrmsg_t::m_to_id</a></div><div class="ttdeci">uint32_t m_to_id</div><div class="ttdoc">Contact ID of the receiver, if appropriate. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00048">mrmsg.h:48</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a299981cb89b25ebaaedf7a8486a86ee6"><div class="ttname"><a href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">mrmsg_t::m_from_id</a></div><div class="ttdeci">uint32_t m_from_id</div><div class="ttdoc">Contact ID of the sender. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00047">mrmsg.h:47</a></div></div>
<div class="ttc" id="structmrparam__t_html_a6824cd599508690ca1d383b9f229f4e3"><div class="ttname"><a href="structmrparam__t.html#a6824cd599508690ca1d383b9f229f4e3">mrparam_t::mrparam_new</a></div><div class="ttdeci">mrparam_t * mrparam_new()</div><div class="ttdoc">Create new parameter list object. </div><div class="ttdef"><b>Definition:</b> <a href="mrparam_8c_source.html#l00069">mrparam.c:69</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a0570bbfc3add48dafb0ae70390b47adb"><div class="ttname"><a href="structmrmsg__t.html#a0570bbfc3add48dafb0ae70390b47adb">mrmsg_t::m_starred</a></div><div class="ttdeci">int m_starred</div><div class="ttdoc">Starred-state of the message. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00074">mrmsg.h:74</a></div></div>
<div class="ttc" id="structmrparam__t_html_aba7d11db241c2ebbadab67895b84dae8"><div class="ttname"><a href="structmrparam__t.html#aba7d11db241c2ebbadab67895b84dae8">mrparam_t::mrparam_get_int</a></div><div class="ttdeci">int32_t mrparam_get_int(mrparam_t *param, int key, int32_t def)</div><div class="ttdoc">Get value of a parameter. </div><div class="ttdef"><b>Definition:</b> <a href="mrparam_8c_source.html#l00223">mrparam.c:223</a></div></div>
<div class="ttc" id="structmrmsg__t_html_ae940aa79a261e1a427b12baefbee2d23"><div class="ttname"><a href="structmrmsg__t.html#ae940aa79a261e1a427b12baefbee2d23">mrmsg_t::mrmsg_set_text</a></div><div class="ttdeci">void mrmsg_set_text(mrmsg_t *msg, const char *text)</div><div class="ttdoc">Set the text of a message object. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00125">mrmsg.c:125</a></div></div>
<div class="ttc" id="structmrparam__t_html"><div class="ttname"><a href="structmrparam__t.html">mrparam_t</a></div><div class="ttdoc">An object for handling key=value parameter lists. </div><div class="ttdef"><b>Definition:</b> <a href="mrparam_8h_source.html#l00036">mrparam.h:36</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a2c31ec5b23e35fbe3ae3896eece09453"><div class="ttname"><a href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">mrmsg_t::m_param</a></div><div class="ttdeci">mrparam_t * m_param</div><div class="ttdoc">MRP_FILE, MRP_WIDTH, MRP_HEIGHT etc. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00073">mrmsg.h:73</a></div></div>
<div class="ttc" id="structmrmsg__t_html_ae54dcd4036371597d7f8bbd75303527a"><div class="ttname"><a href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">mrmsg_t::m_text</a></div><div class="ttdeci">char * m_text</div><div class="ttdoc">message text or NULL if unset </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00072">mrmsg.h:72</a></div></div>
<div class="ttc" id="structmrmsg__t_html_aa33212e41efff643aa7290753f3d9b02"><div class="ttname"><a href="structmrmsg__t.html#aa33212e41efff643aa7290753f3d9b02">mrmsg_t::mrmsg_unref</a></div><div class="ttdeci">void mrmsg_unref(mrmsg_t *msg)</div><div class="ttdoc">Free an mrmsg_t object created eg. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00066">mrmsg.c:66</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a793898c8da24c717dc2bb1d91faac801"><div class="ttname"><a href="structmrmsg__t.html#a793898c8da24c717dc2bb1d91faac801">mrmsg_t::m_id</a></div><div class="ttdeci">uint32_t m_id</div><div class="ttdoc">Message ID. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00045">mrmsg.h:45</a></div></div>
<div class="ttc" id="structmrmsg__t_html_aca59d28054d3e15b4fe6ca74073d91f4"><div class="ttname"><a href="structmrmsg__t.html#aca59d28054d3e15b4fe6ca74073d91f4">mrmsg_t::m_state</a></div><div class="ttdeci">int m_state</div><div class="ttdoc">Message state as one of the MR_MSG_STATE_* contstants. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00070">mrmsg.h:70</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a0bc3ce5f2ef0065547e4aee0143d22ef"><div class="ttname"><a href="structmrmsg__t.html#a0bc3ce5f2ef0065547e4aee0143d22ef">mrmsg_t::mrmsg_save_param_to_disk</a></div><div class="ttdeci">void mrmsg_save_param_to_disk(mrmsg_t *msg)</div><div class="ttdoc">can be used to add some additional, persistent information to a messages record. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00590">mrmsg.c:590</a></div></div>
<div class="ttc" id="structmrmailbox__t_html_a057660d94350ff98eca72785c6e88962"><div class="ttname"><a href="structmrmailbox__t.html#a057660d94350ff98eca72785c6e88962">mrmailbox_t::mrmailbox_get_contact</a></div><div class="ttdeci">mrcontact_t * mrmailbox_get_contact(mrmailbox_t *mailbox, uint32_t contact_id)</div><div class="ttdoc">Get a single contact object. </div><div class="ttdef"><b>Definition:</b> <a href="mrmailbox_8c_source.html#l04216">mrmailbox.c:4216</a></div></div>
<div class="ttc" id="structmrmsg__t_html_a57d94b55fc918b27874b9194d6c35388"><div class="ttname"><a href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388">mrmsg_t::mrmsg_empty</a></div><div class="ttdeci">void mrmsg_empty(mrmsg_t *msg)</div><div class="ttdoc">Empty a message object. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8c_source.html#l00087">mrmsg.c:87</a></div></div>
<div class="ttc" id="structmrcontact__t_html_aaedd60ba4cad97bb87ba5a55958341e5"><div class="ttname"><a href="structmrcontact__t.html#aaedd60ba4cad97bb87ba5a55958341e5">mrcontact_t::m_addr</a></div><div class="ttdeci">char * m_addr</div><div class="ttdoc">may be NULL or empty </div><div class="ttdef"><b>Definition:</b> <a href="mrcontact_8h_source.html#l00047">mrcontact.h:47</a></div></div>
<div class="ttc" id="structmrcontact__t_html_a48fba862b41f7da3b8c6193c0554654b"><div class="ttname"><a href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">mrcontact_t::m_name</a></div><div class="ttdeci">char * m_name</div><div class="ttdoc">may be NULL or empty, this name should not be spreaded as it may be &quot;Daddy&quot; and so on; initially set ...</div><div class="ttdef"><b>Definition:</b> <a href="mrcontact_8h_source.html#l00045">mrcontact.h:45</a></div></div>
<div class="ttc" id="structmrmsg__t_html_aba09cb77cdabd1e2b2e6262d25388801"><div class="ttname"><a href="structmrmsg__t.html#aba09cb77cdabd1e2b2e6262d25388801">mrmsg_t::m_timestamp</a></div><div class="ttdeci">time_t m_timestamp</div><div class="ttdoc">Unix time the message was sended or received. </div><div class="ttdef"><b>Definition:</b> <a href="mrmsg_8h_source.html#l00050">mrmsg.h:50</a></div></div>
<div class="ttc" id="structmrchat__t_html"><div class="ttname"><a href="structmrchat__t.html">mrchat_t</a></div><div class="ttdoc">An object representing a single chat in memory. </div><div class="ttdef"><b>Definition:</b> <a href="mrchat_8h_source.html#l00039">mrchat.h:39</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Nov 14 2017 02:47:14 for Delta Chat Core C-Library by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>