Welcome to mirror list, hosted at ThFree Co, Russian Federation.

roster_zeroconf.py « zeroconf « common « src - dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ad1aca81cfc2ccd9ae6a0d38f1b953b3cb4f42eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
##      common/zeroconf/roster_zeroconf.py
##
## Copyright (C) 2006 Stefan Bethge <stefan@lanpartei.de>
##
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 3 only.
##
## Gajim is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Gajim.  If not, see <http://www.gnu.org/licenses/>.
##


from common.zeroconf import zeroconf

class Roster:
	def __init__(self, zeroconf):
		self._data = None
		self.zeroconf = zeroconf 	  	 # our zeroconf instance

	def update_roster(self):
		for val in self.zeroconf.contacts.values():
			self.setItem(val[zeroconf.C_NAME])

	def getRoster(self):
		#print 'roster_zeroconf.py: getRoster'
		if self._data is None:
			self._data = {}
			self.update_roster()
		return self

	def getDiffs(self):
		'''	update the roster with new data and return dict with
		jid -> new status pairs to do notifications and stuff '''

		diffs = {}
		old_data = self._data.copy()
		self.update_roster()
		for key in old_data.keys():
			if self._data.has_key(key):
				if old_data[key] != self._data[key]:
					diffs[key] = self._data[key]['status']
		#print 'roster_zeroconf.py: diffs:' + str(diffs)
		return diffs
		
	def setItem(self, jid, name = '', groups = ''):
		#print 'roster_zeroconf.py: setItem %s' % jid
		contact = self.zeroconf.get_contact(jid)
		if not contact:
			return

		(service_jid, domain, interface, protocol, host, address, port, bare_jid, txt)  \
			= contact

		self._data[jid]={}
		self._data[jid]['ask'] = 'no'  #?
		self._data[jid]['subscription'] = 'both'
		self._data[jid]['groups'] = []
		self._data[jid]['resources'] = {}
		self._data[jid]['address'] = address
		self._data[jid]['host'] = host
		self._data[jid]['port'] = port
		txt_dict = self.zeroconf.txt_array_to_dict(txt)
		if txt_dict.has_key('status'):
			status = txt_dict['status']
		else:
			status = ''
		if not status:
			status = 'avail'
		nm = ''
		if txt_dict.has_key('1st'):
			nm = txt_dict['1st']
		if txt_dict.has_key('last'):
			if nm != '':
				nm += ' '
			nm += txt_dict['last']
		if nm:
			self._data[jid]['name'] = nm
		else:
			self._data[jid]['name'] = jid
		if status == 'avail': 
			status = 'online'
		self._data[jid]['txt_dict'] = txt_dict
		if not self._data[jid]['txt_dict'].has_key('msg'):
			self._data[jid]['txt_dict']['msg'] = ''
		self._data[jid]['status'] = status
		self._data[jid]['show'] = status

	def delItem(self, jid):
		#print 'roster_zeroconf.py: delItem %s' % jid
		if self._data.has_key(jid):
			del self._data[jid]
		
	def getItem(self, jid):
		#print 'roster_zeroconf.py: getItem: %s' % jid
		if self._data.has_key(jid):
			return self._data[jid]

	def __getitem__(self,jid):
		#print 'roster_zeroconf.py: __getitem__'
		return self._data[jid]
	
	def getItems(self):
		#print 'roster_zeroconf.py: getItems'
		# Return list of all [bare] JIDs that the roster currently tracks.
		return self._data.keys()
	
	def keys(self):
		#print 'roster_zeroconf.py: keys'
		return self._data.keys()
	
	def getRaw(self):
		#print 'roster_zeroconf.py: getRaw'
		return self._data

	def getResources(self, jid):
		#print 'roster_zeroconf.py: getResources(%s)' % jid
		return {}
		
	def getGroups(self, jid):
		return self._data[jid]['groups']

	def getName(self, jid):
		if self._data.has_key(jid):
			return self._data[jid]['name']

	def getStatus(self, jid):
		if self._data.has_key(jid):
			return self._data[jid]['status']

	def getMessage(self, jid):
		if self._data.has_key(jid):
			return self._data[jid]['txt_dict']['msg']

	def getShow(self, jid):
		#print 'roster_zeroconf.py: getShow'
		return self.getStatus(jid)

	def getPriority(jid):
		return 5

	def getSubscription(self,jid):
		#print 'roster_zeroconf.py: getSubscription'
		return 'both'

	def Subscribe(self,jid):
		pass
		
	def Unsubscribe(self,jid):
		pass
	
	def Authorize(self,jid):
		pass

	def Unauthorize(self,jid):
		pass

# vim: se ts=3: