fix(chat): refactor code to make chat work
fixes issues with token being wrongly passed as the owner, instead of
current session user (ie. frappe.session.user), which in turn causes the
following issue:
Traceback (most recent call last):
File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 57, in application
response = frappe.handler.handle()
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle
data = execute_cmd(cmd)
File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 61, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1042, in call
return fn(*args, **newargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/chat/doctype/chat_room/chat_room.py", line 203, in create
room.save(ignore_permissions = True)
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 272, in save
return self._save(*args, **kwargs)
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 295, in _save
self.insert()
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 223, in insert
self._validate_links()
File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 756, in _validate_links
frappe.LinkValidationError)
File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 364, in throw
msgprint(msg, raise_exception=exc, title=title, indicator='red')
File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 350, in msgprint
_raise_exception()
File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 316, in _raise_exception
raise raise_exception(msg)
frappe.exceptions.LinkValidationError: Could not find Owner: 0a4d6eb7763ef2065f44ece0653d829a1ba189f753562ab9ac261620
also fixes issue where the chat rooms do not load because of wrongly
passed parameters
Signed-off-by: Chinmay D. Pai <chinmaydpai@gmail.com>
This commit is contained in:
parent
234ab445a8
commit
a8d2ed8d45
1 changed files with 20 additions and 19 deletions
|
|
@ -93,14 +93,14 @@ class ChatRoom(Document):
|
|||
|
||||
frappe.publish_realtime('frappe.chat.room:update', update, room = self.name, after_commit = True)
|
||||
|
||||
@frappe.whitelist(allow_guest = True)
|
||||
def get(user, rooms = None, fields = None, filters = None):
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get(token, rooms=None, fields=None, filters=None):
|
||||
# There is this horrible bug out here.
|
||||
# Looks like if frappe.call sends optional arguments (not in right order), the argument turns to an empty string.
|
||||
# I'm not even going to think searching for it.
|
||||
# Hence, the hack was get_if_empty (previous assign_if_none)
|
||||
# - Achilles Rasquinha achilles@frappe.io
|
||||
authenticate(user)
|
||||
authenticate(token)
|
||||
|
||||
rooms, fields, filters = safe_json_loads(rooms, fields, filters)
|
||||
|
||||
|
|
@ -123,8 +123,8 @@ def get(user, rooms = None, fields = None, filters = None):
|
|||
|
||||
rooms = frappe.get_all('Chat Room',
|
||||
or_filters = [
|
||||
['Chat Room', 'owner', '=', user],
|
||||
['Chat Room User', 'user', '=', user]
|
||||
['Chat Room', 'owner', '=', frappe.session.user],
|
||||
['Chat Room User', 'user', '=', frappe.session.user]
|
||||
],
|
||||
filters = const,
|
||||
fields = param + ['name'] if param else default,
|
||||
|
|
@ -151,9 +151,9 @@ def get(user, rooms = None, fields = None, filters = None):
|
|||
|
||||
return rooms
|
||||
|
||||
@frappe.whitelist(allow_guest = True)
|
||||
def create(kind, owner, users = None, name = None):
|
||||
authenticate(owner)
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def create(kind, token, users=None, name=None):
|
||||
authenticate(token)
|
||||
|
||||
users = safe_json_loads(users)
|
||||
create = True
|
||||
|
|
@ -163,16 +163,16 @@ def create(kind, owner, users = None, name = None):
|
|||
SELECT name
|
||||
FROM `tabChat Room`
|
||||
WHERE owner = "{owner}"
|
||||
""".format(owner = owner), as_dict = True))
|
||||
""".format(owner=frappe.session.user), as_dict=True))
|
||||
|
||||
if room:
|
||||
room = frappe.get_doc('Chat Room', room.name)
|
||||
create = False
|
||||
|
||||
if create:
|
||||
room = frappe.new_doc('Chat Room')
|
||||
room.type = kind
|
||||
room.owner = owner
|
||||
room = frappe.new_doc('Chat Room')
|
||||
room.type = kind
|
||||
room.owner = frappe.session.user
|
||||
room.room_name = name
|
||||
|
||||
dusers = [ ]
|
||||
|
|
@ -181,13 +181,13 @@ def create(kind, owner, users = None, name = None):
|
|||
if users:
|
||||
users = listify(users)
|
||||
for user in users:
|
||||
duser = frappe.new_doc('Chat Room User')
|
||||
duser = frappe.new_doc('Chat Room User')
|
||||
duser.user = user
|
||||
dusers.append(duser)
|
||||
|
||||
room.users = dusers
|
||||
else:
|
||||
dsettings = frappe.get_single('Website Settings')
|
||||
dsettings = frappe.get_single('Website Settings')
|
||||
room.room_name = dsettings.chat_room_name
|
||||
|
||||
users = [user for user in room.users] if hasattr(room, 'users') else [ ]
|
||||
|
|
@ -201,11 +201,12 @@ def create(kind, owner, users = None, name = None):
|
|||
|
||||
room.save(ignore_permissions = True)
|
||||
|
||||
room = get(owner, rooms = room.name)
|
||||
users = [room.owner] + [u for u in room.users]
|
||||
room = get(token, rooms=room.name)
|
||||
if room:
|
||||
users = [room.owner] + [u for u in room.users]
|
||||
|
||||
for u in users:
|
||||
frappe.publish_realtime('frappe.chat.room:create', room, user = u, after_commit = True)
|
||||
for user in users:
|
||||
frappe.publish_realtime('frappe.chat.room:create', room, user=user, after_commit=True)
|
||||
|
||||
return room
|
||||
|
||||
|
|
@ -219,4 +220,4 @@ def history(room, user, fields = None, limit = 10, start = None, end = None):
|
|||
mess = chat_message.history(room, limit = limit, start = start, end = end)
|
||||
mess = squashify(mess)
|
||||
|
||||
return dictify(mess)
|
||||
return dictify(mess)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue