[sugar] [PATCH] Add speaker device and icon by default
Tomeu Vizoso
tomeu
Tue May 6 10:39:30 EDT 2008
On 5/4/08, Martin Dengler <martin at martindengler.com> wrote:
> On Tue, Apr 29, 2008 at 02:12:58PM +0200, Tomeu Vizoso wrote:
> > I think that Michael has spotted here a wonderful opportunity for
> > making Sugar more robust, thanks to your patch.
> >
> > What about just making the shell to catch (and log) any exception
> > resulting from the initialization of a device? That should amount to
> > just add one try..except block.
> >
> > Devices are thought to be easily added, so its an expected source of
> > new bugs. The shell should be able to start when any of them fail.
>
> I haven't forgotten this thread, just been unable to work on it.
> After an hour of messing about with some ideas/code today, my current
> approach is a bit more involved than just a try/except but nothing too
> dramatic (just a small yak to shave):
>
> - refactor sugar/model/devices/device{,smodel}.py to make
> adding/removing device.Device subclasses safe
>
> ... this begs one to do the next step or be left with many many
> try/excepts and very ugly code (or just one try/except around
> speaker.py, which kind of doesn't improve matters that much - though
> it's very simple code and I'm happy to move on to other things if
> people would accept that :) )
>
> - refactor sugar/model/devices/device{,semodel}.py to make discovering
> device python files safe using metaclasses (see
> http://blogs.gnome.org/jamesh/2008/02/12/python-metaclasses/ ); I
> have considered the objections and alternatives including martian,
> Zope's plugin framework design, and settled on this approach because
> it's very simple, meets the very simple needs we have, and is very
> little code
>
> ...this requires one to remove the networkmanager- and
> halmanager-specific logic in devicesmodel.py:
>
> - create a new networkmanager model class that will add_device() and
> remove_device() using the same logic that used to be in
> devicesmodel.py
>
> - create a new halmanager model class in the same way
>
> ...and then we only need to:
>
> - trivially update battery.py and speaker.py
>
> - pretty trivially update network/mesh.py, wired.py, wireless.py;
> these are only slightly more than trivial because devicesmodel.py
> used to define some very network-specific variables that (IMO)
> should be exposed by the networkmanager model (above) instead
>
> This explanation is long-winded only because I wanted to allow people
> to poke holes in the approach, not because it's a lot of work.
If it's not much work, can you provide a patch that gives an idea of
what you plan to do? No need to be the final patch right now.
Your ideas look interesting but I'm having a bit of difficulty in
visualizing how you would refactor things.
Thanks,
Tomeu
More information about the Sugar-devel
mailing list