This is a summary of all the work I did for the Zulip Terminal client while participating in the GSoC 2023 program.
- Title: Improving Zulip Terminal
- Organization: Zulip
- Repository: zulip-terminal
- Mentors: Neil Pilgrim and Mounil Shah
- My GitHub profile: Subhasish-Behera
The main goal of this project was to improve the user experience of Zulip Terminal by porting features from Zulip web which were not already implemented in the terminal client. The features which were worked on include -
- Implement File Upload feature.
- Implement muted users in ZT.
- Improve notifications.
- Support Alert Words in ZT.
This PR maintains position in topic list while togglist by associating stream with topic via a dict. Here the name of the topic is used as value. Whenever a stream is clicked the focus/index is returned by a helper method if previously the stream is associtated with a topic else top index(0) is returned.
- 24a70b2 ui/buttons: On exiting topics view, associate topic name with stream_id.
- 63fce6b ui/views: On initializing TopicsView, set topic focus from saved state.
- This PR aims to implement the muted users feature in ZT.
- It first adds the muted_users data in
initial_data_to_fetch
and stored inmuted_users
list of Model class. - The list is later updated during a
muted_users
event. - The content shown for the
MessageBox
is changed. The recepient header shows "muted_user" instead of original name. The name of the author is also changed to muted_user.
This PR aims to disable cycling during editing a PM by tab key. This PR restructures previous code to make separate functions for _setup_common_private_compose
, and a new function private_box_edit_view
responsible for handling the cycling when the user is editing a sent message.
- This PR aims to notify the user of a alert word when used. It has to be used with the --notify flag while running the app.
- In Model, the
notify_user
function checks whether alert-word is present or not. This function is called during the handling of amessage_event
- This PR implements a basic version of File Upload for ZT. It is implemented throug creating a class called
FileUploadView
a child class ofPopUpView
. - Through this the user can fill the location in the edit_box which is later verified if present (and if can be opened by the user).
- In the Core part of the code base the value of user's file name input is passed from
boxes.py
toFileUploadView
. - Later a logic of extracting file name from the path is used to get it appended along with
link in
Write_Box
throughinsert_uri_method
. - In testing the files are created through
tempfile
module.
- Currently ZT does not support displaying multiple users's typing statuses in a PM narrow. Instead in a group PM, the typing events of the first email in narrow is handled. This PR handles the case of group PM in typing events.
- The storage of active conversation data is done through a Dict with id as key and full_name as value.(previous indexing through names was non-unique in nature.)
- Instead of emptying the whole active conversation data during a
stop
event,only a single user is removed now. - In core.py the
show_typing_notifications
functions handles diffrent cases of length of active conversation info.
I am grateful to the Zulip community and Google for giving me the opportunity to work on such an interesting and fun project. I learned a lot during this summer, from writing tests to building terminal UI elements, and improved my programming skills while contributing to zulip-terminal. I would like to thank Neil Pilgrim and Mounil Shah for their patience,time and guidance, which helped me be an effective contributor to the project. Also, the Zulip community has been a wonderful group to be a part of. I've learnt a lot during this summer thanks to them!
I had a lot of fun during my summer at Zulip and I wish to be involved in the project after the program too. I intend to finish up my existing work and then take on new issues and help other new contributors to further improve the project.