2020-11-27

#
# Previous commits:
#   d452daa 2020-11-13 # # Previous commits: #   73648eb 2020-11-13 #   a028edd 2020-03-21 #   0cbf498 2020-03-21 #   e6478b1 2020-03-12
#   73648eb 2020-11-13
#   a028edd 2020-03-21
#   0cbf498 2020-03-21
This commit is contained in:
tastytea 2020-11-27 15:05:17 +01:00
parent d452daac6e
commit 1a6dd5fae7
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
56 changed files with 65 additions and 999 deletions

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,95 +67,7 @@ $(function() {
<div class="title">example01_instance_info.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Print information about an instance (/api/v1/instance).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 1)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance.</span></div>
<div class="line"> masto::Instance instance{args[1], {}};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Get maximum allowed characters per post.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> max_chars{instance.get_max_chars()};</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Maximum characters per post: &quot;</span> &lt;&lt; max_chars &lt;&lt; <span class="stringliteral">&quot;\n\n&quot;</span>;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Initialize a Connection.</span></div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Get information about the instance.</span></div>
<div class="line"> masto::answer_type answer{connection.get(masto::API::v1::instance)};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; answer &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,119 +67,7 @@ $(function() {
<div class="title">example02_streaming.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Print new public events (/api/v1/streaming/public).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::thread;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"><span class="keyword">using</span> std::this_thread::sleep_for;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 1)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance.</span></div>
<div class="line"> masto::Instance instance{args[1], {}};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Initialize a Connection.</span></div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Find out if the streaming service is fine.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{connection.get(masto::API::v1::streaming_health)};</div>
<div class="line"> <span class="keywordflow">if</span> (answer &amp;&amp; answer.body == <span class="stringliteral">&quot;OK&quot;</span>)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Make a thread, get all public events.</span></div>
<div class="line"> <span class="comment">// clang-format off</span></div>
<div class="line"> thread stream_thread{[&amp;]</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// clang-format on</span></div>
<div class="line"> answer = connection.get(masto::API::v1::streaming_public);</div>
<div class="line"> }};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Print new events every 2 seconds, for 10 seconds.</span></div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">auto</span> counter{0}; counter &lt; 5; ++counter)</div>
<div class="line"> {</div>
<div class="line"> sleep_for(2s);</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;event : connection.get_new_events())</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Print type of event and the beginning of the data.</span></div>
<div class="line"> cout &lt;&lt; <span class="keyword">event</span>.type &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; <span class="keyword">event</span>.data.substr(0, 70)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;&quot;</span> &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Cancel the stream, …</span></div>
<div class="line"> connection.cancel_stream();</div>
<div class="line"> <span class="comment">// … and wait for the thread.</span></div>
<div class="line"> stream_thread.join();</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,98 +67,7 @@ $(function() {
<div class="title">example03_post_status.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Post a status (/api/v1/status).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 2)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt; &lt;access token&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance and a Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], args[2]};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Set up the parameters.</span></div>
<div class="line"> constexpr <span class="keyword">auto</span> poll_seconds{60 * 60 * 24 * 2}; <span class="comment">// 2 days.</span></div>
<div class="line"> <span class="keyword">const</span> masto::parametermap parameters{{<span class="stringliteral">&quot;status&quot;</span>, <span class="stringliteral">&quot;How is the weather?&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;poll[options]&quot;</span>,</div>
<div class="line"> vector&lt;string_view&gt;{<span class="stringliteral">&quot;Nice&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;not nice&quot;</span>}},</div>
<div class="line"> {<span class="stringliteral">&quot;poll[expires_in]&quot;</span>,</div>
<div class="line"> to_string(poll_seconds)}};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Post the status.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{connection.post(masto::API::v1::statuses, parameters)};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Successfully posted a status.\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,108 +67,7 @@ $(function() {
<div class="title">example04_post_with_attachment.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Post a status (/api/v1/status) with an attachment (/api/v1/media).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 3)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0]</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt; &lt;access token&gt; &lt;file&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance and a Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], args[2]};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> <span class="keyword">const</span> string_view filename{args[3]};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Create attachment.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{connection.post(masto::API::v1::media,</div>
<div class="line"> {{<span class="stringliteral">&quot;file&quot;</span>, string(<span class="stringliteral">&quot;@file:&quot;</span>) += filename},</div>
<div class="line"> {<span class="stringliteral">&quot;description&quot;</span>, <span class="stringliteral">&quot;Test.&quot;</span>}})};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Get the ID of the attachment.</span></div>
<div class="line"> <span class="comment">// You normally would use a JSON parser, of course. I don&#39;t use one</span></div>
<div class="line"> <span class="comment">// because I don&#39;t want to add a dependency just for an example.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> pos{answer.body.find(R<span class="stringliteral">&quot;(&quot;id&quot;:&quot;)&quot;) + 6};</span></div>
<div class="line"><span class="stringliteral"> </span><span class="keyword">const</span> <span class="keyword">auto</span> endpos{answer.body.find(R<span class="stringliteral">&quot;(&quot;,)&quot;, pos)};</span></div>
<div class="line"><span class="stringliteral"> </span><span class="keyword">const</span> <span class="keyword">auto</span> media_id{answer.body.substr(pos, endpos - pos)};</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Attachment has ID: &quot;</span> &lt;&lt; media_id &lt;&lt; endl;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Post the status. Note that “media_ids” always has to be a vector.</span></div>
<div class="line"> answer = connection.post(masto::API::v1::statuses,</div>
<div class="line"> {{<span class="stringliteral">&quot;status&quot;</span>, <span class="stringliteral">&quot;Attachment test.&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;media_ids&quot;</span>,</div>
<div class="line"> vector&lt;string_view&gt;{media_id}}});</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Successfully posted &quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,96 +67,7 @@ $(function() {
<div class="title">example05_update_notification_settings.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Update notification settings (/api/pleroma/notification_settings).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 2)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt; &lt;access token&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance and a Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], args[2]};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Update the settings.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> answer{</div>
<div class="line"> connection.put(masto::API::pleroma::notification_settings,</div>
<div class="line"> {</div>
<div class="line"> {<span class="stringliteral">&quot;followers&quot;</span>, <span class="stringliteral">&quot;true&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;follows&quot;</span>, <span class="stringliteral">&quot;true&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;remote&quot;</span>, <span class="stringliteral">&quot;true&quot;</span>},</div>
<div class="line"> {<span class="stringliteral">&quot;local&quot;</span>, <span class="stringliteral">&quot;true&quot;</span>},</div>
<div class="line"> })};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; answer &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,93 +67,7 @@ $(function() {
<div class="title">example06_update_name.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Update account display name settings (/api/v1/accounts/update_credentials).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 3)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0]</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt; &lt;access token&gt; &lt;name&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> name{args[3]};</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance and a Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], args[2]};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Update the settings.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> answer{</div>
<div class="line"> connection.patch(masto::API::v1::accounts_update_credentials,</div>
<div class="line"> {{<span class="stringliteral">&quot;display_name&quot;</span>, name}})};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Successfully changed display name.\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,110 +67,7 @@ $(function() {
<div class="title">example07_delete_status.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Post a status (/api/v1/status), then delete it (/api/v1/statuses/:id).</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"><span class="keyword">using</span> std::this_thread::sleep_for;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 2)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt; &lt;access token&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize an Instance and a Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], args[2]};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Post a status.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{connection.post(masto::API::v1::statuses,</div>
<div class="line"> {{<span class="stringliteral">&quot;status&quot;</span>, <span class="stringliteral">&quot;Delete me.&quot;</span>}})};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Successfully posted a status.\n&quot;</span>;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Get the ID of the post.</span></div>
<div class="line"> <span class="comment">// You normally would use a JSON parser, of course. I don&#39;t use one</span></div>
<div class="line"> <span class="comment">// because I don&#39;t want to add a dependency just for an example.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> pos{answer.body.rfind(R<span class="stringliteral">&quot;(&quot;id&quot;:&quot;)&quot;) + 6};</span></div>
<div class="line"><span class="stringliteral"> </span><span class="keyword">const</span> <span class="keyword">auto</span> endpos{answer.body.find(R<span class="stringliteral">&quot;(&quot;,)&quot;, pos)};</span></div>
<div class="line"><span class="stringliteral"> </span><span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">id</span>{answer.body.substr(pos, endpos - pos)};</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Post has ID: &quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; endl;</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Waiting 10 seconds…\n&quot;</span>;</div>
<div class="line"> sleep_for(10s);</div>
<div class="line"> </div>
<div class="line"> answer = connection.del(masto::API::v1::statuses_id, {{<span class="stringliteral">&quot;id&quot;</span>, <span class="keywordtype">id</span>}});</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Successfully deleted the status.\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code)</div>
<div class="line"> &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,125 +67,7 @@ $(function() {
<div class="title">example08_obtain_token.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Obtain an access token and verify that it works.</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cin;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::endl;</div>
<div class="line"><span class="keyword">using</span> std::exit;</div>
<div class="line"><span class="keyword">using</span> std::string;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> handle_error(<span class="keyword">const</span> masto::answer_type &amp;answer);</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 1)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize Instance and Instance::ObtainToken.</span></div>
<div class="line"> masto::Instance instance{args[1], {}};</div>
<div class="line"> masto::Instance::ObtainToken token{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Create an “Application” (/api/v1/apps),</span></div>
<div class="line"> <span class="comment">// and get URI for the authorization code (/oauth/authorize).</span></div>
<div class="line"> <span class="comment">// NOTE: Mastodon only needs read:accounts for verify_credentials but</span></div>
<div class="line"> <span class="comment">// Pleroma needs the full read scope.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{token.step_1(<span class="stringliteral">&quot;Testclient&quot;</span>, <span class="stringliteral">&quot;read write:favourites&quot;</span>,</div>
<div class="line"> <span class="stringliteral">&quot;https://example.com/&quot;</span>)};</div>
<div class="line"> <span class="keywordflow">if</span> (!answer)</div>
<div class="line"> {</div>
<div class="line"> handle_error(answer);</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Please visit &quot;</span> &lt;&lt; answer &lt;&lt; <span class="stringliteral">&quot;\nand paste the code here: &quot;</span>;</div>
<div class="line"> <span class="keywordtype">string</span> code;</div>
<div class="line"> cin &gt;&gt; code;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Obtain the token (/oauth/token).</span></div>
<div class="line"> answer = token.step_2(code);</div>
<div class="line"> <span class="keywordflow">if</span> (!answer)</div>
<div class="line"> {</div>
<div class="line"> handle_error(answer);</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;Your access token is: &quot;</span> &lt;&lt; answer &lt;&lt; endl;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Test if the token works.</span></div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> answer = connection.get(masto::API::v1::apps_verify_credentials);</div>
<div class="line"> <span class="keywordflow">if</span> (!answer)</div>
<div class="line"> {</div>
<div class="line"> handle_error(answer);</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> cout &lt;&lt; answer &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> handle_error(<span class="keyword">const</span> masto::answer_type &amp;answer)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span></div>
<div class="line"> &lt;&lt; answer.error_message &lt;&lt; endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> exit(1);</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>
@ -67,153 +67,7 @@ $(function() {
<div class="title">example09_nlohmann_json.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><span class="comment">/* This file is part of mastodonpp.</span></div>
<div class="line"><span class="comment"> * Copyright © 2020 tastytea &lt;tastytea@tastytea.de&gt;</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><span class="comment"> * purpose with or without fee is hereby granted.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><span class="comment"> * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><span class="comment"> * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span></div>
<div class="line"><span class="comment"> * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><span class="comment"> * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION</span></div>
<div class="line"><span class="comment"> * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</span></div>
<div class="line"><span class="comment"> * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Get the last 4 public statuses of an instance and process them with</span></div>
<div class="line"><span class="comment">// nlohmann-json. &lt;https://github.com/nlohmann/json&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#if __has_include(&quot;mastodonpp.hpp&quot;)</span></div>
<div class="line"><span class="preprocessor"># include &quot;mastodonpp.hpp&quot;</span> <span class="comment">// We&#39;re building mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"><span class="preprocessor"># include &lt;mastodonpp/mastodonpp.hpp&gt;</span> <span class="comment">// We&#39;re building outside mastodonpp.</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Don&#39;t compile if nlohmann-json can&#39;t be found.</span></div>
<div class="line"><span class="preprocessor">#if __has_include(&lt;nlohmann/json.hpp&gt;)</span></div>
<div class="line"><span class="preprocessor"># include &lt;nlohmann/json.hpp&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor"># include &lt;cstdlib&gt;</span></div>
<div class="line"><span class="preprocessor"># include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor"># include &lt;string&gt;</span></div>
<div class="line"><span class="preprocessor"># include &lt;string_view&gt;</span></div>
<div class="line"><span class="preprocessor"># include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">namespace </span>masto = <a class="code" href="namespacemastodonpp.html">mastodonpp</a>;</div>
<div class="line"><span class="keyword">using</span> json = nlohmann::json;</div>
<div class="line"><span class="keyword">using</span> std::cerr;</div>
<div class="line"><span class="keyword">using</span> std::cout;</div>
<div class="line"><span class="keyword">using</span> std::exit;</div>
<div class="line"><span class="keyword">using</span> std::string_view;</div>
<div class="line"><span class="keyword">using</span> std::to_string;</div>
<div class="line"><span class="keyword">using</span> std::vector;</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> handle_error(<span class="keyword">const</span> masto::answer_type &amp;answer);</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">const</span> vector&lt;string_view&gt; args(argv, argv + argc);</div>
<div class="line"> <span class="keywordflow">if</span> (args.size() &lt;= 1)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;Usage: &quot;</span> &lt;&lt; args[0] &lt;&lt; <span class="stringliteral">&quot; &lt;instance hostname&gt;\n&quot;</span>;</div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Initialize Instance and Connection.</span></div>
<div class="line"> masto::Instance instance{args[1], {}};</div>
<div class="line"> masto::Connection connection{instance};</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Get the last 4 public statuses of the instance.</span></div>
<div class="line"> <span class="keyword">auto</span> answer{connection.get(masto::API::v1::timelines_public,</div>
<div class="line"> {{<span class="stringliteral">&quot;limit&quot;</span>, <span class="stringliteral">&quot;4&quot;</span>}, {<span class="stringliteral">&quot;local&quot;</span>, <span class="stringliteral">&quot;true&quot;</span>}})};</div>
<div class="line"> <span class="keywordflow">if</span> (answer)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Parse JSON string.</span></div>
<div class="line"> <span class="keyword">auto</span> statuses{json::parse(answer.body)};</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;status : statuses)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Extract the info we want and print it.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> acct{status[<span class="stringliteral">&quot;account&quot;</span>][<span class="stringliteral">&quot;acct&quot;</span>].get&lt;string_view&gt;()};</div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> content{status[<span class="stringliteral">&quot;content&quot;</span>].get&lt;string_view&gt;()};</div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">id</span>{status[<span class="stringliteral">&quot;id&quot;</span>].get&lt;string_view&gt;()};</div>
<div class="line"> cout &lt;&lt; acct &lt;&lt; <span class="stringliteral">&quot; wrote status &quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;: \n&quot;</span>;</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; content.substr(0, 76) &lt;&lt; <span class="stringliteral">&quot; …\n&quot;</span>;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Print tags if there are any.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> tags{status[<span class="stringliteral">&quot;tags&quot;</span>]};</div>
<div class="line"> <span class="keywordflow">if</span> (!tags.empty())</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot; Tags: &quot;</span>;</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;tag : tags)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;#&#39;</span> &lt;&lt; tag[<span class="stringliteral">&quot;name&quot;</span>].get&lt;string_view&gt;() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> cout &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Print the number of attachments.</span></div>
<div class="line"> <span class="keyword">const</span> <span class="keyword">auto</span> n_attachments{status[<span class="stringliteral">&quot;media_attachments&quot;</span>].size()};</div>
<div class="line"> <span class="keywordflow">if</span> (n_attachments &gt; 0)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; n_attachments &lt;&lt; <span class="stringliteral">&quot; attachment&quot;</span>;</div>
<div class="line"> <span class="keywordflow">if</span> (n_attachments &gt; 1)</div>
<div class="line"> {</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;s&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> cout &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> handle_error(answer);</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> masto::CURLException &amp;e)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Only libcurl errors that are not network errors will be thrown.</span></div>
<div class="line"> <span class="comment">// There went probably something wrong with the initialization.</span></div>
<div class="line"> cerr &lt;&lt; e.what() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> nlohmann::detail::exception &amp;e)</div>
<div class="line"> {</div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;JSON exception: &quot;</span> &lt;&lt; e.what() &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span> handle_error(<span class="keyword">const</span> masto::answer_type &amp;answer)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordflow">if</span> (answer.curl_error_code == 0)</div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// If it is no libcurl error, it must be an HTTP error.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;HTTP status: &quot;</span> &lt;&lt; answer.http_status &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="comment">// Network errors like “Couldn&#39;t resolve host.”.</span></div>
<div class="line"> cerr &lt;&lt; <span class="stringliteral">&quot;libcurl error &quot;</span> &lt;&lt; to_string(answer.curl_error_code) &lt;&lt; <span class="stringliteral">&quot;: &quot;</span></div>
<div class="line"> &lt;&lt; answer.error_message &lt;&lt; <span class="charliteral">&#39;\n&#39;</span>;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> exit(1);</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#else</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor"># include &lt;iostream&gt;</span></div>
<div class="line"><span class="keywordtype">int</span> main()</div>
<div class="line">{</div>
<div class="line"> std::cout &lt;&lt; <span class="stringliteral">&quot;Example could not be compiled &quot;</span></div>
<div class="line"> <span class="stringliteral">&quot;because nlohmann-json was not found.\n&quot;</span>;</div>
<div class="line">}</div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#endif // __has_include(&lt;nlohmann/json.hpp&gt;)</span></div>
</div><!-- fragment --> </div><!-- contents -->
<div class="ttc" id="anamespacemastodonpp_html"><div class="ttname"><a href="namespacemastodonpp.html">mastodonpp</a></div><div class="ttdoc">C++ wrapper for the Mastodon API.</div><div class="ttdef"><b>Definition:</b> api.hpp:24</div></div>
<div class="fragment"></div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>

View File

@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">mastodonpp
&#160;<span id="projectnumber">0.5.5</span>
&#160;<span id="projectnumber">0.5.7</span>
</div>
<div id="projectbrief">C++ wrapper for the Mastodon and Pleroma APIs.</div>
</td>