[Buoh-dev] Offset en los comics



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 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 yahoo es
   carlosgc 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]