You've already forked lazarus-ccr
compile with 2.5.1 and lazarus trunk,
reading unicode tags and filenames, show/hide app window with single click tray icon, create album cover if not exists, several fixes when there is just one song in collection, artist tree icons, handling of track numbers in n[/m] format, show path of current file (in playlist and title list), log output was corrupt due the use of crt unit, etc. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1761 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -296,7 +296,7 @@ Begin
|
||||
End;
|
||||
Until FindNext(mp3search)<>0;
|
||||
Findclose(mp3search);
|
||||
BubbleSort(files);
|
||||
BubbleSort(TStrings(files));
|
||||
for i := 1 to files.Count do
|
||||
lstRemove.Items.Add(files[i-1]);
|
||||
|
||||
@ -315,7 +315,7 @@ Begin
|
||||
end;
|
||||
Until FindNext(dirsearch)<>0;
|
||||
Findclose(dirsearch);
|
||||
BubbleSort(folders);
|
||||
BubbleSort(TStrings(folders));
|
||||
for i := 1 to folders.Count do
|
||||
lstRemove.Items.Add(folders[i-1]);
|
||||
End;
|
||||
|
@ -22,7 +22,7 @@ Unit config;
|
||||
Interface
|
||||
|
||||
Uses
|
||||
Classes, SysUtils, xmlcfg, gettext, playerclass;
|
||||
Classes, SysUtils, xmlcfg, gettext, debug, playerclass;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
{ TConfigObject }
|
||||
@ -67,6 +67,9 @@ Type
|
||||
|
||||
Function ReadConfig: boolean;
|
||||
Function FlushConfig: boolean;
|
||||
function CheckCoverPath: boolean;
|
||||
function GetCoverPath(AFileName: string): string;
|
||||
function GetCoverDir: string;
|
||||
Procedure Clear;
|
||||
Private
|
||||
FConfigPath: string;
|
||||
@ -244,6 +247,31 @@ Begin
|
||||
End;
|
||||
End;
|
||||
|
||||
function TConfigObject.CheckCoverPath: boolean;
|
||||
var
|
||||
aPath: string;
|
||||
begin
|
||||
aPath := GetCoverDir;
|
||||
result := DirectoryExists(aPath);
|
||||
if not result then begin
|
||||
result := ForceDirectories(aPath);
|
||||
if not result then
|
||||
DebugOutLn('WARNING: unable to force covercache directory', 1);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TConfigObject.GetCoverPath(AFileName: string): string;
|
||||
begin
|
||||
result := GetCoverDir;
|
||||
if AFilename<>'' then
|
||||
result := result + DirectorySeparator + AFilename;
|
||||
end;
|
||||
|
||||
function TConfigObject.GetCoverDir: string;
|
||||
begin
|
||||
result := IncludeTrailingPathDelimiter(CactusConfig.ConfigPrefix) + 'covercache';
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TConfigObject.Clear;
|
||||
|
@ -12,7 +12,7 @@ object dirwin: Tdirwin
|
||||
OnCreate = FormCreate
|
||||
Position = poMainFormCenter
|
||||
ShowInTaskBar = stNever
|
||||
LCLVersion = '0.9.29'
|
||||
LCLVersion = '0.9.31'
|
||||
object add: TButton
|
||||
Left = 383
|
||||
Height = 25
|
||||
@ -75,11 +75,9 @@ object dirwin: Tdirwin
|
||||
Width = 364
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
ItemHeight = 0
|
||||
OnClick = dirlistviewClick
|
||||
TabOrder = 5
|
||||
end
|
||||
object SelectDirectoryDialog1: TSelectDirectoryDialog
|
||||
Title = 'Select Directory'
|
||||
FilterIndex = 0
|
||||
end
|
||||
end
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei }
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('Tdirwin','FORMDATA',[
|
||||
'TPF0'#7'Tdirwin'#6'dirwin'#4'Left'#3'^'#1#6'Height'#3#19#1#3'Top'#3'#'#1#5'W'
|
||||
@ -6,7 +6,7 @@ LazarusResources.Add('Tdirwin','FORMDATA',[
|
||||
+#10'biMinimize'#0#7'Caption'#6#11'Directories'#12'ClientHeight'#3#19#1#11'Cl'
|
||||
+'ientWidth'#3#215#1#9'FormStyle'#7#11'fsStayOnTop'#8'OnCreate'#7#10'FormCrea'
|
||||
+'te'#8'Position'#7#16'poMainFormCenter'#13'ShowInTaskBar'#7#7'stNever'#10'LC'
|
||||
+'LVersion'#6#6'0.9.29'#0#7'TButton'#3'add'#4'Left'#3#127#1#6'Height'#2#25#3
|
||||
+'LVersion'#6#6'0.9.31'#0#7'TButton'#3'add'#4'Left'#3#127#1#6'Height'#2#25#3
|
||||
+'Top'#2#16#5'Width'#2'L'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacin'
|
||||
+'g.InnerBorder'#2#4#7'Caption'#6#3'Add'#7'OnClick'#7#8'addClick'#8'TabOrder'
|
||||
+#2#0#0#0#7'TButton'#9'removebut'#4'Left'#3#128#1#6'Height'#2#25#3'Top'#2'0'#5
|
||||
@ -23,7 +23,6 @@ LazarusResources.Add('Tdirwin','FORMDATA',[
|
||||
+#4#7'Caption'#6#4'Back'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#4#0#0#8
|
||||
+'TListBox'#11'dirlistview'#4'Left'#2#8#6'Height'#3#0#1#3'Top'#2#8#5'Width'#3
|
||||
+'l'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#10'ItemHeigh'
|
||||
+'t'#2#0#7'OnClick'#7#16'dirlistviewClick'#8'TabOrder'#2#5#0#0#22'TSelectDire'
|
||||
+'ctoryDialog'#22'SelectDirectoryDialog1'#5'Title'#6#16'Select Directory'#11
|
||||
+'FilterIndex'#2#0#0#0#0
|
||||
+'t'#2#0#8'TabOrder'#2#5#0#0#22'TSelectDirectoryDialog'#22'SelectDirectoryDia'
|
||||
+'log1'#11'FilterIndex'#2#0#0#0#0
|
||||
]);
|
||||
|
@ -39,8 +39,6 @@ Type
|
||||
rescanall: TButton;
|
||||
SelectDirectoryDialog1: TSelectDirectoryDialog;
|
||||
Procedure Button1Click(Sender: TObject);
|
||||
Procedure Button3Click(Sender: TObject);
|
||||
Procedure dirlistviewClick(Sender: TObject);
|
||||
Procedure FormCreate(Sender: TObject);
|
||||
Procedure addClick(Sender: TObject);
|
||||
Procedure removeClick(Sender: TObject);
|
||||
@ -100,7 +98,7 @@ Begin
|
||||
MediaCollection.add_directory(SelectDirectoryDialog1.FileName);
|
||||
dirlistview.Items.Add(SelectDirectoryDialog1.FileName);
|
||||
|
||||
If MediaCollection.ItemCount>1 Then
|
||||
If MediaCollection.ItemCount>0 Then
|
||||
Begin
|
||||
Main.ArtistTree.Selected := Nil;
|
||||
main.update_artist_view;
|
||||
@ -149,14 +147,13 @@ Var rescandir: string;
|
||||
i, n: integer;
|
||||
Begin
|
||||
Main.clear_listClick(nil);
|
||||
|
||||
For n:= 0 To dirlistview.Items.Count-1 Do
|
||||
Begin
|
||||
If dirlistview.Selected[n] Then
|
||||
Begin
|
||||
rescandir := dirlistview.Items[n];
|
||||
rescandir := ExcludeTrailingPathDelimiter(dirlistview.Items[n]);
|
||||
dirlistview.show;
|
||||
If rescandir[length(rescandir)]=DirectorySeparator Then delete(rescandir,length(rescandir)
|
||||
, 1);
|
||||
i := 0;
|
||||
Repeat
|
||||
Begin
|
||||
@ -175,9 +172,10 @@ Begin
|
||||
update_title_view;
|
||||
Application.ProcessMessages;
|
||||
MediaCollection.add_directory(rescandir);
|
||||
|
||||
End;
|
||||
|
||||
If MediaCollection.ItemCount>1 Then
|
||||
If MediaCollection.ItemCount>0 Then
|
||||
Begin
|
||||
Main.ArtistTree.Selected := Nil;
|
||||
main.update_artist_view;
|
||||
@ -208,16 +206,6 @@ End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure Tdirwin.Button3Click(Sender: TObject);
|
||||
Begin
|
||||
|
||||
End;
|
||||
|
||||
Procedure Tdirwin.dirlistviewClick(Sender: TObject);
|
||||
Begin
|
||||
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
initialization
|
||||
|
@ -17,7 +17,7 @@ object EditID3: TEditID3
|
||||
OnHide = FormHide
|
||||
Position = poMainFormCenter
|
||||
ShowInTaskBar = stNever
|
||||
LCLVersion = '0.9.29'
|
||||
LCLVersion = '0.9.31'
|
||||
object metacontrol: TPageControl
|
||||
Left = 8
|
||||
Height = 402
|
||||
@ -27,16 +27,14 @@ object EditID3: TEditID3
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
TabIndex = 0
|
||||
TabOrder = 0
|
||||
OnChange = metacontrolChange
|
||||
OnPageChanged = metacontrolChange
|
||||
object metatab: TTabSheet
|
||||
Caption = 'Meta-Info'
|
||||
ClientHeight = 371
|
||||
ClientWidth = 405
|
||||
object lblYear: TLabel
|
||||
Left = 118
|
||||
Left = 22
|
||||
Height = 14
|
||||
Top = 214
|
||||
Top = 256
|
||||
Width = 26
|
||||
Caption = 'Year'
|
||||
ParentColor = False
|
||||
@ -51,9 +49,9 @@ object EditID3: TEditID3
|
||||
end
|
||||
object AlbumCoverImg: TImage
|
||||
Left = 232
|
||||
Height = 146
|
||||
Height = 151
|
||||
Top = 214
|
||||
Width = 162
|
||||
Width = 160
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoSize = True
|
||||
Proportional = True
|
||||
@ -92,17 +90,17 @@ object EditID3: TEditID3
|
||||
ParentColor = False
|
||||
end
|
||||
object lblGenre: TLabel
|
||||
Left = 22
|
||||
Left = 20
|
||||
Height = 14
|
||||
Top = 252
|
||||
Top = 296
|
||||
Width = 36
|
||||
Caption = 'Genre'
|
||||
ParentColor = False
|
||||
end
|
||||
object lblComment: TLabel
|
||||
Left = 21
|
||||
Left = 22
|
||||
Height = 14
|
||||
Top = 282
|
||||
Top = 328
|
||||
Width = 56
|
||||
Caption = 'Comment'
|
||||
ParentColor = False
|
||||
@ -114,13 +112,13 @@ object EditID3: TEditID3
|
||||
Width = 241
|
||||
Caption = 'Tag to name'
|
||||
ClientHeight = 38
|
||||
ClientWidth = 237
|
||||
ClientWidth = 233
|
||||
TabOrder = 10
|
||||
object btnOptions: TButton
|
||||
Left = 125
|
||||
Height = 23
|
||||
Hint = '( %a/%a - %b - %n - %t )'
|
||||
Top = 11
|
||||
Top = 8
|
||||
Width = 105
|
||||
Anchors = [akLeft, akBottom]
|
||||
BorderSpacing.Around = 4
|
||||
@ -133,7 +131,7 @@ object EditID3: TEditID3
|
||||
object Button1: TButton
|
||||
Left = 15
|
||||
Height = 23
|
||||
Top = 11
|
||||
Top = 8
|
||||
Width = 105
|
||||
Anchors = [akLeft, akBottom]
|
||||
BorderSpacing.Around = 4
|
||||
@ -146,70 +144,70 @@ object EditID3: TEditID3
|
||||
end
|
||||
object artistedit1: TEdit
|
||||
Left = 66
|
||||
Height = 23
|
||||
Height = 21
|
||||
Top = 114
|
||||
Width = 328
|
||||
Width = 326
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = activateEMode
|
||||
TabOrder = 1
|
||||
end
|
||||
object titleedit1: TEdit
|
||||
Left = 67
|
||||
Height = 23
|
||||
Left = 66
|
||||
Height = 21
|
||||
Top = 146
|
||||
Width = 327
|
||||
Width = 326
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = activateEMode
|
||||
TabOrder = 2
|
||||
end
|
||||
object albumedit1: TEdit
|
||||
Left = 67
|
||||
Height = 23
|
||||
Left = 66
|
||||
Height = 21
|
||||
Top = 178
|
||||
Width = 328
|
||||
Width = 326
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = activateEMode
|
||||
TabOrder = 3
|
||||
end
|
||||
object yearEdit1: TEdit
|
||||
Left = 153
|
||||
Height = 23
|
||||
Top = 210
|
||||
Left = 152
|
||||
Height = 21
|
||||
Top = 256
|
||||
Width = 64
|
||||
MaxLength = 4
|
||||
TabOrder = 5
|
||||
end
|
||||
object commentedit1: TEdit
|
||||
Left = 22
|
||||
Height = 23
|
||||
Top = 298
|
||||
Left = 21
|
||||
Height = 21
|
||||
Top = 336
|
||||
Width = 194
|
||||
OnChange = activateEMode
|
||||
TabOrder = 6
|
||||
end
|
||||
object pathedit1: TEdit
|
||||
Left = 15
|
||||
Height = 23
|
||||
Height = 21
|
||||
Top = 82
|
||||
Width = 380
|
||||
Width = 378
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = activateEMode
|
||||
TabOrder = 0
|
||||
end
|
||||
object trackedit1: TEdit
|
||||
Left = 66
|
||||
Height = 23
|
||||
Height = 21
|
||||
Top = 210
|
||||
Width = 35
|
||||
Width = 60
|
||||
MaxLength = 4
|
||||
OnChange = activateEMode
|
||||
TabOrder = 4
|
||||
end
|
||||
object guessname1: TButton
|
||||
Left = 278
|
||||
Height = 25
|
||||
Height = 27
|
||||
Top = 31
|
||||
Width = 98
|
||||
Width = 100
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 4
|
||||
Caption = 'Tag from name'
|
||||
@ -217,9 +215,9 @@ object EditID3: TEditID3
|
||||
TabOrder = 7
|
||||
end
|
||||
object cmbYear: TComboBox
|
||||
Left = 151
|
||||
Height = 27
|
||||
Top = 210
|
||||
Left = 153
|
||||
Height = 29
|
||||
Top = 252
|
||||
Width = 64
|
||||
ItemHeight = 0
|
||||
MaxLength = 4
|
||||
@ -230,9 +228,9 @@ object EditID3: TEditID3
|
||||
Visible = False
|
||||
end
|
||||
object cmbComment: TComboBox
|
||||
Left = 19
|
||||
Height = 27
|
||||
Top = 298
|
||||
Left = 20
|
||||
Height = 29
|
||||
Top = 332
|
||||
Width = 196
|
||||
ItemHeight = 0
|
||||
OnChange = activateEMode
|
||||
@ -243,8 +241,8 @@ object EditID3: TEditID3
|
||||
end
|
||||
object GenreBox: TComboBox
|
||||
Left = 67
|
||||
Height = 27
|
||||
Top = 244
|
||||
Height = 29
|
||||
Top = 288
|
||||
Width = 150
|
||||
AutoComplete = True
|
||||
AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
|
||||
@ -260,7 +258,7 @@ object EditID3: TEditID3
|
||||
ClientWidth = 405
|
||||
object mtype: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 34
|
||||
Width = 62
|
||||
Caption = 'Mediatype:'
|
||||
@ -268,7 +266,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object bitrate: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 114
|
||||
Width = 81
|
||||
Caption = 'Bitrate: 0kbps'
|
||||
@ -276,7 +274,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object fsize: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 94
|
||||
Width = 77
|
||||
Caption = 'Filesize: 0 MB'
|
||||
@ -284,7 +282,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object srate: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 134
|
||||
Width = 71
|
||||
Caption = 'Samplerate:'
|
||||
@ -292,7 +290,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object plength: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 58
|
||||
Width = 43
|
||||
Caption = 'Length:'
|
||||
@ -300,7 +298,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object idlabel: TLabel
|
||||
Left = 41
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 178
|
||||
Width = 37
|
||||
Caption = 'Fileid: '
|
||||
@ -308,7 +306,7 @@ object EditID3: TEditID3
|
||||
end
|
||||
object indexlabel: TLabel
|
||||
Left = 40
|
||||
Height = 20
|
||||
Height = 14
|
||||
Top = 194
|
||||
Width = 53
|
||||
Caption = 'FileIndex:'
|
||||
|
@ -1,107 +0,0 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TEditID3','FORMDATA',[
|
||||
'TPF0'#8'TEditID3'#7'EditID3'#4'Left'#3#127#1#6'Height'#3#198#1#3'Top'#3#2#1#5
|
||||
+'Width'#3#176#1#18'HorzScrollBar.Page'#3#139#1#19'HorzScrollBar.Range'#3#127
|
||||
+#1#18'VertScrollBar.Page'#3#185#1#19'VertScrollBar.Range'#3#153#1#13'ActiveC'
|
||||
+'ontrol'#7#11'metacontrol'#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#12'Edi'
|
||||
+'t ID3 Tag'#12'ClientHeight'#3#198#1#11'ClientWidth'#3#176#1#7'OnClose'#7#12
|
||||
+'EditID3Close'#8'OnCreate'#7#10'FormCreate'#6'OnHide'#7#8'FormHide'#8'Positi'
|
||||
+'on'#7#16'poMainFormCenter'#13'ShowInTaskBar'#7#7'stNever'#10'LCLVersion'#6#6
|
||||
+'0.9.29'#0#12'TPageControl'#11'metacontrol'#4'Left'#2#8#6'Height'#3#146#1#3
|
||||
+'Top'#2#8#5'Width'#3#155#1#10'ActivePage'#7#7'metatab'#7'Anchors'#11#5'akTop'
|
||||
+#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabIndex'#2#0#8'TabOrder'#2#0#8'OnChan'
|
||||
+'ge'#7#17'metacontrolChange'#13'OnPageChanged'#7#17'metacontrolChange'#0#9'T'
|
||||
+'TabSheet'#7'metatab'#7'Caption'#6#9'Meta-Info'#12'ClientHeight'#3's'#1#11'C'
|
||||
+'lientWidth'#3#149#1#0#6'TLabel'#7'lblYear'#4'Left'#2'v'#6'Height'#2#14#3'To'
|
||||
+'p'#3#214#0#5'Width'#2#26#7'Caption'#6#4'Year'#11'ParentColor'#8#0#0#6'TLabe'
|
||||
+'l'#7'lblPath'#4'Left'#2#15#6'Height'#2#14#3'Top'#2'B'#5'Width'#2'>'#7'Capti'
|
||||
+'on'#6#12'Path to file'#11'ParentColor'#8#0#0#6'TImage'#13'AlbumCoverImg'#4
|
||||
+'Left'#3#232#0#6'Height'#3#146#0#3'Top'#3#214#0#5'Width'#3#162#0#7'Anchors'
|
||||
+#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'AutoSize'#9#12'Proportiona'
|
||||
+'l'#9#7'Stretch'#9#0#0#6'TLabel'#9'lblArtist'#4'Left'#2#22#6'Height'#2#14#3
|
||||
+'Top'#2'v'#5'Width'#2#31#7'Caption'#6#6'Artist'#11'ParentColor'#8#0#0#6'TLab'
|
||||
+'el'#8'lblTitle'#4'Left'#2#22#6'Height'#2#14#3'Top'#3#150#0#5'Width'#2#25#7
|
||||
+'Caption'#6#5'Title'#11'ParentColor'#8#0#0#6'TLabel'#8'lblAlbum'#4'Left'#2#22
|
||||
+#6'Height'#2#14#3'Top'#3#182#0#5'Width'#2'$'#7'Caption'#6#5'Album'#11'Parent'
|
||||
+'Color'#8#0#0#6'TLabel'#8'lblTrack'#4'Left'#2#22#6'Height'#2#14#3'Top'#3#214
|
||||
+#0#5'Width'#2#30#7'Caption'#6#5'Track'#11'ParentColor'#8#0#0#6'TLabel'#8'lbl'
|
||||
+'Genre'#4'Left'#2#22#6'Height'#2#14#3'Top'#3#252#0#5'Width'#2'$'#7'Caption'#6
|
||||
+#5'Genre'#11'ParentColor'#8#0#0#6'TLabel'#10'lblComment'#4'Left'#2#21#6'Heig'
|
||||
+'ht'#2#14#3'Top'#3#26#1#5'Width'#2'8'#7'Caption'#6#7'Comment'#11'ParentColor'
|
||||
+#8#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#15#6'Height'#2'5'#3'Top'#2#7#5'Wi'
|
||||
+'dth'#3#241#0#7'Caption'#6#11'Tag to name'#12'ClientHeight'#2'&'#11'ClientWi'
|
||||
+'dth'#3#237#0#8'TabOrder'#2#10#0#7'TButton'#10'btnOptions'#4'Left'#2'}'#6'He'
|
||||
+'ight'#2#23#4'Hint'#6#24'( %a/%a - %b - %n - %t )'#3'Top'#2#11#5'Width'#2'i'
|
||||
+#7'Anchors'#11#6'akLeft'#8'akBottom'#0#20'BorderSpacing.Around'#2#4#7'Captio'
|
||||
+'n'#6#7'Options'#7'OnClick'#7#15'btnOptionsClick'#14'ParentShowHint'#8#8'Sho'
|
||||
+'wHint'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Button1'#4'Left'#2#15#6'Height'#2
|
||||
+#23#3'Top'#2#11#5'Width'#2'i'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#20'Borde'
|
||||
+'rSpacing.Around'#2#4#7'Caption'#6#9'Apply now'#7'OnClick'#7#12'Button1Click'
|
||||
+#14'ParentShowHint'#8#8'ShowHint'#9#8'TabOrder'#2#1#0#0#0#5'TEdit'#11'artist'
|
||||
+'edit1'#4'Left'#2'B'#6'Height'#2#23#3'Top'#2'r'#5'Width'#3'H'#1#7'Anchors'#11
|
||||
+#5'akTop'#6'akLeft'#7'akRight'#0#8'OnChange'#7#13'activateEMode'#8'TabOrder'
|
||||
+#2#1#0#0#5'TEdit'#10'titleedit1'#4'Left'#2'C'#6'Height'#2#23#3'Top'#3#146#0#5
|
||||
+'Width'#3'G'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'OnChange'#7#13
|
||||
+'activateEMode'#8'TabOrder'#2#2#0#0#5'TEdit'#10'albumedit1'#4'Left'#2'C'#6'H'
|
||||
+'eight'#2#23#3'Top'#3#178#0#5'Width'#3'H'#1#7'Anchors'#11#5'akTop'#6'akLeft'
|
||||
+#7'akRight'#0#8'OnChange'#7#13'activateEMode'#8'TabOrder'#2#3#0#0#5'TEdit'#9
|
||||
+'yearEdit1'#4'Left'#3#153#0#6'Height'#2#23#3'Top'#3#210#0#5'Width'#2'@'#9'Ma'
|
||||
+'xLength'#2#4#8'TabOrder'#2#5#0#0#5'TEdit'#12'commentedit1'#4'Left'#2#22#6'H'
|
||||
+'eight'#2#23#3'Top'#3'*'#1#5'Width'#3#194#0#8'OnChange'#7#13'activateEMode'#8
|
||||
+'TabOrder'#2#6#0#0#5'TEdit'#9'pathedit1'#4'Left'#2#15#6'Height'#2#23#3'Top'#2
|
||||
+'R'#5'Width'#3'|'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'OnChange'
|
||||
+#7#13'activateEMode'#8'TabOrder'#2#0#0#0#5'TEdit'#10'trackedit1'#4'Left'#2'B'
|
||||
+#6'Height'#2#23#3'Top'#3#210#0#5'Width'#2'#'#9'MaxLength'#2#4#8'OnChange'#7
|
||||
+#13'activateEMode'#8'TabOrder'#2#4#0#0#7'TButton'#10'guessname1'#4'Left'#3#22
|
||||
+#1#6'Height'#2#25#3'Top'#2#31#5'Width'#2'b'#8'AutoSize'#9#20'BorderSpacing.A'
|
||||
+'round'#2#4#7'Caption'#6#13'Tag from name'#7'OnClick'#7#14'guessnameClick'#8
|
||||
+'TabOrder'#2#7#0#0#9'TComboBox'#7'cmbYear'#4'Left'#3#151#0#6'Height'#2#27#3
|
||||
+'Top'#3#210#0#5'Width'#2'@'#10'ItemHeight'#2#0#9'MaxLength'#2#4#8'OnChange'#7
|
||||
+#13'cmbYearChange'#6'Sorted'#9#8'TabOrder'#2#8#4'Text'#6#4'cmbY'#7'Visible'#8
|
||||
+#0#0#9'TComboBox'#10'cmbComment'#4'Left'#2#19#6'Height'#2#27#3'Top'#3'*'#1#5
|
||||
+'Width'#3#196#0#10'ItemHeight'#2#0#8'OnChange'#7#13'activateEMode'#6'Sorted'
|
||||
+#9#8'TabOrder'#2#9#4'Text'#6#10'cmbComment'#7'Visible'#8#0#0#9'TComboBox'#8
|
||||
+'GenreBox'#4'Left'#2'C'#6'Height'#2#27#3'Top'#3#244#0#5'Width'#3#150#0#12'Au'
|
||||
+'toComplete'#9#16'AutoCompleteText'#11#12'cbactEnabled'#22'cbactEndOfLineCom'
|
||||
+'plete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#0#8'OnChange'#7#13'activ'
|
||||
,'ateEMode'#6'Sorted'#9#8'TabOrder'#2#11#0#0#0#9'TTabSheet'#8'fileinfo'#7'Cap'
|
||||
+'tion'#6#9'File-Info'#12'ClientHeight'#3's'#1#11'ClientWidth'#3#149#1#0#6'TL'
|
||||
+'abel'#5'mtype'#4'Left'#2'('#6'Height'#2#20#3'Top'#2'"'#5'Width'#2'>'#7'Capt'
|
||||
+'ion'#6#10'Mediatype:'#11'ParentColor'#8#0#0#6'TLabel'#7'bitrate'#4'Left'#2
|
||||
+'('#6'Height'#2#20#3'Top'#2'r'#5'Width'#2'Q'#7'Caption'#6#14'Bitrate: 0kbps'
|
||||
+#11'ParentColor'#8#0#0#6'TLabel'#5'fsize'#4'Left'#2'('#6'Height'#2#20#3'Top'
|
||||
+#2'^'#5'Width'#2'M'#7'Caption'#6#14'Filesize: 0 MB'#11'ParentColor'#8#0#0#6
|
||||
+'TLabel'#5'srate'#4'Left'#2'('#6'Height'#2#20#3'Top'#3#134#0#5'Width'#2'G'#7
|
||||
+'Caption'#6#11'Samplerate:'#11'ParentColor'#8#0#0#6'TLabel'#7'plength'#4'Lef'
|
||||
+'t'#2'('#6'Height'#2#20#3'Top'#2':'#5'Width'#2'+'#7'Caption'#6#7'Length:'#11
|
||||
+'ParentColor'#8#0#0#6'TLabel'#7'idlabel'#4'Left'#2')'#6'Height'#2#20#3'Top'#3
|
||||
+#178#0#5'Width'#2'%'#7'Caption'#6#8'Fileid: '#11'ParentColor'#8#0#0#6'TLabel'
|
||||
+#10'indexlabel'#4'Left'#2'('#6'Height'#2#20#3'Top'#3#194#0#5'Width'#2'5'#7'C'
|
||||
+'aption'#6#10'FileIndex:'#11'ParentColor'#8#0#0#6'TImage'#8'Filelogo'#4'Left'
|
||||
+#3#230#0#6'Height'#2'd'#3'Top'#2'"'#5'Width'#2'd'#0#0#0#9'TTabSheet'#9'Strea'
|
||||
+'mTab'#7'Caption'#6#11'Stream-Info'#12'ClientHeight'#3's'#1#11'ClientWidth'#3
|
||||
+#149#1#0#6'TLabel'#6'Label1'#4'Left'#2#26#6'Height'#2#14#3'Top'#2#15#5'Width'
|
||||
+#2'"'#7'Caption'#6#4'Name'#5'Color'#7#12'clBackground'#11'ParentColor'#8#11
|
||||
+'Transparent'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#26#6'Height'#2#14#3'Top'#2
|
||||
+'O'#5'Width'#2'D'#7'Caption'#6#10'Stream URL'#5'Color'#7#12'clBackground'#11
|
||||
+'ParentColor'#8#11'Transparent'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#26#6'Hei'
|
||||
+'ght'#2#14#3'Top'#3#143#0#5'Width'#2'A'#7'Caption'#6#11'Description'#5'Color'
|
||||
+#7#12'clBackground'#11'ParentColor'#8#11'Transparent'#8#0#0#5'TEdit'#8'NameE'
|
||||
+'dit'#4'Left'#2'.'#6'Height'#2#23#3'Top'#2'!'#5'Width'#3'('#1#8'TabOrder'#2#0
|
||||
+#0#0#5'TEdit'#7'URLEdit'#4'Left'#2'.'#6'Height'#2#23#3'Top'#2'a'#5'Width'#3
|
||||
+'('#1#8'TabOrder'#2#1#0#0#5'TMemo'#8'DescEdit'#4'Left'#2'.'#6'Height'#2'B'#3
|
||||
+'Top'#3#167#0#5'Width'#3'('#1#8'TabOrder'#2#2#0#0#0#0#7'TButton'#10'cancelbu'
|
||||
+'t1'#4'Left'#3#24#1#6'Height'#2#25#3'Top'#3#162#1#5'Width'#2'K'#7'Anchors'#11
|
||||
+#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Cap'
|
||||
+'tion'#6#7'&Cancel'#7'OnClick'#7#14'cancelbutClick'#8'TabOrder'#2#1#0#0#7'TB'
|
||||
+'utton'#8'savebut1'#4'Left'#3#176#0#6'Height'#2#25#3'Top'#3#162#1#5'Width'#2
|
||||
+'K'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7
|
||||
+'Caption'#6#5'&Save'#7'Default'#9#7'OnClick'#7#12'savebutClick'#8'TabOrder'#2
|
||||
+#2#0#0#7'TButton'#8'btnReset'#4'Left'#2' '#6'Height'#2#25#3'Top'#3#162#1#5'W'
|
||||
+'idth'#2'K'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBord'
|
||||
+'er'#2#4#7'Caption'#6#6'&Reset'#7'OnClick'#7#13'btnResetClick'#8'TabOrder'#2
|
||||
+#3#0#0#6'TTimer'#16'PicDownloadTimer'#7'Enabled'#8#8'Interval'#2'd'#7'OnTime'
|
||||
+'r'#7#21'PicDownloadTimerTimer'#12'OnStartTimer'#7#26'PicDownloadTimerStartT'
|
||||
+'imer'#4'left'#3'X'#1#0#0#0
|
||||
]);
|
||||
|
@ -21,7 +21,7 @@ This Software is published under the GPL
|
||||
Interface
|
||||
|
||||
Uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, FileUtil,
|
||||
{ExtCtrls,} Buttons, ComCtrls, lcltype, mediacol, ExtCtrls, skin, last_fm, streamcol,
|
||||
settings, debug, mp3file;
|
||||
|
||||
@ -110,14 +110,12 @@ Type
|
||||
titleedit1: TEdit;
|
||||
yearEdit2: TEdit;
|
||||
yearEdit3: TEdit;
|
||||
procedure ac(Sender: TObject);
|
||||
procedure btnOptionsClick(Sender: TObject);
|
||||
Procedure Button1Click(Sender: TObject);
|
||||
Procedure btnResetClick(Sender: TObject);
|
||||
Procedure EditID3Close(Sender: TObject; Var CloseAction: TCloseAction);
|
||||
Procedure FormCreate(Sender: TObject);
|
||||
Procedure FormHide(Sender: TObject);
|
||||
procedure metacontrolChange(Sender: TObject);
|
||||
Procedure PicDownloadTimerStartTimer(Sender: TObject);
|
||||
Procedure PicDownloadTimerTimer(Sender: TObject);
|
||||
Procedure cancelbutClick(Sender: TObject);
|
||||
@ -145,6 +143,8 @@ Type
|
||||
ptrControls: array Of array Of ^TControl;
|
||||
// ..
|
||||
Procedure show_tags();
|
||||
function GetCoverPath: boolean;
|
||||
function GetTrack: string;
|
||||
Public
|
||||
{ public declarations }
|
||||
fileid: integer;
|
||||
@ -157,6 +157,8 @@ Var
|
||||
|
||||
Implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
Uses mainform, config, functions;
|
||||
{ TEditID3 }
|
||||
|
||||
@ -245,13 +247,13 @@ Begin
|
||||
MedFileObj.album := albumedit1.text;
|
||||
MedFileObj.year := yearedit1.text;
|
||||
MedFileObj.comment := commentedit1.text;
|
||||
MedFileObj.track := trackedit1.text;
|
||||
MedFileObj.track := GetTrack;
|
||||
if GenreBox.ItemIndex>=0 then MedFileObj.GenreID:= GenreIDtoCBIndex[0, GenreBox.ItemIndex];
|
||||
|
||||
MedFileObj.write_tag;
|
||||
|
||||
RenameFile(MedFileObj.path, editid3win.pathedit1.text);
|
||||
MedFileObj.path := editid3win.pathedit1.text;
|
||||
RenameFile(MedFileObj.path, UTF8ToSys(editid3win.pathedit1.text));
|
||||
MedFileObj.path := UTF8ToSys(editid3win.pathedit1.text);
|
||||
End;
|
||||
|
||||
|
||||
@ -390,11 +392,6 @@ Begin
|
||||
End;
|
||||
|
||||
|
||||
procedure TEditID3.metacontrolChange(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TEditID3.PicDownloadTimerStartTimer(Sender: TObject);
|
||||
@ -611,7 +608,7 @@ Begin
|
||||
// title(-mode) specific actions
|
||||
Else
|
||||
Begin
|
||||
pathedit1.text := MedFileObj.path;
|
||||
pathedit1.text := SysToUTF8(MedFileObj.path);
|
||||
//TODO: scroll TEdit to end of path
|
||||
titleedit1.text := MedFileObj.title;
|
||||
albumedit1.text := MedFileObj.album;
|
||||
@ -625,6 +622,37 @@ Begin
|
||||
bEModeActive := false;
|
||||
End;
|
||||
|
||||
function TEditID3.GetCoverPath: boolean;
|
||||
begin
|
||||
MedFileObj.CoverPath := CactusConfig.GetCoverPath(MedFileObj.GetCoverFile);
|
||||
result := FileExists(MedFileObj.CoverPath);
|
||||
end;
|
||||
|
||||
function TEditID3.GetTrack: string;
|
||||
var
|
||||
A,B: Integer;
|
||||
AStr,BStr: string;
|
||||
begin
|
||||
// track must conform to n[/m]
|
||||
AStr := Trim(trackedit1.text);
|
||||
A := pos('/', AStr);
|
||||
if A>0 then begin
|
||||
BStr := Trim(Copy(AStr, A+1, Length(AStr)));
|
||||
AStr := Trim(Copy(AStr, 1, A-1));
|
||||
B := StrToIntDef(BStr, -1);
|
||||
end else
|
||||
B := -1;
|
||||
A := StrToIntDef(AStr, -1);
|
||||
|
||||
if A<0 then
|
||||
result := ''
|
||||
else
|
||||
if B<0 then
|
||||
result := AStr
|
||||
else
|
||||
result := AStr + '/' + BStr;
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TEditID3.display_window(MedFile: TMediaFileClass; intMode: Integer);
|
||||
@ -673,13 +701,10 @@ Begin
|
||||
Then
|
||||
Begin
|
||||
DebugOutLn('########AlbumCover', 5);
|
||||
If MedFileObj.album<>''
|
||||
If (MedFileObj.album<>'') and CactusConfig.CheckCoverPath
|
||||
Then
|
||||
Begin
|
||||
MedFileObj.CoverPath := CactusConfig.ConfigPrefix+DirectorySeparator+'covercache'+
|
||||
DirectorySeparator+MedFileObj.artist+'_'+MedFileObj.album+
|
||||
'.jpeg';
|
||||
If FileExists(MedFileObj.CoverPath) Then
|
||||
if GetCoverPath then
|
||||
Begin
|
||||
Try
|
||||
AlbumCoverImg.Picture.LoadFromFile(MedFileObj.CoverPath);
|
||||
@ -738,18 +763,16 @@ Begin
|
||||
|
||||
writeln('########AlbumCover');
|
||||
// DEBUG-INFO
|
||||
If MedFileObj.album<>''
|
||||
If (MedFileObj.album<>'') and CactusConfig.CheckCoverPath
|
||||
Then
|
||||
Begin
|
||||
MedFileObj.CoverPath := CactusConfig.ConfigPrefix+DirectorySeparator+'covercache'+
|
||||
DirectorySeparator+MedFileObj.artist+'_'+MedFileObj.album+'.jpeg';
|
||||
If FileExists(MedFileObj.CoverPath)
|
||||
if GetCoverPath
|
||||
Then
|
||||
Begin
|
||||
Try
|
||||
AlbumCoverImg.Picture.LoadFromFile(MedFileObj.CoverPath);
|
||||
Except
|
||||
writeln('EXCEPTION');
|
||||
writeln('EXCEPTION loading cover');
|
||||
End;
|
||||
End
|
||||
Else
|
||||
@ -859,8 +882,7 @@ Begin
|
||||
else // title-mode
|
||||
begin
|
||||
MedFileObj.PathNameFromTag(CactusConfig.strTagToNameFormatString);
|
||||
EditID3win.pathedit1.text := MedFileObj.Path;
|
||||
|
||||
EditID3win.pathedit1.text := SysToUTF8(MedFileObj.Path);
|
||||
end;
|
||||
|
||||
|
||||
@ -878,11 +900,6 @@ begin
|
||||
Enabled := true;
|
||||
end;
|
||||
|
||||
procedure TEditID3.ac(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TEditID3.btnResetClick(Sender: TObject);
|
||||
@ -891,24 +908,24 @@ Begin
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
// TODO: check ....
|
||||
Procedure TEditID3.guessnameClick(Sender: TObject);
|
||||
|
||||
Var z: integer;
|
||||
tmps: string;
|
||||
Begin
|
||||
tmps := extractfilename(pathedit1.Text);
|
||||
tmps := extractfilename(UTF8ToSys(pathedit1.Text));
|
||||
If ((tmps[1]<#60) And (tmps[2]<#60) And (tmps[4]=#45)) Then
|
||||
Begin
|
||||
trackedit1.text := copy(tmps,1,2);
|
||||
trackedit1.text := SysToUTF8(copy(tmps,1,2));
|
||||
delete(tmps, 1, 5);
|
||||
End;
|
||||
|
||||
z := pos(' - ', tmps)+3;
|
||||
If z<>3 Then
|
||||
Begin
|
||||
titleedit1.text := TrimRight(copy(tmps,z,length(tmps)-z-3));
|
||||
artistedit1.text := TrimRight(copy(tmps,1,z-3));
|
||||
titleedit1.text := SysToUTF8(TrimRight(copy(tmps,z,length(tmps)-z-3)));
|
||||
artistedit1.text := SysToUTF8(TrimRight(copy(tmps,1,z-3)));
|
||||
End
|
||||
Else
|
||||
Begin
|
||||
@ -920,7 +937,4 @@ End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
initialization
|
||||
{$I editid3.lrs}
|
||||
|
||||
End.
|
||||
|
@ -18,7 +18,7 @@ Unit functions;
|
||||
Interface
|
||||
|
||||
Uses
|
||||
Classes, SysUtils, crt, math, config;
|
||||
Classes, SysUtils, math, config;
|
||||
|
||||
|
||||
|
||||
|
@ -144,7 +144,10 @@ Begin
|
||||
node:=node.NextSibling
|
||||
else done:= true;
|
||||
end;
|
||||
FAlbumInfo.CoverURL:=node.FirstChild.NodeValue;
|
||||
if node.FirstChild<>nil then
|
||||
FAlbumInfo.CoverURL:=node.FirstChild.NodeValue
|
||||
else
|
||||
FAlbumInfo.CoverURL:='';
|
||||
// FAlbumInfo.CoverURL:=StringReplace(FAlbumInfo.CoverURL, #10, '', [rfReplaceAll]);
|
||||
// FAlbumInfo.CoverURL:=StringReplace(FAlbumInfo.CoverURL, #13, '', [rfReplaceAll]);
|
||||
// TODO: Clean up linebreaks in strings retrieved from XML files
|
||||
|
@ -1,11 +1,11 @@
|
||||
object Main: TMain
|
||||
Left = 261
|
||||
Height = 720
|
||||
Top = 124
|
||||
Left = 39
|
||||
Height = 624
|
||||
Top = 0
|
||||
Width = 893
|
||||
ActiveControl = Panel4
|
||||
Caption = 'titel'
|
||||
ClientHeight = 701
|
||||
ClientHeight = 601
|
||||
ClientWidth = 893
|
||||
Icon.Data = {
|
||||
3E42000000000100010040400000010020002842000016000000280000004000
|
||||
@ -543,14 +543,13 @@ object Main: TMain
|
||||
Menu = Mainmenu1
|
||||
OnClose = MainClose
|
||||
OnCreate = MainCreate
|
||||
OnResize = FormResize
|
||||
Position = poDefault
|
||||
ShowInTaskBar = stAlways
|
||||
LCLVersion = '0.9.29'
|
||||
LCLVersion = '0.9.31'
|
||||
WindowState = wsMaximized
|
||||
object StatusBar1: TStatusBar
|
||||
Left = 0
|
||||
Height = 18
|
||||
Top = 683
|
||||
Height = 17
|
||||
Top = 584
|
||||
Width = 893
|
||||
Panels = <
|
||||
item
|
||||
@ -564,31 +563,29 @@ object Main: TMain
|
||||
end
|
||||
object Splitter1: TSplitter
|
||||
Left = 288
|
||||
Height = 683
|
||||
Height = 584
|
||||
Top = 0
|
||||
Width = 8
|
||||
Align = alRight
|
||||
AutoSnap = False
|
||||
Color = clBtnFace
|
||||
OnMoved = Splitter1Moved
|
||||
ParentColor = False
|
||||
ResizeAnchor = akRight
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 296
|
||||
Height = 683
|
||||
Height = 584
|
||||
Top = 0
|
||||
Width = 597
|
||||
Align = alRight
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 683
|
||||
ClientHeight = 584
|
||||
ClientWidth = 597
|
||||
TabOrder = 0
|
||||
OnClick = Panel1Click
|
||||
OnResize = Panel1Resize
|
||||
object TitleTree: TListView
|
||||
Left = 0
|
||||
Height = 237
|
||||
Height = 154
|
||||
Top = 5
|
||||
Width = 587
|
||||
Align = alTop
|
||||
@ -618,8 +615,7 @@ object Main: TMain
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Track'
|
||||
MaxWidth = 30
|
||||
Width = 30
|
||||
Width = 39
|
||||
end
|
||||
item
|
||||
AutoSize = True
|
||||
@ -636,9 +632,8 @@ object Main: TMain
|
||||
AutoSize = True
|
||||
Caption = 'Length'
|
||||
MaxWidth = 60
|
||||
Width = 357
|
||||
Width = 349
|
||||
end>
|
||||
ItemIndex = -1
|
||||
PopupMenu = titlelistmenu
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
@ -660,19 +655,19 @@ object Main: TMain
|
||||
Cursor = crVSplit
|
||||
Left = 0
|
||||
Height = 10
|
||||
Top = 242
|
||||
Top = 159
|
||||
Width = 597
|
||||
Align = alTop
|
||||
ResizeAnchor = akTop
|
||||
end
|
||||
object Panel3: TPanel
|
||||
Left = 0
|
||||
Height = 431
|
||||
Top = 252
|
||||
Height = 415
|
||||
Top = 169
|
||||
Width = 597
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 431
|
||||
ClientHeight = 415
|
||||
ClientWidth = 597
|
||||
TabOrder = 2
|
||||
object PlayerControlsPanel: TPanel
|
||||
@ -696,7 +691,6 @@ object Main: TMain
|
||||
Hint = 'Mute'
|
||||
Top = 208
|
||||
Width = 30
|
||||
Color = clBtnFace
|
||||
Flat = True
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
@ -810,7 +804,6 @@ object Main: TMain
|
||||
Hint = 'Track info'
|
||||
Top = 173
|
||||
Width = 30
|
||||
Color = clBtnFace
|
||||
Flat = True
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
@ -854,7 +847,7 @@ object Main: TMain
|
||||
end
|
||||
object current_title_edit: TEdit
|
||||
Left = 12
|
||||
Height = 24
|
||||
Height = 21
|
||||
Top = 102
|
||||
Width = 200
|
||||
Color = clBtnFace
|
||||
@ -863,7 +856,7 @@ object Main: TMain
|
||||
end
|
||||
object current_title_edit1: TEdit
|
||||
Left = 12
|
||||
Height = 24
|
||||
Height = 21
|
||||
Top = 134
|
||||
Width = 200
|
||||
Color = clBtnFace
|
||||
@ -872,9 +865,9 @@ object Main: TMain
|
||||
end
|
||||
object randomcheck: TCheckBox
|
||||
Left = 135
|
||||
Height = 23
|
||||
Height = 21
|
||||
Top = 250
|
||||
Width = 73
|
||||
Width = 69
|
||||
Caption = 'Random'
|
||||
OnChange = randomcheckChange
|
||||
TabOrder = 3
|
||||
@ -917,7 +910,7 @@ object Main: TMain
|
||||
end
|
||||
object Playlist: TListView
|
||||
Left = 237
|
||||
Height = 349
|
||||
Height = 333
|
||||
Top = 75
|
||||
Width = 348
|
||||
Align = alCustom
|
||||
@ -927,9 +920,8 @@ object Main: TMain
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Playlist'
|
||||
Width = 328
|
||||
Width = 329
|
||||
end>
|
||||
ItemIndex = -1
|
||||
PopupMenu = playlistmenu
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
@ -948,9 +940,9 @@ object Main: TMain
|
||||
OnStartDrag = PlaylistStartDrag
|
||||
end
|
||||
object Panel2: TPanel
|
||||
Left = 4
|
||||
Left = 0
|
||||
Height = 50
|
||||
Top = 11
|
||||
Top = 2
|
||||
Width = 464
|
||||
ClientHeight = 50
|
||||
ClientWidth = 464
|
||||
@ -958,7 +950,7 @@ object Main: TMain
|
||||
TabOrder = 2
|
||||
object filetypebox: TComboBox
|
||||
Left = 360
|
||||
Height = 24
|
||||
Height = 29
|
||||
Top = 14
|
||||
Width = 90
|
||||
ItemHeight = 0
|
||||
@ -979,7 +971,7 @@ object Main: TMain
|
||||
end
|
||||
object searchstr: TEdit
|
||||
Left = 120
|
||||
Height = 24
|
||||
Height = 21
|
||||
Top = 14
|
||||
Width = 232
|
||||
OnKeyUp = searchstrKeyUp
|
||||
@ -1021,11 +1013,11 @@ object Main: TMain
|
||||
end
|
||||
object clear_list: TBitBtn
|
||||
AnchorSideBottom.Side = asrCenter
|
||||
Left = 514
|
||||
Left = 517
|
||||
Height = 34
|
||||
Hint = 'Clear Playlist'
|
||||
Top = 33
|
||||
Width = 70
|
||||
Top = 6
|
||||
Width = 67
|
||||
Anchors = [akTop, akRight]
|
||||
AutoSize = True
|
||||
Caption = 'Clear'
|
||||
@ -1090,23 +1082,31 @@ object Main: TMain
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object lblPath: TLabel
|
||||
Left = 8
|
||||
Height = 14
|
||||
Top = 56
|
||||
Width = 39
|
||||
Caption = 'lblPath'
|
||||
ParentColor = False
|
||||
end
|
||||
end
|
||||
end
|
||||
object Panel4: TPanel
|
||||
Left = 0
|
||||
Height = 683
|
||||
Height = 584
|
||||
Top = 0
|
||||
Width = 288
|
||||
Align = alClient
|
||||
Align = alLeft
|
||||
BorderSpacing.InnerBorder = 30
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 683
|
||||
ClientHeight = 584
|
||||
ClientWidth = 288
|
||||
TabOrder = 1
|
||||
OnClick = Panel4Click
|
||||
object ArtistTree: TTreeView
|
||||
Left = 26
|
||||
Height = 673
|
||||
Height = 574
|
||||
Top = 5
|
||||
Width = 259
|
||||
Align = alClient
|
||||
@ -1158,7 +1158,6 @@ object Main: TMain
|
||||
Height = 22
|
||||
Top = 6
|
||||
Width = 23
|
||||
Color = clBtnFace
|
||||
Flat = True
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
@ -1201,7 +1200,7 @@ object Main: TMain
|
||||
end
|
||||
object artistsearch: TEdit
|
||||
Left = 8
|
||||
Height = 24
|
||||
Height = 21
|
||||
Top = 32
|
||||
Width = 110
|
||||
OnKeyUp = ArtistTreeKeyUp
|
||||
@ -1211,7 +1210,7 @@ object Main: TMain
|
||||
end
|
||||
object ToolBar1: TToolBar
|
||||
Left = 0
|
||||
Height = 678
|
||||
Height = 579
|
||||
Top = 5
|
||||
Width = 26
|
||||
Align = alLeft
|
||||
@ -1232,24 +1231,24 @@ object Main: TMain
|
||||
AutoSize = True
|
||||
Caption = 'Library'
|
||||
ImageIndex = 0
|
||||
Style = tbsCheck
|
||||
OnClick = LibModeBtnClick
|
||||
Style = tbsCheck
|
||||
end
|
||||
object NetModeBtn: TToolButton
|
||||
Left = 1
|
||||
Top = 150
|
||||
Top = 154
|
||||
Caption = 'NetModeBtn'
|
||||
ImageIndex = 1
|
||||
Style = tbsCheck
|
||||
OnClick = NetModeBtnClick
|
||||
Style = tbsCheck
|
||||
end
|
||||
object DeviceModeBtn: TToolButton
|
||||
Left = 1
|
||||
Top = 300
|
||||
Top = 308
|
||||
Caption = 'DeviceModeBtn'
|
||||
ImageIndex = 2
|
||||
Style = tbsCheck
|
||||
OnClick = DeviceModeBtnClick
|
||||
Style = tbsCheck
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1580,6 +1579,42 @@ object Main: TMain
|
||||
Caption = 'Mobile Player'
|
||||
object MIDeviceInfo: TMenuItem
|
||||
Caption = 'Device Info'
|
||||
Bitmap.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00000000100000001A0000001A0000001A0000001A0000001A0000
|
||||
0019000000120000000A00000002FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF0000000020683B02879B5702F29A5702E561370285000000330000
|
||||
0031000000230000001300000004FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF002D1C0500AE680FF2E19A38FFDF9837FFB67117FF844F0D6C2D1C
|
||||
0500000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00CB812400CB8124E7E8A745FFFAC25DFFEDB14EFFCB8124DBCB81
|
||||
24007C5321000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E0943300E4973540E79937CAE79937FCE79937FFE79937FCEA9B
|
||||
3900F8A64100FFA94300804E1A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E0943300E7993700EE9E3B00EE9E3B00F3A13E00FCA843FFFCA8
|
||||
4300FCA843FFFFA94320FF9B3400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E0943300E7993700EE9E3B00F39F3B00FFA43D00FFA43DFFFFA5
|
||||
3E00FFA84200FFA43DFFFF9B3420FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E0943300E7993700F2993500FF8F2800FF8F2800FF8F28FFFF8F
|
||||
2800FF973100FF922B0CFF8F28F4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00EC862300EF892500F97B1500F97B1500F97B1500F97B15FFF97B
|
||||
1500F9831D00F97B1524EE7B15F1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00F77C1600F77C1600F77C1600F77C1600F77C1600F77C16FFF883
|
||||
1D00F8872107E27A14C9F77C16A2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FA952F00FA952F00FA952F00FA952F00FA952F00FA952FFFFB9D
|
||||
370EE48620C6FA952FE9F887211AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FEB14B00FEB14B00FEB14B00FEB14B00FEB14B00FEB14BFFE594
|
||||
2ED9FEB14BF4FEAE4835FDAB4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFBB5500FFBB5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB
|
||||
55FDFFBB554EFEB14B00FDAB4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFBB5500FFBB5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB
|
||||
5584FFBB5500FEB14B00FDAB4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFBB5500FFBB5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB
|
||||
5513FFBB5500FFBB5500FFBB5500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
ImageIndex = 8
|
||||
OnClick = MIDeviceInfoClick
|
||||
end
|
||||
@ -1855,7 +1890,6 @@ object Main: TMain
|
||||
end
|
||||
end
|
||||
object Selectdirectorydialog1: TSelectDirectoryDialog
|
||||
Title = 'Select Directory'
|
||||
FilterIndex = 0
|
||||
top = 304
|
||||
end
|
||||
@ -2067,16 +2101,14 @@ object Main: TMain
|
||||
top = 232
|
||||
end
|
||||
object SaveDialog1: TSaveDialog
|
||||
Title = 'Save file as'
|
||||
FilterIndex = 0
|
||||
top = 560
|
||||
end
|
||||
object ImageList1: TImageList
|
||||
DrawingStyle = dsFocus
|
||||
ShareImages = True
|
||||
top = 344
|
||||
Bitmap = {
|
||||
4C69060000001000000010000000E01D450000000000400E6E00000000000000
|
||||
4C69090000001000000010000000E01D450000000000400E6E00000000000000
|
||||
0000000000000000000000000000858A8800858A88007B7F7E00161717000000
|
||||
00000000000000000000000000000000000082868400E9EBEA00FEFEFE00FFFF
|
||||
FF00FFFFFF00FFFFFF00B2B2B2FFC2C2C200FFFFFF00BABABA00939594002F31
|
||||
@ -2268,13 +2300,108 @@ object Main: TMain
|
||||
000000000000A16C38FFA15C38FF785838FF785C38FF00000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000
|
||||
00000000000000000000000000000000000001010D0001011A0001011A000101
|
||||
1A0001011A0A01011B6201011B9E01011B9E01011B6201011A0A01011A000101
|
||||
1A0001011A0001010D000000000001011A0001011A0001011A0001011A000101
|
||||
1A0001011A672C2C42CE676779F6626273F625253BCE01011A6701011A000101
|
||||
1A0001011A0001011A0001011A00010118000101180001011800010118000101
|
||||
1800010118B3464658F9565667FF4E4E5FFF3A3A4CF9010118B3010118000101
|
||||
1800010118000101180001011800012657000126570001265700012657000127
|
||||
5800000016D480A6CAFF99CCF6FF99CCF6FF80A6CAFF000016D4012758000126
|
||||
5700012657000126570001265700024C9800024C9800024C9800024C9800024D
|
||||
99810E0E20EFA1D4FAFF98CBF5FF98CBF5FFA1D4FAFF0E0E20EF024D9981024C
|
||||
9800024C9800024C9800024C9800024C9700024C9700024C9700024C9700024C
|
||||
9783073E7AC498CBF5FF91C4F1FF91C4F1FF98CBF5FF073E7AC4024C9783024C
|
||||
9700024C9700024C9700024C9700024B9400024B9400024B9400024B9400024B
|
||||
9400024A929E7FB4E4F688BBEAFF88BBEAFF7FB4E4F6024A929E024B9400024B
|
||||
9400024B9400024B9400024B9400008FCF000093D3000188CA00015FA5000148
|
||||
8F0001488F463574B1D480B3E3FF80B3E3FF3574B1D401488F4601488F00015F
|
||||
A5000188CA000093D300008FCF00008FCF000093D300009CDC0000A2E20000A8
|
||||
E80000AAEA19014385C64A7DB0FF4A7DB0FF014385C600AAEA1900A8E80000A2
|
||||
E200009CDC000093D300008FCF00008FCF000093D300009CDC0000A2E20000A7
|
||||
E74B00A8E8B32170A2E67BAEE0FF7BAEE0FF216FA2E600A8E8B300A7E74B00A2
|
||||
E200009CDC000093D300008FCF00008FCF000093D300009CDC31009FDF97009F
|
||||
DFC655D9F1FF35ACD1FF8DC0EDFF8DC0EDFF34ABD1FF54D9F1FF009FDFC6009F
|
||||
DF97009CDC310093D300008FCF00008FCF000091D1530A9BD8CC23B1E3E44BD1
|
||||
F1FF54D9F1FF28B6DBFFAAAAAAFFAAAAAAFF27B5DBFF54D8F1FF4BD1F1FF24B1
|
||||
E3E40A9BD8CC0091D153008FCF000085C5000085C5BA36BDECFA3BC3EFFF41C9
|
||||
EEFF54D9F1FF28B0D5FFFCFCFCFFFCFCFCFF27B0D5FF54D8F1FF41C9EEFF3BC3
|
||||
EFFF37BDECFA0085C5BA0085C50000000000006AAACC37BEEFFF3AC2EEFF41C9
|
||||
EEFF54D9F1FF28AACFFFE8E8E8FDE8E8E8FD27AACFFF54D8F1FF41C9EEFF3AC2
|
||||
EEFF37BFEFFF006AAACC000000000000000000396385005696CC005D9DCC0067
|
||||
A7CC0071B1CC007ABACC2F2F2F652F2F2F650079B9CC0070B0CC0067A7CC005E
|
||||
9ECC005797CC0039638500000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00040404680404048B0404048B000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000404048D959595FF777777FFD6D6D6FFD6D6
|
||||
D6FFD4D4D4FFCBCBCBFFC2C2C2FFBFBFBFFFBEBEBEFFC1C1C1FFC9C9C9FFD4D4
|
||||
D4FFD6D6D6FFD6D6D6FF000000000404048F8F8F8FFF757575FFD3D3D3FFD0D0
|
||||
D0FFC1C1C1FFCAC1CEFFD8CEDBFFDDDDDDFFE1E3DFFFDEE0DDFFCCCCCBFFBBBB
|
||||
BBFFCECECEFFD3D3D3FF00000000040404918D8D8DFF737373FFCECECEFFBDBD
|
||||
BDFFCEBCDDFFDDBEECFFDDCAE3FFDDDADDFFE1E3DFFFE7EAE6FFEEEEEDFFD8D8
|
||||
D8FFB5B5B5FFCDCDCDFF00000000030303948A8A8AFF707070FFC1C1C1FFB8CA
|
||||
D2FFC7D4FBFFD8BBF2FFDBBEE8FFDBD4DDFFE0E2DEFFEAEBE8FFF0F0F0FFF1F0
|
||||
F0FFC6C5C5FFBBBBBBFF0000000003030397868686FF6C6C6CFFB5B5B5FFBBE1
|
||||
E5FFB7EFF9FFB7DBF9FFDAC9F1FFF8F5F9FFF7F8F7FFE0E1E0FFD5D3D5FFD7D1
|
||||
D4FFCBC4C7FF969696FF000000000303039A838383FF696969FFAEAEAEFFCED4
|
||||
D4FFB9C8C9FFA4C5C9FFECF5F7FF9D9D9DFF9D9D9DFFF6F5F6FFD2C7CCFFD1C4
|
||||
CAFFCDC0C6FF797979FF000000000303039D7F7F7FFF656565FF9C9C9CFFC0BC
|
||||
BBFFC1BCBCFFC2BEBDFFEFEFEEFFAFAFAFFFAFAFAFFFE5F1EBFFB5C1BBFFC4BF
|
||||
C2FFC4BDC1FF7A7A7AFF00000000030303A07C7C7CFF626262FF878787FFBDB9
|
||||
B8FFCEC9C8FFD3CFCEFFE1E0E0FFEDEDEDFFEAE8EBFFBBBCD9FF4BDE9FFF57E4
|
||||
9BFF7FC6A0FF7F7F7FFF00000000020202A4787878FF5E5E5EFF8E8E8EFFA3A1
|
||||
A1FFD8D6D6FFDDDCDCFFDDDDDDFFD2D5D0FFC4C2C4FFC29ED7FFB59ADCFF64CE
|
||||
B3FF61A785FF8C8C8CFF00000000020202A8757575FF5B5B5BFF959595FF8787
|
||||
87FFBBBBBBFFE1E1E1FFDCDDDBFFD1D4CFFFC7C8C6FFC5B0D0FFC699E2FFA28E
|
||||
B9FF7F7F7FFF9B9B9BFF00000000020202AD737373FF595959FF969696FF9494
|
||||
94FF868686FFA6A7A6FFCACCC9FFCFD2CDFFC7C9C6FFBAAFBDFF998CA1FF8080
|
||||
80FF979797FF9C9C9CFF0101018B010101BA757575FF575757FF969696FF9797
|
||||
97FF969696FF8D8D8DFF858585FF808080FF7F7F7FFF828282FF8B8B8BFF9898
|
||||
98FF9B9B9BFF9B9B9BFF0101019901010197010101C6010101C6010101A50101
|
||||
01A5010101A5010101A5010101A5010101A5010101A5010101A5010101A50101
|
||||
01A5010101A5010101A50101017E000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFBB5500FFBB
|
||||
5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB5513FFBB5500FFBB5500FFBB
|
||||
5500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFBB5500FFBB
|
||||
5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB5584FFBB5500FEB14B00FDAB
|
||||
4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFBB5500FFBB
|
||||
5500FFBB5500FFBB5500FFBB5500FFBB55FFFFBB55FDFFBB554EFEB14B00FDAB
|
||||
4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEB14B00FEB1
|
||||
4B00FEB14B00FEB14B00FEB14B00FEB14BFFE5942ED9FEB14BF4FEAE4835FDAB
|
||||
4500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FA952F00FA95
|
||||
2F00FA952F00FA952F00FA952F00FA952FFFFB9D370EE48620C6FA952FE9F887
|
||||
211AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F77C1600F77C
|
||||
1600F77C1600F77C1600F77C1600F77C16FFF8831D00F8872107E27A14C9F77C
|
||||
16A2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EC862300EF89
|
||||
2500F97B1500F97B1500F97B1500F97B15FFF97B1500F9831D00F97B1524EE7B
|
||||
15F1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0943300E799
|
||||
3700F2993500FF8F2800FF8F2800FF8F28FFFF8F2800FF973100FF922B0CFF8F
|
||||
28F4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0943300E799
|
||||
3700EE9E3B00F39F3B00FFA43D00FFA43DFFFFA53E00FFA84200FFA43DFFFF9B
|
||||
3420FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0943300E799
|
||||
3700EE9E3B00EE9E3B00F3A13E00FCA843FFFCA84300FCA843FFFFA94320FF9B
|
||||
3400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E0943300E497
|
||||
3540E79937CAE79937FCE79937FFE79937FCEA9B3900F8A64100FFA94300804E
|
||||
1A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CB812400CB81
|
||||
24E7E8A745FFFAC25DFFEDB14EFFCB8124DBCB8124007C532100000000000000
|
||||
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D1C0500AE68
|
||||
0FF2E19A38FFDF9837FFB67117FF844F0D6C2D1C050000000000000000000000
|
||||
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000020683B
|
||||
02879B5702F29A5702E561370285000000330000003100000023000000130000
|
||||
0004FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000100000
|
||||
001A0000001A0000001A0000001A0000001A00000019000000120000000A0000
|
||||
0002FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
end
|
||||
object checkmobile: TTimer
|
||||
Enabled = False
|
||||
OnTimer = checkmobileTimer
|
||||
OnStartTimer = checkmobileStartTimer
|
||||
top = 264
|
||||
end
|
||||
object SimpleIPCServer1: TSimpleIPCServer
|
||||
@ -3503,7 +3630,7 @@ object Main: TMain
|
||||
0000
|
||||
}
|
||||
Visible = True
|
||||
OnDblClick = TrayIconDblClick
|
||||
OnClick = TrayIconClick
|
||||
left = 368
|
||||
top = 368
|
||||
end
|
||||
@ -4658,4 +4785,9 @@ object Main: TMain
|
||||
OnClick = itemTrayExitClick
|
||||
end
|
||||
end
|
||||
object ApplicationProperties1: TApplicationProperties
|
||||
OnMinimize = ApplicationProperties1Minimize
|
||||
left = 564
|
||||
top = 220
|
||||
end
|
||||
end
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -34,7 +34,7 @@ Uses
|
||||
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
|
||||
ExtCtrls, ComCtrls, StdCtrls, Menus,{$ifdef fmod} fmodplayer,{$endif}
|
||||
ActnList, mediacol, dos, SimpleIPC, functions, EditBtn, last_fm, debug, config,
|
||||
ActnList, FileUtil, mediacol, dos, SimpleIPC, functions, EditBtn, last_fm, debug, config,
|
||||
playlist, playerclass, mplayer, mp3file, Messages, LMessages, cj_interfaces;
|
||||
|
||||
resourcestring
|
||||
@ -87,9 +87,12 @@ rsTrack = 'Track';
|
||||
|
||||
Type
|
||||
|
||||
TCactusFlags = (cfTrayIconPressed, cfProgHide);
|
||||
|
||||
{ TMain }
|
||||
|
||||
TMain = Class(TForm)
|
||||
ApplicationProperties1: TApplicationProperties;
|
||||
ArtistTree: TTreeView;
|
||||
artistsearch: TEdit;
|
||||
Button1: TButton;
|
||||
@ -104,6 +107,7 @@ Type
|
||||
ImageListHot: TImageList;
|
||||
ImageListDis: TImageList;
|
||||
itemPlugins: TMenuItem;
|
||||
lblPath: TLabel;
|
||||
Mainmenu1: TMainMenu;
|
||||
MenuItem12: TMenuItem;
|
||||
Menuitem21: TMenuItem;
|
||||
@ -249,6 +253,7 @@ Type
|
||||
Trackinfo: TSpeedButton;
|
||||
TrayIcon: TTrayIcon;
|
||||
Volumebar: TProgressBar;
|
||||
procedure ApplicationProperties1Minimize(Sender: TObject);
|
||||
Procedure ArtistTreeClick(Sender: TObject);
|
||||
Procedure ArtistTreeDblClick(Sender: TObject);
|
||||
Procedure ArtistTreeEndDrag(Sender, Target: TObject; X, Y: Integer);
|
||||
@ -260,14 +265,12 @@ Type
|
||||
Procedure ArtistTreeStartDrag(Sender: TObject; Var DragObject: TDragObject);
|
||||
Procedure Button1Click(Sender: TObject);
|
||||
procedure Button2Click(Sender: TObject);
|
||||
procedure checkmobileStartTimer(Sender: TObject);
|
||||
Procedure CoverImageMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
Procedure DeviceModeBtnClick(Sender: TObject);
|
||||
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
||||
Procedure FormMouseDown(Sender: TOBject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
Procedure FormResize(Sender: TObject);
|
||||
procedure itemTrayExitClick(Sender: TObject);
|
||||
procedure itemTrayPlayClick(Sender: TObject);
|
||||
Procedure LibModeBtnClick(Sender: TObject);
|
||||
@ -301,7 +304,6 @@ Type
|
||||
procedure pnlPlaytimeClick(Sender: TObject);
|
||||
procedure PopupMenuTrayPopup(Sender: TObject);
|
||||
procedure randomcheckChange(Sender: TObject);
|
||||
procedure scan(Sender: TObject);
|
||||
Procedure SearchPanelClick(Sender: TObject);
|
||||
Procedure PlayerControlsPanelClick(Sender: TObject);
|
||||
Procedure PauseButtonImgClick(Sender: TObject);
|
||||
@ -323,7 +325,6 @@ Type
|
||||
Procedure MenuItem11Click(Sender: TObject);
|
||||
Procedure MenuItem14Click(Sender: TObject);
|
||||
Procedure MenuItem16Click(Sender: TObject);
|
||||
Procedure MenuItem19Click(Sender: TObject);
|
||||
Procedure MenuItem20Click(Sender: TObject);
|
||||
Procedure MenuItem26Click(Sender: TObject);
|
||||
Procedure MenuItem27Click(Sender: TObject);
|
||||
@ -343,6 +344,7 @@ Type
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
Procedure SettingsItemClick(Sender: TObject);
|
||||
Procedure SimpleIPCServer1Message(Sender: TObject);
|
||||
procedure skinmenuClick(Sender: TObject);
|
||||
Procedure SpeedButton1Click(Sender: TObject);
|
||||
|
||||
Procedure Splitter1Moved(Sender: TObject);
|
||||
@ -350,8 +352,6 @@ Type
|
||||
Procedure SrchArtItemClick(Sender: TObject);
|
||||
Procedure SrchFileItemClick(Sender: TObject);
|
||||
Procedure SrchTitleItemClick(Sender: TObject);
|
||||
Procedure srch_buttonKeyUp(Sender: TObject; Var Key: Word;
|
||||
Shift: TShiftState);
|
||||
Procedure StopButtonImgClick(Sender: TObject);
|
||||
Procedure StopButtonImgMouseDown(Sender: TOBject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
@ -404,7 +404,6 @@ Type
|
||||
Procedure MenuItem33Click(Sender: TObject);
|
||||
Procedure rm_artist_playeritemClick(Sender: TObject);
|
||||
Procedure searchstrClick(Sender: TObject);
|
||||
Procedure skinmenuClick(Sender: TObject);
|
||||
Procedure syncplayeritem(Sender: TObject);
|
||||
Procedure MenuItem3Click(Sender: TObject);
|
||||
Procedure MenuItem22aClick(Sender: TObject);
|
||||
@ -431,7 +430,7 @@ Type
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
Procedure trackbarMouseUp(Sender: TOBject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure TrayIconDblClick(Sender: TObject);
|
||||
procedure TrayIconClick(Sender: TObject);
|
||||
Procedure undoSyncItemClick(Sender: TObject);
|
||||
|
||||
Procedure loadskin(Sender: TObject);
|
||||
@ -452,10 +451,12 @@ Type
|
||||
bPnlPlaytimeNegated: boolean;
|
||||
oldWindowState :TWindowState;
|
||||
fromTrayDBLClick :Boolean;
|
||||
FFlags: set of TCactusFlags;
|
||||
Procedure MoveNode(TargetNode, SourceNode : TTreeNode);
|
||||
Procedure ApplicationIdle(Sender: TObject; Var Done: Boolean);
|
||||
Procedure update_player_display;
|
||||
Function LoadFile(path: String): boolean;
|
||||
procedure MinimizeMe(Data: Ptrint);
|
||||
|
||||
Public
|
||||
player_connected, playermode: boolean;
|
||||
@ -478,7 +479,6 @@ Type
|
||||
Procedure update_artist_view;
|
||||
|
||||
{ public declarations }
|
||||
procedure WMSize(var Message: TLMSize); message LM_Size;
|
||||
|
||||
//Test Plugins....cut in future
|
||||
procedure SayHello(Sender :TCJ_MenuItem);
|
||||
@ -554,6 +554,8 @@ Implementation
|
||||
Uses editid3, status, settings, player, directories, skin, cdrip, translations, bigcoverimg,
|
||||
streamcol, addradio, CleanLibrary, global_vars, cj_pluginslist, cj_interfaces_impl, LCLType;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{$i cactus_const.inc}
|
||||
|
||||
Var sizediff: int64;
|
||||
@ -1182,7 +1184,7 @@ Begin
|
||||
|
||||
If MediaCollection.items[i].title<>'' Then ListItem.SubItems.Add(MediaCollection.items
|
||||
[i].Artist)
|
||||
Else ListItem.SubItems.Add(extractfilename(MediaCollection.items[i].path));
|
||||
Else ListItem.SubItems.Add(SysToUTF8(extractfilename(MediaCollection.items[i].path)));
|
||||
ListItem.SubItems.Add (MediaCollection.items[i].title);
|
||||
ListItem.SubItems.Add (MediaCollection.items[i].album);
|
||||
ListItem.SubItems.Add (MediaCollection.items[i].Track);
|
||||
@ -1227,11 +1229,6 @@ Begin
|
||||
End;
|
||||
|
||||
|
||||
procedure TMain.checkmobileStartTimer(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.CoverImageMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
@ -1313,44 +1310,6 @@ End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.FormResize(Sender: TObject);
|
||||
Begin
|
||||
Panel4.Width := oldSplitterWidth;
|
||||
Panel1.Width := Width-oldSplitterWidth-8;
|
||||
End;
|
||||
|
||||
|
||||
procedure TMain.WMSize(var Message: TLMSize);
|
||||
begin
|
||||
if not (csDesigning in ComponentState) then
|
||||
begin
|
||||
case (Message.SizeType and not SIZE_SourceIsInterface) of
|
||||
SIZEICONIC:begin
|
||||
if not(fromTrayDBLClick) then
|
||||
begin
|
||||
Visible :=False;
|
||||
oldWindowState :=Self.WindowState;
|
||||
exit;
|
||||
end;
|
||||
fromTrayDBLClick :=False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
inherited WMSize(Message);
|
||||
end;
|
||||
|
||||
procedure TMain.TrayIconDblClick(Sender: TObject);
|
||||
begin
|
||||
if not(Self.Visible) then
|
||||
begin
|
||||
//Avoid handling on OnWindowStateChange
|
||||
Self.fromTrayDBLClick :=True;
|
||||
// Self.WindowState:=oldWindowState;
|
||||
Self.Visible:=True;
|
||||
Self.BringToFront;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMain.itemTrayExitClick(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
@ -1682,11 +1641,6 @@ begin
|
||||
PlayerObj.Playlist.reset_random;
|
||||
end;
|
||||
|
||||
procedure TMain.scan(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.SearchPanelClick(Sender: TObject);
|
||||
@ -1792,7 +1746,7 @@ Begin
|
||||
DebugOutLn('ERROR saving playlist', 2);
|
||||
end else if PlayerObj.Playlist.Count=0 then DeleteFile(CactusConfig.ConfigPrefix+'lib'+DirectorySeparator+'last.m3u');
|
||||
|
||||
If (MediaCollection.ItemCount>1) Then
|
||||
If (MediaCollection.ItemCount>0) Then
|
||||
Begin
|
||||
MediaCollection.SaveToFile(CactusConfig.ConfigPrefix+'lib'+DirectorySeparator+'last.mlb');
|
||||
CactusConfig.LastLib := MediaCollection.savepath;
|
||||
@ -2223,6 +2177,12 @@ Begin
|
||||
Application.ProcessMessages;
|
||||
End;
|
||||
|
||||
procedure TMain.MinimizeMe(Data: Ptrint);
|
||||
begin
|
||||
Include(FFlags, cfProgHide);
|
||||
Hide;
|
||||
end;
|
||||
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
@ -2315,8 +2275,8 @@ Begin
|
||||
With artnode Do
|
||||
Begin
|
||||
MakeVisible;
|
||||
ImageIndex := MediaCollection.Items[i].Action;
|
||||
SelectedIndex := MediaCollection.Items[i].Action;
|
||||
ImageIndex := 6; //MediaCollection.Items[i].Action;
|
||||
SelectedIndex := 6; //MediaCollection.Items[i].Action;
|
||||
Data := MediaCollection.items[i];
|
||||
Expanded:=false;
|
||||
End;
|
||||
@ -2328,8 +2288,8 @@ Begin
|
||||
Begin
|
||||
MakeVisible;
|
||||
MedFileObj:=TMediaFileClass(AlbumList.Objects[z]);
|
||||
ImageIndex := MedFileObj.Action;
|
||||
SelectedIndex := MedFileObj.Action;
|
||||
ImageIndex := 7;//MedFileObj.Action;
|
||||
SelectedIndex := 7;//MedFileObj.Action;
|
||||
Data := AlbumList.Objects[z];
|
||||
End;
|
||||
End;
|
||||
@ -2502,11 +2462,6 @@ Begin
|
||||
End;
|
||||
End;
|
||||
|
||||
procedure TMain.MenuItem19Click(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.MenuItem20Click(Sender: TObject);
|
||||
@ -2874,6 +2829,11 @@ Begin
|
||||
Writeln('IPC end');
|
||||
End;
|
||||
|
||||
procedure TMain.skinmenuClick(Sender: TObject);
|
||||
begin
|
||||
// JRA
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.SpeedButton1Click(Sender: TObject);
|
||||
@ -2910,12 +2870,6 @@ Begin
|
||||
SrchTitleItem.Checked := Not SrchTitleItem.Checked;
|
||||
End;
|
||||
|
||||
Procedure TMain.srch_buttonKeyUp(Sender: TObject; Var Key: Word;
|
||||
Shift: TShiftState);
|
||||
Begin
|
||||
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.StopButtonImgClick(Sender: TObject);
|
||||
@ -3079,6 +3033,7 @@ Procedure TMain.TitleTreeSelectItem(Sender: TObject; Item: TListItem;
|
||||
Begin
|
||||
// reanable the popupmenu in case ist was disabled in TMain.TitleTreeMouseDown
|
||||
TitleTree.PopupMenu.AutoPopup := true;
|
||||
lblPath.Caption:=TMediaFileClass(Item.data).Path;
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
@ -3227,7 +3182,7 @@ End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.MenuItem10Click(Sender: TObject);
|
||||
procedure TMain.Menuitem10Click(Sender: TObject);
|
||||
|
||||
Var MedFileObj: TMediaFileClass;
|
||||
Begin
|
||||
@ -3621,6 +3576,9 @@ Procedure TMain.playlistSelectItem(Sender: TObject; Item: TListItem;
|
||||
Begin
|
||||
// reanable the popupmenu in case ist was disabled in TMain.playlistMouseDown
|
||||
playlist.PopupMenu.AutoPopup := true;
|
||||
if (Item.Data<>nil) then begin
|
||||
lblPath.Caption := TMediaFileClass(Item.data).Path;
|
||||
end;
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
@ -3646,8 +3604,7 @@ Begin
|
||||
MedFileObj := TMediaFileClass(playlist.Items[PlayerObj.CurrentTrack].Data);
|
||||
If (MedFileObj.album<>'') Then
|
||||
Begin
|
||||
MedFileObj.CoverPath := CactusConfig.ConfigPrefix+DirectorySeparator+'covercache'+
|
||||
DirectorySeparator+MedFileObj.Artist+'_'+MedFileObj.album+'.jpeg';
|
||||
MedFileObj.CoverPath := CactusConfig.GetCoverPath(MedFileObj.GetCoverFile);
|
||||
If (FileExists(MedFileObj.CoverPath)=false) Then
|
||||
Begin
|
||||
CoverImage.Picture.Clear;
|
||||
@ -3717,6 +3674,11 @@ Begin
|
||||
// if ArtistTree.Selected<>nil then update_title_view;
|
||||
End;
|
||||
|
||||
procedure TMain.ApplicationProperties1Minimize(Sender: TObject);
|
||||
begin
|
||||
Application.QueueAsyncCall(@MinimizeMe, 0);
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.ArtistTreeKeyUp(Sender: TObject; Var Key: Word;
|
||||
@ -3948,11 +3910,6 @@ End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.skinmenuClick(Sender: TObject);
|
||||
Begin
|
||||
|
||||
End;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.syncplayeritem(Sender: TObject);
|
||||
@ -4171,6 +4128,16 @@ Begin
|
||||
If PlayerObj.playing Then playtimer.enabled := true;
|
||||
End;
|
||||
|
||||
procedure TMain.TrayIconClick(Sender: TObject);
|
||||
begin
|
||||
if not Visible then begin
|
||||
Show;
|
||||
BringToFront;
|
||||
end else begin
|
||||
Hide;
|
||||
end;
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
Procedure TMain.undoSyncItemClick(Sender: TObject);
|
||||
@ -4430,7 +4397,7 @@ Begin
|
||||
curalbum := lowercase(MedFileObj.album);
|
||||
DebugOut(curartist, 2);
|
||||
|
||||
i := MedColObj.getTracks(MedFileObj.Artist, MedFileObj.index);
|
||||
i := MedColObj.getTracks(MedFileObj.Artist, 0{MedFileObj.index});
|
||||
|
||||
Repeat
|
||||
Begin
|
||||
@ -4445,13 +4412,13 @@ Begin
|
||||
|
||||
If MedColObj.items[i].title<>'' Then
|
||||
ListItem.SubItems.Add((MedColObj.items[i].Artist))
|
||||
Else ListItem.SubItems.Add(extractfilename(MedColObj.items[i].path));
|
||||
Else ListItem.SubItems.Add(SysToUTF8(extractfilename(MedColObj.items[i].path)));
|
||||
|
||||
ListItem.SubItems.Add((MedColObj.items[i].title));
|
||||
ListItem.SubItems.Add((MedColObj.items[i].album));
|
||||
ListItem.SubItems.Add(MedColObj.items[i].track);
|
||||
ListItem.SubItems.Add(ID3Genre[MedColObj.items[i].GenreID]);
|
||||
ListItem.SubItems.Add(ExtractFileName(MedColObj.items[i].Path));
|
||||
ListItem.SubItems.Add(SysToUTF8(ExtractFileName(MedColObj.items[i].Path)));
|
||||
ListItem.SubItems.Add(MedColObj.items[i].playtime);
|
||||
|
||||
End;
|
||||
@ -4606,7 +4573,4 @@ begin
|
||||
CJ_Interface.GetSignals.Signal(1, 24, 50, msgHandled);
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I mainform.lrs}
|
||||
|
||||
End.
|
||||
|
@ -20,7 +20,7 @@ Interface
|
||||
Uses
|
||||
Classes, SysUtils,
|
||||
//Tagreader:
|
||||
WMAfile, OggVorbis, FLACfile, mp3file, debug, lconvencoding, guesstag;
|
||||
WMAfile, OggVorbis, FLACfile, mp3file, debug, LCLProc, lconvencoding, guesstag;
|
||||
|
||||
Type
|
||||
// PMediaCollectionClass = ^TMediaCollectionClass;
|
||||
@ -40,6 +40,7 @@ Type
|
||||
FStreamUrl: string;
|
||||
FMediaType: TMediaType;
|
||||
|
||||
function StrToUTF8(s:string): string;
|
||||
Procedure read_tag_ogg;
|
||||
Procedure read_tag_flac;
|
||||
Procedure read_tag_wma;
|
||||
@ -59,7 +60,8 @@ Type
|
||||
Collection: TMediaCollectionClass;
|
||||
Comment: ansistring;
|
||||
GenreID: Byte;
|
||||
Year, Track: string[4];
|
||||
Year: string[4];
|
||||
Track: string[10]; // ####/####
|
||||
Filetype: string[5];
|
||||
Size: int64;
|
||||
ID, Bitrate, Samplerate, Playlength, Action: longint;
|
||||
@ -77,6 +79,7 @@ Type
|
||||
Function FullPathNameFromTag_dryrun(var strFormat: string): string;
|
||||
Function move2path(strFilePath: string): Boolean;
|
||||
Function LibraryPath(): string;
|
||||
function GetCoverFile: string;
|
||||
|
||||
property Artist: string read FArtist write SetArtist;
|
||||
property Album: string read FAlbum write SetAlbum;
|
||||
@ -272,10 +275,18 @@ Begin
|
||||
savepath := path;
|
||||
sortState := FSorted;
|
||||
linecount:=0;
|
||||
Try
|
||||
system.assign(lfile,path);
|
||||
reset(lfile);
|
||||
|
||||
system.assign(lfile,path);
|
||||
{$i-}
|
||||
reset(lfile);
|
||||
{$i+}
|
||||
if IoResult<>0 then begin
|
||||
result := false;
|
||||
writeln('unable to open file ', path);
|
||||
exit;
|
||||
end;
|
||||
|
||||
try
|
||||
readln(lfile, tmps);
|
||||
readln(lfile, tmps);
|
||||
|
||||
@ -343,6 +354,7 @@ Begin
|
||||
writeln('library sucessfully loaded');
|
||||
result := true;
|
||||
Except
|
||||
close(lfile);
|
||||
fsorted := sortState;
|
||||
writeln('lib seems corupted');
|
||||
write('exception at entry ');
|
||||
@ -812,6 +824,26 @@ Begin
|
||||
result := i;
|
||||
End;
|
||||
|
||||
function TMediaFileClass.StrToUTF8(s: string): string;
|
||||
var
|
||||
w: Word;
|
||||
begin
|
||||
if length(s)>2 then begin
|
||||
W := PWord(@S[1])^;
|
||||
if (W=$FFFE) or (W=$FEFF) then begin
|
||||
s := copy(s, 3, length(s)-2);
|
||||
if (W=$FFFE) then
|
||||
result := UCS2BEToUTF8(s)
|
||||
else
|
||||
result := UCS2LEToUTF8(s);
|
||||
exit;
|
||||
end
|
||||
end;
|
||||
if FindInvalidUTF8Character(pchar(s), Length(s), false)>=0 then
|
||||
result := ISO_8859_1ToUTF8(s)
|
||||
else
|
||||
result := S;
|
||||
end;
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
{ TMediaFileClass }
|
||||
@ -943,14 +975,14 @@ Begin
|
||||
begin
|
||||
// writeln(path);
|
||||
MP3File.ReadTag(Path);
|
||||
artist := ISO_8859_1ToUTF8(MP3File.Artist);
|
||||
title := ISO_8859_1ToUTF8(MP3File.Title);
|
||||
album := ISO_8859_1ToUTF8(MP3File.Album);
|
||||
artist := StrToUTF8(MP3File.Artist);
|
||||
title := StrToUTF8(MP3File.Title);
|
||||
album := StrToUTF8(MP3File.Album);
|
||||
Bitrate := MP3File.BitRate;
|
||||
Year := MP3File.Year;
|
||||
Year := StrToUTF8(MP3File.Year);
|
||||
Samplerate := MP3File.SampleRate;
|
||||
Comment := ISO_8859_1ToUTF8(MP3File.Comment);
|
||||
Track := (MP3File.Track);
|
||||
Comment := StrToUTF8(MP3File.Comment);
|
||||
Track := StrToUTF8(MP3File.Track);
|
||||
Playlength := round(MP3File.Playlength);
|
||||
Playtime := SecondsToFmtStr(Playlength);
|
||||
GenreID := (MP3File.GenreID);
|
||||
@ -1304,5 +1336,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMediaFileClass.GetCoverFile: string;
|
||||
begin
|
||||
result := Artist+'_'+album+'.jpeg'
|
||||
end;
|
||||
|
||||
|
||||
End.
|
||||
|
@ -10,6 +10,7 @@
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="cactus"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<AutoIncrementBuild Value="True"/>
|
||||
@ -17,9 +18,6 @@
|
||||
<RevisionNr Value="5"/>
|
||||
<BuildNr Value="737"/>
|
||||
</VersionInfo>
|
||||
<MacroValues Count="1">
|
||||
<Macro1 Name="LCLWidgetType" Value="gtk2"/>
|
||||
</MacroValues>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="default" Default="True"/>
|
||||
</BuildModes>
|
||||
@ -35,21 +33,25 @@
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="4">
|
||||
<RequiredPackages Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="lnetbase"/>
|
||||
<PackageName Value="LCLBase"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="laz_synapse"/>
|
||||
<PackageName Value="lnetbase"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="LCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
<PackageName Value="synapse"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="FCL"/>
|
||||
<PackageName Value="LCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item5>
|
||||
</RequiredPackages>
|
||||
<Units Count="32">
|
||||
<Unit0>
|
||||
@ -240,7 +242,6 @@
|
||||
<SearchPaths>
|
||||
<OtherUnitFiles Value="fmodintf;tagreader;plugin/sdk;plugin/impl"/>
|
||||
<UnitOutputDirectory Value="../source/obj"/>
|
||||
<SrcPath Value="/home/daseeb/devel/units/synapse/source/lib/"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
@ -265,6 +266,9 @@
|
||||
<ShowHintsForUnusedUnitsInMainSrc Value="True"/>
|
||||
</Verbosity>
|
||||
<WriteFPCLogo Value="False"/>
|
||||
<CompilerMessages>
|
||||
<UseMsgFile Value="True"/>
|
||||
</CompilerMessages>
|
||||
<CustomOptions Value="-dCactusDebug"/>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
|
@ -23,10 +23,12 @@ uses
|
||||
{$ifdef linux}
|
||||
cthreads,
|
||||
{$endif}
|
||||
global_vars, Interfaces, SysUtils, Forms, status, settings, player, graphics,
|
||||
editid3, directories, skin, cdrip, mediacol, BigCoverImg, mainform, cddb,
|
||||
debug, config, addradio, streamcol, playerclass, CleanLibrary, laz_synapse,
|
||||
lnetbase, guesstag;
|
||||
global_vars,
|
||||
Interfaces,SysUtils,
|
||||
Forms, status, settings, player, graphics, editid3, directories, skin,
|
||||
cdrip, mediacol, BigCoverImg, mainform, cddb,
|
||||
debug, config, {imagesforlazarus,} addradio, streamcol,
|
||||
playerclass, CleanLibrary, lnetbase, synapse{, plugininterfaces}, guesstag;
|
||||
|
||||
var
|
||||
invalid_param, skip_config: boolean;
|
||||
@ -35,9 +37,7 @@ var
|
||||
|
||||
{$i cactus_const.inc}
|
||||
|
||||
{$IFDEF WINDOWS}{$R mp3proj.rc}{$ENDIF}
|
||||
|
||||
{$R mp3proj.res}
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Title:='cactus';
|
||||
|
BIN
applications/cactusjukebox/source/mp3proj.res
Normal file
BIN
applications/cactusjukebox/source/mp3proj.res
Normal file
Binary file not shown.
@ -111,7 +111,10 @@ begin
|
||||
AStringList:=TStringList.Create;
|
||||
try
|
||||
if GetMPlayerPlaying then AStringList.LoadFromStream(MPlayerProcess.Output);
|
||||
Result:=AStringList.Strings[0];
|
||||
if AStringList.Count>0 then
|
||||
Result:=AStringList.Strings[0]
|
||||
else
|
||||
Result := '';
|
||||
// writeln(Result);
|
||||
except
|
||||
writeln('EXCEPTION reading mplayer output');result:='';
|
||||
|
@ -45,6 +45,7 @@ TMP3File = class
|
||||
FGenreID: byte;
|
||||
FFileName: string;
|
||||
procedure ReadHeader;
|
||||
function GetId3V1Track: Integer;
|
||||
public
|
||||
constructor create;
|
||||
function ReadTag(Filename: string):boolean;
|
||||
@ -138,6 +139,20 @@ begin
|
||||
Else writeln(FFileName+' -> no valid mpeg header found');
|
||||
end;
|
||||
|
||||
function TMP3File.GetId3V1Track: Integer;
|
||||
begin
|
||||
result := pos('/', FTrack);
|
||||
if result>0 then
|
||||
result := StrToIntDef(Copy(FTrack, 1, result-1), 0)
|
||||
else
|
||||
result := StrToIntDef(FTrack, 0);
|
||||
if result>255 then
|
||||
result := 255
|
||||
else
|
||||
if result<0 then
|
||||
result := 0;
|
||||
end;
|
||||
|
||||
constructor TMP3File.create;
|
||||
begin
|
||||
|
||||
@ -154,6 +169,17 @@ Var i, z, tagpos: integer;
|
||||
artistv2, albumv2, titlev2, commentv2, yearv2, trackv2: string;
|
||||
bufstr: string;
|
||||
mp3filehandle: longint;
|
||||
iso: boolean;
|
||||
|
||||
function GetID3TagStr: string;
|
||||
begin
|
||||
result := copy(bufstr,i+11,buf[i+7]-1);
|
||||
iso := bufstr[i+10]=#0;
|
||||
if bufstr[i+10] in [#0,#3] then
|
||||
// string is ISO-8859-1 or UTF-8 (2.4) encoded, can be trimmed
|
||||
result := TrimRight(result);
|
||||
end;
|
||||
|
||||
Begin
|
||||
FFileName:=Filename;
|
||||
ReadHeader;
|
||||
@ -165,7 +191,7 @@ Begin
|
||||
fileread(mp3filehandle,buf,high(buf));
|
||||
bufstr := '';
|
||||
For i:= 1 To high(buf) Do
|
||||
If (buf[i]<>0) and (buf[i]<>10) Then bufstr := bufstr+char(buf[i])
|
||||
If {(buf[i]<>0) and }(buf[i]<>10) Then bufstr := bufstr+char(buf[i])
|
||||
Else bufstr := bufstr+' ';
|
||||
// filter #10 and 0, replace by ' '
|
||||
{id3v2}
|
||||
@ -177,39 +203,40 @@ Begin
|
||||
If pos('ID3',bufstr)<> 0 Then
|
||||
Begin
|
||||
i := pos('TPE1',bufstr);
|
||||
If i<> 0 Then artistv2 := copy(bufstr,i+11,buf[i+7]-1);
|
||||
If i<> 0 Then artistv2 := GetID3TagStr;
|
||||
i := pos('TP1',bufstr);
|
||||
If i<> 0 Then artistv2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
|
||||
i := pos('TIT2',bufstr);
|
||||
If i<> 0 Then titlev2 := copy(bufstr,i+11,buf[i+7]-1);
|
||||
If i<> 0 Then titlev2 := GetID3TagStr;
|
||||
|
||||
i := pos('TT2',bufstr);
|
||||
If i<> 0 Then titlev2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
|
||||
i := pos('TRCK',bufstr);
|
||||
If i<> 0 Then trackv2 := copy(bufstr,i+11,buf[i+7]-1);
|
||||
|
||||
If i<> 0 Then
|
||||
trackv2 := GetID3TagStr;
|
||||
i := pos('TRK',bufstr);
|
||||
If i<> 0 Then trackv2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
|
||||
If length(trackv2)>3 Then trackv2 := '';
|
||||
If i<> 0 Then begin
|
||||
trackv2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
If length(trackv2)>3 Then
|
||||
trackv2 := '';
|
||||
end;
|
||||
|
||||
i := pos('TAL',bufstr);
|
||||
If i<> 0 Then albumv2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
i := pos('TALB',bufstr);
|
||||
If i<> 0 Then albumv2 := copy(bufstr,i+11,buf[i+7]-1);
|
||||
If i<> 0 Then albumv2 := GetID3TagStr;
|
||||
|
||||
i := pos('TYE',bufstr);
|
||||
If i<> 0 Then yearv2 := copy(bufstr,i+7,buf[i+5]-1);
|
||||
|
||||
i := pos('TYER',bufstr);
|
||||
If i<> 0 Then yearv2 := copy(bufstr,i+11,buf[i+7]-1);
|
||||
artistv2 := (artistv2);
|
||||
titlev2 := (titlev2);
|
||||
albumv2 := (albumv2);
|
||||
yearv2 := (yearv2);
|
||||
trackv2 := (trackv2);
|
||||
If length(yearv2)>5 Then yearv2 := '';
|
||||
If i<> 0 Then begin
|
||||
yearv2 := GetID3TagStr;
|
||||
If iso and (length(yearv2)>5) Then
|
||||
yearv2 := '';
|
||||
end;
|
||||
End;
|
||||
except WriteLn(Filename+' -> exception while reading id3v2 tag... skipped!!'); end;
|
||||
{id3v1}
|
||||
@ -230,42 +257,29 @@ Begin
|
||||
tagpos := pos('TAG',bufstr)+3;
|
||||
If tagpos<>3 Then
|
||||
Begin
|
||||
ftitle := (copy(bufstr,tagpos,30));
|
||||
fartist := (copy(bufstr,tagpos+30,30));
|
||||
falbum := (copy(bufstr,tagpos+60,30));
|
||||
fyear := copy(bufstr,tagpos+90,4);
|
||||
ftitle := TrimRight(copy(bufstr,tagpos,30));
|
||||
fartist := TrimRight(copy(bufstr,tagpos+30,30));
|
||||
falbum := TrimRight(copy(bufstr,tagpos+60,30));
|
||||
fyear := TrimRight(copy(bufstr,tagpos+90,4));
|
||||
|
||||
FGenreID := buf[tagpos+124];
|
||||
if FGenreID>high(ID3Genre) then FGenreID:=0;
|
||||
If buf[125]<>0 Then {check for id3v1.1}
|
||||
fcomment := (copy(bufstr,tagpos+94,30))
|
||||
fcomment := TrimRight(copy(bufstr,tagpos+94,30))
|
||||
Else
|
||||
Begin
|
||||
fcomment := (copy(bufstr,tagpos+94,28));
|
||||
fcomment := TrimRight(copy(bufstr,tagpos+94,28));
|
||||
If (buf[tagpos+123])<>0 Then ftrack := IntToStr(buf[tagpos+123])
|
||||
Else ftrack := '';
|
||||
End;
|
||||
End; // else writeln('no id3v1 tag');
|
||||
except WriteLn(Filename+' -> exception while reading id3v1 tag... skipped!!'); end;
|
||||
If ((artistv2<>'')) And (CactusConfig.id3v2_prio Or (artist='')) Then Fartist := TrimRight(
|
||||
artistv2);
|
||||
If ((titlev2<>'')) And (CactusConfig.id3v2_prio Or (title='')) Then Ftitle := TrimRight(
|
||||
titlev2);
|
||||
If ((albumv2<>'')) And (CactusConfig.id3v2_prio Or (album='')) Then Falbum := TrimRight(
|
||||
albumv2);
|
||||
If ((commentv2<>'')) And (CactusConfig.id3v2_prio Or (comment='')) Then Fcomment := TrimRight
|
||||
(
|
||||
commentv2
|
||||
);
|
||||
If ((yearv2<>'')) And (CactusConfig.id3v2_prio Or (year='')) Then Fyear := TrimRight(yearv2);
|
||||
If ((trackv2<>'')) And (CactusConfig.id3v2_prio Or (track='')) Then ftrack := TrimRight(
|
||||
trackv2);
|
||||
|
||||
Fartist := TrimRight(Fartist);
|
||||
Ftitle := TrimRight(Ftitle);
|
||||
Falbum := TrimRight(FAlbum);
|
||||
Fcomment := TrimRight(FComment);
|
||||
Fyear := TrimRight(FYear);
|
||||
If ((artistv2<>'')) And (CactusConfig.id3v2_prio Or (artist='')) Then Fartist := artistv2;
|
||||
If ((titlev2<>'')) And (CactusConfig.id3v2_prio Or (title='')) Then Ftitle := titlev2;
|
||||
If ((albumv2<>'')) And (CactusConfig.id3v2_prio Or (album='')) Then Falbum := albumv2;
|
||||
If ((commentv2<>'')) And (CactusConfig.id3v2_prio Or (comment='')) Then Fcomment := commentv2;
|
||||
If ((yearv2<>'')) And (CactusConfig.id3v2_prio Or (year='')) Then Fyear := yearv2;
|
||||
If ((trackv2<>'')) And (CactusConfig.id3v2_prio Or (track='')) Then ftrack := trackv2;
|
||||
fileclose(mp3filehandle);
|
||||
end;
|
||||
|
||||
@ -277,7 +291,7 @@ Var
|
||||
bufstr, tmptag, tmps: string;
|
||||
i, z: integer;
|
||||
id3v1str: string[31];
|
||||
mp3filehandle: longint;
|
||||
mp3filehandle: THandle;
|
||||
Begin
|
||||
{id3v2}
|
||||
mp3filehandle := fileopen(Filename,fmOpenRead);
|
||||
@ -473,7 +487,7 @@ Begin
|
||||
If length(track)>0 Then
|
||||
Begin
|
||||
buf[126] := 0;
|
||||
buf[127] := StrToInt(track);
|
||||
buf[127] := GetId3V1Track;
|
||||
End;
|
||||
|
||||
mp3filehandle := fileopen(Filename,fmOpenWrite);
|
||||
|
Reference in New Issue
Block a user