Merge lp:~isak-karlsson/docky/gcalendar into lp:docky
- gcalendar
- Merge into trunk
Status: | Needs review |
---|---|
Proposed branch: | lp:~isak-karlsson/docky/gcalendar |
Merge into: | lp:docky |
Diff against target: |
1508 lines (+1320/-5) 20 files modified
Docky-2.sln (+5/-0) Docky/Docky.csproj (+1/-1) StandardPlugins/GCalendar/GCalendar.csproj (+121/-0) StandardPlugins/GCalendar/Makefile.am (+35/-0) StandardPlugins/GCalendar/Resources/GCalendar.addin.xml.in (+22/-0) StandardPlugins/GCalendar/gtk-gui/generated.cs (+35/-0) StandardPlugins/GCalendar/gtk-gui/gui.stetic (+22/-0) StandardPlugins/GCalendar/src/GCalendarAtom.cs (+389/-0) StandardPlugins/GCalendar/src/GCalendarCalendarConfig.cs (+148/-0) StandardPlugins/GCalendar/src/GCalendarDockItem.cs (+202/-0) StandardPlugins/GCalendar/src/GCalendarErrorArgs.cs (+31/-0) StandardPlugins/GCalendar/src/GCalendarItemProvider.cs (+65/-0) StandardPlugins/GCalendar/src/GCalendarLoginConfig.cs (+53/-0) StandardPlugins/GCalendar/src/GCalendarMenuItem.cs (+33/-0) StandardPlugins/GCalendar/src/GCalendarPreferences.cs (+144/-0) StandardPlugins/Makefile.am (+2/-0) StandardPlugins/Weather/gtk-gui/WeatherDocklet.WeatherConfig.cs (+1/-1) configure.ac (+6/-0) data/icons/hicolor/128x128/apps/Makefile.am (+2/-2) dbus-api/mono/DockyHelper/DockyHelper.csproj (+3/-1) |
To merge this branch: | bzr merge lp:~isak-karlsson/docky/gcalendar |
Related bugs: | |
Related blueprints: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Docky Core | Pending | ||
Review via email: mp+16979@code.launchpad.net |
Commit message
Description of the change
isakkarlsson (isak-karlsson) wrote : | # |
docky.pot is not changed.
- 1023. By isakkarlsson
-
reverted docky.pot
- 1024. By isakkarlsson
-
merge trunk
- 1025. By isakkarlsson
-
Forgot to add this one
- 1026. By isakkarlsson
-
Merge trunk
- 1027. By isakkarlsson
-
Merge trunk
- 1028. By isakkarlsson
-
Added prefernces. One to change in gconf, the update interval, and one in the settings window, how may days in the future to show. Enhanced the interface. Shows <label> - <date> | today | tomorrow in Separator. Hence each day is separated. Futhermore is the config window enhanced somewhat.
- 1029. By isakkarlsson
-
Fix: Separtor string, and hang issue
- 1030. By isakkarlsson
-
Purge the hang issue
- 1031. By isakkarlsson
-
Fix: - Multiplying items on multiple logins.
- New config: Open other client. Only available in gconf.
- More user friendly error messages. - 1032. By isakkarlsson
-
Merge trunk
- 1033. By isakkarlsson
-
Merge trunk
- 1034. By isakkarlsson
-
remove docky.py
- 1035. By isakkarlsson
-
Fixed login bug.
- 1036. By isakkarlsson
-
Merge trunk
Robert Dyer (psybers) wrote : | # |
Would it make more sense to just let users add any ICal address? This might make setting up multiple calendars a bit more cumbersome (as you have to find the private address for each one, copy it, paste it into Docky) but it would also allow you to support any calendaring site that publishes in ICal.
This would also remove your dep on the gcal libraries, which most users wont have.
isakkarlsson (isak-karlsson) wrote : | # |
> Would it make more sense to just let users add any ICal address? This might
> make setting up multiple calendars a bit more cumbersome (as you have to find
> the private address for each one, copy it, paste it into Docky) but it would
> also allow you to support any calendaring site that publishes in ICal.
>
> This would also remove your dep on the gcal libraries, which most users wont
> have.
True. But I thought, as with GMail-docklet (which could have used IMAP/POP3 or so for greater flexibility) that simple is better, and a tight integration was a good thing. But as you say, the GData dep is bad..
Possibly, if I find time, I could branch this one and just parse some iCal instead and change the config dialog. As well as the name =).
Unmerged revisions
- 1036. By isakkarlsson
-
Merge trunk
- 1035. By isakkarlsson
-
Fixed login bug.
- 1034. By isakkarlsson
-
remove docky.py
- 1033. By isakkarlsson
-
Merge trunk
- 1032. By isakkarlsson
-
Merge trunk
- 1031. By isakkarlsson
-
Fix: - Multiplying items on multiple logins.
- New config: Open other client. Only available in gconf.
- More user friendly error messages. - 1030. By isakkarlsson
-
Purge the hang issue
- 1029. By isakkarlsson
-
Fix: Separtor string, and hang issue
- 1028. By isakkarlsson
-
Added prefernces. One to change in gconf, the update interval, and one in the settings window, how may days in the future to show. Enhanced the interface. Shows <label> - <date> | today | tomorrow in Separator. Hence each day is separated. Futhermore is the config window enhanced somewhat.
- 1027. By isakkarlsson
-
Merge trunk
Preview Diff
1 | === modified file 'Docky-2.sln' |
2 | --- Docky-2.sln 2010-01-15 11:18:28 +0000 |
3 | +++ Docky-2.sln 2010-02-15 17:13:20 +0000 |
4 | @@ -35,6 +35,8 @@ |
5 | EndProject |
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NPR", "StandardPlugins\NPR\NPR.csproj", "{C65612E7-55E9-4B63-BB47-5DFD4ACE80E5}" |
7 | EndProject |
8 | +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GCalendar", "StandardPlugins\GCalendar\GCalendar.csproj", "{D26454DC-88CD-461D-8A94-5CEFEE1554A3}" |
9 | +EndProject |
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Docky.Widgets", "Docky.Widgets\Docky.Widgets.csproj", "{9CF2F475-7848-4333-9A35-93E8224653B3}" |
11 | EndProject |
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Docky.DBus", "Docky.DBus\Docky.DBus.csproj", "{487D3B93-FAAF-4734-B337-85810A60ACCF}" |
13 | @@ -125,6 +127,8 @@ |
14 | {FF0B1BB8-6069-4074-BF42-A138D1F99D89}.Debug|Any CPU.Build.0 = Debug|Any CPU |
15 | {FF0B1BB8-6069-4074-BF42-A138D1F99D89}.Release|Any CPU.ActiveCfg = Release|Any CPU |
16 | {FF0B1BB8-6069-4074-BF42-A138D1F99D89}.Release|Any CPU.Build.0 = Release|Any CPU |
17 | + |
18 | + |
19 | EndGlobalSection |
20 | GlobalSection(NestedProjects) = preSolution |
21 | {4AC9784E-7AAA-467D-BF8F-D15B8FB88708} = {8D4EE2FA-9CF2-4890-B14A-1BA8752404FE} |
22 | @@ -138,6 +142,7 @@ |
23 | {74197632-9339-426E-B947-DE34766931E1} = {8D4EE2FA-9CF2-4890-B14A-1BA8752404FE} |
24 | {C4C77D82-2659-4F06-9AD9-08AC0BAD8C1A} = {8D4EE2FA-9CF2-4890-B14A-1BA8752404FE} |
25 | {C65612E7-55E9-4B63-BB47-5DFD4ACE80E5} = {8D4EE2FA-9CF2-4890-B14A-1BA8752404FE} |
26 | + {D26454DC-88CD-461D-8A94-5CEFEE1554A3} = {8D4EE2FA-9CF2-4890-B14A-1BA8752404FE} |
27 | {FE00A354-A298-4966-9E7A-0BBEAE63FC94} = {A48D9B91-890B-4377-91B5-82E1D9797482} |
28 | EndGlobalSection |
29 | GlobalSection(MonoDevelopProperties) = preSolution |
30 | |
31 | === modified file 'Docky/Docky.csproj' |
32 | --- Docky/Docky.csproj 2010-02-14 18:32:48 +0000 |
33 | +++ Docky/Docky.csproj 2010-02-15 17:13:20 +0000 |
34 | @@ -140,7 +140,7 @@ |
35 | <Reference Include="Mono.GetOptions" /> |
36 | <Reference Include="gio-sharp, Version=2.14.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
37 | <SpecificVersion>False</SpecificVersion> |
38 | - <HintPath>..\build\gio-sharp.dll</HintPath> |
39 | + <HintPath>..\..\..\.local\lib\docky\gio-sharp.dll</HintPath> |
40 | </Reference> |
41 | </ItemGroup> |
42 | <ItemGroup> |
43 | |
44 | === added directory 'StandardPlugins/GCalendar' |
45 | === added file 'StandardPlugins/GCalendar/GCalendar.csproj' |
46 | --- StandardPlugins/GCalendar/GCalendar.csproj 1970-01-01 00:00:00 +0000 |
47 | +++ StandardPlugins/GCalendar/GCalendar.csproj 2010-02-15 17:13:20 +0000 |
48 | @@ -0,0 +1,121 @@ |
49 | +<?xml version="1.0" encoding="utf-8"?> |
50 | +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> |
51 | + <PropertyGroup> |
52 | + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
53 | + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
54 | + <ProductVersion>9.0.21022</ProductVersion> |
55 | + <SchemaVersion>2.0</SchemaVersion> |
56 | + <ProjectGuid>{D26454DC-88CD-461D-8A94-5CEFEE1554A3}</ProjectGuid> |
57 | + <OutputType>Library</OutputType> |
58 | + <RootNamespace>GCalendar</RootNamespace> |
59 | + <AssemblyName>GCalendar</AssemblyName> |
60 | + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> |
61 | + <ReleaseVersion>2.0</ReleaseVersion> |
62 | + </PropertyGroup> |
63 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
64 | + <DebugSymbols>true</DebugSymbols> |
65 | + <DebugType>full</DebugType> |
66 | + <Optimize>false</Optimize> |
67 | + <OutputPath>bin\Debug</OutputPath> |
68 | + <DefineConstants>DEBUG</DefineConstants> |
69 | + <ErrorReport>prompt</ErrorReport> |
70 | + <WarningLevel>4</WarningLevel> |
71 | + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
72 | + </PropertyGroup> |
73 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
74 | + <DebugType>none</DebugType> |
75 | + <Optimize>false</Optimize> |
76 | + <OutputPath>bin\Release</OutputPath> |
77 | + <ErrorReport>prompt</ErrorReport> |
78 | + <WarningLevel>4</WarningLevel> |
79 | + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> |
80 | + </PropertyGroup> |
81 | + <ItemGroup> |
82 | + <Reference Include="System" /> |
83 | + <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
84 | + <SpecificVersion>False</SpecificVersion> |
85 | + </Reference> |
86 | + <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
87 | + <SpecificVersion>False</SpecificVersion> |
88 | + </Reference> |
89 | + <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
90 | + <SpecificVersion>False</SpecificVersion> |
91 | + </Reference> |
92 | + <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
93 | + <SpecificVersion>False</SpecificVersion> |
94 | + </Reference> |
95 | + <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
96 | + <SpecificVersion>False</SpecificVersion> |
97 | + </Reference> |
98 | + <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> |
99 | + <SpecificVersion>False</SpecificVersion> |
100 | + </Reference> |
101 | + <Reference Include="Mono.Posix" /> |
102 | + <Reference Include="Google.GData.Extensions, Version=1.4.0.2, Culture=neutral, PublicKeyToken=0b4c5df2ebf20876"> |
103 | + <Package>gdata-sharp-core</Package> |
104 | + </Reference> |
105 | + <Reference Include="Google.GData.Calendar, Version=1.4.0.2, Culture=neutral, PublicKeyToken=aa6748391206b888"> |
106 | + <Package>gdata-sharp-calendar</Package> |
107 | + </Reference> |
108 | + <Reference Include="System.Xml" /> |
109 | + <Reference Include="System.Xml.Linq"> |
110 | + <RequiredTargetFramework>3.5</RequiredTargetFramework> |
111 | + </Reference> |
112 | + <Reference Include="System.Data.Linq"> |
113 | + <RequiredTargetFramework>3.5</RequiredTargetFramework> |
114 | + </Reference> |
115 | + <Reference Include="Google.GData.Client, Version=1.4.0.2, Culture=neutral, PublicKeyToken=04a59ca9b0273830"> |
116 | + <Package>gdata-sharp-core</Package> |
117 | + </Reference> |
118 | + <Reference Include="System.Core" /> |
119 | + </ItemGroup> |
120 | + <ItemGroup> |
121 | + <EmbeddedResource Include="gtk-gui\gui.stetic"> |
122 | + <LogicalName>gui.stetic</LogicalName> |
123 | + </EmbeddedResource> |
124 | + </ItemGroup> |
125 | + <ItemGroup> |
126 | + <Compile Include="gtk-gui\generated.cs" /> |
127 | + <Compile Include="src\GCalendarItemProvider.cs" /> |
128 | + <Compile Include="src\GCalendarAtom.cs" /> |
129 | + <Compile Include="src\GCalendarDockItem.cs" /> |
130 | + <Compile Include="src\GCalendarMenuItem.cs" /> |
131 | + <Compile Include="src\GCalendarPreferences.cs" /> |
132 | + <Compile Include="src\GCalendarLoginConfig.cs" /> |
133 | + <Compile Include="gtk-gui\src.GCalendarCalendarConfig.cs" /> |
134 | + <Compile Include="src\GCalendarCalendarConfig.cs" /> |
135 | + <Compile Include="src\GCalendarErrorArgs.cs" /> |
136 | + </ItemGroup> |
137 | + <ItemGroup> |
138 | + <Folder Include="src\" /> |
139 | + </ItemGroup> |
140 | + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> |
141 | + <ItemGroup> |
142 | + <None Include="Resources\GCalendar.addin.xml" /> |
143 | + </ItemGroup> |
144 | + <ProjectExtensions> |
145 | + <MonoDevelop> |
146 | + <Properties> |
147 | + <Deployment.LinuxDeployData generateScript="false" /> |
148 | + </Properties> |
149 | + </MonoDevelop> |
150 | + </ProjectExtensions> |
151 | + <ItemGroup> |
152 | + <ProjectReference Include="..\..\Docky.Items\Docky.Items.csproj"> |
153 | + <Project>{AB6E0EDD-6443-4F99-9EAC-DABC906F080D}</Project> |
154 | + <Name>Docky.Items</Name> |
155 | + </ProjectReference> |
156 | + <ProjectReference Include="..\..\Docky.Services\Docky.Services.csproj"> |
157 | + <Project>{8A6E0EDD-6443-4F99-9EAC-D9CC906F080D}</Project> |
158 | + <Name>Docky.Services</Name> |
159 | + </ProjectReference> |
160 | + <ProjectReference Include="..\..\Docky.Widgets\Docky.Widgets.csproj"> |
161 | + <Project>{9CF2F475-7848-4333-9A35-93E8224653B3}</Project> |
162 | + <Name>Docky.Widgets</Name> |
163 | + </ProjectReference> |
164 | + <ProjectReference Include="..\GMail\GMail.csproj"> |
165 | + <Project>{58A2F667-86BF-4128-B442-77C6D14C89A4}</Project> |
166 | + <Name>GMail</Name> |
167 | + </ProjectReference> |
168 | + </ItemGroup> |
169 | +</Project> |
170 | \ No newline at end of file |
171 | |
172 | === added file 'StandardPlugins/GCalendar/Makefile.am' |
173 | --- StandardPlugins/GCalendar/Makefile.am 1970-01-01 00:00:00 +0000 |
174 | +++ StandardPlugins/GCalendar/Makefile.am 2010-02-15 17:13:20 +0000 |
175 | @@ -0,0 +1,35 @@ |
176 | +# Simple component buildsystem |
177 | +include $(top_srcdir)/build.rules.docklets.mk |
178 | + |
179 | +ASSEMBLY = GCalendar |
180 | + |
181 | +FILES = \ |
182 | + src/GCalendarAtom.cs \ |
183 | + src/GCalendarDockItem.cs \ |
184 | + src/GCalendarItemProvider.cs \ |
185 | + src/GCalendarMenuItem.cs \ |
186 | + src/GCalendarPreferences.cs \ |
187 | + src/GCalendarLoginConfig.cs \ |
188 | + src/GCalendarCalendarConfig.cs \ |
189 | + src/GCalendarErrorArgs.cs |
190 | + |
191 | + |
192 | +RESOURCES = \ |
193 | + Resources/GCalendar.addin.xml |
194 | + |
195 | +PROJECT_REFERENCES= \ |
196 | + Docky.CairoHelper \ |
197 | + Docky.Items \ |
198 | + Docky.Services \ |
199 | + Docky.Widgets |
200 | + |
201 | +REFERENCES = \ |
202 | + System \ |
203 | + System.Core \ |
204 | + System.Xml \ |
205 | + System.Xml.Linq \ |
206 | + Mono.Posix \ |
207 | + $(MONO_CAIRO_LIBS) \ |
208 | + $(GTK_SHARP_20_LIBS) \ |
209 | + $(GDATA_SHARP_CALENDAR_LIBS) \ |
210 | + $(GDATA_SHARP_CORE_LIBS) |
211 | |
212 | === added directory 'StandardPlugins/GCalendar/Resources' |
213 | === added file 'StandardPlugins/GCalendar/Resources/GCalendar.addin.xml.in' |
214 | --- StandardPlugins/GCalendar/Resources/GCalendar.addin.xml.in 1970-01-01 00:00:00 +0000 |
215 | +++ StandardPlugins/GCalendar/Resources/GCalendar.addin.xml.in 2010-02-15 17:13:20 +0000 |
216 | @@ -0,0 +1,22 @@ |
217 | +<Addin |
218 | + id="GCalendar" |
219 | + namespace="Docky" |
220 | + version="1.0" |
221 | + isroot="false" |
222 | + defaultEnabled="false" |
223 | + name="GCalendar" |
224 | +> |
225 | + |
226 | + <Dependencies> |
227 | + <Addin id="Items" version="1.0" /> |
228 | + </Dependencies> |
229 | + |
230 | + <Runtime> |
231 | + <Import assembly="GCalendar.dll"/> |
232 | + </Runtime> |
233 | + |
234 | + <Extension path="/Docky/ItemProvider"> |
235 | + <ItemProvider type="GCalendar.GCalendarItemProvider" /> |
236 | + </Extension> |
237 | + |
238 | +</Addin> |
239 | |
240 | === added file 'StandardPlugins/GCalendar/Resources/GMail.addin.xml.in' |
241 | === added directory 'StandardPlugins/GCalendar/gtk-gui' |
242 | === added file 'StandardPlugins/GCalendar/gtk-gui/generated.cs' |
243 | --- StandardPlugins/GCalendar/gtk-gui/generated.cs 1970-01-01 00:00:00 +0000 |
244 | +++ StandardPlugins/GCalendar/gtk-gui/generated.cs 2010-02-15 17:13:20 +0000 |
245 | @@ -0,0 +1,35 @@ |
246 | +// ------------------------------------------------------------------------------ |
247 | +// <autogenerated> |
248 | +// This code was generated by a tool. |
249 | +// |
250 | +// |
251 | +// Changes to this file may cause incorrect behavior and will be lost if |
252 | +// the code is regenerated. |
253 | +// </autogenerated> |
254 | +// ------------------------------------------------------------------------------ |
255 | + |
256 | +namespace Stetic { |
257 | + |
258 | + |
259 | + internal class Gui { |
260 | + |
261 | + private static bool initialized; |
262 | + |
263 | + internal static void Initialize(Gtk.Widget iconRenderer) { |
264 | + if ((Stetic.Gui.initialized == false)) { |
265 | + Stetic.Gui.initialized = true; |
266 | + } |
267 | + } |
268 | + } |
269 | + |
270 | + internal class ActionGroups { |
271 | + |
272 | + public static Gtk.ActionGroup GetActionGroup(System.Type type) { |
273 | + return Stetic.ActionGroups.GetActionGroup(type.FullName); |
274 | + } |
275 | + |
276 | + public static Gtk.ActionGroup GetActionGroup(string name) { |
277 | + return null; |
278 | + } |
279 | + } |
280 | +} |
281 | |
282 | === added file 'StandardPlugins/GCalendar/gtk-gui/gui.stetic' |
283 | --- StandardPlugins/GCalendar/gtk-gui/gui.stetic 1970-01-01 00:00:00 +0000 |
284 | +++ StandardPlugins/GCalendar/gtk-gui/gui.stetic 2010-02-15 17:13:20 +0000 |
285 | @@ -0,0 +1,22 @@ |
286 | +<?xml version="1.0" encoding="utf-8"?> |
287 | +<stetic-interface> |
288 | + <configuration> |
289 | + <images-root-path>..</images-root-path> |
290 | + <target-gtk-version>2.12</target-gtk-version> |
291 | + </configuration> |
292 | + <import> |
293 | + <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> |
294 | + <widget-library name="../../../Docky.Items/bin/Debug/Docky.Items.dll" /> |
295 | + <widget-library name="../../../Docky.Services/bin/Debug/Docky.Services.dll" /> |
296 | + <widget-library name="../../../Docky.Widgets/bin/Debug/Docky.Widgets.dll" /> |
297 | + <widget-library name="../bin/Debug/GCalendar.dll" internal="true" /> |
298 | + <widget-library name="../../GMail/bin/Debug/GMail.dll" /> |
299 | + </import> |
300 | + <widget class="Gtk.Bin" id="src.GCalendarCalendarConfig" design-size="300 300"> |
301 | + <property name="MemberName" /> |
302 | + <property name="Visible">False</property> |
303 | + <child> |
304 | + <placeholder /> |
305 | + </child> |
306 | + </widget> |
307 | +</stetic-interface> |
308 | \ No newline at end of file |
309 | |
310 | === added directory 'StandardPlugins/GCalendar/src' |
311 | === added file 'StandardPlugins/GCalendar/src/GCalendarAtom.cs' |
312 | --- StandardPlugins/GCalendar/src/GCalendarAtom.cs 1970-01-01 00:00:00 +0000 |
313 | +++ StandardPlugins/GCalendar/src/GCalendarAtom.cs 2010-02-15 17:13:20 +0000 |
314 | @@ -0,0 +1,389 @@ |
315 | +// |
316 | +// Copyright (C) 2009 Jason Smith |
317 | +// |
318 | +// This program is free software: you can redistribute it and/or modify |
319 | +// it under the terms of the GNU General Public License as published by |
320 | +// the Free Software Foundation, either version 3 of the License, or |
321 | +// (at your option) any later version. |
322 | +// |
323 | +// This program is distributed in the hope that it will be useful, |
324 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
325 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
326 | +// GNU General Public License for more details. |
327 | +// |
328 | +// You should have received a copy of the GNU General Public License |
329 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
330 | +// |
331 | + |
332 | +using System; |
333 | +using System.Collections.Generic; |
334 | +using Google.GData.Calendar; |
335 | +using Google.GData.Client; |
336 | +using Google.GData.Extensions; |
337 | + |
338 | +using Gtk; |
339 | + |
340 | +using Mono.Unix; |
341 | + |
342 | +using Docky.Services; |
343 | +using Docky.Widgets; |
344 | +using System.Net; |
345 | + |
346 | +namespace GCalendar |
347 | +{ |
348 | + class CertHandler : System.Net.ICertificatePolicy |
349 | + { |
350 | + public bool CheckValidationResult (System.Net.ServicePoint srvPoint, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Net.WebRequest request, int certificateProblem) |
351 | + { |
352 | + return true; |
353 | + } |
354 | + } |
355 | + |
356 | + public class GCalendarCalendar |
357 | + { |
358 | + public DateTime When { get; set; } |
359 | + public string Name { get; set; } |
360 | + public List<GCalendarEvent> Entries { get; set; } |
361 | + |
362 | + public GCalendarCalendar (string name) |
363 | + { |
364 | + Name = name; |
365 | + Entries = new List<GCalendarEvent> (); |
366 | + } |
367 | + } |
368 | + |
369 | + public struct GCalendarEvent |
370 | + { |
371 | + public DateTime DateFrom; |
372 | + public DateTime DateTo; |
373 | + public string Title; |
374 | + public string Location; |
375 | + public string Link; |
376 | + |
377 | + public static GCalendarEvent FromEventEntry (EventEntry entry) |
378 | + { |
379 | + GCalendarEvent data = new GCalendarEvent (); |
380 | + if (entry.Times.Count > 0) { |
381 | + data.DateFrom = entry.Times[0].StartTime; |
382 | + data.DateTo = entry.Times[0].EndTime; |
383 | + } else { |
384 | + data.DateFrom = DateTime.Now; |
385 | + data.DateTo = DateTime.Now; |
386 | + } |
387 | + |
388 | + data.Title = entry.Title.Text; |
389 | + if (entry.Locations.Count > 0) |
390 | + data.Location = entry.Locations[0].Label; |
391 | + else |
392 | + data.Location = "Unknown"; |
393 | + |
394 | + data.Link = entry.Id.AbsoluteUri; |
395 | + |
396 | + return data; |
397 | + } |
398 | + } |
399 | + |
400 | + public enum GCalendarState |
401 | + { |
402 | + Reloading = 0, |
403 | + ManualReload, |
404 | + Ok, |
405 | + Error |
406 | + } |
407 | + |
408 | + public class GCalendarAtom |
409 | + { |
410 | + |
411 | + static event EventHandler SettingChanged; |
412 | + |
413 | + public event EventHandler CalendarUpdated; |
414 | + public event EventHandler CalendarUpdating; |
415 | + public event EventHandler<GCalendarErrorArgs> CalendarError; |
416 | + |
417 | + private static ConfigDialog dialog; |
418 | + public static readonly char Separator = ((char) 7); |
419 | + //Beep char.. |
420 | + private List<GCalendarCalendar> data = new List<GCalendarCalendar> (); |
421 | + |
422 | + public static void Reload () |
423 | + { |
424 | + if (SettingChanged != null) |
425 | + SettingChanged (null, EventArgs.Empty); |
426 | + } |
427 | + |
428 | + public static void Config () |
429 | + { |
430 | + if (dialog == null) { |
431 | + dialog = new ConfigDialog (Catalog.GetString ("GCalendar Configurations"), new Widget[] { |
432 | + new GCalendarLoginConfig (), |
433 | + new GCalendarCalendarConfig () |
434 | + }); |
435 | + } |
436 | + |
437 | + dialog.Show (); |
438 | + } |
439 | + |
440 | + public static bool Validate (string username, string passwd) |
441 | + { |
442 | + CalendarService service = new CalendarService ("Docky_GCalendar_Docklet"); |
443 | + service.setUserCredentials (username, passwd); |
444 | + |
445 | + try { |
446 | + CalendarQuery query = new CalendarQuery ("http://www.google.com/calendar/feeds/default/owncalendars/full"); |
447 | + CalendarFeed feed = service.Query (query); |
448 | + } catch (Exception e) { |
449 | + Log<GCalendarAtom>.Debug (e.Message); |
450 | + return false; |
451 | + } |
452 | + |
453 | + return true; |
454 | + } |
455 | + |
456 | + public static string[] Calendars { |
457 | + get { |
458 | + try { |
459 | + CalendarService service = new CalendarService ("Docky_GCalendar_Docklet"); |
460 | + service.setUserCredentials (GCalendarPreferences.Username, GCalendarPreferences.Password); |
461 | + |
462 | + CalendarQuery query = new CalendarQuery ("http://www.google.com/calendar/feeds/default/owncalendars/full"); |
463 | + CalendarFeed feed = service.Query (query); |
464 | + |
465 | + List<String> strs = new List<String> (); |
466 | + foreach (CalendarEntry e in feed.Entries) { |
467 | + strs.Add (e.Title.Text + Separator + e.Id.Uri.Content.Substring (e.Id.Uri.Content.LastIndexOf ("/") + 1).Replace ("%40", "@")); |
468 | + } |
469 | + |
470 | + return strs.ToArray (); |
471 | + } catch (Exception e) { |
472 | + return null; |
473 | + } |
474 | + } |
475 | + } |
476 | + |
477 | + public static string[] CalendarSplit (string to) |
478 | + { |
479 | + string[] split = to.Split (Separator); |
480 | + if (split == null || split.Length < 1) { |
481 | + Log<GCalendarAtom>.Error ("Calendar parse error: " + split); |
482 | + } |
483 | + |
484 | + return split; |
485 | + } |
486 | + |
487 | + private void Updated () |
488 | + { |
489 | + State = GCalendarState.Ok; |
490 | + if (CalendarUpdated != null) |
491 | + CalendarUpdated (this, EventArgs.Empty); |
492 | + } |
493 | + |
494 | + private void Updating () |
495 | + { |
496 | + State = GCalendarState.Reloading; |
497 | + if (CalendarUpdating != null) |
498 | + CalendarUpdating (this, EventArgs.Empty); |
499 | + } |
500 | + |
501 | + private void Error (string e) |
502 | + { |
503 | + State = GCalendarState.Error; |
504 | + if (CalendarError != null) |
505 | + CalendarError (this, new GCalendarErrorArgs (e)); |
506 | + } |
507 | + |
508 | + uint Interval { get; set; } |
509 | + public GCalendarState State { get; protected set; } |
510 | + |
511 | + public IEnumerable<GCalendarCalendar> Events { |
512 | + get { |
513 | + lock (data) { |
514 | + return data; |
515 | + } |
516 | + } |
517 | + } |
518 | + |
519 | + public int TodoCount { |
520 | + get { |
521 | + int ret = 0; |
522 | + foreach (GCalendarCalendar c in data) { |
523 | + ret += c.Entries.Count; |
524 | + } |
525 | + return ret; |
526 | + } |
527 | + } |
528 | + |
529 | + public bool HasTodo { |
530 | + get { return TodoCount > 0; } |
531 | + } |
532 | + |
533 | + public GCalendarAtom () |
534 | + { |
535 | + State = GCalendarState.ManualReload; |
536 | + GCalendarPreferences.CalendarChange += GCalendarPreferencesCalendarChange; |
537 | + GCalendarPreferences.UsernameChange += GCalendarPreferencesUsernameChange; |
538 | + GCalendarPreferences.PasswordChange += GCalendarPreferencesPasswordChange; |
539 | + |
540 | + SettingChanged += HandleSettingChanged; |
541 | + DockServices.System.ConnectionStatusChanged += HandleSettingChanged; |
542 | + } |
543 | + |
544 | + public void Dispose() |
545 | + { |
546 | + GCalendarPreferences.CalendarChange -= GCalendarPreferencesCalendarChange; |
547 | + GCalendarPreferences.UsernameChange -= GCalendarPreferencesUsernameChange; |
548 | + GCalendarPreferences.PasswordChange -= GCalendarPreferencesPasswordChange; |
549 | + |
550 | + SettingChanged -= HandleSettingChanged; |
551 | + DockServices.System.ConnectionStatusChanged -= HandleSettingChanged; |
552 | + } |
553 | + |
554 | + |
555 | + void GCalendarPreferencesPasswordChange (object sender, EventArgs e) |
556 | + { |
557 | + ResetTime (false); |
558 | + } |
559 | + |
560 | + void GCalendarPreferencesUsernameChange (object sender, EventArgs e) |
561 | + { |
562 | + ResetTime (false); |
563 | + } |
564 | + |
565 | + void GCalendarPreferencesCalendarChange (object sender, EventArgs e) |
566 | + { |
567 | + ResetTime (false); |
568 | + } |
569 | + |
570 | + private void HandleSettingChanged (object sender, EventArgs e) |
571 | + { |
572 | + Log<GCalendarAtom>.Info ("Setting changes handeled"); |
573 | + ResetTime (); |
574 | + } |
575 | + |
576 | + /// <summary> |
577 | + /// Do a hard reset. I.e reload data. |
578 | + /// </summary> |
579 | + public void ResetTime () |
580 | + { |
581 | + ResetTime (true); |
582 | + } |
583 | + |
584 | + private DateTime last = DateTime.Now; |
585 | + |
586 | + /// <summary> |
587 | + /// Do a reset. I.e reload data. |
588 | + /// </summary> |
589 | + /// <param name="hard"> |
590 | + /// If set do hard reload. |
591 | + /// A <see cref="System.Boolean"/> |
592 | + /// </param> |
593 | + public void ResetTime (bool hard) |
594 | + { |
595 | + if (DateTime.Now.Millisecond - last.Millisecond > 1000 * 60 * 10 && !hard) { |
596 | + last = DateTime.Now; |
597 | + return; |
598 | + } |
599 | + if (Interval != 0) |
600 | + GLib.Source.Remove (Interval); |
601 | + Interval = 0; |
602 | + |
603 | + if (!DockServices.System.NetworkConnected) |
604 | + return; |
605 | + |
606 | + LoadData (); |
607 | + |
608 | + // TODO: Add GCalendarPreference.Interval |
609 | + Interval = GLib.Timeout.Add (1000 * 60 * 10, () => |
610 | + { |
611 | + ResetTime (); |
612 | + return true; |
613 | + }); |
614 | + |
615 | + } |
616 | + |
617 | + private void LoadData () |
618 | + { |
619 | + // On error do nothing.. |
620 | + if (ErrorCheck ()) |
621 | + return; |
622 | + Docky.Services.DockServices.System.RunOnThread (() => |
623 | + { |
624 | + lock (data) { |
625 | + try { |
626 | + System.Net.ServicePointManager.CertificatePolicy = new CertHandler (); |
627 | + Gtk.Application.Invoke (delegate { Updating (); }); |
628 | + |
629 | + CalendarService service = new CalendarService ("Docky_GCalendar_Docklet"); |
630 | + service.setUserCredentials (GCalendarPreferences.Username, GCalendarPreferences.Password); |
631 | + |
632 | + //Reset the old data. |
633 | + data = new List<GCalendarCalendar> (); |
634 | + foreach (string calendarId in GCalendarPreferences.Calendars) { |
635 | + // 0 = name & 1 = uri |
636 | + string[] split = CalendarSplit (calendarId); |
637 | + Log<GCalendarAtom>.Info ("Checking calendar: " + split[0]); |
638 | + |
639 | + EventQuery query = new EventQuery (string.Format ("http://www.google.com/calendar/feeds/{0}/private/full", split[1])); |
640 | + query.ExtraParameters = "orderby=starttime&sortorder=ascending"; |
641 | + query.StartTime = DateTime.Now.AddHours (-2); |
642 | + DateTime end = DateTime.Today; |
643 | + query.EndTime = end.AddDays (GCalendarPreferences.Days); |
644 | + |
645 | + EventFeed feed = service.Query (query); |
646 | + GCalendarCalendar gcal = new GCalendarCalendar (split[0]); |
647 | + |
648 | + bool first = true; |
649 | + int count = 0; |
650 | + while (feed != null && feed.Entries.Count > 0) { |
651 | + foreach (EventEntry entry in feed.Entries) { |
652 | + GCalendarEvent gcdata = GCalendarEvent.FromEventEntry (entry); |
653 | + if (first) { |
654 | + gcal.When = gcdata.DateFrom; |
655 | + } |
656 | + gcal.Entries.Add (gcdata); |
657 | + first = false; |
658 | + count++; |
659 | + } |
660 | + |
661 | + if (feed.NextChunk != null) { |
662 | + query.Uri = new Uri (feed.NextChunk); |
663 | + feed = service.Query (query); |
664 | + } else { |
665 | + feed = null; |
666 | + } |
667 | + } |
668 | + |
669 | + data.Add (gcal); |
670 | + } |
671 | + Gtk.Application.Invoke (delegate { Updated (); }); |
672 | + |
673 | + } catch (IndexOutOfRangeException) { |
674 | + Gtk.Application.Invoke (delegate { Error (Catalog.GetString ("No calendar selected")); }); |
675 | + } catch (WebException) { |
676 | + Gtk.Application.Invoke (delegate { Error (Catalog.GetString ("Network error")); }); |
677 | + }catch (Exception e) { |
678 | + Gtk.Application.Invoke (delegate { Error (Catalog.GetString ("Unknown error occured")); }); |
679 | + Log<GCalendarAtom>.Error (e.Message); |
680 | + Log<GCalendarAtom>.Info (e.StackTrace); |
681 | + } |
682 | + } |
683 | + }); |
684 | + |
685 | + } |
686 | + |
687 | + private bool ErrorCheck () |
688 | + { |
689 | + if (GCalendarPreferences.Username == "" || GCalendarPreferences.Password == "") { |
690 | + Error (Catalog.GetString ("Username or password not set")); |
691 | + return true; |
692 | + } |
693 | + |
694 | + if (!Docky.Services.DockServices.System.NetworkConnected) { |
695 | + Error (Catalog.GetString ("No network connection"));; |
696 | + return true; |
697 | + } |
698 | + |
699 | + return false; |
700 | + } |
701 | + |
702 | + } |
703 | +} |
704 | |
705 | === added file 'StandardPlugins/GCalendar/src/GCalendarCalendarConfig.cs' |
706 | --- StandardPlugins/GCalendar/src/GCalendarCalendarConfig.cs 1970-01-01 00:00:00 +0000 |
707 | +++ StandardPlugins/GCalendar/src/GCalendarCalendarConfig.cs 2010-02-15 17:13:20 +0000 |
708 | @@ -0,0 +1,148 @@ |
709 | +// |
710 | +// Copyright (C) 2010 Isak Karlsson |
711 | +// |
712 | +// This program is free software: you can redistribute it and/or modify |
713 | +// it under the terms of the GNU General Public License as published by |
714 | +// the Free Software Foundation, either version 3 of the License, or |
715 | +// (at your option) any later version. |
716 | +// |
717 | +// This program is distributed in the hope that it will be useful, |
718 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
719 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
720 | +// GNU General Public License for more details. |
721 | +// |
722 | +// You should have received a copy of the GNU General Public License |
723 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
724 | +// |
725 | + |
726 | +using System; |
727 | +using System.Collections.Generic; |
728 | + |
729 | +using Mono.Unix; |
730 | + |
731 | +using Gtk; |
732 | + |
733 | +using Docky.Widgets; |
734 | + |
735 | +namespace GCalendar |
736 | +{ |
737 | + // Not _so_ uglu anymore. |
738 | + public class GCalendarCalendarConfig : Gtk.VBox |
739 | + { |
740 | + private Button applyBtn = new Button (); |
741 | + private Button searchBtn = new Button (); |
742 | + private Label infoLbl = new Label (); |
743 | + private Entry days = new Entry (2); |
744 | + |
745 | + private HBox north = new HBox (false, 2); |
746 | + private VBox center = new VBox (false, 3); |
747 | + private HBox south = new HBox (false, 2); |
748 | + |
749 | + private List<string> calendars = new List<string> (); |
750 | + private Dictionary<string, string> cals = new Dictionary<string, string> (); |
751 | + |
752 | + public GCalendarCalendarConfig () : base(false, 3) |
753 | + { |
754 | + center.SetSizeRequest (200, 200); |
755 | + infoLbl.Text = Catalog.GetString ("Click Search calendars to see \n" + "your presonal calendars at google calendar. \n" + "Check the ones you want, and uncheck the others. \n" + "Then click apply."); |
756 | + |
757 | + searchBtn.Label = Catalog.GetString ("Fetch calendar list"); |
758 | + searchBtn.Clicked += SearchBtnClicked; |
759 | + |
760 | + Fixed btnHolder = new Fixed (); |
761 | + btnHolder.Add (searchBtn); |
762 | + north.PackStart (infoLbl); |
763 | + north.PackStart (btnHolder); |
764 | + |
765 | + applyBtn.Label = Catalog.GetString ("Apply"); |
766 | + applyBtn.Clicked += ApplyBtnClicked; |
767 | + |
768 | + Fixed applyPlaceholder = new Fixed (); |
769 | + applyPlaceholder.Add (applyBtn); |
770 | + |
771 | + days.Text = GCalendarPreferences.Days.ToString (); |
772 | + HBox daysBox = new HBox (false, 3); |
773 | + daysBox.PackStart (new Label ("Show"), true, true, 0); |
774 | + daysBox.PackStart (days, false, false, 0); |
775 | + daysBox.PackStart (new Label ("days after today"), true, true, 0); |
776 | + south.PackStart (daysBox, true, true, 0); |
777 | + south.PackStart (applyPlaceholder, false, false, 0); |
778 | + |
779 | + PackStart (north); |
780 | + PackStart (center); |
781 | + PackStart (south); |
782 | + |
783 | + ShowAll (); |
784 | + |
785 | + Name = Catalog.GetString ("Calendars"); |
786 | + |
787 | + SearchBtnClicked (this, EventArgs.Empty); |
788 | + } |
789 | + |
790 | + void SearchBtnClicked (object sender, EventArgs e) |
791 | + { |
792 | + Gtk.Application.Invoke (delegate |
793 | + { |
794 | + if (!Docky.Services.DockServices.System.NetworkConnected) { |
795 | + infoLbl.Text = Catalog.GetString ("Not connected"); |
796 | + } |
797 | + |
798 | + calendars = new List<string> (); |
799 | + calendars.AddRange (GCalendarPreferences.Calendars); |
800 | + |
801 | + foreach (Widget w in center.Children) { |
802 | + center.Remove (w); |
803 | + } |
804 | + string[] newCals = GCalendarAtom.Calendars; |
805 | + |
806 | + if (newCals == null) { |
807 | + infoLbl.Text = Catalog.GetString ("Some unknown error occured"); |
808 | + return; |
809 | + } |
810 | + |
811 | + foreach (string s in newCals) { |
812 | + string[] split = GCalendarAtom.CalendarSplit (s); |
813 | + CheckButton b = new CheckButton (split[0]); |
814 | + cals[split[0]] = s; |
815 | + foreach (string ss in calendars) { |
816 | + if (ss == s) { |
817 | + b.Active = true; |
818 | + break; |
819 | + } else { |
820 | + b.Active = false; |
821 | + } |
822 | + } |
823 | + b.Show (); |
824 | + center.PackStart (b); |
825 | + } |
826 | + ShowAll (); |
827 | + }); |
828 | + } |
829 | + |
830 | + void ApplyBtnClicked (object sender, EventArgs e) |
831 | + { |
832 | + List<string> strs = new List<string> (); |
833 | + foreach (Widget w in center.Children) { |
834 | + CheckButton b = w as CheckButton; |
835 | + if (b.Active) |
836 | + strs.Add (cals[b.Label]); |
837 | + } |
838 | + |
839 | + GCalendarPreferences.Calendars = strs.ToArray (); |
840 | + |
841 | + calendars.Clear (); |
842 | + calendars.AddRange (GCalendarPreferences.Calendars); |
843 | + |
844 | + try { |
845 | + GCalendarPreferences.Days = int.Parse (days.Text); |
846 | + } catch (Exception) { |
847 | + MessageDialog d = new MessageDialog (null, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "Incorrect number", "a"); |
848 | + d.Run (); |
849 | + d.Destroy (); |
850 | + GCalendarPreferences.Days = 0; |
851 | + |
852 | + days.Text = "0"; |
853 | + } |
854 | + } |
855 | + } |
856 | +} |
857 | |
858 | === added file 'StandardPlugins/GCalendar/src/GCalendarDockItem.cs' |
859 | --- StandardPlugins/GCalendar/src/GCalendarDockItem.cs 1970-01-01 00:00:00 +0000 |
860 | +++ StandardPlugins/GCalendar/src/GCalendarDockItem.cs 2010-02-15 17:13:20 +0000 |
861 | @@ -0,0 +1,202 @@ |
862 | +// |
863 | +// Copyright (C) 2009 Isak Karlsson |
864 | +// |
865 | +// This program is free software: you can redistribute it and/or modify |
866 | +// it under the terms of the GNU General Public License as published by |
867 | +// the Free Software Foundation, either version 3 of the License, or |
868 | +// (at your option) any later version. |
869 | +// |
870 | +// This program is distributed in the hope that it will be useful, |
871 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
872 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
873 | +// GNU General Public License for more details. |
874 | +// |
875 | +// You should have received a copy of the GNU General Public License |
876 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
877 | +// |
878 | + |
879 | +using System; |
880 | +using System.Linq; |
881 | +using Mono.Unix; |
882 | + |
883 | +using Cairo; |
884 | + |
885 | +using Docky.CairoHelper; |
886 | +using Docky.Items; |
887 | +using Docky.Menus; |
888 | +using Docky.Services; |
889 | +using Docky.Painters; |
890 | + |
891 | +using Docky.Widgets; |
892 | + |
893 | +namespace GCalendar |
894 | +{ |
895 | + |
896 | + /// <summary> |
897 | + /// GCalendar dock item. Uses an icon |
898 | + /// </summary> |
899 | + public class GCalendarDockItem : ColoredIconDockItem |
900 | + { |
901 | + public GCalendarAtom Atom { get; private set; } |
902 | + public override string UniqueID () |
903 | + { |
904 | + return "GCalendar"; |
905 | + } |
906 | + |
907 | + protected override ClickAnimation OnClicked (uint button, Gdk.ModifierType mod, double xPercent, double yPercent) |
908 | + { |
909 | + if(button == 1) { |
910 | + OpenClient (); |
911 | + return ClickAnimation.Bounce; |
912 | + } |
913 | + |
914 | + return ClickAnimation.None; |
915 | + } |
916 | + |
917 | + protected override MenuList OnGetMenuItems () |
918 | + { |
919 | + MenuList lst = base.OnGetMenuItems (); |
920 | + lst[MenuListContainer.Actions].Add (new MenuItem (Catalog.GetString ("View calendar"), FindIcon(), delegate { OpenClient (); })); |
921 | + |
922 | + if (Atom.HasTodo) { |
923 | + foreach (GCalendarCalendar gcal in Atom.Events) { |
924 | + if (gcal.Entries.Count > 0) { |
925 | + DateTime last = gcal.Entries.First ().DateFrom; |
926 | + foreach (GCalendarEvent gcdata in gcal.Entries) { |
927 | + if (gcdata.DateFrom.Date.Subtract (last.Date).Days >= 1 || last == gcdata.DateFrom) { |
928 | + string date = gcdata.DateFrom.ToString ("D"); |
929 | + |
930 | + if (gcdata.DateFrom.Date == DateTime.Today) |
931 | + date = "Today"; |
932 | + else if (gcdata.DateFrom.Date == DateTime.Today.AddDays (1)) |
933 | + date = "Tomorrow"; |
934 | + |
935 | + lst[MenuListContainer.Actions].Add (new SeparatorMenuItem (date + " - " + gcal.Name)); |
936 | + } |
937 | + last = gcdata.DateFrom; |
938 | + lst[MenuListContainer.Actions].Add (new GCalendarMenuItem (gcdata, "gcalendar")); |
939 | + } |
940 | + } |
941 | + } |
942 | + } else { |
943 | + lst[MenuListContainer.Actions].Add(new SeparatorMenuItem()); |
944 | + } |
945 | + |
946 | + lst[MenuListContainer.Actions].Add (new SeparatorMenuItem ()); |
947 | + |
948 | + lst[MenuListContainer.Actions].Add (new MenuItem (Catalog.GetString ("_Settings"), Gtk.Stock.Preferences, delegate { GCalendarAtom.Config (); })); |
949 | + lst[MenuListContainer.Actions].Add (new MenuItem (Catalog.GetString ("Check _Calendar"), Gtk.Stock.Refresh, delegate { Atom.ResetTime (); })); |
950 | + |
951 | + return lst; |
952 | + } |
953 | + |
954 | + private string FindIcon () |
955 | + { |
956 | + if (GCalendarPreferences.HasAltClient) { |
957 | + return GCalendarPreferences.AltClient; |
958 | + } else { |
959 | + return "gcalendar"; |
960 | + } |
961 | + } |
962 | + |
963 | + |
964 | + protected override Gdk.Pixbuf ProcessPixbuf (Gdk.Pixbuf pbuf) |
965 | + { |
966 | + pbuf = base.ProcessPixbuf (pbuf); |
967 | + |
968 | + if (Atom.State != GCalendarState.Error) |
969 | + return pbuf; |
970 | + |
971 | + |
972 | + return DockServices.Drawing.MonochromePixbuf (pbuf); |
973 | + } |
974 | + |
975 | + protected override void PostProcessIconSurface (DockySurface surface) |
976 | + { |
977 | + if (Atom.State != GCalendarState.Error && !Atom.HasTodo) { |
978 | + surface.Context.Color = new Cairo.Color (0, 0, 0, 0); |
979 | + surface.Context.Operator = Operator.Source; |
980 | + surface.Context.PaintWithAlpha (0.5); |
981 | + } |
982 | + } |
983 | + |
984 | + protected override void PaintIconSurface (Docky.CairoHelper.DockySurface surface) |
985 | + { |
986 | + base.PaintIconSurface (surface); |
987 | + } |
988 | + |
989 | + |
990 | + |
991 | + private void OpenClient () |
992 | + { |
993 | + if (GCalendarPreferences.HasAltClient) { |
994 | + DockServices.System.Execute (GCalendarPreferences.AltClient); |
995 | + } else { |
996 | + DockServices.System.Open ("http://google.com/calendar"); |
997 | + } |
998 | + } |
999 | + |
1000 | + public GCalendarDockItem () |
1001 | + { |
1002 | + Atom = new GCalendarAtom (); |
1003 | + |
1004 | + Atom.CalendarError += AtomCalendarError; |
1005 | + Atom.CalendarUpdated += AtomCalendarUpdated; |
1006 | + Atom.CalendarUpdating += AtomCalendarUpdating; |
1007 | + |
1008 | + Icon = "gcalendar"; |
1009 | + } |
1010 | + |
1011 | + public override void Dispose () |
1012 | + { |
1013 | + Atom.CalendarError -= AtomCalendarError; |
1014 | + Atom.CalendarUpdated -= AtomCalendarUpdated; |
1015 | + Atom.CalendarUpdating -= AtomCalendarUpdating; |
1016 | + Atom.Dispose(); |
1017 | + |
1018 | + base.Dispose (); |
1019 | + } |
1020 | + |
1021 | + |
1022 | + void AtomCalendarUpdating (object sender, EventArgs e) |
1023 | + { |
1024 | + HoverText = Catalog.GetString ("Updating events..."); |
1025 | + State |= ItemState.Wait; |
1026 | + } |
1027 | + |
1028 | + void AtomCalendarUpdated (object sender, EventArgs e) |
1029 | + { |
1030 | + if (Atom.State == GCalendarState.Error) |
1031 | + return; |
1032 | + |
1033 | + string status = ""; |
1034 | + if (!Atom.HasTodo) |
1035 | + status = GCalendarPreferences.Days == 0 ? |
1036 | + Catalog.GetString ("Calendar - No events today") : |
1037 | + string.Format (Catalog.GetPluralString ("Calendar - No events the next day", "Calendar - No events the next {0} days", |
1038 | + GCalendarPreferences.Days), GCalendarPreferences.Days); |
1039 | + else |
1040 | + status = string.Format (Catalog.GetPluralString ("Calendar - {0} event", "Calendar - {0} events", Atom.TodoCount), Atom.TodoCount); |
1041 | + |
1042 | + HoverText = status; |
1043 | + if (Atom.HasTodo) |
1044 | + BadgeText = Atom.TodoCount.ToString (); |
1045 | + else |
1046 | + BadgeText = null; |
1047 | + |
1048 | + State &= ~ItemState.Wait; |
1049 | + QueueRedraw (); |
1050 | + } |
1051 | + |
1052 | + void AtomCalendarError (object sender, GCalendarErrorArgs e) |
1053 | + { |
1054 | + if (State == ItemState.Wait) |
1055 | + State &= ~ItemState.Wait; |
1056 | + |
1057 | + HoverText = e.Error; |
1058 | + BadgeText = null; |
1059 | + |
1060 | + QueueRedraw (); |
1061 | + } |
1062 | + } |
1063 | +} |
1064 | |
1065 | === added file 'StandardPlugins/GCalendar/src/GCalendarErrorArgs.cs' |
1066 | --- StandardPlugins/GCalendar/src/GCalendarErrorArgs.cs 1970-01-01 00:00:00 +0000 |
1067 | +++ StandardPlugins/GCalendar/src/GCalendarErrorArgs.cs 2010-02-15 17:13:20 +0000 |
1068 | @@ -0,0 +1,31 @@ |
1069 | +// |
1070 | +// Copyright (C) 2010 Isak Karlsson |
1071 | +// |
1072 | +// This program is free software: you can redistribute it and/or modify |
1073 | +// it under the terms of the GNU General Public License as published by |
1074 | +// the Free Software Foundation, either version 3 of the License, or |
1075 | +// (at your option) any later version. |
1076 | +// |
1077 | +// This program is distributed in the hope that it will be useful, |
1078 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1079 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1080 | +// GNU General Public License for more details. |
1081 | +// |
1082 | +// You should have received a copy of the GNU General Public License |
1083 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
1084 | +// |
1085 | + |
1086 | +using System; |
1087 | + |
1088 | +namespace GCalendar |
1089 | +{ |
1090 | + public class GCalendarErrorArgs : EventArgs |
1091 | + { |
1092 | + public string Error { get; private set; } |
1093 | + |
1094 | + public GCalendarErrorArgs (string e) |
1095 | + { |
1096 | + Error = e; |
1097 | + } |
1098 | + } |
1099 | +} |
1100 | |
1101 | === added file 'StandardPlugins/GCalendar/src/GCalendarItemProvider.cs' |
1102 | --- StandardPlugins/GCalendar/src/GCalendarItemProvider.cs 1970-01-01 00:00:00 +0000 |
1103 | +++ StandardPlugins/GCalendar/src/GCalendarItemProvider.cs 2010-02-15 17:13:20 +0000 |
1104 | @@ -0,0 +1,65 @@ |
1105 | +// |
1106 | +// Copyright (C) 2009 Isak Karlsson |
1107 | +// |
1108 | +// This program is free software: you can redistribute it and/or modify |
1109 | +// it under the terms of the GNU General Public License as published by |
1110 | +// the Free Software Foundation, either version 3 of the License, or |
1111 | +// (at your option) any later version. |
1112 | +// |
1113 | +// This program is distributed in the hope that it will be useful, |
1114 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1115 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1116 | +// GNU General Public License for more details. |
1117 | +// |
1118 | +// You should have received a copy of the GNU General Public License |
1119 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
1120 | +// |
1121 | + |
1122 | +using System; |
1123 | +using Docky.Items; |
1124 | + |
1125 | +namespace GCalendar |
1126 | +{ |
1127 | + |
1128 | + |
1129 | + public class GCalendarItemProvider : AbstractDockItemProvider |
1130 | + { |
1131 | + |
1132 | + private GCalendarDockItem item; |
1133 | + |
1134 | + public override string Name { |
1135 | + get { |
1136 | + return "GCalendar"; |
1137 | + } |
1138 | + } |
1139 | + |
1140 | + public override string Icon { |
1141 | + get { |
1142 | + return "gcalendar"; |
1143 | + } |
1144 | + } |
1145 | + |
1146 | + public override void Dispose () |
1147 | + { |
1148 | + item.Dispose(); |
1149 | + } |
1150 | + |
1151 | + |
1152 | + public GCalendarItemProvider () |
1153 | + { |
1154 | + item = new GCalendarDockItem(); |
1155 | + AbstractDockItem[] items = {item}; |
1156 | + Items = items; |
1157 | + } |
1158 | + |
1159 | + public override void AddedToDock () |
1160 | + { |
1161 | + GLib.Idle.Add(delegate { |
1162 | + foreach(AbstractDockItem d in Items) |
1163 | + (d as GCalendarDockItem).Atom.ResetTime(); |
1164 | + return false; |
1165 | + }); |
1166 | + } |
1167 | + |
1168 | + } |
1169 | +} |
1170 | |
1171 | === added file 'StandardPlugins/GCalendar/src/GCalendarLoginConfig.cs' |
1172 | --- StandardPlugins/GCalendar/src/GCalendarLoginConfig.cs 1970-01-01 00:00:00 +0000 |
1173 | +++ StandardPlugins/GCalendar/src/GCalendarLoginConfig.cs 2010-02-15 17:13:20 +0000 |
1174 | @@ -0,0 +1,53 @@ |
1175 | +// |
1176 | +// Copyright (C) 2010 Isak Karlsson |
1177 | +// |
1178 | +// This program is free software: you can redistribute it and/or modify |
1179 | +// it under the terms of the GNU General Public License as published by |
1180 | +// the Free Software Foundation, either version 3 of the License, or |
1181 | +// (at your option) any later version. |
1182 | +// |
1183 | +// This program is distributed in the hope that it will be useful, |
1184 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1185 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1186 | +// GNU General Public License for more details. |
1187 | +// |
1188 | +// You should have received a copy of the GNU General Public License |
1189 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
1190 | +// |
1191 | + |
1192 | +using System; |
1193 | +using Mono.Unix; |
1194 | + |
1195 | +using Docky.Widgets; |
1196 | + |
1197 | +namespace GCalendar |
1198 | +{ |
1199 | + public class GCalendarLoginConfig : AbstractLoginWidget |
1200 | + { |
1201 | + public GCalendarLoginConfig () : base("Google calendar", "http://www.google.com/calendar") |
1202 | + { |
1203 | + Password = GCalendarPreferences.Password; |
1204 | + Username = GCalendarPreferences.Username; |
1205 | + |
1206 | + Name = Catalog.GetString("Login"); |
1207 | + } |
1208 | + |
1209 | + protected override void SaveAccountData (string username, string password) |
1210 | + { |
1211 | + if (GCalendarPreferences.Username != username || GCalendarPreferences.Password != password) { |
1212 | + GCalendarPreferences.Username = username; |
1213 | + GCalendarPreferences.Password = password; |
1214 | + |
1215 | + GCalendarAtom.Reload (); |
1216 | + } |
1217 | + } |
1218 | + |
1219 | + protected override bool Validate (string username, string password) |
1220 | + { |
1221 | + if (username == null || username == "" || password == null || password == "") |
1222 | + return false; |
1223 | + |
1224 | + else return GCalendarAtom.Validate(username, password); |
1225 | + } |
1226 | + } |
1227 | +} |
1228 | |
1229 | === added file 'StandardPlugins/GCalendar/src/GCalendarMenuItem.cs' |
1230 | --- StandardPlugins/GCalendar/src/GCalendarMenuItem.cs 1970-01-01 00:00:00 +0000 |
1231 | +++ StandardPlugins/GCalendar/src/GCalendarMenuItem.cs 2010-02-15 17:13:20 +0000 |
1232 | @@ -0,0 +1,33 @@ |
1233 | +// |
1234 | +// Copyright (C) 2010 Isak Karlsson |
1235 | +// |
1236 | +// This program is free software: you can redistribute it and/or modify |
1237 | +// it under the terms of the GNU General Public License as published by |
1238 | +// the Free Software Foundation, either version 3 of the License, or |
1239 | +// (at your option) any later version. |
1240 | +// |
1241 | +// This program is distributed in the hope that it will be useful, |
1242 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1243 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1244 | +// GNU General Public License for more details. |
1245 | +// |
1246 | +// You should have received a copy of the GNU General Public License |
1247 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
1248 | +// |
1249 | + |
1250 | +using System; |
1251 | + |
1252 | +namespace GCalendar |
1253 | +{ |
1254 | + |
1255 | + |
1256 | + public class GCalendarMenuItem : Docky.Menus.MenuItem |
1257 | + { |
1258 | + |
1259 | + public GCalendarMenuItem (GCalendarEvent d, string icon) : base(d.DateFrom.ToShortTimeString () + " - " + d.Title, icon) |
1260 | + { |
1261 | + //Docky.Services.DockServices.System.Open(d.Link); |
1262 | + Clicked += delegate { }; |
1263 | + } |
1264 | + } |
1265 | +} |
1266 | |
1267 | === added file 'StandardPlugins/GCalendar/src/GCalendarPreferences.cs' |
1268 | --- StandardPlugins/GCalendar/src/GCalendarPreferences.cs 1970-01-01 00:00:00 +0000 |
1269 | +++ StandardPlugins/GCalendar/src/GCalendarPreferences.cs 2010-02-15 17:13:20 +0000 |
1270 | @@ -0,0 +1,144 @@ |
1271 | +// |
1272 | +// Copyright (C) 2010 Isak Karlsson |
1273 | +// |
1274 | +// This program is free software: you can redistribute it and/or modify |
1275 | +// it under the terms of the GNU General Public License as published by |
1276 | +// the Free Software Foundation, either version 3 of the License, or |
1277 | +// (at your option) any later version. |
1278 | +// |
1279 | +// This program is distributed in the hope that it will be useful, |
1280 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1281 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1282 | +// GNU General Public License for more details. |
1283 | +// |
1284 | +// You should have received a copy of the GNU General Public License |
1285 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. |
1286 | +// |
1287 | + |
1288 | +using System; |
1289 | +using Docky.Services; |
1290 | +namespace GCalendar |
1291 | +{ |
1292 | + |
1293 | + |
1294 | + public class GCalendarPreferences |
1295 | + { |
1296 | + const string UserKey = "User"; |
1297 | + const string PasswdKey = "Password"; |
1298 | + const string CalendarKey = "Calendars"; |
1299 | + const string DaysKey = "Days"; |
1300 | + const string MaxEventKey = "MaxEvents"; |
1301 | + const string IntervalKey = "Interval"; |
1302 | + const string HasAltClientKey = "HasAlternativClient"; |
1303 | + const string AltClientKey = "AlternativClientPath"; |
1304 | + |
1305 | + // Unimplemented |
1306 | + const string CustomIconKey = "CustomIcon"; |
1307 | + const string IconKey = "Icon"; |
1308 | + |
1309 | + |
1310 | + private static IPreferences pref = DockServices.Preferences.Get<GCalendarPreferences> (); |
1311 | + |
1312 | + |
1313 | + public static event EventHandler UsernameChange; |
1314 | + |
1315 | + private static void OnUsernameChange () |
1316 | + { |
1317 | + if (UsernameChange != null) |
1318 | + UsernameChange (null, EventArgs.Empty); |
1319 | + } |
1320 | + |
1321 | + public static string Username { |
1322 | + get { return pref.Get<string> (UserKey, ""); } |
1323 | + set { |
1324 | + pref.Set<string> (UserKey, value); |
1325 | + OnUsernameChange (); |
1326 | + } |
1327 | + } |
1328 | + |
1329 | + public static event EventHandler PasswordChange; |
1330 | + |
1331 | + private static void OnPasswordChange () |
1332 | + { |
1333 | + if (PasswordChange != null) |
1334 | + PasswordChange (null, EventArgs.Empty); |
1335 | + } |
1336 | + |
1337 | + |
1338 | + public static string Password { |
1339 | + get { return pref.GetSecure<string> (PasswdKey, ""); } |
1340 | + set { |
1341 | + pref.SetSecure<string> (PasswdKey, value); |
1342 | + OnPasswordChange (); |
1343 | + } |
1344 | + } |
1345 | + |
1346 | + public static event EventHandler CalendarChange; |
1347 | + |
1348 | + private static void OnCalendarChange () |
1349 | + { |
1350 | + if (CalendarChange != null) |
1351 | + CalendarChange (null, EventArgs.Empty); |
1352 | + } |
1353 | + |
1354 | + public static string[] Calendars { |
1355 | + get { return pref.Get<string[]> (CalendarKey, new string[0]); } |
1356 | + set { |
1357 | + pref.Set<string[]> (CalendarKey, value); |
1358 | + OnCalendarChange (); |
1359 | + } |
1360 | + } |
1361 | + |
1362 | + public static int Days { |
1363 | + get { |
1364 | + return pref.Get<int> (DaysKey, 0); |
1365 | + } |
1366 | + set { |
1367 | + pref.Set<int> (DaysKey, value); |
1368 | + } |
1369 | + } |
1370 | + |
1371 | + public static int MaxEvent { |
1372 | + get { |
1373 | + return pref.Get<int> (MaxEventKey, 0); |
1374 | + } |
1375 | + set { |
1376 | + pref.Set<int> (MaxEventKey, value); |
1377 | + OnUsernameChange (); |
1378 | + } |
1379 | + } |
1380 | + |
1381 | + public static uint Interval { |
1382 | + get { |
1383 | + return (uint) pref.Get<int> (IntervalKey, 10); |
1384 | + } |
1385 | + set { |
1386 | + pref.Set<int> (IntervalKey, value > 0 ? (int) value : 1); |
1387 | + OnUsernameChange (); |
1388 | + } |
1389 | + } |
1390 | + |
1391 | + public static bool HasAltClient { |
1392 | + get { |
1393 | + return pref.Get<bool> (HasAltClientKey, false); |
1394 | + } |
1395 | + set { |
1396 | + pref.Set<bool> (HasAltClientKey, value); |
1397 | + } |
1398 | + } |
1399 | + |
1400 | + public static string AltClient { |
1401 | + get { |
1402 | + return pref.Get<string> (AltClientKey, "evolution"); |
1403 | + } |
1404 | + set { |
1405 | + pref.Set<string> (AltClientKey, value); |
1406 | + } |
1407 | + } |
1408 | + |
1409 | + // No instances.. |
1410 | + private GCalendarPreferences () |
1411 | + { |
1412 | + } |
1413 | + } |
1414 | +} |
1415 | |
1416 | === modified file 'StandardPlugins/Makefile.am' |
1417 | --- StandardPlugins/Makefile.am 2009-12-04 07:54:33 +0000 |
1418 | +++ StandardPlugins/Makefile.am 2010-02-15 17:13:20 +0000 |
1419 | @@ -3,6 +3,7 @@ |
1420 | Bookmarks \ |
1421 | Clock \ |
1422 | CPUMonitor \ |
1423 | + GCalendar \ |
1424 | GMail \ |
1425 | Mounter \ |
1426 | NetworkManager \ |
1427 | @@ -16,6 +17,7 @@ |
1428 | Bookmarks \ |
1429 | Clock \ |
1430 | CPUMonitor \ |
1431 | + GCalendar \ |
1432 | GMail \ |
1433 | Mounter \ |
1434 | NetworkManager \ |
1435 | |
1436 | === modified file 'StandardPlugins/Weather/gtk-gui/WeatherDocklet.WeatherConfig.cs' |
1437 | --- StandardPlugins/Weather/gtk-gui/WeatherDocklet.WeatherConfig.cs 2009-12-14 20:09:49 +0000 |
1438 | +++ StandardPlugins/Weather/gtk-gui/WeatherDocklet.WeatherConfig.cs 2010-02-15 17:13:20 +0000 |
1439 | @@ -161,7 +161,7 @@ |
1440 | // Container child GtkViewport.Gtk.Container+ContainerChild |
1441 | this.results_view = new Docky.Widgets.TileView(); |
1442 | this.results_view.Name = "results_view"; |
1443 | - this.results_view.IconSize = 24; |
1444 | + this.results_view.IconSize = 0; |
1445 | w17.Add(this.results_view); |
1446 | this.scrolledwindow1.Add(w17); |
1447 | this.vbox1.Add(this.scrolledwindow1); |
1448 | |
1449 | === modified file 'configure.ac' |
1450 | --- configure.ac 2010-01-14 10:54:30 +0000 |
1451 | +++ configure.ac 2010-02-15 17:13:20 +0000 |
1452 | @@ -95,6 +95,8 @@ |
1453 | PKG_CHECK_MODULES([NDESK_DBUS_GLIB_10], [ndesk-dbus-glib-1.0]) |
1454 | PKG_CHECK_MODULES([NOTIFY_SHARP], [notify-sharp]) |
1455 | PKG_CHECK_MODULES([WNCK_SHARP_10], [wnck-sharp-1.0]) |
1456 | +PKG_CHECK_MODULES([GDATA_SHARP_CALENDAR], [gdata-sharp-calendar]) |
1457 | +PKG_CHECK_MODULES([GDATA_SHARP_CORE], [gdata-sharp-core]) |
1458 | |
1459 | dnl check for native libraries (ones that are p/invoked) |
1460 | GTK_REQUIRED_VERSION=2.14.3 |
1461 | @@ -125,6 +127,8 @@ |
1462 | AC_SUBST([NDESK_DBUS_GLIB_10_LIBS]) |
1463 | AC_SUBST([NOTIFY_SHARP_LIBS]) |
1464 | AC_SUBST([WNCK_SHARP_10_LIBS]) |
1465 | +AC_SUBST([GDATA_SHARP_CALENDAR]) |
1466 | +AC_SUBST([GDATA_SHARP_CORE]) |
1467 | |
1468 | dnl Docky references |
1469 | DOCKY_CAIRO_LIBS="-r:$(pwd)/build/Docky.CairoHelper.dll" |
1470 | @@ -204,6 +208,8 @@ |
1471 | StandardPlugins/Clock/Themes/Default24/Makefile |
1472 | StandardPlugins/CPUMonitor/Makefile |
1473 | StandardPlugins/CPUMonitor/Resources/CPUMonitor.addin.xml |
1474 | +StandardPlugins/GCalendar/Makefile |
1475 | +StandardPlugins/GCalendar/Resources/GCalendar.addin.xml |
1476 | StandardPlugins/GMail/Makefile |
1477 | StandardPlugins/GMail/Resources/GMail.addin.xml |
1478 | StandardPlugins/Mounter/Makefile |
1479 | |
1480 | === modified file 'data/icons/hicolor/128x128/apps/Makefile.am' |
1481 | --- data/icons/hicolor/128x128/apps/Makefile.am 2010-02-07 18:41:08 +0000 |
1482 | +++ data/icons/hicolor/128x128/apps/Makefile.am 2010-02-15 17:13:20 +0000 |
1483 | @@ -1,6 +1,6 @@ |
1484 | pkgicondir=@datadir@/icons/hicolor/128x128/apps |
1485 | pkgicon_DATA=docky.svg \ |
1486 | - gmail.png |
1487 | + gmail.png \ |
1488 | + gcalendar.png |
1489 | |
1490 | EXTRA_DIST=$(pkgicon_DATA) |
1491 | - |
1492 | |
1493 | === added file 'data/icons/hicolor/128x128/apps/gcalendar.png' |
1494 | Binary files data/icons/hicolor/128x128/apps/gcalendar.png 1970-01-01 00:00:00 +0000 and data/icons/hicolor/128x128/apps/gcalendar.png 2010-02-15 17:13:20 +0000 differ |
1495 | === modified file 'dbus-api/mono/DockyHelper/DockyHelper.csproj' |
1496 | --- dbus-api/mono/DockyHelper/DockyHelper.csproj 2010-01-15 11:18:28 +0000 |
1497 | +++ dbus-api/mono/DockyHelper/DockyHelper.csproj 2010-02-15 17:13:20 +0000 |
1498 | @@ -32,7 +32,9 @@ |
1499 | </PropertyGroup> |
1500 | <ItemGroup> |
1501 | <Reference Include="System" /> |
1502 | - <Reference Include="System.Core" /> |
1503 | + <Reference Include="System.Core"> |
1504 | + <RequiredTargetFramework>3.5</RequiredTargetFramework> |
1505 | + </Reference> |
1506 | <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> |
1507 | <Reference Include="NDesk.DBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6716e4f9b2ed099"> |
1508 | <Package>ndesk-dbus-1.0</Package> |
+ This dock item shows current day events from google calendar. It allows the user to select which
private calendars to check, and then shows the event count as a badge and the events in the menu.
- Depends on gdata-sharp- calendar and gdata-sharp-client