summaryrefslogtreecommitdiff
path: root/unit1.pas
diff options
context:
space:
mode:
Diffstat (limited to 'unit1.pas')
-rw-r--r--unit1.pas254
1 files changed, 254 insertions, 0 deletions
diff --git a/unit1.pas b/unit1.pas
new file mode 100644
index 0000000..50e6baa
--- /dev/null
+++ b/unit1.pas
@@ -0,0 +1,254 @@
+unit Unit1;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, lNetComponents, Forms, Controls, Graphics,
+ Dialogs, ExtCtrls, StdCtrls, lhttp, filterunit, math;
+
+type
+
+ { TForm1 }
+
+ TForm1 = class(TForm)
+ LHTTPClientComponent1: TLHTTPClientComponent;
+ Memo1: TMemo;
+ Starttimer: TTimer;
+ Timer1: TTimer;
+ TrayIcon1: TTrayIcon;
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ procedure LHTTPClientComponent1DoneInput(ASocket: TLHTTPClientSocket);
+ function LHTTPClientComponent1Input(ASocket: TLHTTPClientSocket;
+ ABuffer: pchar; ASize: integer): integer;
+ procedure StarttimerTimer(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ procedure TrayIcon1DblClick(Sender: TObject);
+ procedure TrayIcon1MouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ private
+ { private declarations }
+ procedure parseOptionFile;
+ procedure Station_waehlen;
+ procedure Zeiten_holen;
+ public
+ { public declarations }
+ mastnr: array of longint;
+ Stat,buff: string;
+ Anzeige: array of tAbfahrt;
+ Filter_s: array of tFilter;
+ lastButton: tMouseButton;
+ end;
+
+var
+ Form1: TForm1;
+
+implementation
+
+{$R *.lfm}
+
+{ TForm1 }
+
+procedure TForm1.Station_waehlen;
+begin
+ LHTTPClientComponent1.URI:='http://fpl.jenah.de/bontip-ifgi/php/getStation.php?action=getMastNo&q='+stat+'&q2=';
+ LHTTPClientComponent1.SendRequest;
+end;
+
+procedure TForm1.Zeiten_holen;
+begin
+ LHTTPClientComponent1.Tag:=0;
+ LHTTPClientComponent1.URI:='http://fpl.jenah.de/bontip-ifgi/php/proxy.php?vsz=120&azbid='+inttostr(mastnr[Starttimer.tag-1]);
+ LHTTPClientComponent1.SendRequest;
+end;
+
+procedure TForm1.TrayIcon1DblClick(Sender: TObject);
+begin
+ case lastButton of
+ mbLeft: begin
+ if form1.visible then Form1.Hide
+ else Form1.Show;
+ end;
+ mbRight: Application.Terminate;
+ end{of case};
+end;
+
+procedure TForm1.TrayIcon1MouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ lastButton:=Button;
+end;
+
+procedure TForm1.parseOptionFile;
+var f: textfile;
+ s: string;
+begin
+ assignfile(f,extractfilepath(application.exename)+'optionen.txt');
+ reset(f);
+ while not eof(f) do begin
+ readln(f,s);
+ if (length(s)=0) or (s[1]='#') then continue;
+ if pos('haltestelle:',s)=1 then begin
+ delete(s,1,length('haltestelle:'));
+ stat:=s;
+ continue;
+ end;
+ if pos('filter:',s)=1 then begin
+ setlength(Filter_s,length(Filter_s)+1);
+ Filter_s[length(Filter_s)-1]:=TFilter.create(f);
+ continue;
+ end;
+ raise Exception.create('Verstehe '''+s+''' nicht!');
+ end;
+ closefile(f);
+end;
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+ buff:='';
+ setlength(Filter_s,0);
+ setlength(mastnr,0);
+ lastButton:=mbLeft;
+ TrayIcon1.Icon.LoadFromFile(extractfilepath(application.exename)+'unbekannt.ico');
+ TrayIcon1.Show;
+ Application.ProcessMessages;
+ parseOptionFile;
+end;
+
+procedure TForm1.FormDestroy(Sender: TObject);
+var i: longint;
+begin
+ for i:=0 to length(Filter_s)-1 do
+ Filter_s[i].destroy;
+ setlength(Filter_s,0);
+ setlength(mastnr,0);
+end;
+
+procedure TForm1.FormResize(Sender: TObject);
+begin
+ memo1.width:=form1.clientwidth-memo1.left;
+ memo1.height:=form1.clientheight-memo1.top;
+end;
+
+procedure TForm1.LHTTPClientComponent1DoneInput(ASocket: TLHTTPClientSocket);
+var s,t,meth,zeit: string;
+ i: integer;
+begin
+ s:=buff;
+ buff:='';
+ meth:=extract('method',S);
+ if meth = 'getMastNo' then
+ begin
+ setlength(Anzeige,0);
+ s:=extract('result',s);
+ setlength(mastnr,strtoint(extract('stopcount',s)));
+ for i:=0 to length(mastnr)-1 do
+ begin
+ mastnr[i]:=strtoint(extract('stopno',extract('stop',s)));
+ delete(s,1,pos('</stop>',s));
+ end;
+ Starttimer.Tag:=1;
+ Starttimer.enabled:=true;
+ exit;
+ end;
+ if meth='' then
+ begin
+ s:=extract('AZBNachricht',s);
+ while pos('<AZBFahrplanlage',s)>0 do
+ begin
+ t:=extract('AZBFahrplanlage',s,zeit);
+ delete(s,1,pos('</AZBFahrplanlage>',s)+length('</AZBFahrplanlage>')-1);
+ setlength(Anzeige,length(Anzeige)+1);
+ meth:=extract('AZBID',t);
+ delete(meth,1,length(meth)-4);
+ Anzeige[length(Anzeige)-1].HaltestellenId:=strtoint(meth);
+ Anzeige[length(Anzeige)-1].Linie:=extract('LinienText',t);
+ Anzeige[length(Anzeige)-1].Ziel:=extract('ZielHst',t);
+ Anzeige[length(Anzeige)-1].Richtung:=extract('RichtungsText',t);
+ Anzeige[length(Anzeige)-1].sAn:=extract_time(extract('AnkunftszeitAZBPlan',t));
+ Anzeige[length(Anzeige)-1].iAn:=extract_time(extract('AnkunftszeitAZBPrognose',t));
+ Anzeige[length(Anzeige)-1].sAb:=extract_time(extract('AbfahrtszeitAZBPlan',t));
+ Anzeige[length(Anzeige)-1].iAb:=extract_time(extract('AbfahrtszeitAZBPrognose',t));
+ end;
+ Starttimer.Enabled:=true;
+ exit;
+ end;
+ Memo1.lines.add(meth);
+ Memo1.lines.add(S);
+end;
+
+function TForm1.LHTTPClientComponent1Input(ASocket: TLHTTPClientSocket;
+ ABuffer: pchar; ASize: integer): integer;
+begin
+ buff:=buff+copy(ABuffer,1,ASize);
+ result:=ASize;
+end;
+
+procedure TForm1.StarttimerTimer(Sender: TObject);
+var I: Integer;
+ Hinweis: string;
+begin
+ Starttimer.enabled:=false;
+ if Starttimer.tag = -3 then begin
+ Form1.visible:=false;
+ Starttimer.tag:=-1;
+ parseOptionFile;
+ end;
+ if Starttimer.tag = -1 then begin
+ Station_waehlen;
+ exit
+ end;
+ if Starttimer.Tag = 0 then begin
+ Starttimer.Tag := -1;
+ Form1.Visible:=false;
+ exit;
+ end;
+ if Starttimer.Tag >= 1 then begin
+ Zeiten_holen;
+ if Starttimer.Tag>=length(mastnr) then Starttimer.Tag := -2
+ else Starttimer.Tag := Starttimer.Tag + 1;
+ exit;
+ end;
+ if Starttimer.Tag = -2 then begin
+ Memo1.lines.clear;
+ Hinweis:='';
+ for I:=0 to length(Anzeige)-1 do begin
+ if (length(Filter_s)<=0) or
+ (Filter_s[0].regel_erfuellt(Anzeige[I],2)) then
+ Hinweis:=Hinweis+#$0D#$0A+Anzeige[I].Linie+'('+inttostr(Anzeige[I].HaltestellenID)+'): '+timetostr(Anzeige[I].iAb);
+ if (length(Filter_s)<=0) or
+ (Filter_s[min(1,length(Filter_s)-1)].regel_erfuellt(Anzeige[I],1)) then begin
+ Memo1.lines.add(inttostr(Anzeige[I].HaltestellenId)+': <'+
+ Anzeige[I].Linie+'> '''+
+ Anzeige[I].Richtung+''' nach '''+
+ Anzeige[I].Ziel+''': '+
+ timetostr(Anzeige[I].iAn)+' ('+
+ timetostr(Anzeige[I].sAn)+') -> '+
+ timetostr(Anzeige[I].iAb)+' ('+
+ timetostr(Anzeige[I].sAb)+')');
+ end;
+ end;
+ if length(Hinweis)>0 then begin
+ delete(Hinweis,1,2);
+ TrayIcon1.Hint:=Hinweis;
+ TrayIcon1.Icon.LoadFromFile(extractfilepath(application.exename)+'bus_da.ico');
+ end
+ else begin
+ TrayIcon1.Hint:='Busauskunft - kein Bus in Sicht!'#0;
+ TrayIcon1.Icon.LoadFromFile(extractfilepath(application.exename)+'normal.ico');
+ end;
+ exit;
+ end;
+end;
+
+procedure TForm1.Timer1Timer(Sender: TObject);
+begin
+ starttimer.Tag:=-1;
+ starttimer.enabled:=true;
+end;
+
+end.
+