UpdateTool

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

UpdateTool

Message par Heis Spiter »

Comme vous ne l'ignorez (je l'espère) pas, je travaille sur un lecteur multimédia. Et j'ai eu l'idée d'un "UpdateTool" par Internet (comme SmartUpdate) mais a ma sauce (l'horreur, quoi) et comme il est sous license GPL (comme le lecteur multimédia, mais qui lui n'est pas encore pret (n'allez pas chercher de logique la dedans il n'y en a pas)), je vous donne les sources ici, pas besoin de se dire que c'est un truc génial ! C'est la base de programmation (n'étant pas un programmeur génial...)

Code : Tout sélectionner

Enumeration
  #Window_0
  #ProgressBar_1
  #Text_0
  #Text_1
  #ProgressBar_2
  #Text_2
  #Text_3
  #ProgressBar_3
EndEnumeration
Global PB
Procedure Update(file$)
  
  SetGadgetText(#Text_2, file$+" :") 
  SetGadgetState(#ProgressBar_1, 0)
  If URLDownloadToFile_(0,"http://heisspiter.no-ip.com/update/"+file$, Currentdirectory$+file$,0,0) = #S_OK
    PB = PB + 1
    SetGadgetState(#ProgressBar_1, 1) 
    SetGadgetState(#ProgressBar_2, PB)
    SetGadgetState(#ProgressBar_3, PB)
  Else
    MessageRequester("Erreur", "Impossible de mettre "+file$+" à jour ! Abandon de la mise à jour !", #MB_ICONERROR)
    End
  EndIf
  
EndProcedure
If ReadFile(2, "infos.ini")
  nom$ = ReadString()
  adresse$ = ReadString()
  lversion$ = ReadString()
  If lversion$ = ""
    MessageRequester("Erreur", "Impossible de détecter la version actuelle !", #MB_ICONERROR)
    End
  EndIf
  CloseFile(2)
Else
  MessageRequester("Erreur", "Impossible de détecter la version actuelle !", #MB_ICONERROR)
  End
EndIf
Currentdirectory$ = Space(255)
GetCurrentDirectory_(255, Currentdirectory$)
If Right(Currentdirectory$, 1) <> "\"
  Currentdirectory$ = Currentdirectory$+"\"
EndIf
If InitNetwork() = 0
  MessageRequester("Erreur", "Impossible d'initialiser le réseau !", #MB_ICONERROR)
  End
EndIf
ConnectionID = OpenNetworkConnection("heisspiter.no-ip.com", 80)
If ConnectionID
  If URLDownloadToFile_(0,"http://heisspiter.no-ip.com/update/Update.txt", Currentdirectory$+"Update.txt",0,0) = #S_OK
    ReadFile(1, Currentdirectory$+"Update.txt")
    Version$ = ReadString()
    If Version$ = lversion$
      MessageRequester("Erreur", "Aucune mise à jour disponible", #MB_ICONERROR)
      End
    Else
      Rep = MessageRequester("Information", "Une mise à jour est disponible ("+Version$+"). Voulez-vous l'installer ?", #PB_MessageRequester_YesNo | #MB_ICONINFORMATION)
      If Rep = 7
        MessageRequester("Attention", "La mise à jour a été abandonnée !", #MB_ICONWARNING)
        End
      ElseIf Rep = 6
        multipexe$ = ReadString()
        aboutdll$ = ReadString()
        updateexe$ = ReadString()
        bmppack$ = ReadString()
        nb=0
        If multipexe$ = "1"
          nb = nb+1
        EndIf
        If aboutdll$ = "1"
          nb = nb+1
        EndIf
        update=0
        If updateexe$ = "1"
          nb=nb+1
          update=1
        EndIf
        If bmppack$ = "1"
          nb = nb+1
        EndIf
        If OpenWindow(#Window_0, 276, 190, 380, 121,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "Mise à jour")
          If CreateGadgetList(WindowID())
            ProgressBarGadget(#ProgressBar_1, 0, 20, 380, 20, 0, 1)
            TextGadget(#Text_0, 0, 0, 100, 20, "Téléchargement de ")
            TextGadget(#Text_1, 0, 40, 50, 20, "Général :")
            ProgressBarGadget(#ProgressBar_2, 0, 60, 380, 20, 0, nb)
            TextGadget(#Text_2, 100, 0, 280, 20, ":")
            TextGadget(#Text_3, 0, 80, 60, 20, "Installation : ")
            ProgressBarGadget(#ProgressBar_3, 0, 100, 380, 20, 0, nb+1)
          EndIf
        EndIf
        PB = 0
        If multipexe$ = "1"
          Update("MultiP.exe")
        EndIf
        If aboutdll$ = "1"
          Update("About.dll")
        EndIf
        If updateexe$ = "1"
          file$ = "update.exe"
          SetGadgetText(#Text_2, file$+" :") 
          SetGadgetState(#ProgressBar_1, 0)
          CreateDirectory(Currentdirectory$+"Update")
          CreateFile(3, "update.ini")
          If URLDownloadToFile_(0,"http://heisspiter.no-ip.com/update/"+file$, Currentdirectory$+"update/"+file$,0,0) = #S_OK
            PB = PB + 1
            SetGadgetState(#ProgressBar_1, 1) 
            SetGadgetState(#ProgressBar_2, PB)
            SetGadgetState(#ProgressBar_3, PB)
          Else
            MessageRequester("Erreur", "Impossible de mettre "+file$+" à jour ! Abandon de la mise à jour !", #MB_ICONERROR)
            End
          EndIf
        EndIf
        If bmppack$ = "1"
          Update("bmp\bmp.pak")
        EndIf
        If DeleteFile(Currentdirectory$+"infos.ini")
          If CreateFile(3, Currentdirectory$+"infos.ini")
            WriteStringN(nom$)
            WriteStringN(adresse$)
            WriteStringN(Version$)
          Else
            MessageRequester("Attention", "Impossible de refaire 'infos.ini' ! Vous devrez vous réenregistrer au prochain lancement", #MB_ICONINFORMATION)
          EndIf
        Else
          MessageRequester("Attention", "Impossible de supprimer 'infos.ini' ! Veuillez le supprimer manuellement.", #MB_ICONINFORMATION)
        EndIf
        DeleteFile(Currentdirectory$+"Update.txt")
        SetGadgetState(#ProgressBar_3, nb+1)
        If update = 0
          MessageRequester("Information", "La mise à jour a été réalisée avec succès !", #MB_ICONINFORMATION)
        ElseIf update = 1
          MessageRequester("Information", "La mise à jour est bientôt terminée. Pour pouvoir correctement la terminer, veuillez relancer le lecteur Multimédia.", #MB_ICONINFORMATION)
        EndIf
      EndIf
    EndIf
  Else
    MessageRequester("Erreur", "Impossible de télécharger les informations de mise à jour !", #MB_ICONERROR)
    End
  EndIf 
Else
  MessageRequester("Erreur", "Impossible de se connecter à heisspiter.no-ip.com:80 !", #MB_ICONERROR)
  End
EndIf
Et voici le bout de code a inserer en en-tête du programme principal (pour gérer la mise à jour de UpdateTool)

Code : Tout sélectionner

Currentdirectory$ = Space(255)
GetCurrentDirectory_(255, Currentdirectory$)
If Right(Currentdirectory$, 1) <> "\"
  Currentdirectory$ = Currentdirectory$+"\"
EndIf
update=0
If ReadFile(1, "update.ini")
  CopyFile(Currentdirectory$+"update\update.exe", Currentdirectory$+"update.exe")
  update=1
EndIf
If update=1
  CloseFile(1)
  DeleteFile(Currentdirectory$+"update.ini")
  DeleteFile(Currentdirectory$+"update\update.exe")
  DeleteDirectory(Currentdirectory$+"update\", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
EndIf
Testé et approuvé ;)
Et voici l'exemple d'un "Update.txt"
1.00RC2
1
1
1
0
Voila ! Régalez vous ;)
PS : Ne vous amusez pas a télécharger les fichiers qui sont sur le serveur, sinon le lecteur multimédia serait plombé avant sa sortie... De plus il est loin d'être fini ET débuggé.
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D