Come sincronizzare gli eventi del calendario a livello di programmazione?

5

Mi piacerebbe sapere come sincronizzare gli eventi del calendario. Supponiamo che io abbia due calendari con campi (id, titolo, inizio, fine, aggiornato, posizione e descrizione). Sto lottando con il punto di partenza. È facile se tutti gli eventi sono nuovi e non si sovrappongono l'uno con l'altro. Ma diciamo che ho già eventi sui calendari, alcuni sono presumibilmente gli stessi eventi, alcuni sono eventi separati, alcuni forse stessi eventi, ma i loro attributi sono cambiati, come posizione, titolo, ora di inizio e di fine. Come faresti effettivamente a sincronizzare i calendari con le funzionalità intelligenti ragionevoli?

    
posta MarkokraM 08.01.2012 - 19:22
fonte

2 risposte

4

Per ogni evento, oltre al suo "tempo dell'evento" devi anche tenere traccia di un altro attributo orario, il tempo dell'ultima modifica. Questo si occupa dello scenario di sincronizzazione semplice e, ehm, diciamo, senza incidenti: gli eventi che sono stati modificati dall'ultima sincronizzazione vengono copiati.

I problemi iniziano se c'è la possibilità che due eventi siano stati entrambi modificati dall'ultima sincronizzazione, e non vuoi che gli attributi modificati da una sovrascrittura abbiano cambiato gli attributi nell'altra. Chiamiamo questa situazione un "conflitto". Per superare i conflitti, è possibile tenere traccia del tempo dell'ultima modifica di ciascun attributo all'interno di un evento, ma ciò a) complica molto le cose, e b) risolverà solo i conflitti nei casi in cui sono stati modificati attributi dissimili . Avresti ancora un problema quando lo stesso attributo è stato cambiato. Quindi, un approccio migliore per gestire i conflitti è presentare sempre l'utente con i due record affiancati, evidenziare per essi gli attributi modificati e lasciare che decidano quale attributo modificato del record di sinistra sovrascrive l'attributo corrispondente sul record corretto, e viceversa.

Il caso di eventi sovrapposti può anche essere visto come un conflitto, che però deve essere gestito in modo particolare: la durata di un evento (quello che si verifica prima nel tempo) dovrà essere abbreviata, o il tempo di inizio del l'altro evento (quello che si verifica più avanti nel tempo) dovrà essere spostato in avanti, eventualmente anche regolando la sua durata.

    
risposta data 08.01.2012 - 19:39
fonte
2

se ogni evento ha un "eventID" univoco e un campo datetime per "lastmodified", il caso è semplice. (Li uso per eventi ical in mozilla-calendar e msoutlook 2010). dal momento che il mio calendario motorola mobile non ha l'eventid ho una copia degli eventi sul pc che include l'eventid.

hai anche bisogno di questa copia locale se vuoi gestire "eventi cancellati" perché altrimenti le eliminazioni verranno reapear dopo la sincronizzazione.

    
risposta data 08.01.2012 - 22:54
fonte

Leggi altre domande sui tag