Merge lp:~isak-karlsson/docky/gcalendar into lp:docky

Proposed by isakkarlsson
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
Reviewer Review Type Date Requested Status
Docky Core Pending
Review via email: mp+16979@code.launchpad.net
To post a comment you must log in.
Revision history for this message
isakkarlsson (isak-karlsson) wrote :

+ 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

Revision history for this message
isakkarlsson (isak-karlsson) wrote :

docky.pot is not changed.

lp:~isak-karlsson/docky/gcalendar updated
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

Revision history for this message
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.

Revision history for this message
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

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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'
1494Binary 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>

Subscribers

People subscribed via source and target branches

to status/vote changes: