July 1, 2016

717 words 4 mins read

An Initial Version of Gsoc Project

After one month working on my Google Summer of Code project, I’m writing this post to inform about the current status of the project. If you want to know more about my project such as a description of the project and a short presentation of myself, you can read my previous post and view the code on github.

On this month, I have had daily meetings with my mentors, where we talk about the progress of the project and decide the next step. In the first meeting we decided to start making a mock-up of the user interface. This works to have an accurate picture of the module’s expected functionalities. There is a list with these functionalities:

  • List all existing alternatives on the system.
  • Set an alternative on automatic mode. This means that the choice with more priority is selected automatically.
  • Set a particular choice for an alternative. (Changes the mode to manual)

To achieve these features we start loading the alternatives from the system, to do that we use Cheetah, a very great tool to execute externals commands, and then show it in the dialog. The next was to make possible to manage (points two and three) the alternatives. And finally save the changes on the system using Cheetah again.

To reach those goals, we had to use our own vocabulary to refer to the involved objects, because we found the man page of update-alternatives to not be clear enough. So in this way when I talk about a “choice” I refer to a value that an alternative can have.

The current target is to improve the user interface, in order to make it easier to use and achieve a better user experience. There are already some improvements implemented over the mock-up:

  • Search field to find an alternative by its name.
  • Filter to hide the alternatives with only one choice. Is activated by default because it makes little sense to show something that cannot be modified.
  • Information of the current status of the alternative.

Lets see how it works right now:

Right after starting the module you will see something like this.

In the image above you can see a list of alternatives that exists on the system, as well as some information about every one like the name of the alternative, the actual choice and the status (it can be “auto” or “manual”). Note that there is a filter activated. This filter hide the alternatives that only have one possible choice. If you disable this filter, probably you will see something like this.

Another filter is the search field, whit this you can filter the alternatives by his name. Here you have an example:

If you click on the button “Show alternatives” or make double click on a certain item on the table, another dialog to manage the alternative will be opened. Let’s take a look to it.

At the top of the dialog, can see the actual information about the alternative. In the middle there a table with all possible choices for this alternative and its priority. Below the table you can find a RichText, this is used to show the slaves of the selected choice in the table above. Note that, at this moment, right after opening the dialog, this RichText show the sentence “Please select an alternative to view his slaves” instead of the slaves of the alternatives selected on the table. Right now I’m working to fix it. In the next image you can see an example of this RichText showing the slaves.

Last but not least, in the bottom of the dialog there are three buttons, “Set alternative” change the selected choice of the alternative by the choice selected on the table and change the status to manual, the second button “Set automatic mode” set the status of the alternative to auto as the name suggests, and finally the “Cancel” button to exit the dialog.

Finally, for a succesfull GSoC project we need to get feedback. So I would like you to try the module and let me know your feelings and suggestions writing a comment in this post. You can download here and run it with the command “/sbin/yast2 update_alternatives” (Execute with “sudo” if you want to make changes in the system). Of course view the code on github.