[Buoh-dev] Offset en los comics

Carlos Garcia Campos carlosgc at gnome.org
Wed Dec 14 02:40:44 MST 2005


El mar, 13-12-2005 a las 23:41 +0100, Esteban Sánchez escribió:
> Buenas familia!
> 
> He hecho algunos cambios al ComicManagerDate para permitir el soporte
> del comic de Calvin y hobbes (en inglés). El problema con este comic
> es
> que aunque está basado en la fecha, no es la fecha actual, si no que
> tiene un retraso de 11 años. Es decir, que la tira que hoy se ha
> publicado es la del 13 de diciembre de 1994.

vaya movida, a saber porque coño han hecho eso así.

> Para solucionarlo he añadido una nueva propiedad a los comics. La
> propiedad se llama offset y está expresada en días. Indica el número
> de
> días de retraso. Dudo que se use en muchos más comics, pero como
> Calvin
> y Hobbes es uno de los más famosos creo que su uso está justificado.

El problema es que esto es algo mazo de concreto y especifico. A lo
mejor lo que tenemos que hacer es una forma genérica de tratar casos
excepcionales, porque si para cada comic que tenga alguna peculiaridad
añadimos un parche al final el comic manager va a ser un kaos. 

> En el parche viene el código para hacerlo funcionar, como veis es muy
> sencillo. He incluido la información del comic para que lo veais.
> 
> Además, he tenido otra idea que también se incluye en el parche.
> Básicamente sirve para solucionar el problema del último comic, del
> que
> nunca se sabe la hora de publicación. La solución que he encontrado es
> bastante rápida y sencilla. Consiste en retroceder un día si vemos que
> ha fallado el último comic. Evidentemente tiene varios problemas, pero
> como idea inicial creo que está bien. En el parche podeis ver el
> código
> para entenderlo mejor.
> 
> ¿Qué os parece?

puff, a mi lo de volver para atrás en caso de fallo no me termina de
convencer. Creo que hay que mirar si es posible obtener la fecha que
está manejando cada servidor para "sincronizarnos" y manejar los mismo
tiempos. Es una forma mas limpia y genérica de hacerlo. Que pasa si está
fallando simplemente porque ese dia  no se ha publicado y no por la hora
que es? no habría que hacer lo mismo en caso de fallo aunque no sea el
último para ser consistentes?
En cualquier caso si no es posible hacerlo de otra manera, es una
solución que podría ser válida. 

> NOTA: Si creeis que el parche es correcto sólo subiré lo del offset,
> lo
> otro hay que discutirlo más.

comentarios sobre el parche mas abajo.

> Saludos!!
> 
> -- 
> Esteban Sánchez
>  esteban at steve-0.com
>  http://steve-o.org
>  http://subanales.com/
>  ------------------------------------------------
>  PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xB6E0F8AF

