annotate frontends/src/quick_frontend/quick_app.py @ 297:c5554e2939dd

plugin XEP 0277: author for in request + author, updated management for out request - a workaround is now used to parse "nick" tag (Jappix behaviour) - author and updated can now be used in data when sendind microblog. Is no author is given, user jid is used, if no updated is given, current timestamp is used
author Goffi <goffi@goffi.org>
date Fri, 18 Feb 2011 22:32:02 +0100
parents c1ad04586edf
children f19771d2e63b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
goffi@necton2
parents:
diff changeset
1 #!/usr/bin/python
goffi@necton2
parents:
diff changeset
2 # -*- coding: utf-8 -*-
goffi@necton2
parents:
diff changeset
3
goffi@necton2
parents:
diff changeset
4 """
goffi@necton2
parents:
diff changeset
5 helper class for making a SAT frontend
228
b1794cbb88e5 2011 copyright upgrade
Goffi <goffi@goffi.org>
parents: 225
diff changeset
6 Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
7
goffi@necton2
parents:
diff changeset
8 This program is free software: you can redistribute it and/or modify
goffi@necton2
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
goffi@necton2
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
goffi@necton2
parents:
diff changeset
11 (at your option) any later version.
goffi@necton2
parents:
diff changeset
12
goffi@necton2
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
goffi@necton2
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
goffi@necton2
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
goffi@necton2
parents:
diff changeset
16 GNU General Public License for more details.
goffi@necton2
parents:
diff changeset
17
goffi@necton2
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
goffi@necton2
parents:
diff changeset
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
goffi@necton2
parents:
diff changeset
20 """
goffi@necton2
parents:
diff changeset
21
goffi@necton2
parents:
diff changeset
22 from logging import debug, info, error
225
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
23 from sat.tools.jid import JID
fd9b7834d98a distutils installation script, draft
Goffi <goffi@goffi.org>
parents: 223
diff changeset
24 from sat_frontends.bridge.DBus import DBusBridgeFrontend,BridgeExceptionNoService
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
25 from optparse import OptionParser
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
26 import pdb
0
goffi@necton2
parents:
diff changeset
27
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
28 import gettext
Goffi <goffi@goffi.org>
parents: 68
diff changeset
29 gettext.install('sat_frontend', "../i18n", unicode=True)
Goffi <goffi@goffi.org>
parents: 68
diff changeset
30
0
goffi@necton2
parents:
diff changeset
31 class QuickApp():
goffi@necton2
parents:
diff changeset
32 """This class contain the main methods needed for the frontend"""
goffi@necton2
parents:
diff changeset
33
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
34 def __init__(self, single_profile=True):
0
goffi@necton2
parents:
diff changeset
35 self.rosterList = {}
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
36 self.profiles = {}
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
37 self.single_profile = single_profile
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
38 self.check_options()
0
goffi@necton2
parents:
diff changeset
39
goffi@necton2
parents:
diff changeset
40 ## bridge ##
165
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
41 try:
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
42 self.bridge=DBusBridgeFrontend()
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
43 except BridgeExceptionNoService:
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
44 print(_(u"Can't connect to SàT backend, are you sure it's launched ?"))
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
45 import sys
8a2053de6f8c Frontends: management of unlaunched SàT Backend (information message and exit)
Goffi <goffi@goffi.org>
parents: 159
diff changeset
46 sys.exit(1)
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
47 self.bridge.register("connected", self.connected)
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
48 self.bridge.register("disconnected", self.disconnected)
274
c1ad04586edf Bridge: rename connection_error to connectionError for function name consistency
Goffi <goffi@goffi.org>
parents: 272
diff changeset
49 self.bridge.register("connectionError", self.connectionError)
0
goffi@necton2
parents:
diff changeset
50 self.bridge.register("newContact", self.newContact)
goffi@necton2
parents:
diff changeset
51 self.bridge.register("newMessage", self.newMessage)
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
52 self.bridge.register("newAlert", self.newAlert)
0
goffi@necton2
parents:
diff changeset
53 self.bridge.register("presenceUpdate", self.presenceUpdate)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
54 self.bridge.register("roomJoined", self.roomJoined)
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
55 self.bridge.register("roomUserJoined", self.roomUserJoined)
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
56 self.bridge.register("roomUserLeft", self.roomUserLeft)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
57 self.bridge.register("roomNewSubject", self.roomNewSubject)
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 79
diff changeset
58 self.bridge.register("tarotGameStarted", self.tarotGameStarted)
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
59 self.bridge.register("tarotGameNew", self.tarotGameNew)
92
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
60 self.bridge.register("tarotGameChooseContrat", self.tarotChooseContrat)
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
61 self.bridge.register("tarotGameShowCards", self.tarotShowCards)
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
62 self.bridge.register("tarotGameYourTurn", self.tarotMyTurn)
95
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
63 self.bridge.register("tarotGameScore", self.tarotScore)
93
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
64 self.bridge.register("tarotGameCardsPlayed", self.tarotCardsPlayed)
99
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
65 self.bridge.register("tarotGameInvalidCards", self.tarotInvalidCards)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
66 self.bridge.register("subscribe", self.subscribe)
0
goffi@necton2
parents:
diff changeset
67 self.bridge.register("paramUpdate", self.paramUpdate)
goffi@necton2
parents:
diff changeset
68 self.bridge.register("contactDeleted", self.contactDeleted)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
69 self.bridge.register("updatedValue", self.updatedValue, "request")
0
goffi@necton2
parents:
diff changeset
70 self.bridge.register("askConfirmation", self.askConfirmation, "request")
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
71 self.bridge.register("actionResult", self.actionResult, "request")
25
53e921c8a357 new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents: 22
diff changeset
72 self.bridge.register("actionResultExt", self.actionResult, "request")
0
goffi@necton2
parents:
diff changeset
73
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
74 self.current_action_ids = set()
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
75 self.current_action_ids_cb = {}
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
76
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
77 def check_profile(self, profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
78 """Tell if the profile is currently followed by the application"""
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
79 return profile in self.profiles.keys()
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
80
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
81 def postInit(self):
159
2fa58703f1b7 Primitivus: notification bar, first draft
Goffi <goffi@goffi.org>
parents: 150
diff changeset
82 """Must be called after initialization is done, do all automatic task (auto plug profile)"""
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
83 if self.options.profile:
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
84 if not self.bridge.getProfileName(self.options.profile):
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
85 error(_("Trying to plug an unknown profile (%s)" % self.options.profile))
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
86 else:
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
87 self.plug_profile(self.options.profile)
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
88
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
89 def check_options(self):
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
90 """Check command line options"""
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
91 usage=_("""
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
92 %prog [options]
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
93
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
94 %prog --help for options list
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
95 """)
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
96 parser = OptionParser(usage=usage)
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
97
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
98 parser.add_option("-p", "--profile", help=_("Select the profile to use"))
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
99
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
100 (self.options, args) = parser.parse_args()
132
a86607e5cf38 quick_app: self.occupants for group chat are now managed by quick_chat. self.options.profile now support unicode
Goffi <goffi@goffi.org>
parents: 125
diff changeset
101 if self.options.profile:
a86607e5cf38 quick_app: self.occupants for group chat are now managed by quick_chat. self.options.profile now support unicode
Goffi <goffi@goffi.org>
parents: 125
diff changeset
102 self.options.profile = self.options.profile.decode('utf-8')
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
103 return args
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
104
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
105 def plug_profile(self, profile_key='@DEFAULT@'):
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
106 """Tell application which profile must be used"""
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
107 if self.single_profile and self.profiles:
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
108 error(_('There is already one profile plugged (we are in single profile mode) !'))
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
109 return
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
110 profile = self.bridge.getProfileName(profile_key)
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
111 if not profile:
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
112 error(_("The profile asked doesn't exist"))
68
9b842086d915 multiple profiles update
Goffi <goffi@goffi.org>
parents: 66
diff changeset
113 return
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
114 if self.profiles.has_key(profile):
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
115 warning(_("The profile is already plugged"))
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
116 return
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
117 self.profiles[profile]={}
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
118 if self.single_profile:
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
119 self.profile = profile
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
120
0
goffi@necton2
parents:
diff changeset
121 ###now we get the essential params###
272
1d2e0dfe7114 bridge: core & frontend sides of bridge are now generated
Goffi <goffi@goffi.org>
parents: 266
diff changeset
122 self.profiles[profile]['whoami']=JID(self.bridge.getParamA("JabberID","Connection", profile_key=profile))
1d2e0dfe7114 bridge: core & frontend sides of bridge are now generated
Goffi <goffi@goffi.org>
parents: 266
diff changeset
123 autoconnect = self.bridge.getParamA("autoconnect","Connection", profile_key=profile) == "true"
1d2e0dfe7114 bridge: core & frontend sides of bridge are now generated
Goffi <goffi@goffi.org>
parents: 266
diff changeset
124 self.profiles[profile]['watched']=self.bridge.getParamA("Watched", "Misc", profile_key=profile).split() #TODO: put this in a plugin
0
goffi@necton2
parents:
diff changeset
125
goffi@necton2
parents:
diff changeset
126 ## misc ##
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
127 self.profiles[profile]['onlineContact'] = set() #FIXME: temporary
0
goffi@necton2
parents:
diff changeset
128
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
129 #TODO: gof: manage multi-profiles here
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
130 if not self.bridge.isConnected(profile):
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
131 self.setStatusOnline(False)
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
132 else:
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
133 self.setStatusOnline(True)
0
goffi@necton2
parents:
diff changeset
134
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
135 ### now we fill the contact list ###
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
136 for contact in self.bridge.getContacts(profile):
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
137 self.newContact(contact[0], contact[1], contact[2], profile)
0
goffi@necton2
parents:
diff changeset
138
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
139 presences = self.bridge.getPresenceStatus(profile)
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
140 for contact in presences:
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
141 for res in presences[contact]:
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
142 jabber_id = contact+('/'+res if res else '')
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
143 show = presences[contact][res][0]
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
144 priority = presences[contact][res][1]
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
145 statuses = presences[contact][res][2]
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
146 self.presenceUpdate(jabber_id, show, priority, statuses, profile)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
147
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
148 #The waiting subscription requests
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
149 waitingSub = self.bridge.getWaitingSub(profile)
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
150 for sub in waitingSub:
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
151 self.subscribe(waitingSub[sub], sub, profile)
0
goffi@necton2
parents:
diff changeset
152
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
153 #Now we open the MUC window where we already are:
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
154 for room_args in self.bridge.getRoomJoined(profile):
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
155 self.roomJoined(*room_args, profile=profile)
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 76
diff changeset
156
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
157 for subject_args in self.bridge.getRoomSubjects(profile):
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
158 self.roomNewSubject(*subject_args, profile=profile)
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
159
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
160 if autoconnect and not self.bridge.isConnected(profile_key):
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
161 #Does the user want autoconnection ?
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
162 self.bridge.connect(profile_key)
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
163
78
ace2af8abc5a Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents: 76
diff changeset
164
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
165 def unplug_profile(self, profile):
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
166 """Tell the application to not follow anymore the profile"""
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
167 if not profile in self.profiles:
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
168 warning (_("This profile is not plugged"))
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
169 return
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
170 self.profiles.remove(profile)
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
171
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
172 def clear_profile(self):
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
173 self.profiles.clear()
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
174
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
175 def connected(self, profile):
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
176 """called when the connection is made"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
177 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
178 return
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
179 debug(_("Connected"))
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
180 self.setStatusOnline(True)
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
181
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
182 def disconnected(self, profile):
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
183 """called when the connection is closed"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
184 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
185 return
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
186 debug(_("Disconnected"))
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
187 self.CM.clear()
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
188 self.contactList.clear_contacts()
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
189 self.setStatusOnline(False)
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
190
274
c1ad04586edf Bridge: rename connection_error to connectionError for function name consistency
Goffi <goffi@goffi.org>
parents: 272
diff changeset
191 def connectionError(self, error_type, profile):
262
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
192 """called when something goest wrong with the connection"""
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
193 if not self.check_profile(profile):
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
194 return
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
195 debug(_("Connection Error"))
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
196 self.disconnected(profile)
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
197 if error_type == "AUTH_ERROR":
263
bfd01aed0a3a added "please" in password error message
Goffi <goffi@goffi.org>
parents: 262
diff changeset
198 self.showDialog(_("Can't connect to account, please check your password"), _("Connection error"), "error")
262
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
199 else:
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
200 error(_('FIXME: error_type %s not implemented') % error_type)
af3d4f11fe43 Added management of connection error
Goffi <goffi@goffi.org>
parents: 244
diff changeset
201
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
202 def newContact(self, JabberId, attributes, groups, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
203 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
204 return
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
205 entity=JID(JabberId)
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
206 self.rosterList[entity.short]=(dict(attributes), list(groups))
0
goffi@necton2
parents:
diff changeset
207
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
208 def newMessage(self, from_jid, msg, type, to_jid, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
209 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
210 return
0
goffi@necton2
parents:
diff changeset
211 sender=JID(from_jid)
goffi@necton2
parents:
diff changeset
212 addr=JID(to_jid)
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
213 win = addr if sender.short == self.profiles[profile]['whoami'].short else sender
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
214 self.current_action_ids = set()
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
215 self.current_action_ids_cb = {}
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
216 self.chat_wins[win.short].printMessage(sender, msg, profile)
0
goffi@necton2
parents:
diff changeset
217
221
96186f36d8cb bridge: fixed newAlert parameters order
Goffi <goffi@goffi.org>
parents: 200
diff changeset
218 def newAlert(self, msg, title, alert_type, profile):
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
219 if not self.check_profile(profile):
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
220 return
221
96186f36d8cb bridge: fixed newAlert parameters order
Goffi <goffi@goffi.org>
parents: 200
diff changeset
221 assert alert_type in ['INFO','ERROR']
96186f36d8cb bridge: fixed newAlert parameters order
Goffi <goffi@goffi.org>
parents: 200
diff changeset
222 self.showDialog(unicode(msg),unicode(title),alert_type.lower())
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
223
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
224
0
goffi@necton2
parents:
diff changeset
225 def setStatusOnline(self, online=True):
goffi@necton2
parents:
diff changeset
226 pass
goffi@necton2
parents:
diff changeset
227
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
228 def presenceUpdate(self, jabber_id, show, priority, statuses, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
229 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
230 return
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
231 debug (_("presence update for %(jid)s (show=%(show)s, priority=%(priority)s, statuses=%(statuses)s) [profile:%(profile)s]") % {'jid':jabber_id, 'show':show, 'priority':priority, 'statuses':statuses, 'profile':profile});
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
232 from_jid=JID(jabber_id)
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
233 debug ("from_jid.short=%(from_jid)s whoami.short=%(whoami)s" % {'from_jid':from_jid.short, 'whoami':self.profiles[profile]['whoami'].short})
0
goffi@necton2
parents:
diff changeset
234
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
235 if from_jid.short==self.profiles[profile]['whoami'].short:
0
goffi@necton2
parents:
diff changeset
236 if not type:
goffi@necton2
parents:
diff changeset
237 self.setStatusOnline(True)
goffi@necton2
parents:
diff changeset
238 elif type=="unavailable":
goffi@necton2
parents:
diff changeset
239 self.setStatusOnline(False)
goffi@necton2
parents:
diff changeset
240 return
goffi@necton2
parents:
diff changeset
241
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
242 if show != 'unavailable':
0
goffi@necton2
parents:
diff changeset
243 name=""
53
6dfe5bb10008 Wix: groups in contact list, first draft
Goffi <goffi@goffi.org>
parents: 52
diff changeset
244 groups = []
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
245 if self.rosterList.has_key(from_jid.short):
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
246 if self.rosterList[from_jid.short][0].has_key("name"):
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
247 name=self.rosterList[from_jid.short][0]["name"]
53
6dfe5bb10008 Wix: groups in contact list, first draft
Goffi <goffi@goffi.org>
parents: 52
diff changeset
248 groups=self.rosterList[from_jid.short][1]
0
goffi@necton2
parents:
diff changeset
249
goffi@necton2
parents:
diff changeset
250 #FIXME: must be moved in a plugin
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
251 if from_jid.short in self.profiles[profile]['watched'] and not from_jid.short in self.profiles[profile]['onlineContact']:
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
252 self.showAlert(_("Watched jid [%s] is connected !") % from_jid.short)
0
goffi@necton2
parents:
diff changeset
253
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
254 self.profiles[profile]['onlineContact'].add(from_jid) #FIXME onlineContact is useless with CM, must be removed
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
255 self.CM.add(from_jid)
244
3bc4457687a2 quick_frontend: fixed bad string type with DBus by converting them to unicode
Goffi <goffi@goffi.org>
parents: 228
diff changeset
256 self.CM.update(from_jid, 'name', unicode(name))
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
257 self.CM.update(from_jid, 'show', show)
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
258 self.CM.update(from_jid, 'statuses', statuses)
53
6dfe5bb10008 Wix: groups in contact list, first draft
Goffi <goffi@goffi.org>
parents: 52
diff changeset
259 self.CM.update(from_jid, 'groups', groups)
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 57
diff changeset
260 cache = self.bridge.getCardCache(from_jid)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
261 if cache.has_key('nick'):
244
3bc4457687a2 quick_frontend: fixed bad string type with DBus by converting them to unicode
Goffi <goffi@goffi.org>
parents: 228
diff changeset
262 self.CM.update(from_jid, 'nick', unicode(cache['nick']))
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
263 if cache.has_key('avatar'):
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
264 self.CM.update(from_jid, 'avatar', self.bridge.getAvatarFile(cache['avatar']))
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
265 self.contactList.replace(from_jid, self.CM.getAttr(from_jid, 'groups'))
0
goffi@necton2
parents:
diff changeset
266
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
267 if show=="unavailable" and from_jid in self.profiles[profile]['onlineContact']:
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
268 self.profiles[profile]['onlineContact'].remove(from_jid)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
269 self.CM.remove(from_jid)
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
270 if not self.CM.isConnected(from_jid):
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
271 self.contactList.disconnect(from_jid)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
272
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
273 def roomJoined(self, room_id, room_service, room_nicks, user_nick, profile):
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
274 """Called when a MUC room is joined"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
275 if not self.check_profile(profile):
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
276 return
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
277 debug (_("Room [%(room_name)s] joined by %(profile)s, users presents:%(users)s") % {'room_name':room_id+'@'+room_service, 'profile': profile, 'users':room_nicks})
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
278 room_jid=room_id+'@'+room_service
79
db0a0f000e37 Chat presentation enhancement
Goffi <goffi@goffi.org>
parents: 78
diff changeset
279 self.chat_wins[room_jid].setUserNick(user_nick)
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
280 self.chat_wins[room_jid].setType("group")
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 79
diff changeset
281 self.chat_wins[room_jid].id = room_jid
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
282 self.chat_wins[room_jid].setPresents(list(set([user_nick]+room_nicks)))
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
283
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
284
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
285 def roomUserJoined(self, room_id, room_service, user_nick, user_data, profile):
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
286 """Called when an user joined a MUC room"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
287 if not self.check_profile(profile):
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
288 return
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
289 room_jid=room_id+'@'+room_service
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
290 if self.chat_wins.has_key(room_jid):
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
291 self.chat_wins[room_jid].replaceUser(user_nick)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
292 debug (_("user [%(user_nick)s] joined room [%(room_jid)s]") % {'user_nick':user_nick, 'room_jid':room_jid})
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
293
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
294 def roomUserLeft(self, room_id, room_service, user_nick, user_data, profile):
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
295 """Called when an user joined a MUC room"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
296 if not self.check_profile(profile):
75
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
297 return
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
298 room_jid=room_id+'@'+room_service
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
299 if self.chat_wins.has_key(room_jid):
7322a41f8a8e Basic user joined/left management
Goffi <goffi@goffi.org>
parents: 72
diff changeset
300 self.chat_wins[room_jid].removeUser(user_nick)
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
301 debug (_("user [%(user_nick)s] left room [%(room_jid)s]") % {'user_nick':user_nick, 'room_jid':room_jid})
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
302
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
303 def roomNewSubject(self, room_id, room_service, subject, profile):
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
304 """Called when subject of MUC room change"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
305 if not self.check_profile(profile):
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
306 return
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
307 room_jid=room_id+'@'+room_service
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
308 if self.chat_wins.has_key(room_jid):
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
309 self.chat_wins[room_jid].setSubject(subject)
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
310 debug (_("new subject for room [%(room_jid)s]: %(subject)s") % {'room_jid':room_jid, "subject":subject})
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 79
diff changeset
311
90
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 89
diff changeset
312 def tarotGameStarted(self, room_jid, referee, players, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
313 if not self.check_profile(profile):
85
fc7583282d40 Tarot Game plugin: first draft
Goffi <goffi@goffi.org>
parents: 79
diff changeset
314 return
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
315 debug (_("Tarot Game Started \o/"))
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
316 if self.chat_wins.has_key(room_jid):
90
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 89
diff changeset
317 self.chat_wins[room_jid].startGame("Tarot", referee, players)
4020931569b8 Tarot Game: session initialization
Goffi <goffi@goffi.org>
parents: 89
diff changeset
318 debug (_("new Tarot game started by [%(referee)s] in room [%(room_jid)s] with %(players)s") % {'referee':referee, 'room_jid':room_jid, 'players':[str(player) for player in players]})
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
319
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
320 def tarotGameNew(self, room_jid, hand, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
321 if not self.check_profile(profile):
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
322 return
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
323 debug (_("New Tarot Game"))
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
324 if self.chat_wins.has_key(room_jid):
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
325 self.chat_wins[room_jid].getGame("Tarot").newGame(hand)
86
4b5f2d55b6ac wix: Tarot panel now appear on top of groupchat window when a Tarot game is started
Goffi <goffi@goffi.org>
parents: 85
diff changeset
326
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
327 def tarotChooseContrat(self, room_jid, xml_data, profile):
144
80661755ea8d Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents: 132
diff changeset
328 """Called when the player has to select his contrat"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
329 if not self.check_profile(profile):
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
330 return
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
331 debug (_("Tarot: need to select a contrat"))
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
332 if self.chat_wins.has_key(room_jid):
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
333 self.chat_wins[room_jid].getGame("Tarot").chooseContrat(xml_data)
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
334
92
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
335 def tarotShowCards(self, room_jid, game_stage, cards, data, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
336 if not self.check_profile(profile):
92
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
337 return
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
338 debug (_("Show cards"))
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
339 if self.chat_wins.has_key(room_jid):
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
340 self.chat_wins[room_jid].getGame("Tarot").showCards(game_stage, cards, data)
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
341
92
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
342 def tarotMyTurn(self, room_jid, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
343 if not self.check_profile(profile):
92
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
344 return
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
345 debug (_("My turn to play"))
2503de7fb4c7 Tarot game: chien/écart stage
Goffi <goffi@goffi.org>
parents: 91
diff changeset
346 if self.chat_wins.has_key(room_jid):
150
63d20bda5754 Primitivus: Tarot game
Goffi <goffi@goffi.org>
parents: 144
diff changeset
347 self.chat_wins[room_jid].getGame("Tarot").myTurn()
93
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
348
95
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
349 def tarotScore(self, room_jid, xml_data, winners, loosers, profile):
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
350 """Called when the game is finished and the score are updated"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
351 if not self.check_profile(profile):
95
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
352 return
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
353 debug (_("Tarot: score received"))
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
354 if self.chat_wins.has_key(room_jid):
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
355 self.chat_wins[room_jid].getGame("Tarot").showScores(xml_data, winners, loosers)
be206a3d1a9b Tarot game: score calculation
Goffi <goffi@goffi.org>
parents: 93
diff changeset
356
93
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
357 def tarotCardsPlayed(self, room_jid, player, cards, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
358 if not self.check_profile(profile):
93
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
359 return
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
360 debug (_("Card(s) played (%(player)s): %(cards)s") % {"player":player, "cards":cards})
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
361 if self.chat_wins.has_key(room_jid):
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
362 self.chat_wins[room_jid].getGame("Tarot").cardsPlayed(player, cards)
2f87651a5ad8 Tarot game: basic trick
Goffi <goffi@goffi.org>
parents: 92
diff changeset
363
99
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
364 def tarotInvalidCards(self, room_jid, phase, played_cards, invalid_cards, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
365 if not self.check_profile(profile):
99
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
366 return
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
367 debug (_("Cards played are not valid: %s") % invalid_cards)
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
368 if self.chat_wins.has_key(room_jid):
63c9067a1499 Tarot game: invalid cards management
Goffi <goffi@goffi.org>
parents: 95
diff changeset
369 self.chat_wins[room_jid].getGame("Tarot").invalidCards(phase, played_cards, invalid_cards)
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
370
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
371 def _subscribe_cb(self, answer, data):
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
372 entity, profile = data
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
373 if answer:
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
374 self.bridge.subscription("subscribed", entity.short, profile_key = profile)
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
375 else:
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
376 self.bridge.subscription("unsubscribed", entity.short, profile_key = profile)
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
377
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
378 def subscribe(self, type, raw_jid, profile):
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
379 """Called when a subsciption management signal is received"""
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
380 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
381 return
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
382 entity = JID(raw_jid)
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
383 if type=="subscribed":
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
384 # this is a subscription confirmation, we just have to inform user
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
385 self.showDialog(_("The contact %s has accepted your subscription") % entity.short, _('Subscription confirmation'))
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
386 elif type=="unsubscribed":
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
387 # this is a subscription refusal, we just have to inform user
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
388 self.showDialog(_("The contact %s has refused your subscription") % entity.short, _('Subscription refusal'), 'error')
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
389 elif type=="subscribe":
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
390 # this is a subscriptionn request, we have to ask for user confirmation
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
391 answer = self.showDialog(_("The contact %s wants to subscribe to your presence.\nDo you accept ?") % entity.short, _('Subscription confirmation'), 'yes/no', answer_cb = self._subscribe_cb, answer_data=(entity, profile))
0
goffi@necton2
parents:
diff changeset
392
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
393 def showDialog(self, message, title, type="info", answer_cb = None):
0
goffi@necton2
parents:
diff changeset
394 raise NotImplementedError
goffi@necton2
parents:
diff changeset
395
goffi@necton2
parents:
diff changeset
396 def showAlert(self, message):
goffi@necton2
parents:
diff changeset
397 pass #FIXME
goffi@necton2
parents:
diff changeset
398
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
399 def paramUpdate(self, name, value, namespace, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
400 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
401 return
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
402 debug(_("param update: [%(namespace)s] %(name)s = %(value)s") % {'namespace':namespace, 'name':name, 'value':value})
0
goffi@necton2
parents:
diff changeset
403 if (namespace,name) == ("Connection", "JabberID"):
70
Goffi <goffi@goffi.org>
parents: 68
diff changeset
404 debug (_("Changing JID to %s"), value)
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
405 self.profiles[profile]['whoami']=JID(value)
0
goffi@necton2
parents:
diff changeset
406 elif (namespace,name) == ("Misc", "Watched"):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
407 self.profiles[profile]['watched']=value.split()
0
goffi@necton2
parents:
diff changeset
408
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
409 def contactDeleted(self, jid, profile):
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
410 if not self.check_profile(profile):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
411 return
0
goffi@necton2
parents:
diff changeset
412 target = JID(jid)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
413 self.CM.remove(target)
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
414 self.contactList.remove(self.CM.get_full(target))
0
goffi@necton2
parents:
diff changeset
415 try:
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
416 self.profiles[profile]['onlineContact'].remove(target.short)
0
goffi@necton2
parents:
diff changeset
417 except KeyError:
goffi@necton2
parents:
diff changeset
418 pass
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
419
71
efe81b61673c quick app: updatedValue wrong parameter fix
Goffi <goffi@goffi.org>
parents: 70
diff changeset
420 def updatedValue(self, name, data):
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
421 if name == "card_nick":
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
422 target = JID(data['jid'])
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
423 if target in self.contactList:
244
3bc4457687a2 quick_frontend: fixed bad string type with DBus by converting them to unicode
Goffi <goffi@goffi.org>
parents: 228
diff changeset
424 self.CM.update(target, 'nick', unicode(data['nick']))
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
425 self.contactList.replace(target)
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
426 elif name == "card_avatar":
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
427 target = JID(data['jid'])
124
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
428 if target in self.contactList:
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
429 filename = self.bridge.getAvatarFile(data['avatar'])
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
430 self.CM.update(target, 'avatar', filename)
961e0898271f primitivus chat window
Goffi <goffi@goffi.org>
parents: 119
diff changeset
431 self.contactList.replace(target)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
432
0
goffi@necton2
parents:
diff changeset
433 def askConfirmation(self, type, id, data):
goffi@necton2
parents:
diff changeset
434 raise NotImplementedError
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
435
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
436 def actionResult(self, type, id, data):
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
437 raise NotImplementedError
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
438
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
439 def onExit(self):
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
440 """Must be called when the frontend is terminating"""
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
441 #TODO: mange multi-profile here
200
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
442 try:
272
1d2e0dfe7114 bridge: core & frontend sides of bridge are now generated
Goffi <goffi@goffi.org>
parents: 266
diff changeset
443 autodisconnect = self.bridge.getParamA("autodisconnect","Connection", profile_key=self.profile) == "true"
200
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
444 if autodisconnect and self.bridge.isConnected(self.profile):
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
445 #Does the user want autodisconnection ?
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
446 self.bridge.disconnect(self.profile)
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
447 except:
7baee9bb37af quick_frontend: fixed disconnect, and removed autojoin of muc room put for dev
Goffi <goffi@goffi.org>
parents: 183
diff changeset
448 pass