Changed the way preferences are stored.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9271 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
#ifndef SCREEN_SAVER_PREFS_H
|
#ifndef SCREEN_SAVER_PREFS_H
|
||||||
#define SCREEN_SAVER_PREFS_H
|
#define SCREEN_SAVER_PREFS_H
|
||||||
#include "Message.h"
|
#include "Message.h"
|
||||||
|
#include "Path.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
enum arrowDirection {NONE=-1,UPLEFT,UPRIGHT,DOWNRIGHT,DOWNLEFT};
|
enum arrowDirection {NONE=-1,UPLEFT,UPRIGHT,DOWNRIGHT,DOWNLEFT,CENTER};
|
||||||
|
|
||||||
class ScreenSaverPrefs
|
class ScreenSaverPrefs
|
||||||
{
|
{
|
||||||
@@ -11,57 +12,72 @@ public:
|
|||||||
ScreenSaverPrefs(void);
|
ScreenSaverPrefs(void);
|
||||||
bool LoadSettings(void);
|
bool LoadSettings(void);
|
||||||
|
|
||||||
BRect WindowFrame(void) {return windowFrame;}
|
BRect WindowFrame(void) {return getRect("windowframe");}
|
||||||
int WindowTab(void) {return windowTab;}
|
int WindowTab(void) {return getInt("windowtab");}
|
||||||
int TimeFlags(void) {return timeFlags;}
|
int TimeFlags(void) {return getInt("timeflags");}
|
||||||
int BlankTime(void) {return blankTime;}
|
int BlankTime(void) {return getInt("timefade");}
|
||||||
int StandbyTime(void) {return standbyTime;}
|
int StandbyTime(void) {return getInt("timestandby");}
|
||||||
int SuspendTime(void) {return suspendTime;}
|
int SuspendTime(void) {return getInt("timesuspend");}
|
||||||
int OffTime(void) {return offTime;}
|
int OffTime(void) {return getInt("timeoff");}
|
||||||
arrowDirection GetBlankCorner(void) {return blank;}
|
arrowDirection GetBlankCorner(void) {return (arrowDirection)(getInt("cornernow"));}
|
||||||
arrowDirection GetNeverBlankCorner(void) {return neverBlank;}
|
arrowDirection GetNeverBlankCorner(void) {return (arrowDirection)(getInt("cornerNever"));}
|
||||||
bool LockEnable(void) {return lockenable;}
|
bool LockEnable(void) {return getBool("lockenable");}
|
||||||
int PasswordTime(void) {return passwordTime;}
|
int PasswordTime(void) {return getInt("lockdelay");}
|
||||||
char *Password(void) {return password;}
|
const char *Password(void);
|
||||||
bool IsNetworkPassword(void) {return isNetworkPWD;}
|
bool IsNetworkPassword(void) {return (0==strcmp("custom",getString("lockmethod")));}
|
||||||
char *ModuleName(void) {return moduleName;}
|
const char *ModuleName(void) {
|
||||||
BMessage *GetState(void) {return &stateMsg;}
|
const char *name=getString("modulename");
|
||||||
|
return ((name)?name:"Blackness");
|
||||||
|
}
|
||||||
|
BMessage *GetState(const char *name);
|
||||||
|
BMessage *GetSettings(void) {return ¤tMessage;}
|
||||||
|
|
||||||
void SetWindowFrame(const BRect &fr) {windowFrame=fr;}
|
void SetWindowFrame(const BRect &fr) {setRect("windowframe",fr);}
|
||||||
void SetWindowTab(int tab) {windowTab=tab;}
|
void SetWindowTab(int tab) {setInt("windowtab",tab);}
|
||||||
void SetTimeFlags(int tf) {timeFlags=tf;}
|
void SetTimeFlags(int tf) {setInt("timeflags",tf);}
|
||||||
void SetBlankTime(int bt) {blankTime=bt;}
|
void SetBlankTime(int bt) {setInt("timefade",bt);}
|
||||||
void SetStandbyTime(int time) {standbyTime=time;}
|
void SetStandbyTime(int time) {setInt("timestandby",time);}
|
||||||
void SetSuspendTime(int time) {suspendTime=time;}
|
void SetSuspendTime(int time) {setInt("timesuspend",time);}
|
||||||
void SetOffTime(int intime) {offTime=intime;}
|
void SetOffTime(int intime) {setInt("timeoff",intime);}
|
||||||
void SetBlankCorner(arrowDirection in) {blank=in;}
|
void SetBlankCorner(arrowDirection in) {setInt("cornernow",(int)in);}
|
||||||
void SetNeverBlankCorner(arrowDirection in){neverBlank=in;}
|
void SetNeverBlankCorner(arrowDirection in){setInt("cornernever",(int)in);}
|
||||||
void SetLockEnable(bool en) {lockenable=en;}
|
void SetLockEnable(bool en) {setBool("lockenable",en);}
|
||||||
void SetPasswordTime(int pt) {passwordTime=pt;}
|
void SetPasswordTime(int pt) {setInt("lockdelay",pt);}
|
||||||
void SetPassword(char *pw){strncpy(password,pw,B_PATH_NAME_LENGTH-1);}
|
void SetPassword(char *pw){setString("lockpassword",pw);} // Can not set network password from here.
|
||||||
void SetNetworkPassword(bool np) {isNetworkPWD=np;}
|
void SetModuleName(const char *mn) {setString("modulename",mn);}
|
||||||
void SetModuleName(const char *mn) {strncpy(moduleName,mn,B_PATH_NAME_LENGTH-1);}
|
void SetState(const char *name,BMessage *in);
|
||||||
void SetState(BMessage *in) {stateMsg=*in;}
|
|
||||||
BMessage *GetSettings(void);
|
|
||||||
void SaveSettings (void);
|
void SaveSettings (void);
|
||||||
private:
|
private:
|
||||||
bool parseSettings(BMessage *newSSMessage);
|
bool parseSettings(BMessage *newSSMessage);
|
||||||
BRect windowFrame;
|
|
||||||
int windowTab;
|
|
||||||
int timeFlags;
|
|
||||||
int blankTime; // AKA timefade
|
|
||||||
int standbyTime; // AKA timestandby
|
|
||||||
int suspendTime; // AKA timesuspend
|
|
||||||
int offTime; // AKA timeoff
|
|
||||||
arrowDirection blank; // AKA cornernow
|
|
||||||
arrowDirection neverBlank; // AKA cornernever
|
|
||||||
bool lockenable;
|
|
||||||
int passwordTime; // AKA lockdelay
|
|
||||||
char password[B_PATH_NAME_LENGTH]; // aka lockpassword
|
|
||||||
bool isNetworkPWD;
|
|
||||||
|
|
||||||
char moduleName[B_PATH_NAME_LENGTH];
|
bool getBool(const char *name) {bool b;currentMessage.FindBool(name,&b);return b;}
|
||||||
BMessage stateMsg, msg;
|
int32 getInt(const char *name){int32 b;currentMessage.FindInt32(name,&b);return b;}
|
||||||
|
const char *getString(const char *name){const char *b;currentMessage.FindString(name,&b);return b;}
|
||||||
|
BRect getRect(const char *name){BRect b;currentMessage.FindRect(name,&b);return b;}
|
||||||
|
|
||||||
|
void setBool(const char *name,bool value) {
|
||||||
|
if (B_NAME_NOT_FOUND == currentMessage.ReplaceBool(name,value))
|
||||||
|
currentMessage.AddBool(name,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setInt(const char *name,int value) {
|
||||||
|
if (B_NAME_NOT_FOUND == currentMessage.ReplaceInt32(name,value))
|
||||||
|
currentMessage.AddInt32(name,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setString(const char *name,const char *value) {
|
||||||
|
if (B_NAME_NOT_FOUND == currentMessage.ReplaceString(name,value))
|
||||||
|
currentMessage.AddString(name,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setRect(const char *name,BRect value) {
|
||||||
|
if (B_NAME_NOT_FOUND == currentMessage.ReplaceRect(name,value))
|
||||||
|
currentMessage.AddRect(name,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
BMessage currentMessage,stateMsg;
|
||||||
|
BPath ssPath,networkPath;
|
||||||
|
char password[512];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,133 +9,61 @@
|
|||||||
|
|
||||||
ScreenSaverPrefs::ScreenSaverPrefs(void)
|
ScreenSaverPrefs::ScreenSaverPrefs(void)
|
||||||
{
|
{
|
||||||
|
find_directory(B_USER_SETTINGS_DIRECTORY,&ssPath);
|
||||||
|
find_directory(B_USER_SETTINGS_DIRECTORY,&networkPath);
|
||||||
|
ssPath.Append("ScreenSaver_settings",true);
|
||||||
|
networkPath.Append("network",true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the flattened settings BMessage from disk and parse it.
|
// Load the flattened settings BMessage from disk and parse it.
|
||||||
bool
|
bool
|
||||||
ScreenSaverPrefs::LoadSettings(void)
|
ScreenSaverPrefs::LoadSettings(void)
|
||||||
{
|
{
|
||||||
bool ok;
|
BFile ssSettings(ssPath.Path(),B_READ_ONLY);
|
||||||
char pathAndFile[B_PATH_NAME_LENGTH];
|
if (B_OK==ssSettings.InitCheck()) { // File exists. Unflatten the message and call the settings parser.
|
||||||
BPath path;
|
BMessage settings;
|
||||||
|
settings.Unflatten(&ssSettings);
|
||||||
status_t found=find_directory(B_USER_SETTINGS_DIRECTORY,&path);
|
return true;
|
||||||
if (ok=(found==B_OK)) {
|
|
||||||
strncpy(pathAndFile,path.Path(),B_PATH_NAME_LENGTH-1);
|
|
||||||
strncat(pathAndFile,"/ScreenSaver_settings",B_PATH_NAME_LENGTH-1);
|
|
||||||
BFile ssSettings(pathAndFile,B_READ_ONLY);
|
|
||||||
if (B_OK==ssSettings.InitCheck()) { // File exists. Unflatten the message and call the settings parser.
|
|
||||||
BMessage settings;
|
|
||||||
settings.Unflatten(&ssSettings);
|
|
||||||
ok=parseSettings (&settings);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return ok;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
void
|
ScreenSaverPrefs::Password(void) {
|
||||||
setOnValue(BMessage *msg, char *name, int &result)
|
if (IsNetworkPassword()) {
|
||||||
{
|
FILE *networkFile=NULL;
|
||||||
int32 value;
|
char buffer[512],*start;
|
||||||
if (B_OK == msg->FindInt32(name,&value)) // If screen saving is even enabled
|
// This ugly piece opens the networking file and reads the password, if it exists.
|
||||||
result=value;
|
if ((networkFile=fopen(networkPath.Path(),"r")))
|
||||||
|
while (buffer==fgets(buffer,512,networkFile))
|
||||||
|
if ((start=strstr(buffer,"PASSWORD ="))) {
|
||||||
|
strncpy(password, start+10,strlen(start-11));
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return getString("lockpassword");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
ScreenSaverPrefs::parseSettings (BMessage *msg)
|
|
||||||
{
|
|
||||||
int temp;
|
|
||||||
const char *strPtr;
|
|
||||||
char pathAndFile[B_PATH_NAME_LENGTH];
|
|
||||||
BPath path;
|
|
||||||
|
|
||||||
// Set some defaults
|
|
||||||
blankTime=passwordTime=-1;
|
|
||||||
// Set the easy (integer) ones:
|
|
||||||
setOnValue(msg,"windowtab",windowTab);
|
|
||||||
setOnValue(msg,"timeflags",timeFlags);
|
|
||||||
setOnValue(msg,"timefade",blankTime);
|
|
||||||
setOnValue(msg,"timestandby",standbyTime);
|
|
||||||
setOnValue(msg,"timesuspend",suspendTime);
|
|
||||||
setOnValue(msg,"timeoff",offTime);
|
|
||||||
setOnValue(msg,"cornernow",temp);
|
|
||||||
blank=(arrowDirection)temp;
|
|
||||||
setOnValue(msg,"cornernever",temp);
|
|
||||||
neverBlank=(arrowDirection)temp;
|
|
||||||
setOnValue(msg,"lockdelay",passwordTime);
|
|
||||||
|
|
||||||
msg->FindRect("windowframe",&windowFrame);
|
|
||||||
msg->FindBool("lockenable",&lockenable);
|
|
||||||
msg->FindString("lockmethod",&strPtr);
|
|
||||||
if (strPtr) {
|
|
||||||
isNetworkPWD=(strcmp("custom",strPtr));
|
|
||||||
// Get the password. Either from the settings file or the networking file.
|
|
||||||
if (isNetworkPWD) {
|
|
||||||
status_t found=find_directory(B_USER_SETTINGS_DIRECTORY,&path);
|
|
||||||
if (found==B_OK) {
|
|
||||||
FILE *networkFile=NULL;
|
|
||||||
char buffer[512],*start;
|
|
||||||
strncpy(pathAndFile,path.Path(),B_PATH_NAME_LENGTH-1);
|
|
||||||
strncat(pathAndFile,"/network",B_PATH_NAME_LENGTH-1);
|
|
||||||
// This ugly piece opens the networking file and reads the password, if it exists.
|
|
||||||
if ((networkFile=fopen(pathAndFile,"r")))
|
|
||||||
while (buffer==fgets(buffer,512,networkFile))
|
|
||||||
if ((start=strstr(buffer,"PASSWORD =")))
|
|
||||||
strncpy(password, start+10,strlen(start-11));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
msg->FindString("lockpassword",&strPtr);
|
|
||||||
if (strPtr)
|
|
||||||
strncpy(password,strPtr,B_PATH_NAME_LENGTH-1);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
password[0]='\0';
|
|
||||||
if (B_OK != msg->FindString("modulename",&strPtr))
|
|
||||||
blankTime=-1; // If the module doesn't exist, never blank.
|
|
||||||
if (strPtr)
|
|
||||||
strncpy(moduleName,strPtr,B_PATH_NAME_LENGTH-1);
|
|
||||||
else
|
|
||||||
strcpy(moduleName,"Blackness");
|
|
||||||
BString stateMsgName("modulesettings_");
|
|
||||||
stateMsgName+=moduleName;
|
|
||||||
msg->FindMessage(stateMsgName.String(),&stateMsg); // Doesn't matter if it fails - stateMsg would just continue to be empty
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BMessage *
|
BMessage *
|
||||||
ScreenSaverPrefs::GetSettings (void)
|
ScreenSaverPrefs::GetState(const char *name) {
|
||||||
{
|
|
||||||
msg.MakeEmpty();
|
|
||||||
msg.AddRect("windowframe",windowFrame);
|
|
||||||
msg.AddInt32("windowtab",windowTab);
|
|
||||||
msg.AddInt32("timeflags",timeFlags);
|
|
||||||
msg.AddInt32("timefade", blankTime);
|
|
||||||
msg.AddInt32("timestandby", standbyTime);
|
|
||||||
msg.AddInt32("timesuspend", suspendTime);
|
|
||||||
msg.AddInt32("timeoff", offTime);
|
|
||||||
msg.AddInt32("cornernow", blank);
|
|
||||||
msg.AddInt32("cornernever", neverBlank);
|
|
||||||
msg.AddBool("lockenable", lockenable);
|
|
||||||
msg.AddInt32("lockdelay", passwordTime);
|
|
||||||
msg.AddString("modulename", moduleName);
|
|
||||||
BString stateMsgName("modulesettings_");
|
BString stateMsgName("modulesettings_");
|
||||||
stateMsgName+=moduleName;
|
stateMsgName+=name;
|
||||||
msg.AddMessage(stateMsgName.String(),&stateMsg);
|
currentMessage.FindMessage(stateMsgName.String(),&stateMsg);
|
||||||
return &msg;
|
return &stateMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenSaverPrefs::SetState(const char *name,BMessage *msg) {
|
||||||
|
BString stateMsgName("modulesettings_");
|
||||||
|
stateMsgName+=name;
|
||||||
|
if (B_NAME_NOT_FOUND == currentMessage.ReplaceMessage(stateMsgName.String(),msg))
|
||||||
|
currentMessage.AddMessage(stateMsgName.String(),msg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ScreenSaverPrefs::SaveSettings (void)
|
ScreenSaverPrefs::SaveSettings (void) {
|
||||||
{
|
BFile file(ssPath.Path(),B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
GetSettings();
|
if ((file.InitCheck()!=B_OK) || (currentMessage.Flatten(&file)!=B_OK))
|
||||||
BPath path;
|
|
||||||
find_directory(B_USER_SETTINGS_DIRECTORY,&path);
|
|
||||||
path.Append("ScreenSaver_settings",true);
|
|
||||||
BFile file(path.Path(),B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
|
||||||
if ((file.InitCheck()!=B_OK) || (msg.Flatten(&file)!=B_OK))
|
|
||||||
printf ("Problem with saving preferences file!\n");
|
printf ("Problem with saving preferences file!\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ ScreenSaverThread::LoadAddOn()
|
|||||||
printf ("Error = %ld\n",retVal);
|
printf ("Error = %ld\n",retVal);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
saver=instantiate(pref->GetState(),addon_image);
|
saver=instantiate(pref->GetState(pref->ModuleName()),addon_image);
|
||||||
if (B_OK!=saver->InitCheck()) {
|
if (B_OK!=saver->InitCheck()) {
|
||||||
printf ("InitCheck() Failed!\n");
|
printf ("InitCheck() Failed!\n");
|
||||||
unload_add_on(addon_image);
|
unload_add_on(addon_image);
|
||||||
|
|||||||
Reference in New Issue
Block a user