ERLEDIGT:Nach Updates prüfen

Alle Fragen zur Netzwerkkommunikation
ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

ERLEDIGT:Nach Updates prüfen

Beitrag von ts230 »

hallo,
ich habe eine Frage.
Wie mache ich das, dass ich über das Web nach updates Uuche und wenn welche da sind,Runterlade???
Ich habe nichts wirkliches Gefunden.
Bitte helft mir!
Zuletzt geändert von ts230 am Di 23. Dez 2008, 03:00, insgesamt 1-mal geändert.

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von alexander »

hmmm also ich mache es so, dass ich eine Textdatei mit der Versionnummer auf meinem Server habe und die runterlade. Dann vergleiche ich die Nummer mit der aktuellen Versionsnummer. Wie man das macht hatten wir schon:
viewtopic.php?f=26&t=1012

Ähnlich kannst du es dann mit deinem Programm selber machen.

Gruß Alexander
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Ich habe mir was zusammengebastelt.
Aber wie lese ich ein TStringList aus(also die 1. Zeile?)

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von monta »

Also ein bisschen eigenverantwortliche Suche wäre schon nett.

Über den Index der Strings-Eigenschaft, für die erste Zeile also:

Code: Alles auswählen

Stringlist.Strings[0];
Johannes

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Gut,
ich brauche jetzt nur noch eine Funktion zum Downloaden des Files.
Mit TStringList wirds bestimmt nicht gehen,da das File ja aus HEX-Werten besteht.
Die würden dann als Zeichen interpretirt werden und wenn der HEX-Wert nicht als Zeichen
Vorhanden ist,gibts Ärger :(
Der Prozess des Downloads sollt in einer TProgressBar angezeigt werden.
So sieht jetzt meine Überprüfung aus(Version ist als Konstante definiert):

Code: Alles auswählen

 
uses httpsend
...
procedure TForm1.FormShow(Sender: TObject);
var t:TStringList;
begin
 
  with THTTPSend.Create do
 
    begin
 
      if HTTPMethod('GET','http://tiersendung.ti.funpic.de/tristan/territorium.txt') then
 
      try
 
        t:= TStringList.Create;
 
        t.LoadFromStream(Document);
 
 
If t.Strings[0] = '0.0.1' then
begin
 
StatusBar1.Panels[2].Text:='Version '+Version+' ist aktuell';
StatusBar1.Panels[2].Bevel:=pbLowered;
end
else
begin
StatusBar1.Panels[2].Text:='Update zu Version '+t.Strings[0]+' gefunden!';
StatusBar1.Panels[2].Bevel:=pbRaised;
UpButton.Visible:=true;
end;
 
 
 
       t.Free;
 
      except
 
        MessageDlg('Fehler','Es konnte keine Verbindung zum Internet hergestellt werden.',mtError,[mbOk],'');
 
      end;
 
    Free;
    end;
end;
 

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Nach Updates prüfen

Beitrag von theo »

ts230 hat geschrieben:Gut,
ich brauche jetzt nur noch eine Funktion zum Downloaden des Files.


Wie meinst du das?
Das kannst du doch direkt mit Document.SaveToFile(); machen.

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Ja aber ein anderes binäres file.
Und
ich müß dem User anzeigen,wie weit der Download ist. :D

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Nach Updates prüfen

Beitrag von theo »

ts230 hat geschrieben:Ja aber ein anderes binäres file.

Na und? Document ist ein MemoryStream. Da kann alles drin sein.
ts230 hat geschrieben:Und ich müß dem User anzeigen,wie weit der Download ist. :D

http://synapse.ararat.cz/doku.php/public:howto:onstatus

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

ja ber wenn ich

Code: Alles auswählen

Timer1.Enabled:=true;//Timer1 Verarbeitet alles in die ProgressBar da ich in der CallBack nicht auf Komponenten zugreifen kann
  with THTTPSend.Create do
 
 
 
    begin
 
 
 
      if HTTPMethod('GET',BinOrt) then
 
 
 
      try
      Sock.OnStatus := SockCallBack;
 
      Document.SaveToFile('TS');
 
      except
 
 
 
        MessageDlg('Fehler','Es konnte leider kein Download gestartet werden.',mtError,[mbOk],'');
 
 
 
      end;
 
 
 
    Free;
 
    end;

krige ich das:
ERROR:Wrong number of Parameters specified for call to "SockCallBack"
FATAL:There were 1 errors compiling module,stopping
Meine CallBack ist das:

Code: Alles auswählen

procedure SockCallBack(Sender: TObject; Reason: THookSocketReason;const Value: string);
begin
Val:=StrToIntDef(Value, -1);//Kann nicht auf Komponente zugreifen,schreibe is in Val
end;

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Nach Updates prüfen

Beitrag von theo »

Sock.OnStatus := @SockCallBack;

oder delphi Modus einschalten {$mode delphi} statt {$mode objfpc}

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Geht beides nicht.
Bei dem Pointer-Ding krig ich das:

Code: Alles auswählen

[color=#FF0000]update.pas(122,18)ERROR:incompatible types: got "Pointer" expected "<procedure variable type of procedure(TObject,THookSocketReason,const AnsiString) of object;Register> "
update.pas:FATAL:There were 1 Errors compiling module,stopping[/color]
Zuletzt geändert von ts230 am Mo 22. Dez 2008, 17:51, insgesamt 1-mal geändert.

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von monta »

SockCallBack(Sender: TObject; Reason: THookSocketReason;const Value: string)

wie wäre es, dort auch was anzugeben?
Johannes

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Aber woher soll ich dann die Daten krigen?
Auf der Seite steht es genau so :?

Code: Alles auswählen

Sock.OnStatus:=SockCallBack;


Das ist das einzige was nicht will.
Der eigentliche Download geht supi:freu:.

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von Christian »

kann es sein das du beide lösungen von theo kombiniert hast ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Nach Updates prüfen

Beitrag von ts230 »

Nö.
Hier ist mein ganzes File:

Code: Alles auswählen

unit UpDateForm;
 
{$mode delphi}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, ComCtrls, ExtCtrls, memds, DbCtrls,httpsend;
 
type
  { TUpForm }
  THookSocketReason = (
    HR_ResolvingBegin,
    HR_ResolvingEnd,
    HR_SocketCreate,
    HR_SocketClose,
    HR_Bind,
    HR_Connect,
    HR_CanRead,
    HR_CanWrite,
    HR_Listen,
    HR_Accept,
    HR_ReadCount,
    HR_WriteCount,
    HR_Wait,
    HR_Error
    );
 
  TUpForm = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Button1: TButton;
    CheckBox1: TCheckBox;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    ProgressBar1: TProgressBar;
    ProgressBar2: TProgressBar;
    SelectDirectoryDialog1: TSelectDirectoryDialog;
    Timer1: TTimer;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Change(Sender: TObject);
    procedure CheckGroup1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  UpForm: TUpForm;
  BinOrt:String;
  Val:integer;
 
 
{ TUpForm }
implementation
 
procedure CopyFile(Source, Destination: string;Pbar:TProgressBar);
var
  FromF, ToF: file of byte;
  Buffer: array[0..4096] of char;
  NumRead: integer;
  FileLength: longint;
begin
  AssignFile(FromF, Source);
  reset(FromF);
  AssignFile(ToF, Destination);
  rewrite(ToF);
  FileLength := FileSize(FromF);
  with Pbar do
  begin
    Min := 0;
    Max := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF, Buffer[0], NumRead);
      Position := Position + NumRead;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
  end;
end;
 
procedure TUpForm.BitBtn2Click(Sender: TObject);
begin
  close;
end;
 
procedure SockCallBack(Sender: TObject; Reason: THookSocketReason;const Value: string); begin
Val:=StrToIntDef(Value, -1);
end;
 
 
 procedure TUpForm.BitBtn1Click(Sender:TObject);
begin
 
 BitBtn1.Enabled:=false;
BitBtn2.Enabled:=false;
BitBtn3.Enabled:=false;
BitBtn4.Enabled:=false;
ShowMessage('Folgende Dinge werden gemacht:'+#13+'Download der Software');
 
  Timer1.Enabled:=true;
 
  with THTTPSend.Create do
 
Sock.OnStatus := SockCallBack;
 
    begin
 
 
 
      if HTTPMethod('GET',BinOrt) then
 
 
 
      try
 
      Document.SaveToFile('TS');
 
 
      except
 
 
 
        MessageDlg('Fehler','Es konnte leider kein Download gestartet werden.',mtError,[mbOk],'');
 
 
 
      end;
 
 
 
    Free;
 
    end;
end;
 
 procedure TUpForm.BitBtn3Click(Sender:TObject);
begin
BitBtn1.Enabled:=false;
BitBtn2.Enabled:=false;
BitBtn3.Enabled:=false;
BitBtn4.Enabled:=false;
ShowMessage('Folgende Dinge werden gemacht:'+#13+'Download der Software'+#13+'Installieren');
 If CheckBox1.Checked = true then
  begin
     try
        Application.ProcessMessages;
        CopyFile('feuerfiech.ini',Edit1.Text+'feuerfiech.ini',ProgressBar2);
     except
        MessageDlg('Fehler','Konnte feuerfiech.xml nicht kopieren'+#13+'Bitte probieren sie Manuelles Kopieren in den backup-Ordner.',mtError,[mbOk],'');
 
      end;
   ShowMessage('backup beendet.'+#13+'Starte verbleibende Aktionen...');
  end;
end;
 
procedure TUpForm.Button1Click(Sender: TObject);
begin
  SelectDirectoryDialog1.Execute;
  Edit1.text:=SelectDirectoryDialog1.FileName;
end;
 
procedure TUpForm.CheckBox1Change(Sender: TObject);
begin
  Edit1.Enabled:=CheckBox1.Checked;
    Button1.Enabled:=CheckBox1.Checked;
end;
 
procedure TUpForm.CheckGroup1Click(Sender: TObject);
begin
 
end;
 
procedure TUpForm.FormCreate(Sender: TObject);
begin
 
end;
 
procedure TUpForm.FormShow(Sender: TObject);
 
 var t:TStringList;
 i:integer;
begin
BitBtn1.Enabled:=true;
BitBtn2.Enabled:=true;
BitBtn3.Enabled:=true;
BitBtn4.Enabled:=true;
 memo1.Clear;
 
  with THTTPSend.Create do
 
    begin
 
      if HTTPMethod('GET','http://tiersendung.ti.funpic.de/tristan/territorium_desc.txt') then
 
      try
 
        t:= TStringList.Create;
 
        t.LoadFromStream(Document);
        i:=0;
Application.ProcessMessages;
For i:=0 to 50 do
Memo1.Lines.Add(t.Strings[i]);
 
 
      except
 
        MessageDlg('Fehler','Es konnte keine Verbindung zum Internet hergestellt werden.',mtError,[mbOk],'');
 
 
      end;
 
      Label3.Caption:='0/'+t.Strings[51]+' Kb';
      BinOrt:=t.Strings[53];
      try
Progressbar1.max:=strtoint(t.Strings[52]);
 
except
 
        MessageDlg('Fehler','Die Datei ist falsch aufgebaut.'+#13+'Das bedeutet,das die Fortschrittsanzeige nicht gehen wird.',mtError,[mbOk],'');
 
 
      end;
 
    t.Free;
    Free;
    end;
end;
 
procedure TUpForm.Timer1Timer(Sender: TObject);
begin
  Timer1.Interval:=30;
  ProgressBar1.Position:=Val;
end;
 
initialization
  {$I updateform.lrs}
 
end.

Code: Alles auswählen

  1.  If beitragHilfreich then leseitdurch()
  2. else volle_ignoranz();

tiersendung.funpic.de

Antworten