89984ae00fa1ca9e82430f25886bf4a4c151d98c
[sdk] / ecere / src / sys / JSONGlobalSettings.ec
1 import "GlobalAppSettings"
2 import "JSON"
3
4 public class JSONGlobalSettings : GlobalSettingsDriver
5 {
6    class_property(name) = "JSON";
7
8 public:
9    SettingsIOResult ::Load(File f, GlobalSettings globalSettings)
10    {
11       SettingsIOResult result = error;
12       //if(globalSettings.data)
13       {
14          JSONParser parser { f = f };
15          JSONResult jsonResult;
16          subclass(GlobalSettingsData) dataClass = globalSettings.dataClass;
17          if(!dataClass && globalSettings.data)
18             dataClass = (subclass(GlobalSettingsData))globalSettings.data._class;
19          //incref dataBackup;
20          //incref dataBackup;
21          jsonResult = parser.GetObject(dataClass, &globalSettings.data);
22          if(globalSettings.data)
23          {
24             if(globalSettings.dataOwner)
25             {
26                delete *globalSettings.dataOwner;
27                *globalSettings.dataOwner = globalSettings.data;
28             }
29             result = success;
30          }
31          else if(jsonResult == syntaxError || jsonResult == noItem)
32          {
33             delete globalSettings.data;
34             globalSettings.data = *globalSettings.dataOwner;
35             result = fileNotCompatibleWithDriver;
36          }
37          delete parser;
38       }
39       return result;
40    }
41
42    SettingsIOResult ::Save(File f, GlobalSettings globalSettings)
43    {
44       SettingsIOResult result = error;
45       if(globalSettings && WriteJSONObject(f, globalSettings.data._class, globalSettings.data, 0))
46          result = success;
47       return result;
48    }
49 }