2018-06-15 20:56:36 +02:00
|
|
|
from typing import Any, Dict
|
2020-06-11 00:54:34 +02:00
|
|
|
|
2018-06-15 20:56:36 +02:00
|
|
|
from django.utils.translation import ugettext as _
|
|
|
|
|
|
|
|
from zerver.lib.actions import do_set_user_display_setting
|
|
|
|
from zerver.lib.exceptions import JsonableError
|
2020-06-11 00:54:34 +02:00
|
|
|
from zerver.models import UserProfile
|
|
|
|
|
2018-06-15 20:56:36 +02:00
|
|
|
|
2018-06-20 20:46:33 +02:00
|
|
|
def process_zcommands(content: str, user_profile: UserProfile) -> Dict[str, Any]:
|
2020-03-13 07:33:43 +01:00
|
|
|
def change_mode_setting(command: str, switch_command: str,
|
2020-05-16 13:13:59 +02:00
|
|
|
setting: str, setting_value: int) -> str:
|
2020-03-13 07:33:43 +01:00
|
|
|
msg = 'Changed to {command} mode! To revert ' \
|
|
|
|
'{command} mode, type `/{switch_command}`.'.format(
|
|
|
|
command=command,
|
python: Use trailing commas consistently.
Automatically generated by the following script, based on the output
of lint with flake8-comma:
import re
import sys
last_filename = None
last_row = None
lines = []
for msg in sys.stdin:
m = re.match(
r"\x1b\[35mflake8 \|\x1b\[0m \x1b\[1;31m(.+):(\d+):(\d+): (\w+)", msg
)
if m:
filename, row_str, col_str, err = m.groups()
row, col = int(row_str), int(col_str)
if filename == last_filename:
assert last_row != row
else:
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
with open(filename) as f:
lines = f.readlines()
last_filename = filename
last_row = row
line = lines[row - 1]
if err in ["C812", "C815"]:
lines[row - 1] = line[: col - 1] + "," + line[col - 1 :]
elif err in ["C819"]:
assert line[col - 2] == ","
lines[row - 1] = line[: col - 2] + line[col - 1 :].lstrip(" ")
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-10 05:23:40 +02:00
|
|
|
switch_command=switch_command,
|
2020-03-13 07:33:43 +01:00
|
|
|
)
|
|
|
|
do_set_user_display_setting(user_profile=user_profile,
|
|
|
|
setting_name=setting,
|
|
|
|
setting_value=setting_value)
|
|
|
|
return msg
|
|
|
|
|
2018-06-21 19:23:35 +02:00
|
|
|
if not content.startswith('/'):
|
|
|
|
raise JsonableError(_('There should be a leading slash in the zcommand.'))
|
|
|
|
command = content[1:]
|
2018-06-15 20:56:36 +02:00
|
|
|
|
|
|
|
if command == 'ping':
|
2020-09-02 08:14:51 +02:00
|
|
|
return {}
|
2020-03-13 07:33:43 +01:00
|
|
|
elif command == 'night':
|
2020-05-16 13:13:59 +02:00
|
|
|
if user_profile.color_scheme == UserProfile.COLOR_SCHEME_NIGHT:
|
2020-03-13 07:33:43 +01:00
|
|
|
return dict(msg='You are still in night mode.')
|
|
|
|
return dict(msg=change_mode_setting(command=command,
|
|
|
|
switch_command='day',
|
2020-05-16 13:13:59 +02:00
|
|
|
setting='color_scheme',
|
|
|
|
setting_value=UserProfile.COLOR_SCHEME_NIGHT))
|
2020-03-13 07:33:43 +01:00
|
|
|
elif command == 'day':
|
2020-05-16 13:13:59 +02:00
|
|
|
if user_profile.color_scheme == UserProfile.COLOR_SCHEME_LIGHT:
|
2020-03-13 07:33:43 +01:00
|
|
|
return dict(msg='You are still in day mode.')
|
|
|
|
return dict(msg=change_mode_setting(command=command,
|
|
|
|
switch_command='night',
|
2020-05-16 13:13:59 +02:00
|
|
|
setting='color_scheme',
|
|
|
|
setting_value=UserProfile.COLOR_SCHEME_LIGHT))
|
2020-03-12 07:51:47 +01:00
|
|
|
elif command == 'fluid-width':
|
|
|
|
if user_profile.fluid_layout_width:
|
|
|
|
return dict(msg='You are still in fluid width mode.')
|
|
|
|
return dict(msg=change_mode_setting(command=command,
|
|
|
|
switch_command='fixed-width',
|
|
|
|
setting='fluid_layout_width',
|
|
|
|
setting_value=True))
|
|
|
|
elif command == 'fixed-width':
|
|
|
|
if not user_profile.fluid_layout_width:
|
|
|
|
return dict(msg='You are still in fixed width mode.')
|
|
|
|
return dict(msg=change_mode_setting(command=command,
|
|
|
|
switch_command='fluid-width',
|
|
|
|
setting='fluid_layout_width',
|
|
|
|
setting_value=False))
|
2020-06-15 23:22:24 +02:00
|
|
|
raise JsonableError(_('No such command: {}').format(command))
|