예제 #1
0
        public void Write(string key, object value, SettingsStrategy strategy)
        {
            var type   = value.GetType();
            var editor = LocalSettings.Edit();

            if (type == typeof(int))
            {
                editor.PutInt(key, (int)value);
            }
            else if (type == typeof(long))
            {
                editor.PutLong(key, (long)value);
            }
            else if (type == typeof(float))
            {
                editor.PutFloat(key, (float)value);
            }
            else if (type == typeof(bool))
            {
                editor.PutBoolean(key, (bool)value);
            }
            else
            {
                editor.PutString(key, (string)value);
            }

            editor.Commit();
        }
예제 #2
0
        public void Write <T>(string key, T value, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var type     = value.GetType();
            var editor   = LocalSettings.Edit();
            var valueObj = (object)value;

            if (type == typeof(int))
            {
                editor.PutInt(key, (int)valueObj);
            }
            else if (type == typeof(long))
            {
                editor.PutLong(key, (long)valueObj);
            }
            else if (type == typeof(float))
            {
                editor.PutFloat(key, (float)valueObj);
            }
            else if (type == typeof(bool))
            {
                editor.PutBoolean(key, (bool)valueObj);
            }
            else if (type == typeof(string))
            {
                editor.PutString(key, (string)valueObj);
            }
            else
            {
                var json = JsonConvert.SerializeObject(value);
                editor.PutString(key, json);
            }

            editor.Commit();
        }
예제 #3
0
        public T Read <T>(string key, T otherwise, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var    container     = Container(strategy);
            var    type          = typeof(T);
            var    defaultObject = (object)otherwise;
            object returnValue;

            if (type == typeof(int))
            {
                returnValue = container.GetInt(key, (int)defaultObject);
            }
            else if (type == typeof(long))
            {
                returnValue = container.GetLong(key, (long)defaultObject);
            }
            else if (type == typeof(float))
            {
                returnValue = container.GetFloat(key, (float)defaultObject);
            }
            else if (type == typeof(bool))
            {
                returnValue = container.GetBoolean(key, (bool)defaultObject);
            }
            else if (type == typeof(string))
            {
                returnValue = container.GetString(key, (string)defaultObject);
            }
            else
            {
                var json = container.GetString(key, null);
                returnValue = JsonConvert.DeserializeObject <T>(json);
            }

            return((T)returnValue);
        }
예제 #4
0
        public void Write <T>(string key, T value, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (IsPrimitive(typeof(T)))
            {
                try
                {
                    settings[key] = value;
                }
                catch
                {
                    // ignored
                }
            }
            else
            {
                var json = Serialize(value);
                try
                {
                    settings[key] = json;
                }
                catch
                {
                    // too big, fallback to file
                    var file = AsyncHelper.RunSync(() => StorageHelper.CreateFileAsync(string.Format(FileFallback, key), option: CreationCollisionOption.ReplaceExisting));
                    using (var stream = AsyncHelper.RunSync(() => file.OpenStreamForWriteAsync()))
                    {
                        var bytes = Encoding.UTF8.GetBytes(json);
                        stream.Write(bytes, 0, bytes.Length);
                        settings[key] = string.Format(FileFallback, key);
                    }
                }
            }
        }
예제 #5
0
        public T Read <T>(string key, T defaultValue, SettingsStrategy strategy)
        {
            //strategy is ignored, Android doesn't have a roaming settings option

            var    type          = typeof(T);
            var    defaultObject = (object)defaultValue;
            object returnValue;

            if (type == typeof(int))
            {
                returnValue = LocalSettings.GetInt(key, (int)defaultObject);
            }
            else if (type == typeof(long))
            {
                returnValue = LocalSettings.GetLong(key, (long)defaultObject);
            }
            else if (type == typeof(float))
            {
                returnValue = LocalSettings.GetFloat(key, (float)defaultObject);
            }
            else if (type == typeof(bool))
            {
                returnValue = LocalSettings.GetBoolean(key, (bool)defaultObject);
            }

            else
            {
                returnValue = LocalSettings.GetString(key, (string)defaultObject);
            }

            return((T)returnValue);
        }
예제 #6
0
 public void Remove(string key, SettingsStrategy strategy)
 {
     //Try to get the settings value
     if (GetContainerFromStrategy(strategy).Values.ContainsKey(key))
     {
         GetContainerFromStrategy(strategy).Values.Remove(key);
     }
 }
예제 #7
0
        public void Remove(string key, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (settings.ContainsKey(key))
            {
                settings.Remove(key);
            }
        }
예제 #8
0
        private static ApplicationDataContainer GetContainerFromStrategy(SettingsStrategy location)
        {
            switch (location)
            {
            case SettingsStrategy.Roaming:
                return(ApplicationData.Current.RoamingSettings);

            default:
                return(ApplicationData.Current.LocalSettings);
            }
        }
예제 #9
0
        public void Write(string key, object value, SettingsStrategy strategy)
        {
            if (GetContainerFromStrategy(strategy).Values.ContainsKey(key))
            {
                GetContainerFromStrategy(strategy).Values[key] = value;
            }

            else
            {
                GetContainerFromStrategy(strategy).Values.Add(key, value);
            }
        }
예제 #10
0
        public void Write <T>(string key, T value, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (IsPrimitive(typeof(T)))
            {
                try { settings[key] = value.ToString(); }
                catch { settings[key] = string.Empty; }
            }
            else
            {
                var json = Serialize(value);
                try { settings[key] = json; }
                catch { settings[key] = string.Empty; }
            }
        }
