The first two weeks of GSoC are over now - time to share some insights on what I have been doing so far to provide a great search user experience in Dino by the end of the summer.
User interface design
To get an idea of what is needed to properly fulfill my summer project, it's not a bad thing to start with a design mockup: It brings everyone on the same page of how the search feature should look in the end and also emphasizes the requirements on the backend code.
This design aligns with a proposal to add a sidebar to Dino when used in a large window. The sidebar is supposed to provide extended information on a chat, like group chat members or vCard data. While the sidebar idea is still not fully developed, this search design can easily replace such a sidebar (instead of overlaying the content like in the small window scenario displayed above) - very similar to the behavior of tools like Slack, that do feature a sidebar as well.
SQLite's FTS (full-text search) functionality
In my introductory blog post, I already teased that I will look into SQLite's FTS feature as a possibility to implement a fast and powerful search functionality for Dino. Now after looking into the functionality, I wonder why I never heard of this feature before. While I had a basic system in mind to do full-text search using a keyword index, the FTS functionality is far more advanced while allowing way easier usage and comes with a lot of awesome functionality like automated preview snippet generation. While this is most likely not interesting for Dino (because instant messages are usually not that long that it would make sense to not pull the full message from the database engine), others like the complex query expressions for the
MATCH operator might be handy - although my initial test implementation does not make use of them.
My initial time plan for the GSoC asked for the first two weeks to be used to implement a full-test search functionality. After I found out that SQLite's FTS already provides all the features we need, I directly stepped forward to the user interface designing phase initially intended for weeks 3 and 4. I will continue with implementing the user interface and finalize the FTS based search implementation in the upcoming weeks.