~cszikszoy/do-plugins/fix-confluence

« back to all changes in this revision

Viewing changes to Twitter/TwitterFriendItemSource.cs

  • Committer: Alex Launi
  • Date: 2008-04-03 16:42:36 UTC
  • mfrom: (85 do-plugins)
  • mto: This revision was merged to the branch mainline in revision 87.
  • Revision ID: alex.launi@gmail.com-20080403164236-6ut2l710phmv92o5
clean up

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* TwitterFriendItem.cs
 
2
 *
 
3
 * This is a simple action for posting to twitter using GNOME DO.
 
4
 *
 
5
 * GNOME Do is the legal property of its developers. Please refer to the
 
6
 * COPYRIGHT file distributed with this source distribution.
 
7
 *
 
8
 * This program is free software: you can redistribute it and/or modify
 
9
 * it under the terms of the GNU General Public License as published by
 
10
 * the Free Software Foundation, either version 3 of the License, or
 
11
 * (at your option) any later version.
 
12
 *
 
13
 * This program is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
 * GNU General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU General Public License
 
19
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
20
 */
 
21
 using System;
 
22
 using System.Net;
 
23
 using System.Xml;
 
24
 using System.Collections.Generic;
 
25
 
 
26
 using GConf;
 
27
 using Do.Universe;
 
28
 
 
29
 namespace Do.Twitter
 
30
 {
 
31
     public class TwitterFriendItemSource : IItemSource {
 
32
         List<IItem> items;
 
33
         
 
34
         public TwitterFriendItemSource () {
 
35
             items = new List<IItem> ();
 
36
         }
 
37
         
 
38
         public string Name { get { return "Twitter friends"; } }
 
39
         public string Description { get { return "Indexes your Twitter friends"; } }
 
40
         public string Icon { get { return ""; } }
 
41
         
 
42
         public Type[] SupportedItemTypes {
 
43
             get {
 
44
                 return new Type[] { typeof (ContactItem) };
 
45
             }
 
46
         }
 
47
         
 
48
         public ICollection<IItem> Items {
 
49
             get { return items; }
 
50
         }
 
51
         
 
52
         public ICollection<IItem> ChildrenOfItem (IItem parent) {
 
53
             return null;
 
54
         }
 
55
         
 
56
         public void UpdateItems () {
 
57
             string url, username, password;
 
58
             string screen_name, image, name;
 
59
             HttpWebResponse response;
 
60
             XmlDocument friends = new XmlDocument ();
 
61
             GConf.Client gconf = new GConf.Client ();
 
62
             ContactItem twit_friend_by_name, twit_friend_by_sn;
 
63
             screen_name = name = image = username = password = "";
 
64
             items.Clear ();
 
65
             
 
66
             try {
 
67
                 username = gconf.Get ("/apps/gnome-do/plugins/twitter/username") as string;
 
68
                 password = gconf.Get ("/apps/gnome-do/plugins/twitter/password") as string;
 
69
             } catch (NoSuchKeyException) {
 
70
                 gconf.Set ("/apps/gnome-do/plugins/twitter/username","");
 
71
                 gconf.Set ("/apps/gnome-do/plugins/twitter/password","");
 
72
             }
 
73
             
 
74
             url = "http://twitter.com/statuses/friends.xml";
 
75
             HttpWebRequest request = WebRequest.Create (url) as HttpWebRequest;
 
76
             request.Credentials = new NetworkCredential (username,password);
 
77
             response = (HttpWebResponse) request.GetResponse ();
 
78
             friends.Load (response.GetResponseStream ());
 
79
             response.Close ();
 
80
             foreach (XmlNode user_node in friends.GetElementsByTagName ("user")) {
 
81
                 foreach (XmlNode attr in user_node.ChildNodes) {
 
82
                     switch(attr.Name) {
 
83
                     case("screen_name"):
 
84
                         screen_name = attr.InnerText; break;
 
85
                     case("name"):
 
86
                         name = attr.InnerText; break;
 
87
                     case("profile_image_url"):
 
88
                         image =  attr.InnerText; break;
 
89
                     }
 
90
                 }
 
91
                 //Here we make two contact items to make searching a little bit
 
92
                 //easier. One can search by a real name and get an assload of contact
 
93
                 //details, or by twitter screen name.
 
94
                 twit_friend_by_name =  ContactItem.Create (name);
 
95
                 twit_friend_by_name["twitter.screename"] = "@" + screen_name;
 
96
                 items.Add (twit_friend_by_name);
 
97
                 twit_friend_by_sn = ContactItem.Create (screen_name);
 
98
                 twit_friend_by_sn["twitter.screename"] = "@" + screen_name;
 
99
                 items.Add(twit_friend_by_sn);
 
100
             }
 
101
         }
 
102
     }
 
103
 }