예제 #11
0
        private static ISettings GetSettingsContainer(SettingsStrategy strategy)
        {
            switch (strategy)
            {
            case SettingsStrategy.Local:
                return(new ApplicationContainerSettings(ApplicationData.Current.LocalSettings));

            case SettingsStrategy.Roaming:
                return(new ApplicationContainerSettings(ApplicationData.Current.RoamingSettings));

            case SettingsStrategy.Temp:
                return(new ApplicationFileSettings(ApplicationTempSettings.TempSettingsFolder));

            default:
                throw new ArgumentException("unknown settings strategy", nameof(strategy));
            }
        }
예제 #12
0
        public T Read <T>(string key, T defaultValue, SettingsStrategy strategy)
        {
            object obj;

            //Try to get the settings value
            if (GetContainerFromStrategy(strategy).Values.TryGetValue(key, out obj))
            {
                try
                {
                    //Try casting it
                    return((T)obj);
                }
                catch
                {
                    // ignored
                }
            }
            return(defaultValue);
        }
예제 #13
0
        public T Read <T>(string key, T otherwise, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (!settings.ContainsKey(key))
            {
                return(otherwise);
            }
            try
            {
                var o = settings[key];
                if (IsPrimitive(typeof(T)))
                {
                    return((T)o);
                }

                var json = o.ToString();

                var fallback = string.Format(FileFallback, key);
                if (json == fallback)
                {
                    var file = AsyncHelper.RunSync(() => StorageHelper.GetFileAsync(fallback));
                    using (var stream = AsyncHelper.RunSync(() => file.OpenStreamForReadAsync()))
                    {
                        var bytes = new byte[stream.Length];
                        stream.Read(bytes, 0, bytes.Length);
                        json = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    }
                    AsyncHelper.RunSync(() => file.DeleteAsync().AsTask());
                }

                return(Deserialize <T>(json));
            }
            catch
            {
                return(otherwise);
            }
        }
예제 #14
0
        public T Read <T>(string key, T otherwise, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (!settings.ContainsKey(key))
            {
                return(otherwise);
            }
            try
            {
                object untyped;
                if (settings.TryGetValue(key, out untyped))
                {
                    if (untyped == null)
                    {
                        return(otherwise);
                    }
                }
                else
                {
                    return(otherwise);
                }
                // attempt to deserialize
                if (IsPrimitive(typeof(T)))
                {
                    var parse = typeof(T).GetRuntimeMethod(SettingsHelper.parse, new[] { typeof(string) });
                    return((T)parse.Invoke(null, new[] { untyped }));
                }
                else
                {
                    var json = untyped.ToString();
                    return(Deserialize <T>(json));
                }
            }
            catch { return(otherwise); }
        }
예제 #15
0
        public T Read <T>(string key, T otherwise, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            if (!settings.ContainsKey(key))
            {
                return(otherwise);
            }
            try
            {
                if (IsPrimitive(typeof(T)))
                {
                    var value = settings[key].ToString();
                    var parse = typeof(T).GetRuntimeMethod(SettingsHelper.parse, new[] { typeof(string) });
                    return((T)parse.Invoke(null, new[] { value }));
                }
                else
                {
                    var json = settings[key].ToString();
                    return(Deserialize <T>(json));
                }
            }
            catch { return(otherwise); }
        }
예제 #16
0
 public void Write <T>(string key, T value, SettingsStrategy strategy = SettingsStrategy.Local)
 {
 }
예제 #17
0
 public void Remove(string key, SettingsStrategy strategy = SettingsStrategy.Local)
 {
 }
예제 #18
0
 public IPropertySet Container(SettingsStrategy strategy)
 {
     return((strategy == SettingsStrategy.Local)
         ? ApplicationData.Current.LocalSettings.Values
         : ApplicationData.Current.RoamingSettings.Values);
 }
예제 #19
0
        public bool Exists(string key, SettingsStrategy strategy = SettingsStrategy.Local)
        {
            var settings = Container(strategy);

            return(settings.ContainsKey(key));
        }
예제 #20
0
 public T Read <T>(string key, T otherwise, SettingsStrategy strategy = SettingsStrategy.Local)
 {
     return(otherwise);
 }
예제 #21
0
 public static bool Exist(string key, SettingsStrategy strategy)
 {
     return(GetSettingsContainer(strategy).Exist(key));
 }
예제 #22
0
 public static bool Remove(string key, SettingsStrategy strategy)
 {
     return(GetSettingsContainer(strategy).Remove(key));
 }
예제 #23
0
 public static void Write <T>(string key, T value, SettingsStrategy strategy)
 {
     GetSettingsContainer(strategy).Write(key, value);
 }
예제 #24
0
 public bool Exists(string key, SettingsStrategy strategy = SettingsStrategy.Local)
 {
     return(false);
 }
예제 #25
0
 public static T Read <T>(string key, SettingsStrategy strategy)
 {
     return(GetSettingsContainer(strategy).Read <T>(key));
 }
예제 #26
0
 private ISharedPreferences Container(SettingsStrategy strategy)
 {
     return(strategy == SettingsStrategy.Local
         ? LocalSettings
         : RoamingSettings);
 }
예제 #27
0
 public bool Exists(string key, SettingsStrategy strategy = SettingsStrategy.Local)
 {
     return(Container(strategy).Contains(key));
 }
예제 #28
0
 public void Remove(string key, SettingsStrategy strategy = SettingsStrategy.Local)
 {
     Container(strategy).Edit().Remove(key);
 }
예제 #29
0
 public SettingsService Container(SettingsStrategy strategy)
 {
     return((strategy == SettingsStrategy.Local)
         ? Local
         : Roaming);
 }
예제 #30
0
 public T Read <T>(string key, SettingsStrategy strategy)
 {
     return(Read(key, default(T), strategy));
 }