Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#76 Le 04/09/2017, à 15:16

Shnoulle

Re : Suivi des plugins de GCstar

Bonjour,

Pour information : j'ai récupéré le GIT de la version de Test sur https://gitlab.com/Kerenoc/GCstar et remplacé le plugin bedethque : MERCI , ça marche.
Sur Fedora, j'ai du installer manuellement perl-LWP-Protocol-https

Sinon : une question : @kerenoc : pourquoi ne pas mettre tous les plugins dans la version Test ? Pense tu reprendre la maintenance de GCStar ?

Denis
PS Aaaaaahhhh , idiot ! Pense à git checkout Test avant de dire des bêtises !

Dernière modification par Shnoulle (Le 04/09/2017, à 16:29)

Hors ligne

#77 Le 15/09/2017, à 09:00

kerenoc

Re : Suivi des plugins de GCstar

Bonjour,

Effectivement la branche Test est censée être à jour sur toutes les évolutions faites ou collectées, pour vérifier qu'elles sont compatibles. Plutôt que faire une branche Développement, j'avais multiplié les branches dédiées aux modifications des plugins ou aux corrections sur GCstar en espérant faciliter le travail des mainteneurs officiels pour leur permettre d'intégrer sélectivement dans la version officielle mais c'est resté sans effet.

Pour GCstar, je peux continuer à recenser les contributions dans le dépôt Git et faire un peu de maintenance corrective si cela ne demande pas une expertise forte en Perl ni une "plongée" trop profonde dans l'architecture de GCstar. Par contre je ne sais pas quels tests étaient faits avant de sortir les versions officielles ni comment ces versions étaient intégrées aux distributions Linux et encore moins réparer la chaîne de construction des versions binaires Windows.

N'utilisant pas régulièrement les applications Android viewer et scanner, je ne vais pas a priori avoir la même démarche.

Hors ligne

#78 Le 06/10/2017, à 15:21

kerenoc

Re : Suivi des plugins de GCstar

Bonjour

Sur http://gitlab.com/Kerenoc/GCstar/tree/Test, petites réparations des plugins pour livres Amazon et Fnac.

Cordialement

Hors ligne

#79 Le 03/01/2018, à 08:15

coucou123

Re : Suivi des plugins de GCstar

Bonjour,
J'ai remplacé tout le contenu de /usr/share/gcstar/lib par le contenu du lib de la branche Test, et maintenant au kancement de GCstar, j'ai ce message d'erreur:

Can't locate GCGraphicComponents/GCWidgets.pm:   Permission non accordée at /usr/bin/../share/gcstar/lib/GCOptions.pm line 28.
BEGIN failed--compilation aborted at /usr/bin/../share/gcstar/lib/GCOptions.pm line 28.
Compilation failed in require at /usr/bin/gcstar line 111.
BEGIN failed--compilation aborted at /usr/bin/gcstar line 111.

EDIT : c'est un problème de permissions. Je m'emmêle les pieds... Comment je fais pour conserver toutes les permission d'origine ? Perso, je fais un sudo cp -r, pour copier les fichiers et les répertoires, mais du coup, ça me restreint certains accès ensuite sur les répertoires copiés.

EDIT 2: bon, ben j'ai fait ça à la main, c'est plus long, mais au moins ça marche. Par contre, le plugin GCNoosFere.pm ne récupère plus les images...  Alors j'ai tenté de chercher comment juste modifier ça...Je me suis dit qu'en tâtonnant un peu, je trouverai bien un truc...Mais je ne trouve même pas ce qu'il faut modifier dans le GCNoosFere.pm ! big_smile

Dernière modification par coucou123 (Le 03/01/2018, à 09:07)

Hors ligne

#80 Le 03/01/2018, à 20:35

kerenoc

Re : Suivi des plugins de GCstar

Copie d'un post dans le forum GCstar aujourd'hui.

Apparemment le site NooSFere a un peu évolué. J'ai fait quelques modifications pour retrouver les auteurs, les genres et les couvertures.

A récupérer dans la branche Test, fichier lib/gcstar/GCPlugins/GCbooks/GCNooSFere.pm et à  tester pour vérifier la non-régression!

Hors ligne

#81 Le 16/01/2018, à 08:57

HDA12

Re : Suivi des plugins de GCstar

Bonjour,
Merci pour le travail de tous les intervenants.

J'ai installé la branche "test" sur ma Debian afin d'obtenir un plugin Noosfere fonctionnel.
Dans la fenêtre de choix des livres il ne remonte pas:
  - le nom des auteurs
  - l'onglet Edition est rempli par les Editeurs
Dans l'aperçu les données de la collection (Edition) et leur rang remontent dans les intitulés série & rang

J'ai modifié le fichier GCNooSFere.pm afin d'obtenir:
- Dans la fenêtre de choix: Titre, Auteurs et Edition apparaissent sans erreurs
- Dans l'aperçu les information de l'édition sont au bon endroit

Évidemment l'aperçu reste fonctionnel

N'ayant aucunes connaissances en programmation, je ne sais pas comment trouver l'endroit où le Parser HTML associe [série / numéro dans la série] à [édition (collection) / numéro dans la collection].

package GCPlugins::GCbooks::GCNooSFere;

###################################################
#
#  Copyright 2005-2006 Tian
#
#  This file is part of GCstar.
#
#  GCstar is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  GCstar is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with GCstar; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
###################################################

use strict;
use utf8;

use GCPlugins::GCbooks::GCbooksCommon;

{
    package GCPlugins::GCbooks::GCPluginNooSFere;

    use base qw(GCPlugins::GCbooks::GCbooksPluginsBase);
    use URI::Escape;

    sub start
    {
        my ($self, $tagname, $attr, $attrseq, $origtext) = @_;
	
        $self->{inside}->{$tagname}++;

        if ($self->{parsingList})
        {
            return if ( $self->{isFound} eq 2 );
            if (($tagname eq 'td') && ($attr->{class} eq 'onglet_bleu'))
            {
                $self->{isFound} = 1 ;
            }
            elsif ($attr->{class} eq 'TitreNiourf')
            {
                $self->{isTitle} = 1;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m/editionslivre.asp\?numitem=/i) && !($attr->{href} =~ m/numediteur=/i) && !($attr->{href} =~ m/tri=/i))
            {
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isAuthor} eq 0))
            {
                $self->{isAuthor} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./editeur.asp\?numediteur=|i))
            {
                $self->{isPublisher} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./collection.asp\?NumCollection=|i)) 
            {	
            	 $self-> {isEdition} = 1 ;
            }            	 
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./serie.asp\?NumSerie=|i))
            {
                $self->{isSerie} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m/editionslivre.asp\?numitem=/i) && ($attr->{href} =~ m/numediteur=/i))
            {
                my $html = $self->loadPage( "https://www.noosfere.org/livres/" . $attr->{href}, 0, 1 );
                my $found = index($html,"Fiche livre : les éditions");
                if ( $found >= 0 )
                {
                   while (index($html,"./niourf.asp?numlivre="))
                   {
		      $found = index($html,"./niourf.asp?numlivre=");
                      if ( $found >= 0 )
                      {
			 my $index0 = $found +length('./niourf.asp?numlivre=');
			 my $index1 = index($html, "\"",$index0);
			 my $index2 = index($html, "\'",$index0);
			 $index1 = $index2 if ($index1 <1 || $index2 < $index1);
			 $index2 = index($html, "numediteur", $index0);
			 $index2 = index($html, ">", $index2);
			 my $index3 = index($html, "<", $index2);
                         $self->{itemIdx}++;
                         $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                         $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                         $self->{itemsList}[$self->{itemIdx}]->{edition} = substr($html,$index2+1,$index3-$index2-1);
                         $self->{itemsList}[$self->{itemIdx}]->{rank} = $self->{saveRank};
                         $self->{itemsList}[$self->{itemIdx}]->{publisher} = $self->{savePublisher};
			 $html = substr($html, $index0, length($html)-$index0);
                         $self->{itemsList}[$self->{itemIdx}]->{url} = "http://www.noosfere.org/livres/niourf.asp?numlivre=" . substr($html,0,$index1-$index0);
                      }
                      else
                      {
                         last;
                      }

                   }
                }
                else
                {
                   $self->{itemIdx}++;
                   $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                   $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                   $self->{itemsList}[$self->{itemIdx}]->{url} = "https://www.noosfere.org/livres/" . $attr->{href};
                }
            }
            elsif ($tagname eq 'h1')
            {
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./niourf.asp\?numlivre=|i))
            {
                $self->{itemIdx}++;
                $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                $self->{itemsList}[$self->{itemIdx}]->{url} = "https://www.noosfere.org/livres/" . $attr->{href};
            }
            elsif (($tagname eq 'td') && ($attr->{class} eq 'onglet_biblio1'))
            {
                $self->{isAuthor} = 2 ;
            }
            elsif (($tagname eq 'table') && ($attr->{class} eq 'piedpage'))
            {
                $self->{isAuthor} = 0 ;
            }
        }
        else
        {
            if (($tagname eq 'mytpf') && ($attr->{id} eq 'TPFENDCOMMENTTPF'))
            {
                $self->{isDescription} = 0 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'TitreNiourf'))
            {
                $self->{isAnalyse} = 0 ;
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'AuteurNiourf'))
            {
                $self->{isAuthor} = 1 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'sousFicheNiourf'))
            {
                $self->{isAnalyse} = 1;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isAuthor} eq 1))
            {
                $self->{isAuthor} = 2 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|actu_mois.asp\?|i))
            {
                $self->{isPublication} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|editeur.asp\?numediteur=|i) && ($self->{curInfo}->{publisher} eq ''))
            {
                $self->{isPublisher} = 1 ;
                $self->{isArtist} = 0;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|collection.asp\?NumCollection=|i) && ($self->{curInfo}->{edition} eq ''))
            {
                $self->{isSerie} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isTranslator} eq 1))
            {
                $self->{isTranslator} = 2 ;
            }
            elsif (($tagname eq 'font') && ($attr->{style} eq 'font-size:14px;') && ($self->{isAnalyse} eq 0))
            {
                $self->{isAnalyse} = 1 ;
            }
            elsif ($tagname eq 'img' && $attr->{name} eq "couverture")
            {
                $self->{curInfo}->{cover} = $attr->{src} ;
            }
            elsif (($tagname eq 'mytpf') && ($attr->{id} eq 'TPFSTARTCOMMENTTPF'))
            {
                $self->{isDescription} = 1 ;
            }
	    elsif ($tagname eq 'br')
	    {
		$self->{isPublisher} = 0;
		$self->{isTranslator} = 0;
		$self->{isAuthor} = 3 if ($self->{isAuthor} > 0);
	    }
        }
    }

    sub end
    {
        my ($self, $tagname) = @_;

        $self->{isFound} = 0 ;
        $self->{inside}->{$tagname}--;
        $self->{isAnalyse} = 0 if ($tagname eq 'span');
    }

    sub text
    {
        my ($self, $origtext) = @_;

        if ($self->{parsingList})
        {
            if ($self->{isTitle})
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                $self->{saveTitle} = $origtext;
                $self->{saveAuthor} = '';
                $self->{isTitle} = 0 ;
            }
            elsif ($self->{isAuthor} eq 1)
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                if (($self->{saveAuthor} eq '') && ($origtext ne ''))
                {
                   $self->{saveAuthor} = $origtext;
                }
                elsif ($origtext ne '')
                {
                   $self->{saveAuthor} .= ', ';
                   $self->{saveAuthor} .= $origtext;
                }
                $self->{isAuthor} = 0 ;
            }
            elsif ($self->{isPublisher})
            {
                $self->{itemsList}[$self->{itemIdx}]->{edition} = $origtext;
                $self->{isPublisher} = 0 ;
            }
            elsif ($self->{isEdition})
            {
                $self->{itemsList}[$self->{itemIdx}]->{edition} = $origtext;
                $self->{isEdition} = 0 ;
            }            
            elsif ($self->{isSerie})
            {
                $self->{itemsList}[$self->{itemIdx}]->{serie} = $origtext;
                $self->{isSerie} = 0 ;
            }
            elsif ($self->{isFound} eq 1)
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                if ($origtext eq 'Fiche livre')
                {
                   $self->{itemIdx}++;
                   $self->{itemsList}[$self->{itemIdx}]->{url} = $self->{loadedUrl};
                   $self->{isFound} = 2 ;
                }
                else
                {
                   $self->{isFound} = 0 ;
                }
            }
        }
       	else
        {
            # Enleve les blancs en debut de chaine
            $origtext =~ s/^\s+//;
            # Enleve les blancs en fin de chaine
            $origtext =~ s/\s+$//g;
            if ($self->{isTitle} eq '1')
            {
                $self->{curInfo}->{title} = $origtext;
                $self->{isTitle} = 0 ;
            }
            elsif ($self->{isPublication}) 
            {
                $self->{curInfo}->{publication} = ($origtext); # $self->decodeDate($origtext)
                $self->{isPublication} = 0; 
                $self->{isAnalyse} = 1;
            } 
            
            elsif ($self->{isAnalyse} eq 1)
            {
               if ($origtext =~ m/([0-9][0-9]*) *pages/)
               {
                  $self->{curInfo}->{pages} = $1;
               }
               elsif ($origtext =~ m/ISBN : ([^ ]*)/)
               {
                  $self->{curInfo}->{isbn} = $1;
                  $self->{curInfo}->{isbn} =~ s/-//g;
               }
               elsif ($origtext =~ m/D.*p.*t l.*gal :\s*([1-4]*).*trimestre\s*([0-9]*)/)
               {
                   my $trimestre = $1;
                   my $annee = $2;
                   my $date = "01/".($trimestre*3-2)."/".$annee;
                   $self->{curInfo}->{publication} = $origtext ; # $self->decodeDate($date)
                   
               }
               elsif ($origtext =~ m/Genre : (.*)/)
               {
                   $self->{curInfo}->{genre} = $1;
               }           
            }
            elsif ($self->{isAuthor} eq 2)
            {
                if (($self->{curInfo}->{authors} eq '') && ($origtext ne ''))
                {
                   $self->{curInfo}->{authors} = $origtext;
                }
                elsif ($origtext ne '')
                {
                   $self->{curInfo}->{authors} .= ', ';
                   $self->{curInfo}->{authors} .= $origtext;
                }
                $self->{isAuthor} = 1 ;
            }
            elsif ($self->{isAuthor} eq 3)
            {
		if ($origtext =~ m/Titre original/)
		{
		    $self->{isAuthor} = 1;
		}
		else
		{
		    if ($origtext =~ m/Traduction de/i) 
		    { 
			$self->{isTranslator} = 1; 
			$self->{isAuthor} = 0;
			$origtext =~ s/ *Traduction.*//;
		    }
		    #elsif ($origtext =~ m/Cycle /i) 
		    #{ 
		    # $self->{isAuthor} = 0;
		    #}
		    $origtext =~ s/[^ a-zA-Z].*//;
		    $self->{curInfo}->{genre} = $origtext;
		    $self->{isAuthor} = 0;
		}
	    }
            elsif ($self->{isPublisher} eq 1)
            {
                $self->{curInfo}->{publisher} = $origtext;
		$self->{isPublisher} = 2 - 2 ; # Kerenoc : to check
	    } 
	    elsif ($self->{isSerie} eq 1) 
	    { 
		$self->{curInfo}->{edition} = $origtext; 
		$self->{isSerie} = 3 ; 
	    } 
	    elsif ($self->{isSerie} eq 2) 
	    { 
		my $numero = $origtext;
		$numero =~ s/,.*//;
		$numero =~ s/[^0-9]*//g;
		$self->{curInfo}->{rank} = $numero if ($numero =~ m/[0-9]+/);
		$self->{previousText} = $origtext;
		$self->{isSerie} = 0 ; 
	    } 
	    elsif ($self->{isTranslator} > 0) 
	    { 
		$origtext = ", ".$origtext if ($self->{curInfo}->{translator});
		$self->{curInfo}->{translator} .= $origtext if ($origtext ne ", &"); 
	    } 
            elsif ($self->{isArtist} > 0) 
            { 
                $origtext = ", ".$origtext if ($self->{curInfo}->{artist});
                $self->{curInfo}->{artist} .= $origtext if ($origtext ne ", &"); 
            } 
	    elsif ($self->{isDescription}) 
	    { 
		if ($origtext =~ m/Pas de texte sur la quatri.me de couverture\./i) 
		{ 
		} else 
		{ 
		    $self->{curInfo}->{description} .= $origtext ."\n"; 
		} 
	    } 
	    elsif ($origtext =~ m/Traduction de/i) 
	    { 
		$self->{isTranslator} = 1; 
		$self->{isAuthor} = 0;
            } 
            elsif ($origtext =~ m/Illustration de/i) 
            { 
                $self->{isArtist} = 1; 
                $self->{isTranslator} = 0;
            } 
	    else 
	    {
		$self->{previousText} = $origtext;
	    } 
	} 
    }

    sub new
    {
        my $proto = shift;
        my $class = ref($proto) || $proto;
        my $self  = $class->SUPER::new();
        bless ($self, $class);

        $self->{hasField} = {
            title => 1,
            authors => 1,
            publication => 0,
            format => 0,
            edition => 1,
            serie => 1,
        };

        return $self;
    }

    sub preProcess
    {
        my ($self, $html) = @_;

        $self->{saveTitle} = '';
        $self->{saveAuthor} = '';
        $self->{previousText} = '';
        $self->{isFound} = 0;
        $self->{isTitle} = 0;
        $self->{isAuthor} = 0;
        $self->{isPublisher} = 0;
        $self->{isPublication} = 0;
#        $self->{isEdition} = 0;
        $self->{isSerie} = 0;
        $self->{isDescription} = 0;
        $self->{isTranslator} = 0;
        $self->{isAnalyse} = 0;
        $self->{isArtist} = 0;
        $self->{isPages} = 0;
        $self->{isGenre} = 0;
        $self->{isRank} = 0;               

        if ($self->{parsingList})
        {
        }
        else
        {

            # Le descriptif pouvant contenir des balises html je le repere maintenant

            my $found = index($html,"Id=\"R"); # Id=\"Résumes
            if ( $found >= 0 )
            {
               my $html2 = substr($html, $found +length('Id="R'),length($html)- $found -length('Id="R'));
               my $found2 = index($html2,"<TD class=\"noocell_fs17\" valign=\"top\">");
               if ( $found2 >= 0 )
               {
                  $html2 = substr($html2, $found2 +length('<TD class="noocell_fs17" valign="top">'),length($html2)- $found2 -length('<TD class="noocell_fs17" valign="top">'));
               }

               $found2 = index($html2,"</TD>");
               if ( $found2 >= 0 )
               {
                  $html2 = substr($html2, 0, $found2);
               }

               $html2 =~ s|<li>|\n* |gi;
               $html2 =~ s|<br>|\n|gi;
               $html2 =~ s|<br />|\n|gi;
               $html2 =~ s|<b>||gi;
               $html2 =~ s|</b>||gi;
               $html2 =~ s|<i>||gi;
               $html2 =~ s|</i>||gi;
               $html2 =~ s|<p>|\n|gi;
               $html2 =~ s|</p>||gi;
               $html2 =~ s|</h4>||gi;
               $html2 =~ s|\x{92}|'|g;
               $html2 =~ s|&#146;|'|gi;
               $html2 =~ s|&#149;|*|gi;
               $html2 =~ s|&#156;|oe|gi;
               $html2 =~ s|&#133;|...|gi;
               $html2 =~ s|\x{85}|...|gi;
               $html2 =~ s|\x{8C}|OE|gi;
               $html2 =~ s|\x{9C}|oe|gi;

               $html = substr($html, 0, $found) . "><mytpf id=\"TPFSTARTCOMMENTTPF\">" . $html2 . "</mytpf><mytpf id=\"TPFENDCOMMENTTPF\"></mytpf>";
            }
        }

        
        return $html;
    }
    
    sub getSearchUrl
    {
        my ($self, $word) = @_;
	
        if ($self->{searchField} eq 'isbn')
        {
           return "https://www.noosfere.org/livres/cyborg_livre.asp?mini=1000&maxi=3000&mode=Idem&EtOuParution=NS&isbn=". $word;
        }
        else
        {
           return "https://www.noosfere.org/livres/cyborg_livre.asp?mini=1000&maxi=3000&mode=Tous&EtOuParution=NS&titre=". $word;
        }
    }
    
    sub getItemUrl
    {
        my ($self, $url) = @_;
		
        return $url if $url;
        return 'https://www.noosfere.org/';
    }

    sub getName
    {
        return "nooSFere";
    }
    
    sub getCharset
    {
        my $self = shift;
        return "ISO-8859-15";
    }

    sub getAuthor
    {
        return 'TPF - Varkolak - Kerenoc';
    }
    
    sub getLang
    {
        return 'FR';
    }

    sub getSearchFieldsArray
    {
        return ['isbn', 'title'];
    }

    sub decodeDate
    {
	my ($self, $date) = @_;

	# date déjà dans le bon format
	return $date if ($date =~ m|/.*/|);
	# année seule
	return "01/01/".$date if ($date =~ m/^[0-9]+$/);
	# pas d'année
	return '' if (! $date =~ m/[0-9][0-9][0-9][0-9]/);
	if ($date =~ m/trimestre/)
	{
	    $date =~ s/[^0-9]* *trimestre */ /;
	    my @dateItems = split(/\s/, $date);
	    $date = "01/01/".$dateItems[1] if ($dateItems[0] eq '1');
	    $date = "01/04/".$dateItems[1] if ($dateItems[0] eq '2');
	    $date = "01/07/".$dateItems[1] if ($dateItems[0] eq '3');
	    $date = "01/10/".$dateItems[1] if ($dateItems[0] eq '4');
	    return $date;
	}
        # replacement par DateTimeFormatStrToTime si merge GCUtils.pm accepté 
    
	# date à convertir au format jour/mois/année
	my @dateItems = split(/\s/, $date);
	my @listeMois = ("janvier","février","mars","avril","mai","juin",
			 "juillet","août","septmbre","octobre","novembre","décembre");
	my $mois = 0;
	
	while ($mois < (scalar @listeMois) && $dateItems[(scalar @dateItems)-2] ne $listeMois[$mois])
	{
	    $mois++;
	}
	$mois++;
	return "01/".sprintf("%02d",$mois)."/".$dateItems[1];
    }
}

