mirror of
https://github.com/deltachat/deltachat-core.git
synced 2025-10-06 03:50:08 +02:00
138 lines
85 KiB
HTML
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 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 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> <span class="comment">/*******************************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Delta Chat Core</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2017 Björn Petersen</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Contact: r10s@b44t.com, http://b44t.com</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <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> <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> <span class="comment"> * version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> <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> <span class="comment"> * details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <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> <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> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> ******************************************************************************/</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "mrmailbox_internal.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "mrimap.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "mrsmtp.h"</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "mrjob.h"</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "mrpgp.h"</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "mrmimefactory.h"</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a80f470eb34af414ff28e7d3b3c715b48"> 41</a></span> <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> {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <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> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  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>  }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  ths-><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>  ths-><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>  ths-><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> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> ths;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#aa33212e41efff643aa7290753f3d9b02"> 66</a></span> <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> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <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>  <a class="code" href="structmrparam__t.html#ac89d8855a852f5704c3cc596e2a3d208">mrparam_unref</a>(msg-><a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  free(msg);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a57d94b55fc918b27874b9194d6c35388"> 87</a></span> <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> {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  free(msg-><a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  msg-><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> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  free(msg->m_rfc724_mid);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  msg->m_rfc724_mid = NULL;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  free(msg->m_server_folder);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  msg->m_server_folder = NULL;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  mrparam_set_packed(msg-><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> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  msg->m_mailbox = NULL;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#ae940aa79a261e1a427b12baefbee2d23"> 125</a></span> <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> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span>( msg==NULL || text==NULL ) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  free(msg-><a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  msg-><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> }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <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> {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  *ret_msgtype = MR_MSG_UNDEFINED;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  *ret_mime = NULL;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordtype">char</span>* s = mr_get_filesuffix_lc(pathNfilename);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span>( s == NULL ) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">"mp3"</span>)==0 ) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  *ret_msgtype = MR_MSG_AUDIO;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  *ret_mime = safe_strdup(<span class="stringliteral">"audio/mpeg"</span>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">"mp4"</span>)==0 ) {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  *ret_msgtype = MR_MSG_VIDEO;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  *ret_mime = safe_strdup(<span class="stringliteral">"video/mp4"</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">"jpg"</span>)==0 || strcmp(s, <span class="stringliteral">"jpeg"</span>)==0 ) {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  *ret_msgtype = MR_MSG_IMAGE;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  *ret_mime = safe_strdup(<span class="stringliteral">"image/jpeg"</span>);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">"png"</span>)==0 ) {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  *ret_msgtype = MR_MSG_IMAGE;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  *ret_mime = safe_strdup(<span class="stringliteral">"image/png"</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>( strcmp(s, <span class="stringliteral">"gif"</span>)==0 ) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  *ret_msgtype = MR_MSG_GIF;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  *ret_mime = safe_strdup(<span class="stringliteral">"image/gif"</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> cleanup:</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  free(s);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <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> {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <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> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  ths-><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>  ths->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>  ths->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>  ths->m_server_uid = (uint32_t)sqlite3_column_int (row, row_offset++);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  ths-><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> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  ths-><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>  ths-><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>  ths-><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> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  ths-><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>  ths-><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>  ths-><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>  ths-><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> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  mrparam_set_packed( ths-><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>  ths-><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> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span>( ths-><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>  mr_truncate_n_unwrap_str(ths-><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" smartphone display */</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <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> {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  sqlite3_stmt* stmt;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span>( ths==NULL || mailbox==NULL || mailbox->m_sql==NULL ) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  stmt = mrsqlite3_predefine__(mailbox->m_sql, SELECT_ircftttstpb_FROM_msg_WHERE_i,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="stringliteral">"SELECT "</span> MR_MSG_FIELDS <span class="stringliteral">" FROM msgs m WHERE m.id=?;"</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  sqlite3_bind_int(stmt, 1, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>( sqlite3_step(stmt) != SQLITE_ROW ) {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <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>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  ths->m_mailbox = mailbox;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#afc3d94448ada0ad7142cf168cab1462e"> 263</a></span> <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> {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <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>  <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>  <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> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span>( chat == NULL ) {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span>( (chat=<a class="code" href="structmrmailbox__t.html#ad106b9c23b3a559b524a37bb5504e096">mrmailbox_get_chat</a>(msg->m_mailbox, msg-><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>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  chat_to_delete = chat;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span>( msg-><a class="code" href="structmrmsg__t.html#a299981cb89b25ebaaedf7a8486a86ee6">m_from_id</a> != MR_CONTACT_ID_SELF && chat->m_type == MR_CHAT_TYPE_GROUP ) {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  contact = <a class="code" href="structmrmailbox__t.html#a057660d94350ff98eca72785c6e88962">mrmailbox_get_contact</a>(chat-><a class="code" href="structmrchat__t.html#abf3e1a34f567e168bc0597f9a544a50d">m_mailbox</a>, msg-><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>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  mrpoortext_fill(ret, msg, chat, contact);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> cleanup:</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <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>  <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>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a9980da92916e42081f2f39ccc72c1696"> 302</a></span> <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> {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <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>  <span class="keywordflow">if</span>( msg != NULL ) {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span>( msg->m_mailbox && msg->m_mailbox->m_e2ee_enabled ) {</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span>( <a class="code" href="structmrparam__t.html#aba7d11db241c2ebbadab67895b84dae8">mrparam_get_int</a>(msg-><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>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <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> {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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> <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>  <span class="keywordtype">char</span> *author = NULL, *title = NULL, *p;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  mr_split_filename(pathNfilename, &title, NULL);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  p = strstr(title, <span class="stringliteral">" - "</span>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span>( p ) {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  *p = 0;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  author = title;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  title = safe_strdup(&p[3]);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <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>  <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> }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a8c8c1f342f01439ae40c5cf37532387e"> 340</a></span> <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> {</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">if</span>( msg==NULL ) {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> safe_strdup(NULL);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> mrmsg_get_summarytext_by_raw(msg-><a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a>, msg-><a class="code" href="structmrmsg__t.html#ae54dcd4036371597d7f8bbd75303527a">m_text</a>, msg-><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> }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <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> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordtype">char</span>* ret = NULL;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordtype">char</span>* pathNfilename = NULL, *label = NULL, *value = NULL;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">switch</span>( type ) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">case</span> MR_MSG_IMAGE:</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  ret = mrstock_str(MR_STR_IMAGE);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">case</span> MR_MSG_GIF:</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  ret = mrstock_str(MR_STR_GIF);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">case</span> MR_MSG_VIDEO:</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  ret = mrstock_str(MR_STR_VIDEO);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">case</span> MR_MSG_VOICE:</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  ret = mrstock_str(MR_STR_VOICEMESSAGE);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">case</span> MR_MSG_AUDIO:</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <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 "author - title" 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>  pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(param, MRP_FILE, <span class="stringliteral">"ErrFilename"</span>);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  mrmsg_get_authorNtitle_from_filename(pathNfilename, NULL, &value);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  label = mrstock_str(MR_STR_AUDIO);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  ret = mr_mprintf(<span class="stringliteral">"%s: %s"</span>, label, value);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">case</span> MR_MSG_FILE:</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(param, MRP_FILE, <span class="stringliteral">"ErrFilename"</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  value = mr_get_filename(pathNfilename);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  label = mrstock_str(MR_STR_FILE);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  ret = mr_mprintf(<span class="stringliteral">"%s: %s"</span>, label, value);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">if</span>( text ) {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  ret = safe_strdup(text);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  mr_truncate_n_unwrap_str(ret, approx_characters, 1);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="comment">/* cleanup */</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  free(pathNfilename);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  free(label);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  free(value);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span>( ret == NULL ) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  ret = safe_strdup(NULL);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <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> {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordtype">char</span>* ret = NULL;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  ret = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> cleanup:</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">return</span> ret? ret : safe_strdup(NULL);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <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> {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordtype">char</span>* ret = NULL, *pathNfilename = NULL;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordflow">if</span>( msg == NULL ) {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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>  <span class="keywordflow">if</span>( pathNfilename == NULL ) {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  ret = mr_get_filename(pathNfilename);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> cleanup:</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  free(pathNfilename);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> ret? ret : safe_strdup(NULL);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#ad87b7df007489b3a47c3fde79978a58a"> 480</a></span> <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> {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <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>  <span class="keywordtype">char</span> *pathNfilename = NULL;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <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> </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">if</span>( msg == NULL || msg->m_mailbox == NULL ) {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">if</span>( msg-><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>  {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span>( (contact = <a class="code" href="structmrmailbox__t.html#a057660d94350ff98eca72785c6e88962">mrmailbox_get_contact</a>(msg->m_mailbox, msg-><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>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = safe_strdup((contact-><a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a>&&contact-><a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a>[0])? contact-><a class="code" href="structmrcontact__t.html#a48fba862b41f7da3b8c6193c0554654b">m_name</a> : contact-><a class="code" href="structmrcontact__t.html#aaedd60ba4cad97bb87ba5a55958341e5">m_addr</a>);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  ret-><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>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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>  ret-><a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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>  <span class="keywordflow">if</span>( ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> && ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>[0] && ret-><a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a> && ret-><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>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  free(ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>); ret-><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>  free(ret-><a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a>); ret-><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> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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>  <span class="keywordflow">if</span>( pathNfilename == NULL ) {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">goto</span> cleanup;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  mrmsg_get_authorNtitle_from_filename(pathNfilename, &ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a>, &ret-><a class="code" href="structmrpoortext__t.html#a54e10365f38dddd070a2ab68f4177331">m_text2</a>);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">if</span>( ret-><a class="code" href="structmrpoortext__t.html#af3b56661ccf1c783f397c15c310cf36f">m_text1</a> == NULL && ret-><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>  ret-><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>  }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> cleanup:</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  free(pathNfilename);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <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>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <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> {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordtype">int</span> is_increation = 0;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span>( MR_MSG_NEEDS_ATTACHMENT(msg-><a class="code" href="structmrmsg__t.html#a3896e269c90cbf0f563ab0848fb44c65">m_type</a>) )</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordtype">char</span>* pathNfilename = <a class="code" href="structmrparam__t.html#a23e24e8700e17ede6dd385fc90330f76">mrparam_get</a>(msg-><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>  <span class="keywordflow">if</span>( pathNfilename ) {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordtype">char</span>* totest = mr_mprintf(<span class="stringliteral">"%s.increation"</span>, pathNfilename);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span>( mr_file_exist(totest) ) {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  is_increation = 1;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  free(totest);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  free(pathNfilename);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> is_increation;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <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> {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <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>  <span class="keywordtype">int</span> is_increation = 0;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">if</span>( msg && msg->m_mailbox && MR_MSG_NEEDS_ATTACHMENT(msg-><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>  {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  mrsqlite3_lock(msg->m_mailbox->m_sql);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  is_increation = mrmsg_is_increation__(msg);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  mrsqlite3_unlock(msg->m_mailbox->m_sql);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">return</span> is_increation;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <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> <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> {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">if</span>( msg == NULL || msg->m_mailbox == NULL || msg->m_mailbox->m_sql == NULL ) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  sqlite3_stmt* stmt = mrsqlite3_predefine__(msg->m_mailbox->m_sql, UPDATE_msgs_SET_param_WHERE_id,</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="stringliteral">"UPDATE msgs SET param=? WHERE id=?;"</span>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  sqlite3_bind_text(stmt, 1, msg-><a class="code" href="structmrmsg__t.html#a2c31ec5b23e35fbe3ae3896eece09453">m_param</a>->m_packed, -1, SQLITE_STATIC);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  sqlite3_bind_int (stmt, 2, msg-><a class="code" href="structmrmsg__t.html#a793898c8da24c717dc2bb1d91faac801">m_id</a>);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  sqlite3_step(stmt);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> }</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="structmrmsg__t.html#a0bc3ce5f2ef0065547e4aee0143d22ef"> 590</a></span> <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> {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">if</span>( msg == NULL || msg->m_mailbox == NULL || msg->m_mailbox->m_sql == NULL ) {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  mrsqlite3_lock(msg->m_mailbox->m_sql);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  mrmsg_save_param_to_disk__(msg);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  mrsqlite3_unlock(msg->m_mailbox->m_sql);</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </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 "Daddy" 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  <a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
</a> 1.8.11
|
|
</small></address>
|
|
</body>
|
|
</html>
|