Модуль "ObexFM" (часть 10) - GetFolderContent
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
от 07 декабря 2007 г.
procedure TfrmOBEXFM.GetFolderContent; var s, x: string; fname, fsize, ftime, ftype: String; i, n: Integer; t: TListItem; sss: string; zs: integer; frmProgress: TfrmProgress; ti: TIcon; sb: string; si: integer;
begin
//ImageList1.Clear;
//ListView1.SmallImages:= ImageList1;
Logger('GetFolderContent...');
frmProgress:= TfrmProgress.Create(self);
if iOBEXType = 0 then for i:=0 to 37 do Buffer[i]:=byte(GetPathCmd[i])
else for i:=0 to 37 do Buffer[i]:=byte(GetPathCmd2[i]);
XML_Data.Clear;
BufLen:=38;
sb:= '';
for si:= 0 to BufLen-1 do sb:= sb + IntToHex(Buffer[si], 2) + ' ';
Logger('=== OBEX_SendCommand (write): ' + sb);
OBEX_SendCommand(0, frmProgress);
// Parse XML folder content to ListView list
// This is simple parser, cos Motorola's folder listing format is stable.
s:=XML_Data.Text;
ListView1.Items.BeginUpdate;
ListView1.Items.Clear;
//ListView1.BeginUpdate;
i:=Pos('parent-folder',s);
if i<1 then exit;
Delete(s,1,i+Length('parent-folder'));
i:=Pos(' name',s); // search "folder name" & "file name" together
while i>0 do
begin
fname:=''; fsize:=''; ftime:=''; ftype:='';
// Parse file name
i:=pos('"',s);
Delete(s,1,i);
i:=pos('"',s);
fname:=Utf8ToAnsi(copy(s,1,i-1));
n:=Pos(''',fname);
while n>0 do begin
Delete(fname,n,6);
Insert('''',fname,n);
n:=Pos(''',fname);
end;
n:=Pos('&',fname);
while n>0 do begin
Delete(fname,n,5);
Insert('''',fname,n);
n:=Pos('&',fname);
end;
t:= ListView1.Items.Add;
t.Caption:=fname;
Delete(s,1,i);
// Parse file size
i:=pos('"',s);
Delete(s,1,i);
i:=pos('"',s);
fsize:=copy(s,1,i-1);
sss:= fsize;
zs:= StrToInt(sss);
if zs < 1000 then begin
if zs > 0 then sss:= inttostr(zs) + ' b'
else sss:= '';
end
else if zs < 1000*1000 then sss:= inttostr(Round(zs/1024)) + ' Kb'
else sss:= inttostr(Round(zs/(1024*1024))) + ' Mb';
t.SubItems.Append(sss);
t.Data:= Pointer(zs);
Delete(s,1,i);
// Parse file type
i:=pos('"',s);
Delete(s,1,i);
i:=pos('"',s);
ftype:=copy(s,1,i-1);
//ftype:= Ex
ftype:= RemoveCharacterFromString(ftype, #13);
ftype:= RemoveCharacterFromString(ftype, #10);
///////
t.ImageIndex:= 15;
//t:= Item.SubItems[2];
if ansilowercase(ftype) = 'audio/mp3' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'application/audio-playlist' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'audio/mid' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'audio/wav' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'audio/amr' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'audio/midi' then t.ImageIndex:= 18;
if ansilowercase(ftype) = 'image/jpg' then t.ImageIndex:= 17;
if ansilowercase(ftype) = 'image/jpeg' then t.ImageIndex:= 17;
if ansilowercase(ftype) = 'image/gif' then t.ImageIndex:= 16;
if ansilowercase(ftype) = 'image/ems.userdefined.animation' then t.ImageIndex:= 16;
if ansilowercase(ftype) = 'image/ems.userdefined.picture' then t.ImageIndex:= 16;
if ansilowercase(ftype) = 'video/3gp' then t.ImageIndex:= 19;
if ansilowercase(ftype) = 'video/avi' then t.ImageIndex:= 19;
if ansilowercase(ftype) = 'video/mp4' then t.ImageIndex:= 19;
if ansilowercase(ftype) = 'image/jar' then t.ImageIndex:= 20;
if ansilowercase(ftype) = 'folder' then t.ImageIndex:= 0;
if (ansilowercase(ftype) = 'folder') and (ansilowercase(fname) = 'audio')
then t.ImageIndex:= 8;
if (ansilowercase(ftype) = 'folder') and (ansilowercase(fname) = 'video')
then t.ImageIndex:= 2;
if (ansilowercase(ftype) = 'folder') and (ansilowercase(fname) = 'picture')
then t.ImageIndex:= 4;
/////
//t.ImageIndex:=img_Unknown;
//if ftype='image/jpeg' then t.ImageIndex:=img_JPEG;
//if ftype='image/gif' then t.ImageIndex:=img_GIF;
//if ftype='image/ems.userdefined.animation' then t.ImageIndex:=img_GIF;
//if ftype='image/ems.userdefined.picture' then t.ImageIndex:=img_GIF;
//if ftype='video/3gpp' then t.ImageIndex:=img_3GPP;
//if ftype='video/mp4' then t.ImageIndex:=img_3GPP;
//if ftype='audio/mp3' then t.ImageIndex:=img_MP3;
//if ftype='audio/mid' then t.ImageIndex:=img_MP3;
//if ftype='audio/midi' then t.ImageIndex:=img_MP3;
//if ftype='audio/amr' then t.ImageIndex:=img_3GPP;
//if ftype='audio/bas' then t.ImageIndex:=img_3GPP;
//if ftype='audio/imelody' then t.ImageIndex:=img_3GPP;
//if ftype='application/audio-playlist' then t.ImageIndex:=img_MP3;
//if ftype='folder' then t.ImageIndex:=img_Folder;
{
ti:=TIcon.Create;
ti.Handle:= Form1.GetSHIcon(fname, ftype);
t.ImageIndex:= ImageList1.AddIcon(ti);
ti.Free;
}
Delete(s,1,i);
// Parse file time
i:=pos('"',s);
Delete(s,1,i);
i:=pos('"',s);
x:=copy(s,1,i-1); //typ = "YYYYMMDD"+"T"+"HHMMSS"+"Z"
ftime:=copy(x,7,2)+'.'+copy(x,5,2)+'.'+copy(x,1,4)+' '+
copy(x,10,2)+':'+copy(x,12,2)+':'+copy(x,14,2);
t.SubItems.Append(ftime);
Delete(s,1,i);
t.SubItems.Append(ftype);
// NOTE: Skip file permissions - continue up to tag's end
i:=pos('/>',s);
Delete(s,1,i);
i:=pos('name',s);
end;
ListView1.Items.EndUpdate;
frmProgress.Free;
end;
Еще записи по теме
- Модуль "Информация АТ" (часть 2) - RefreshInfo
- Модуль "Мое меню" (часть 20) - DeleteWebShortCuts
- Модуль "SeemEditor" (часть 9) - asgP2K_SeemEditorKeyPress
- Модуль "ObexFM" (часть 3) - OBEX_OpenPort
- Модуль "P2KApi" (часть 36) - TP2KAPI.File_Delete
- Модуль "Справочник" (часть 14) - RzTreeView1Change
- Модуль "Информация АТ" (часть 1) - определение переменных и типов данных
