mirror of https://github.com/zulip/zulip.git
data_import: Import Rocket.Chat threads as separate topics.
This commit is contained in:
parent
0db9b7287b
commit
0c2e4eec20
|
@ -80,25 +80,29 @@ root domain. Replace the last line above with the following, after replacing
|
|||
|
||||
## Caveats
|
||||
|
||||
This import tool is currently beta and does not support importing
|
||||
the following data:
|
||||
This import tool is currently beta has the following known limitations:
|
||||
|
||||
- User avatars
|
||||
- Default channels for new users
|
||||
- Starred messages
|
||||
- Threads as separate topics
|
||||
- Messages longer than Zulip's limit of 10,000 characters.
|
||||
- User avatars are not imported.
|
||||
- Default channels for new users are not imported.
|
||||
- Starred messages are not imported.
|
||||
- Messages longer than Zulip's limit of 10,000 characters are not
|
||||
imported.
|
||||
- Messages from Rocket.Chat Discussions are imported as topics
|
||||
inside the Zulip stream corresponding to the parent channel of the
|
||||
Rocket.Chat Discussion.
|
||||
- Messages from Rocket.Chat Discussions having direct channels
|
||||
(i.e. private messages) as their parent are imported as normal
|
||||
private messages in Zulip.
|
||||
- While Rocket.Chat Threads are in general imported as separate
|
||||
topics, Rocket.Chat Threads within Rocket.Chat Discussions are
|
||||
imported as normal messages within the topic containing that
|
||||
Discussion, and Threads in Direct Messages are imported as normal
|
||||
Zulip private messages.
|
||||
|
||||
Additionally, because Rocket.Chat does not provide a stable data
|
||||
export API, the import tool may require small changes from time to
|
||||
time to account for changes in the Rocket.Chat database format.
|
||||
Please [contact us](/help/contact-support) if you counter any problems
|
||||
using this tool.
|
||||
Additionally, because Rocket.Chat does not provide a documented or
|
||||
stable data export API, the import tool may require small changes from
|
||||
time to time to account for changes in the Rocket.Chat database
|
||||
format. Please [contact us](/help/contact-support) if you encounter
|
||||
any problems using this tool.
|
||||
|
||||
[upgrade-zulip-from-git]: https://zulip.readthedocs.io/en/latest/production/upgrade-or-modify.html#upgrading-from-a-git-repository
|
||||
|
|
|
@ -547,14 +547,26 @@ def process_raw_message_batch(
|
|||
|
||||
|
||||
def get_topic_name(
|
||||
message: Dict[str, Any], dsc_id_to_dsc_map: Dict[str, Dict[str, Any]], is_pm_data: bool = False
|
||||
message: Dict[str, Any],
|
||||
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]],
|
||||
thread_id_mapper: IdMapper,
|
||||
is_pm_data: bool = False,
|
||||
) -> str:
|
||||
if is_pm_data:
|
||||
return ""
|
||||
elif message["rid"] in dsc_id_to_dsc_map:
|
||||
dsc_channel_name = dsc_id_to_dsc_map[message["rid"]]["fname"]
|
||||
return f"{dsc_channel_name} (Imported from Rocket.Chat)"
|
||||
elif message.get("replies"):
|
||||
# Message is the start of a thread
|
||||
thread_id = thread_id_mapper.get(message["_id"])
|
||||
return f"Thread {thread_id} (Imported from Rocket.Chat)"
|
||||
elif message.get("tmid"):
|
||||
# Message is a part of a thread
|
||||
thread_id = thread_id_mapper.get(message["tmid"])
|
||||
return f"Thread {thread_id} (Imported from Rocket.Chat)"
|
||||
else:
|
||||
# Normal channel message
|
||||
return "Imported from Rocket.Chat"
|
||||
|
||||
|
||||
|
@ -571,6 +583,7 @@ def process_messages(
|
|||
stream_id_to_recipient_id: Dict[int, int],
|
||||
huddle_id_mapper: IdMapper,
|
||||
huddle_id_to_recipient_id: Dict[int, int],
|
||||
thread_id_mapper: IdMapper,
|
||||
room_id_to_room_map: Dict[str, Dict[str, Any]],
|
||||
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]],
|
||||
direct_id_to_direct_map: Dict[str, Dict[str, Any]],
|
||||
|
@ -641,7 +654,9 @@ def process_messages(
|
|||
message_dict["recipient_id"] = stream_id_to_recipient_id[stream_id]
|
||||
|
||||
# Add topic name to message_dict
|
||||
message_dict["topic_name"] = get_topic_name(message, dsc_id_to_dsc_map, is_pm_data)
|
||||
message_dict["topic_name"] = get_topic_name(
|
||||
message, dsc_id_to_dsc_map, thread_id_mapper, is_pm_data
|
||||
)
|
||||
|
||||
# Add user mentions to message_dict
|
||||
mention_user_ids = set()
|
||||
|
@ -689,7 +704,9 @@ def process_messages(
|
|||
continue
|
||||
|
||||
converted_topic_name = get_topic_name(
|
||||
message={"rid": mention_rc_channel_id}, dsc_id_to_dsc_map=dsc_id_to_dsc_map
|
||||
message={"rid": mention_rc_channel_id},
|
||||
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
|
||||
thread_id_mapper=thread_id_mapper,
|
||||
)
|
||||
|
||||
parent_rc_channel = room_id_to_room_map[parent_channel_id]
|
||||
|
@ -923,6 +940,7 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
|
|||
user_id_mapper = IdMapper()
|
||||
stream_id_mapper = IdMapper()
|
||||
huddle_id_mapper = IdMapper()
|
||||
thread_id_mapper = IdMapper()
|
||||
|
||||
process_users(
|
||||
user_id_to_user_map=user_id_to_user_map,
|
||||
|
@ -1055,6 +1073,7 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
|
|||
stream_id_to_recipient_id=stream_id_to_recipient_id,
|
||||
huddle_id_mapper=huddle_id_mapper,
|
||||
huddle_id_to_recipient_id=huddle_id_to_recipient_id,
|
||||
thread_id_mapper=thread_id_mapper,
|
||||
room_id_to_room_map=room_id_to_room_map,
|
||||
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
|
||||
direct_id_to_direct_map=direct_id_to_direct_map,
|
||||
|
@ -1080,6 +1099,7 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
|
|||
stream_id_to_recipient_id=stream_id_to_recipient_id,
|
||||
huddle_id_mapper=huddle_id_mapper,
|
||||
huddle_id_to_recipient_id=huddle_id_to_recipient_id,
|
||||
thread_id_mapper=thread_id_mapper,
|
||||
room_id_to_room_map=room_id_to_room_map,
|
||||
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
|
||||
direct_id_to_direct_map=direct_id_to_direct_map,
|
||||
|
|
Loading…
Reference in New Issue