horse icon indicating copy to clipboard operation
horse copied to clipboard

Nova unit Horse.Mime

Open antoniojmsjr opened this issue 1 year ago • 2 comments

Criado a unit Horse.Mime que implementa a classe THorseMimeTypes que retorna o tipo MIME associado à extensão de um arquivo.

Métodos

  • GetFileType: Retorna o tipo MIME de um arquivo passado por parâmetro.
  • GetExtType: Retorna o tipo MIME de uma extensão de arquivo passado por parâmetro.

Teste

  • Lazarus

  • Delphi XE7

  • Delphi Rio 10.3

  • MemoryLeaks Verificado: SIM

  • Testes de stress: SIM

antoniojmsjr avatar Jul 11 '22 02:07 antoniojmsjr

Refatoração da unit Horse.Core.Files

Refatoração da unit Horse.Core.Files para utilização da classe THorseMimeTypes da unit Horse.Mime.

Teste

  • Lazarus

  • Delphi XE7

  • Delphi Rio 10.3

  • MemoryLeaks Verificado: SIM

  • Testes de stress: SIM

antoniojmsjr avatar Jul 11 '22 02:07 antoniojmsjr

Refatoração da unit Horse.Response para utilização da classe THorseMimeTypes da unit Horse.Mime.

Refatoração dos métodos

  • SendFile
  • Download
  • Render

Teste

  • Lazarus

  • Delphi XE7

  • Delphi Rio 10.3

  • MemoryLeaks Verificado: SIM

  • Testes de stress: SIM

antoniojmsjr avatar Jul 11 '22 03:07 antoniojmsjr

Qual objetivo de se usar o TCriticalSection la dentro do Horse.Mime ?

gabrielbaltazar avatar Oct 19 '22 13:10 gabrielbaltazar

Qual objetivo de se usar o TCriticalSection la dentro do Horse.Mime ?

O uso do TCriticalSession é para evitar o acesso ao recurso compartilhado "FInstance" evitando erros imprevisíveis que podem ser gerados pelos multiplos acessos via thread.

O TCriticalSession só é usado na criação do "FInstance" que é um ponto crítico podendo gerar erro se acessado ao mesmo tempo e foi a solução encontrada que pode ser utilizada comumente com Lazarus.

class function THorseMimeTypesExt.GetDefault: THorseMimeTypesExt;
begin
  if FInstance = nil then
  begin
    FLock.Enter;
    try
      if FInstance = nil then
      begin
        FInstance := THorseMimeTypesExt.Create;
        FInstance.InitializeFileType;
      end;
    finally
      FLock.Leave;
    end;
  end;
  Result := FInstance;
end;

antoniojmsjr avatar Oct 19 '22 13:10 antoniojmsjr