<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_10_thread_38737"  />
<title>rulinux.net - Форум - Talks - Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Talks - Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163959</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163959</guid>
<pubDate>Sun, 20 Jan 2013 02:51:07 +0400</pubDate>
<description><![CDATA[<p><i>>Что мне регистрировать? Как получить byte array, ведь MountPoints возвращается именно в таком виде, я проверял и в документации, и в мелкой программке на питоне. </i><br> Откуда Qt должна узнать, как это все надо маршаллить?<br><br> Вот только сейчас посмотрел qdbusviewer. Он просто показывает 4 числа - не знает как маршаллить. Вот вывод qdbus<br><br><fieldset><legend>bash</legend><code><br />
$ qdbus <span style="color: #660033;">--system</span> org.freedesktop.UDisks2 <span style="color: #000000; font-weight: bold;">/</span>org<span style="color: #000000; font-weight: bold;">/</span>freedesktop<span style="color: #000000; font-weight: bold;">/</span>UDisks2<span style="color: #000000; font-weight: bold;">/</span>block_devices<span style="color: #000000; font-weight: bold;">/</span>sda1 org.freedesktop.UDisks2.Filesystem.MountPoints <br />
qdbus: I don<span style="color: #ff0000;">'t know how to display an argument of type '</span>aay<span style="color: #ff0000;">', run with --literal.<br />
$ qdbus --system --literal &nbsp;org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda1 org.freedesktop.UDisks2.Filesystem.MountPoints <br />
[Variant: [Argument: aay {{47, 98, 111, 111, 116, 0}}]]<br />
</span></code></fieldset><br><br>Так что посмотри исходники qdbus</p>]]></description>
</item>
<item>
<title>Re:Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163957</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163957</guid>
<pubDate>Sun, 20 Jan 2013 02:32:12 +0400</pubDate>
<description><![CDATA[<p>На хрена оно тебе, ебани путинки и в прорубь. Так, сейчас, согласно статистики 70% населения этой страны делает, если смотреть гос. каналы.</p>]]></description>
</item>
<item>
<title>Re:Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163955</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163955</guid>
<pubDate>Sun, 20 Jan 2013 00:47:50 +0400</pubDate>
<description><![CDATA[<p><i>>Пойду пробовать gtkmm и glibmm</i><br> Попробовал. Ну что сказать. Сам gtkmm мне понравился, у него хорошая документация и приятный на вид API. Почти нет самодельных велосипедов, авторы рекомендуют пользоваться STL-ем, и вся библиотека рассчитана на работу с ним. Нету и аналога moc-а, и сигналы тоже реализованы на цпп. В общем, приятная штука.<br><br>Ну а glibmm... на вид тоже ничего, пока не столкнёшься с дбасом. Хотя может это дбас такой? В общем, добиться нормальной работы даже с результатом вызова GetManagedObjects у меня не вышло - вечно какие-то проблемы с типами. Либо я делаю как надо, и glib ругается на то, что у него тип gvariant-а не тот (например так: GLib-CRITICAL **: the GVariant format string `a{sa{sa{sv}}}' has a type of `a{sa{sa{sv}}}' but the given value has a type of `{oa{sa{sv}}}'), либо я вручную силой пытаюсь соблюсти тип, но оно не компилируется. В общем, либо у меня кривые руки (скорее всего), либо у них что-то не то (таки <a href="http://stackoverflow.com/questions/8977462/d-bus-udisks-and-glibmms-bindings">кто-то сталкивался с подобным</a>). А ещё у них дбасовский тип &quot;o&quot; и &quot;s&quot; должны быть одинаковыми, а варнинг всё равно выскакивает, бред какой-то. Плюс полное отсутствие документации на работу с дбасом и glibmm, только справочник по API и пара куцых примеров.<br><br>Ну его, в общем.<br><br></p>]]></description>
</item>
<item>
<title>Re:Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163939</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163939</guid>
<pubDate>Sat, 19 Jan 2013 16:33:46 +0400</pubDate>
<description><![CDATA[<p>Очевидно, последний годный фреймворк поражён раком. Так что сдохнет скоро, я считаю.</p>]]></description>
</item>
<item>
<title>Re:Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163938</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163938</guid>
<pubDate>Sat, 19 Jan 2013 16:22:48 +0400</pubDate>
<description><![CDATA[<p>Используй lua   - это будет православней.</p>]]></description>
</item>
<item>
<title>Быдлокодерство, Qt, D-Bus, UDisks2 и ненависть</title>
<link>https://rulinux.net/message.php?newsid=38737&amp;page=1#163936</link>
<guid>https://rulinux.net/message.php?newsid=38737&amp;page=1#163936</guid>
<pubDate>Sat, 19 Jan 2013 14:34:56 +0400</pubDate>
<description><![CDATA[<p>Настиг меня экзистенциальный кризис. Вместо того, чтобы выпить, я решил кое-что написать. По определённым причинам написать то, что хотел, не получилось, потому я пошел писать другое. И кончилось всё на работе с UDisks2 через D-Bus в приложении на Qt. <br><br>Так как на цпп я не писал уже очень давно, всё началось с беглого просмотра книжки Страуструпа и туториала по Qt. Ну да ладно, с кем не бывает. В общем, набросал что-то, вот небольшой кривой кусок (кривой - потому что это прототип, который переписывается раз в 10 минут, а не реальный код):<br><br><fieldset><legend>cpp-qt</legend><code><br />
<a href="http://doc.crossplatform.ru/qt/latest/qtextstream.html"><span style="color: #22aadd;">QTextStream</span></a> out<span style="color: #006E28;">&#40;</span><span style="color: #0057AE;">stdout</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
<a href="http://doc.crossplatform.ru/qt/latest/qdbusinterface.html"><span style="color: #22aadd;">QDBusInterface</span></a> <span style="color: #006E28;">*</span>interface <span style="color: #006E28;">=</span> <span style="color: #000000; font-weight:bold;">new</span> <a href="http://doc.crossplatform.ru/qt/latest/qdbusinterface.html"><span style="color: #22aadd;">QDBusInterface</span></a><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;org.freedesktop.UDisks2&quot;</span><span style="color: #006E28;">,</span> <span style="color: #BF0303;">&quot;/org/freedesktop/UDisks2&quot;</span><span style="color: #006E28;">,</span> <span style="color: #BF0303;">&quot;org.freedesktop.DBus.ObjectManager&quot;</span><span style="color: #006E28;">,</span> bus<span style="color: #006E28;">,</span> <span style="color: #000000; font-weight:bold;">this</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
<br />
QDBusPendingReply<span style="color: #006E28;">&lt;</span>DBusManagerStruct<span style="color: #006E28;">&gt;</span> reply <span style="color: #006E28;">=</span> interface<span style="color: #006E28;">-&gt;</span><span style="color: #2B74C7;">asyncCall</span><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;GetManagedObjects&quot;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
reply.<span style="color: #2B74C7;">waitForFinished</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
<br />
out <span style="color: #006E28;">&lt;&lt;</span> <span style="color: #BF0303;">&quot;reply finished&quot;</span> <span style="color: #006E28;">&lt;&lt;</span> endl<span style="color: #006E28;">;</span><br />
<span style="color: #000000; font-weight:bold;">if</span> <span style="color: #006E28;">&#40;</span>reply.<span style="color: #2B74C7;">isError</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#41;</span> &nbsp;<span style="color: #006E28;">&#123;</span> qDebug<span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span> <span style="color: #006E28;">&lt;&lt;</span> <span style="color: #BF0303;">&quot;Error: &quot;</span> <span style="color: #006E28;">&lt;&lt;</span> reply.<span style="color: #2B74C7;">error</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span> <span style="color: #2B74C7;">exit</span><span style="color: #006E28;">&#40;</span>0<span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span> <span style="color: #006E28;">&#125;</span><br />
out <span style="color: #006E28;">&lt;&lt;</span> <span style="color: #BF0303;">&quot;It works!&quot;</span> <span style="color: #006E28;">&lt;&lt;</span> endl<span style="color: #006E28;">;</span><br />
<br />
DBusManagerStruct items <span style="color: #006E28;">=</span> reply.<span style="color: #2B74C7;">value</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
DBusManagerStruct<span style="color: #006E28;">::</span><span style="color: #2B74C7;">const_iterator</span> i <span style="color: #006E28;">=</span> items.<span style="color: #2B74C7;">constBegin</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
<span style="color: #000000; font-weight:bold;">while</span> <span style="color: #006E28;">&#40;</span>i <span style="color: #006E28;">!=</span> items.<span style="color: #2B74C7;">constEnd</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#41;</span><br />
&nbsp; <span style="color: #006E28;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://doc.crossplatform.ru/qt/latest/qstring.html"><span style="color: #22aadd;">QString</span></a> path <span style="color: #006E28;">=</span> i.<span style="color: #2B74C7;">key</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span>.<span style="color: #2B74C7;">path</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight:bold;">if</span> <span style="color: #006E28;">&#40;</span>path.<span style="color: #2B74C7;">startsWith</span><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;/org/freedesktop/UDisks2/block_devices/&quot;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #006E28;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://doc.crossplatform.ru/qt/latest/qdbusinterface.html"><span style="color: #22aadd;">QDBusInterface</span></a> <span style="color: #006E28;">*</span>fsInterface <span style="color: #006E28;">=</span> <span style="color: #000000; font-weight:bold;">new</span> <a href="http://doc.crossplatform.ru/qt/latest/qdbusinterface.html"><span style="color: #22aadd;">QDBusInterface</span></a><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;org.freedesktop.UDisks2&quot;</span><span style="color: #006E28;">,</span> path<span style="color: #006E28;">,</span> <span style="color: #BF0303;">&quot;org.freedesktop.UDisks2.Filesystem&quot;</span><span style="color: #006E28;">,</span> bus<span style="color: #006E28;">,</span> <span style="color: #000000; font-weight:bold;">this</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #888888;">// А тут херня, которую тыкал уже наугад &nbsp; &nbsp; &nbsp;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ByteArrayList points <span style="color: #006E28;">=</span> qvariant_cast<span style="color: #006E28;">&lt;</span> ByteArrayList <span style="color: #006E28;">&gt;</span> <span style="color: #006E28;">&#40;</span>fsInterface<span style="color: #006E28;">-&gt;</span><span style="color: #2B74C7;">property</span><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;MountPoints&quot;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #006E28;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #006E28;">++</span>i<span style="color: #006E28;">;</span><br />
&nbsp; <span style="color: #006E28;">&#125;</span><br />
&nbsp;</code></fieldset><br><br>После кучи возни с регистрацией типов (не показана) вроде DBusManagerStruct и прочего (спасибо исходникам какой-то программы в интернете), эта штука хотя бы смогла запросить по дбасу список устройств. И нужно было получить MountPoints. Но тут вылезло вот такое:<br><br><div class="quote"><pre>QDBusAbstractInterface: type QDBusRawType&lt;0x616179&gt;* must be registered with QtDBus before it can be used to read property org.freedesktop.UDisks2.Filesystem.MountPoints</pre></div><br><br>Окей, сейчас зарегистрирую тип через qDBusRegisterMetaType и пойду дальше. Стоп, а что это за хрень вообще? Какой такой QDBusRawType? Что мне регистрировать? Как получить byte array, ведь MountPoints возвращается именно в таком виде, я проверял и в документации, и в мелкой программке на питоне. Ладно, пойдём почитаем умных людей, я-то быдлокодер, особенно на цпп. Расчехляем гугл. Ну есть туториал от КДЕ, которому я следую, и ещё какие-то блоги. Ну да ладно, не первый день в интернете.<br><br>В общем, находим <a href="http://comments.gmane.org/gmane.comp.lib.qt.general/40797">такую дискуссию</a>. Что мы видим оттуда, кроме немножко распухшего ЧСВ товарища Macieira? Да вот что:<br><br><div class="quote"><pre>The problem is that you cannot register this type (it has an ugly and impossible name). Please file a feature request in http://bugreports.qt.nokia.com to have QtDBus handle more gracefully complex properties.</pre></div><br><br>Идём смотреть дальше, и видим <a href="https://bugreports.qt-project.org/browse/QTBUG-18730?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">баг</a>, висящий с 2011-го года. И тишина. Ну естественно, эт вам не QML на js впиливать, это же не модно совсем.<br><br>Хорошо хоть добрый человек в дискуссии выложил свой <a href="https://gist.github.com/4572942">обходной метод</a>. Но каков метод! Эдак мне, чтобы получить одну сложную структуру по дбасу, надо писать вот такую простыню и закатывать солнце вручную? А если две структуры, ведь мне как раз надо будет доставать ещё кое-что? И это высокоуровневый тулкит, облегчающий работу? И это удобный дбас, являющийся стандартом на линуксовом десктопе? Да они там охренели все.<br><br>Пойду пробовать gtkmm и glibmm, хоть гтк и <a href="https://igurublog.wordpress.com/2012/11/05/gnome-et-al-rotting-in-threes/">скатывается</a>, но может там всё повеселее. </p>]]></description>
</item>
</channel>
</rss>