Files
lazarus-ccr/applications/cactusjukebox/source/directories.pas
jesusr 00a628b20a 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
2011-07-26 06:36:09 +00:00

215 lines
5.0 KiB
ObjectPascal
Executable File

{
Directory/library manager dialog for Cactus Jukebox
written by Sebastian Kraft, <c> 2006-2008
Contact the author at: sebastian_kraft@gmx.de
This Software is published under the GPL
}
Unit directories;
{$mode objfpc}{$H+}
Interface
Uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
Buttons, CheckLst, StdCtrls;
Type
{ Tdirwin }
Tdirwin = Class(TForm)
add: TButton;
Button1: TButton;
dirlistview: TListBox;
removebut: TButton;
rescan: TButton;
rescanall: TButton;
SelectDirectoryDialog1: TSelectDirectoryDialog;
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Procedure addClick(Sender: TObject);
Procedure removeClick(Sender: TObject);
Procedure rescanClick(Sender: TObject);
Procedure rescanallClick(Sender: TObject);
Private
{ private declarations }
Public
{ public declarations }
End;
Var
dirwin: Tdirwin;
Implementation
Uses mainform,status,mediacol, config;
{ Tdirwin }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.FormCreate(Sender: TObject);
Var i: integer;
Begin
dirlistview.Clear;
For i:= 0 To MediaCollection.dirlist.Count-1 Do
Begin
dirlistview.Items.Add(MediaCollection.dirlist[i]);
End;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.addClick(Sender: TObject);
Var
i: integer;
Begin
SelectDirectoryDialog1.InitialDir := CactusConfig.HomeDir;
If SelectDirectoryDialog1.Execute=true Then
Begin
For i:= 0 To MediaCollection.dirlist.Count-1 Do
Begin
If pos(MediaCollection.dirlist[i], SelectDirectoryDialog1.FileName)=1 Then
Begin
ShowMessage('Directory '+SelectDirectoryDialog1.FileName+
' is still part of directorylist');
exit;
End;
End;
Caption := 'Please wait... Scanning...';
Enabled := false;
Application.ProcessMessages;
MediaCollection.add_directory(SelectDirectoryDialog1.FileName);
dirlistview.Items.Add(SelectDirectoryDialog1.FileName);
If MediaCollection.ItemCount>0 Then
Begin
Main.ArtistTree.Selected := Nil;
main.update_artist_view;
update_title_view;
End;
Caption := 'Directories';
Enabled := true;
End;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.removeClick(Sender: TObject);
Var removedir: string;
i: integer;
Begin
removedir := dirlistview.Items[dirlistview.ItemIndex];
If removedir[length(removedir)]=DirectorySeparator Then delete(removedir,length(removedir), 1);
i := 0;
Repeat
Begin
If pos(removedir, ExtractFileDir(MediaCollection.items[i].path))=1 Then
Begin
MediaCollection.remove(i);
dec(i);
End;
inc(i);
End;
Until i>=MediaCollection.ItemCount;
MediaCollection.DirList.Delete(dirlistview.ItemIndex);
dirlistview.Items.Delete(dirlistview.ItemIndex);
Main.ArtistTree.Selected := Nil;
main.update_artist_view;
update_title_view;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.rescanClick(Sender: TObject);
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 := ExcludeTrailingPathDelimiter(dirlistview.Items[n]);
dirlistview.show;
i := 0;
Repeat
Begin
If pos(rescandir, ExtractFileDir(MediaCollection.items[i].path))=1 Then
Begin
MediaCollection.remove(i);
dec(i);
End;
inc(i);
End;
Until i>=MediaCollection.ItemCount;
MediaCollection.DirList.Delete(n);
Caption := 'Please wait... Scanning...';
Enabled := false;
main.update_artist_view;
update_title_view;
Application.ProcessMessages;
MediaCollection.add_directory(rescandir);
End;
If MediaCollection.ItemCount>0 Then
Begin
Main.ArtistTree.Selected := Nil;
main.update_artist_view;
update_title_view;
End;
Caption := 'Directories';
Enabled := true;
End;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.rescanallClick(Sender: TObject);
Var i: integer;
Begin
For i:= 0 To dirlistview.Items.Count-1 Do
dirlistview.Selected[i] := true;
rescanClick(Nil);
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Tdirwin.Button1Click(Sender: TObject);
Begin
Close;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
initialization
{$I directories.lrs}
End.