1;

J'ai modifié les lignes 287 & 308 afin de garder l'ancien format de date.

Hors ligne

#82 Le 18/01/2018, à 14:46

kerenoc

Re : Suivi des plugins de GCstar

Merci HDA12 pour contribuer à améliorer GCstar et bravo car NooSFere n'est pas le site le plus simple à analyser!

En ce qui concerne les dates, étant donné que GCstar permet de paramétrer la façon dont les dates sont affichées, il est préférable que les plugins retournent les dates dans un format canonique permettant les tris et le mélange de livres issus de plusieurs sites dans une même collection (typiquement livres en anglais et en français). Cela oblige cependant à des approximations quand on ne connait uniquement que le mois ou l'année.

Le modèle d'information utilisé par NooSFere est fait la différence entre collection et cycle : par exemple l'édition 1980 du "Messie de Dune" chez Pocket a le numéro 7503 dans la collection "Science-Fiction / Fantasy" mais est le numéro 2 dans le cycle "Dune". Le modèle actuel de GCstar n'autorise pas cette double numérotation. Personnellement j'aurais tendance à garder le numéro dans la collection pour le champ Rang. Mais il est aussi possible d'ajouter de nouveaux champs au modèle.

Avez vous l'intention de continuer à améliorer ce plugin ou dois-je l'intégrer dans la branche Test? Sinon vous pouvez ouvrir des tickets ("issues") sur le dépôt Git pour les pbs détectés ou les propositions d'amélioration. Pour mieux comprendre le fonctionnement des plugins de GCstar, il y a des infos plus haut dans ce fils de discussion ou dans le forum dédié

