[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-pim
Subject: RE: [Kde-pim] [PATCH] Server-based resources and editing events
From: "Best, Jan-Pascal van" <j.p.vanbest () tbm ! tudelft ! nl>
Date: 2004-02-11 11:59:00
Message-ID: A2D0261FA99B9C40AEA56D1D44468CE8D0FB4A () TBM0EXCH2 ! tbm ! tudelft
[Download RAW message or body]
> > > > We could update the changed resource in endChange(),
> but it would
> > > > be nicer to store information on which incidences have been
> > > > changed in the save Ticket, and then update all changed
> > > > incidences in one go.
> > >
> > > Which incidences have changed is something the resources can find
> > > out internally. This doesn't have to be refelected in the API.
> >
> > Actually, they cannot. How would a resource know which incidences
> > have been changed by the UI?
>
> If it's only in the GUI the resource doesn't have to know. If it's
> changed in memory but not yet written back. The resource gets to know
> by the IncidenceObserver.
It does - but not just once. When I edit an event in the GUI (name, location
and start time) and press OK, incidenceUpdated() is called nine times,
since it is called every time one of the Event::setXXXX() functions is
called. That about makes it useless for my causes, since I don't want
to upload the event to the server nine times.
But I can think of a combination: keep a list of "dirty" events, and write them
to the server at endChange(). We just need to make sure that endChange() is
called properly.
> > I still think a better way would be to use signals for the
> > communication between CalendarResources and the resources. I've
> > implemented this for the Exchange resource, which can now have the
> > GUI update properly when the data and the server changes
> > (new/modified/deleted event), and also relay GUI actions (again,
> > new/modified/deleted event) to the Exchange server. See attached
> > patch for what would be needed in korganizer and libkcal.
>
> The signals for notification of changes to single events are
> nice. They
> might be more efficient. On the other hand I would consider this an
> optimisation which can be done when all the fundamental problems are
> solved.
OK, we'll keep those for now. As optimisation, you mean e.g. to pass a list
of added/modified/deleted events? I can imagine some cases for which some
GUI flicker could be reduced. We can change that later.
> > For "upstream" changes, from the server through the resource, the
> > CalendarResources, to KOrganizer, the resource monitors the server
> > and when a change happens, it fires an eventAdded( Event * event ),
> > eventModified( Event * oldEvent, Event * newEvent ) or an
> > eventDeleted( Event * event )signal.
> > The CalendarResources relays these signals to its own
> > signalEventAdded(), etc., signals. The KOrg::ActionManager connects
> > these signals to the eventAdded, eventDeleted and eventChanged slots
> > of the CalendarView.
>
> eventDeleted() is tricky, because you have to make sure that
> the event
> actually isn't deleted when the signal is sent, because the event
> object is passed as argument.
Should I rename it to eventToBeDeleted()?
> > The patch adds a call to mCalendar->eventChanged() for modified
> > events in KOEventEditor::processInput().
> > CalendarResources::eventChanged() finds the proper resource
> and calls
> > its eventChanged(). The Exchange resource then updates the event on
> > the server.
>
> Why don't you use the IncidenceObserver and the beginChange(),
> endChange() functions. Shouldn't they provide the same functionality?
I'll try, see above.
> > As I said, I've implemented this for the Exchange resource. Nothings
> > needs to be changed for other resources, although I can
> imagine other
> > server-based resources would also implement this. For the file
> > resource, the "upstream" is of course irrelevant, since the
> ical file
> > won't change by itself; the "downstream" is currently handled by
> > calling the save() method when changes happen. We could
> leave it like
> > that, or, internally in the resource, call save() when
> eventChanged()
> > is called.
>
> I really don't like the eventChanged() function because it's
> redundant.
> The Calendar holds a pointer to the event object. When the object is
> changed by the GUI it actually is also changed for the resource.
> Requiring to separately notify this change doesn't feel right
> to me. If you don't do it you will get inconsistencies.
I don't think it is redundant, since merely changing the event object in
memory does not tell the resource that the event has changed: to find that out
it would have to iterate over all (possible 1000s of) events and
compare them all with *copies* to see if something changed.
But since the same functionality can be had (hopefully) with a combination
of begin/endChange() and IncidenceObserver, I'll try and use that.
Jan-Pascal
_______________________________________________
kde-pim mailing list
kde-pim@mail.kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
kde-pim home page at http://pim.kde.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic