- Only admins can now edit the groups of any user
- Only admins can mark any user as active or not
- Refactored all occurrences of admin checks to its own utility function
- Rename AdminMiddleware to AdminRequiredMiddleware to be consistent
with stronghold/Django terminology
- Simplify .gitignore pattern
- Format single line docstrings as per PEP8.
- Add missing docstrings.
- Restrict lines to 79 characters.
- After the shortcuts were turned into a list instead of dictionary, the
descriptions stopped showing in the front page due to an 'in' check
that worked for dict. Fix this by changing the shortcuts into a
dictionary.
- Also make the key of the shortcut dict an 'id' instead of 'app' that
could create confusion how an app maps to a shortcut.
- Minor indentation fixes.
- adapted all modules to not use views.ConfigurationView anymore
- removed templates that are not needed anymore
- no more implicit 'enabled' and 'get_status' functions in __init__.py files
- (more coherent/explicit use of Django functionality)
- A lot of boiler plate code can be removed from Plinth if enabling and
disabling an application can be done using a common base form.
- This also allows to define a reusable method in an application for
enabling and disabling.
- This brings more structure to a application module and paves way for
having a different views such as dashboard.
- Plinth will become the home page for FreedomBox. So it has to serve
the purpose the directing users to available services. This will
happen most often and should also work when users are not logged in.
- Soon we will have a resigned 'front page'/'apps' section which is
expected to be shown to user who are not logged in too.
- Apps menus has been removed. Index page is now the only way to reach
Apps section.
- Refresh package list before trying to install packages. Also lookup
the ID of the package, including the version, using the newly fetched
package list.
- Call on_install() callback requested by modules only if the package
installation was successful. Handle any exception raised in the
callback itself.
- Handle exceptions raised during packagekit operations. Also check the
returned results for error code.
- Capture error/success status during a transaction. Don't destroy the
transaction object until the error/success status has been collected.
When a view is refreshed after completion of a transaction collect the
result of the transaction and show it to the user.
- Handle cases where package searches in the package list fails. Simply
show the package name without its description.
- Uses PackageKit dameon, Glib library wrapping packagekit DBUS API and
Python bindings for the Glib library.
- Implement a decorator to wrap views requiring packages.
- Framework allows for parallel operations. However, doing parallel
operations hangs because of what appears to be PackageKit backend
limitations.