Hors ligne

#83 Le 18/01/2018, à 19:38

HDA12

Re : Suivi des plugins de GCstar

Pour les dates, j'ai laissé en fin des lignes indiquées les valeurs d'origine.
J'ai bien compris la différence entre collection et cycle qui implique celle du rang:
Cycle : Fondation  vol. 5
coll. Présence du futur n° 94
Ce qui me gène c'est que le plugin remplit les information série/rang avec coll/n° au lieu de cycle/vol. et ça, je ne sais pas comment y remédier.
Lignes 73 à 93 du plugin ou fonctionnement du HTML::Parser ?
Si quelqu'un me donne une piste je suis prêt à continuer mes recherches.
Je n'ai jamais utilisé un site Git et n'ose pas trop me lancer!
Ce morceau de code est évidemment à mettre à la disposition de tous et je vous laisse l'intégrer où vous pensez qu'il sera le mieux.
Je vais de ce pas voir le forum dédié aux plugins:)

Hors ligne

#84 Le 19/01/2018, à 10:34

kerenoc

Re : Suivi des plugins de GCstar

Ok, je vais donc intégrer les modifications fournies. Ce sera visible sur l'historique du dépôt Git. J'ai aussi ouvert des tickets pour les évolutions NooSFere : les discussions sur le code peuvent s'y poursuivre éventuellement.

Je vais aussi regarder quels autres plugins collectent des données sur les collections et les rangs de façon à s'aligner sur les pratiques courantes.

Pour la modification de GCnooSFere.pm, les choses sont plus compliquées que pour d'autres plugins car le parser XML est utilisé pour certaines pages web alors que pour d'autres l'analyse du code HTML est faite "à la main". Pour faciliter la compréhension du fonctionnement de plugins ou pour mettre au point les modifications, je lance GCstar en ayant positionné la variable d'environnement GCS_DEBUG_PLUGIN_PHASE à 3, les pages web temporaires sont alors utilisées comme cache et on peut les analyser avec un outil comme Firebug (sur Firefox) pour comprendre comment récupérer les informations. Il peut aussi être utile d'exécuter GCstar en mode debug dans un environnement comme Eclipse.

Hors ligne

#85 Le 26/01/2018, à 21:08

HDA12

Re : Suivi des plugins de GCstar

Bonjour,
Je remets ici le message présent sur le forum GCstar sur la dernière version du plugin NoosFere.pm

Je viens de modifier ce plugin.

- Dans la fenêtre "choix du livre":
Apparaissent dans les bonnes cases:
  - le titre
  - les auteurs
  - l'édition, non plus l'éditeur

- Dans la fenêtre "choix des champs   importer":
Apparaissent maintenant dans les bonnes cases:
  - série
  - édition

Ne manquent que:
  - langue
  - rang (dans la série, numéro du volume)
  - format
  - verso (image dos du livre)

package GCPlugins::GCbooks::GCNooSFere;

###################################################
#
#  Copyright 2005-2006 Tian
#
#  This file is part of GCstar.
#
#  GCstar is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  GCstar is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with GCstar; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
###################################################

use strict;
use utf8;

use GCPlugins::GCbooks::GCbooksCommon;

{
    package GCPlugins::GCbooks::GCPluginNooSFere;

    use base qw(GCPlugins::GCbooks::GCbooksPluginsBase);
    use URI::Escape;

    sub start
    {
        my ($self, $tagname, $attr, $attrseq, $origtext) = @_;

        $self->{inside}->{$tagname}++;

        if ($self->{parsingList})
        {
            return if ( $self->{isFound} eq 2 );
            if (($tagname eq 'td') && ($attr->{class} eq 'onglet_bleu'))
            {
                $self->{isFound} = 1 ;
            }
            elsif ($attr->{class} eq 'TitreNiourf')
            {
                $self->{isTitle} = 1;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m/editionslivre.asp\?numitem=/i) && !($attr->{href} =~ m/numediteur=/i) && !($attr->{href} =~ m/tri=/i))
            {
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isAuthor} eq 0))
            {
                $self->{isAuthor} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./editeur.asp\?numediteur=|i))
            {
                $self->{isPublisher} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./serie.asp\?NumSerie=|i))
            {
                $self->{isSerie} = 1 ;
            }            
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./collection.asp\?NumCollection=|i))
            {	
            	 $self-> {isEdition} = 1 ;
            }                         	 
            elsif (($tagname eq 'a') && ($attr->{href} =~ m/editionslivre.asp\?numitem=/i) && ($attr->{href} =~ m/numediteur=/i))
            {
                my $html = $self->loadPage( "https://www.noosfere.org/livres/" . $attr->{href}, 0, 1 );
                my $found = index($html,"Fiche livre&nbsp;: les &eacute;ditions");
                if ( $found >= 0 )
                {
                   while (index($html,"./niourf.asp?numlivre="))
                   {
		      $found = index($html,"./niourf.asp?numlivre=");
                      if ( $found >= 0 )
                      {
			 my $index0 = $found +length('./niourf.asp?numlivre=');
			 my $index1 = index($html, "\"",$index0);
			 my $index2 = index($html, "\'",$index0);
			 $index1 = $index2 if ($index1 <1 || $index2 < $index1);
			 $index2 = index($html, "numediteur", $index0);
			 $index2 = index($html, ">", $index2);
			 my $index3 = index($html, "<", $index2);
                         $self->{itemIdx}++;
                         $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                         $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                         $self->{itemsList}[$self->{itemIdx}]->{edition} = substr($html,$index2+1,$index3-$index2-1);
			 $html = substr($html, $index0, length($html)-$index0);
                         $self->{itemsList}[$self->{itemIdx}]->{url} = "https://www.noosfere.org/livres/niourf.asp?numlivre=" . substr($html,0,$index1-$index0);
                      }
                      else
                      {
                         last;
                      }

                   }
                }
                else
                {
                   $self->{itemIdx}++;
                   $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                   $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                   $self->{itemsList}[$self->{itemIdx}]->{url} = "https://www.noosfere.org/livres/" . $attr->{href};
                }
            }
            elsif ($tagname eq 'h1')
            {
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|./niourf.asp\?numlivre=|i))
            {
                $self->{itemIdx}++;
                $self->{itemsList}[$self->{itemIdx}]->{title} = $self->{saveTitle};
                $self->{itemsList}[$self->{itemIdx}]->{authors} = $self->{saveAuthor};
                $self->{itemsList}[$self->{itemIdx}]->{url} = "https://www.noosfere.org/livres/" . $attr->{href};
            }
            elsif (($tagname eq 'td') && ($attr->{class} eq 'onglet_biblio1'))
            {
                $self->{isAuthor} = 2 ;
            }
            elsif (($tagname eq 'table') && ($attr->{class} eq 'piedpage'))
            {
                $self->{isAuthor} = 0 ;
            }
        }
        else
        {
            if (($tagname eq 'mytpf') && ($attr->{id} eq 'TPFENDCOMMENTTPF'))
            {
                $self->{isDescription} = 0 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'TitreNiourf'))
            {
                $self->{isAnalyse} = 0 ;
                $self->{isTitle} = 1 ;
                $self->{isAuthor} = 0 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'AuteurNiourf'))
            {
                $self->{isAuthor} = 1 ;
            }
            elsif (($tagname eq 'span') && ($attr->{class} eq 'sousFicheNiourf'))
            {
                $self->{isAnalyse} = 1;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isAuthor} eq 1))
            {
                $self->{isAuthor} = 2 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|actu_mois.asp\?|i))
            {
                $self->{isPublication} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|editeur.asp\?numediteur=|i) && ($self->{curInfo}->{publisher} eq ''))
            {
                $self->{isPublisher} = 1 ;
                $self->{isArtist} = 0;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|serie.asp\?NumSerie=|i) && ($self->{curInfo}->{serie} eq ''))
            {
                $self->{isSerie} = 1 ;
            }
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|collection.asp\?NumCollection=|i) && ($self->{curInfo}->{edition} eq ''))
            {
                $self->{isEdition} = 1 ;
            }            
            elsif (($tagname eq 'a') && ($attr->{href} =~ m|/livres/auteur.asp\?NumAuteur=|i) && ($self->{isTranslator} eq 1))
            {
                $self->{isTranslator} = 2 ;
            }
            elsif (($tagname eq 'font') && ($attr->{style} eq 'font-size:14px;') && ($self->{isAnalyse} eq 0))
            {
                $self->{isAnalyse} = 1 ;
            }
            elsif ($tagname eq 'img' && $attr->{name} eq "couverture")
            {
                $self->{curInfo}->{cover} = $attr->{src} ;
            }
            elsif (($tagname eq 'mytpf') && ($attr->{id} eq 'TPFSTARTCOMMENTTPF'))
            {
                $self->{isDescription} = 1 ;
            }
	    elsif ($tagname eq 'br')
	    {
		$self->{isPublisher} = 0;
		$self->{isTranslator} = 0;
		$self->{isAuthor} = 3 if ($self->{isAuthor} > 0);
	    }
        }
    }

    sub end
    {
        my ($self, $tagname) = @_;

        $self->{isFound} = 0 ;
        $self->{inside}->{$tagname}--;
        $self->{isAnalyse} = 0 if ($tagname eq 'span');
    }

    sub text
    {
        my ($self, $origtext) = @_;

        if ($self->{parsingList})
        {
            if ($self->{isTitle})
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                $self->{saveTitle} = $origtext;
                $self->{saveAuthor} = '';
                $self->{isTitle} = 0 ;
            }
            elsif ($self->{isAuthor} eq 1)
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                if (($self->{saveAuthor} eq '') && ($origtext ne ''))
                {
                   $self->{saveAuthor} = $origtext;
                }
                elsif ($origtext ne '')
                {
                   $self->{saveAuthor} .= ', ';
                   $self->{saveAuthor} .= $origtext;
                }
                $self->{isAuthor} = 0 ;
            }
            elsif ($self->{isPublisher})
            {
                $self->{itemsList}[$self->{itemIdx}]->{publisher} = $origtext; 
                $self->{isPublisher} = 0 ;
            }
            elsif ($self->{isEdition})
            {
                $self->{itemsList}[$self->{itemIdx}]->{edition} = $origtext;
                $self->{isEdition} = 0 ;
            }
            elsif ($self->{isSerie})
            {
                $self->{itemsList}[$self->{itemIdx}]->{serie} = $origtext;
                $self->{isSerie} = 1 ;
            }
            elsif ($self->{isFound} eq 1)
            {
                # Enleve les blancs en debut de chaine
                $origtext =~ s/^\s+//;
                # Enleve les blancs en fin de chaine
                $origtext =~ s/\s+$//g;
                if ($origtext eq 'Fiche livre')
                {
                   $self->{itemIdx}++;
                   $self->{itemsList}[$self->{itemIdx}]->{url} = $self->{loadedUrl};
                   $self->{isFound} = 2 ;
                }
                else
                {
                   $self->{isFound} = 0 ;
                }
            }
        }
       	else
        {
            # Enleve les blancs en debut de chaine
            $origtext =~ s/^\s+//;
            # Enleve les blancs en fin de chaine
            $origtext =~ s/\s+$//g;
            if ($self->{isTitle} eq '1')
            {
                $self->{curInfo}->{title} = $origtext;
                $self->{isTitle} = 0 ;
            }
            elsif ($self->{isPublication}) 
            {
                $self->{curInfo}->{publication} = $self->decodeDate($origtext);
                $self->{isPublication} = 0; 
                $self->{isAnalyse} = 1;
            } 
            
            elsif ($self->{isAnalyse} eq 1)
            {
               if ($origtext =~ m/([0-9][0-9]*) *pages/)
               {
                  $self->{curInfo}->{pages} = $1;
               }
               elsif ($origtext =~ m/ISBN : ([^ ]*)/)
               {
                  $self->{curInfo}->{isbn} = $1;
                  $self->{curInfo}->{isbn} =~ s/-//g;
               }
               elsif ($origtext =~ m/D.*p.*t l.*gal :\s*([1-4]*).*trimestre\s*([0-9]*)/)
               {
                   my $trimestre = $1;
                   my $annee = $2;
                   my $date = "01/".($trimestre*3-2)."/".$annee;
                   $self->{curInfo}->{publication} = $self->decodeDate($date); 
                   
               }
               elsif ($origtext =~ m/Genre : (.*)/)
               {
                   $self->{curInfo}->{genre} = $1;
               }           
            }
            elsif ($self->{isAuthor} eq 2)
            {
                if (($self->{curInfo}->{authors} eq '') && ($origtext ne ''))
                {
                   $self->{curInfo}->{authors} = $origtext;
                }
                elsif ($origtext ne '')
                {
                   $self->{curInfo}->{authors} .= ', ';
                   $self->{curInfo}->{authors} .= $origtext;
                }
                $self->{isAuthor} = 1 ;
            }
            elsif ($self->{isAuthor} eq 3)
            {
		if ($origtext =~ m/Titre original/)
		{
		    $self->{isAuthor} = 1;
		}
		else
		{
		    if ($origtext =~ m/Traduction de/i) 
		    { 
			$self->{isTranslator} = 1; 
			$self->{isAuthor} = 0;
			$origtext =~ s/ *Traduction.*//;
		    }
		    #elsif ($origtext =~ m/Cycle /i) 
		    #{ 
		    # $self->{isAuthor} = 0;
		    #}
		    $origtext =~ s/[^ a-zA-Z].*//;
		    $self->{curInfo}->{genre} = $origtext;
		    $self->{isAuthor} = 0;
		}
	    }
            elsif ($self->{isPublisher} eq 1)
            {
                $self->{curInfo}->{publisher} = $origtext;
		$self->{isPublisher} = 2 ;
	    }
	    elsif ($self->{isEdition} eq 1)
	    {
	     $self->{curInfo}->{edition} = $origtext;
	     $self->{isEdition} = 0 ;
	    }
	    elsif ($self->{isSerie} eq 1)
	    { 
		$self->{curInfo}->{serie} = $origtext; 
		$self->{isSerie} = 2 ; 
	    } 
	    elsif ($self->{isSerie} eq 2) 
	    { 
		my $numero = $origtext;
		$numero =~ s/,.*//;
		$numero =~ s/[^0-9]*//g;
		$self->{curInfo}->{rank} = $numero if ($numero =~ m/[0-9]+/);
		$self->{previousText} = $origtext;
		$self->{isSerie} = 0 ; 
	    } 
	    elsif ($self->{isTranslator} > 0) 
	    { 
		$origtext = ", ".$origtext if ($self->{curInfo}->{translator});
		$self->{curInfo}->{translator} .= $origtext if ($origtext ne ", &"); 
	    } 
            elsif ($self->{isArtist} > 0) 
            { 
                $origtext = ", ".$origtext if ($self->{curInfo}->{artist});
                $self->{curInfo}->{artist} .= $origtext if ($origtext ne ", &"); 
            } 
	    elsif ($self->{isDescription}) 
	    { 
		if ($origtext =~ m/Pas de texte sur la quatri.me de couverture\./i) 
		{ 
		} else 
		{ 
		    $self->{curInfo}->{description} .= $origtext ."\n"; 
		} 
	    } 
	    elsif ($origtext =~ m/Traduction de/i) 
	    { 
		$self->{isTranslator} = 1; 
		$self->{isAuthor} = 0;
            } 
            elsif ($origtext =~ m/Illustration de/i) 
            { 
                $self->{isArtist} = 1; 
                $self->{isTranslator} = 0;
            } 
	    else 
	    {
		$self->{previousText} = $origtext;
	    } 
	} 
    }

    sub new
    {
        my $proto = shift;
        my $class = ref($proto) || $proto;
        my $self  = $class->SUPER::new();
        bless ($self, $class);

        $self->{hasField} = {
            title => 1,
            authors => 1,
            publication => 0,
            format => 0,
            edition => 1,
            serie => 1,
            publisher => 1,
        };

        return $self;
    }

    sub preProcess
    {
        my ($self, $html) = @_;

        $self->{saveTitle} = '';
        $self->{saveAuthor} = '';
        $self->{previousText} = '';
        $self->{isFound} = 0;
        $self->{isTitle} = 0;
        $self->{isAuthor} = 0;
        $self->{isPublisher} = 0;
        $self->{isEdition} = 0;      
        $self->{isPublication} = 0;
        $self->{isSerie} = 0;
        $self->{isDescription} = 0;
        $self->{isTranslator} = 0;
        $self->{isAnalyse} = 0;
        $self->{isArtist} = 0;

        if ($self->{parsingList})
        {
        }
        else
        {

            # Le descriptif pouvant contenir des balises html je le repere maintenant

            my $found = index($html,"Id=\"R"); # Id=\"Résumes
            if ( $found >= 0 )
            {
               my $html2 = substr($html, $found +length('Id="R'),length($html)- $found -length('Id="R'));
               my $found2 = index($html2,"<TD class=\"noocell_fs17\" valign=\"top\">");
               if ( $found2 >= 0 )
               {
                  $html2 = substr($html2, $found2 +length('<TD class="noocell_fs17" valign="top">'),length($html2)- $found2 -length('<TD class="noocell_fs17" valign="top">'));# fs 15 -> fs17
               }

               $found2 = index($html2,"</TD>");
               if ( $found2 >= 0 )
               {
                  $html2 = substr($html2, 0, $found2);
               }

               $html2 =~ s|<li>|\n* |gi;
               $html2 =~ s|<br>|\n|gi;
               $html2 =~ s|<br />|\n|gi;
               $html2 =~ s|<b>||gi;
               $html2 =~ s|</b>||gi;
               $html2 =~ s|<i>||gi;
               $html2 =~ s|</i>||gi;
               $html2 =~ s|<p>|\n|gi;
               $html2 =~ s|</p>||gi;
               $html2 =~ s|</h4>||gi;
               $html2 =~ s|\x{92}|'|g;
               $html2 =~ s|&#146;|'|gi;
               $html2 =~ s|&#149;|*|gi;
               $html2 =~ s|&#156;|oe|gi;
               $html2 =~ s|&#133;|...|gi;
               $html2 =~ s|\x{85}|...|gi;
               $html2 =~ s|\x{8C}|OE|gi;
               $html2 =~ s|\x{9C}|oe|gi;

               $html = substr($html, 0, $found) . "><mytpf id=\"TPFSTARTCOMMENTTPF\">" . $html2 . "</mytpf><mytpf id=\"TPFENDCOMMENTTPF\"></mytpf>";
            }
        }

        
        return $html;
    }
    
    sub getSearchUrl
    {
        my ($self, $word) = @_;
	
        if ($self->{searchField} eq 'isbn')
        {
           return "https://www.noosfere.org/livres/cyborg_livre.asp?mini=1000&maxi=3000&mode=Idem&EtOuParution=NS&isbn=". $word;
        }
        else
        {
           return "https://www.noosfere.org/livres/cyborg_livre.asp?mini=1000&maxi=3000&mode=Tous&EtOuParution=NS&titre=". $word;
        }
    }
    
    sub getItemUrl
    {
        my ($self, $url) = @_;
		
        return $url if $url;
        return 'https://www.noosfere.org/';
    }

    sub getName
    {
        return "nooSFere";
    }
    
    sub getCharset
    {
        my $self = shift;
        return "ISO-8859-15";
    }

    sub getAuthor
    {
        return 'TPF - Varkolak - Kerenoc';
    }
    
    sub getLang
    {
        return 'FR';
    }

    sub getSearchFieldsArray
    {
        return ['isbn', 'title'];
    }

    sub decodeDate
    {
	my ($self, $date) = @_;

	# date déjà dans le bon format
	return $date if ($date =~ m|/.*/|);
	# année seule
	return "01/01/".$date if ($date =~ m/^[0-9]+$/);
	# pas d'année
	return '' if (! $date =~ m/[0-9][0-9][0-9][0-9]/);
	if ($date =~ m/trimestre/)
	{
	    $date =~ s/[^0-9]* *trimestre */ /;
	    my @dateItems = split(/\s/, $date);
	    $date = "01/01/".$dateItems[1] if ($dateItems[0] eq '1');
	    $date = "01/04/".$dateItems[1] if ($dateItems[0] eq '2');
	    $date = "01/07/".$dateItems[1] if ($dateItems[0] eq '3');
	    $date = "01/10/".$dateItems[1] if ($dateItems[0] eq '4');
	    return $date;
	}
        # replacement par DateTimeFormatStrToTime si merge GCUtils.pm accepté 
    
	# date à convertir au format jour/mois/année
	my @dateItems = split(/\s/, $date);
	my @listeMois = ("janvier","février","mars","avril","mai","juin",
			 "juillet","août","septmbre","octobre","novembre","décembre");
	my $mois = 0;
	
	while ($mois < (scalar @listeMois) && $dateItems[(scalar @dateItems)-2] ne $listeMois[$mois])
	{
	    $mois++;
	}
	$mois++;
	return "01/".sprintf("%02d",$mois)."/".$dateItems[1];
    }

}
1;

Hors ligne

#86 Le 27/01/2018, à 10:24

kerenoc

Re : Suivi des plugins de GCstar

Bonjour

Contributions de BMHD/HDA12 sur NooSFeere intégrées sur Gitlab: merci beaucoup.

J'en ai profité pour ajouter le champ "Edition" sur  la première page et pour  en changer la disposition pour laisser de la place pour le numéro dans une séries/cycle.

Hors ligne

#87 Le 04/02/2018, à 19:13

HDA12

Re : Suivi des plugins de GCstar

Bonsoir,
Pour les impatients, une nouvelle version du plugin NoosFere.pm est disponible sur le forum GCStar.
Fenêtre "Choix de livre":
- Editeur et édition
Fenêtre "choix des champs à  importer":
- Remontée des informations de format.

Hors ligne

#88 Le 10/02/2018, à 15:11

coucou123

Re : Suivi des plugins de GCstar

De tout coeur, un immense MERCI à vous qui contribuez à maintenir cet excellent logiciel !!!

Dernière modification par coucou123 (Le 10/02/2018, à 15:11)

Hors ligne

#89 Le 12/02/2018, à 17:23

HDA12

Re : Suivi des plugins de GCstar

Bonjour,

Utilisateurs du plugin Noosfère, précipitez-vous sur le Gitlab de Kerenoc, il nous a mijoté une version, qui me paraît complète, de celui-ci dans sa dernière version test de GCstar.

Ici aussi un grand merci à lui.

Hors ligne

#90 Le 10/04/2018, à 09:47

kerenoc

Re : Suivi des plugins de GCstar

Bonjour,

J'ai continué à intégrer quelques évolutions de GCstar et fait un bilan des plugins pour identifier ceux encore fonctionnels et ceux éventuellement réparables. Il pourrait être temps de faire une nouvelle version de GCstar mais je ne connais pas les modalités de fabrication de packages pour les différentes distributions. Quelqu'un pourrait-il donner quelques pistes ou regarder si le code de GCstar est encore à jour sur ce sujet là?

Hors ligne

#91 Le 12/09/2018, à 12:05

coucou123

Re : Suivi des plugins de GCstar

Bonjour,

Y a-t-il des nouvelles sur le développement de GCstar ?

Hors ligne

#92 Le 13/09/2018, à 19:56

kerenoc

Re : Suivi des plugins de GCstar

Bonsoir,

J'ai continué à faire des modifications dans la branche Test de mon dépôt Gitlab (par exemple plugin BDphile pour des collections de BDs, amélioration ou réparation d'autres plugins). L'installation doit se faire manuellement actuellement mais il commence à y avoir des initiatives pour faire des packages pour certains Linux à partir de ce dépôt et j'ai commencé à prendre des contacts pour une intégration officielle dans certaines distributions (sans réponse pour l'instant). Pour Ubuntu, je ne sais pas où m'adresser!

J'envisage de faire une version 1.8.0 qui serait la première version packagée sans Tian, le créateur de GCstar.

Cordialement

Hors ligne

#93 Le 15/09/2018, à 17:06

coucou123

Re : Suivi des plugins de GCstar

OK, merci pour ces news, Kerenoc !

C'est pas Canonical qu'il faut contacter pour Ubuntu ?

Hors ligne

#94 Le 16/09/2018, à 12:03

kerenoc

Re : Suivi des plugins de GCstar

coucou123 a écrit :

C'est pas Canonical qu'il faut contacter pour Ubuntu ?

Je ne sais pas. Il me semble que les packages Debian et Ubuntu passent par Launchpad et j'ai contacté deux mainteneurs sur ce site là.

Dernière modification par kerenoc (Le 16/09/2018, à 13:53)

Hors ligne

#95 Le 17/10/2018, à 14:09

fibule

Re : Suivi des plugins de GCstar

Bonjour à tous et merci de faire vivre ce projet.
J'utilise GCstar pour la gestion de ma bibliothèque de livres
Après le passage à Ubuntu Bionic, j'ai constaté que je ne récupérais plus les images de couverture sur Amazon (pas de souci avec les autres infos)
J'ai récupéré les plugins GCAmazon.pm et GCAmazonFR.pm dans la branche de test de Kerenoc mais ça n'a rien changé

Le souci vient-il d'ailleurs?
Merci d'avance

Hors ligne

#96 Le 17/10/2018, à 22:18

kerenoc

Re : Suivi des plugins de GCstar

La version packagée avec Ubuntu date de plus de 2 ans maintenant et le support de SSL/HTTPS n'était pas complet. Comme beaucoup de plugins doivent maintenant utiliser maintenant ce protocole, il vaut mieux installer complètement la nouvelle version GCstar. Si GCstar a été installé de façon standard, une façon de faire est de copier bin/gcstar dans /usr/bin/gcstar et le répertoire lib/gcstar dans /usr/share/gcstar/lib.

Hors ligne

#97 Le 18/10/2018, à 21:34

fibule

Re : Suivi des plugins de GCstar

Merci Kerenoc pour ton aide.
Je vais faire ça et je te dirai le résultat.
Bonne soirée

Hors ligne

#98 Le 21/10/2018, à 20:18

fibule

Re : Suivi des plugins de GCstar

Bonsoir Kerenoc,

J'ai du faire une fausse manip, car je tombe sur cette erreur lors du lancement de GCstar ...
J'ai juste vérifié que le module GCOptions.pm était bien là et au bon endroit...

Can't locate GCOptions.pm in @INC (you may need to install the GCOptions module) (@INC contains: /usr/bin/../lib/gcstar /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/bin/gcstar line 111.
BEGIN failed--compilation aborted at /usr/bin/gcstar line 111.

Si tu as une idée, merci d'avance

Hors ligne

#99 Le 22/10/2018, à 18:21

kerenoc

Re : Suivi des plugins de GCstar

Dans ce cas-là, le programme gcstar s'attend à trouver ses scripts dans le répertoire /usr/lib/gcstar. Il faut donc vérifier que GCOptions.pm s'y trouve bien et a les bonnes permissions.

Hors ligne

#100 Le 27/10/2018, à 17:51

fibule

Re : Suivi des plugins de GCstar

Bonsoir Kerenoc,

Désolé d'avoir été un peu lent, je n'ai pu m'y coller qu'aujourd'hui.

J'ai copié les scripts dans /usr/lib/gcstar et tout est rentré dans l'ordre. merci beaucoup
Toutefois je signale une erreur au lancement qui ne concerne pas les plugins de livres mais des films .

DBG Plugins : error with plugin GCDoubanfilm
 : Can't locate JSON.pm in @INC (you may need to install the JSON module) (@INC contains: /usr/bin/../lib/gcstar /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/bin/../lib/gcstar/GCPlugins/GCfilms/GCDoubanfilm.pm line 37.
BEGIN failed--compilation aborted at /usr/bin/../lib/gcstar/GCPlugins/GCfilms/GCDoubanfilm.pm line 37.
Compilation failed in require at (eval 365) line 2.
BEGIN failed--compilation aborted at (eval 365) line 2.

Je ne pense pas être concerné par cette erreur...
Bonne soirée

Hors ligne