> 
> Index: data/comics.xml
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/data/comics.xml,v
> retrieving revision 1.22
> diff -u -p -u -r1.22 comics.xml
> --- data/comics.xml     8 Dec 2005 21:43:13 -0000       1.22
> +++ data/comics.xml     13 Dec 2005 22:24:17 -0000
> @@ -1412,4 +1412,21 @@
>          generic_uri="http://www.nichtlustig.de/comics/full/%y%m%
> d.jpg"
>          first="2002-06-07">
>  </comic>
> +<comic id="ch"
> +        class="date"
> +        title="Calvin and Hobbes"
> +        author="Bill Watterson"
> +        language="English"
> +        generic_uri="http://picayune.uclick.com/comics/ch/%Y/ch%y%m%
> d.gif"
> +        first="1985-11-18"
> +       offset="4018">
> +</comic>
>  </comic_list>
> Index: src/buoh-comic-manager-date.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-comic-manager-date.c,v
> retrieving revision 1.10
> diff -u -p -u -r1.10 buoh-comic-manager-date.c
> --- src/buoh-comic-manager-date.c       21 Nov 2005 20:59:45
> -0000      1.10
> +++ src/buoh-comic-manager-date.c       13 Dec 2005 22:24:18 -0000
> @@ -50,6 +50,7 @@ struct _BuohComicManagerDatePrivate {
>         GDate     *date;
>         GDate     *first;
>         gboolean   publications[8]; /* Days of week */
> +       gint       offset;
>  };
>  
>  static const gchar *day_names[] = {
> @@ -98,6 +99,7 @@ buoh_comic_manager_date_init (BuohComicM
>         
>         comic_manager->priv->date = NULL;
>         comic_manager->priv->first = NULL;
> +       comic_manager->priv->offset = 0;
>  
>         for (i = G_DATE_BAD_WEEKDAY; i <= G_DATE_SUNDAY; i++)
>                 comic_manager->priv->publications[i] = TRUE;
> @@ -168,6 +170,15 @@ buoh_comic_manager_date_new (const gchar
>  }
>  
>  void
> +buoh_comic_manager_date_set_offset (BuohComicManagerDate
> *comic_manager,
> +                                   const gint           offset)

no tiene mucho sentido usar const con un parámetro entero. El paso de
parámetros es por valor, por mucho que se modifique offset dentro de la
función será la copia la que se verá modificada. 

> +{
> +       g_return_if_fail (BUOH_IS_COMIC_MANAGER_DATE (comic_manager));

no deberíamos comprobar que el offset es positivo? o es posible que no
vaya retrasado sino adelantado? en ese caso no deberíamos abajo
comprobar si es positivo o negativo para usar subtract o add según el
caso?

> +       comic_manager->priv->offset = offset;
> +}
> +
> +void
>  buoh_comic_manager_date_set_restriction (BuohComicManagerDate
> *comic_manager,
>                                          GDateWeekday          day)
>  {
> @@ -364,10 +375,14 @@ buoh_comic_manager_date_get_last (BuohCo
>  
>         date = g_date_new ();
>         g_date_set_time (date, mktime (gmt));
>  
> +       if (priv->offset != 0) {
> +               g_date_subtract_days (date, priv->offset);
> +       }
> +       

en caso de permitir offset negativos hay que comprobarlo para hacer add
en ese caso. 

>         /* Check the restrictions */
>         weekday = g_date_get_weekday (date);
>         while (!priv->publications[weekday]) {
> Index: src/buoh-comic-manager-date.h
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-comic-manager-date.h,v
> retrieving revision 1.6
> diff -u -p -u -r1.6 buoh-comic-manager-date.h
> --- src/buoh-comic-manager-date.h       16 Nov 2005 20:29:28
> -0000      1.6
> +++ src/buoh-comic-manager-date.h       13 Dec 2005 22:24:18 -0000
> @@ -55,6 +55,8 @@ BuohComicManager *buoh_comic_manager_dat
>                                                                 const
> gchar          *language,
>                                                                 const
> gchar          *generic_uri);
>  
> +void             buoh_comic_manager_date_set_offset
> (BuohComicManagerDate *comic_manager,
> +                                                               const
> gint           offset);

si el offset va a ser siempre positivo, mejor guint y sin const. 

>  void              buoh_comic_manager_date_set_restriction
> (BuohComicManagerDate *comic_manager,
>                                                                 GDateWeekday          day);
>  void              buoh_comic_manager_date_set_first
> (BuohComicManagerDate *comic_manager,
> Index: src/buoh-window.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-window.c,v
> retrieving revision 1.31
> diff -u -p -u -r1.31 buoh-window.c
> --- src/buoh-window.c   1 Dec 2005 21:55:27 -0000       1.31
> +++ src/buoh-window.c   13 Dec 2005 22:24:20 -0000
> @@ -1015,7 +1015,14 @@ buoh_window_view_status_change_cb (GObje
>                 break;
>         case STATE_MESSAGE_ERROR:
>                 buoh_window_comic_actions_set_sensitive (window,
> FALSE);
> -               buoh_window_comic_browsing_actions_set_sensitive
> (window, TRUE);
> +               buoh_window_comic_browsing_actions_set_sensitive
> (window,
> +
> TRUE);
> +               
> +               if (buoh_comic_manager_is_the_last (cm)) {
> +                       buoh_comic_manager_set_first_failed (cm);
> +                       comic = buoh_comic_manager_get_previous (cm);
> +                       buoh_view_set_comic (window->priv->view,
> comic);
> +               }
>                 break;
>         case STATE_COMIC_LOADING:
>                 comic = buoh_view_get_comic (view);
> Index: src/buoh.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh.c,v
> retrieving revision 1.28
> diff -u -p -u -r1.28 buoh.c
> --- src/buoh.c  1 Dec 2005 21:55:27 -0000       1.28
> +++ src/buoh.c  13 Dec 2005 22:24:21 -0000
> @@ -165,6 +165,7 @@ buoh_create_model_from_file (Buoh *buoh)
>         xmlChar          *id, *class, *title, *author, *language,
> *uri, *first;
>         gboolean          visible;
>         xmlChar          *restriction;
> +       xmlChar          *offset;
>         GDateWeekday      restriction_date;
>         gchar            *filename;
>         GList            *selected = NULL;
> @@ -212,7 +213,7 @@ buoh_create_model_from_file (Buoh *buoh)
>                                                                 (gchar
> *)language,
>                                                                 (gchar
> *)uri);
>                         
> -                       /* Comic simple */
> +                       /* Comic date */
>                         if (BUOH_IS_COMIC_MANAGER_DATE
> (comic_manager)) {
>                                 
>                                 first = xmlGetProp (node, (xmlChar *)
> "first");
> @@ -220,7 +221,14 @@ buoh_create_model_from_file (Buoh *buoh)
>                                 buoh_comic_manager_date_set_first
> (BUOH_COMIC_MANAGER_DATE (comic_manager),
> 
> (gchar *) first);
>                                 g_free (first);
> -
> +                               
> +                               offset = xmlGetProp (node, (xmlChar *)
> "offset");
> +                               if (offset != NULL) {
> +                                       buoh_comic_manager_date_set_offset (BUOH_COMIC_MANAGER_DATE (comic_manager),
> +
> atoi ((gchar *) offset));
> +                                       g_free (offset);
> +                               }
> +                               
>                                 /* Read the restrictions */
>                                 child = node->children->next;
>                                 while (child) { 

Salu2
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Carlos Garcia Campos a.k.a. KaL
   elkalmail at yahoo.es
   carlosgc at gnome.org
   http://carlosgc.linups.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=             
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada
	digitalmente
Url : http://forge.novell.com/pipermail/buoh-dev/attachments/20051214/4984beef/attachment.pgp


More information about the Buoh-dev mailing list