Submit A Tip Alternative Tip Form

A technical look at the OMG! User Awarding System

This is a very technical post about the basics and fundamentals of the OMG! App…

Taken from the GNOME Wiki

The idea being OMG! is to have a central user awarding system where users collect trophies based on their activities and experience on the desktop environment. e.g:

  • For installing “Banshee” the user gets awarded with the “Banshee Discovery Trophy”.
  • For working with Cheese for 30 minutes the user gets awarded with “Photogenic Trophy”.
  • For Editing 100 documents using “gedit” the user gets awarded with “Badass Trophy”

OMG! Basics

OMG! is a little daemon. Applications communicate with it over DBus. As an awarding system awards users are awarded with trophies: A trophy consists of:

  • ID: String generated automatically from the Title + “-” + Application
  • Title: String with the title of the trophy
  • Description: String with a more detailed description of WHY the user got the trophy
  • Application: String with the path to the application executable
  • Timestamp: Integer with a Timestamp of when it was awarded.
  • Icon Path: String with the path to the Icon for the Trophy
  • Status: A boolean describing if the Trophy is awarded unlocked or is locked until the requirements are fulfilled
  • Priority: Integer from 0 – 2 describing how relevantly big the achievement is.

Applications are responsible for awarding their own trophies. OMG! is only a trophy collection and a notification system for that. It is intended to build another little Zeitgeist based application to monitor and evaluate activities to award users. Also achievements will be stored in Zeitgeist to show them in GAJ and allow applications to query their own awards.

OMG! Simple API

Thus the API is very straight forward

  • RegisterTrophy (String Title, String Description, String Application, String IconPath, Integer Priority): No Return
    • OMG.RegisterTrophy(“Welcome Rug”, “You ran OMG! for the first time”, “application://omg”, “”, 0)
  • AwardTrophy (String Title, String Application): No Return
    • MG.AwardTrophy(“Welcome Rug”, “application://omg” )
  • DeleteTrophy (String Title, String Application): No Return
    • OMG.DeleteTrophy( “Welcome Rug”, “application://omg” )
  • GetTrophies ( ): Returns an Array of Trophies (String Title, String Description, String Application, Integer Timestamp, String IconPath, Boolean Status, Integer Priority.
    • OMG.GetTrophies()

OMG! Concept

  • Applications should have the possibility to register their trophies over DBus and not statically define them upfront
  • Applications know most about their activities thus they should hand out the awards and trace the activity of the user or allow Zeitgeist to track it for them
  • Awards will be logged by Zeitgeist to have a timeline option around “When did I achieve something”
  • More to come…

OMG! Code