• R/O
  • SSH
  • HTTPS

id3v2editorplus: Commit


Commit MetaInfo

Revision32 (tree)
Zeit2019-09-26 06:56:34
Autorderekwildstar

Log Message

- Início da implmentação do adicionador de SYLT
- Salvamento de SYLT concluído
- Exclusão de SYLT concluída
- Contém erros

Ändern Zusammenfassung

Diff

--- trunk/V2/src/UClassesETipos.pas (revision 31)
+++ trunk/V2/src/UClassesETipos.pas (revision 32)
@@ -78,9 +78,13 @@
7878 constructor Create(ACollection: TCollection); override;
7979 destructor Destroy; override;
8080
81- procedure AdicionarConteudo(ABytes: TBytes; AIndiceInicial: Word);
81+ // Adiciona a FConteudo uma letra a partir do MP3. Usado quando se carrega
82+ // um ID3v2 a partir do MP3, quando o arquivo está sendo carregado
83+ procedure AdicionarConteudo(ABytes: TBytes; AIndiceInicial: Word); overload;
84+ // Adiciona a FConteudo uma letra a partir de um arquivo de letra (.sylt).
85+ // Usando quando se adiciona uma nova letra ao ID3v2 do MP3 carregado
86+ procedure AdicionarConteudo(AArquivo: TFileName); overload;
8287
83-
8488 property CodificacaoDoTexto: Byte read FCodificacaoDoTexto write FCodificacaoDoTexto;
8589 property Idioma: TLanguageID read FIdioma write FIdioma;
8690 property FormatoDoRotuloDeTempo: Byte read FFormatoDoRotuloDeTempo write FFormatoDoRotuloDeTempo;
@@ -130,11 +134,13 @@
130134 destructor Destroy; override;
131135
132136 procedure Limpar;
137+ procedure ProximaSYLT(AUltima: Boolean = False);
138+ function ExcluirAtual: Boolean;
139+ function AdicionarSYLT(ACaixaDeDialogoParaAbrirLetra: TOpenDialog): Boolean;
140+ procedure SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
133141 function Add: TSYLTItem; overload;
134142 procedure ConfirmarInformacoesDaLetra;
135143 procedure SYLTAnterior(APrimeira: Boolean = False);
136- procedure ProximaSYLT(AUltima: Boolean = False);
137- procedure SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
138144 procedure ExibirVerso(APosicao: Cardinal);
139145 procedure IniciarThread;
140146 procedure FinalizarThread;
@@ -564,6 +570,35 @@
564570 end;
565571 end;
566572
573+procedure TSYLTItem.AdicionarConteudo(AArquivo: TFileName);
574+var
575+ Header: array [0..9] of Byte;
576+ Verso: TSYLTVerso;
577+begin
578+ with TFileStream.Create(AArquivo,fmOpenRead or fmShareDenyWrite) do
579+ try
580+ Position := 0;
581+
582+ Read(Header,10);
583+
584+ // Valide o header aqui!
585+
586+ while Position < Size do
587+ begin
588+ Read(Verso.Tempo,SizeOf(Cardinal));
589+ a partir daqui, leia dois em dois bytes até que ache dois zeros, indicando que todos os bytes unicode foram lidos
590+
591+// Read(PWideChar(Verso.Texto)^,10);
592+
593+
594+ end;
595+
596+
597+ finally
598+ Free;
599+ end;
600+end;
601+
567602 constructor TSYLTItem.Create(ACollection: TCollection);
568603 begin
569604 inherited;
@@ -593,6 +628,16 @@
593628 Result := TSYLTItem(inherited Add);
594629 end;
595630
631+function TSYLT.AdicionarSYLT(ACaixaDeDialogoParaAbrirLetra: TOpenDialog): Boolean;
632+begin
633+ Result := ACaixaDeDialogoParaAbrirLetra.Execute;
634+ if Result then
635+ begin
636+ Self.Add.AdicionarConteudo(ACaixaDeDialogoParaAbrirLetra.FileName);
637+ ProximaSYLT(True);
638+ end;
639+end;
640+
596641 procedure TSYLT.AtualizarEstadoDosComponentesDeSaida;
597642 begin
598643 FProximaSYLT.Enabled := (Count > 0) and (FIndice < Pred(Count));
@@ -748,6 +793,41 @@
748793 AtualizarEstadoDosComponentesDeSaida;
749794 end;
750795
796+function TSYLT.ExcluirAtual: Boolean;
797+begin
798+ Result := False;
799+
800+ if FIndice = -1 then
801+ Exit;
802+
803+ Result := Application.MessageBox('Deseja mesmo excluir esta letra?','Tem certeza?',MB_ICONQUESTION or MB_YESNO) = IDYES;
804+
805+ if not Result then
806+ Exit;
807+
808+ Delete(FIndice);
809+
810+ // Caso tenhamos excluído uma letra que não tenha sido a última letra da
811+ // lista basta recarregar o índice atual. Isso vai, invariavelmente, carregar
812+ // a letra que estava após a letra excluída
813+ if FIndice < Count then
814+ ExibirLetra(FIndice)
815+ // Caso contrário, se tivermos excluído a última letra
816+ else
817+ begin
818+ // Ajusta o indice da última letra
819+ Dec(FIndice);
820+
821+ // Caso ainda existam letras na lista, precisamos carregar a última letra
822+ if Count > 0 then
823+ ExibirLetra(FIndice)
824+ // Por fim, se o fluxo chega aqui é porque a lista de letras está vazia,
825+ // neste caso apenas ajustamos a tela para refletir essa nova realidade
826+ else
827+ Limpar;
828+ end;
829+end;
830+
751831 procedure TSYLT.ProximaSYLT(AUltima: Boolean = False);
752832 begin
753833 if (Count = 0) or (Succ(FIndice) = Count) then
@@ -766,15 +846,20 @@
766846
767847 procedure TSYLT.SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
768848 begin
769- ShowMessage('Implemente Salvar Letra Como');
770-// if ACaixaDeDialogoParaSalvarLetra.Execute then
771-// with TStringList.Create do
772-// try
773-// Text := Items[FIndice].Texto;
774-// SaveToFile(ACaixaDeDialogoParaSalvarLetra.FileName);
775-// finally
776-// Free;
777-// end;
849+ if ACaixaDeDialogoParaSalvarLetra.Execute then
850+ with TFileStream.Create(ACaixaDeDialogoParaSalvarLetra.FileName,fmCreate or fmShareDenyWrite) do
851+ try
852+ var Header: AnsiString := 'Iv2EP!SYLT';
853+ Write(PAnsiChar(Header)^,Length(Header));
854+
855+ for var Verso: TSYLTVerso in Items[FIndice].Conteudo do
856+ begin
857+ Write(Verso.Tempo,SizeOf(Cardinal));
858+ Write(PWideChar(Verso.Texto)^, (Length(Verso.Texto) + 1) * 2);
859+ end;
860+ finally
861+ Free;
862+ end;
778863 end;
779864
780865 procedure TSYLT.SetItem(AIndex: Integer; const AValue: TSYLTItem);
--- trunk/V2/src/UDAMOPrincipal.pas (revision 31)
+++ trunk/V2/src/UDAMOPrincipal.pas (revision 32)
@@ -56,6 +56,7 @@
5656 ACTNSYLTAnterior: TAction;
5757 ACTNProximaSYLT: TAction;
5858 SADISYLT: TSaveDialog;
59+ OPDISYLT: TOpenDialog;
5960 procedure TIMELetreiroTimer(Sender: TObject);
6061 procedure DataModuleCreate(Sender: TObject);
6162 procedure DataModuleDestroy(Sender: TObject);
@@ -229,8 +230,8 @@
229230
230231 procedure TDAMOPrincipal.RemoverSYLT;
231232 begin
232-// if FSYLT.ExcluirAtual then
233-// DefinirStatusDeModificado(cId3v2);
233+ if FSYLT.ExcluirAtual then
234+ DefinirStatusDeModificado(cId3v2);
234235 end;
235236
236237 function TDAMOPrincipal.ReproducaoConcluida: Boolean;
@@ -865,8 +866,8 @@
865866
866867 procedure TDAMOPrincipal.AdicionarSYLT;
867868 begin
868-// if FSYLT.AdicionarSYLT(OPDISYLT) then
869-// DefinirStatusDeModificado(cId3v2);
869+ if FSYLT.AdicionarSYLT(OPDISYLT) then
870+ DefinirStatusDeModificado(cId3v2);
870871 end;
871872
872873 procedure TDAMOPrincipal.AtualizarBotoesDoReprodutor;
Show on old repository browser