<?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:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cyberborean Chronicles &#187; python</title>
	<atom:link href="http://blog.cyberborean.org/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.cyberborean.org</link>
	<description>by Alex Alishevskikh</description>
	<lastBuildDate>Wed, 18 Jan 2012 07:52:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Getting new mail onto the desktop</title>
		<link>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop</link>
		<comments>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop#comments</comments>
		<pubDate>Tue, 12 Sep 2006 15:24:56 +0000</pubDate>
		<dc:creator>Alex Alishevskikh</dc:creator>
				<category><![CDATA[Essays]]></category>
		<category><![CDATA[Howtos]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[PIM]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cyberborean.wordpress.com/2006/09/12/getting-new-mail-onto-the-desktop/</guid>
		<description><![CDATA[I had nice last weekend gathering new harvest of apples, drinking fresh apple juice and playing with SuperKaramba widgets &#8211; a good opportunity to take a sort of &#8220;recreational programming&#8221;. Perhaps all modern KDE users know those nice resource eaters eye-candies which are living right on the desktop surface and displaying the clocks, calendars, weather [...]]]></description>
			<content:encoded><![CDATA[<p>I had nice last weekend gathering new harvest of apples, drinking fresh apple juice and playing with <a href="http://netdragon.sourceforge.net">SuperKaramba</a> widgets &#8211; a good opportunity to take a sort of &#8220;recreational programming&#8221;. Perhaps all modern KDE users know those nice <s>resource eaters</s> eye-candies which are living right on the desktop surface and displaying the clocks, calendars, weather forecasts, system monitors and so on.</p>
<p>Instead of developing some Yet Another Big Animated Clock, I decided to write something practical. What I&#8217;d like to have is a widget which would ask my e-mail client (<a href="http://kmail.kde.org">KMail</a>) for the headers of the latest unread messages to show them on the desktop.<br />
<span id="more-133"></span></p>
<p><img src="http://cyberborean.org/blog/wp-content/uploads/2006/09/skkmail.jpg" alt="skkmail.jpg" /></p>
<p>Two buttons in the top bar are for checking new mail from a server and for opening new message window. Clicking on the top bar somewhere else will open main KMail window.</p>
<p>SuperKaramba comes with a <a href="http://netdragon.sourceforge.net/api.html">Python API</a>, so everyone who is familiar with Pyton basics can write her own widget (aka &#8220;theme&#8221;) as a Python script. In my case, I wrote two scripts &#8211; one is for widget output and another as a simple KMail folder API wrapped around DCOP calls.</p>
<h3>Patching KMail</h3>
<p>There was a major problem &#8211; KMail DCOP interface had no a call to get unread message headers; only getting a number of them is possible. So I have had to dig into the KMail sourcecode (my current version is 1.9.4) for to add new function to FolderIFace interface (<code>folderIface.cpp</code>).</p>
<h4><code>kmail.diff:</code></h4>

<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">diff kmail/folderIface.cpp kmail_patched/folderIface.cpp
<span style="color: #440088;">147a148,162</span>
<span style="color: #00b000;">&gt; QStringList</span>
<span style="color: #00b000;">&gt; FolderIface::unreadMessageHeaders<span style="">&#40;</span><span style="">&#41;</span></span>
<span style="color: #00b000;">&gt; <span style="">&#123;</span></span>
<span style="color: #00b000;">&gt;      QStringList msgs;</span>
<span style="color: #00b000;">&gt;      mFolder-&gt;open<span style="">&#40;</span><span style="">&#41;</span>;</span>
<span style="color: #00b000;">&gt;      for<span style="">&#40;</span> int i = <span style="">0</span>; i &amp;amp;lt; mFolder-&gt;count<span style="">&#40;</span><span style="">&#41;</span>; i++<span style="">&#41;</span> <span style="">&#123;</span></span>
<span style="color: #00b000;">&gt;          KMMsgBase *msg = mFolder-&gt;getMsgBase<span style="">&#40;</span>i<span style="">&#41;</span>;</span>
<span style="color: #00b000;">&gt; 	     if <span style="">&#40;</span>msg-&gt;isNew<span style="">&#40;</span><span style="">&#41;</span> || msg-&gt;isUnread<span style="">&#40;</span><span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span></span>
<span style="color: #00b000;">&gt; 	       msgs.append<span style="">&#40;</span>msg-&gt;fromStrip<span style="">&#40;</span><span style="">&#41;</span> + &quot;\\t&quot; + msg-&gt;subject<span style="">&#40;</span><span style="">&#41;</span> + &quot;\\t&quot; + msg-&gt;dateStr<span style="">&#40;</span><span style="">&#41;</span><span style="">&#41;</span>;</span>
<span style="color: #00b000;">&gt;          <span style="">&#125;</span></span>
<span style="color: #00b000;">&gt;      <span style="">&#125;</span></span>
<span style="color: #00b000;">&gt;      mFolder-&gt;close<span style="">&#40;</span><span style="">&#41;</span>;</span>
<span style="color: #00b000;">&gt;      return msgs;</span>
<span style="color: #00b000;">&gt; <span style="">&#125;</span></span>
<span style="color: #00b000;">&gt;</span>
diff kmail/folderIface.h kmail_patched/folderIface.h
<span style="color: #440088;">61c61,62</span>
<span style="color: #991111;">&lt;</span>
<span style="color: #888822;">---
<span style="color: #00b000;">&gt;     virtual QStringList unreadMessageHeaders<span style="">&#40;</span><span style="">&#41;</span>;</span></span>
<span style="color: #00b000;">&gt;</span></pre></div></div>

<p>After adding new function header to <code>folderIface.h</code> and rebuilding KMail, new DCOP call &#8220;<code>kmail FolderIface unreadMessageHeaders</code>&#8221; became available to get the list of message headers in format &#8220;From/Subject/Date&#8221; divided by tab characters (<code>\t</code>).</p>
<h3>Sourcecode</h3>
<h4><code>skkmail.py</code>:</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> karamba
<span style="color: #ff7700;font-weight:bold;">import</span> kmail
&nbsp;
text = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
images = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
clickAreas = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Define widget area width here (height is adjusted automatically)</span>
s_width = <span style="color: #ff4500;">350</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># If an actual height is above this value, a widget area will be clipped</span>
maxHeight = <span style="color: #ff4500;">600</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Margins inside a widget area</span>
s_x = <span style="color: #ff4500;">10</span>
s_y = <span style="color: #ff4500;">10</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> _update<span style="color: black;">&#40;</span>widget<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">global</span> text, images, clickAreas, s_width, s_x, s_y
    x_gap = <span style="color: #ff4500;">10</span>
    y_gap = <span style="color: #ff4500;">4</span>
&nbsp;
    s_height = <span style="color: #ff4500;">14</span>
    s_col1 = <span style="color: black;">&#40;</span>s_width-x_gap<span style="color: black;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">0.66</span>
    s_col2 = s_width
    s_col3 = <span style="color: black;">&#40;</span>s_width-x_gap-<span style="color: #ff4500;">16</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">0.33</span>
&nbsp;
    folderFont = <span style="color: #483d8b;">&quot;Franklin Gothic Medium&quot;</span>
    folderFontSize = <span style="color: #ff4500;">14</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">for</span> t <span style="color: #ff7700;font-weight:bold;">in</span> text:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
          karamba.<span style="color: black;">deleteText</span><span style="color: black;">&#40;</span>widget, t<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span>:
          <span style="color: #ff7700;font-weight:bold;">pass</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> images:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
          karamba.<span style="color: black;">deleteImage</span><span style="color: black;">&#40;</span>widget, i<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span>:
          <span style="color: #ff7700;font-weight:bold;">pass</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> c <span style="color: #ff7700;font-weight:bold;">in</span> clickAreas:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
          karamba.<span style="color: black;">removeClickArea</span><span style="color: black;">&#40;</span>widget, c<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span>:
          <span style="color: #ff7700;font-weight:bold;">pass</span>
    text = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    images = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    clickAreas = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    folders = kmail.<span style="color: black;">getFolders</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    y = s_y + <span style="color: #ff4500;">25</span><span style="color: #66cc66;">;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> f <span style="color: #ff7700;font-weight:bold;">in</span> folders:
        msgs = f.<span style="color: black;">unreadMessages</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>msgs<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
            y0 = y
            t = karamba.<span style="color: black;">createText</span><span style="color: black;">&#40;</span>widget, s_x+<span style="color: #ff4500;">15</span>, y, s_width, s_height,
                f.<span style="color: black;">name</span>+<span style="color: #483d8b;">&quot; (&quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>msgs<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;)&quot;</span><span style="color: black;">&#41;</span>
            karamba.<span style="color: black;">changeTextFont</span><span style="color: black;">&#40;</span>widget, t, folderFont<span style="color: black;">&#41;</span>
            karamba.<span style="color: black;">changeTextSize</span><span style="color: black;">&#40;</span>widget, t, folderFontSize<span style="color: black;">&#41;</span>
            text.<span style="color: black;">append</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>
            images.<span style="color: black;">append</span><span style="color: black;">&#40;</span>karamba.<span style="color: black;">createImage</span><span style="color: black;">&#40;</span>widget, s_x-<span style="color: #ff4500;">10</span>, y, <span style="color: #483d8b;">&quot;icons/folder.png&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            y = y + s_height + y_gap<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span> +<span style="color: #ff4500;">10</span>
            <span style="color: #ff7700;font-weight:bold;">for</span> m <span style="color: #ff7700;font-weight:bold;">in</span> msgs:
                t = karamba.<span style="color: black;">createText</span><span style="color: black;">&#40;</span>widget, s_x+<span style="color: #ff4500;">20</span>, y, s_col1, s_height, m<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
                text.<span style="color: black;">append</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>
                t = karamba.<span style="color: black;">createText</span><span style="color: black;">&#40;</span>widget, s_x, y+s_height, s_col2, s_height, m<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
                text.<span style="color: black;">append</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>
                t = karamba.<span style="color: black;">createText</span><span style="color: black;">&#40;</span>widget, s_x+<span style="color: #ff4500;">20</span>+s_col1+x_gap, y, s_col3, s_height, m<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
                karamba.<span style="color: black;">setTextAlign</span><span style="color: black;">&#40;</span>widget, t, <span style="color: #483d8b;">&quot;RIGHT&quot;</span><span style="color: black;">&#41;</span>
                text.<span style="color: black;">append</span><span style="color: black;">&#40;</span>t<span style="color: black;">&#41;</span>
                images.<span style="color: black;">append</span><span style="color: black;">&#40;</span>karamba.<span style="color: black;">createImage</span><span style="color: black;">&#40;</span>widget, s_x, y, <span style="color: #483d8b;">&quot;icons/mail.png&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                y = y + s_height<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span> + y_gap<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>
            clickAreas.<span style="color: black;">append</span><span style="color: black;">&#40;</span>karamba.<span style="color: black;">createClickArea</span><span style="color: black;">&#40;</span>widget, s_x-<span style="color: #ff4500;">10</span>, y0, s_width, y-y0,
                <span style="color: #483d8b;">&quot;dcop kmail KMailIface selectFolder &quot;</span>+f.<span style="color: black;">path</span>+<span style="color: #483d8b;">&quot; &amp;&amp; kmail&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            y = y + y_gap<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>y <span style="color: #66cc66;">&lt;</span> maxHeight - <span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>:
        karamba.<span style="color: black;">resizeWidget</span><span style="color: black;">&#40;</span>widget, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>, y+<span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#this is called when you widget is initialized</span>
<span style="color: #ff7700;font-weight:bold;">def</span> initWidget<span style="color: black;">&#40;</span>widget<span style="color: black;">&#41;</span>:
    bgImage = karamba.<span style="color: black;">createBackgroundImage</span><span style="color: black;">&#40;</span>widget, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">5</span>, <span style="color: #483d8b;">&quot;icons/bg.png&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">resizeImage</span><span style="color: black;">&#40;</span>widget, bgImage, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
    logo = karamba.<span style="color: black;">createImage</span><span style="color: black;">&#40;</span>widget, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #483d8b;">&quot;icons/kmail.png&quot;</span><span style="color: black;">&#41;</span>
    t = karamba.<span style="color: black;">createText</span><span style="color: black;">&#40;</span>widget, <span style="color: #ff4500;">35</span>, <span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">100</span>, <span style="color: #ff4500;">20</span>, <span style="color: #483d8b;">&quot;new mail&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">changeTextFont</span><span style="color: black;">&#40;</span>widget, t, <span style="color: #483d8b;">&quot;Franklin Gothic Medium&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">changeTextSize</span><span style="color: black;">&#40;</span>widget, t, <span style="color: #ff4500;">16</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">createClickArea</span><span style="color: black;">&#40;</span>widget, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">100</span>, <span style="color: #ff4500;">30</span>, <span style="color: #483d8b;">&quot;kmail&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">createImage</span><span style="color: black;">&#40;</span>widget, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">18</span>, <span style="color: #ff4500;">7</span>, <span style="color: #483d8b;">&quot;icons/mail_get.png&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">createClickArea</span><span style="color: black;">&#40;</span>widget, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">18</span>, <span style="color: #ff4500;">7</span>, <span style="color: #ff4500;">16</span>, <span style="color: #ff4500;">16</span>, <span style="color: #483d8b;">&quot;dcop kmail KMailIface checkMail&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">createImage</span><span style="color: black;">&#40;</span>widget, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">40</span>, <span style="color: #ff4500;">7</span>, <span style="color: #483d8b;">&quot;icons/mail_new.png&quot;</span><span style="color: black;">&#41;</span>
    karamba.<span style="color: black;">createClickArea</span><span style="color: black;">&#40;</span>widget, s_width+s_x<span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span>-<span style="color: #ff4500;">40</span>, <span style="color: #ff4500;">7</span>, <span style="color: #ff4500;">16</span>, <span style="color: #ff4500;">16</span>,
        <span style="color: #483d8b;">&quot;dcop kmail KMailIface openComposer '' '' '' '' '' ''&quot;</span><span style="color: black;">&#41;</span>
    _update<span style="color: black;">&#40;</span>widget<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#this is called everytime your widget is updated</span>
<span style="color: #808080; font-style: italic;">#the update inverval is specified in the .theme file</span>
<span style="color: #ff7700;font-weight:bold;">def</span> widgetUpdated<span style="color: black;">&#40;</span>widget<span style="color: black;">&#41;</span>:
    _update<span style="color: black;">&#40;</span>widget<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#This gets called everytime our widget is clicked.</span>
<span style="color: #808080; font-style: italic;"># Middle button click forces to check new mail</span>
<span style="color: #ff7700;font-weight:bold;">def</span> widgetClicked<span style="color: black;">&#40;</span>widget, x, y, button<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>button == <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>:
        kmail.<span style="color: black;">dcopCall</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;kmail KMailIface checkMail&quot;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h4><code>kmail.py:</code></h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">subprocess</span>, <span style="color: #dc143c;">string</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> dcopCall<span style="color: black;">&#40;</span>call<span style="color: black;">&#41;</span>:
  <span style="color: #dc143c;">cmd</span> = <span style="color: #483d8b;">&quot;dcop &quot;</span>+call
  pipe = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span>, shell=<span style="color: #008000;">True</span>, bufsize=<span style="color: #ff4500;">1024</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>.<span style="color: black;">stdout</span>
  res = pipe.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  pipe.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> res
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Folder:
  path = <span style="color: #483d8b;">&quot;&quot;</span>
  name = <span style="color: #483d8b;">&quot;&quot;</span>
  unreadCount = <span style="color: #ff4500;">0</span>
  unreadMessages = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, path<span style="color: black;">&#41;</span>:
    dcopCall<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;kmail KMailIface getFolder &quot;</span>+path<span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">path</span> = path
    <span style="color: #008000;">self</span>.<span style="color: black;">unreadMessages</span> = <span style="color: #008000;">self</span>.<span style="color: black;">getUnreadMessages</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> getUnreadMessages<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    r = dcopCall<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;kmail FolderIface unreadMessageHeaders&quot;</span><span style="color: black;">&#41;</span>
    ss = <span style="color: #dc143c;">string</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span>r, <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: black;">&#41;</span>
    msg = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> s <span style="color: #ff7700;font-weight:bold;">in</span> ss:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
            msg.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">string</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span>s, <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>t&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    unreadCount = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>msg<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>unreadCount <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">name</span> = <span style="color: #dc143c;">string</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span>dcopCall<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;kmail FolderIface displayName&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    msg.<span style="color: black;">reverse</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> msg
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> getFolders<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    r = dcopCall<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;kmail KMailIface folderList&quot;</span><span style="color: black;">&#41;</span>
    folders = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> f <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">string</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span>r, <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span><span style="color: black;">&#41;</span>:
        folders.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Folder<span style="color: black;">&#40;</span>f<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> folders</pre></td></tr></table></div>

<h4><code>skkmail.theme:</code></h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># you can change initial widget position, area size and updatin interval (default = 1min)</span>
karamba x=<span style="color: #ff4500;">100</span> y=<span style="color: #ff4500;">100</span> w=<span style="color: #ff4500;">400</span> h=<span style="color: #ff4500;">200</span> interval=<span style="color: #ff4500;">60000</span>
defaultfont font=<span style="color: #483d8b;">&quot;Franklin Gothic Book&quot;</span> fontsize=<span style="color: #ff4500;">12</span> color=<span style="color: #ff4500;">230</span>,<span style="color: #ff4500;">230</span>,<span style="color: #ff4500;">230</span></pre></td></tr></table></div>

<p>All code above is <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>&#8216;ed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyberborean.org/2006/09/12/getting-new-mail-onto-the-desktop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

