viewgit/viewgit/inc/functions.php:49 Function create_function() is deprecated [8192]
Index
» Empathy Jukebox : Commitdiff f2d046
Saved project
diff --git a/Main.pas b/Main.pas index 9e6d074..e278f43 100644 --- a/Main.pas +++ b/Main.pas @@ -1937,12 +1937,12 @@ numoftracks,currenttrack : string; begin if playmode=0 then begin -str(string(dplaylist.items.count,numoftracks)); +str(dplaylist.items.count,string(numoftracks)); playlistcaption.caption:=numoftracks+' tracks'; end; if playmode=1 then begin -str(string(dplaylist.itemindex+1,currenttrack); +str(dplaylist.itemindex+1,string(currenttrack)); str(dplaylist.items.count,numoftracks); playlistcaption.caption:=currenttrack+'\'+numoftracks+' tracks'; end; diff --git a/Standalone_Components/Tspinglobe/__history/tspinningglobe.pas.~1~ b/Standalone_Components/Tspinglobe/__history/tspinningglobe.pas.~1~ new file mode 100644 index 0000000..3766d8a --- /dev/null +++ b/Standalone_Components/Tspinglobe/__history/tspinningglobe.pas.~1~ @@ -0,0 +1,164 @@ +unit tspinningglobe; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,stdctrls,extctrls; + + +type TSpinGlobeThread = class (TThread) + private + { Private declarations } + fupdateproc : TNotifyEvent; + protected + procedure Execute; override; + procedure Update; + public + property UpdateProc : TNotifyEvent write fupdateproc; +end; + + +type + TSpinGlobe = class(TCustomControl) + private + updatethread : TSpinGlobeThread; + count : integer; + o : tbitmap; + a : hrgn; + { Private declarations } + + + protected + + { Protected declarations } + public + h : thandle; + fpp : pointer; + + constructor Create(AOwner : TComponent); override; + destructor Destroy;override; + procedure advance(Sender : Tobject); + + procedure start; + procedure stop; + procedure Paint; override; + procedure Resize; override; + + + { Public declarations } + published + { Published declarations } + end; + +procedure Register; + +implementation +{$R spinglobe.RES} + + + +constructor TSpinglobe.Create(AOwner : TComponent); + +begin + o:=tbitmap.create; + inherited Create (AOwner); + Parent := (AOwner AS TWinControl); + // controlstyle:=controlstyle-[csOpaque]; + + width:=152; + height:=152; + + + + count:=0; + o.width:=width; + o.height:=height; + advance(self); + paint; + updatethread:=TSpinGlobeThread.Create(true); + updatethread.FreeOnTerminate:=true; + updatethread.UpdateProc:=advance; + +end; + +destructor TSpinglobe.Destroy(); +begin + o.free; + inherited Destroy; + updatethread.Terminate; + if updatethread.Terminated=false then updatethread.WaitFor; + +end; + +procedure TSpinglobe.Paint; +begin +if parent=nil then exit; + +inherited paint; +canvas.Draw(0,0,o); +end; + +procedure Tspinglobe.advance; +begin +if self=nil then exit; +inc(count); +if count>9 then count:=1; +o.LoadFromResourceName(hinstance,'G'+inttostr(count)); +paint; +end; + +procedure Register; +begin + RegisterComponents('LibrarySmith', [TSpinGlobe]); +end; + + +procedure TSpinglobe.start; +begin +visible:=true; +if updatethread.Suspended then updatethread.Resume; +end; + +procedure TSpinglobe.stop; +begin +visible:=false; +if updatethread.Suspended=false then updatethread.Suspend; +end; + + +procedure Tspinglobe.Resize(); +begin + a:=CreateEllipticRgn(1,1, Width, Height); + if a<>0 then begin + setwindowrgn(self.handle ,a,true); + end; + +end; + + +procedure TSpinGlobeThread.Update; +begin +fupdateproc(self); +end; + +procedure TSpinGlobeThread.Execute; +var +n : integer; +begin + n:=0; + while 1<2 do begin + inc(n); + if n=5 then begin + synchronize(Update); + sleep(100); + if terminated=true then exit; + n:=0; + end; + + end; +end; + + + +end. + diff --git a/Standalone_Components/Tspinglobe/tspinningglobe.pas b/Standalone_Components/Tspinglobe/tspinningglobe.pas index 3766d8a..08f5473 100644 --- a/Standalone_Components/Tspinglobe/tspinningglobe.pas +++ b/Standalone_Components/Tspinglobe/tspinningglobe.pas @@ -116,7 +116,7 @@ end; procedure TSpinglobe.start; begin visible:=true; -if updatethread.Suspended then updatethread.Resume; +if updatethread.Suspended then updatethread.Start; end; procedure TSpinglobe.stop; diff --git a/__history/Main.pas.~161~ b/__history/Main.pas.~161~ deleted file mode 100644 index 73bc846..0000000 --- a/__history/Main.pas.~161~ +++ /dev/null @@ -1,3791 +0,0 @@ -unit Main; - -// Copyright (C) 2012 Matthew Smith - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -interface - -uses - Forms,Windows, Messages, SysUtils, Classes, Graphics, Controls, Menus, - ImgList, ExtCtrls, ComCtrls, Buttons, StdCtrls, MPlayer,checklst, Gauges, - mmsystem, ToolWin,registry,windowsversion, - shellapi,OleCtrls,jpeg,global,volume, -{$IFNDEF kiosk} - printcatalog, -{$ENDIF} -videoform, -inifuncs, Dialogs,resourceskins,commctrl,dateutils,id3,networkstream, - System.ImageList,uitypes; - -const INIFILE='Empathy.ini'; -const VOLINCREMENTS =150; - - -type TMDeviceChange = record - Msg : Cardinal; - Event : Uint; - dwData : pointer; - Result : Longint; - end; - - - type - Tmainform = class(TForm) - playpanel: TPanel; - albumlist: TComboBox; - Timers: TTimer; - Playlist: TPanel; - Dalbumlist: TComboBox; - dtracklist: TListBox; - dplaylist: TListBox; - playlistcaption: TLabel; - numberoftracks: TTimer; - showcover: TCheckBox; - tracklist: TListBox; - transport: TPanel; - Stop: TSpeedButton; - play: TSpeedButton; - fwd: TSpeedButton; - bck: TSpeedButton; - timemodebut: TSpeedButton; - counter: TLabel; - tr: TLabel; - skipforward: TSpeedButton; - skipback: TSpeedButton; - progress: TTrackBar; - coverPanel: TPanel; - cover: TImage; - Bevel1: TBevel; - Bevel2: TBevel; - pause: TSpeedButton; - vol: TTrackBar; - vol_triangle: TImage; - audition: TSpeedButton; - mutebut: TSpeedButton; - dj: TSpeedButton; - Bevel3: TBevel; - coverpickbut: TSpeedButton; - thumbspopupmenu: TPopupMenu; - SelectAlbum: TMenuItem; - Addalltrackstoplaylist: TMenuItem; - ReturntoPlayer: TMenuItem; - dplaylistmenu: TPopupMenu; - popupplay: TMenuItem; - popupremove: TMenuItem; - Cancel1: TMenuItem; - playbutmod: TShape; - Add: TButton; - del: TButton; - toolbar: TPanel; - butcd: TImage; - butcdlist: TImage; - butjukebox: TImage; - butrandom: TImage; - butimages: TImageList; - bevel4: TBevel; - Bevel5: TBevel; - MainMenu: TMainMenu; - filemenu: TMenuItem; - fileexit: TMenuItem; - modemenu: TMenuItem; - Cdplayerbut: TMenuItem; - playlistbut: TMenuItem; - randombut: TMenuItem; - jukeboxbut : TMenuItem; - clearlist: TButton; - helpmenu: TMenuItem; - menuabout: TMenuItem; - reload: TMenuItem; - insert: TButton; - N2: TMenuItem; - buttonstimer: TTimer; - SaveDialog: TSaveDialog; - OpenDialog: TOpenDialog; - procedure albumlistChange(Sender: TObject); - procedure tracklistClick(Sender: TObject); - procedure MPNotify(Sender: TObject); - procedure playClick(Sender: TObject); - procedure StopClick(Sender: TObject); - procedure bckClick(Sender: TObject); - procedure fwdClick(Sender: TObject); - procedure TimersTimer(Sender: TObject); - procedure timemodebutClick(Sender: TObject); - procedure playlistbutClick(Sender: TObject); - procedure CdplayerbutClick(Sender: TObject); - procedure randombutClick(Sender: TObject); - procedure DalbumlistChange(Sender: TObject); - procedure dtracklistClick(Sender: TObject); - procedure AddClick(Sender: TObject); - procedure dplaylistClick(Sender: TObject); - procedure DelClick(Sender: TObject); - procedure restoreClick(Sender: TObject); - procedure picturepanelClick(Sender: TObject); - procedure clearlistClick(Sender: TObject); - procedure coverMouseUp(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure numberoftracksTimer(Sender: TObject); - procedure coverClick(Sender: TObject); - procedure showcoverClick(Sender: TObject); - procedure skipbackward(Sender: TObject); - procedure progressChange(Sender: TObject); - procedure skipforwardClick(Sender: TObject); - procedure pauseClick(Sender: TObject); - procedure volChange(Sender: TObject); - procedure mutebutClick(Sender: TObject); - procedure auditionClick(Sender: TObject); - procedure djClick(Sender: TObject); - procedure coverpickbutClick(Sender: TObject); -// procedure thumbviewgo(show : boolean); - procedure FormCreate(Sender: TObject); - procedure trackeditClick(Sender: TObject); - procedure OptionsClick(Sender: TObject); - procedure ThumbscancelClick(Sender: TObject); - procedure FormResize(Sender: TObject); - procedure ReturntoPlayerClick(Sender: TObject); - procedure AddalltrackstoplaylistClick(Sender: TObject); - procedure FormKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); - procedure popupplayClick(Sender: TObject); - procedure popupremoveClick(Sender: TObject); - procedure burncdbutClick(Sender: TObject); - procedure launchscreensaverClick(Sender: TObject); - procedure dplaylistDblClick(Sender: TObject); - procedure jukeboxbutClick(Sender: TObject); - procedure tracklistDblClick(Sender: TObject); - procedure dtracklistDblClick(Sender: TObject); - procedure ripcdClick(Sender: TObject); - procedure FormActivate(Sender: TObject); - procedure buttonsMouseMove(Sender: TObject; Shift: TShiftState; X, - Y: Integer); - procedure butfilterClick(Sender: TObject); - procedure filtermenuClick(Sender: TObject); - procedure fileexitClick(Sender: TObject); - procedure menuaboutClick(Sender: TObject); - procedure reloadClick(Sender: TObject); - function loadtitles (sender : TListbox; albumindex : integer) : boolean; - procedure hyperlink_helpfilesystemClick(Sender: TObject); - procedure hyperlink_helpalbuminfoClick(Sender: TObject); - procedure helpClick(Sender: TObject); - procedure insertClick(Sender: TObject); - procedure dplaylistDragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); - procedure dplaylistDragDrop(Sender, Source: TObject; X, Y: Integer); - procedure menuprintClick(Sender: TObject); - procedure buttonstimerTimer(Sender: TObject); - procedure butexploreClick(Sender: TObject); - procedure menufiletagClick(Sender: TObject); - function maketitles(path : string;gettrack : integer;var fn : string) : boolean; - -{$IFNDEF kiosk} - procedure saveClick(Sender: TObject); - procedure openClick(Sender: TObject); - -{$ENDIF} - private - - { Private declarations } - - procedure doDJ(album : string); - - procedure drawtriangle(pos : integer); - procedure mpplay; - - // procedure WMDeviceChange(var msg : TMDeviceChange); message WM_DEVICECHANGE; - procedure hideall; - procedure setupfrequency; - - - - - - public - {$IFNDEF NEWMEDIAPLAYER} - mp : TMediaplayer; - {$ENDIF} - {$IFDEF NEWMEDIAPLAYER} - mp : TDXMP; - {$ENDIF} - - function buildcontentlist(forceload : boolean) : boolean; - procedure initlistboxes; - -procedure sorttimemode; -function setuptrackname(num : integer) : string; - - { Public declarations } - end; - - -talbumtype = record -album : string; -artist : string; -path : string; -added : TDateTime; -end; - -type - albumtype = array of talbumtype; - PlayListMatrixTrk = array of integer; - PlayListMatrixAlb = array of string; - PlayListMatrixAlbNumber = array of integer; - - - - - type tdylist = record - data : array of string; - count : integer; - end; - - Type - MCI_DGV_SETAUDIO_PARMS = record - dwCallback : DWORD; - dwItem : DWORd; - dwValue : DWORD; - dwOver : DWORD; - lpstrAlgorithm : PChar; - lpstrQuality : PChar; - end; - - -function readini : boolean; -procedure writeini; -procedure showerror(txt : string; errortype : integer); -procedure alphablendbitmapwithcolor(blend : tbitmap;blendcolor : tcolor;source : tbitmap;alpha : real); -function extractalbumandaristfrompath(s : string;var artist : string;var album : string) : string; -function loadbitmap(target : timage;rc : string) : longint; -procedure badfile(fn : string;act : string); -function runprogram(commandline : string; windowstate : integer;waitfor :boolean) : boolean; -procedure loadbmpcompressedresource(resname : string;dest : tbitmap); -procedure loadblankmp3file; - - -const - -DONTCHECKCACHE=false; -cdwidth =260; -cdheight =260; -VERSIONNO ='3.0'; -{$IFDEF WIN32} - APPTITLE ='Empathy (x86) v'+VERSIONNO; -{$ENDIF} -{$IFDEF WIN64} - APPTITLE ='Empathy (x64) v'+VERSIONNO; -{$ENDIF} - -PLAYLISTFILEHEADER = 'EMPATHYPLAYLISTFILEFORMAT'; - -DIVISION = 1000; -vtxtst_STATEMENT = 1; -vtxtst_QUESTION = 2; -vtxtst_COMMAND =4; -vtxtst_WARNING = 8; -vtxtst_READING = 16; -vtxtst_NUMBERS = 32; -vtxtst_SPREADSHEET = 64; -vtxtst_VERYHIGH = 128; -vtxtst_HIGH = 256; -vtxtst_NORMAL = 512; - MCI_SETAUDIO = 73; - MCI_DGV_SETAUDIO_VOLUME = 02; - MCI_DGV_SETAUDIO_ITEM = {viewgit}{/viewgit}800000; - MCI_DGV_SETAUDIO_VALUE = 000000; - - -var -SLOWPROCESSOR : boolean = FALSE; -DEBUGON : boolean = false; -MAINFORMWIDTH, MAINFORMHEIGHT : integer; -thumbsdone : boolean = false; -mainform: Tmainform; -albumcount : integer = 0; -album : albumtype; -currentalbumpath : string; -dcurrentalbumpath : string; -playmode : integer; -timermode: integer; -dcurrentlyplayingtrack : integer; -dCurrentTrack : integer; -dPlayListMatrixTrk : PlayListMatrixTrk; -dPlayListMatrixAlb : PlayListMatrixAlb; -albumref : albumtype; -albumrefonload : albumtype; -albumrefonloadcount : integer; -audition_mode : boolean; -winposX,winposY : integer; -olditem: integer; -paused : boolean; -muted : boolean; -//preferences : Tpreferences; -deviceremoveable : boolean; -cancelthumbs : boolean; -thumbundercursor : TObject; -progressmove : boolean; -progresslastpos : dword; -hinttimercount : integer; -thumb : array of timage; -thumbcount : integer = 0; -loadedblankmp3file: boolean = false; -blankfilepath : string; -phrases : tdylist; -genre : tdylist; -artisttype : tdylist; -kiosk : boolean = true; -tvmode : boolean = false; - - - -autoplaytime : integer = 60; -WEBSITEURL : string; -firstrun : boolean = true; -cached : boolean = false; -dice1 : tbitmap; -dice2 : tbitmap; -dice3 : tbitmap; -dice4 : tbitmap; - -procedure uninstallfont; - -implementation - -uses random_dialog, cover,loadjpegorbmp, burn, jukeboxform, warn,aboutform,albuminfo, - backgroundplay, tagmp3files, empripmain, jbnoalbums - {$IFNDEF kiosk} - tracklistform - {$ENDIF}; - - // empripmain; //videditform; - - - -{$R *.DFM} -{$R WindowsXP.res} -{$R empathyres.res} - - - -procedure loadbmpcompressedresource(resname : string;dest : tbitmap); -var -sr : Tresourcestream; -begin -sr:=TresourceStream.create(hinstance,resname,RT_RCDATA); -dest.LoadFromStream(sr); -sr.free; -end; - - - - -procedure badfile(fn : string;act : string); -begin -{$IFNDEF kiosk} -messagedlg('Error '+act+' file "'+fn+'".',mterror,[mbOk],0); - -{$ENDIF} - -end; - - - -function loadbitmap(target : timage;rc : string) : longint; -begin -result:=0; -try -target.Picture.Bitmap.LoadFromResourceName(hinstance,rc); -//loadjpegresource(rc,target.picture.bitmap); -except; -result:=-1; -end; -end; - - -function extractalbumandaristfrompath(s : string;var artist : string;var album : string) : string; -var -x : integer; -a : integer; -begin -a:=1; -while(a<>0) do begin - a:=pos('\',s); - s:=copy(s,a+1,length(s)-a); -end; - -//s:=copy(s,length(config.pathtocd)+1,(length(s)-length(config.pathtocd))); -x:=pos('__',s); -artist:=copy(s,0,x-1); -album:=copy(s,x+2,length(s)-x+2); -result:=album+' - '+artist; -end; - - - -procedure alphablendbitmapwithcolor(blend : tbitmap;blendcolor : tcolor;source : tbitmap;alpha : real); -var -x,y : integer; -rin,rout : pbytearray; -outval : integer; -br,bg,bb : integer; - -function rangecheck(inp : integer) : byte; -begin - if inp>255 then outval:=255; - if inp<0 then outval:=0; - result:=byte(inp); -end; - -begin -if SLOWPROCESSOR=TRUE then exit; -source.width:=blend.width; -source.height:=blend.height; -source.pixelformat:=pf24bit; -br:=getrvalue(ColorToRGB(blendcolor)); -bg:=getgvalue(ColorToRGB(blendcolor)); -bb:=getbvalue(ColorToRGB(blendcolor)); - - -with source do begin - for y:=0 to source.height -1 do begin - rin:=scanline[y]; - rout:=source.scanline[y]; - x:=0; - // application.processmessages; - while x< 3*width-1 do begin - // application.processmessages; - - outval:=round((alpha*(rin[x]-br))+br); - rout[x]:=rangecheck(outval); - // application.processmessages; - outval:=round((alpha*(rin[x+1]-bg))+bg); - rout[x+1]:=rangecheck(outval); - // application.processmessages; - - outval:=round((alpha*(rin[x+2]-bb))+bb); - rout[x+2]:=rangecheck(outval); - x:=x+3; - end; - end; -end; -end; - - -procedure mainmenuvisible(i : boolean); -begin -mainform.filemenu.enabled:=i; -mainform.modemenu.enabled:=i; -//mainform.toolsmenu.enabled:=i; -end; - - -procedure installfont; -const -fontname='EMPTDIGI.TTF'; -var - rs : TResourceStream; - pwd : array [0..MAX_PATH] of char; - wd : string; - areg : tregistry; - rscreate : boolean; -begin -rs:=nil; -fillchar(pwd,sizeof(pwd),0); -getwindowsdirectory(pwd,sizeof(pwd)); -wd:=pwd; -wd:=wd+'\fonts\'+fontname; -rscreate:=false; -if fileexists(wd)=false then begin - try - rscreate:=true; - rs:=TResourceStream.Create(hInstance, 'FONT', RT_RCDATA); - rs.SavetoFile(wd); - SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); -except -end; -end; - -areg:=tregistry.create; -try -areg.closekey; -areg.rootkey:=HKEY_LOCAL_MACHINE; -if getwindowsversion>2 then areg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) else areg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); -areg.writestring('Empathy Digital Font (TrueType)',fontname); -except; -end; -AddFontResource(PChar(wd)); -if rscreate=true then rs.free; -end; - - -procedure uninstallfont; -const -fontname='EMPTDIGI.TTF'; -var - pwd : array [0..MAX_PATH] of char; - wd : string; - areg : tregistry; -begin -fillchar(pwd,sizeof(pwd),0); -getwindowsdirectory(pwd,sizeof(pwd)); -wd:=pwd; -wd:=wd+'\fonts\'+fontname; - try - RemoveFontResource(PChar(wd)); - SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); - sleep(100); - Deletefile(wd); -except -end; -areg:=tregistry.create; -try -areg.rootkey:=HKEY_LOCAL_MACHINE; -if getwindowsversion>2 then areg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) else areg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); -areg.deletevalue('Empathy Digital Font (TrueType)'); -except; -end; - -end; - - -function readini : boolean; -var -x : integer; -filterbytes : tfilterbytearray; -pth : string; -a : tinifile; -s : string; -altinipath : string; -cp : array[0..1024] of char; - -begin -a:=tinifile.create; -gettemppath(1023,cp); - -result:=true; -pth:=paramstr(0); -a.inipath:= ExtractFileDir(pth)+'\'+INIFILE; - -a.section:='main'; - -altinipath:=a.readppString('AltINI',''); - - -if altinipath<>'' then a.inipath:=altinipath; - -if fileexists(a.inipath)=false then begin -application.messagebox('Please install or create an .ini file in the program folder','empathy.ini not found. Cannot continue.'); -application.terminate; -halt; -end; - - -config.path:=a.readppString('Path',''); -if config.path='' then begin -//application.messagebox('Cannot find path entry in [Main] section of .ini file','Error reading empathy.ini. Cannot continue.'); -//application.terminate; -config.path:=extractfilepath(paramstr(0)); -//halt; -end; - -config.backgroundstream:=a.readppString('backgroundstream',''); - -cached:=a.readppBool('Cached','0'); -cachepath:=a.readppstring('CachePath',cp); -if ((cachepath='') or (DirectoryExists(cachepath)=false))then cachepath:=cp; - - -if config.path[length(config.path)]<>'\' then config.path:=config.path+'\'; -if config.path='' then begin -result:=false; - -end; - -SLOWPROCESSOR:=a.readppBool('SlowProcessor','0'); -config.volume:=a.readppInteger('Volume','7'); -config.Dj_default:=a.readppBool('DJ On','0'); -config.Dj_comment:=a.readppBool('DJ Comment','0'); -config.lastalbum:=a.readppInteger('LastAlbum','1'); -config.dlastalbum:=a.readppInteger('dLastAlbum','1'); -config.jlastalbum:=a.readppInteger('jLastAlbum','1'); -config.auditiontimeout:=a.readppInteger('AuditionTimeout','5'); -config.burnpath:=a.readppstring('burnpath',' '); -config.autoexec:=a.readppstring('autoexec',''); -if config.autoexec<>'' then begin - runprogram(config.autoexec,1,false); -end; -config.screensaverpath:=a.readppString('screensaverpath',' '); -config.bgstyle:=a.readppinteger('BackgroundStyle',''); -config.borderstyle:=a.readppinteger('BorderStyle',''); -config.bgcolor:=a.readppinteger('BackgroundColor',''); -config.bordercolor:=a.readppinteger('BorderColor',''); -config.cdopt:=a.readppinteger('CDopt',''); -config.timeannounce:=a.readppBool('timeannounce','1'); -config.mediaplayermode:=a.readppBool('mediaplayermode','0'); -config.hideexit:=a.readppBool('hideexit','0'); -config.hidepanel:=a.readppBool('jukeboxcontrolpanel','1'); -config.litewarn:=a.readppbool('litewarn','1'); -config.defaultfilteron:=a.readppbool('defaultfilteron','0'); -config.autoplay:=a.readppbool('autoplay','1'); -autoplaymode:=config.autoplay; -config.lock:=a.readppbool('lock','0'); -config.norepeat:=a.readppbool('norepeat','0'); -config.jukeboxaddall:=a.readppbool('jukeboxaddall','1'); -config.jukeboxvolumepanel:=a.readppbool('jukeboxvolumepanel','1'); -config.password:=a.readppstring('password',''); -config.copytrackdest:=a.readppstring('CopyTrackDestination',''); -config.monitor:=a.readppinteger('Monitor','0'); -config.errorlog:=a.readppstring('ErrorLog',''); -config.videomonitor:=a.readppinteger('VideoMonitor',inttostr(config.monitor)); -config.fontsize:=a.readppinteger('FontSize','7'); -config.showminimize:=a.readppinteger('ShowMinimize','0'); -config.poweroff:=a.readppBool('PowerOff','0'); -config.disable3D:=a.readppBool('Disable3D','0'); -config.wraponunderscore:=a.readppBool('WrapOnUnderscore','1'); - -a.section:='Genre'; -genre.count:=0; -x:=0; -n:=1; - - -s:=''; -while x=0 do begin - setlength(genre.data,n); - s:=a.readppstring(inttostr(n-1),''); - if s<>'' then begin - genre.data[n-1]:=s; - end else break; -inc(n); -end; -genre.count:=n-1; - -a.section:='ArtistType'; -ArtistType.count:=0; -x:=0; -n:=1; -while x=0 do begin - setlength(ArtistType.data,n); - s:=a.readppstring(inttostr(n-1),''); - if s<>'' then begin - ArtistType.data[n-1]:=s; - end else break; -inc(n); -end; -ArtistType.count:=n-1; - -a.section:='main'; -config.username:=a.readppstring('Username',''); -config.serial:=a.readppstring('Serial',''); - -config.bitrate:=a.readppInteger('Bitrate','192'); -config.cddbserver:=a.readppString('CDDBServer','www.freedb.org'); -config.cddbcgi:=a.readppString('CDDBcgi','/~cddb/cddb.cgi'); -config.email:=a.readppString('email','user@isp'); -config.networksettings:=a.readppstring('networksettings',''); - -s:=a.readppstring('defaultfilter',''); -if (s<>'') and config.defaultfilteron=true then begin -s:=a.readppstring('defaultfilter',''); -setlength(filterbytes,length(s)); -filterbytes:=tfilterbytearray(s); -filter:=bytearraytofilter(filterbytes); -end; - - -a.section:='Phrases'; -phrases.count:=0; -x:=0; -n:=1; -while x=0 do begin -s:=a.readppstring(inttostr(n-1),''); - setlength(phrases.data,n); - if s<>'' then begin phrases.data[n-1]:=s; - end else break; -inc(n); -end; -phrases.count:=n-1; - -a.section:='Skins'; - - config.theme.sbut.Skin:=a.readppstring('sbut',''); - config.theme.sbut.Color:=a.readppinteger('cbut',''); - config.theme.skeypad.Skin:=a.readppstring('skeypad',''); - config.theme.skeypad.Color:=a.readppinteger('ckeypad',''); - config.theme.slcorner.Skin:=a.readppstring('slcorner',''); - config.theme.slcorner.Color:=a.readppinteger('clcorner',''); - config.theme.srcorner.Skin:=a.readppstring('srcorner',''); - config.theme.srcorner.Color:=a.readppinteger('crcorner',''); - config.theme.sblcorner.Skin:=a.readppstring('sblcorner',''); - config.theme.sblcorner.Color:=a.readppinteger('cblcorner',''); - config.theme.sbrcorner.Skin:=a.readppstring('sbrcorner',''); - config.theme.sbrcorner.Color:=a.readppinteger('cbrcorner',''); - config.theme.salphabuttons.Skin:=a.readppstring('salphabuttons',''); - config.theme.salphabuttons.Color:=a.readppinteger('calphabuttons',''); - config.theme.swidebut.Skin:=a.readppstring('swidebut',''); - config.theme.swidebut.Color:=a.readppinteger('cwidebut',''); - config.theme.sbackground.Skin:=a.readppstring('sbackground',''); - config.theme.sbackground.Color:=a.readppinteger('cbackground',''); - config.theme.alphaorientation:=a.readppinteger('alphaorientation','2'); - - a.section:='Commercial'; - config.creditsystem:=a.readppbool('creditsystem','0'); - config.playspercoincredit:=a.readppinteger('playspercoincredit','5'); - config.allowfreecredit:=a.readppbool('allowfreecredit','1'); - config.bgvolumemax:=a.readppinteger('bgvolumemax','30'); - config.bgduration:=a.readppinteger('bgduration','15'); - config.bgwaittime:=a.readppinteger('bgwaittime','15'); - config.trackslogfile:=a.readppstring('trackslogfile',''); - config.credittotal:=a.readppinteger('credittotal','0'); - config.freecredittotal:=a.readppinteger('freecredittotal','0'); - config.bgvolume:=a.readppinteger('bgvolume','15'); - - - - a.free; - -end; - -procedure writeini; -var -n : integer; -filterbytes : tfilterbytearray; -pth : string; -a : tinifile; -s : string; -altinipath : string; -begin -a:=tinifile.create; -try - -pth:=paramstr(0); -a.inipath:= ExtractFileDir(pth)+'\'+INIFILE; -a.section:='Main'; - -altinipath:=a.readppString('AltINI',''); - -if altinipath<>'' then a.inipath:=altinipath; - - - - -a.WritePPString('path',config.path); -a.WritePPString('burnpath',config.burnpath); -a.WritePPString('screensaverpath',config.screensaverpath); -a.WritePPInteger('Volume',config.volume); -a.WritePPBool('DJ On',config.Dj_default); -a.WritePPString('autoexec',config.autoexec); -a.WritePPBool('DJ Comment',config.Dj_comment); -a.WritePPInteger('LastAlbum',config.lastalbum); -a.WritePPInteger('dLastAlbum',config.dlastalbum); -a.WritePPInteger('jLastAlbum',config.jlastalbum); -a.WritePPInteger('AuditionTimeout',config.auditiontimeout); -a.WritePPinteger('BackgroundStyle',config.bgstyle); -a.WritePPinteger('BorderStyle',config.borderstyle); -a.WritePPinteger('BackgroundColor',config.bgcolor); -a.WritePPinteger('BorderColor',config.bordercolor); -a.WritePPinteger('CDopt',config.cdopt); -a.WritePPbool('timeannounce',config.timeannounce); -a.WritePPbool('hideexit',config.hideexit); -a.WritePPbool('litewarn',config.litewarn); -a.WritePPbool('defaultfilteron',config.defaultfilteron); -a.WritePPbool('autoplay',config.autoplay); -a.WritePPbool('lock',config.lock); -a.WritePPbool('norepeat',config.norepeat); -a.WritePPstring('password',config.password); -a.WritePPbool('jukeboxvolumepanel',config.jukeboxvolumepanel); -a.WritePPbool('jukeboxaddall',config.jukeboxaddall); - -fillchar(filterbytes,0,0); -filterbytes:=tfiltertobytearray(filter); -s:=string(filterbytes); -a.WritePPString('defaultfilter',s); - - -//if reg.keyexists('Phrases') then reg.deletekey('Phrases'); -a.section:='Phrases'; -if phrases.count>0 then for n:=0 to phrases.count-1 do a.WritePPstring(inttostr(n),phrases.data[n]); - -a.section:='Genre'; - -if genre.count>0 then for n:=0 to genre.count-1 do a.WritePPstring(inttostr(n),genre.data[n]); - - -a.Section:='ArtistType'; -if ArtistType.count>0 then for n:=0 to ArtistType.count-1 do a.WritePPstring(inttostr(n),ArtistType.data[n]); - -a.section:='main'; -a.WritePPstring('Username',Config.username); -a.WritePPstring('Serial',Config.serial); -a.WritePPString('Path',config.path); -a.WritePPInteger('Bitrate',config.bitrate); -//a.WritePPString('CDDBServer',config.cddbserver); -//a.WritePPString('CDDBcgi',config.cddbcgi); -a.WritePPString('email',config.email); -a.writeppbool('PowerOff',config.poweroff); - - -a.section:='Skins'; -a.writeppstring('sbut',config.theme.sbut.Skin); -a.writeppinteger('cbut',config.theme.sbut.Color); -a.writeppstring('skeypad',config.theme.skeypad.Skin); -a.writeppinteger('ckeypad',config.theme.skeypad.Color); -a.writeppstring('slcorner',config.theme.slcorner.Skin); -a.writeppinteger('clcorner',config.theme.slcorner.Color); -a.writeppstring('srcorner',config.theme.srcorner.Skin); -a.writeppinteger('crcorner',config.theme.srcorner.Color); -a.writeppstring('sblcorner',config.theme.sblcorner.Skin); -a.writeppinteger('cblcorner',config.theme.sblcorner.Color); -a.writeppstring('sbrcorner',config.theme.sbrcorner.Skin); -a.writeppinteger('cbrcorner',config.theme.sbrcorner.Color); -a.writeppstring('salphabuttons',config.theme.salphabuttons.Skin); -a.writeppinteger('calphabuttons',config.theme.salphabuttons.Color); -a.writeppstring('swidebut',config.theme.swidebut.Skin); -a.writeppinteger('cwidebut',config.theme.swidebut.Color); -a.writeppstring('sbackground',config.theme.sbackground.Skin); -a.writeppinteger('cbackground',config.theme.sbackground.Color); -a.writeppinteger('alphaorientation',config.theme.alphaorientation); - -a.section:='Commercial'; -a.WritePPBool('creditsystem',Config.creditsystem); -a.WritePPInteger('playspercoincredit',Config.playspercoincredit); -a.WritePPBool('allowfreecredit',config.allowfreecredit); -a.WritePPInteger('bgvolumemax',config.bgvolumemax); -a.WritePPInteger('bgduration',config.bgduration); -a.WritePPInteger('bgwaittime',config.bgwaittime); -a.writeppstring('trackslogfile',config.trackslogfile); -a.writeppinteger('credittotal',config.credittotal); -a.writeppinteger('freecredittotal',config.freecredittotal); -a.writeppinteger('bgvolume',config.bgvolume); - - - - -a.Free; - - -except; -end; -end; - -procedure loadblankmp3file; -var -rs : Tresourcestream; -fs : tfilestream; -begin -blankfilepath:=cachepath+'\blank.mp3'; - -if fileexists(blankfilepath)=false then begin -try -rs:=Tresourcestream.create(hinstance,'blank',RT_RCDATA); -fs:=tfilestream.create(blankfilepath,fmCreate); -fs.copyfrom(rs,0); -fs.free; -except -messagedlg('Cannot create temporary file. Please check .INI file and make sure '+cachepath+ - ' exists and can be written to'#13#10'or specify and alterative temporary location under the "cachepath=" section of the .INI file',mtError,[MbOk],0); -//halt; -end; -end; - - -if fileexists(blankfilepath)=false then begin -messagedlg('Cannot find temporary file. Please check .INI file and make sure '+cachepath+ - ' exists and can be written to'#13#10'or specify and alterative temporary location under the "cachepath=" section of the .INI file',mtError,[MbOk],0); -//halt; -end; - -mainform.mp.close; -mainform.mp.filename:=blankfilepath; - -try -//mainform.mp.open; -except; -end; -loadedblankmp3file:=true; - -end; - - - - -procedure Tmainform.albumlistChange(Sender: TObject); -var -n : integer; -spp,scrap : string; -var -o : tbitmap; -begin -o:=nil; -n:=albumlist.itemindex+1; -config.lastalbum:=n; - -if albumcount<>0 then begin - spp:=album[n].path; - screen.cursor:=crhourglass; - loadjpegbmp(config.path+spp,o); - cover.picture.bitmap.assign(o); - o.free; - cover.refresh; - screen.cursor:=crdefault; - albumlist.hint:=albumlist.items[albumlist.itemindex]; -end; - if albumcount<>0 then if loadtitles(tracklist,n)=false then begin - maketitles(album[n].path,0,scrap); - loadtitles(tracklist,n) - end; - -if cdplayerbut.checked=true then begin -skipforward.enabled:=false; -skipback.enabled:=false; -progress.enabled:=false; -play.enabled:=false; -fwd.enabled:=false; -bck.enabled:=false; -pause.enabled:=false; -timermode:=0; -end; -end; - - -procedure killspeech; -begin - -end; - - -procedure showerror(txt : string; errortype : integer); -var -showerrortext : string; -fl : textfile; -dt : string; -begin -killspeech; -if errortype=0 then showerrortext:='File:'+copy(txt,1,length(txt)-1)+'? does not exist'; -if errortype=1 then showerrortext:='File:'+txt+' is corrupt'; - -if (jukebox<>nil) then begin - if jukebox.visible=true then begin - jukebox.domessage(showerrortext); - end; -end; - -if config.errorlog<>'' then begin - assignfile(fl,config.errorlog); - try - if fileexists(config.errorlog) then append(fl) else rewrite(fl); - begin - if (filesize(fl)>(10240 div 128)) then begin; closefile(fl); rewrite(fl);end; - datetimetostring(dt,'ddddd tt',now); - writeln(fl,dt+' - '+showerrortext); - closefile(fl); - end; - except; - end; -end; - -jukebox.panelshapeMouseDown(jukebox.rejectshape2,mbleft,[], 0, 0); - - -if config.creditsystem=true then begin -//if autoplaymode=true then startautoplay; -end; - - - - -//if ((uppercase(paramstr(1))='/J') or (KIOSK=true)) then exit; - -end; - -function gettrackatfilepos(i : integer;pth : string) : string; -var -s : string; -begin -mainform.maketitles(pth,i,s); -result:=s; -end; - -procedure Tmainform.tracklistClick(Sender: TObject); -var -ts : string; -fn : string; -seconds : integer; -minutes : integer; -sec : string; -begin -progressmove:=true; -progress.position:=0; -progressmove:=false; -If tracklist.itemindex<9 then ts:='0'+InttoStr(tracklist.itemindex+1) else ts:=InttoStr(tracklist.itemindex+1); - -If (tracklist.itemindex>-1) then begin - fn:=currentalbumpath+'\TRACK'+ts+'.MP3'; - //if fileexists(fn)=false then fn:=currentalbumpath+'\'+tracklist.items[tracklist.itemindex]+'.mp3'; - -if fileexists(fn)=false then begin - fn:=currentalbumpath+'\'+gettrackatfilepos(tracklist.itemindex+1,copy(currentalbumpath,length(config.path),length(currentalbumpath))); -end; - -end; -timers.enabled:=false; -if fn='' then begin -counter.caption:='---'; -mainform.caption:='No track'; -exit; -end; - - - - - -mp.filename:=fn; -mp.notify:=false; -if fileexists(fn)=false then begin - //extractalbumartist(fn,alb,art); - showerror(fn,0); - exit; -end; - -try -mp.open; -except -//extractalbumartist(fn,alb,art); -showerror(fn,1); -exit; -end; - - setupfrequency; - seconds:=mp.length div 1000; - minutes:= seconds div 60; - seconds:=seconds-(minutes*60); - sec := inttostr(seconds); - if seconds<10 then sec:='0'+inttostr(seconds); - counter.caption:=inttostr(minutes)+':'+sec; - Tr.Caption:='LEN'; -stop.down:=true; -play.enabled:=true; -fwd.enabled:=true; -bck.enabled:=true; -pause.enabled:=true; -skipforward.enabled:=true; -skipback.enabled:=true; -progress.enabled:=true; -if albumlist.Items.count = 0 then exit; -mainform.caption:=albumlist.items[albumlist.itemindex]+' : '+tracklist.items[tracklist.itemindex]; -if jukebox<>nil then jukebox.domessage('Now playing: '+mainform.caption); -end; - -procedure Tmainform.MPNotify(Sender: TObject); -var -alb : string; -wasautoplaying: boolean; -begin -if paused=true then begin -exit; -end; - - -wasautoplaying:=autoplaying; -If (Mp.NotifyValue=nvSuccessful) then autoplaying:=false; - - -If playlistbut.checked=true then begin - -If (Mp.NotifyValue=nvSuccessful) and (playmode=1) then begin - If dcurrentlyplayingtrack+1<=dplaylist.items.count-1 then begin - dcurrentlyplayingtrack:=dcurrentlyplayingtrack+1; - playlistpanel.lb.highlighteditem2:=dcurrentlyplayingtrack; - if playlistpanel.Visible=true then playlistpanel.lb.Paint; - alb:=setuptrackname(dcurrentlyplayingtrack); - playmode:=0; - MP.Notify:=true; - timers.enabled:=true; - sorttimemode; - - - if showcover.checked=true then begin - covershow(dPlayListMatrixAlb[dcurrentlyplayingtrack],true); - end; - - if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); - mpplay; - if mutebut.down=true then volchange(mutebut) else volchange(sender); - playmode:=1; - play.down:=true; - end - else begin - stop.down:=true; - timers.enabled:=false; - counter.caption:='---'; - mainform.caption:='No track'; - if jukebox.visible=true then jukebox.domessage(''); - vol.Position:=config.volume; - jukebox.backgroundtimer.tag:=1; - jukebox.backgroundtimercount:=0; - if (wasautoplaying=true) and (autoplaymode=true) then startautoplay; - end; - end; - MP.Notify:=true; - -end; - -If playlistbut.checked=true then exit; - - If (Mp.NotifyValue=nvSuccessful) and (playmode=1) then begin - If tracklist.itemindex+1<tracklist.items.count then begin - tracklist.itemindex:=tracklist.itemindex+1; - tracklistClick(tracklist); - playmode:=0; - MP.Notify:=true; - timers.enabled:=true; - sorttimemode; - //alb:=setuptrackname(dcurrentlyplayingtrack); - if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); - - mpplay; - if mutebut.down=true then volchange(mutebut) else volchange(sender); - playmode:=1; - play.down:=true; - end - else begin - stop.down:=true; - timers.enabled:=false; - vol.Position:=config.volume; - if autoplaymode=true then startautoplay; - end; - end; - MP.Notify:=true; -end; - - - -procedure Tmainform.playClick(Sender: TObject); -var -alb : string; -begin - -playbutmod.visible:=false; - -{Play List Style} -//if play.down=false then begin -//pause.down:=true; -//pauseclick(Sender); -//exit; -//end; - - -if paused=true then begin -mpplay; - -if mutebut.down=true then volchange(mutebut) else volchange(sender); -paused:=false; -exit; -end; - - - -dcurrentlyplayingtrack :=dplaylist.itemindex; -playlistpanel.lb.highlighteditem2:=dcurrentlyplayingtrack; -if playlistpanel.Visible=true then playlistpanel.lb.Paint; - - -If dcurrentlyplayingtrack=-1 then dcurrentlyplayingtrack:=0; -if playlistbut.checked = true then begin -alb:=setuptrackname(dcurrentlyplayingtrack); -if dj.down=true then doDJ(dplaylistMatrixAlb[dcurrentlyplayingtrack]); - - if showcover.checked=true then begin - covershow(dplaylistMatrixAlb[dcurrentlyplayingtrack],true); - end; - -playmode:=1; -sorttimemode; -play.down:=true; -mpplay; -if mutebut.down=true then volchange(mutebut) else volchange(sender); -timers.enabled:=true; -end; - -if playlistbut.checked = true then exit; - -{CD Style} -//if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); - -playmode:=1; -sorttimemode; -mpplay; -if mutebut.down=true then volchange(mutebut) else volchange(sender); -timers.enabled:=true; - -end; - -procedure Tmainform.StopClick(Sender: TObject); -begin -//if jukebox<>nil then if jukebox.visible=true then jukebox.domessage(''); -if assigned(video) then if video.Visible=true then video.hide; -if jukebox.coverimagepanel.Visible=true then jukebox.coverimagepanel.Visible:=false; - -progressmove:=true; -progress.position:=0; -progressmove:=false; -paused:=false; -killspeech; -if playlistbut.checked=true then begin -dcurrentlyplayingtrack :=dplaylist.itemindex; - -if (uppercase(copy(mainform.mp.filename,length(mainform.mp.filename),1))='G') then loadblankmp3file; - - -If dcurrentlyplayingtrack=-1 then dcurrentlyplayingtrack:=0; -playmode:=0; -application.processmessages; -try -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -mp.stop; -except -end; -dtracklistclick(dtracklist); -timers.enabled:=false; -exit; -end; - -playmode:=0; -try -mp.stop; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -except -end; - -timers.enabled:=false; -tracklistclick(tracklist); - -end; - - - -procedure Tmainform.bckClick(Sender: TObject); -var -dplaymodewas : integer; -begin -vol.position:=config.volume; -dplaymodewas:=0; -If playlistbut.checked=true then begin -if playmode=1 then begin - dplaymodewas:=1; - end; - if (dplaylist.itemindex>0) then dplaylist.itemindex:=dplaylist.itemindex-1; - dplaylistclick(sender); - if dplaymodewas=1 then playclick(sender); - exit -end; - - - -If playmode=0 then begin - If tracklist.itemindex-1>-1 then begin - tracklist.itemindex:=tracklist.itemindex-1; - tracklistClick(tracklist); - end; -end; - -If (playmode=1) then begin - If tracklist.itemindex-1>-1 then begin - tracklist.itemindex:=tracklist.itemindex-1; - tracklistClick(tracklist); - playmode:=0; - MP.Notify:=true; - sorttimemode; - mpplay; - if mutebut.down=true then volchange(mutebut) else volchange(sender); - timers.enabled:=true; - playmode:=1; - play.down:=true; - end - else begin - If tracklist.itemindex-1>-1 then begin - tracklist.itemindex:=tracklist.itemindex-1; - tracklistClick(tracklist); - timers.enabled:=false; - end; - end; - - end; - If playmode=1 then play.down:=true; - If playmode=0 then stop.down:=true; -end; - -procedure Tmainform.fwdClick(Sender: TObject); -var -dplaymodewas : integer; -begin -vol.position:=config.volume; -If playlistbut.checked=true then begin - dplaymodewas:=0; - if playmode=1 then begin - dplaymodewas:=1; - //stopclick(sender); - //stop.down:=true; - end; - if (dplaylist.itemindex>=0) then begin - dplaylist.itemindex:=dplaylist.itemindex+1; - dplaylistclick(sender); - if dplaymodewas=1 then playclick(sender); - end; -exit -end; - - -If playmode=0 then begin - If tracklist.itemindex+1<tracklist.items.count then begin - tracklist.itemindex:=tracklist.itemindex+1; - tracklistClick(tracklist); - End; - End; - -If (playmode=1) then begin - If tracklist.itemindex+1<tracklist.items.count then begin - tracklist.itemindex:=tracklist.itemindex+1; - tracklistClick(tracklist); - playmode:=0; - MP.Notify:=true; - sorttimemode; - mpplay; - if mutebut.down=true then volchange(mutebut) else volchange(sender); - - timers.enabled:=true; - playmode:=1; - play.down:=true; - end - else begin - If tracklist.itemindex+1<tracklist.items.count then begin - tracklist.itemindex:=tracklist.itemindex+1; - tracklistClick(tracklist); - timers.enabled:=false; - end; - end; - end; - If playmode=1 then play.down:=true; - If playmode=0 then stop.down:=true; -end; - -procedure Tmainform.TimersTimer(Sender: TObject); -var - -seconds : integer; -minutes : integer; -sec : string; -begin -application.processmessages; -//if audition_mode=true then begin -//if mp.Position>5000then fwdclick(Sender); -//end; - progressmove:=true; -try -if mp.error=0 then progress.max:=Round(mp.length/1000); - progress.position:=Round(mp.position/1000); -except -try -mp.stop; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -except; -end; -end; - progressmove:=false; - seconds:=progress.position; - minutes:= seconds div 60; - seconds:=seconds-(minutes*60); - sec := inttostr(seconds); - If timermode=0 then begin - if seconds<10 then sec:='0'+inttostr(seconds); - counter.caption:=inttostr(minutes)+':'+sec; -end; - - -If timermode=1 then begin -try - seconds:=round((mp.length-mp.position)/1000); - minutes:= seconds div 60; - seconds:=seconds-(minutes*60); - sec := inttostr(seconds); - if seconds<10 then sec:='0'+inttostr(seconds); - counter.caption:=inttostr(minutes)+':'+sec; -except -mp.stop; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -end; -end; - -end; - - -procedure Tmainform.timemodebutClick(Sender: TObject); -begin -if timermode=0 then begin -timermode:=1; -end -else begin -timermode:=0; -end; -sorttimemode; -end; - - - - -procedure Tmainform.sorttimemode; -begin -if timermode=1 then begin -counter.hint:='Time Remaining'; -tr.hint:='Time Remaining'; -tr.caption:='TR' -end -else begin -counter.hint:='Time Elapsed'; -tr.hint:='Time Elapsed'; -tr.caption:='TE' -end; -end; - - - - - - -procedure Tmainform.playlistbutClick(Sender: TObject); -begin -dj.enabled:=true; -//open.enabled:=true; -//save.enabled:=true; -playlistbut.checked:=true; -if dalbumlist.itemindex=-1 then begin -dalbumlist.itemindex:=albumlist.itemindex; -dalbumlistchange(nil); -end; - -numberoftracks.enabled:=true; -If playlistbut.checked=true then begin -//trackedit.enabled:=false; -playlist.visible:=true; -end; -buttonsMouseMove(nil,[],0,0); -end; - - - - -procedure Tmainform.CdplayerbutClick(Sender: TObject); -begin -dj.enabled:=false; -//save.enabled:=false; -numberoftracks.enabled:=false; -cdplayerbut.checked:=true; -If cdplayerbut.checked=true then begin -//trackedit.enabled:=true; -playlist.visible:=false; -end; -buttonsMouseMove(nil,[],0,0); -end; - - - -procedure Tmainform.randombutClick(Sender: TObject); - -begin -rnd_dialog.showmodal; -playlistbutClick(playlistbut); -playlistbut.checked:=true; -screen.cursor:=crDefault; -dplaylist.itemindex:=0; -//trackedit.enabled:=false; -buttonsMouseMove(nil,[],0,0); -end; - - - - - -procedure Tmainform.DalbumlistChange(Sender: TObject); -var -n : integer; -spp,scrap: string; -{playlist Style} -begin - - n:=dalbumlist.itemindex+1; - config.dlastalbum:=n; -if albumcount<>0 then begin - spp:=album[n].path; - dalbumlist.hint:=dalbumlist.items[dalbumlist.itemindex]; -end; - if albumcount<>0 then if loadtitles(dtracklist,n)=false then begin - maketitles(album[n].path,0,scrap); - loadtitles(dtracklist,n) - end; - dtracklist.itemindex:=0; -end; - -procedure Tmainform.dtracklistClick(Sender: TObject); -var -hintitem : string; -begin -if (dtracklist.itemindex>-1) and (dtracklist.items.count>0) then hintitem:='"'+dtracklist.items[dtracklist.itemindex]+'"'; - -add.hint:='Add '+hintitem+' to end of playlist'; -Insert.hint:='Insert "'+hintitem+'" into playlist'; - -If dtracklist.itemindex>-1 then add.enabled:=true; -If dplaylist.itemindex>-1 then del.enabled:=true; -If dplaylist.itemindex=-1 then del.enabled:=false; - -end; - -procedure Tmainform.AddClick(Sender: TObject); -var -n : integer; -alb,art : string; -begin -audition.enabled:=true; - -if (config.norepeat=true) and (dplaylist.itemindex>-1) then begin - for n:=dplaylist.itemindex to dplaylist.items.count-1 do begin; - if (dplaylistMatrixAlb[n]=dcurrentalbumpath) and (dplaylistMatrixTrk[n]=dtrackList.itemindex+1) then begin - jukebox.credit.RefundCredit; - jukebox.domessage('NO CREDIT TAKEN - TRACK ALREADY IN QUEUE'); - exit; - end; - end; -end; - - - -if (dtracklist.itemindex>-1) then begin - dplaylist.items.add (dtracklist.items[dtracklist.itemindex]); - setlength(dplaylistmatrixtrk,dplaylist.items.count+1); - setlength(dplaylistMatrixAlb,dplaylist.items.count+1); - - dplaylistMatrixAlb[dcurrenttrack]:=dcurrentalbumpath; - dplaylistMatrixTrk[dcurrenttrack]:=dtrackList.itemindex+1; - dcurrenttrack:=dcurrenttrack+1; - - if jukebox<>nil then begin - if dtracklist.itemindex+1<dtracklist.items.count then jukebox.domessage('Added Track: '+dtracklist.items[dtracklist.itemindex]); - if config.trackslogfile<>'' then begin - extractalbumartist(dcurrentalbumpath,alb,art); - jukebox.log.writeentry(art,alb,dtracklist.items[dtracklist.itemindex]); - end; - end; - - - if dplaylist.items.count>0 then begin - play.enabled:=true; - fwd.enabled:=true; - bck.enabled:=true; - pause.enabled:=true; - end; - - if dplaylist.itemindex=-1 then begin - dplaylist.itemindex:=0; - dplaylistclick(Sender); - end; - -end; - -if dplaylist.items.count>0 then begin - //save.enabled:=true; - clearlist.enabled:=true; - end - else begin - //save.enabled:=false; - clearlist.enabled:=false; -end; - -end; - -procedure Tmainform.dplaylistClick(Sender: TObject); -begin -vol.position:=config.volume; -if dplaylist.itemindex>-1 then del.hint:='Remove "'+dplaylist.items[dplaylist.itemindex]+'" from playlist'; -If dplaylist.itemindex>-1 then del.enabled:=true; -If dplaylist.itemindex=-1 then del.enabled:=false; -if (sender=dplaylist) and (dplaylist.itemindex<>-1) and (dplaylist.itemindex<>dcurrentlyplayingtrack) then playbutmod.visible:=true; -if (sender=dplaylist) and (dplaylist.itemindex=dcurrentlyplayingtrack) then playbutmod.visible:=false; - -if sender=dplaylist then begin -// menupos:=mouse.cursorpos; -// dplaylistmenu.popup(menupos.x,menupos.y); -end; -end; - -procedure Tmainform.DelClick(Sender: TObject); -var -old : integer; -n : integer; -begin - - -old:=dplaylist.itemindex; -dplaylist.Items.delete(dplaylist.itemindex); -//if dplaylist.items.count>0 then save.enabled:=true else save.enabled:=false; - -for n:=old to dplaylist.Items.count do begin -dplaylistMatrixAlb[n]:=dplaylistMatrixAlb[n+1]; -dplaylistMatrixTrk[n]:=dplaylistMatrixTrk[n+1]; -end; - -If dplaylist.Items.count > 0 then begin -If old<=dplaylist.Items.count-1 then dplaylist.itemindex:=old else begin -dplaylist.itemindex:=old-1; -end; - -dcurrenttrack:=dcurrenttrack-1; - -end -else begin -del.enabled:=false; -clearlist.enabled:=false; -dcurrenttrack:=0; -end; -if dplaylist.items.count=0 then begin -progress.enabled:=false; -skipforward.enabled:=false; -skipback.enabled:=false; -play.enabled:=false; -bck.enabled:=false; -pause.enabled:=true; -fwd.enabled:=false; -end; -end; - - -function Tmainform.setuptrackname(num : integer) : string; -var -ts : string; -fn : string; -seconds : integer; -minutes : integer; -sec : string; -alb : string; -scrap1,scrap2 : string; -a,b : string; -videomode : boolean; -begin -if albumcount=0 then exit; -if length(dplaylistMatrixAlb)=0 then exit; - - -killspeech; -progressmove:=true; -progress.position:=0; -progressmove:=false; - - - - -alb:=dplaylistMatrixAlb[num]; - -If dplaylistMatrixTrk[num]<10 then ts:='0'+inttostr(dplaylistMatrixTrk[num]) else ts:=inttostr(dplaylistMatrixTrk[num]); -fn:=alb+'\TRACK'+ts+'.MP3'; -//if fileexists(fn)=false then fn:=alb+'\TRACK'+ts+'.MPG'; - -if fileexists(fn)=false then begin - fn:=alb+'\'+gettrackatfilepos(dplaylistMatrixTrk[num],copy(alb,length(config.path),length(alb))); -end; - - -timers.enabled:=false; -dplaylist.itemindex:=num; -if (fn='') or (alb='') then begin -counter.caption:='---'; -mainform.caption:='No track'; -jukebox.domessage(''); -exit; -end; -mp.filename:=fn; -mp.notify:=false; - - - -if fileexists(fn)=false then begin - -showerror(fn,0); -if (dplaylist.itemindex)<>dplaylist.items.count-1 then begin -fwdclick(nil); -exit; -end -else -begin -//jukebox.domessage(''); -stopclick(nil); -exit; -end; -end; - - - - -try -mp.open; -except; -showerror(mp.filename,1); -loadblankmp3file; -mainform.play.down:=true; -fn:=a+' '+b+' TRACK: '+ts; -exit; -end; - -if (uppercase(copy(mp.filename,length(mp.filename),1))='G')then begin -{$IFDEF KIOSK} -videomode:=true; -{$ENDIF} -{$IFNDEF KIOSK} -videomode:=false; -{$ENDIF} - - - - if ((videomode=false) or (config.videomonitor=0)) then begin - mainform.mp.Display:=jukebox.coverimagepanel; - jukebox.jbcovershow(''); - mainform.mp.DisplayRect:=jukebox.coverimagepanel.ClientRect; - end else begin - videoshow; - end; - - - -end; - - setupfrequency; - seconds:=mp.length div DIVISION; - minutes:= seconds div 60; - seconds:=seconds-(minutes*60); - sec := inttostr(seconds); - if seconds<10 then sec:='0'+inttostr(seconds); - counter.caption:=inttostr(minutes)+':'+sec; - Tr.Caption:='LEN'; - Tr.Refresh; -stop.down:=true; -progress.enabled:=true; -skipforward.enabled:=true; -skipback.enabled:=true; -play.enabled:=true; -fwd.enabled:=true; -bck.enabled:=true; -pause.enabled:=true; -mainform.caption:=dplaylist.items[num]+' - '+extractalbumandaristfrompath(dplaylistMatrixAlb[num],scrap1,scrap2); -result:=alb; -jukebox.domessage('Now playing '+mainform.caption); - - - -end; - - - -procedure Tmainform.restoreClick(Sender: TObject); -begin -mainform.Windowstate:=wsnormal; -mainform.BorderStyle:=bsSingle; -end; - -procedure Tmainform.picturepanelClick(Sender: TObject); -begin -restoreClick(Sender); -end; - - - -procedure Tmainform.clearlistClick(Sender: TObject); -begin -stopclick(sender); -stop.down:=true; -dcurrenttrack:=0; -dplaylist.Items.clear; -progress.enabled:=false; -skipforward.enabled:=false; -skipback.enabled:=false; -play.enabled:=false; -bck.enabled:=false; -pause.enabled:=true; -fwd.enabled:=false; -del.enabled:=false; -clearlist.enabled:=false; -end; - - -procedure Tmainform.coverMouseUp(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); -begin -//if button=mbRight then thumbviewgo(true); -end; - - - - - -procedure Tmainform.doDJ(album : string); -var -a,b,c,d : integer; -pre : string; -artist,alb,track : string; - -begin -killspeech; -randomize; -if phrases.count>0 then begin -a :=round(random(phrases.count)); -pre:=phrases.data[a]; - -a := round(random*phrases.count-1); -if (a=((phrases.count+1) div 2)) and (config.timeannounce=true) then pre:=formatdatetime('hh mm',time); -end; -extractalbumandaristfrompath(album,artist,alb); - - - - -if playlistbut.checked=true then track:=dplaylist.items[dplaylist.itemindex]; -if cdplayerbut.checked=true then track:=tracklist.items[tracklist.itemindex]; - -d := round(random*3)+1; -c := round(random*3)+1; -b := round(random*2)+1; -a:= round(random*40)+140; - -case d of -1 : d:=vtxtst_STATEMENT; -2 : d:=vtxtst_COMMAND; -3 : d:=vtxtst_WARNING; -4 : d:=vtxtst_READING; -5 : d:=vtxtst_QUESTION; - -end; - -case c of -1 : c:=vtxtst_STATEMENT; -2 : c:=vtxtst_COMMAND; -3 : c:=vtxtst_WARNING; -4 : c:=vtxtst_READING; -5 : d:=vtxtst_QUESTION; -end; - - - -if config.dj_comment=false then begin -//speak(artist+','+' '+alb+','+track ,a , d or vtxtst_VERYHIGH); -exit; -end; - -//if dplaylist.itemindex<>0 then speak(pre, a, c or vtxtst_VERYHIGH); -//if b=1 then speak(track+' by '+artist, a, d or vtxtst_VERYHIGH); -//if b=2 then speak(track+' from '+alb+' by '+artist,a , d or vtxtst_VERYHIGH); -//if b=3 then speak(track+' '+artist ,a , d or vtxtst_VERYHIGH); - -end; - - -procedure Tmainform.FormClose(Sender: TObject; var Action: TCloseAction); -begin - -{if initcovers<>nil then begin - initcovers.terminate; - // initcovers.waitfor; -end;} -killspeech; -writeini; -deletefile(blankfilepath); -application.OnMessage:=nil; -application.terminate; -end; - -procedure Tmainform.numberoftracksTimer(Sender: TObject); -var -numoftracks,currenttrack : string; -begin - -if playmode=0 then begin -str(dplaylist.items.count,numoftracks); -playlistcaption.caption:=numoftracks+' tracks'; -end; - -if playmode=1 then begin -str(dplaylist.itemindex+1,currenttrack); -str(dplaylist.items.count,numoftracks); -playlistcaption.caption:=currenttrack+'\'+numoftracks+' tracks'; -end; - - -if playlistcaption.tag=0 then begin -playlistcaption.visible:=false; -playlistcaption.tag:=1; -exit; -end; - -if playlistcaption.tag=1 then begin -playlistcaption.visible:=true; -playlistcaption.tag:=0; -end; - - -end; - - -procedure Tmainform.coverClick(Sender: TObject); -begin -covershow(currentalbumpath,true); -//if tracklist.items.count>0 then mainform.playlist.setfocus; -end; - - - - - -procedure Tmainform.showcoverClick(Sender: TObject); -begin -if (showcover.checked=true) and (playmode=1) and (dplaylist.itemindex<>-1) then begin; -if dcurrentlyplayingtrack=0 then exit; -covershow(dPlayListMatrixAlb[dcurrentlyplayingtrack],false); -end; -end; - - - -procedure Tmainform.skipbackward(Sender: TObject); -begin -progressmove:=true; -if (progress.position-(progress.linesize*2)>0) then progress.position:=progress.position-(progress.linesize*2) else progress.Position:=0; -progressmove:=false; - -progressChange(Sender); -if playmode=1 then begin -if paused=false then play.down:=true else pause.down:=true; -end; - -end; - - -procedure Tmainform.progressChange(Sender: TObject); -var -seekst : TMCI_Seek_Parms; - -begin - - -if progressmove=false then begin -fillchar(seekst,sizeof(seekst),0); -seekst.dwTo := progress.position*DIVISION; -if (progresslastpos<>seekst.dwTo) then begin -mciSendCommand(mp.DeviceID, MCI_SEEK,MCI_TO or MCI_WAIT,longint(@seekst)); -if (paused=false) and (stop.down=false) then begin mp.play; -{$IFDEF backgroundstreamplayer} - stopStream(); -{$ENDIF} - end; -end; -progresslastpos:=seekst.dwTo; -//timerstimer(self); - -end; - - -if paused=false then exit; - -if (playmode=1) and (paused=false) then begin -mpplay; -if mutebut.down=true then volchange(mutebut) else volchange(sender); -end; -end; - -procedure Tmainform.skipforwardClick(Sender: TObject); -begin -progressmove:=true; -if (progress.position+(progress.linesize*2)<progress.max) then progress.position:=progress.position+(progress.linesize*2) else progress.position:=progress.max; -progressmove:=false; - -progressChange(Sender); -if playmode=1 then begin -if paused=false then play.down:=true else pause.down:=true; -end; -end; - - -procedure Tmainform.pauseClick(Sender: TObject); -begin -if paused=true then begin -paused:=false; -play.down:=true; -mp.play; -exit; -end; -paused:=true; -try -mp.pause; -except; -end; -end; - -procedure Tmainform.volChange(Sender: TObject); -var -p : MCI_DGV_SETAUDIO_PARMS; -begin - - - - -if sender<>mutebut then mutebut.down:=false; - drawtriangle(vol.position); - { Volume: 0 - 1000 } - p.dwCallback := 0; - p.dwItem := MCI_DGV_SETAUDIO_VOLUME; - p.dwValue := 1000* vol.position div VOLINCREMENTS; - if vol.position=VOLINCREMENTS then begin - p.dwValue:=1000; - end; - if mutebut.down=true then p.dwValue:=0; - - p.dwOver := 0; - p.lpstrAlgorithm := nil; - p.lpstrQuality := nil; - - mciSendCommand(MP.DeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p)); - - if (vol.position>0) then setStreamVolume(vol.position / VOLINCREMENTS) else setStreamVolume(0); - - - - - if (volumedisplay<>nil) then begin - if (sender=vol) or (sender=mutebut) then volume.draw(vol.position); - if (jukebox.Visible=true) - //and (ripmain.visible=false) - then jukebox.SetFocus; - - end; -end; - - - -procedure tmainform.drawtriangle(pos : integer); -var -a : array [0..2] of tpoint; -fs : tfillstyle; -p : tpoint; -pnm : tpenmode; -r : integer; -m : integer; -begin -pos:=round(pos / 3.3); -r:=round( ((mainform.vol_triangle.width-2) / 10)*pos); -pnm:=pmCopy; -mainform.vol_triangle.canvas.pen.mode:=pnm; -mainform.vol_triangle.canvas.pen.width:=1; -fs:=fsborder; -mainform.vol_triangle.canvas.brush.color:=clBtnFace; -mainform.vol_triangle.canvas.floodfill(1,1,clBtnFace,fs); -//vol_triangle.canvas.brush.color:=clBtnShadow; - - -p.x:=0; -p.y:=mainform.vol_triangle.height-2; -mainform.vol_triangle.canvas.penpos:=p; -mainform.vol_triangle.canvas.pen.color:=clBtnHighlight; -mainform.vol_triangle.canvas.lineto(mainform.vol_triangle.width-1,mainform.vol_triangle.height-2); -mainform.vol_triangle.canvas.pen.color:=clBtnHighlight; -mainform.vol_triangle.canvas.lineto(mainform.vol_triangle.width-1,0); -mainform.vol_triangle.canvas.pen.color:=clBtnShadow; -mainform.vol_triangle.canvas.lineto(p.x,p.y); - -a[0].x:=2; -a[0].y:=mainform.vol_triangle.height-3; - -a[1].x:=r; -a[1].y:=(mainform.vol_triangle.height-3); - -a[2].x:=r; -m:=round(((mainform.vol_triangle.height-3)/10)*pos); - -a[2].y:=(mainform.vol_triangle.height-3)-m; - -if pos=0 then exit; -mainform.vol_triangle.canvas.brush.color:=clhighlight; -mainform.vol_triangle.canvas.polygon(a); - - - - - - -end; - - -procedure Tmainform.mutebutClick(Sender: TObject); -begin -volchange(sender); -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -end; - - -procedure Tmainform.auditionClick(Sender: TObject); -begin -if audition.down=true then begin -audition_mode:=true; -end; - -if audition.down=false then begin -audition_mode:=false; -stopclick(sender); -stop.down:=true; -end; -end; - -procedure tmainform.mpplay; -var -alb,art,fn : string; -begin -if fileexists(mp.filename)=false then begin -extractalbumartist(mp.filename,alb,art); -//fn:=alb+' '+art; -showerror(fn,0); -stop.down:=true; -exit; -end; - -counter.caption:='---'; -if audition_mode=false then try mp.play; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -except; end; -if audition_mode=true then begin -mp.endpos:=1000*config.auditiontimeout; -mp.Play; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} - -end; -end; - - - - - -procedure Tmainform.djClick(Sender: TObject); -begin -//if (DJ.down=true) then if (initspeech<>0) then begin -{$IFNDEF kiosk} -messagedlg('The Microsoft Text-to-Speech runtime files (SAPI) are not installed on this system.',mterror,[mbOk],0); - -{$ENDIF} - -dj.enabled:=false; -//end; -end; - - - -procedure Tmainform.coverpickbutClick(Sender: TObject); -begin -//thumbviewgo(true); -thumbmode:=1; -jukebox.setvisualspanel(true); -jukebox.showmodal; -albumlist.itemindex:=jukebox.thumbs.itemindex; -albumlistchange(nil); -dalbumlist.itemindex:=jukebox.thumbs.itemindex; -dalbumlistchange(nil); - -coverpickbut.down:=false; -end; - - - - - - - - -procedure tmainform.initlistboxes; -var -n : integer; -hidden : boolean; -begin - -albumlist.clear; -dalbumlist.clear; -n:=0; -albumlist.Items.Delimiter:=#2; -While (n<albumcount) do begin -n:=n+1; -//if (albumref[n].artist<>'') and (albumref[n].album <>'') then begin - albumlist.items.addobject (albumref[n].artist+' - '+albumref[n].album,@albumref[n]); - dalbumlist.items.add (albumref[n].artist+' - '+albumref[n].album); -application.processmessages; -//end; - -end; - - -//MOVE _* to end of list -albumlist.Sorted:=false; -dalbumlist.Sorted:=false; - -n:=0; -if dalbumlist.items.count>0 then begin - -while dalbumlist.items[n][1]='_' do begin - dalbumlist.items.Move(n,dalbumlist.items.count-1); - albumlist.items.Move(n,albumlist.items.count-1); -end; -end; - -initmessage('Creating albumlists..','',''); -for n:=0 to albumlist.items.count-1 do begin -album[n+1]:=talbumtype(pointer(albumlist.Items.Objects[n])^); - -{ - - for x:=1 to albumcount do begin - application.processmessages; - if comparetext(albumlist.items[n],albumref[x].artist+' - '+albumref[x].album)=0 then begin - album[n+1].artist:=albumref[x].artist; - album[n+1].album:=albumref[x].album; - end; - -end;} -end; - - - - - - -initmessage('Creating albumlists....','',''); - - -if (mp.filename<>'') and (cdplayerbut.checked=true) and (play.down=true) then -try -stopclick(nil); -except; -end; - - -if (config.lastalbum<=albumlist.items.count) and (config.dlastalbum>0) then albumlist.itemindex:=config.lastalbum-1 else albumlist.itemindex:=0; -if (config.dlastalbum<=dalbumlist.items.count) and (config.dlastalbum>0) then dalbumlist.itemindex:=config.dlastalbum-1 else dalbumlist.itemindex:=0; - -albumlistChange(albumlist); -dalbumlistChange(dalbumlist); - - - -if albumcount=0 then hidden:=false else hidden:=true; -if (hidden=false) and (dplaylist.items.count=0) then begin - cdplayerbutclick(nil); - butcdlist.visible:=hidden; - playlistbut.enabled:=hidden; -end; - -if (hidden=false) and (cdplayerbut.checked=true) and (dplaylist.items.count<>0) then begin - playlistbutclick(nil); -end; - - dtracklist.clear; - //open.enabled:=true; - add.enabled:=hidden; - insert.enabled:=hidden; - transport.Enabled:=hidden; - playpanel.visible:=hidden; - //menuprint.enabled:=hidden; - tracklist.visible:=hidden; - cover.visible:=hidden; - coverpanel.visible:=hidden; - butcdlist.visible:=true; - playlistbut.enabled:=true; - albumlist.enabled:=hidden; - dalbumlist.enabled:=hidden; - //trackedit.enabled:=hidden; - //burncdbut.enabled:=hidden; - //butcdburn.visible:=hidden; - butcd.visible:=hidden; - CDplayerbut.enabled:=hidden; - randombut.enabled:=hidden; - jukeboxbut.enabled:=true; - coverpickbut.enabled:=hidden; - butrandom.visible:=hidden; - butjukebox.visible:=hidden; - - - - - - - - - -initmessage('Initialising Jukebox....','',''); -//if (albumlist.items.count>2) then begin -gojukebox(false); -//end; - -if albumcount=0 then jukebox.domessage('No CDs on system'); -if ((uppercase(paramstr(1))='/J') or (KIOSK=true)) and (jukeboxbut.enabled=true) then begin - if (config.autoplay=true) and (albumcount>0) then begin - initautoplay; - startautoplay; - end; - jukeboxbutclick(nil); -end; - - -end; - - -procedure Tmainform.FormCreate(Sender: TObject); -const -toolbaralpha=0.35; -var -hc : hcursor; -devrem : pchar; -_devrem : string; -remv : integer; -reg : Tregistry; -pp : tbitmap; -tr : Trect; -begin -{$IFNDEF NEWMEDIAPLAYER} -mp:=Tmediaplayer.Create(self); -mp.parent:=self; -mp.Visible:=false; -mp.onnotify:=MPNotify; -{$ENDIF} - -{$IFDEF NEWMEDIAPLAYER} -mp:=TDXMP.Create(self.handle); - -{$ENDIF} - -{$IFDEF backgroundstreamplayer} -InitBassStreamPlayer(); -{$ENDIF} - -{$IFNDEF kiosk} -Save.OnClick:=SaveClick; -Open.OnClick:=OpenClick; -{$ENDIF} -mainform.DoubleBuffered:=true; -toolbar.ControlStyle:=toolbar.ControlStyle + [csOpaque]; - -//create jukebox mode backdrop; needed if jukebox for can't be launched as well (jbnoalbums) -vol.max:=VOLINCREMENTS; - -bg:=tbitmap.create; -bg.width:=screen.width; -bg.height:=screen.height; - - - -sbg:=LoadSkinResource('ADMINBACKDROP','',clNone,true); -tr.top:=0; -tr.left:=0; -tr.bottom:=screen.height; -tr.right:=screen.width; -bg.Canvas.StretchDraw(tr,sbg); -//sbg.free; - - - - - -kiosk:=false; - -{$IFDEF kiosk} -kiosk:=true; -{$ENDIF} - -{$IFDEF tv} -kiosk:=true; -tvmode:=true; -{$ENDIF} -if uppercase(paramstr(1))='KIOSK' then kiosk:=true; - - - -if (kiosk=true) then begin -kiosk:=true; -hc:=loadcursor(hinstance,'BLANKCURSOR'); -screen.Cursors[-21]:=hc; -end; - - -if readini=false then begin - if application.messagebox('Empathy is not yet configured for this user. Configure it now?','Empathy Configuration Not Found',MB_APPLMODAL or MB_ICONQUESTION or MB_YESNO)=IDNO then begin - application.terminate; - exit; - end; - - -installfont; - -config.path:='C:\'; -config.volume:=7; -config.Dj_default:=false; -config.Dj_comment:=false; -config.lastalbum:=1; -config.dlastalbum:=1; -config.jlastalbum:=1; -config.auditiontimeout:=5; -config.burnpath:=''; -config.screensaverpath:=''; -config.timeannounce:=true; -config.hideexit:=true; -config.hidepanel:=false; -config.litewarn:=true; -config.defaultfilteron:=false; -config.autoplay:=true; -config.jukeboxaddall:=true; -config.jukeboxvolumepanel:=true; -config.bitrate:=192; -config.cddbserver:='www.freedb.org'; -config.cddbcgi:='/~cddb/cddb.cgi'; -config.email:='user@isp'; - - - -config.bgstyle:=0; -config.borderstyle:=0; -config.bgcolor:=$FFFFFF; -config.bordercolor:=rgb(90,121,165); -config.timeannounce:=true; -if getwindowsversion<6 then config.cdopt:=0 else config.cdopt:=1; - -//phrases -setlength(phrases.data,10); -phrases.count:=10; -phrases.data[0]:='Great!'; -phrases.data[1]:='Nice!'; -phrases.data[2]:='Just Great!'; -phrases.data[3]:='Here we go.'; -phrases.data[4]:='Excellent'; -phrases.data[5]:='Rockin.'; -phrases.data[6]:='Good Sounds'; -phrases.data[7]:='Lets keep them coming'; -phrases.data[8]:='Super!'; -phrases.data[9]:='Yeh.'; - - - -//genre -genre.count:=27; -setlength(genre.data,genre.count); -genre.data[0]:='Ambient'; -genre.data[1]:='Blues'; -genre.data[2]:='Childrens'; -genre.data[3]:='Classical'; -genre.data[4]:='Comedy'; -genre.data[5]:='Country'; -genre.data[6]:='Dance'; -genre.data[7]:='Disco'; -genre.data[8]:='Easy Listening'; -genre.data[9]:='Electronic'; -genre.data[10]:='Folk'; -genre.data[11]:='Funk'; -genre.data[12]:='Hip Hop'; -genre.data[13]:='Jazz'; -genre.data[14]:='Latin'; -genre.data[15]:='Metal'; -genre.data[16]:='Miscellaneous'; -genre.data[17]:='New Wave'; -genre.data[18]:='Pop'; -genre.data[19]:='Punk'; -genre.data[20]:='Reggae'; -genre.data[21]:='R and B'; -genre.data[22]:='Rock'; -genre.data[23]:='Rock and Roll'; -genre.data[24]:='Spoken Word'; -genre.data[25]:='Various'; -genre.data[26]:='World'; - -//ArtistType -ArtistType.count:=10; -setlength(ArtistType.data,ArtistType.count); -ArtistType.data[0]:='Band'; -ArtistType.data[1]:='DJ'; -ArtistType.data[2]:='Duo'; -ArtistType.data[3]:='Female singer/songwriter'; -ArtistType.data[4]:='Male singer/songwriter'; -ArtistType.data[5]:='Female solo artist'; -ArtistType.data[6]:='Male solo artist'; -ArtistType.data[7]:='Orchestra'; -ArtistType.data[8]:='Ensemble'; -ArtistType.data[9]:='Various'; - - -writeini; -//showprefs(true); -end; - - -backdrp:=tbitmap.create; -backdrp.PixelFormat:=pf24Bit; -backdrp:=LoadSkinResource('BACKGROUND',config.theme.sbackground.skin,config.theme.sbackground.Color,true); -tr.top:=0; -tr.left:=0; -tr.bottom:=screen.height; -tr.right:=screen.width; -jbbg.Free; -jbbg:=tbitmap.create; -jbbg.width:=screen.width; -jbbg.height:=screen.height; -jbbg.Canvas.StretchDraw(tr,backdrp); - - -application.title:=apptitle; -mainform.caption:=apptitle; - - -filter.genre.count:=-1; -filter.artist.count:=-1; -filter.keywords.count:=-1; -filter.recordlabel.count:=-1; -filter.excludecompilations:=false; -filter.excludenoncompilations:=false; -filter.yearlower:=-1; -filter.decadelower:=-1; - - -if firstrun=true then begin -cursor:=crAppstart; -application.ProcessMessages; -pp:=tbitmap.create; -butimages.getbitmap(0,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(1,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(2,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(3,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(4,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(5,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(6,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(7,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(8,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); -butimages.getbitmap(9,pp); -alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); -butimages.add(pp,nil); - -pp.free; -end; - -toolbar.doublebuffered:=true; -buttonsmousemove(nil,[],0,0); - - -dcurrentlyplayingtrack:=0; -dCurrentTrack:=0; - -thumbsdone:=false; - -cancelthumbs:=false; -paused := false; -MAINFORMWIDTH:=mainform.width; -MAINFORMHEIGHT:=mainform.height; -winposX:=mainform.left; -winposY:=mainform.height; -//thumbsdone:=false; -playmode:=0; -deviceremoveable:=false; - - -reg:=tregistry.Create; -reg.RootKey:=HKEY_LOCAL_MACHINE; - -if getwindowsversion>2 then begin - reg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) end - else begin - reg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); - end; -if reg.valueexists('Empathy Digital Font (TrueType)')=false then installfont; -reg.free; - - - -if loadedblankmp3file=false then loadblankmp3file; - -albumlist.clear; -dalbumlist.clear; -dplaylist.clear; -del.enabled:=false; -clearlist.enabled:=false; -tracklist.clear; -dtracklist.clear; - - -playlist.visible:=false; -playpanel.visible:=true; -transport.visible:=true; -cdplayerbut.enabled:=true; -playlistbut.enabled:=true; -jukeboxbut.enabled:=true; -//burncdbut.enabled:=true; -randombut.enabled:=true; -//trackedit.enabled:=true; -cdplayerbut.checked:=true; -//options.checked:=false; -//trackedit.checked:=false; - -butcd.visible:=true; -butcdlist.visible:=true; -butrandom.visible:=true; -butjukebox.visible:=true; -//butcdburn.visible:=true; -//butcdrip.visible:=true; -bevel4.visible:=true; -bevel5.visible:=true; - - -showabout(0); - - - - - - -vol.position:=config.volume; - -_devrem:=copy(config.path,0,2); -new(devrem); -strpcopy(devrem,_devrem); -remv:=GetDriveType(devrem); -if (remv and DRIVE_REMOVABLE)=DRIVE_REMOVABLE then deviceremoveable:=true else deviceremoveable:=true; - - - - -buildcontentlist(firstrun);; {=false then begin -hideall; - if (firstrun=true) and (about.visible=true) then begin - about.close; - about.free; - screen.cursor:=crDefault; - end; -exit; -end;} - - -initlistboxes; -initmessage('Initialising......','',''); - - - - -mp.timeformat:=tfMilliseconds; -{progress.brush.color:={viewgit}{/viewgit};} -if config.lastalbum<=albumlist.items.count then albumlist.itemindex:=config.lastalbum-1 else albumlist.itemindex:=0; -if config.dlastalbum<=dalbumlist.items.count then dalbumlist.itemindex:=config.dlastalbum-1 else dalbumlist.itemindex:=0; - -albumlistChange(albumlist); -dalbumlistChange(dalbumlist); -playmode:=0; -{dcurrenttrack:=0;} - -if (about.visible=true) then begin - about.close; - about.free; - screen.cursor:=crDefault; -end; - - - - -end; - - - - -function tmainform.buildcontentlist(forceload : boolean) : boolean; -var -res,n,x : integer; -SearchRec : TSearchRec; -fAge : TDateTime; - -scrap : string; -var -SavedErrorMode : dword; -begin -if forceload=false then begin - result:=true; - if albumcount=0 then result:=false; - exit; -end; -SavedErrorMode:=SetErrorMode(SEM_FailCriticalErrors); -res:=FindFirst(config.path+'*.', {viewgit}{/viewgit}000010, searchrec); -SetErrorMode(SavedErrorMode); -initmessage('Building Album List....','',''); -if res=0 then begin -n:=1; -while res=0 do begin -if (searchrec.name='.') or (searchrec.name='..') then begin - res:=FindNext(searchrec); - continue; -end; - -setlength(albumref,n+1); -setlength(albumrefonload,n+1); -setlength(album,n+1); -x:=pos('__',searchrec.name); - -if (x>0) then begin - albumref[n].artist:=copy(searchrec.name,0,x-1); - albumref[n].album:=copy(searchrec.name,x+2,length(searchrec.name)-x+2); -end else begin - x:=pos('-',searchrec.name); - if (x>0) then begin - - albumref[n].artist:=copy(searchrec.name,0,x-1); - albumref[n].album:=copy(searchrec.name,x+2,length(searchrec.name)-x+2); - - end else begin - albumref[n].artist:=searchrec.name; - albumref[n].album:=searchrec.name; - end; - -end; - albumref[n].path:=searchrec.name; - GetFileAge(searchrec.name,fAge); - albumref[n].added:=fAge; - albumrefonload[n].path:=albumref[n].path; - - albumrefonload[n].artist:=albumref[n].artist; - albumrefonload[n].album:=albumref[n].album; - if (fileexists(config.path+'\'+searchrec.name+'\title.dat'))=false then begin - if not maketitles(searchrec.name,0,scrap) then dec(n); - end else begin - //if blank create - if (w32filesize(config.path+'\'+searchrec.name+'\title.dat')=0) then begin - if not maketitles(searchrec.name,0,scrap) then dec(n); - end; - end; - - res:=FindNext(searchrec); - - - initmessage('Building Album List: ',albumref[n].artist,albumref[n].album); - application.processmessages; -inc(n); - -end; - -albumcount:=n-1; -albumrefonloadcount:=albumcount; -FindClose(SearchRec); -result:=true; - -//if kiosk=false then loadalbuminformation; - -exit; -end; -result:=false; -end; - - - -procedure Tmainform.trackeditClick(Sender: TObject); -begin -{$IFNDEF kiosk} -trackedit.checked:=false; -if cdplayerbut.checked=true then if showtitleedit(albumlist.itemindex)=1 then begin -formcreate(sender); - -end; - -if playlistbut.checked=true then if showtitleedit(dalbumlist.itemindex)=1 then begin -formcreate(sender); -end; -{$ENDIF} -end; - -function tmainform.loadtitles (sender : TListbox; albumindex : integer) : boolean; -var -content : textfile; -spp : string; -fn : string; -begin -result:=false; -if albumcount=0 then exit; -fn:=config.path+album[albumindex].path+'\title.dat'; - AssignFile(content,fn); - spp:=album[albumindex].path; - if sender=tracklist then currentalbumpath:=config.path+spp; - if sender=dtracklist then dcurrentalbumpath:=config.path+spp; - try - Reset(content); - except; - result:=true; - exit; - end; - - sender.clear; - While (NOT EOF(content)) do begin - - Readln (content,spp); - //tracklist.items.add('['+format('%.2d',[tracknm])+'] - '+spp); - if spp<>'' then sender.items.add(spp) else sender.items.add('Unknown track name'); - end; -CloseFile(content); -result:=true; - - -end; - -function Tmainform.maketitles(path : string;gettrack : integer;var fn : string) : boolean; - -var -content : textfile; -searchrec : tsearchrec; -res : integer; -tn : string; -files : tstringlist; -fns : array of array [0..512] of ansichar; -f,l,scrap,n : integer; -t : int64; -id3 : tid3tag; -s : string; -begin -result:=false; - -files := tstringlist.Create(); - - - - -res:=FindFirst(config.path+'\'+path+'\*.*', faanyfile, searchrec); - if res=0 then begin - while res=0 do begin - if checkfileextension(Searchrec.Name) then begin tn:=copy(searchrec.Name,1,length(searchrec.name)-4); - if (tn<>'') then begin - t:=DateTimeToUnix(searchrec.FindData.ftCreationTime.dwHighDateTime); - setlength(fns,length(fns)+1); - strpcopy(fns[length(fns)-1],searchrec.Name); - files.AddObject(format('%.17d',[t])+' '+tn,@fns[length(fns)-1]); - - end; - end; - res:=FindNext(searchrec); - end; - end; - -FindClose(SearchRec); - -// Sort by Creation date -files.Sort; - -//Check for numbers on first and last files - if there remove unixtime and re-sort; - -if files.Count>0 then begin -val(copy(files[0],18,2),f,scrap); -val(copy(files[files.count-1],18,2),l,scrap); - -if (scrap=0) then begin - for n := 0 to files.count-1 do begin - files[n]:=trim(copy(files[n],18,length(files[n]))); - if (copy(files[n],length(files[n]),1)='.') then files[n]:=copy(files[n],1,length(files[n])-1); - if (copy(files[n],1,1)=' ') then begin - files[n]:=trim(copy(files[n],1,length(files[n]))); - end; - end; - files.sort; - for n := 0 to files.count-1 do begin - files[n]:=copy(files[n],4,length(files[n])); - files[n]:=trim(copy(files[n],1,length(files[n]))); - end; - for n := 0 to files.count-1 do begin - if (copy(files[n],1,2)='- ') then begin - files[n]:=trim(copy(files[n],2,length(files[n]))); - end; - end; - - -end else begin - for n := 0 to files.count-1 do begin - files[n]:=copy(files[n],19,length(files[n])); - if (uppercase(files[n])='TRACK'+format('%.2d',[n+1])) then begin - s:=strpas(pansichar(files.objects[n])); - id3:=readtag(config.path+'\'+path+'\'+s); - if (id3.track<>'') then files[n]:=id3.track; - end; - end; -end; - - - -//TODO - This causes and occasional list index out of bound -if gettrack=0 then files.SaveToFile(config.path+'\'+path+'\title.dat') else begin - if (gettrack-1<=(files.count-1)) then fn:=strpas(pansichar(files.objects[gettrack-1])); -end; - -result:=true; -end; - -files.Free; -{$IFNDEF kiosk} -//if messagedlg('No title information file found for '+album[albumindex].artist+' '+album[albumindex].album+'. Enter title info now?',mtConfirmation,[MbYes,MbNo],0)=MrYes then showtitleedit(albumindex); -{$ENDIF} -end; - -{procedure tmainform.WMDeviceChange(var msg : TMDeviceChange); -const -DEV_ARRIVAL = 00; -DEV_REMOVEQUERY = 01; -DEV_REMOVECOMPLETE = 04; - -type - -PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR; -TDEV_BROADCAST_HDR = packed record -dbch_size: DWORD; -dbch_devicetype : DWORD; -dbch_reserved : DWORD; -end; - - -PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME; -TDEV_BROADCAST_VOLUME = packed record -dbcv_size : DWORD; -dbcv_devicetype : DWORD; -dbcv_reserved : DWORD; -dbcv_unitmask : DWORD; -dbcv_flags : WORD; -end; - -var -lpdb : PDEV_BROADCAST_HDR; -lpdbv : PDEV_BROADCAST_VOLUME; -driveletter : shortint; -unitmask : longint; -begin -if deviceremoveable=false then exit; -fillchar(lpdbv,sizeof(lpdbv),0); -fillchar(lpdb,sizeof(lpdb),0); -lpdb :=PDEV_BROADCAST_HDR(msg.dwData); - -if lpdb=nil then exit; - -try -if (lpdb^.dbch_devicetype= {viewgit}{/viewgit}000002) then begin - lpdbv :=PDEV_BROADCAST_VOLUME(Msg.dwData); - end; -except -end; - -DriveLetter:=Ord('A'); -//fillchar(lpdbv,sizeof(lpdbv),0); -unitmask:=lpdbv.dbcv_unitmask; -while(unitmask and 1)=0 do begin -unitmask :=unitmask shr 1; -inc(Driveletter); -end; - -config.path:=uppercase(config.path); -if char(driveletter)<>(config.path[1]) then exit; - -case Msg.Event of - -//win 9x only -DEV_REMOVEQUERY : begin - -if playmode=1 then begin -if mp.filename<>'' then begin -try -stopclick(nil); -mp.stop; -except; -end; -end; -playmode:=0; -end; -hideall; -end; - - -DEV_REMOVECOMPLETE : begin - -if playmode=1 then begin -if mp.filename<>'' then begin -try -mp.stop; -except -end; -end; -end; -hideall; -end; - - -DEV_ARRIVAL : begin - -formcreate(mainform); -end; - -end; - - -end; - } -procedure tmainform.hideall; -begin -exit; - cdplayerbutclick(nil); - //open.enabled:=false; - playpanel.visible:=false; - butcdlist.visible:=false; - playlistbut.enabled:=false; - tracklist.visible:=false; - cover.visible:=false; - coverpanel.visible:=false; - butcdlist.visible:=false; - playlistbut.enabled:=true; - albumlist.enabled:=false; - //menuprint.enabled:=false; - dalbumlist.enabled:=false; - //trackedit.enabled:=false; - //burncdbut.enabled:=false; - //butcdburn.visible:=false; - butcd.visible:=false; - CDplayerbut.enabled:=false; - randombut.enabled:=false; - jukeboxbut.enabled:=true; - coverpickbut.enabled:=false; - butrandom.visible:=false; - butjukebox.visible:=false; - transport.Enabled:=false; - stop.down:=true; - play.down:=false; - //if kiosk=true then begin - // jb:=TJukeboxnoalbums.Create(application); - // Jb.showmodal; - // jb.free; - //end; - -end; - -procedure Tmainform.OptionsClick(Sender: TObject); -begin -try -//options.checked:=false; -application.processmessages; -except; -end; -//res:=showprefs(false); -//if res=1 then hideall; -play.down:=false; -stopclick(sender); -stop.down:=true; -firstrun:=true; -formcreate(mainform); -end; - - - - -procedure Tmainform.ThumbscancelClick(Sender: TObject); -begin - windowstate:=wsNormal; - restoreClick(sender); - cancelthumbs:=true; - mainmenuvisible(true); - toolbar.visible:=true; -end; - - - -procedure Tmainform.FormResize(Sender: TObject); -begin -//if jukebox.visible=true then jukebox.setfocus; -{albumlist.width:=tracklist.left+tracklist.width; -dalbumlist.width:=dplaylist.left+dplaylist.width; -dalbumlist.left:=dtracklist.left;} - -end; - - - - -procedure Tmainform.setupfrequency; -begin - progress.max:=Round (mp.length / DIVISION); - progress.linesize:=1; - progress.pagesize:=100; - progress.frequency:=5; -end; - -procedure Tmainform.ReturntoPlayerClick(Sender: TObject); -begin -Thumbscancelclick(sender); -end; - -procedure Tmainform.AddalltrackstoplaylistClick(Sender: TObject); -var -n,i : integer; - -begin -for n:=1 to albumcount do begin -sender:=thumbundercursor; -if sender=thumb[n] then begin - restoreClick(sender); - albumlist.itemindex:=n-1; - albumlistChange(sender); - dalbumlist.itemindex:=n-1; - dalbumlistChange(sender); - mainmenuvisible(true); - toolbar.visible:=true; - playlistbut.checked:=true; - playlistbutclick(sender); - for i:=0 to dtracklist.items.count-1 do begin - dtracklist.itemindex:=i; - addclick(sender); - end; -exit; -end; -end; -end; - - -procedure Tmainform.FormKeyUp(Sender: TObject; var Key: Word; - Shift: TShiftState); -begin -if (key=ord('P')) and (Shift=[ssCTRL,ssALT]) then begin -if play.enabled=true then begin - play.down:=true; - playclick(sender); - end; - -if play.enabled=false then begin -if tracklist.selected[tracklist.itemindex]=false then -tracklist.setfocus; -keybd_event(VK_SPACE,0,0,0); -application.processmessages; -play.down:=true; -playclick(sender); - -end; -end; - -if (key=VK_ESCAPE) then begin - -if (stop.enabled=true) and (stop.down=false) then begin - stop.down:=true; - stopclick(sender); - exit; - end; -if stop.down=true then begin - cdplayerbut.checked:=true; - cdplayerbutclick(nil); -end; - -end; - -if (key=ord('M')) and (Shift=[ssCTRL,ssALT]) then begin -if pause.enabled=true then begin - pause.down:=true; - pauseclick(sender); - end; -end; - - -if (key=ord('A')) and (Shift=[ssCTRL,ssALT]) then begin -albumlist.SetFocus; -keybd_event(VK_UP,0,0,0); -end; - -if (key=ord('Z')) and (Shift=[ssCTRL,ssALT]) then begin -albumlist.SetFocus; -keybd_event(VK_DOWN,0,0,0); -end; - -if (key=ord('S')) and (Shift=[ssCTRL,ssALT]) then begin -bckclick(sender); -end; - -if (key=ord('T')) and (Shift=[ssCTRL,ssALT]) then begin -if (dj.enabled=true) and (dj.down=false) then begin; dj.down:=true; djclick(nil); exit; end; -if (dj.enabled=true) and (dj.down=true) then begin; dj.down:=false; djclick(nil); exit; end; - -end; - - -if (key=ord('X')) and (Shift=[ssCTRL,ssALT]) then begin -tracklist.setfocus; -application.processmessages; -if tracklist.selected[tracklist.itemindex]=true then fwdclick(sender) else begin -keybd_event(VK_SPACE,0,0,0); -end; -end; - -if (key=ord('C')) and (Shift=[ssCTRL,ssALT]) then begin -coverclick(sender); -end; - -if (key=ord('R')) and (Shift=[ssCTRL,ssALT]) then begin -if playmode=1 then stopclick(sender); -rnd_dialog.show; -playlistbutClick(playlistbut); -playlistbut.checked:=true; -dplaylist.itemindex:=0; -rnd_dialog.all.click; -rnd_dialog.Okbtn.Click; -screen.cursor:=crDefault; -application.processmessages; -end; -end; - -procedure Tmainform.popupplayClick(Sender: TObject); -begin -If dplaylist.Items.count>0 then del.enabled:=true; -dcurrentlyplayingtrack:=dplaylist.itemindex; -playmode:=0; -setuptrackname(dplaylist.itemindex); -play.down:=true; -playclick(Sender); -end; - -procedure Tmainform.popupremoveClick(Sender: TObject); -begin -delclick(sender); - -end; - -procedure Tmainform.burncdbutClick(Sender: TObject); -begin -if kiosk=false then begin -//burncdbut.checked:=true; -burncd.show; -end; -end; - - -function runprogram(commandline : string; windowstate : integer;waitfor :boolean) : boolean; -type -tenv = pchar; -var -comline : array [0..255] of char; -startupinfo : tstartupinfo; -processinfo : tProcessinformation; -lpExitcode : cardinal; -msg : tmsg; -pass : array [0..255] of char; -begin -strpcopy(comline,commandline); - -with startupinfo do begin -cb := sizeof(startupinfo); -lpreserved:=nil; -lpdesktop:=nil; -lptitle:=nil; -dwflags := STARTF_USESHOWWINDOW; -lpreserved := nil; -cbreserved2 :=0; -lpreserved2 := nil; -if windowstate=0 then wshowwindow:=sw_normal else wshowwindow:=sw_hide; -end; - -fillchar(pass,sizeof(pass),0); -//SetPrivilege('SeAssignPrimaryTokenPrivilege',true); //maybe needed - - - -result:=createprocess(nil,comline,nil,nil,false,normal_priority_class, nil,nil,startupinfo,processinfo); -if result=true then begin - - if waitfor=true then begin - lpexitcode:=STILL_ACTIVE; - while(lpexitcode=STILL_ACTIVE) do begin; - while(peekmessage(msg,0,0,0,PM_REMOVE)) do begin - If msg.message = WM_QUIT then halt(msg.wparam); - TranslateMessage(msg); - DispatchMessage(Msg); - end; - getexitcodeprocess(processinfo.hprocess,lpexitcode); - end; - end; -end; -end; - - - -procedure Tmainform.launchscreensaverClick(Sender: TObject); -//var -//h : thandle; -//fs : Tfilestream; -//ladapter : TStreamAdapter; -begin -//write image list out using API experiment for DFM removal -//fs:=Tfilestream.Create('c:\tst.txt',fmCreate); -//h:=mainform.butimages.Handle; -// LAdapter := TStreamAdapter.Create(fs); -//imagelist_write(h,ladapter); -//fs.free; -//ladapter.free; -if runprogram(config.screensaverpath,0,false)=false then showwarning('Launch eyecandy program','Could not run eyecandy program. Check that you have specified a correct path in options. If the program is a screen saver, try placing " /s" after the program path to activate screen save mode.','An eyecandy program is visualisation software such as a sound to light program or a screen saver.','Recommended programs',WEBSITEURL+'navigation.php?sec=links#eyecandy',false); -end; - -{procedure Tmainform.hinttimerTimer(Sender: TObject); -var -msg : tmsg; -begin -inc(hinttimercount); -if (hinttimercount=20) or (hintwindow.ishintmsg(msg)=true) then begin -//hinttimer.Enabled:=false; -hintwindow.releasehandle; -end; -end; - } -procedure Tmainform.dplaylistDblClick(Sender: TObject); -begin -playbutmod.visible:=false; -if dplaylist.itemindex<>-1 then playClick(Sender) -end; - -procedure Tmainform.jukeboxbutClick(Sender: TObject); -begin -if assigned(sender) then if tcomponent(sender).name='butjukebox' then begin - config.mediaplayermode:=false; -end; - //if thumbsdone=false then mainform.thumbviewgo(false); //Load thumbs for jukebix -if albumlist.items.count<3 then begin -//if kiosk=false then messagedlg('You must have at least 3 albums loaded before jukebox mode can be used',mterror,[mbok],0); -if kiosk=true then begin - hideall; - end; -end; -//trackedit.enabled:=true; -playlistbut.checked:=true; -playlistbutclick(nil); -initmessage('Initalising Jukebox....','',''); - -gojukebox(true); - -moveformtomonitor(TForm(jukebox)); -if config.mediaplayermode=true then jukebox.close; - -end; - - -procedure Tmainform.tracklistDblClick(Sender: TObject); -begin -playclick(nil); -play.down:=true; - -end; - -procedure Tmainform.dtracklistDblClick(Sender: TObject); -begin -addclick(sender); -end; - -procedure Tmainform.ripcdClick(Sender: TObject); -begin -//ripcd.checked:=false; -end; - - -procedure Tmainform.FormActivate(Sender: TObject); -begin -if config.Dj_default=true then begin -dj.down:=true; -djclick(sender); -end; -moveformtomonitor(self); - -volchange(sender); -buttonsMouseMove(nil,[],0,0); - -end; - - -procedure Tmainform.buttonsMouseMove(Sender: TObject; Shift: TShiftState; X, - Y: Integer); -begin -if (jukebox<>nil) then if (jukebox.visible=true) then exit; - -if (sender=butcd) or (cdplayerbut.checked) then butimages.GetBitmap(0,butcd.picture.bitmap) else butimages.GetBitmap(10,butcd.picture.bitmap); -if (sender=butcdlist) or (playlistbut.checked) then butimages.GetBitmap(1,butcdlist.picture.bitmap) else butimages.GetBitmap(11,butcdlist.picture.bitmap); -if (sender=butrandom) or (randombut.checked) then butimages.GetBitmap(2,butrandom.picture.bitmap) else butimages.GetBitmap(12,butrandom.picture.bitmap); -if (sender=butjukebox) or (jukeboxbut.checked) then butimages.GetBitmap(3,butjukebox.picture.bitmap) else butimages.GetBitmap(13,butjukebox.picture.bitmap); -//if (sender=butcdburn) then butimages.GetBitmap(6,butcdburn.picture.bitmap); -//if (sender=butcdrip) then butimages.GetBitmap(7,butcdrip.picture.bitmap); -//if (sender=buttools) then butimages.GetBitmap(8,buttools.picture.bitmap); -///if (sender=butexplore) then butimages.GetBitmap(9,butexplore.picture.bitmap); - - - - -//if( sender<>butcd) then butimages.GetBitmap(9,butcd.picture.bitmap); -//if (sender<>butcdlist) then butimages.GetBitmap(10,butcdlist.picture.bitmap); -//if (sender<>butrandom) then butimages.GetBitmap(11,butrandom.picture.bitmap); -//if (sender<>butjukebox) then butimages.GetBitmap(12,butjukebox.picture.bitmap); -//if (sender<>butcdburn) then butimages.GetBitmap(16,butcdburn.picture.bitmap); -//if (sender<>butcdrip) then butimages.GetBitmap(17,butcdrip.picture.bitmap); -//if (sender<>buttools) then butimages.GetBitmap(18,buttools.picture.bitmap); -//if (sender<>butexplore) then butimages.GetBitmap(19,butexplore.picture.bitmap); - - -toolbar.invalidate; - -end; - - -procedure Tmainform.butfilterClick(Sender: TObject); -begin -//filter.checked:=true; -end; - -procedure Tmainform.filtermenuClick(Sender: TObject); -begin -butfilterclick(nil); -end; - -procedure Tmainform.fileexitClick(Sender: TObject); -begin -close; -application.terminate; -end; - -procedure Tmainform.menuaboutClick(Sender: TObject); -begin -showabout(1); -end; - - -{$IFNDEF kiosk} -// NOTE: Components originally placed on mainform. Removed for kiosk. Need replacing e.g. create at runtime and assign events. - -procedure Tmainform.saveClick(Sender: TObject); -var -fl : tfilestream; -bytefilt : tfilterbytearray; -size : longint; -n : integer; - - function tfilterbytearraywritesizeanddata(str : tfilterbytearray) : integer;overload; - begin - result:=0; - try - size:=length(str); - fl.write(size,sizeof(size)); - fl.write(pointer(str)^,length(str)); - except - result:=-1; - end; - end; - - - function writesizeanddata(str : string) : integer;overload; - begin - result:=0; - try - size:=length(str); - fl.write(size,sizeof(size)); - fl.write(pointer(str)^,length(str)); - except - result:=-1; - end; - end; - - -begin - -if savedialog.execute=false then exit; - -if fileexists(savedialog.filename) then if deletefile(savedialog.filename)=false then begin - messagedlg('Error opening file: '+savedialog.filename,mterror,[mbOK],0); - exit; -end; -fl:=tfilestream.create(savedialog.filename,fmCreate); -fl.seek(0,soFromBeginning); -fl.Write(PLAYLISTFILEHEADER,length(PLAYLISTFILEHEADER)); -bytefilt:=tfiltertobytearray(filter); -tfilterbytearraywritesizeanddata(bytefilt); - -n:=dplaylist.items.count-1; -fl.write(n,sizeof(integer)); -for n:=0 to dplaylist.items.count-1 do begin - writesizeanddata(dPlayListMatrixAlb[n]); - fl.write(dPlayListMatrixTrk[n],sizeof(dPlayListMatrixTrk[n])); - writesizeanddata(dplaylist.Items[n]); -end; - -fl.free; -end; - -procedure Tmainform.OpenClick(Sender: TObject); -var -fl : tfilestream; -bytefilt : tfilterbytearray; -filt : tfilter; -size : longint; -scrap : string; -itemstotal : integer; -n : integer; - -function readsizeanddata : string;overload; - var - count : integer; - begin - try - count:=sizeof(size); - fl.read(size,count); - if (count<sizeof(size)) then begin; result:=''; exit; end; - setlength(result,size); - fl.read(pointer(result)^,size); - except - result:=''; - end; - end; - - - - function tfilterbytearrayread : tfilterbytearray;overload; - var - count : integer; - begin - try - count:=sizeof(size); - fl.read(size,count); - if (count<sizeof(size)) then begin; result:=nil; exit; end; - setlength(result,size); - fl.read(pointer(result)^,size); - except - result:=nil; - end; - end; - -begin -setlength(bytefilt,1); -bytefilt[0]:=0; -if opendialog.execute=true then begin -if cdplayerbut.checked=true then playlistbutclick(nil); -clearlistclick(nil); -fl:=tfilestream.create(opendialog.filename,fmOpenRead); -setlength(scrap,length(PLAYLISTFILEHEADER)); -fl.read(pointer(scrap)^,length(PLAYLISTFILEHEADER)); -bytefilt:=tfilterbytearrayread; -filt:=bytearraytofilter(bytefilt); - -if NOT((filt.genre.count=-1) and (filt.artist.count=-1) and - (filt.keywords.count=-1) and (filt.recordlabel.count=-1) and - (filt.excludecompilations=false) and (filt.excludenoncompilations=false) and - (filt.yearlower=-1) and (filt.decadelower=-1)) then begin - if Messagedlg('A filter was in place when this playlist was saved. Restore the filter?',mtconfirmation,[mbYes,mbNo],0)=MrYes then begin - dofilter(filter); - end; - end; -dplaylist.items.clear; - - -fl.read(itemstotal,sizeof(integer)); -setlength(dPlayListMatrixAlb,itemstotal+2); -setlength(dPlayListMatrixTrk,itemstotal+2); - -for n:=0 to itemstotal do begin - dPlayListMatrixAlb[n]:=readsizeanddata; - fl.read(dPlayListMatrixTrk[n],sizeof(dPlayListMatrixTrk[n])); - dplaylist.items.add(readsizeanddata); -end; - -end; -fl.free; - -end; -{$ENDIF} - -procedure Tmainform.reloadClick(Sender: TObject); -begin -firstrun:=true; -try -if mp.filename<>'' then begin - mp.stop; -{$IFDEF backgroundstreamplayer} -stopStream(); -{$ENDIF} -end; -except; -end; -writeini; -mainform.enabled:=false; -formcreate(nil); -mainform.enabled:=true; -end; - -procedure Tmainform.hyperlink_helpfilesystemClick(Sender: TObject); -begin -ShellExecute (0, nil, pchar(WEBSITEURL+'?help=filesystem'), nil, nil, SW_SHOWNORMAL); -end; - -procedure Tmainform.hyperlink_helpalbuminfoClick(Sender: TObject); -begin -ShellExecute (0, nil, pchar(WEBSITEURL+'?help=filters'), nil, nil, SW_SHOWNORMAL); -end; - -procedure Tmainform.helpClick(Sender: TObject); -begin -ShellExecute (0, nil, pchar(WEBSITEURL+'?sec=2&sub=2'), nil, nil, SW_SHOWNORMAL); -end; - - -procedure Tmainform.insertClick(Sender: TObject); -var -point : integer; -n : integer; -begin -if dplaylist.itemindex=dplaylist.items.count-1 then begin -addclick(sender); -exit; -end; -setlength(dplaylistMatrixAlb,dplaylist.Items.count+1); -setlength(dplaylistMatrixTrk,dplaylist.Items.count+1); - -point:=dplaylist.itemindex+1; - -n:=dplaylist.Items.count-1; -while(n>=(point-1)) do begin -dplaylistMatrixAlb[n+1]:=dplaylistMatrixAlb[n]; -dplaylistMatrixTrk[n+1]:=dplaylistMatrixTrk[n]; -dec(n); -end; - -dplaylist.items.insert(point,dtracklist.items[dtracklist.itemindex]); -dplaylistMatrixAlb[point]:=dcurrentalbumpath; -dplaylistMatrixTrk[point]:=dtrackList.itemindex+1; -dcurrenttrack:=dcurrenttrack+1; - - - - -end; - -procedure Tmainform.dplaylistDragOver(Sender, Source: TObject; X, - Y: Integer; State: TDragState; var Accept: Boolean); -begin -if Source is tlistbox then Accept := True; - -end; - -procedure Tmainform.dplaylistDragDrop(Sender, Source: TObject; X, - Y: Integer); -var -sfirst,ssecond : string; -ifirst,isecond : integer; -n : integer; -tp : tpoint; -alb : string; -trk : integer; - -begin -if source=dtracklist then begin -addclick(nil); -end; - - -if source=self then begin -ifirst:=-1; -for n:=0 to TListBox(Source).items.count do begin - if TListBox(Source).selected[n]=true then begin - sfirst:=TListBox(Source).items[n]; - ifirst:=n; - break; - end; -end; -tp.x:=x; -tp.y:=y; -isecond:=TListbox(Source).itematpos(tp,true); -ssecond:=TListbox(Source).items[isecond]; -Tlistbox(Source).items[ifirst]:=ssecond; -Tlistbox(Source).items[isecond]:=sfirst; - -alb:=dplaylistMatrixAlb[isecond]; -trk:=dplaylistMatrixTrk[isecond]; - -dplaylistMatrixAlb[isecond]:=dplaylistMatrixAlb[ifirst]; -dplaylistMatrixTrk[isecond]:=dplaylistMatrixTrk[ifirst]; - -dplaylistMatrixAlb[ifirst]:=alb; -dplaylistMatrixTrk[ifirst]:=trk; -end; - -end; - -procedure Tmainform.menuprintClick(Sender: TObject); -begin -{$IFNDEF kiosk} -showprint; -{$ENDIF} -end; - -procedure Tmainform.buttonstimerTimer(Sender: TObject); -begin -if DEBUGON=false then begin -buttonstimer.enabled:=false; -exit; -end; -buttonsMouseMove(nil,[],0,0); transport.repaint; -end; - - -procedure Tmainform.butexploreClick(Sender: TObject); -begin -{$IFNDEF kiosk} -//if explorego=mrOK then reloadclick(nil); -{$ENDIF} -end; - - - -procedure Tmainform.menufiletagClick(Sender: TObject); -begin -{$IFNDEF kiosk} -if messagedlg('This will run through each album and tag all MP3 files with album and artist info.'#10#13'Are you sure you want to do this?',mtconfirmation,[mbYes,mbNo],0)=MrYes then tagmp3s.showmodal; -{$ENDIF} -end; - - - - -end. - - diff --git a/__history/Main.pas.~191~ b/__history/Main.pas.~191~ new file mode 100644 index 0000000..9e6d074 --- /dev/null +++ b/__history/Main.pas.~191~ @@ -0,0 +1,3818 @@ +unit Main; + +// Copyright (C) 2023 Matthew Smith + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +interface + +uses + Forms,Windows, Messages, SysUtils, Classes, Graphics, Controls, Menus, + ImgList, ExtCtrls, ComCtrls, Buttons, StdCtrls, MPlayer,checklst, Gauges, + mmsystem, ToolWin,registry,windowsversion, + shellapi,OleCtrls,jpeg,global,volume, +{$IFNDEF kiosk} + printcatalog, +{$ENDIF} +videoform, +inifuncs, Dialogs,resourceskins,commctrl,dateutils,id3,networkstream, + System.ImageList,uitypes; + +const INIFILE='Empathy.ini'; +const VOLINCREMENTS =150; + + +type TMDeviceChange = record + Msg : Cardinal; + Event : Uint; + dwData : pointer; + Result : Longint; + end; + + + type + Tmainform = class(TForm) + playpanel: TPanel; + albumlist: TComboBox; + Timers: TTimer; + Playlist: TPanel; + Dalbumlist: TComboBox; + dtracklist: TListBox; + dplaylist: TListBox; + playlistcaption: TLabel; + numberoftracks: TTimer; + showcover: TCheckBox; + tracklist: TListBox; + transport: TPanel; + Stop: TSpeedButton; + play: TSpeedButton; + fwd: TSpeedButton; + bck: TSpeedButton; + timemodebut: TSpeedButton; + counter: TLabel; + tr: TLabel; + skipforward: TSpeedButton; + skipback: TSpeedButton; + progress: TTrackBar; + coverPanel: TPanel; + cover: TImage; + Bevel1: TBevel; + Bevel2: TBevel; + pause: TSpeedButton; + vol: TTrackBar; + vol_triangle: TImage; + audition: TSpeedButton; + mutebut: TSpeedButton; + dj: TSpeedButton; + Bevel3: TBevel; + coverpickbut: TSpeedButton; + thumbspopupmenu: TPopupMenu; + SelectAlbum: TMenuItem; + Addalltrackstoplaylist: TMenuItem; + ReturntoPlayer: TMenuItem; + dplaylistmenu: TPopupMenu; + popupplay: TMenuItem; + popupremove: TMenuItem; + Cancel1: TMenuItem; + playbutmod: TShape; + Add: TButton; + del: TButton; + toolbar: TPanel; + butcd: TImage; + butcdlist: TImage; + butjukebox: TImage; + butrandom: TImage; + butimages: TImageList; + bevel4: TBevel; + Bevel5: TBevel; + MainMenu: TMainMenu; + filemenu: TMenuItem; + fileexit: TMenuItem; + modemenu: TMenuItem; + Cdplayerbut: TMenuItem; + playlistbut: TMenuItem; + randombut: TMenuItem; + jukeboxbut : TMenuItem; + clearlist: TButton; + helpmenu: TMenuItem; + menuabout: TMenuItem; + reload: TMenuItem; + insert: TButton; + N2: TMenuItem; + buttonstimer: TTimer; + SaveDialog: TSaveDialog; + OpenDialog: TOpenDialog; + procedure albumlistChange(Sender: TObject); + procedure tracklistClick(Sender: TObject); + procedure MPNotify(Sender: TObject); + procedure playClick(Sender: TObject); + procedure StopClick(Sender: TObject); + procedure bckClick(Sender: TObject); + procedure fwdClick(Sender: TObject); + procedure TimersTimer(Sender: TObject); + procedure timemodebutClick(Sender: TObject); + procedure playlistbutClick(Sender: TObject); + procedure CdplayerbutClick(Sender: TObject); + procedure randombutClick(Sender: TObject); + procedure DalbumlistChange(Sender: TObject); + procedure dtracklistClick(Sender: TObject); + procedure AddClick(Sender: TObject); + procedure dplaylistClick(Sender: TObject); + procedure DelClick(Sender: TObject); + procedure restoreClick(Sender: TObject); + procedure picturepanelClick(Sender: TObject); + procedure clearlistClick(Sender: TObject); + procedure coverMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure numberoftracksTimer(Sender: TObject); + procedure coverClick(Sender: TObject); + procedure showcoverClick(Sender: TObject); + procedure skipbackward(Sender: TObject); + procedure progressChange(Sender: TObject); + procedure skipforwardClick(Sender: TObject); + procedure pauseClick(Sender: TObject); + procedure volChange(Sender: TObject); + procedure mutebutClick(Sender: TObject); + procedure auditionClick(Sender: TObject); + procedure djClick(Sender: TObject); + procedure coverpickbutClick(Sender: TObject); +// procedure thumbviewgo(show : boolean); + procedure FormCreate(Sender: TObject); + procedure trackeditClick(Sender: TObject); + procedure OptionsClick(Sender: TObject); + procedure ThumbscancelClick(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure ReturntoPlayerClick(Sender: TObject); + procedure AddalltrackstoplaylistClick(Sender: TObject); + procedure FormKeyUp(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure popupplayClick(Sender: TObject); + procedure popupremoveClick(Sender: TObject); + procedure burncdbutClick(Sender: TObject); + procedure launchscreensaverClick(Sender: TObject); + procedure dplaylistDblClick(Sender: TObject); + procedure jukeboxbutClick(Sender: TObject); + procedure tracklistDblClick(Sender: TObject); + procedure dtracklistDblClick(Sender: TObject); + procedure ripcdClick(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure buttonsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure butfilterClick(Sender: TObject); + procedure filtermenuClick(Sender: TObject); + procedure fileexitClick(Sender: TObject); + procedure menuaboutClick(Sender: TObject); + procedure reloadClick(Sender: TObject); + function loadtitles (sender : TListbox; albumindex : integer) : boolean; + procedure hyperlink_helpfilesystemClick(Sender: TObject); + procedure hyperlink_helpalbuminfoClick(Sender: TObject); + procedure helpClick(Sender: TObject); + procedure insertClick(Sender: TObject); + procedure dplaylistDragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure dplaylistDragDrop(Sender, Source: TObject; X, Y: Integer); + procedure menuprintClick(Sender: TObject); + procedure buttonstimerTimer(Sender: TObject); + procedure butexploreClick(Sender: TObject); + procedure menufiletagClick(Sender: TObject); + function maketitles(path : string;gettrack : integer;var fn : string) : boolean; + +{$IFNDEF kiosk} + procedure saveClick(Sender: TObject); + procedure openClick(Sender: TObject); + +{$ENDIF} + private + + { Private declarations } + + procedure doDJ(album : string); + + procedure drawtriangle(pos : integer); + procedure mpplay; + + // procedure WMDeviceChange(var msg : TMDeviceChange); message WM_DEVICECHANGE; + procedure hideall; + procedure setupfrequency; + + + + + + public + {$IFNDEF NEWMEDIAPLAYER} + mp : TMediaplayer; + {$ENDIF} + {$IFDEF NEWMEDIAPLAYER} + mp : TDXMP; + {$ENDIF} + + function buildcontentlist(forceload : boolean) : boolean; + procedure initlistboxes(sorted : boolean); + +procedure sorttimemode; +function setuptrackname(num : integer) : string; + + { Public declarations } + end; + + +talbumtype = record +album : string; +artist : string; +path : string; +added : TDateTime; +originalpos : integer; +end; + +type + albumtype = array of talbumtype; + PlayListMatrixTrk = array of integer; + PlayListMatrixAlb = array of string; + PlayListMatrixAlbNumber = array of integer; + + + + + type tdylist = record + data : array of string; + count : integer; + end; + + Type + MCI_DGV_SETAUDIO_PARMS = record + dwCallback : DWORD; + dwItem : DWORd; + dwValue : DWORD; + dwOver : DWORD; + lpstrAlgorithm : PChar; + lpstrQuality : PChar; + end; + + +function readini : boolean; +procedure writeini; +procedure showerror(txt : string; errortype : integer); +procedure alphablendbitmapwithcolor(blend : tbitmap;blendcolor : tcolor;source : tbitmap;alpha : real); +function extractalbumandaristfrompath(s : string;var artist : string;var album : string) : string; +function loadbitmap(target : timage;rc : string) : longint; +procedure badfile(fn : string;act : string); +function runprogram(commandline : string; windowstate : integer;waitfor :boolean) : boolean; +procedure loadbmpcompressedresource(resname : string;dest : tbitmap); +procedure loadblankmp3file; + + +const + +DONTCHECKCACHE=false; +cdwidth =260; +cdheight =260; +VERSIONNO ='3.0'; +{$IFDEF WIN32} + APPTITLE ='Empathy (x86)'; +{$ENDIF} +{$IFDEF WIN64} + APPTITLE ='Empathy (x64)'; +{$ENDIF} + +PLAYLISTFILEHEADER = 'EMPATHYPLAYLISTFILEFORMAT'; + +DIVISION = 1000; +vtxtst_STATEMENT = 1; +vtxtst_QUESTION = 2; +vtxtst_COMMAND =4; +vtxtst_WARNING = 8; +vtxtst_READING = 16; +vtxtst_NUMBERS = 32; +vtxtst_SPREADSHEET = 64; +vtxtst_VERYHIGH = 128; +vtxtst_HIGH = 256; +vtxtst_NORMAL = 512; + MCI_SETAUDIO = 73; + MCI_DGV_SETAUDIO_VOLUME = 02; + MCI_DGV_SETAUDIO_ITEM = {viewgit}{/viewgit}800000; + MCI_DGV_SETAUDIO_VALUE = 000000; + + +var +SLOWPROCESSOR : boolean = FALSE; +DEBUGON : boolean = false; +MAINFORMWIDTH, MAINFORMHEIGHT : integer; +thumbsdone : boolean = false; +mainform: Tmainform; +albumcount : integer = 0; +album : albumtype; +currentalbumpath : string; +dcurrentalbumpath : string; +playmode : integer; +timermode: integer; +dcurrentlyplayingtrack : integer; +dCurrentTrack : integer; +dPlayListMatrixTrk : PlayListMatrixTrk; +dPlayListMatrixAlb : PlayListMatrixAlb; +albumref : albumtype; +albumrefonload : albumtype; +albumrefonloadcount : integer; +audition_mode : boolean; +winposX,winposY : integer; +olditem: integer; +paused : boolean; +muted : boolean; +//preferences : Tpreferences; +deviceremoveable : boolean; +cancelthumbs : boolean; +thumbundercursor : TObject; +progressmove : boolean; +progresslastpos : dword; +hinttimercount : integer; +thumb : array of timage; +thumbcount : integer = 0; +loadedblankmp3file: boolean = false; +blankfilepath : string; +phrases : tdylist; +genre : tdylist; +artisttype : tdylist; +kiosk : boolean = true; +tvmode : boolean = false; + + + +autoplaytime : integer = 60; +WEBSITEURL : string; +firstrun : boolean = true; +cached : boolean = false; +dice1 : tbitmap; +dice2 : tbitmap; +dice3 : tbitmap; +dice4 : tbitmap; + +procedure uninstallfont; + +implementation + +uses random_dialog, cover,loadjpegorbmp, burn, jukeboxform, warn,aboutform,albuminfo, + backgroundplay, tagmp3files, empripmain, jbnoalbums + {$IFNDEF kiosk} + tracklistform + {$ENDIF}; + + // empripmain; //videditform; + + + +{$R *.DFM} +{$R WindowsXP.res} +{$R empathyres.res} + + + +procedure loadbmpcompressedresource(resname : string;dest : tbitmap); +var +sr : Tresourcestream; +begin +sr:=TresourceStream.create(hinstance,resname,RT_RCDATA); +dest.LoadFromStream(sr); +sr.free; +end; + + + + +procedure badfile(fn : string;act : string); +begin +{$IFNDEF kiosk} +messagedlg('Error '+act+' file "'+fn+'".',mterror,[mbOk],0); + +{$ENDIF} + +end; + + + +function loadbitmap(target : timage;rc : string) : longint; +begin +result:=0; +try +target.Picture.Bitmap.LoadFromResourceName(hinstance,rc); +//loadjpegresource(rc,target.picture.bitmap); +except; +result:=-1; +end; +end; + + +function extractalbumandaristfrompath(s : string;var artist : string;var album : string) : string; +var +x : integer; +a : integer; +begin +a:=1; +while(a<>0) do begin + a:=pos('\',s); + s:=copy(s,a+1,length(s)-a); +end; + +//s:=copy(s,length(config.pathtocd)+1,(length(s)-length(config.pathtocd))); +x:=pos('__',s); +artist:=copy(s,0,x-1); +album:=copy(s,x+2,length(s)-x+2); +result:=album+' - '+artist; +end; + + + +procedure alphablendbitmapwithcolor(blend : tbitmap;blendcolor : tcolor;source : tbitmap;alpha : real); +var +x,y : integer; +rin,rout : pbytearray; +outval : integer; +br,bg,bb : integer; + +function rangecheck(inp : integer) : byte; +begin + if inp>255 then outval:=255; + if inp<0 then outval:=0; + result:=byte(inp); +end; + +begin +if SLOWPROCESSOR=TRUE then exit; +source.width:=blend.width; +source.height:=blend.height; +source.pixelformat:=pf24bit; +br:=getrvalue(ColorToRGB(blendcolor)); +bg:=getgvalue(ColorToRGB(blendcolor)); +bb:=getbvalue(ColorToRGB(blendcolor)); + + +with source do begin + for y:=0 to source.height -1 do begin + rin:=scanline[y]; + rout:=source.scanline[y]; + x:=0; + // application.processmessages; + while x< 3*width-1 do begin + // application.processmessages; + + outval:=round((alpha*(rin[x]-br))+br); + rout[x]:=rangecheck(outval); + // application.processmessages; + outval:=round((alpha*(rin[x+1]-bg))+bg); + rout[x+1]:=rangecheck(outval); + // application.processmessages; + + outval:=round((alpha*(rin[x+2]-bb))+bb); + rout[x+2]:=rangecheck(outval); + x:=x+3; + end; + end; +end; +end; + + +procedure mainmenuvisible(i : boolean); +begin +mainform.filemenu.enabled:=i; +mainform.modemenu.enabled:=i; +//mainform.toolsmenu.enabled:=i; +end; + + +procedure installfont; +const +fontname='EMPTDIGI.TTF'; +var + rs : TResourceStream; + pwd : array [0..MAX_PATH] of char; + wd : string; + areg : tregistry; + rscreate : boolean; +begin +rs:=nil; +fillchar(pwd,sizeof(pwd),0); +getwindowsdirectory(pwd,sizeof(pwd)); +wd:=pwd; +wd:=wd+'\fonts\'+fontname; +rscreate:=false; +if fileexists(wd)=false then begin + try + rscreate:=true; + rs:=TResourceStream.Create(hInstance, 'FONT', RT_RCDATA); + rs.SavetoFile(wd); + SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); +except +end; +end; + +areg:=tregistry.create; +try +areg.closekey; +areg.rootkey:=HKEY_LOCAL_MACHINE; +if getwindowsversion>2 then areg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) else areg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); +areg.writestring('Empathy Digital Font (TrueType)',fontname); +except; +end; +AddFontResource(PChar(wd)); +if rscreate=true then rs.free; +end; + + +procedure uninstallfont; +const +fontname='EMPTDIGI.TTF'; +var + pwd : array [0..MAX_PATH] of char; + wd : string; + areg : tregistry; +begin +fillchar(pwd,sizeof(pwd),0); +getwindowsdirectory(pwd,sizeof(pwd)); +wd:=pwd; +wd:=wd+'\fonts\'+fontname; + try + RemoveFontResource(PChar(wd)); + SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); + sleep(100); + Deletefile(wd); +except +end; +areg:=tregistry.create; +try +areg.rootkey:=HKEY_LOCAL_MACHINE; +if getwindowsversion>2 then areg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) else areg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); +areg.deletevalue('Empathy Digital Font (TrueType)'); +except; +end; + +end; + + +function readini : boolean; +var +x : integer; +filterbytes : tfilterbytearray; +pth : string; +a : tinifile; +s : string; +altinipath : string; +cp : array[0..1024] of char; + +begin +a:=tinifile.create; +gettemppath(1023,cp); + +result:=true; +pth:=paramstr(0); +a.inipath:= ExtractFileDir(pth)+'\'+INIFILE; + +a.section:='main'; + +altinipath:=a.readppString('AltINI',''); + + +if altinipath<>'' then a.inipath:=altinipath; + +if fileexists(a.inipath)=false then begin +application.messagebox('Please install or create an .ini file in the program folder','empathy.ini not found. Cannot continue.'); +application.terminate; +halt; +end; + + +config.path:=a.readppString('Path',''); +if config.path='' then begin +//application.messagebox('Cannot find path entry in [Main] section of .ini file','Error reading empathy.ini. Cannot continue.'); +//application.terminate; +config.path:=extractfilepath(paramstr(0)); +//halt; +end; + +config.backgroundstream:=a.readppString('backgroundstream',''); + +cached:=a.readppBool('Cached','0'); +cachepath:=a.readppstring('CachePath',cp); +if ((cachepath='') or (DirectoryExists(cachepath)=false))then cachepath:=cp; + + +if config.path[length(config.path)]<>'\' then config.path:=config.path+'\'; +if config.path='' then begin +result:=false; + +end; + +SLOWPROCESSOR:=a.readppBool('SlowProcessor','0'); +config.volume:=a.readppInteger('Volume','7'); +config.Dj_default:=a.readppBool('DJ On','0'); +config.Dj_comment:=a.readppBool('DJ Comment','0'); +config.lastalbum:=a.readppInteger('LastAlbum','1'); +config.dlastalbum:=a.readppInteger('dLastAlbum','1'); +config.jlastalbum:=a.readppInteger('jLastAlbum','1'); +config.auditiontimeout:=a.readppInteger('AuditionTimeout','5'); +config.burnpath:=a.readppstring('burnpath',' '); +config.autoexec:=a.readppstring('autoexec',''); +if config.autoexec<>'' then begin + runprogram(config.autoexec,1,false); +end; +config.screensaverpath:=a.readppString('screensaverpath',' '); +config.bgstyle:=a.readppinteger('BackgroundStyle',''); +config.borderstyle:=a.readppinteger('BorderStyle',''); +config.bgcolor:=a.readppinteger('BackgroundColor',''); +config.bordercolor:=a.readppinteger('BorderColor',''); +config.cdopt:=a.readppinteger('CDopt',''); +config.timeannounce:=a.readppBool('timeannounce','1'); +config.mediaplayermode:=a.readppBool('mediaplayermode','0'); +config.hideexit:=a.readppBool('hideexit','0'); +config.hidepanel:=a.readppBool('jukeboxcontrolpanel','1'); +config.litewarn:=a.readppbool('litewarn','1'); +config.defaultfilteron:=a.readppbool('defaultfilteron','0'); +config.autoplay:=a.readppbool('autoplay','1'); +autoplaymode:=config.autoplay; +config.lock:=a.readppbool('lock','0'); +config.norepeat:=a.readppbool('norepeat','0'); +config.jukeboxaddall:=a.readppbool('jukeboxaddall','1'); +config.jukeboxvolumepanel:=a.readppbool('jukeboxvolumepanel','1'); +config.password:=a.readppstring('password',''); +config.copytrackdest:=a.readppstring('CopyTrackDestination',''); +config.monitor:=a.readppinteger('Monitor','0'); +config.errorlog:=a.readppstring('ErrorLog',''); +config.videomonitor:=a.readppinteger('VideoMonitor',inttostr(config.monitor)); +config.fontsize:=a.readppinteger('FontSize','8'); +config.showminimize:=a.readppinteger('ShowMinimize','0'); +config.poweroff:=a.readppBool('PowerOff','0'); +config.disable3D:=a.readppBool('Disable3D','0'); +config.wraponunderscore:=a.readppBool('WrapOnUnderscore','1'); + +a.section:='Genre'; +genre.count:=0; +x:=0; +n:=1; + + +s:=''; +while x=0 do begin + setlength(genre.data,n); + s:=a.readppstring(inttostr(n-1),''); + if s<>'' then begin + genre.data[n-1]:=s; + end else break; +inc(n); +end; +genre.count:=n-1; + +a.section:='ArtistType'; +ArtistType.count:=0; +x:=0; +n:=1; +while x=0 do begin + setlength(ArtistType.data,n); + s:=a.readppstring(inttostr(n-1),''); + if s<>'' then begin + ArtistType.data[n-1]:=s; + end else break; +inc(n); +end; +ArtistType.count:=n-1; + +a.section:='main'; +config.username:=a.readppstring('Username',''); +config.serial:=a.readppstring('Serial',''); + +config.bitrate:=a.readppInteger('Bitrate','192'); +config.cddbserver:=a.readppString('CDDBServer','www.freedb.org'); +config.cddbcgi:=a.readppString('CDDBcgi','/~cddb/cddb.cgi'); +config.email:=a.readppString('email','user@isp'); +config.networksettings:=a.readppstring('networksettings',''); + +s:=a.readppstring('defaultfilter',''); +if (s<>'') and config.defaultfilteron=true then begin +s:=a.readppstring('defaultfilter',''); +setlength(filterbytes,length(s)); +filterbytes:=tfilterbytearray(s); +filter:=bytearraytofilter(filterbytes); +end; + + +a.section:='Phrases'; +phrases.count:=0; +x:=0; +n:=1; +while x=0 do begin +s:=a.readppstring(inttostr(n-1),''); + setlength(phrases.data,n); + if s<>'' then begin phrases.data[n-1]:=s; + end else break; +inc(n); +end; +phrases.count:=n-1; + +a.section:='Skins'; + + config.theme.sbut.Skin:=a.readppstring('sbut',''); + config.theme.sbut.Color:=a.readppinteger('cbut',''); + config.theme.skeypad.Skin:=a.readppstring('skeypad',''); + config.theme.skeypad.Color:=a.readppinteger('ckeypad',''); + config.theme.slcorner.Skin:=a.readppstring('slcorner',''); + config.theme.slcorner.Color:=a.readppinteger('clcorner',''); + config.theme.srcorner.Skin:=a.readppstring('srcorner',''); + config.theme.srcorner.Color:=a.readppinteger('crcorner',''); + config.theme.sblcorner.Skin:=a.readppstring('sblcorner',''); + config.theme.sblcorner.Color:=a.readppinteger('cblcorner',''); + config.theme.sbrcorner.Skin:=a.readppstring('sbrcorner',''); + config.theme.sbrcorner.Color:=a.readppinteger('cbrcorner',''); + config.theme.salphabuttons.Skin:=a.readppstring('salphabuttons',''); + config.theme.salphabuttons.Color:=a.readppinteger('calphabuttons',''); + config.theme.swidebut.Skin:=a.readppstring('swidebut',''); + config.theme.swidebut.Color:=a.readppinteger('cwidebut',''); + config.theme.sbackground.Skin:=a.readppstring('sbackground',''); + config.theme.sbackground.Color:=a.readppinteger('cbackground',''); + config.theme.alphaorientation:=a.readppinteger('alphaorientation','2'); + + a.section:='Commercial'; + config.creditsystem:=a.readppbool('creditsystem','0'); + config.playspercoincredit:=a.readppinteger('playspercoincredit','5'); + config.allowfreecredit:=a.readppbool('allowfreecredit','1'); + config.bgvolumemax:=a.readppinteger('bgvolumemax','30'); + config.bgduration:=a.readppinteger('bgduration','15'); + config.bgwaittime:=a.readppinteger('bgwaittime','15'); + config.trackslogfile:=a.readppstring('trackslogfile',''); + config.credittotal:=a.readppinteger('credittotal','0'); + config.freecredittotal:=a.readppinteger('freecredittotal','0'); + config.bgvolume:=a.readppinteger('bgvolume','15'); + + + + a.free; + +end; + +procedure writeini; +var +n : integer; +filterbytes : tfilterbytearray; +pth : string; +a : tinifile; +s : string; +altinipath : string; +begin +a:=tinifile.create; +try + +pth:=paramstr(0); +a.inipath:= ExtractFileDir(pth)+'\'+INIFILE; +a.section:='Main'; + +altinipath:=a.readppString('AltINI',''); + +if altinipath<>'' then a.inipath:=altinipath; + + + + +a.WritePPString('path',config.path); +a.WritePPString('burnpath',config.burnpath); +a.WritePPString('screensaverpath',config.screensaverpath); +a.WritePPInteger('Volume',config.volume); +a.WritePPBool('DJ On',config.Dj_default); +a.WritePPString('autoexec',config.autoexec); +a.WritePPBool('DJ Comment',config.Dj_comment); +a.WritePPInteger('LastAlbum',config.lastalbum); +a.WritePPInteger('dLastAlbum',config.dlastalbum); +a.WritePPInteger('jLastAlbum',config.jlastalbum); +a.WritePPInteger('AuditionTimeout',config.auditiontimeout); +a.WritePPinteger('BackgroundStyle',config.bgstyle); +a.WritePPinteger('BorderStyle',config.borderstyle); +a.WritePPinteger('BackgroundColor',config.bgcolor); +a.WritePPinteger('BorderColor',config.bordercolor); +a.WritePPinteger('CDopt',config.cdopt); +a.WritePPbool('timeannounce',config.timeannounce); +a.WritePPbool('hideexit',config.hideexit); +a.WritePPbool('litewarn',config.litewarn); +a.WritePPbool('defaultfilteron',config.defaultfilteron); +a.WritePPbool('autoplay',config.autoplay); +a.WritePPbool('lock',config.lock); +a.WritePPbool('norepeat',config.norepeat); +a.WritePPstring('password',config.password); +a.WritePPbool('jukeboxvolumepanel',config.jukeboxvolumepanel); +a.WritePPbool('jukeboxaddall',config.jukeboxaddall); + +fillchar(filterbytes,0,0); +filterbytes:=tfiltertobytearray(filter); +s:=string(filterbytes); +a.WritePPString('defaultfilter',s); + + +//if reg.keyexists('Phrases') then reg.deletekey('Phrases'); +a.section:='Phrases'; +if phrases.count>0 then for n:=0 to phrases.count-1 do a.WritePPstring(inttostr(n),phrases.data[n]); + +a.section:='Genre'; + +if genre.count>0 then for n:=0 to genre.count-1 do a.WritePPstring(inttostr(n),genre.data[n]); + + +a.Section:='ArtistType'; +if ArtistType.count>0 then for n:=0 to ArtistType.count-1 do a.WritePPstring(inttostr(n),ArtistType.data[n]); + +a.section:='main'; +a.WritePPstring('Username',Config.username); +a.WritePPstring('Serial',Config.serial); +a.WritePPString('Path',config.path); +a.WritePPInteger('Bitrate',config.bitrate); +//a.WritePPString('CDDBServer',config.cddbserver); +//a.WritePPString('CDDBcgi',config.cddbcgi); +a.WritePPString('email',config.email); +a.writeppbool('PowerOff',config.poweroff); + + +a.section:='Skins'; +a.writeppstring('sbut',config.theme.sbut.Skin); +a.writeppinteger('cbut',config.theme.sbut.Color); +a.writeppstring('skeypad',config.theme.skeypad.Skin); +a.writeppinteger('ckeypad',config.theme.skeypad.Color); +a.writeppstring('slcorner',config.theme.slcorner.Skin); +a.writeppinteger('clcorner',config.theme.slcorner.Color); +a.writeppstring('srcorner',config.theme.srcorner.Skin); +a.writeppinteger('crcorner',config.theme.srcorner.Color); +a.writeppstring('sblcorner',config.theme.sblcorner.Skin); +a.writeppinteger('cblcorner',config.theme.sblcorner.Color); +a.writeppstring('sbrcorner',config.theme.sbrcorner.Skin); +a.writeppinteger('cbrcorner',config.theme.sbrcorner.Color); +a.writeppstring('salphabuttons',config.theme.salphabuttons.Skin); +a.writeppinteger('calphabuttons',config.theme.salphabuttons.Color); +a.writeppstring('swidebut',config.theme.swidebut.Skin); +a.writeppinteger('cwidebut',config.theme.swidebut.Color); +a.writeppstring('sbackground',config.theme.sbackground.Skin); +a.writeppinteger('cbackground',config.theme.sbackground.Color); +a.writeppinteger('alphaorientation',config.theme.alphaorientation); + +a.section:='Commercial'; +a.WritePPBool('creditsystem',Config.creditsystem); +a.WritePPInteger('playspercoincredit',Config.playspercoincredit); +a.WritePPBool('allowfreecredit',config.allowfreecredit); +a.WritePPInteger('bgvolumemax',config.bgvolumemax); +a.WritePPInteger('bgduration',config.bgduration); +a.WritePPInteger('bgwaittime',config.bgwaittime); +a.writeppstring('trackslogfile',config.trackslogfile); +a.writeppinteger('credittotal',config.credittotal); +a.writeppinteger('freecredittotal',config.freecredittotal); +a.writeppinteger('bgvolume',config.bgvolume); + + + + +a.Free; + + +except; +end; +end; + +procedure loadblankmp3file; +var +rs : Tresourcestream; +fs : tfilestream; +begin +blankfilepath:=cachepath+'\blank.mp3'; + +if fileexists(blankfilepath)=false then begin +try +rs:=Tresourcestream.create(hinstance,'blank',RT_RCDATA); +fs:=tfilestream.create(blankfilepath,fmCreate); +fs.copyfrom(rs,0); +fs.free; +except +messagedlg('Cannot create temporary file. Please check .INI file and make sure '+cachepath+ + ' exists and can be written to'#13#10'or specify and alterative temporary location under the "cachepath=" section of the .INI file',mtError,[MbOk],0); +//halt; +end; +end; + + +if fileexists(blankfilepath)=false then begin +messagedlg('Cannot find temporary file. Please check .INI file and make sure '+cachepath+ + ' exists and can be written to'#13#10'or specify and alterative temporary location under the "cachepath=" section of the .INI file',mtError,[MbOk],0); +//halt; +end; + +mainform.mp.close; +mainform.mp.filename:=blankfilepath; + +try +//mainform.mp.open; +except; +end; +loadedblankmp3file:=true; + +end; + + + + +procedure Tmainform.albumlistChange(Sender: TObject); +var +n : integer; +spp,scrap : string; +var +o : tbitmap; +begin + +o:=nil; +n:=albumlist.itemindex+1; +config.lastalbum:=n; + +if albumcount<>0 then begin + spp:=album[n].path; + screen.cursor:=crhourglass; + loadjpegbmp(config.path+spp,o); + cover.picture.bitmap.assign(o); + o.free; + cover.refresh; + screen.cursor:=crdefault; + albumlist.hint:=albumlist.items[albumlist.itemindex]; +end; + if albumcount<>0 then if loadtitles(tracklist,n)=false then begin + maketitles(album[n].path,0,scrap); + loadtitles(tracklist,n) + end; + +if cdplayerbut.checked=true then begin +skipforward.enabled:=false; +skipback.enabled:=false; +progress.enabled:=false; +play.enabled:=false; +fwd.enabled:=false; +bck.enabled:=false; +pause.enabled:=false; +timermode:=0; +end; +end; + + +procedure killspeech; +begin + +end; + + +procedure showerror(txt : string; errortype : integer); +var +showerrortext : string; +fl : textfile; +dt : string; +begin +killspeech; +if errortype=0 then showerrortext:='File:'+copy(txt,1,length(txt)-1)+'? does not exist'; +if errortype=1 then showerrortext:='File:'+txt+' is corrupt'; + +if (jukebox<>nil) then begin + if jukebox.visible=true then begin + jukebox.domessage(showerrortext); + end; +end; + +if config.errorlog<>'' then begin + assignfile(fl,config.errorlog); + try + if fileexists(config.errorlog) then append(fl) else rewrite(fl); + begin + if (filesize(fl)>(10240 div 128)) then begin; closefile(fl); rewrite(fl);end; + datetimetostring(dt,'ddddd tt',now); + writeln(fl,dt+' - '+showerrortext); + closefile(fl); + end; + except; + end; +end; + + +if config.creditsystem=true then begin +//if autoplaymode=true then startautoplay; +end; + + + + +//if ((uppercase(paramstr(1))='/J') or (KIOSK=true)) then exit; + +end; + +function gettrackatfilepos(i : integer;pth : string) : string; +var +s : string; +begin +mainform.maketitles(pth,i,s); +result:=s; +end; + +procedure Tmainform.tracklistClick(Sender: TObject); +var +ts : string; +fn : string; +seconds : integer; +minutes : integer; +sec : string; +begin +progressmove:=true; +progress.position:=0; +progressmove:=false; +If tracklist.itemindex<9 then ts:='0'+InttoStr(tracklist.itemindex+1) else ts:=InttoStr(tracklist.itemindex+1); + +If (tracklist.itemindex>-1) then begin + fn:=currentalbumpath+'\TRACK'+ts+'.MP3'; + //if fileexists(fn)=false then fn:=currentalbumpath+'\'+tracklist.items[tracklist.itemindex]+'.mp3'; + +if fileexists(fn)=false then begin + fn:=currentalbumpath+'\'+gettrackatfilepos(tracklist.itemindex+1,copy(currentalbumpath,length(config.path),length(currentalbumpath))); +end; + +end; +timers.enabled:=false; +if fn='' then begin +counter.caption:='---'; +mainform.caption:='No track'; +exit; +end; + + + + + +mp.filename:=fn; +mp.notify:=false; +if fileexists(fn)=false then begin + //extractalbumartist(fn,alb,art); + showerror(fn,0); + jukebox.skipBadTrack(); + exit; +end; + +try +mp.open; +except +//extractalbumartist(fn,alb,art); + showerror(fn,1); + jukebox.skipBadTrack(); + exit; +end; + + +setupfrequency; +seconds:=mp.length div 1000; +minutes:= seconds div 60; +seconds:=seconds-(minutes*60); +sec := inttostr(seconds); +if seconds<10 then sec:='0'+inttostr(seconds); +counter.caption:=inttostr(minutes)+':'+sec; +Tr.Caption:='LEN'; +stop.down:=true; +play.enabled:=true; +fwd.enabled:=true; +bck.enabled:=true; +pause.enabled:=true; +skipforward.enabled:=true; +skipback.enabled:=true; +progress.enabled:=true; +if albumlist.Items.count = 0 then exit; +mainform.caption:=albumlist.items[albumlist.itemindex]+' : '+tracklist.items[tracklist.itemindex]; +if jukebox<>nil then begin + jukebox.domessage('Now playing: '+mainform.caption); + mp.Notify:=true; +end; +end; + +procedure Tmainform.MPNotify(Sender: TObject); +var +alb : string; +wasautoplaying: boolean; +begin +if paused=true then begin +exit; +end; + + +wasautoplaying:=autoplaying; +If (Mp.NotifyValue=nvSuccessful) then autoplaying:=false; + + +If playlistbut.checked=true then begin + +If (Mp.NotifyValue=nvSuccessful) and (playmode=1) then begin + If dcurrentlyplayingtrack+1<=dplaylist.items.count-1 then begin + dcurrentlyplayingtrack:=dcurrentlyplayingtrack+1; + playlistpanel.lb.highlighteditem2:=dcurrentlyplayingtrack; + if playlistpanel.Visible=true then playlistpanel.lb.Paint; + alb:=setuptrackname(dcurrentlyplayingtrack); + playmode:=0; + MP.Notify:=true; + timers.enabled:=true; + sorttimemode; + + + if showcover.checked=true then begin + covershow(dPlayListMatrixAlb[dcurrentlyplayingtrack],true); + end; + + if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); + mpplay; + if mutebut.down=true then volchange(mutebut) else volchange(sender); + playmode:=1; + play.down:=true; + end + else begin + stop.down:=true; + timers.enabled:=false; + counter.caption:='---'; + mainform.caption:='No track'; + if jukebox.visible=true then jukebox.domessage(''); + vol.Position:=config.volume; + jukebox.backgroundtimer.tag:=1; + jukebox.backgroundtimercount:=0; + if (wasautoplaying=true) and (autoplaymode=true) then startautoplay; + end; + end; + MP.Notify:=true; + +end; + + +If playlistbut.checked=true then begin + MP.Notify:=true; + exit; +end; + + If (Mp.NotifyValue=nvSuccessful) and (playmode=1) then begin + If tracklist.itemindex+1<tracklist.items.count then begin + tracklist.itemindex:=tracklist.itemindex+1; + tracklistClick(tracklist); + playmode:=0; + MP.Notify:=true; + timers.enabled:=true; + sorttimemode; + //alb:=setuptrackname(dcurrentlyplayingtrack); + if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); + + mpplay; + if mutebut.down=true then volchange(mutebut) else volchange(sender); + playmode:=1; + play.down:=true; + end + else begin + stop.down:=true; + timers.enabled:=false; + vol.Position:=config.volume; + + if autoplaymode=true then startautoplay; + end; + end; + MP.Notify:=true; +end; + + + +procedure Tmainform.playClick(Sender: TObject); +var +alb : string; +begin + +playbutmod.visible:=false; + +{Play List Style} +//if play.down=false then begin +//pause.down:=true; +//pauseclick(Sender); +//exit; +//end; + + +if paused=true then begin +mpplay; + +if mutebut.down=true then volchange(mutebut) else volchange(sender); +paused:=false; +exit; +end; + + + +dcurrentlyplayingtrack :=dplaylist.itemindex; +playlistpanel.lb.highlighteditem2:=dcurrentlyplayingtrack; +if playlistpanel.Visible=true then playlistpanel.lb.Paint; + + +If dcurrentlyplayingtrack=-1 then dcurrentlyplayingtrack:=0; +if playlistbut.checked = true then begin +alb:=setuptrackname(dcurrentlyplayingtrack); +if dj.down=true then doDJ(dplaylistMatrixAlb[dcurrentlyplayingtrack]); + + if showcover.checked=true then begin + covershow(dplaylistMatrixAlb[dcurrentlyplayingtrack],true); + end; + +playmode:=1; +sorttimemode; +play.down:=true; +mpplay; +if mutebut.down=true then volchange(mutebut) else volchange(sender); +timers.enabled:=true; +end; + +if playlistbut.checked = true then exit; + +{CD Style} +//if dj.down=true then doDJ(dPlayListMatrixAlb[dcurrentlyplayingtrack]); + +playmode:=1; +sorttimemode; +mpplay; +if mutebut.down=true then volchange(mutebut) else volchange(sender); +timers.enabled:=true; + +end; + +procedure Tmainform.StopClick(Sender: TObject); +begin +//if jukebox<>nil then if jukebox.visible=true then jukebox.domessage(''); +if assigned(video) then if video.Visible=true then video.hide; +if jukebox.coverimagepanel.Visible=true then jukebox.coverimagepanel.Visible:=false; + +progressmove:=true; +progress.position:=0; +progressmove:=false; +paused:=false; +killspeech; +if playlistbut.checked=true then begin +dcurrentlyplayingtrack :=dplaylist.itemindex; + +if (uppercase(copy(mainform.mp.filename,length(mainform.mp.filename),1))='G') then loadblankmp3file; + + +If dcurrentlyplayingtrack=-1 then dcurrentlyplayingtrack:=0; +playmode:=0; +application.processmessages; +try +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +mp.stop; +except +end; +dtracklistclick(dtracklist); +timers.enabled:=false; +exit; +end; + +playmode:=0; +try +mp.stop; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +except +end; + +timers.enabled:=false; +tracklistclick(tracklist); + +end; + + + +procedure Tmainform.bckClick(Sender: TObject); +var +dplaymodewas : integer; +begin +vol.position:=config.volume; +dplaymodewas:=0; +If playlistbut.checked=true then begin +if playmode=1 then begin + dplaymodewas:=1; + end; + if (dplaylist.itemindex>0) then dplaylist.itemindex:=dplaylist.itemindex-1; + dplaylistclick(sender); + if dplaymodewas=1 then playclick(sender); + exit +end; + + + +If playmode=0 then begin + If tracklist.itemindex-1>-1 then begin + tracklist.itemindex:=tracklist.itemindex-1; + tracklistClick(tracklist); + end; +end; + +If (playmode=1) then begin + If tracklist.itemindex-1>-1 then begin + tracklist.itemindex:=tracklist.itemindex-1; + tracklistClick(tracklist); + playmode:=0; + MP.Notify:=true; + sorttimemode; + mpplay; + if mutebut.down=true then volchange(mutebut) else volchange(sender); + timers.enabled:=true; + playmode:=1; + play.down:=true; + end + else begin + If tracklist.itemindex-1>-1 then begin + tracklist.itemindex:=tracklist.itemindex-1; + tracklistClick(tracklist); + timers.enabled:=false; + end; + end; + + end; + If playmode=1 then play.down:=true; + If playmode=0 then stop.down:=true; +end; + +procedure Tmainform.fwdClick(Sender: TObject); +var +dplaymodewas : integer; +begin +vol.position:=config.volume; +If playlistbut.checked=true then begin + dplaymodewas:=0; + if playmode=1 then begin + dplaymodewas:=1; + //stopclick(sender); + //stop.down:=true; + end; + if (dplaylist.itemindex>=0) then begin + dplaylist.itemindex:=dplaylist.itemindex+1; + dplaylistclick(sender); + if dplaymodewas=1 then playclick(sender); + end; +exit +end; + + +If playmode=0 then begin + If tracklist.itemindex+1<tracklist.items.count then begin + tracklist.itemindex:=tracklist.itemindex+1; + tracklistClick(tracklist); + End; + End; + +If (playmode=1) then begin + If tracklist.itemindex+1<tracklist.items.count then begin + tracklist.itemindex:=tracklist.itemindex+1; + tracklistClick(tracklist); + playmode:=0; + MP.Notify:=true; + sorttimemode; + mpplay; + if mutebut.down=true then volchange(mutebut) else volchange(sender); + + timers.enabled:=true; + playmode:=1; + play.down:=true; + end + else begin + If tracklist.itemindex+1<tracklist.items.count then begin + tracklist.itemindex:=tracklist.itemindex+1; + tracklistClick(tracklist); + timers.enabled:=false; + end; + end; + end; + If playmode=1 then play.down:=true; + If playmode=0 then stop.down:=true; +end; + +procedure Tmainform.TimersTimer(Sender: TObject); +var + +seconds : integer; +minutes : integer; +sec : string; +begin +application.processmessages; +//if audition_mode=true then begin +//if mp.Position>5000then fwdclick(Sender); +//end; + progressmove:=true; +try +if mp.error=0 then progress.max:=Round(mp.length/1000); + progress.position:=Round(mp.position/1000); +except +try +mp.stop; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +except; +end; +end; + progressmove:=false; + seconds:=progress.position; + minutes:= seconds div 60; + seconds:=seconds-(minutes*60); + sec := inttostr(seconds); + If timermode=0 then begin + if seconds<10 then sec:='0'+inttostr(seconds); + counter.caption:=inttostr(minutes)+':'+sec; +end; + + +If timermode=1 then begin +try + seconds:=round((mp.length-mp.position)/1000); + minutes:= seconds div 60; + seconds:=seconds-(minutes*60); + sec := inttostr(seconds); + if seconds<10 then sec:='0'+inttostr(seconds); + counter.caption:=inttostr(minutes)+':'+sec; +except +mp.stop; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +end; +end; + +end; + + +procedure Tmainform.timemodebutClick(Sender: TObject); +begin +if timermode=0 then begin +timermode:=1; +end +else begin +timermode:=0; +end; +sorttimemode; +end; + + + + +procedure Tmainform.sorttimemode; +begin +if timermode=1 then begin +counter.hint:='Time Remaining'; +tr.hint:='Time Remaining'; +tr.caption:='TR' +end +else begin +counter.hint:='Time Elapsed'; +tr.hint:='Time Elapsed'; +tr.caption:='TE' +end; +end; + + + + + + +procedure Tmainform.playlistbutClick(Sender: TObject); +begin +dj.enabled:=true; +//open.enabled:=true; +//save.enabled:=true; +playlistbut.checked:=true; +if dalbumlist.itemindex=-1 then begin +dalbumlist.itemindex:=albumlist.itemindex; +dalbumlistchange(nil); +end; + +numberoftracks.enabled:=true; +If playlistbut.checked=true then begin +//trackedit.enabled:=false; +playlist.visible:=true; +end; +buttonsMouseMove(nil,[],0,0); +end; + + + + +procedure Tmainform.CdplayerbutClick(Sender: TObject); +begin +dj.enabled:=false; +//save.enabled:=false; +numberoftracks.enabled:=false; +cdplayerbut.checked:=true; +If cdplayerbut.checked=true then begin +//trackedit.enabled:=true; +playlist.visible:=false; +end; +buttonsMouseMove(nil,[],0,0); +end; + + + +procedure Tmainform.randombutClick(Sender: TObject); + +begin +rnd_dialog.showmodal; +playlistbutClick(playlistbut); +playlistbut.checked:=true; +screen.cursor:=crDefault; +dplaylist.itemindex:=0; +//trackedit.enabled:=false; +buttonsMouseMove(nil,[],0,0); +end; + + + + + +procedure Tmainform.DalbumlistChange(Sender: TObject); +var +n : integer; +spp,scrap: string; +{playlist Style} +begin + + n:=dalbumlist.itemindex+1; + config.dlastalbum:=n; +if albumcount<>0 then begin + spp:=album[n].path; + dalbumlist.hint:=dalbumlist.items[dalbumlist.itemindex]; +end; + if albumcount<>0 then if loadtitles(dtracklist,n)=false then begin + maketitles(album[n].path,0,scrap); + loadtitles(dtracklist,n) + end; + dtracklist.itemindex:=0; +end; + +procedure Tmainform.dtracklistClick(Sender: TObject); +var +hintitem : string; +begin +if (dtracklist.itemindex>-1) and (dtracklist.items.count>0) then hintitem:='"'+dtracklist.items[dtracklist.itemindex]+'"'; + +add.hint:='Add '+hintitem+' to end of playlist'; +Insert.hint:='Insert "'+hintitem+'" into playlist'; + +If dtracklist.itemindex>-1 then add.enabled:=true; +If dplaylist.itemindex>-1 then del.enabled:=true; +If dplaylist.itemindex=-1 then del.enabled:=false; + +end; + +procedure Tmainform.AddClick(Sender: TObject); +var +n : integer; +alb,art : string; +begin +audition.enabled:=true; + +if (config.norepeat=true) and (dplaylist.itemindex>-1) then begin + for n:=dplaylist.itemindex to dplaylist.items.count-1 do begin; + if (dplaylistMatrixAlb[n]=dcurrentalbumpath) and (dplaylistMatrixTrk[n]=dtrackList.itemindex+1) then begin + jukebox.credit.RefundCredit; + jukebox.domessage('NO CREDIT TAKEN - TRACK ALREADY IN QUEUE'); + exit; + end; + end; +end; + + + +if (dtracklist.itemindex>-1) then begin + dplaylist.items.add (dtracklist.items[dtracklist.itemindex]); + setlength(dplaylistmatrixtrk,dplaylist.items.count+1); + setlength(dplaylistMatrixAlb,dplaylist.items.count+1); + + dplaylistMatrixAlb[dcurrenttrack]:=dcurrentalbumpath; + dplaylistMatrixTrk[dcurrenttrack]:=dtrackList.itemindex+1; + dcurrenttrack:=dcurrenttrack+1; + + if jukebox<>nil then begin + if dtracklist.itemindex+1<dtracklist.items.count then jukebox.domessage('Added Track: '+dtracklist.items[dtracklist.itemindex]); + if config.trackslogfile<>'' then begin + extractalbumartist(dcurrentalbumpath,alb,art); + jukebox.log.writeentry(art,alb,dtracklist.items[dtracklist.itemindex]); + end; + end; + + + if dplaylist.items.count>0 then begin + play.enabled:=true; + fwd.enabled:=true; + bck.enabled:=true; + pause.enabled:=true; + end; + + if dplaylist.itemindex=-1 then begin + dplaylist.itemindex:=0; + dplaylistclick(Sender); + end; + +end; + +if dplaylist.items.count>0 then begin + //save.enabled:=true; + clearlist.enabled:=true; + end + else begin + //save.enabled:=false; + clearlist.enabled:=false; +end; + +end; + +procedure Tmainform.dplaylistClick(Sender: TObject); +begin +vol.position:=config.volume; +if dplaylist.itemindex>-1 then del.hint:='Remove "'+dplaylist.items[dplaylist.itemindex]+'" from playlist'; +If dplaylist.itemindex>-1 then del.enabled:=true; +If dplaylist.itemindex=-1 then del.enabled:=false; +if (sender=dplaylist) and (dplaylist.itemindex<>-1) and (dplaylist.itemindex<>dcurrentlyplayingtrack) then playbutmod.visible:=true; +if (sender=dplaylist) and (dplaylist.itemindex=dcurrentlyplayingtrack) then playbutmod.visible:=false; + +if sender=dplaylist then begin +// menupos:=mouse.cursorpos; +// dplaylistmenu.popup(menupos.x,menupos.y); +end; +end; + +procedure Tmainform.DelClick(Sender: TObject); +var +old : integer; +n : integer; +begin + + +old:=dplaylist.itemindex; +dplaylist.Items.delete(dplaylist.itemindex); +//if dplaylist.items.count>0 then save.enabled:=true else save.enabled:=false; + +for n:=old to dplaylist.Items.count do begin +dplaylistMatrixAlb[n]:=dplaylistMatrixAlb[n+1]; +dplaylistMatrixTrk[n]:=dplaylistMatrixTrk[n+1]; +end; + +If dplaylist.Items.count > 0 then begin +If old<=dplaylist.Items.count-1 then dplaylist.itemindex:=old else begin +dplaylist.itemindex:=old-1; +end; + +dcurrenttrack:=dcurrenttrack-1; + +end +else begin +del.enabled:=false; +clearlist.enabled:=false; +dcurrenttrack:=0; +end; +if dplaylist.items.count=0 then begin +progress.enabled:=false; +skipforward.enabled:=false; +skipback.enabled:=false; +play.enabled:=false; +bck.enabled:=false; +pause.enabled:=true; +fwd.enabled:=false; +end; +end; + + +function Tmainform.setuptrackname(num : integer) : string; +var +ts : string; +fn : string; +seconds : integer; +minutes : integer; +sec : string; +alb : string; +scrap1,scrap2 : string; +a,b : string; +videomode : boolean; +begin +if albumcount=0 then exit; +if length(dplaylistMatrixAlb)=0 then exit; + + +killspeech; +progressmove:=true; +progress.position:=0; +progressmove:=false; + + + + +alb:=dplaylistMatrixAlb[num]; + +If dplaylistMatrixTrk[num]<10 then ts:='0'+inttostr(dplaylistMatrixTrk[num]) else ts:=inttostr(dplaylistMatrixTrk[num]); +fn:=alb+'\TRACK'+ts+'.MP3'; +//if fileexists(fn)=false then fn:=alb+'\TRACK'+ts+'.MPG'; + +if fileexists(fn)=false then begin + fn:=alb+'\'+gettrackatfilepos(dplaylistMatrixTrk[num],copy(alb,length(config.path),length(alb))); +end; + + +timers.enabled:=false; +dplaylist.itemindex:=num; +if (fn='') or (alb='') then begin +counter.caption:='---'; +mainform.caption:='No track'; +jukebox.domessage(''); +exit; +end; +mp.filename:=fn; +mp.notify:=false; + + + +if fileexists(fn)=false then begin + +showerror(fn,0); +jukebox.skipbadtrack(); + +if (dplaylist.itemindex)<>dplaylist.items.count-1 then begin +fwdclick(nil); +exit; +end +else +begin + +stopclick(nil); +exit; +end; +end; + + + + +try +mp.open; +except; +showerror(mp.filename,1); +jukebox.skipbadtrack(); +loadblankmp3file; +mainform.play.down:=true; +fn:=a+' '+b+' TRACK: '+ts; +exit; +end; + +if (uppercase(copy(mp.filename,length(mp.filename),1))='G')then begin +{$IFDEF KIOSK} +videomode:=true; +{$ENDIF} +{$IFNDEF KIOSK} +videomode:=false; +{$ENDIF} + + + + if ((videomode=false) or (config.videomonitor=0)) then begin + mainform.mp.Display:=jukebox.coverimagepanel; + jukebox.jbcovershow(''); + mainform.mp.DisplayRect:=jukebox.coverimagepanel.ClientRect; + end else begin + videoshow; + end; + + + +end; + + setupfrequency; + seconds:=mp.length div DIVISION; + minutes:= seconds div 60; + seconds:=seconds-(minutes*60); + sec := inttostr(seconds); + if seconds<10 then sec:='0'+inttostr(seconds); + counter.caption:=inttostr(minutes)+':'+sec; + Tr.Caption:='LEN'; + Tr.Refresh; +stop.down:=true; +progress.enabled:=true; +skipforward.enabled:=true; +skipback.enabled:=true; +play.enabled:=true; +fwd.enabled:=true; +bck.enabled:=true; +pause.enabled:=true; +mainform.caption:=dplaylist.items[num]+' - '+extractalbumandaristfrompath(dplaylistMatrixAlb[num],scrap1,scrap2); +result:=alb; +jukebox.domessage('Now playing '+mainform.caption); + + + +end; + + + +procedure Tmainform.restoreClick(Sender: TObject); +begin +mainform.Windowstate:=wsnormal; +mainform.BorderStyle:=bsSingle; +end; + +procedure Tmainform.picturepanelClick(Sender: TObject); +begin +restoreClick(Sender); +end; + + + +procedure Tmainform.clearlistClick(Sender: TObject); +begin +stopclick(sender); +stop.down:=true; +dcurrenttrack:=0; +dplaylist.Items.clear; +progress.enabled:=false; +skipforward.enabled:=false; +skipback.enabled:=false; +play.enabled:=false; +bck.enabled:=false; +pause.enabled:=true; +fwd.enabled:=false; +del.enabled:=false; +clearlist.enabled:=false; +end; + + +procedure Tmainform.coverMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin +//if button=mbRight then thumbviewgo(true); +end; + + + + + +procedure Tmainform.doDJ(album : string); +var +a,b,c,d : integer; +pre : string; +artist,alb,track : string; + +begin +killspeech; +randomize; +if phrases.count>0 then begin +a :=round(random(phrases.count)); +pre:=phrases.data[a]; + +a := round(random*phrases.count-1); +if (a=((phrases.count+1) div 2)) and (config.timeannounce=true) then pre:=formatdatetime('hh mm',time); +end; +extractalbumandaristfrompath(album,artist,alb); + + + + +if playlistbut.checked=true then track:=dplaylist.items[dplaylist.itemindex]; +if cdplayerbut.checked=true then track:=tracklist.items[tracklist.itemindex]; + +d := round(random*3)+1; +c := round(random*3)+1; +b := round(random*2)+1; +a:= round(random*40)+140; + +case d of +1 : d:=vtxtst_STATEMENT; +2 : d:=vtxtst_COMMAND; +3 : d:=vtxtst_WARNING; +4 : d:=vtxtst_READING; +5 : d:=vtxtst_QUESTION; + +end; + +case c of +1 : c:=vtxtst_STATEMENT; +2 : c:=vtxtst_COMMAND; +3 : c:=vtxtst_WARNING; +4 : c:=vtxtst_READING; +5 : d:=vtxtst_QUESTION; +end; + + + +if config.dj_comment=false then begin +//speak(artist+','+' '+alb+','+track ,a , d or vtxtst_VERYHIGH); +exit; +end; + +//if dplaylist.itemindex<>0 then speak(pre, a, c or vtxtst_VERYHIGH); +//if b=1 then speak(track+' by '+artist, a, d or vtxtst_VERYHIGH); +//if b=2 then speak(track+' from '+alb+' by '+artist,a , d or vtxtst_VERYHIGH); +//if b=3 then speak(track+' '+artist ,a , d or vtxtst_VERYHIGH); + +end; + + +procedure Tmainform.FormClose(Sender: TObject; var Action: TCloseAction); +begin + +{if initcovers<>nil then begin + initcovers.terminate; + // initcovers.waitfor; +end;} +killspeech; +writeini; +deletefile(blankfilepath); +application.OnMessage:=nil; +application.terminate; +end; + +procedure Tmainform.numberoftracksTimer(Sender: TObject); +var +numoftracks,currenttrack : string; +begin + +if playmode=0 then begin +str(string(dplaylist.items.count,numoftracks)); +playlistcaption.caption:=numoftracks+' tracks'; +end; + +if playmode=1 then begin +str(string(dplaylist.itemindex+1,currenttrack); +str(dplaylist.items.count,numoftracks); +playlistcaption.caption:=currenttrack+'\'+numoftracks+' tracks'; +end; + + +if playlistcaption.tag=0 then begin +playlistcaption.visible:=false; +playlistcaption.tag:=1; +exit; +end; + +if playlistcaption.tag=1 then begin +playlistcaption.visible:=true; +playlistcaption.tag:=0; +end; + + +end; + + +procedure Tmainform.coverClick(Sender: TObject); +begin +covershow(currentalbumpath,true); +//if tracklist.items.count>0 then mainform.playlist.setfocus; +end; + + + + + +procedure Tmainform.showcoverClick(Sender: TObject); +begin +if (showcover.checked=true) and (playmode=1) and (dplaylist.itemindex<>-1) then begin; +if dcurrentlyplayingtrack=0 then exit; +covershow(dPlayListMatrixAlb[dcurrentlyplayingtrack],false); +end; +end; + + + +procedure Tmainform.skipbackward(Sender: TObject); +begin +progressmove:=true; +if (progress.position-(progress.linesize*2)>0) then progress.position:=progress.position-(progress.linesize*2) else progress.Position:=0; +progressmove:=false; + +progressChange(Sender); +if playmode=1 then begin +if paused=false then play.down:=true else pause.down:=true; +end; + +end; + + +procedure Tmainform.progressChange(Sender: TObject); +var +seekst : TMCI_Seek_Parms; + +begin + + +if progressmove=false then begin +fillchar(seekst,sizeof(seekst),0); +seekst.dwTo := progress.position*DIVISION; +if (progresslastpos<>seekst.dwTo) then begin +mciSendCommand(mp.DeviceID, MCI_SEEK,MCI_TO or MCI_WAIT,longint(@seekst)); +if (paused=false) and (stop.down=false) then begin mp.play; +{$IFDEF backgroundstreamplayer} + stopStream(); +{$ENDIF} + end; +end; +progresslastpos:=seekst.dwTo; +//timerstimer(self); + +end; + + +if paused=false then exit; + +if (playmode=1) and (paused=false) then begin +mpplay; +if mutebut.down=true then volchange(mutebut) else volchange(sender); +end; +end; + +procedure Tmainform.skipforwardClick(Sender: TObject); +begin +progressmove:=true; +if (progress.position+(progress.linesize*2)<progress.max) then progress.position:=progress.position+(progress.linesize*2) else progress.position:=progress.max; +progressmove:=false; + +progressChange(Sender); +if playmode=1 then begin +if paused=false then play.down:=true else pause.down:=true; +end; +end; + + +procedure Tmainform.pauseClick(Sender: TObject); +begin +if paused=true then begin +paused:=false; +play.down:=true; +mp.play; +exit; +end; +paused:=true; +try +mp.pause; +except; +end; +end; + +procedure Tmainform.volChange(Sender: TObject); +var +p : MCI_DGV_SETAUDIO_PARMS; +begin + + + +if sender=mutebut then if mutebut.down=true then mutebut.down:=true else mutebut.down:=false; + drawtriangle(vol.position); + { Volume: 0 - 1000 } + p.dwCallback := 0; + p.dwItem := MCI_DGV_SETAUDIO_VOLUME; + p.dwValue := 1000* vol.position div VOLINCREMENTS; + if vol.position=VOLINCREMENTS then begin + p.dwValue:=1000; + end; + if mutebut.down=true then p.dwValue:=0; + + p.dwOver := 0; + p.lpstrAlgorithm := nil; + p.lpstrQuality := nil; + + mciSendCommand(MP.DeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p)); + + if (vol.position>0) then setStreamVolume(vol.position / VOLINCREMENTS) else setStreamVolume(0); + if (mutebut.down=true) then setStreamVolume(0); + + + + if (volumedisplay<>nil) then begin + if (sender=vol) or (sender=mutebut) then volume.draw(vol.position); + if (jukebox.Visible=true) + //and (ripmain.visible=false) + then jukebox.SetFocus; + + end; +end; + + + +procedure tmainform.drawtriangle(pos : integer); +var +a : array [0..2] of tpoint; +fs : tfillstyle; +p : tpoint; +pnm : tpenmode; +r : integer; +m : integer; +begin +pos:=round(pos / 3.3); +r:=round( ((mainform.vol_triangle.width-2) / 10)*pos); +pnm:=pmCopy; +mainform.vol_triangle.canvas.pen.mode:=pnm; +mainform.vol_triangle.canvas.pen.width:=1; +fs:=fsborder; +mainform.vol_triangle.canvas.brush.color:=clBtnFace; +mainform.vol_triangle.canvas.floodfill(1,1,clBtnFace,fs); +//vol_triangle.canvas.brush.color:=clBtnShadow; + + +p.x:=0; +p.y:=mainform.vol_triangle.height-2; +mainform.vol_triangle.canvas.penpos:=p; +mainform.vol_triangle.canvas.pen.color:=clBtnHighlight; +mainform.vol_triangle.canvas.lineto(mainform.vol_triangle.width-1,mainform.vol_triangle.height-2); +mainform.vol_triangle.canvas.pen.color:=clBtnHighlight; +mainform.vol_triangle.canvas.lineto(mainform.vol_triangle.width-1,0); +mainform.vol_triangle.canvas.pen.color:=clBtnShadow; +mainform.vol_triangle.canvas.lineto(p.x,p.y); + +a[0].x:=2; +a[0].y:=mainform.vol_triangle.height-3; + +a[1].x:=r; +a[1].y:=(mainform.vol_triangle.height-3); + +a[2].x:=r; +m:=round(((mainform.vol_triangle.height-3)/10)*pos); + +a[2].y:=(mainform.vol_triangle.height-3)-m; + +if pos=0 then exit; +mainform.vol_triangle.canvas.brush.color:=clhighlight; +mainform.vol_triangle.canvas.polygon(a); + + + + + + +end; + + +procedure Tmainform.mutebutClick(Sender: TObject); +begin +volchange(sender); +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +end; + + +procedure Tmainform.auditionClick(Sender: TObject); +begin +if audition.down=true then begin +audition_mode:=true; +end; + +if audition.down=false then begin +audition_mode:=false; +stopclick(sender); +stop.down:=true; +end; +end; + +procedure tmainform.mpplay; +var +alb,art,fn : string; +begin +if fileexists(mp.filename)=false then begin +extractalbumartist(mp.filename,alb,art); +//fn:=alb+' '+art; +showerror(fn,0); + +stop.down:=true; +exit; +end; + +counter.caption:='---'; +if audition_mode=false then try mp.play; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +except; end; +if audition_mode=true then begin +mp.endpos:=1000*config.auditiontimeout; +mp.Play; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} + +end; +end; + + + + + +procedure Tmainform.djClick(Sender: TObject); +begin +//if (DJ.down=true) then if (initspeech<>0) then begin +{$IFNDEF kiosk} +messagedlg('The Microsoft Text-to-Speech runtime files (SAPI) are not installed on this system.',mterror,[mbOk],0); + +{$ENDIF} + +dj.enabled:=false; +//end; +end; + + + +procedure Tmainform.coverpickbutClick(Sender: TObject); +begin +//thumbviewgo(true); +thumbmode:=1; +jukebox.setvisualspanel(true); +jukebox.showmodal; +albumlist.itemindex:=jukebox.thumbs.itemindex; +albumlistchange(nil); +dalbumlist.itemindex:=jukebox.thumbs.itemindex; +dalbumlistchange(nil); + +coverpickbut.down:=false; +end; + + + + + +procedure sortAlbumsByDate(); +var +i, j : integer; +c : TAlbumType; +begin +for i:= Low(albumref) to High(albumref) -1 do begin + for j:= i +1 to High(albumref) do begin + if albumref[i].added < albumref[j].added then begin + c:=albumref[i]; + albumref[i]:=albumref[j]; + albumref[j]:=c; + end; + end; +end; + + +end; + + +procedure tmainform.initlistboxes(sorted : boolean); +var +n : integer; +hidden : boolean; +begin + +albumlist.clear; +dalbumlist.clear; +n:=0; +albumlist.Items.Delimiter:=#2; + +sortAlbumsByDate(); + + +While (n<albumcount) do begin +//if (albumref[n].artist<>'') and (albumref[n].album <>'') then begin + if (albumref[n].artist<>'') then begin + albumlist.items.addobject (albumref[n].artist+' - '+albumref[n].album,@albumref[n]); + dalbumlist.items.add(albumref[n].artist+' - '+albumref[n].album); + application.processmessages; + end; + n:=n+1; + //end; +end; + + +// albumlist is sorted on first run. Index those positions for thumbs +if (jukebox=nil) then begin + for n:=0 to albumlist.items.count-1 do begin + talbumtype(pointer(albumlist.Items.Objects[n])^).originalpos:=n+1; + end; +end; + + +initmessage('Creating albumlists..','',''); +for n:=0 to albumlist.items.count-1 do begin +album[n+1]:=talbumtype(pointer(albumlist.Items.Objects[n])^); + +{ + + for x:=1 to albumcount do begin + application.processmessages; + if comparetext(albumlist.items[n],albumref[x].artist+' - '+albumref[x].album)=0 then begin + album[n+1].artist:=albumref[x].artist; + album[n+1].album:=albumref[x].album; + end; + +end;} +end; + + + + + + +initmessage('Creating albumlists....','',''); + + +if (mp.filename<>'') and (cdplayerbut.checked=true) and (play.down=true) then +try +stopclick(nil); +except; +end; + + +if (config.lastalbum<=albumlist.items.count) and (config.dlastalbum>0) then albumlist.itemindex:=config.lastalbum-1 else albumlist.itemindex:=0; +if (config.dlastalbum<=dalbumlist.items.count) and (config.dlastalbum>0) then dalbumlist.itemindex:=config.dlastalbum-1 else dalbumlist.itemindex:=0; + +albumlistChange(albumlist); +dalbumlistChange(dalbumlist); + +if (jukebox<>nil) then exit; + + +if albumcount=0 then hidden:=false else hidden:=true; +if (hidden=false) and (dplaylist.items.count=0) then begin + cdplayerbutclick(nil); + butcdlist.visible:=hidden; + playlistbut.enabled:=hidden; +end; + +if (hidden=false) and (cdplayerbut.checked=true) and (dplaylist.items.count<>0) then begin + playlistbutclick(nil); +end; + + dtracklist.clear; + //open.enabled:=true; + add.enabled:=hidden; + insert.enabled:=hidden; + transport.Enabled:=hidden; + playpanel.visible:=hidden; + //menuprint.enabled:=hidden; + tracklist.visible:=hidden; + cover.visible:=hidden; + coverpanel.visible:=hidden; + butcdlist.visible:=true; + playlistbut.enabled:=true; + albumlist.enabled:=hidden; + dalbumlist.enabled:=hidden; + //trackedit.enabled:=hidden; + //burncdbut.enabled:=hidden; + //butcdburn.visible:=hidden; + butcd.visible:=hidden; + CDplayerbut.enabled:=hidden; + randombut.enabled:=hidden; + jukeboxbut.enabled:=true; + coverpickbut.enabled:=hidden; + butrandom.visible:=hidden; + butjukebox.visible:=hidden; + + + + + + + + + +initmessage('Initialising Jukebox....','',''); +//if (albumlist.items.count>2) then begin +gojukebox(false); +//end; + +if albumcount=0 then jukebox.domessage('No CDs on system'); +if ((uppercase(paramstr(1))='/J') or (KIOSK=true)) and (jukeboxbut.enabled=true) then begin + jukeboxbutclick(nil); + if (config.autoplay=true) and (albumcount>0) then begin + //initautoplay; + //startautoplay; + jukebox.GUITimer.tag:=3; + end; +end; + + +end; + + +procedure Tmainform.FormCreate(Sender: TObject); +const +toolbaralpha=0.35; +var +hc : hcursor; +devrem : pchar; +_devrem : string; +remv : integer; +reg : Tregistry; +pp : tbitmap; +tr : Trect; +begin +{$IFNDEF NEWMEDIAPLAYER} +mp:=Tmediaplayer.Create(self); +mp.parent:=self; +mp.Visible:=false; +mp.onnotify:=MPNotify; +{$ENDIF} + +{$IFDEF NEWMEDIAPLAYER} +mp:=TDXMP.Create(self.handle); + +{$ENDIF} + +{$IFDEF backgroundstreamplayer} +InitBassStreamPlayer(); +{$ENDIF} + +{$IFNDEF kiosk} +Save.OnClick:=SaveClick; +Open.OnClick:=OpenClick; +{$ENDIF} +mainform.DoubleBuffered:=true; +toolbar.ControlStyle:=toolbar.ControlStyle + [csOpaque]; + +//create jukebox mode backdrop; needed if jukebox for can't be launched as well (jbnoalbums) +vol.max:=VOLINCREMENTS; + +bg:=tbitmap.create; +bg.width:=screen.width; +bg.height:=screen.height; + + + +sbg:=LoadSkinResource('ADMINBACKDROP','',clNone,true); +tr.top:=0; +tr.left:=0; +tr.bottom:=screen.height; +tr.right:=screen.width; +bg.Canvas.StretchDraw(tr,sbg); +//sbg.free; + + +kiosk:=false; + +{$IFDEF kiosk} +kiosk:=true; +{$ENDIF} + +{$IFDEF tv} +kiosk:=true; +tvmode:=true; +{$ENDIF} +if uppercase(paramstr(1))='KIOSK' then kiosk:=true; + + + +if (kiosk=true) then begin +kiosk:=true; +hc:=loadcursor(hinstance,'BLANKCURSOR'); +screen.Cursors[-21]:=hc; +end; + + +if readini=false then begin + if application.messagebox('Empathy is not yet configured for this user. Configure it now?','Empathy Configuration Not Found',MB_APPLMODAL or MB_ICONQUESTION or MB_YESNO)=IDNO then begin + application.terminate; + exit; + end; + + +installfont; + +config.path:='C:\'; +config.volume:=7; +config.Dj_default:=false; +config.Dj_comment:=false; +config.lastalbum:=1; +config.dlastalbum:=1; +config.jlastalbum:=1; +config.auditiontimeout:=5; +config.burnpath:=''; +config.screensaverpath:=''; +config.timeannounce:=true; +config.hideexit:=true; +config.hidepanel:=false; +config.litewarn:=true; +config.defaultfilteron:=false; +config.autoplay:=true; +config.jukeboxaddall:=true; +config.jukeboxvolumepanel:=true; +config.bitrate:=192; +config.cddbserver:='www.freedb.org'; +config.cddbcgi:='/~cddb/cddb.cgi'; +config.email:='user@isp'; + + + +config.bgstyle:=0; +config.borderstyle:=0; +config.bgcolor:=$FFFFFF; +config.bordercolor:=rgb(90,121,165); +config.timeannounce:=true; +if getwindowsversion<6 then config.cdopt:=0 else config.cdopt:=1; + +//phrases +setlength(phrases.data,10); +phrases.count:=10; +phrases.data[0]:='Great!'; +phrases.data[1]:='Nice!'; +phrases.data[2]:='Just Great!'; +phrases.data[3]:='Here we go.'; +phrases.data[4]:='Excellent'; +phrases.data[5]:='Rockin.'; +phrases.data[6]:='Good Sounds'; +phrases.data[7]:='Lets keep them coming'; +phrases.data[8]:='Super!'; +phrases.data[9]:='Yeh.'; + + + +//genre +genre.count:=27; +setlength(genre.data,genre.count); +genre.data[0]:='Ambient'; +genre.data[1]:='Blues'; +genre.data[2]:='Childrens'; +genre.data[3]:='Classical'; +genre.data[4]:='Comedy'; +genre.data[5]:='Country'; +genre.data[6]:='Dance'; +genre.data[7]:='Disco'; +genre.data[8]:='Easy Listening'; +genre.data[9]:='Electronic'; +genre.data[10]:='Folk'; +genre.data[11]:='Funk'; +genre.data[12]:='Hip Hop'; +genre.data[13]:='Jazz'; +genre.data[14]:='Latin'; +genre.data[15]:='Metal'; +genre.data[16]:='Miscellaneous'; +genre.data[17]:='New Wave'; +genre.data[18]:='Pop'; +genre.data[19]:='Punk'; +genre.data[20]:='Reggae'; +genre.data[21]:='R and B'; +genre.data[22]:='Rock'; +genre.data[23]:='Rock and Roll'; +genre.data[24]:='Spoken Word'; +genre.data[25]:='Various'; +genre.data[26]:='World'; + +//ArtistType +ArtistType.count:=10; +setlength(ArtistType.data,ArtistType.count); +ArtistType.data[0]:='Band'; +ArtistType.data[1]:='DJ'; +ArtistType.data[2]:='Duo'; +ArtistType.data[3]:='Female singer/songwriter'; +ArtistType.data[4]:='Male singer/songwriter'; +ArtistType.data[5]:='Female solo artist'; +ArtistType.data[6]:='Male solo artist'; +ArtistType.data[7]:='Orchestra'; +ArtistType.data[8]:='Ensemble'; +ArtistType.data[9]:='Various'; + + +writeini; +//showprefs(true); +end; + + +backdrp:=tbitmap.create; +backdrp.PixelFormat:=pf24Bit; +backdrp:=LoadSkinResource('BACKGROUND',config.theme.sbackground.skin,config.theme.sbackground.Color,true); +tr.top:=0; +tr.left:=0; +tr.bottom:=screen.height; +tr.right:=screen.width; +jbbg.Free; +jbbg:=tbitmap.create; +jbbg.width:=screen.width; +jbbg.height:=screen.height; +jbbg.Canvas.StretchDraw(tr,backdrp); + + +application.title:=apptitle; +mainform.caption:=apptitle; + + +filter.genre.count:=-1; +filter.artist.count:=-1; +filter.keywords.count:=-1; +filter.recordlabel.count:=-1; +filter.excludecompilations:=false; +filter.excludenoncompilations:=false; +filter.yearlower:=-1; +filter.decadelower:=-1; + + +if firstrun=true then begin +cursor:=crAppstart; +application.ProcessMessages; +pp:=tbitmap.create; +butimages.getbitmap(0,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(1,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(2,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(3,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(4,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(5,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(6,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(7,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(8,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); +butimages.getbitmap(9,pp); +alphablendbitmapwithcolor(pp,CLBTNFACE,pp,toolbaralpha); +butimages.add(pp,nil); + +pp.free; +end; + +toolbar.doublebuffered:=true; +buttonsmousemove(nil,[],0,0); + + +dcurrentlyplayingtrack:=0; +dCurrentTrack:=0; + +thumbsdone:=false; + +cancelthumbs:=false; +paused := false; +MAINFORMWIDTH:=mainform.width; +MAINFORMHEIGHT:=mainform.height; +winposX:=mainform.left; +winposY:=mainform.height; +//thumbsdone:=false; +playmode:=0; +deviceremoveable:=false; + + +reg:=tregistry.Create; +reg.RootKey:=HKEY_LOCAL_MACHINE; + +if getwindowsversion>2 then begin + reg.openkey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts',false) end + else begin + reg.openkey('SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts',false); + end; +if reg.valueexists('Empathy Digital Font (TrueType)')=false then installfont; +reg.free; + + + +if loadedblankmp3file=false then loadblankmp3file; + +albumlist.clear; +dalbumlist.clear; +dplaylist.clear; +del.enabled:=false; +clearlist.enabled:=false; +tracklist.clear; +dtracklist.clear; + + +playlist.visible:=false; +playpanel.visible:=true; +transport.visible:=true; +cdplayerbut.enabled:=true; +playlistbut.enabled:=true; +jukeboxbut.enabled:=true; +//burncdbut.enabled:=true; +randombut.enabled:=true; +//trackedit.enabled:=true; +cdplayerbut.checked:=true; +//options.checked:=false; +//trackedit.checked:=false; + +butcd.visible:=true; +butcdlist.visible:=true; +butrandom.visible:=true; +butjukebox.visible:=true; +//butcdburn.visible:=true; +//butcdrip.visible:=true; +bevel4.visible:=true; +bevel5.visible:=true; + + +showabout(0); + + + + + + +vol.position:=config.volume; + +_devrem:=copy(config.path,0,2); +new(devrem); +strpcopy(devrem,_devrem); +remv:=GetDriveType(devrem); +if (remv and DRIVE_REMOVABLE)=DRIVE_REMOVABLE then deviceremoveable:=true else deviceremoveable:=true; + + + + +buildcontentlist(firstrun);; {=false then begin +hideall; + if (firstrun=true) and (about.visible=true) then begin + about.close; + about.free; + screen.cursor:=crDefault; + end; +exit; +end;} + + +initlistboxes(true); +initmessage('Initialising......','',''); + + + + +mp.timeformat:=tfMilliseconds; +{progress.brush.color:={viewgit}{/viewgit};} +if config.lastalbum<=albumlist.items.count then albumlist.itemindex:=config.lastalbum-1 else albumlist.itemindex:=0; +if config.dlastalbum<=dalbumlist.items.count then dalbumlist.itemindex:=config.dlastalbum-1 else dalbumlist.itemindex:=0; + +albumlistChange(albumlist); +dalbumlistChange(dalbumlist); +playmode:=0; +{dcurrenttrack:=0;} + +if (about.visible=true) then begin + about.close; + about.free; + screen.cursor:=crDefault; +end; + + + + +end; + + + + +function tmainform.buildcontentlist(forceload : boolean) : boolean; +var +res,n,x : integer; +SearchRec : TSearchRec; + +scrap : string; +var +SavedErrorMode : dword; +begin +if forceload=false then begin + result:=true; + if albumcount=0 then result:=false; + exit; +end; +SavedErrorMode:=SetErrorMode(SEM_FailCriticalErrors); +res:=FindFirst(config.path+'*.', {viewgit}{/viewgit}000010, searchrec); +SetErrorMode(SavedErrorMode); +initmessage('Building Album List....','',''); +if res=0 then begin +n:=1; +while res=0 do begin +if (searchrec.name='.') or (searchrec.name='..') then begin + res:=FindNext(searchrec); + continue; +end; + +setlength(albumref,n+1); +setlength(albumrefonload,n+1); +setlength(album,n+1); +x:=pos('__',searchrec.name); + +if (x>0) then begin + albumref[n].artist:=copy(searchrec.name,0,x-1); + albumref[n].album:=copy(searchrec.name,x+2,length(searchrec.name)-x+2); +end else begin + x:=pos('-',searchrec.name); + if (x>0) then begin + + albumref[n].artist:=copy(searchrec.name,0,x-1); + albumref[n].album:=copy(searchrec.name,x+2,length(searchrec.name)-x+2); + + end else begin + albumref[n].artist:=searchrec.name; + albumref[n].album:=searchrec.name; + end; + +end; + albumref[n].path:=searchrec.name; + albumref[n].added:=searchrec.Time; + albumrefonload[n].path:=albumref[n].path; + + albumrefonload[n].artist:=albumref[n].artist; + albumrefonload[n].album:=albumref[n].album; + if (fileexists(config.path+'\'+searchrec.name+'\title.dat'))=false then begin + if not maketitles(searchrec.name,0,scrap) then dec(n); + end else begin + //if blank create + if (w32filesize(config.path+'\'+searchrec.name+'\title.dat')=0) then begin + if not maketitles(searchrec.name,0,scrap) then dec(n); + end; + end; + + res:=FindNext(searchrec); + + + initmessage('Building Album List: ',albumref[n].artist,albumref[n].album); + application.processmessages; +inc(n); + +end; + +albumcount:=n-1; +albumrefonloadcount:=albumcount; +FindClose(SearchRec); +result:=true; + +//if kiosk=false then loadalbuminformation; + +exit; +end; +result:=false; +end; + + + +procedure Tmainform.trackeditClick(Sender: TObject); +begin +{$IFNDEF kiosk} +trackedit.checked:=false; +if cdplayerbut.checked=true then if showtitleedit(albumlist.itemindex)=1 then begin +formcreate(sender); + +end; + +if playlistbut.checked=true then if showtitleedit(dalbumlist.itemindex)=1 then begin +formcreate(sender); +end; +{$ENDIF} +end; + +function tmainform.loadtitles (sender : TListbox; albumindex : integer) : boolean; +var +content : textfile; +spp : string; +fn : string; +begin +result:=false; +if albumcount=0 then exit; +fn:=config.path+album[albumindex].path+'\title.dat'; + AssignFile(content,fn); + spp:=album[albumindex].path; + if sender=tracklist then currentalbumpath:=config.path+spp; + if sender=dtracklist then dcurrentalbumpath:=config.path+spp; + try + Reset(content); + except; + result:=true; + exit; + end; + + sender.clear; + While (NOT EOF(content)) do begin + + Readln (content,spp); + //tracklist.items.add('['+format('%.2d',[tracknm])+'] - '+spp); + if spp<>'' then sender.items.add(spp) else sender.items.add('Unknown track name'); + end; +CloseFile(content); +result:=true; + + +end; + +function Tmainform.maketitles(path : string;gettrack : integer;var fn : string) : boolean; + +var +content : textfile; +searchrec : tsearchrec; +res : integer; +tn : string; +files : tstringlist; +fns : array of array [0..512] of ansichar; +f,l,scrap,n : integer; +t : int64; +id3 : tid3tag; +s : string; +begin +result:=false; + +files := tstringlist.Create(); + + + + +res:=FindFirst(config.path+'\'+path+'\*.*', faanyfile, searchrec); + if res=0 then begin + while res=0 do begin + if checkfileextension(Searchrec.Name) then begin tn:=copy(searchrec.Name,1,length(searchrec.name)-4); + if (tn<>'') then begin + t:=DateTimeToUnix(searchrec.FindData.ftCreationTime.dwHighDateTime); + setlength(fns,length(fns)+1); + strpcopy(fns[length(fns)-1],searchrec.Name); + files.AddObject(format('%.17d',[t])+' '+tn,@fns[length(fns)-1]); + + end; + end; + res:=FindNext(searchrec); + end; + end; + +FindClose(SearchRec); + +// Sort by Creation date +files.Sort; + +//Check for numbers on first and last files - if there remove unixtime and re-sort; + +if files.Count>0 then begin +val(copy(files[0],18,2),f,scrap); +val(copy(files[files.count-1],18,2),l,scrap); + +if (scrap=0) then begin + for n := 0 to files.count-1 do begin + files[n]:=trim(copy(files[n],18,length(files[n]))); + if (copy(files[n],length(files[n]),1)='.') then files[n]:=copy(files[n],1,length(files[n])-1); + if (copy(files[n],1,1)=' ') then begin + files[n]:=trim(copy(files[n],1,length(files[n]))); + end; + end; + files.sort; + for n := 0 to files.count-1 do begin + files[n]:=copy(files[n],4,length(files[n])); + files[n]:=trim(copy(files[n],1,length(files[n]))); + end; + for n := 0 to files.count-1 do begin + if (copy(files[n],1,2)='- ') then begin + files[n]:=trim(copy(files[n],2,length(files[n]))); + end; + end; + + +end else begin + for n := 0 to files.count-1 do begin + files[n]:=copy(files[n],19,length(files[n])); + if (uppercase(files[n])='TRACK'+format('%.2d',[n+1])) then begin + s:=strpas(pansichar(files.objects[n])); + id3:=readtag(config.path+'\'+path+'\'+s); + if (id3.track<>'') then files[n]:=id3.track; + end; + end; +end; + + + +//TODO - This causes an occasional list index out of bound - 24/12/22 +if gettrack=0 then files.SaveToFile(config.path+'\'+path+'\title.dat') else begin + if (gettrack-1<=(files.count-1)) then fn:=strpas(pansichar(files.objects[gettrack-1])); +end; + +result:=true; +end; + +files.Free; +{$IFNDEF kiosk} +//if messagedlg('No title information file found for '+album[albumindex].artist+' '+album[albumindex].album+'. Enter title info now?',mtConfirmation,[MbYes,MbNo],0)=MrYes then showtitleedit(albumindex); +{$ENDIF} +end; + +{procedure tmainform.WMDeviceChange(var msg : TMDeviceChange); +const +DEV_ARRIVAL = 00; +DEV_REMOVEQUERY = 01; +DEV_REMOVECOMPLETE = 04; + +type + +PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR; +TDEV_BROADCAST_HDR = packed record +dbch_size: DWORD; +dbch_devicetype : DWORD; +dbch_reserved : DWORD; +end; + + +PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME; +TDEV_BROADCAST_VOLUME = packed record +dbcv_size : DWORD; +dbcv_devicetype : DWORD; +dbcv_reserved : DWORD; +dbcv_unitmask : DWORD; +dbcv_flags : WORD; +end; + +var +lpdb : PDEV_BROADCAST_HDR; +lpdbv : PDEV_BROADCAST_VOLUME; +driveletter : shortint; +unitmask : longint; +begin +if deviceremoveable=false then exit; +fillchar(lpdbv,sizeof(lpdbv),0); +fillchar(lpdb,sizeof(lpdb),0); +lpdb :=PDEV_BROADCAST_HDR(msg.dwData); + +if lpdb=nil then exit; + +try +if (lpdb^.dbch_devicetype= {viewgit}{/viewgit}000002) then begin + lpdbv :=PDEV_BROADCAST_VOLUME(Msg.dwData); + end; +except +end; + +DriveLetter:=Ord('A'); +//fillchar(lpdbv,sizeof(lpdbv),0); +unitmask:=lpdbv.dbcv_unitmask; +while(unitmask and 1)=0 do begin +unitmask :=unitmask shr 1; +inc(Driveletter); +end; + +config.path:=uppercase(config.path); +if char(driveletter)<>(config.path[1]) then exit; + +case Msg.Event of + +//win 9x only +DEV_REMOVEQUERY : begin + +if playmode=1 then begin +if mp.filename<>'' then begin +try +stopclick(nil); +mp.stop; +except; +end; +end; +playmode:=0; +end; +hideall; +end; + + +DEV_REMOVECOMPLETE : begin + +if playmode=1 then begin +if mp.filename<>'' then begin +try +mp.stop; +except +end; +end; +end; +hideall; +end; + + +DEV_ARRIVAL : begin + +formcreate(mainform); +end; + +end; + + +end; + } +procedure tmainform.hideall; +begin +exit; + cdplayerbutclick(nil); + //open.enabled:=false; + playpanel.visible:=false; + butcdlist.visible:=false; + playlistbut.enabled:=false; + tracklist.visible:=false; + cover.visible:=false; + coverpanel.visible:=false; + butcdlist.visible:=false; + playlistbut.enabled:=true; + albumlist.enabled:=false; + //menuprint.enabled:=false; + dalbumlist.enabled:=false; + //trackedit.enabled:=false; + //burncdbut.enabled:=false; + //butcdburn.visible:=false; + butcd.visible:=false; + CDplayerbut.enabled:=false; + randombut.enabled:=false; + jukeboxbut.enabled:=true; + coverpickbut.enabled:=false; + butrandom.visible:=false; + butjukebox.visible:=false; + transport.Enabled:=false; + stop.down:=true; + play.down:=false; + //if kiosk=true then begin + // jb:=TJukeboxnoalbums.Create(application); + // Jb.showmodal; + // jb.free; + //end; + +end; + +procedure Tmainform.OptionsClick(Sender: TObject); +begin +try +//options.checked:=false; +application.processmessages; +except; +end; +//res:=showprefs(false); +//if res=1 then hideall; +play.down:=false; +stopclick(sender); +stop.down:=true; +firstrun:=true; +formcreate(mainform); +end; + + + + +procedure Tmainform.ThumbscancelClick(Sender: TObject); +begin + windowstate:=wsNormal; + restoreClick(sender); + cancelthumbs:=true; + mainmenuvisible(true); + toolbar.visible:=true; +end; + + + +procedure Tmainform.FormResize(Sender: TObject); +begin +//if jukebox.visible=true then jukebox.setfocus; +{albumlist.width:=tracklist.left+tracklist.width; +dalbumlist.width:=dplaylist.left+dplaylist.width; +dalbumlist.left:=dtracklist.left;} + +end; + + + + +procedure Tmainform.setupfrequency; +begin + progress.max:=Round (mp.length / DIVISION); + progress.linesize:=1; + progress.pagesize:=100; + progress.frequency:=5; +end; + +procedure Tmainform.ReturntoPlayerClick(Sender: TObject); +begin +Thumbscancelclick(sender); +end; + +procedure Tmainform.AddalltrackstoplaylistClick(Sender: TObject); +var +n,i : integer; + +begin +for n:=1 to albumcount do begin +sender:=thumbundercursor; +if sender=thumb[n] then begin + restoreClick(sender); + albumlist.itemindex:=n-1; + albumlistChange(sender); + dalbumlist.itemindex:=n-1; + dalbumlistChange(sender); + mainmenuvisible(true); + toolbar.visible:=true; + playlistbut.checked:=true; + playlistbutclick(sender); + for i:=0 to dtracklist.items.count-1 do begin + dtracklist.itemindex:=i; + addclick(sender); + end; +exit; +end; +end; +end; + + +procedure Tmainform.FormKeyUp(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin +if (key=ord('P')) and (Shift=[ssCTRL,ssALT]) then begin +if play.enabled=true then begin + play.down:=true; + playclick(sender); + end; + +if play.enabled=false then begin +if tracklist.selected[tracklist.itemindex]=false then +tracklist.setfocus; +keybd_event(VK_SPACE,0,0,0); +application.processmessages; +play.down:=true; +playclick(sender); + +end; +end; + +if (key=VK_ESCAPE) then begin + +if (stop.enabled=true) and (stop.down=false) then begin + stop.down:=true; + stopclick(sender); + exit; + end; +if stop.down=true then begin + cdplayerbut.checked:=true; + cdplayerbutclick(nil); +end; + +end; + +if (key=ord('M')) and (Shift=[ssCTRL,ssALT]) then begin +if pause.enabled=true then begin + pause.down:=true; + pauseclick(sender); + end; +end; + + +if (key=ord('A')) and (Shift=[ssCTRL,ssALT]) then begin +albumlist.SetFocus; +keybd_event(VK_UP,0,0,0); +end; + +if (key=ord('Z')) and (Shift=[ssCTRL,ssALT]) then begin +albumlist.SetFocus; +keybd_event(VK_DOWN,0,0,0); +end; + +if (key=ord('S')) and (Shift=[ssCTRL,ssALT]) then begin +bckclick(sender); +end; + +if (key=ord('T')) and (Shift=[ssCTRL,ssALT]) then begin +if (dj.enabled=true) and (dj.down=false) then begin; dj.down:=true; djclick(nil); exit; end; +if (dj.enabled=true) and (dj.down=true) then begin; dj.down:=false; djclick(nil); exit; end; + +end; + + +if (key=ord('X')) and (Shift=[ssCTRL,ssALT]) then begin +tracklist.setfocus; +application.processmessages; +if tracklist.selected[tracklist.itemindex]=true then fwdclick(sender) else begin +keybd_event(VK_SPACE,0,0,0); +end; +end; + +if (key=ord('C')) and (Shift=[ssCTRL,ssALT]) then begin +coverclick(sender); +end; + +if (key=ord('R')) and (Shift=[ssCTRL,ssALT]) then begin +if playmode=1 then stopclick(sender); +rnd_dialog.show; +playlistbutClick(playlistbut); +playlistbut.checked:=true; +dplaylist.itemindex:=0; +rnd_dialog.all.click; +rnd_dialog.Okbtn.Click; +screen.cursor:=crDefault; +application.processmessages; +end; +end; + +procedure Tmainform.popupplayClick(Sender: TObject); +begin +If dplaylist.Items.count>0 then del.enabled:=true; +dcurrentlyplayingtrack:=dplaylist.itemindex; +playmode:=0; +setuptrackname(dplaylist.itemindex); +play.down:=true; +playclick(Sender); +end; + +procedure Tmainform.popupremoveClick(Sender: TObject); +begin +delclick(sender); + +end; + +procedure Tmainform.burncdbutClick(Sender: TObject); +begin +if kiosk=false then begin +//burncdbut.checked:=true; +burncd.show; +end; +end; + + +function runprogram(commandline : string; windowstate : integer;waitfor :boolean) : boolean; +type +tenv = pchar; +var +comline : array [0..255] of char; +startupinfo : tstartupinfo; +processinfo : tProcessinformation; +lpExitcode : cardinal; +msg : tmsg; +pass : array [0..255] of char; +begin +strpcopy(comline,commandline); + +with startupinfo do begin +cb := sizeof(startupinfo); +lpreserved:=nil; +lpdesktop:=nil; +lptitle:=nil; +dwflags := STARTF_USESHOWWINDOW; +lpreserved := nil; +cbreserved2 :=0; +lpreserved2 := nil; +if windowstate=0 then wshowwindow:=sw_normal else wshowwindow:=sw_hide; +end; + +fillchar(pass,sizeof(pass),0); +//SetPrivilege('SeAssignPrimaryTokenPrivilege',true); //maybe needed + + + +result:=createprocess(nil,comline,nil,nil,false,normal_priority_class, nil,nil,startupinfo,processinfo); +if result=true then begin + + if waitfor=true then begin + lpexitcode:=STILL_ACTIVE; + while(lpexitcode=STILL_ACTIVE) do begin; + while(peekmessage(msg,0,0,0,PM_REMOVE)) do begin + If msg.message = WM_QUIT then halt(msg.wparam); + TranslateMessage(msg); + DispatchMessage(Msg); + end; + getexitcodeprocess(processinfo.hprocess,lpexitcode); + end; + end; +end; +end; + + + +procedure Tmainform.launchscreensaverClick(Sender: TObject); +//var +//h : thandle; +//fs : Tfilestream; +//ladapter : TStreamAdapter; +begin +//write image list out using API experiment for DFM removal +//fs:=Tfilestream.Create('c:\tst.txt',fmCreate); +//h:=mainform.butimages.Handle; +// LAdapter := TStreamAdapter.Create(fs); +//imagelist_write(h,ladapter); +//fs.free; +//ladapter.free; +if runprogram(config.screensaverpath,0,false)=false then showwarning('Launch eyecandy program','Could not run eyecandy program. Check that you have specified a correct path in options. If the program is a screen saver, try placing " /s" after the program path to activate screen save mode.','An eyecandy program is visualisation software such as a sound to light program or a screen saver.','Recommended programs',WEBSITEURL+'navigation.php?sec=links#eyecandy',false); +end; + +{procedure Tmainform.hinttimerTimer(Sender: TObject); +var +msg : tmsg; +begin +inc(hinttimercount); +if (hinttimercount=20) or (hintwindow.ishintmsg(msg)=true) then begin +//hinttimer.Enabled:=false; +hintwindow.releasehandle; +end; +end; + } +procedure Tmainform.dplaylistDblClick(Sender: TObject); +begin +playbutmod.visible:=false; +if dplaylist.itemindex<>-1 then playClick(Sender) +end; + +procedure Tmainform.jukeboxbutClick(Sender: TObject); +begin +if assigned(sender) then if tcomponent(sender).name='butjukebox' then begin + config.mediaplayermode:=false; +end; + //if thumbsdone=false then mainform.thumbviewgo(false); //Load thumbs for jukebix +if albumlist.items.count<3 then begin +//if kiosk=false then messagedlg('You must have at least 3 albums loaded before jukebox mode can be used',mterror,[mbok],0); +if kiosk=true then begin + hideall; + end; +end; +//trackedit.enabled:=true; +playlistbut.checked:=true; +playlistbutclick(nil); +initmessage('Initalising Jukebox....','',''); + +gojukebox(true); + +moveformtomonitor(TForm(jukebox)); +if config.mediaplayermode=true then jukebox.close; + +end; + + +procedure Tmainform.tracklistDblClick(Sender: TObject); +begin +playclick(nil); +play.down:=true; + +end; + +procedure Tmainform.dtracklistDblClick(Sender: TObject); +begin +addclick(sender); +end; + +procedure Tmainform.ripcdClick(Sender: TObject); +begin +//ripcd.checked:=false; +end; + + +procedure Tmainform.FormActivate(Sender: TObject); +begin +if config.Dj_default=true then begin +dj.down:=true; +djclick(sender); +end; +moveformtomonitor(self); + +volchange(sender); +buttonsMouseMove(nil,[],0,0); + +end; + + +procedure Tmainform.buttonsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin +if (jukebox<>nil) then if (jukebox.visible=true) then exit; + +if (sender=butcd) or (cdplayerbut.checked) then butimages.GetBitmap(0,butcd.picture.bitmap) else butimages.GetBitmap(10,butcd.picture.bitmap); +if (sender=butcdlist) or (playlistbut.checked) then butimages.GetBitmap(1,butcdlist.picture.bitmap) else butimages.GetBitmap(11,butcdlist.picture.bitmap); +if (sender=butrandom) or (randombut.checked) then butimages.GetBitmap(2,butrandom.picture.bitmap) else butimages.GetBitmap(12,butrandom.picture.bitmap); +if (sender=butjukebox) or (jukeboxbut.checked) then butimages.GetBitmap(3,butjukebox.picture.bitmap) else butimages.GetBitmap(13,butjukebox.picture.bitmap); +//if (sender=butcdburn) then butimages.GetBitmap(6,butcdburn.picture.bitmap); +//if (sender=butcdrip) then butimages.GetBitmap(7,butcdrip.picture.bitmap); +//if (sender=buttools) then butimages.GetBitmap(8,buttools.picture.bitmap); +///if (sender=butexplore) then butimages.GetBitmap(9,butexplore.picture.bitmap); + + + + +//if( sender<>butcd) then butimages.GetBitmap(9,butcd.picture.bitmap); +//if (sender<>butcdlist) then butimages.GetBitmap(10,butcdlist.picture.bitmap); +//if (sender<>butrandom) then butimages.GetBitmap(11,butrandom.picture.bitmap); +//if (sender<>butjukebox) then butimages.GetBitmap(12,butjukebox.picture.bitmap); +//if (sender<>butcdburn) then butimages.GetBitmap(16,butcdburn.picture.bitmap); +//if (sender<>butcdrip) then butimages.GetBitmap(17,butcdrip.picture.bitmap); +//if (sender<>buttools) then butimages.GetBitmap(18,buttools.picture.bitmap); +//if (sender<>butexplore) then butimages.GetBitmap(19,butexplore.picture.bitmap); + + +toolbar.invalidate; + +end; + + +procedure Tmainform.butfilterClick(Sender: TObject); +begin +//filter.checked:=true; +end; + +procedure Tmainform.filtermenuClick(Sender: TObject); +begin +butfilterclick(nil); +end; + +procedure Tmainform.fileexitClick(Sender: TObject); +begin +close; +application.terminate; +end; + +procedure Tmainform.menuaboutClick(Sender: TObject); +begin +showabout(1); +end; + + +{$IFNDEF kiosk} +// NOTE: Components originally placed on mainform. Removed for kiosk. Need replacing e.g. create at runtime and assign events. + +procedure Tmainform.saveClick(Sender: TObject); +var +fl : tfilestream; +bytefilt : tfilterbytearray; +size : longint; +n : integer; + + function tfilterbytearraywritesizeanddata(str : tfilterbytearray) : integer;overload; + begin + result:=0; + try + size:=length(str); + fl.write(size,sizeof(size)); + fl.write(pointer(str)^,length(str)); + except + result:=-1; + end; + end; + + + function writesizeanddata(str : string) : integer;overload; + begin + result:=0; + try + size:=length(str); + fl.write(size,sizeof(size)); + fl.write(pointer(str)^,length(str)); + except + result:=-1; + end; + end; + + +begin + +if savedialog.execute=false then exit; + +if fileexists(savedialog.filename) then if deletefile(savedialog.filename)=false then begin + messagedlg('Error opening file: '+savedialog.filename,mterror,[mbOK],0); + exit; +end; +fl:=tfilestream.create(savedialog.filename,fmCreate); +fl.seek(0,soFromBeginning); +fl.Write(PLAYLISTFILEHEADER,length(PLAYLISTFILEHEADER)); +bytefilt:=tfiltertobytearray(filter); +tfilterbytearraywritesizeanddata(bytefilt); + +n:=dplaylist.items.count-1; +fl.write(n,sizeof(integer)); +for n:=0 to dplaylist.items.count-1 do begin + writesizeanddata(dPlayListMatrixAlb[n]); + fl.write(dPlayListMatrixTrk[n],sizeof(dPlayListMatrixTrk[n])); + writesizeanddata(dplaylist.Items[n]); +end; + +fl.free; +end; + +procedure Tmainform.OpenClick(Sender: TObject); +var +fl : tfilestream; +bytefilt : tfilterbytearray; +filt : tfilter; +size : longint; +scrap : string; +itemstotal : integer; +n : integer; + +function readsizeanddata : string;overload; + var + count : integer; + begin + try + count:=sizeof(size); + fl.read(size,count); + if (count<sizeof(size)) then begin; result:=''; exit; end; + setlength(result,size); + fl.read(pointer(result)^,size); + except + result:=''; + end; + end; + + + + function tfilterbytearrayread : tfilterbytearray;overload; + var + count : integer; + begin + try + count:=sizeof(size); + fl.read(size,count); + if (count<sizeof(size)) then begin; result:=nil; exit; end; + setlength(result,size); + fl.read(pointer(result)^,size); + except + result:=nil; + end; + end; + +begin +setlength(bytefilt,1); +bytefilt[0]:=0; +if opendialog.execute=true then begin +if cdplayerbut.checked=true then playlistbutclick(nil); +clearlistclick(nil); +fl:=tfilestream.create(opendialog.filename,fmOpenRead); +setlength(scrap,length(PLAYLISTFILEHEADER)); +fl.read(pointer(scrap)^,length(PLAYLISTFILEHEADER)); +bytefilt:=tfilterbytearrayread; +filt:=bytearraytofilter(bytefilt); + +if NOT((filt.genre.count=-1) and (filt.artist.count=-1) and + (filt.keywords.count=-1) and (filt.recordlabel.count=-1) and + (filt.excludecompilations=false) and (filt.excludenoncompilations=false) and + (filt.yearlower=-1) and (filt.decadelower=-1)) then begin + if Messagedlg('A filter was in place when this playlist was saved. Restore the filter?',mtconfirmation,[mbYes,mbNo],0)=MrYes then begin + dofilter(filter); + end; + end; +dplaylist.items.clear; + + +fl.read(itemstotal,sizeof(integer)); +setlength(dPlayListMatrixAlb,itemstotal+2); +setlength(dPlayListMatrixTrk,itemstotal+2); + +for n:=0 to itemstotal do begin + dPlayListMatrixAlb[n]:=readsizeanddata; + fl.read(dPlayListMatrixTrk[n],sizeof(dPlayListMatrixTrk[n])); + dplaylist.items.add(readsizeanddata); +end; + +end; +fl.free; + +end; +{$ENDIF} + +procedure Tmainform.reloadClick(Sender: TObject); +begin +firstrun:=true; +try +if mp.filename<>'' then begin + mp.stop; +{$IFDEF backgroundstreamplayer} +stopStream(); +{$ENDIF} +end; +except; +end; +writeini; +mainform.enabled:=false; +formcreate(nil); +mainform.enabled:=true; +end; + +procedure Tmainform.hyperlink_helpfilesystemClick(Sender: TObject); +begin +ShellExecute (0, nil, pchar(WEBSITEURL+'?help=filesystem'), nil, nil, SW_SHOWNORMAL); +end; + +procedure Tmainform.hyperlink_helpalbuminfoClick(Sender: TObject); +begin +ShellExecute (0, nil, pchar(WEBSITEURL+'?help=filters'), nil, nil, SW_SHOWNORMAL); +end; + +procedure Tmainform.helpClick(Sender: TObject); +begin +ShellExecute (0, nil, pchar(WEBSITEURL+'?sec=2&sub=2'), nil, nil, SW_SHOWNORMAL); +end; + + +procedure Tmainform.insertClick(Sender: TObject); +var +point : integer; +n : integer; +begin +if dplaylist.itemindex=dplaylist.items.count-1 then begin +addclick(sender); +exit; +end; +setlength(dplaylistMatrixAlb,dplaylist.Items.count+1); +setlength(dplaylistMatrixTrk,dplaylist.Items.count+1); + +point:=dplaylist.itemindex+1; + +n:=dplaylist.Items.count-1; +while(n>=(point-1)) do begin +dplaylistMatrixAlb[n+1]:=dplaylistMatrixAlb[n]; +dplaylistMatrixTrk[n+1]:=dplaylistMatrixTrk[n]; +dec(n); +end; + +dplaylist.items.insert(point,dtracklist.items[dtracklist.itemindex]); +dplaylistMatrixAlb[point]:=dcurrentalbumpath; +dplaylistMatrixTrk[point]:=dtrackList.itemindex+1; +dcurrenttrack:=dcurrenttrack+1; + + + + +end; + +procedure Tmainform.dplaylistDragOver(Sender, Source: TObject; X, + Y: Integer; State: TDragState; var Accept: Boolean); +begin +if Source is tlistbox then Accept := True; + +end; + +procedure Tmainform.dplaylistDragDrop(Sender, Source: TObject; X, + Y: Integer); +var +sfirst,ssecond : string; +ifirst,isecond : integer; +n : integer; +tp : tpoint; +alb : string; +trk : integer; + +begin +if source=dtracklist then begin +addclick(nil); +end; + + +if source=self then begin +ifirst:=-1; +for n:=0 to TListBox(Source).items.count do begin + if TListBox(Source).selected[n]=true then begin + sfirst:=TListBox(Source).items[n]; + ifirst:=n; + break; + end; +end; +tp.x:=x; +tp.y:=y; +isecond:=TListbox(Source).itematpos(tp,true); +ssecond:=TListbox(Source).items[isecond]; +Tlistbox(Source).items[ifirst]:=ssecond; +Tlistbox(Source).items[isecond]:=sfirst; + +alb:=dplaylistMatrixAlb[isecond]; +trk:=dplaylistMatrixTrk[isecond]; + +dplaylistMatrixAlb[isecond]:=dplaylistMatrixAlb[ifirst]; +dplaylistMatrixTrk[isecond]:=dplaylistMatrixTrk[ifirst]; + +dplaylistMatrixAlb[ifirst]:=alb; +dplaylistMatrixTrk[ifirst]:=trk; +end; + +end; + +procedure Tmainform.menuprintClick(Sender: TObject); +begin +{$IFNDEF kiosk} +showprint; +{$ENDIF} +end; + +procedure Tmainform.buttonstimerTimer(Sender: TObject); +begin +if DEBUGON=false then begin +buttonstimer.enabled:=false; +exit; +end; +buttonsMouseMove(nil,[],0,0); transport.repaint; +end; + + +procedure Tmainform.butexploreClick(Sender: TObject); +begin +{$IFNDEF kiosk} +//if explorego=mrOK then reloadclick(nil); +{$ENDIF} +end; + + + +procedure Tmainform.menufiletagClick(Sender: TObject); +begin +{$IFNDEF kiosk} +if messagedlg('This will run through each album and tag all MP3 files with album and artist info.'#10#13'Are you sure you want to do this?',mtconfirmation,[mbYes,mbNo],0)=MrYes then tagmp3s.showmodal; +{$ENDIF} +end; + + + + +end. + + diff --git a/empathy.dproj b/empathy.dproj index 44e18ec..5528171 100644 --- a/empathy.dproj +++ b/empathy.dproj @@ -136,8 +136,8 @@ <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> <VerInfo_MajorVer>3</VerInfo_MajorVer> <VerInfo_MinorVer>1</VerInfo_MinorVer> - <VerInfo_Build>20</VerInfo_Build> - <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=3.1.1.20;InternalName=;LegalCopyright=2022 ID Consultants/Librarysmith Software;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> + <VerInfo_Build>22</VerInfo_Build> + <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=3.1.1.22;InternalName=;LegalCopyright=2022 ID Consultants/Librarysmith Software;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> <DCC_Description>Empathy Jukebox 64 bit Executable</DCC_Description> <DCC_MapFile>0</DCC_MapFile> <VerInfo_AutoGenVersion>false</VerInfo_AutoGenVersion> diff --git a/empathy.dproj.local b/empathy.dproj.local index 2f52102..9e46709 100644 --- a/empathy.dproj.local +++ b/empathy.dproj.local @@ -2,32 +2,32 @@ <BorlandProject> <Transactions> <Transaction>2006/06/16 16:02:14.421.pas,C:\Documents and Settings\Matthew Smith\Desktop\EMPATHY\Empathy Source\Silverrip\gethttpdoc.pas=</Transaction> - <Transaction>2006/06/22 23:46:38.109.pas,C:\Documents and Settings\Matthew Smith\Desktop\EMPATHY\Empathy Source\searchtrack.pas=C:\Documents and Settings\Matthew Smith\Desktop\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/08/10 14:05:56.578.pas,D:\PROJECT\EMPATHY\Empathy Source\AddTrackToSystem.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/08/10 14:05:56.593.dfm,D:\PROJECT\EMPATHY\Empathy Source\AddTrackToSystem.dfm=D:\PROJECT\EMPATHY\Empathy Source\Unit1.dfm</Transaction> - <Transaction>2006/09/16 12:55:41.968.dfm,D:\PROJECT\EMPATHY\Empathy Source\videoform.dfm=D:\PROJECT\EMPATHY\Empathy Source\Unit1.dfm</Transaction> - <Transaction>2006/09/16 12:55:41.968.pas,D:\PROJECT\EMPATHY\Empathy Source\videoform.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/10/09 11:24:02.971.pas,D:\PROJECT\EMPATHY\TTransparentHint\transhint.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/10/10 11:51:05.794.pas,D:\PROJECT\EMPATHY\Empathy Source\cddburl__autoupdate.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> + <Transaction>2006/06/22 23:46:38.109.pas,C:\Documents and Settings\Matthew Smith\Desktop\EMPATHY\Empathy Source\Unit1.pas=C:\Documents and Settings\Matthew Smith\Desktop\EMPATHY\Empathy Source\searchtrack.pas</Transaction> + <Transaction>2006/08/10 14:05:56.578.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\AddTrackToSystem.pas</Transaction> + <Transaction>2006/08/10 14:05:56.593.dfm,D:\PROJECT\EMPATHY\Empathy Source\Unit1.dfm=D:\PROJECT\EMPATHY\Empathy Source\AddTrackToSystem.dfm</Transaction> + <Transaction>2006/09/16 12:55:41.968.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\videoform.pas</Transaction> + <Transaction>2006/09/16 12:55:41.968.dfm,D:\PROJECT\EMPATHY\Empathy Source\Unit1.dfm=D:\PROJECT\EMPATHY\Empathy Source\videoform.dfm</Transaction> + <Transaction>2006/10/09 11:24:02.971.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\TTransparentHint\transhint.pas</Transaction> + <Transaction>2006/10/10 11:51:05.794.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\cddburl__autoupdate.pas</Transaction> <Transaction>2006/10/10 11:51:27.827.pas,D:\PROJECT\EMPATHY\Empathy Source\cddburl__autoupdate.pas=</Transaction> - <Transaction>2006/10/10 11:52:09.553.pas,D:\PROJECT\EMPATHY\Empathy Source\cddbupdate.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/10/11 12:17:48.043.pas,D:\PROJECT\EMPATHY\Empathy Source\playlist.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/10/20 21:12:04.225.pas,D:\PROJECT\EMPATHY\Empathy Source\debugandprofile.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/10/25 16:49:55.896.pas,D:\PROJECT\EMPATHY\Empathy Source\VersionInfo.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> - <Transaction>2006/12/19 19:26:48.863.pas,D:\PROJECT\EMPATHY\Empathy Source\infoform.pas=</Transaction> + <Transaction>2006/10/10 11:52:09.553.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\cddbupdate.pas</Transaction> + <Transaction>2006/10/11 12:17:48.043.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\playlist.pas</Transaction> + <Transaction>2006/10/20 21:12:04.225.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\debugandprofile.pas</Transaction> + <Transaction>2006/10/25 16:49:55.896.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\VersionInfo.pas</Transaction> <Transaction>2006/12/19 19:26:48.863.dfm,D:\PROJECT\EMPATHY\Empathy Source\infoform.dfm=</Transaction> - <Transaction>2006/12/26 12:40:12.187.pas,D:\PROJECT\EMPATHY\Empathy Source\resourceskins.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit2.pas</Transaction> - <Transaction>2006/12/30 14:03:36.413.pas,D:\PROJECT\EMPATHY\Empathy Source\exploreform.pas=</Transaction> + <Transaction>2006/12/19 19:26:48.863.pas,D:\PROJECT\EMPATHY\Empathy Source\infoform.pas=</Transaction> + <Transaction>2006/12/26 12:40:12.187.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit2.pas=D:\PROJECT\EMPATHY\Empathy Source\resourceskins.pas</Transaction> <Transaction>2006/12/30 14:03:36.413.dfm,D:\PROJECT\EMPATHY\Empathy Source\exploreform.dfm=</Transaction> + <Transaction>2006/12/30 14:03:36.413.pas,D:\PROJECT\EMPATHY\Empathy Source\exploreform.pas=</Transaction> <Transaction>2006/12/30 14:04:04.007.dfm,D:\PROJECT\EMPATHY\Empathy Source\symlink.dfm=</Transaction> <Transaction>2006/12/30 14:04:04.007.pas,D:\PROJECT\EMPATHY\Empathy Source\symlink.pas=</Transaction> - <Transaction>2007/01/01 16:58:54.679.pas,D:\PROJECT\EMPATHY\Empathy Source\thememanagerform.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit2.pas</Transaction> - <Transaction>2007/01/01 16:58:54.679.dfm,D:\PROJECT\EMPATHY\Empathy Source\thememanagerform.dfm=D:\PROJECT\EMPATHY\Empathy Source\Unit2.dfm</Transaction> + <Transaction>2007/01/01 16:58:54.679.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit2.pas=D:\PROJECT\EMPATHY\Empathy Source\thememanagerform.pas</Transaction> + <Transaction>2007/01/01 16:58:54.679.dfm,D:\PROJECT\EMPATHY\Empathy Source\Unit2.dfm=D:\PROJECT\EMPATHY\Empathy Source\thememanagerform.dfm</Transaction> <Transaction>2012/10/04 10:15:05.201.pas,D:\PROJECT\EMPATHY\Empathy Source\seiralform.pas=</Transaction> <Transaction>2012/10/04 10:15:05.201.dfm,D:\PROJECT\EMPATHY\Empathy Source\seiralform.dfm=</Transaction> <Transaction>2012/10/05 00:16:03.472.dfm,D:\PROJECT\EMPATHY\Empathy Source\licenceform.dfm=</Transaction> <Transaction>2012/10/05 00:16:03.472.pas,D:\PROJECT\EMPATHY\Empathy Source\licenceform.pas=</Transaction> - <Transaction>2012/10/05 00:50:57.203.bdsproj,D:\PROJECT\EMPATHY\Empathy Source\empathy.bdsproj=D:\PROJECT\EMPATHY\Empathy Source\silvsmth.bdsproj</Transaction> - <Transaction>2021/01/25 20:21:43.384.pas,D:\PROJECT\EMPATHY\Empathy Source\networkstream.pas=D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas</Transaction> + <Transaction>2012/10/05 00:50:57.203.bdsproj,D:\PROJECT\EMPATHY\Empathy Source\silvsmth.bdsproj=D:\PROJECT\EMPATHY\Empathy Source\empathy.bdsproj</Transaction> + <Transaction>2021/01/25 20:21:43.384.pas,D:\PROJECT\EMPATHY\Empathy Source\Unit1.pas=D:\PROJECT\EMPATHY\Empathy Source\networkstream.pas</Transaction> </Transactions> </BorlandProject> diff --git a/empathy.identcache b/empathy.identcache index a0ce3d9..af6a2e6 100644 Binary files a/empathy.identcache and b/empathy.identcache differ