Como sincronizar eventos de calendários programaticamente?

5

Gostaria de ouvir algumas ideias sobre como sincronizar eventos da agenda. Digamos que eu tenha dois calendários com campos (id, title, start, end, updated, location e description). Eu estou lutando com o ponto de partida. É fácil se todos os eventos forem novos e não se sobreporem uns aos outros. Mas diga que eu já tenho eventos em calendários, alguns são supostamente os mesmos eventos, alguns são eventos separados, alguns talvez os mesmos eventos, mas seus atributos mudaram, como localização, título, hora de início e fim. Como você realmente faria a sincronização entre os calendários com uma funcionalidade inteligente razoável?

    
por MarkokraM 08.01.2012 / 19:22
fonte

2 respostas

4

Para cada evento, além do "tempo do evento", você também precisa manter o controle de mais um atributo de tempo, a hora da última modificação. Isso cuida do cenário de sincronização simples e, ehm, digamos, sem intercorrências: eventos que foram modificados desde a última vez em que a sincronização foi copiada.

Os problemas começam se houver a possibilidade de que dois eventos tenham sido modificados desde a última sincronização, e você não queira alterar atributos de uma sobrescrita de atributos alterados na outra. Nós chamamos essa situação de "conflito". A fim de superar os conflitos, você poderia controlar o tempo da última modificação de cada atributo dentro de um evento, mas isso a) complicaria muito as coisas, eb) só resolveria conflitos nos casos em que atributos diferentes fossem alterados . Você ainda teria um problema quando o mesmo atributo fosse alterado. Portanto, uma abordagem melhor para lidar com conflitos é sempre apresentar ao usuário os dois registros lado a lado, destacar os atributos alterados e deixá-los decidir qual atributo alterado do registro à esquerda substitui o atributo correspondente no registro correto e vice-versa.

O caso de eventos sobrepostos também pode ser visto como um conflito, que precisa ser tratado especialmente: ou a duração de um evento (aquele ocorrendo no início do tempo) precisará ser encurtado, ou a hora de início do evento. outro evento (aquele ocorrendo mais tarde no tempo) terá que ser movido para frente, possivelmente também ajustando sua duração.

    
por 08.01.2012 / 19:39
fonte
2

se cada evento tiver um campo "eventID" exclusivo e um campo de data e hora para "lastmodified", o caso será fácil. (Eu os uso para eventos icos no mozilla-calendar e no msoutlook 2010). desde o meu calendário Motorola não tem o eventid eu tenho uma cópia dos eventos no PC que inclui o eventid.

você também precisa desta cópia local se quiser manipular "eventos excluídos", porque as exclusões aparecerão novamente após a sincronização.

    
por 08.01.2012 / 22:54
fonte