[libvirt] [RFC] [libvirt-gconfig] Suggestion about (maybe) re-factoring GVirtConfigDomainGraphics
Daniel P. Berrange
berrange at redhat.com
Tue Mar 1 09:50:50 UTC 2016
On Mon, Feb 29, 2016 at 11:51:26PM +0100, Fabiano Fidêncio wrote:
> Howdy!
>
> I've been trying to use libvirt-gobject and libvirt-gconfig, on
> virt-viewer, for accessing VMs and looking at their config, instead of
> using libvrit and parsing XML directly and turns out, that
> libvirt-gconfig is not exactly handful for a "read-only" use case (as
> virt-viewer's one).
>
> Let me try to explain pointing to some code as example and then I'll
> give my suggestions.
> For example, let's take a look on
> https://git.fedorahosted.org/cgit/virt-viewer.git/tree/src/virt-viewer.c#n468
>
> In this function, the first thing done is to get the type of the
> graphic device (SPICE or VNC) and here is the first problem. There is
> no straightforward way for doing this on libvirt-gconfig (or is
> there?).
> Seems easier to continue getting the type using libxml and then use
> the specific spice/vnc functions for getting the properties. And here
> is the second problem, because I'll always need to have an if/else
> statement for getting the properties. Something like:
> if (g_str_equal(type, "vnc"))
> port = gvir_config_domain_graphics_vnc_get_port(domain);
> else if (g_str_equal(type, "spice"))
> port = gvir_config_domain_graphics_spice_get_port(domain);
>
> This kind of usage makes me think that libvirt-gconfig is missing some
> abstraction class, parent of GVirConfigDomainGraphics{Spice,Vnc,...)
> which could provide virtual functions like:
> gtype = gvir_config_domain_graphics_get_gtype(domain);
> port = gvir_config_domain_graphics_get_port(domain);
>
> Thinking a bit about it and taking a look in the
> GVirConfigDomainGraphics code, is possible to see a possibility for 2
> new classes:
> GVirConfigDomainGraphicsLocal and GVirConfigDomainGraphicsRemote.
>
> Then we could have something like:
> GVirtConfigDomainGraphics
> |_
> | GVirtConfigDomainGraphicsLocal
> | |_
> | | GVirtConfigDomainGraphicsLocalDesktop
> | |_
> | GVirtConfigDomainGraphicsLocalSdl
> |_
> GVirtConfigDomainGraphicsRemote
> |_
> | GVirtConfigDomainGraphicsRemoteSpice
> |_
> | GVirtConfigDomainGraphicsRemoteVnc
> |_
> GVirtConfigDomainGraphicsRemoteRdp
>
> I do know that Local and Remote are not exactly accurate names, but is
> the best that I could come up with.
>
> So, would be acceptable to introduce these two new classes and then
> have the specific graphics classes inheriting from those? Does this
> make sense for you, people?
>
> I'm more than happy in provide the code for this, but not before we
> discuss and set a decision about the approach. :-)
As long as you can introduce the new classes without breaking API
compatability of existing classes, I think the idea is reasonable.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list