~khurshid-alam/gwibber/gwibber-hack

« back to all changes in this revision

Viewing changes to gwibber/microblog/opencollaboration.py

  • Committer: Khurshid Alam
  • Date: 2012-04-06 14:38:38 UTC
  • Revision ID: khurshid.alam@linuxmail.org-20120406143838-nz7hjg8vtzi2wl7i
initial revision

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
 
 
3
Open Collaboration Services module for Gwibber
 
4
SegPhault (Ryan Paul) - 06/17/2009
 
5
 
 
6
"""
 
7
 
 
8
from . import can, support
 
9
import urllib2, urllib, base64, json
 
10
from gettext import lgettext as _
 
11
 
 
12
PROTOCOL_INFO = {
 
13
  "name": "OCS",
 
14
  "version": 0.1,
 
15
  
 
16
  "config": [
 
17
    "private:password",
 
18
    "username",
 
19
    "domain",
 
20
    "message_color",
 
21
    "receive_enabled",
 
22
    "send_enabled",
 
23
  ],
 
24
 
 
25
  "features": [
 
26
    "send",
 
27
    "receive",
 
28
  ],
 
29
}
 
30
 
 
31
class Message:
 
32
  def __init__(self, client, data):
 
33
    self.id = str(data["id"])
 
34
    self.client = client
 
35
    self.account = client.account
 
36
    self.service = client.account["service"]
 
37
    self.username = client.account["username"]
 
38
 
 
39
    self.sender = "%s %s" % (data["firstname"], data["lastname"])
 
40
    self.sender_nick = data["personid"]
 
41
    self.sender_id = data["personid"]
 
42
    self.time = support.parse_time(data["timestamp"])
 
43
    self.image = data["avatarpic"]
 
44
    self.bgcolor = "message_color"
 
45
    self.url = data["link"]
 
46
    self.text = data["message"]
 
47
    self.profile_url = client.url(data["profilepage"])
 
48
    self.is_reply = False
 
49
 
 
50
class SearchResult:
 
51
  def __init__(self, client, data):
 
52
    self.client = client
 
53
    self.account = client.account
 
54
    self.service = client.account["service"]
 
55
    self.username = client.account["username"]
 
56
 
 
57
    """
 
58
    self.id = data.id
 
59
    self.sender = data.personid.string #"%s %s" % (data.firstname.string, data.lastname.string)
 
60
    self.sender_nick = data.personid.string
 
61
    self.sender_id = data.personid.string
 
62
    self.time = support.parse_time(data.changed.string)
 
63
    self.image = "http://www.opendesktop.org/usermanager/nopic.png"
 
64
    self.bgcolor = "message_color"
 
65
    self.url = data.detailpage.string
 
66
    self.text = data.find("name").string
 
67
    self.profile_url = "http://opendesktop.org"
 
68
    self.is_reply = False
 
69
 
 
70
    self.thumbnails = [{
 
71
      "src": data.previewpic1.string,
 
72
      "href": self.url,
 
73
    }]
 
74
    """
 
75
    
 
76
    self.id = data["id"]
 
77
    self.sender = data["personid"] #"%s %s" % (data["firstname"], data["lastname"])
 
78
    self.sender_nick = data["personid"]
 
79
    self.sender_id = data["personid"]
 
80
    self.time = support.parse_time(data["changed"])
 
81
    self.image = "http://www.opendesktop.org/usermanager/nopic.png"
 
82
    self.bgcolor = "message_color"
 
83
    self.url = data["detailpage"]
 
84
    self.text = data["name"]
 
85
    self.profile_url = "http://opendesktop.org"
 
86
    self.is_reply = False
 
87
 
 
88
    self.thumbnails = [{
 
89
      "src": data["previewpic1"],
 
90
      "url": self.url,
 
91
    }]
 
92
 
 
93
class Client:
 
94
  def __init__(self, acct):
 
95
    self.account = acct
 
96
 
 
97
  def send_enabled(self):
 
98
    return self.account["send_enabled"] and \
 
99
      self.account["username"] != None and \
 
100
      self.account["private:password"] != None
 
101
 
 
102
  def receive_enabled(self):
 
103
    return self.account["receive_enabled"] and \
 
104
      self.account["username"] != None and \
 
105
      self.account["private:password"] != None
 
106
 
 
107
  def url(self, path):
 
108
    d = self.account["domain"]
 
109
    if d.startswith("http://") or d.startswith("https://"): return d + path
 
110
    if self.account["allow_insecure"]: return "http://" + d + path
 
111
    return "https://" + d + path
 
112
 
 
113
  def get_auth(self):
 
114
    return "Basic %s" % base64.encodestring(
 
115
      ("%s:%s" % (self.account["username"], self.account["private:password"]))).strip()
 
116
 
 
117
  def connect(self, url, data = None):
 
118
    return urllib2.urlopen(urllib2.Request(
 
119
      self.url(url), data, headers = {"Authorization": self.get_auth()}))
 
120
 
 
121
  def get_messages(self):
 
122
    return json.load(self.connect("/v1/activity?" +
 
123
      urllib.urlencode({"format": "json"})))["data"]
 
124
 
 
125
  def get_search_data(self, query):
 
126
    return json.load(self.connect("/v1/content/data?" +
 
127
      urllib.urlencode({
 
128
        "format": "json",
 
129
        "search": query,
 
130
        "sortmodes": "high",
 
131
        "categories": "120x121x101x100x170x171x172x173x174x175x176x177x178x179",
 
132
      })))["data"]
 
133
 
 
134
  def receive(self):
 
135
    for data in self.get_messages():
 
136
      yield Message(self, data)
 
137
 
 
138
  def search(self, query):
 
139
    for data in self.get_search_data(query):
 
140
      yield SearchResult(self, data)
 
141
 
 
142
  def send(self, message):
 
143
    print self.connect("/v1/activity", urllib.urlencode({"message": message}))