Files
lazarus-ccr/applications/cactusjukebox/source/config.pas
jesusr 00a628b20a compile with 2.5.1 and lazarus trunk,
reading unicode tags and filenames, 
show/hide app window with single click tray icon, 
create album cover if not exists, 
several fixes when there is just one song in collection, 
artist tree icons, handling of track numbers in n[/m] format, 
show path of current file (in playlist and title list), 
log output was corrupt due the use of crt unit, 
etc.


git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1761 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2011-07-26 06:36:09 +00:00

289 lines
10 KiB
ObjectPascal

{
Config Object for Cactus Jukebox
written by Sebastian Kraft, <c> 2006-2008
Contact the author at: sebastian_kraft@gmx.de
This Software is published under the GPL
}
Unit config;
{$mode objfpc}{$H+}
Interface
Uses
Classes, SysUtils, xmlcfg, gettext, debug, playerclass;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{ TConfigObject }
//Object to read and list config data
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Type
TConfigObject = Class
Public
GuessTag, MarkGuessedTags, id3v2_prio: boolean;
Mobile_Subfolders, background_scan, CoverDownload: boolean;
KDEServiceMenu: boolean;
AudioSystem: TOutputMode;
AudioBackend: TAudioBackend;
AutostartPlay, StopOnClear, LoadLastPlaylist: Boolean;
language: string; // country code, e.g. de -> germany
DAPPath, CDRomDevice: string;
CurrentSkin, LastLib, StreamColPath, LoadOnStart: string;
Lame, CDDA2wav: string;
strTagToNameFormatString: string;
strCleanLibNotToRemove: string;
DataPrefix, ConfigPrefix, LibraryPrefix, HomeDir: string;
WWidth, WHeight, WSplitterWidth: Integer;
AlbumCoverFirsttime, bDisplayPlayTimeNegated: boolean;
CoverSize:string;
MPlayerPath: string;
MPlayerConfigFile: string;
MPlayerUseExternalConfig: boolean;
//Columns to show in titelview
TLShowArtist, TLShowTitle, TLShowAlbum, TLShowGenre, TLShowTrack, TLShowFilename: boolean;
SortAlbumByTrack: boolean;
PluginsEnabled: boolean;
constructor create(ConfigFile:String);
destructor destroy;
Function ReadConfig: boolean;
Function FlushConfig: boolean;
function CheckCoverPath: boolean;
function GetCoverPath(AFileName: string): string;
function GetCoverDir: string;
Procedure Clear;
Private
FConfigPath: string;
FConfigFile: TXMLConfig;
End;
Var CactusConfig: TConfigObject;
Const CONFIGNAME = 'cactus.cfg';
Implementation
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{ TConfigObject }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
constructor TConfigObject.create(ConfigFile: String);
Begin
FConfigPath := ConfigFile;
FConfigFile := TXMLConfig.Create(Nil);
FConfigFile.Filename := FConfigPath;
ReadConfig;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
destructor TConfigObject.destroy;
Begin
FlushConfig;
FConfigFile.Free;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function TConfigObject.ReadConfig: boolean;
Var tmps1, tmps2: string;
Begin
result := true;
Try
GuessTag := FConfigFile.GetValue('Library/GuessTags', false);
MarkGuessedTags := FConfigFile.GetValue('Library/MarkGuessedTags', true);
Mobile_Subfolders := FConfigFile.GetValue('Mobile_Player/Subfolders', true);
id3v2_prio := FConfigFile.GetValue('Library/id3v2_prio', true);
// background_scan:=FConfigFile.GetValue('Library/background_scan', false);
background_scan := false;
DAPPath := IncludeTrailingPathDelimiter(FConfigFile.getValue('Mobile_Player/Mountpoint', ''));
If FConfigFile.GetValue('Networking/Album_Cover_Download/Enabled','')='' Then
AlbumCoverFirsttime := true;
CoverDownload := FConfigFile.GetValue('Networking/Album_Cover_Download/Enabled', false);
CoverSize := FConfigFile.GetValue('Networking/Album_Cover_Download/ImageSize', 'small');
CurrentSkin := FConfigFile.getValue('Skin/File', 'green.xml');
KDEServiceMenu := FConfigFile.GetValue('KDE/servicemenu', false);
{$ifdef linux}
If FConfigFile.GetValue('Audio/Output', 'Alsa')='Alsa' Then AudioSystem:=ALSAOUT
Else AudioSystem:=OSSOUT;
{$endif}{$ifdef win32}
If FConfigFile.GetValue('Audio/Output', 'Win32')='Win32' Then AudioSystem:=WIN32
Else AudioSystem:=DIRECTX;
{$endif}
If FConfigFile.GetValue('Audio/Backend', 'mplayer')='mplayer' Then AudioBackend:=MPLAYERBACK
Else AudioBackend:=FMODBACK;
MPlayerPath:=FConfigFile.GetValue('Audio/Backend/MPlayer/Path','');
MPlayerUseExternalConfig:=FConfigFile.GetValue('Audio/Backend/MPlayer/UseExternalConfig',false);
LastLib := FConfigFile.GetValue('Library/autoload','');
StreamColPath := FConfigFile.GetValue('Library/StreamCollection','');
AutostartPlay := FConfigFile.GetValue('Playlist/Autoplay', true);
StopOnClear:= FConfigFile.GetValue('Playlist/StopOnClear', false);
LoadLastPlaylist:=FConfigFile.getValue('Playlist/LoadPrevious', true);
SortAlbumByTrack:=FConfigFile.getValue('Library/SortAlbumByTrack', false);
Lame := FConfigFile.GetValue('Lame/Path', '/usr/bin/lame');
GetLanguageIDs(tmps1, tmps2);
{$ifdef linux}
strTagToNameFormatString := FConfigFile.GetValue('Library/TagToNameFormatString',
'%a/%a - %b - %n - %t');
{$endif}{$ifdef win32}
strTagToNameFormatString := FConfigFile.GetValue('Library/TagToNameFormatString',
'%a\%a - %b - %n - %t');
{$endif}
WWidth := FConfigFile.GetValue('Userinterface/Window/Width', 854);
WHeight := FConfigFile.GetValue('Userinterface/Window/Height', 680);
WSplitterWidth := FConfigFile.GetValue('Userinterface/Window/SplitterWidth', 270);
language := FConfigFile.GetValue('Userinterface/Language/Code', tmps1);
bDisplayPlayTimeNegated := FConfigFile.GetValue('Userinterface/DisplayPlayTimeNegated', false);
strCleanLibNotToRemove := FConfigFile.GetValue('Userinterface/CleanLibrary/NotToRemove', 'wav mp3 ogg wma fla flac');
TLShowArtist:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Artist', true);
TLShowAlbum:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Album', true);
TLShowTitle:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Title', true);
TLShowTrack:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Track', true);
TLShowGenre:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Genre', false);
TLShowFilename:= FConfigFile.getValue('Userinterface/Titlelistcolumns/Filename', false);
SortAlbumByTrack:=FConfigFile.getValue('Userinterface/SortAlbumByTrack', false);
CDRomDevice := FConfigFile.GetValue('Devices/CDROM/Name', '/dev/cdrom');
PluginsEnabled:= FConfigFile.GetValue('Plugins/Enabled', false);
Except
result := false;
End;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function TConfigObject.FlushConfig: boolean;
Begin
result := true;
Try
FConfigFile.SetValue('Library/id3v2_prio',id3v2_prio);
FConfigFile.SetValue('Mobile_Player/Mountpoint', DAPPath);
case AudioSystem of
ALSAOUT: FConfigFile.SetValue('Audio/Output', 'Alsa');
OSSOUT:FConfigFile.SetValue('Audio/Output', 'OSS');
DIRECTX:FConfigFile.SetValue('Audio/Output', 'DirectX');
WIN32:FConfigFile.SetValue('Audio/Output', 'Win32');
end;
If AudioBackend=MPLAYERBACK Then
Begin
FConfigFile.SetValue('Audio/Backend', 'mplayer');
End
Else
Begin
FConfigFile.SetValue('Audio/Backend', 'fmod');
End;
FConfigFile.SetValue('Audio/Backend/MPlayer/Path',MPlayerPath);
FConfigFile.SetValue('Audio/Backend/MPlayer/UseExternalConfig',MPlayerUseExternalConfig);
// FConfigFile.SetValue('Audio/Backend/MPlayer/ConfigFile',MPlayerConfigFile);
FConfigFile.SetValue('Mobile_Player/Subfolders',mobile_subfolders);
FConfigFile.SetValue('Networking/Album_Cover_Download/Enabled', CoverDownload);
FConfigFile.SetValue('Networking/Album_Cover_Download/ImageSize', CoverSize);
FConfigFile.SetValue('Lame/Path', lame);
FConfigFile.SetValue('Library/GuessTags', guesstag);
FConfigFile.SetValue('Library/MarkGuessedTags', MarkGuessedTags);
FConfigFile.SetValue('Library/background_scan', background_scan);
FConfigFile.SetValue('Library/autoload', LastLib);
FConfigFile.SetValue('Library/StreamCollection', StreamColPath);
FConfigFile.SetValue('Library/TagToNameFormatString', strTagToNameFormatString);
FConfigFile.SetValue('Skin/File', CurrentSkin);
FConfigFile.SetValue('Userinterface/Language/Code', language);
FConfigFile.SetValue('Userinterface/DisplayPlayTimeNegated', bDisplayPlayTimeNegated);
FConfigFile.SetValue('Playlist/Autoplay', AutostartPlay);
FConfigFile.SetValue('Playlist/StopOnClear', StopOnClear);
FConfigFile.SetValue('Playlist/LoadPrevious', LoadLastPlaylist);
FConfigFile.SetValue('Userinterface/Window/Width', WWidth);
FConfigFile.SetValue('Userinterface/Window/Height', WHeight);
FConfigFile.SetValue('Userinterface/Window/SplitterWidth', WSplitterWidth);
FConfigFile.SetValue('Userinterface/CleanLibrary/NotToRemove', strCleanLibNotToRemove);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Artist', TLShowArtist);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Album', TLShowAlbum);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Title', TLShowTitle);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Track', TLShowTrack);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Genre', TLShowGenre);
FConfigFile.SetValue('Userinterface/Titlelistcolumns/Filename', TLShowFilename);
FConfigFile.SetValue('Userinterface/SortAlbumByTrack', SortAlbumByTrack);
FConfigFile.SetValue('Devices/CDROM/Name', CDRomDevice);
FConfigFile.SetValue('Plugins/Enabled', PluginsEnabled);
FConfigFile.Flush;
Except
result := false;
End;
End;
function TConfigObject.CheckCoverPath: boolean;
var
aPath: string;
begin
aPath := GetCoverDir;
result := DirectoryExists(aPath);
if not result then begin
result := ForceDirectories(aPath);
if not result then
DebugOutLn('WARNING: unable to force covercache directory', 1);
end;
end;
function TConfigObject.GetCoverPath(AFileName: string): string;
begin
result := GetCoverDir;
if AFilename<>'' then
result := result + DirectorySeparator + AFilename;
end;
function TConfigObject.GetCoverDir: string;
begin
result := IncludeTrailingPathDelimiter(CactusConfig.ConfigPrefix) + 'covercache';
end;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure TConfigObject.Clear;
Begin
FConfigFile.Free;
DeleteFile(IncludeTrailingPathDelimiter(ConfigPrefix)+CONFIGNAME);
FConfigFile := TXMLConfig.Create(Nil);
FConfigFile.Filename := FConfigPath;
ReadConfig;
End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
End.