Re: [Evolution-hackers] Introspection enablement for libecal - huge changes needed?

2014-05-15 Thread Patrick Ohly
On Wed, 2014-05-14 at 15:34 +0200, Milan Crha wrote:
   Hello,
 maybe you noticed that we have a GSoC project for this year, to enable
 introspection for calendar part of evolution-data-server (libecal),
 which will make it usable for other languages as well.

As said already, doing this as add-on of libical and then later taking
advantage of it in EDS seems like the right approach.

 Will is a student which will do the main work. The current problem is
 libical, its icalcomponent, enums and all other structures. I thought
 that we will be able to introspect this with simple boxed types, but it
 doesn't seem to be possible, thus the only option I can see is to
 massively change API of the calendar and define proxies for libical
 structures and enums. These proxies would be fully GObject-based, which
 might be a plus, I hope.
 
 I would, for example, define a GObject ICalComponent, which would have
 its i_cal_component_* API functions, mimic all the icalcomponent API,
 hiding the icalcomponent structure in the background.

Would it be possible to keep the current EDS API around and just add the
new introspectable API?

 Such change will be huge, but more importantly it'll be an earthquake
 for anything using libecal (the ECalComponent would not use
 icalcomponent anymore, it would start using ICalComponent instead).

ECalComponent would use a proxy of the original icalcomponent, right? If
the introspection layer in libical has a way to convert to and from the
original icalcomponent and the introspectable proxy, then ECalComponent
could convert back and forth as needed, depending on which API the EDS
client uses.

 Because of this earthquake, I would like to hear from others their
 opinion. Maybe we overlooked some option in introspection (there is
 preferred to create introspection based on code annotations, not to
 define them by hand), but I'm afraid the most of the projects like
 SyncEvolution, whether it'll be able to handle such change gracefully.

I've made my peace with ABI and API changes in EDS ;-} I'm not happy
about them, but I can handle them with a combination of ifdefs and
compilation of backend shared objects on different Linux distros. Just
give me enough and explicit warning beforehand.

If an API change can't be avoided, then don't let SyncEvolution hold you
back.

Bye, Patrick

___
evolution-hackers mailing list
evolution-hackers@gnome.org
To change your list options or unsubscribe, visit ...
https://mail.gnome.org/mailman/listinfo/evolution-hackers


Re: [Evolution-hackers] Introspection enablement for libecal - huge changes needed?

2014-05-15 Thread Philip Withnall
Hey,

If you have some output showing the errors gobject-introspection gives
you when you run it on libical, I might be able to help you fix them.

Philip

On Wed, 2014-05-14 at 20:13 -0400, Miao Yu wrote:
 Hi, 
 
 
 If I am not wrong, it is because the gobject-introspection has a hard
 time in introspecting a third-party types, as those in libical. For
 now, the only solution I can come up with is, as Milan said, to create
 a proxy type for every type of libical which is used in EDS. After
 that, I have to replace the libical types with the newly-created
 introspectable proxy type in the API, which causes the disaster. And
 this solution is, in nature, to write a introspectable wrapper for the
 libical library. So that's why Milan want to put this under GObject so
 that other applications can also use it instead of the libical. 
 
 
 And your solution is a nice way to fix that. Actually the focus can
 also be put on the gobject-introspection. And gobject-introspection
 can work with libical. Due to lack of experience, I cannot say which
 one is better for now. But they can work to the same end. But if we
 focus on the gobject-introspection, the introspection is not more
 focusing solely on the gobjects since libical is a third-party
 library. 
 
 
 Thank you.
 
 William Yu
 
 
 
 -Original Message-
 From: Philip Withnall phi...@tecnocode.co.uk
 To: Milan Crha mc...@redhat.com
 Cc: evolution-hackers evolution-hackers@gnome.org; will.yu
 will...@aol.com
 Sent: Wed, May 14, 2014 1:16 pm
 Subject: Re: [Evolution-hackers] Introspection enablement for libecal
 - huge changes needed?
 
 On Wed, 2014-05-14 at 15:34 +0200, Milan Crha wrote:
  The current problem is
  libical, its icalcomponent, enums and all other structures. I thought
  that we will be able to introspect this with simple boxed types, but it
  doesn't seem to be possible, thus the only option I can see is to
  massively change API of the calendar and define proxies for libical
  structures and enums. These proxies would be fully GObject-based, which
  might be a plus, I hope.
 
 What exactly is the problem with introspecting libical? If it's a
 fixable problem with gobject-introspection, I suspect it would be less
 work (and a better overall outcome) if time were put into fixing
 gobject-introspection so that libical *can* be introspected; rather than
 putting more work into a wrapper library which will increase memory
 overheads and require maintenance.
 
 Philip



signature.asc
Description: This is a digitally signed message part
___
evolution-hackers mailing list
evolution-hackers@gnome.org
To change your list options or unsubscribe, visit ...
https://mail.gnome.org/mailman/listinfo/evolution-hackers


Re: [Evolution-hackers] Introspection enablement for libecal - huge changes needed?

2014-05-15 Thread Milan Crha
On Thu, 2014-05-15 at 11:13 +0100, Philip Withnall wrote:
 If you have some output showing the errors gobject-introspection gives
 you when you run it on libical, I might be able to help you fix them.

Hi,
we tried to introspect libical inside libecal, basically by boxing
libical types. The mos common error (warning) is about Unresolved
type-s. These involve icaltimezone and icalcomponent. Both types are
really defined as incomplete [1], but also out of the eds source. This
marks related functions as unintrospectable. 

Another issue is with enums. Also the naming is not what
gobject-introspection likes, there is no camel-case naming used in
libical.

I suppose half of the problem would be to solved by generating gir files
directly in libical, but I'm afraid it'll not be enough, due to those
incomplete types (the enums might be fixed by this, I guess).

I've also quite limited knowledge of introspection, thus any
help/guidance is more than welcome.
Bye,
Milan 

[1] typedef struct icalcomponent_impl icalcomponent;
typedef struct _icaltimezoneicaltimezone;
 

___
evolution-hackers mailing list
evolution-hackers@gnome.org
To change your list options or unsubscribe, visit ...
https://mail.gnome.org/mailman/listinfo/evolution-hackers