Skip to content

Instantly share code, notes, and snippets.

@Subhasish-Behera
Last active November 6, 2023 18:05
Show Gist options
  • Save Subhasish-Behera/d4401b4b140df5c0d9aea53ed1b98680 to your computer and use it in GitHub Desktop.
Save Subhasish-Behera/d4401b4b140df5c0d9aea53ed1b98680 to your computer and use it in GitHub Desktop.
Final Submission GSoC

Google Summer of Code 2023 with Zulip - Work Product

This is a summary of all the work I did for the Zulip Terminal client while participating in the GSoC 2023 program.

🗒️ Project Information

🎯 Goals

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.

🛠️ Contributions [^1]

Merged Pull Requests

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.

Open Pull Requests

  • 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 in muted_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 a message_event
  • This PR implements a basic version of File Upload for ZT. It is implemented throug creating a class called FileUploadView a child class of PopUpView.
  • 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 to FileUploadView.
  • Later a logic of extracting file name from the path is used to get it appended along with link in Write_Box through insert_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.

🌠 Acknowledgements

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!

🌅 Post GSoC

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment