Skip to content

Instantly share code, notes, and snippets.

@juuz0
Last active September 17, 2023 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juuz0/0912b00616e2e5a38e07586b50502f38 to your computer and use it in GitHub Desktop.
Save juuz0/0912b00616e2e5a38e07586b50502f38 to your computer and use it in GitHub Desktop.
My work report for Google Summer of Code 2023 under Kiwix!

About Me

I am Nikhil, a 4th year CS student. Following GSoC '23, if you find some bugs in kiwix-desktop - I'm probably the source of them.

Overview

kiwix-desktop is an application for Windows and Linux to read ZIM files.

Most components of kiwix-desktop are written in C++ using the QT framework except for the library view - the first screen displayed when the app is started.

The library instead was created using vue.js and hence it needed a special effort to keep the visual coherence with the rest of the app in Qt. Any new changes to the design of kiwix-desktop or updates to the backend had to be stalled because of this inconsistency.

Additionally, the filters panel on the same screen suffered from being outdated. Some problems include:

  • Using a predefined set of languages/categories.
  • Not remembering user preferences
  • One couldn't infer the current filters set just by taking a look
  • No possible way to set multiple filters of the same category (eg: choosing books of multiple languages)

This project aimed to fix all these challenges and anything found in between :)

The journey

QT Library

I started with focusing on the first part of the project - Rewriting Library in QT.

We already had a design - I just needed to implement it (the easy part!). The initial week was probably the most challenging, I was a bit intimidated about starting something from scratch but I got the flow soon enough.

The PR introducing a QT-backed Library kiwix/kiwix-desktop#946

It fixed the following issues:

New Filter panel

The next challenge was to fix multiple weaknesses in the filters area.

I started with writing a common interface to parse languages and categories from an OPDS feed on the libkiwix side. This was followed by using those functions in kiwix-desktop in kiwix/kiwix-desktop#960

The dynamic language/category issue was done and now was the time to focus on improving the usage.

The challenging part was we did not have a pre-built design, unlike the library. I tried creating a design on my own but it was rejected (a good thing though - the reader is not advised to look at the design I created! :))

We settled on taking inspiration from this, thanks to @kelson42 for the discovery.

As mentioned before, filters were oudated and needed a big refresh. Most of those problems can be summarised in these issues:

All these were fixed in kiwix/kiwix-desktop#965 (soon to be merged).

Miscellaneous

There were many small cosmetic fixes in kiwix-desktop during during development. A full list can be found under the DONE category at QT project

Future Work

A few good challenges (along with possible solutions) to be done before the release of the next version of kiwix-desktop are summarised in kiwix/kiwix-desktop#957

Personal experience

It was fun, I have always enjoyed working under Kiwix.

kelson is an all-knowing person, an amazing mentor and his inputs over the years have helped me immensely. His functional reviews and inputs on how to go about doing anything are the basis of this project.

Lots of thank you to mgautierfr whose code reviews and C++ experience has helped me learn a lot and especially during GSoC, I learned a few neat tricks which will stay with me forever.

Popolechien gets the special mention for being witty :) Thanks for the all the help related to GSoC formalities :P

Thank you Google Summer of Code for providing this opportunity.

Here's a gif showing some changes :)

a gif showing some new kiwix-desktop features

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