Ejemplo n.º 1
0
        public async Task SaveAsync(DataTypes type, string name, string key, JObject data)
        {
            FileStream   file = null;
            StreamWriter sw   = null;

            try
            {
                file = File.Open(BuildFilePath(type, name), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);

                IDataFile   dataFile   = null;
                IScreenData screenData = null;
                switch (type)
                {
                /*case DataTypes.Screen:
                 *  dataFile = await LoadAsync<Screen>(type, name);
                 *  if (data.ContainsKey("screenobjname")) // ScreenObj
                 *  {
                 *      screenData = data.ToObject<TtScreenObj>(new JsonSerializer() { ContractResolver = new Utils.DataLoadContractResolver() });
                 *  }
                 *  else if (data.ContainsKey("objname")) // ScreenChildObj
                 *  {
                 *      screenData = data.ToObject<TtScreenChildObj>(new JsonSerializer() { ContractResolver = new Utils.DataLoadContractResolver() });
                 *  }
                 *  else
                 *  {
                 *      throw new FormatException("Do not put stones into the machine");
                 *  }
                 *  break;*/
                case DataTypes.Messages:
                    dataFile = await LoadAsync <Messages>(type, name);

                    screenData = data.ToObject <TtMessage>(new JsonSerializer()
                    {
                        ContractResolver = new Utils.DataLoadContractResolver()
                    });
                    break;

                case DataTypes.Translation:
                    dataFile = await LoadAsync <Translation>(type, name);

                    screenData = data.ToObject <TtTranslation>(new JsonSerializer()
                    {
                        ContractResolver = new Utils.DataLoadContractResolver()
                    });
                    break;

                default:
                    throw new NotSupportedException($"Data type: {type.ToString()} not supported");
                }
                dataFile.CreateOrUpdate(screenData);
                string newData = dataFile.Serialize();

                sw = new StreamWriter(file);
                await sw.WriteAsync(newData);

                Cache.SetCache(type, name, dataFile);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                sw?.Close();
                file?.Close();
            }
        }