2018-06-15 20:56:36 +02:00
|
|
|
from typing import Any, Dict
|
2020-06-11 00:54:34 +02:00
|
|
|
|
2021-04-16 00:57:30 +02:00
|
|
|
from django.utils.translation import gettext as _
|
2018-06-15 20:56:36 +02:00
|
|
|
|
2021-08-13 16:18:53 +02:00
|
|
|
from zerver.lib.actions import do_change_user_setting
|
2018-06-15 20:56:36 +02:00
|
|
|
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]:
|
2021-02-12 08:19:30 +01:00
|
|
|
def change_mode_setting(
|
|
|
|
command: str, switch_command: str, setting: str, setting_value: int
|
|
|
|
) -> str:
|
|
|
|
msg = (
|
2021-02-12 08:20:45 +01:00
|
|
|
"Changed to {command} mode! To revert "
|
|
|
|
"{command} mode, type `/{switch_command}`.".format(
|
2020-03-13 07:33:43 +01:00
|
|
|
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
|
|
|
)
|
2021-02-12 08:19:30 +01:00
|
|
|
)
|
2021-08-13 16:18:53 +02:00
|
|
|
do_change_user_setting(
|
2021-02-12 08:19:30 +01:00
|
|
|
user_profile=user_profile, setting_name=setting, setting_value=setting_value
|
|
|
|
)
|
2020-03-13 07:33:43 +01:00
|
|
|
return msg
|
|
|
|
|
2021-02-12 08:20:45 +01:00
|
|
|
if not content.startswith("/"):
|
|
|
|
raise JsonableError(_("There should be a leading slash in the zcommand."))
|
2018-06-21 19:23:35 +02:00
|
|
|
command = content[1:]
|
2018-06-15 20:56:36 +02:00
|
|
|
|
2021-02-12 08:20:45 +01:00
|
|
|
if command == "ping":
|
2020-09-02 08:14:51 +02:00
|
|
|
return {}
|
2021-02-12 08:20:45 +01:00
|
|
|
elif command == "night":
|
2020-05-16 13:13:59 +02:00
|
|
|
if user_profile.color_scheme == UserProfile.COLOR_SCHEME_NIGHT:
|
2021-02-12 08:20:45 +01:00
|
|
|
return dict(msg="You are still in night mode.")
|
2021-02-12 08:19:30 +01:00
|
|
|
return dict(
|
|
|
|
msg=change_mode_setting(
|
|
|
|
command=command,
|
2021-02-12 08:20:45 +01:00
|
|
|
switch_command="day",
|
|
|
|
setting="color_scheme",
|
2021-02-12 08:19:30 +01:00
|
|
|
setting_value=UserProfile.COLOR_SCHEME_NIGHT,
|
|
|
|
)
|
|
|
|
)
|
2021-02-12 08:20:45 +01:00
|
|
|
elif command == "day":
|
2020-05-16 13:13:59 +02:00
|
|
|
if user_profile.color_scheme == UserProfile.COLOR_SCHEME_LIGHT:
|
2021-02-12 08:20:45 +01:00
|
|
|
return dict(msg="You are still in day mode.")
|
2021-02-12 08:19:30 +01:00
|
|
|
return dict(
|
|
|
|
msg=change_mode_setting(
|
|
|
|
command=command,
|
2021-02-12 08:20:45 +01:00
|
|
|
switch_command="night",
|
|
|
|
setting="color_scheme",
|
2021-02-12 08:19:30 +01:00
|
|
|
setting_value=UserProfile.COLOR_SCHEME_LIGHT,
|
|
|
|
)
|
|
|
|
)
|
2021-02-12 08:20:45 +01:00
|
|
|
elif command == "fluid-width":
|
2020-03-12 07:51:47 +01:00
|
|
|
if user_profile.fluid_layout_width:
|
2021-02-12 08:20:45 +01:00
|
|
|
return dict(msg="You are still in fluid width mode.")
|
2021-02-12 08:19:30 +01:00
|
|
|
return dict(
|
|
|
|
msg=change_mode_setting(
|
|
|
|
command=command,
|
2021-02-12 08:20:45 +01:00
|
|
|
switch_command="fixed-width",
|
|
|
|
setting="fluid_layout_width",
|
2021-02-12 08:19:30 +01:00
|
|
|
setting_value=True,
|
|
|
|
)
|
|
|
|
)
|
2021-02-12 08:20:45 +01:00
|
|
|
elif command == "fixed-width":
|
2020-03-12 07:51:47 +01:00
|
|
|
if not user_profile.fluid_layout_width:
|
2021-02-12 08:20:45 +01:00
|
|
|
return dict(msg="You are still in fixed width mode.")
|
2021-02-12 08:19:30 +01:00
|
|
|
return dict(
|
|
|
|
msg=change_mode_setting(
|
|
|
|
command=command,
|
2021-02-12 08:20:45 +01:00
|
|
|
switch_command="fluid-width",
|
|
|
|
setting="fluid_layout_width",
|
2021-02-12 08:19:30 +01:00
|
|
|
setting_value=False,
|
|
|
|
)
|
|
|
|
)
|
2021-02-12 08:20:45 +01:00
|
|
|
raise JsonableError(_("No such command: {}").format(command))
|