Модуль "ObexFM" (часть 10) - GetFolderContent

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 155
последняя версия: 3.0.9 build 961 beta
от 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('&apos;',fname);
      while n>0 do begin
                     Delete(fname,n,6);
                     Insert('''',fname,n);
                     n:=Pos('&apos;',fname);
                   end;
      n:=Pos('&amp;',fname);
      while n>0 do begin
                     Delete(fname,n,5);
                     Insert('''',fname,n);
                     n:=Pos('&amp;',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;
Rambler's Top100