unit AddTrackToSystem;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,id3,global,albumartist,jpeg, ExtCtrls;

type
  TAddTrack = class(TForm)
    Ok: TButton;
    Cancel: TButton;
    oldalbum: TRadioButton;
    newalbum: TRadioButton;
    newalbumframe: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    ebartist: TEdit;
    ebalbum: TEdit;
    ebtrack: TEdit;
    Label3: TLabel;
    repeataction: TCheckBox;
    actiontimer: TTimer;
    procedure CancelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure newalbumClick(Sender: TObject);
    procedure oldalbumClick(Sender: TObject);
    procedure OkClick(Sender: TObject);
    procedure repeatactionClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actiontimerTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  AddTrack: TAddTrack;
  art,alb,path : string;
  id : tid3tag;
  repeatactionset : boolean = false;

  function addtrackdialog(aart : string;aalb : string;apath : string;var oart,oalb : string;firstrun : boolean) : integer;

implementation

{$R *.dfm}

function addtrackdialog(aart : string;aalb : string;apath : string;var oart,oalb : string;firstrun : boolean) : integer;
begin
art:=aart;
alb:=aalb;
path:=apath;
Addtrack := TAddTrack.Create(Application);
  try
  //NB: Pete is the swine that got me writing this after two cans of larger!
    AddTrack.repeataction.checked:=repeatactionset;
    if firstrun=true then  begin
      AddTrack.repeataction.checked:=false;
      repeatactionset:=false;
    end;
    Addtrack.Showmodal;
    finally
    result := addtrack.modalresult;
    oalb:=alb;
    oart:=art;
    screen.Cursor:=crDefault;
    Addtrack.free;
    end;
end;

function getmp3count(pth : string) : integer;
var
sr : TSearchRec;
begin
result:=0;
if findfirst(pth+'\Track*.mp?',faAnyfile,sr)=0 then inc(result);

while(findnext(sr)=0) do inc(result);
end;

procedure TAddTrack.CancelClick(Sender: TObject);
begin
modalresult:=mrCancel;

end;



procedure TAddTrack.FormCreate(Sender: TObject);
var
s : string;
begin
screen.Cursor:=crHourGlass;
caption:='Add Track'+' - '+path;
oldalbum.Caption:='Add Track To: '+art+' '+alb;
id:=readtag(path);
screen.Cursor:=crDefault;
ebalbum.Text:=trim(id.album);
ebartist.Text:=trim(id.artist);
ebtrack.Text:=trim(id.track);
if ebtrack.text='' then  begin
 s:=ExtractFileDir(path);
 s:=copy(path,length(s)+2,(length(path)-length(s)));
 s:=copy(s,1,length(s)-4);
 ebtrack.text:=s;
end;
end;

procedure TAddTrack.FormShow(Sender: TObject);
begin
if (repeataction.checked=true) then actiontimer.enabled:=true;
end;

procedure TAddTrack.newalbumClick(Sender: TObject);
begin
newalbumframe.Enabled:=true;
ebartist.SetFocus;
end;

procedure TAddTrack.OkClick(Sender: TObject);
var
fl : textfile;
wpath : string;
bp : Tbitmap;
jpg : TJpegImage;
trk : string;
c : integer;
begin
if ebtrack.text='' then begin
  messagebox(self.handle,'You must specify a name for the track.','Error',MB_OK);
  exit;
end;

if oldalbum.Checked=true then begin
  wpath:=config.path+'\'+art+'__'+alb;
  end else begin
    if (validname(ebartist.Text+' '+ebalbum.text) = false) or (ebartist.Text='') or (ebalbum.Text='') then begin
    messagebox(self.handle,'Album and Artist fields must be filled in and cannot contain special characters (\/:*?"<>|)','Error',MB_OK);
     exit;
    end;
    art:=ebartist.Text;
    alb:=ebalbum.Text;
    wpath:=config.path+'\'+ebartist.Text+'__'+ebalbum.text;
  try
   if directoryexists(wpath)=false then begin
    mkdir(wpath);
    bp:=tbitmap.create;
    bp.width:=300;
    bp.height:=300;
    generatecover(bp,ebartist.Text+' '+ebalbum.text);
    jpg:=TJpegImage.Create;
    jpg.Assign(bp);
    bp.free;
    jpg.SaveToFile(wpath+'\title.jpg');
    addalbum(ebartist.Text,ebalbum.text);
   end;
  except;
   messagebox(self.handle,'Could not create folder. Possibly it already exists','Error',MB_OK);
   exit;
  end;

end;


screen.Cursor:=crHourGlass;
c:=getmp3count(wpath);
trk:=wpath+'\'+'track'+format('%.2d',[c+1])+'.mp';
if (uppercase(copy(path,length(path),1))='G') then trk:=trk+'G' else trk:=trk+'3';

try
 assignfile(fl,wpath+'\title.dat');
 if fileexists(wpath+'\title.dat') then append(fl) else rewrite(fl);
 writeln(fl,ebtrack.text);
 closefile(fl);
except
messagebox(self.handle,'Error writing title file.','Error',MB_OK);
ModalResult:=mrCancel;
end;
screen.Cursor:=crHourGlass;
copyfile(pchar(path),pchar(trk),false);
screen.Cursor:=crDefault;
modalresult:=MrOk;
end;

procedure TAddTrack.oldalbumClick(Sender: TObject);
begin
newalbumframe.Enabled:=false;
end;

procedure TAddTrack.repeatactionClick(Sender: TObject);
begin
repeatactionset:=repeataction.checked;
end;

procedure TAddTrack.actiontimerTimer(Sender: TObject);
begin
okclick(nil);
end;

end.