public SheetSyncScheme CreateSyncScheme(Type type, ISpreadsheetDescription spreadsheetTarget)
        {
            var sheetName    = type.Name;
            var useAllFields = true;
            var keyField     = GoogleSheetImporterConstants.KeyField;

            var sheetItemAttribute = spreadsheetTarget;

            if (sheetItemAttribute != null)
            {
                useAllFields = sheetItemAttribute.SyncAllFields;
                sheetName    = sheetItemAttribute.UseTypeName ? sheetName : sheetItemAttribute.SheetName;
                keyField     = sheetItemAttribute.KeyField;
            }

            var result = new SheetSyncScheme(sheetName);

            var fields = LoadSyncFieldsData(type, keyField, useAllFields);

            result.fields = fields.ToArray();

            result.keyField = result.fields.
                              FirstOrDefault(x => x.isKeyField);

            return(result);
        }
Пример #2
0
 public SyncField(FieldInfo field, string sheetValueField, bool isKeyField, SheetSyncScheme fieldScheme = null)
 {
     _fieldInfo      = field;
     objectField     = _fieldInfo.Name;
     sheetField      = sheetValueField.TrimStart('_');
     this.isKeyField = isKeyField;
     targetType      = _fieldInfo.FieldType;
     syncScheme      = fieldScheme;
 }
Пример #3
0
        public IEnumerable <SyncField> SelectSheetFields(SheetSyncScheme schemaValue, SheetData data)
        {
            var columns = data.Columns;

            for (var i = 0; i < columns.Count; i++)
            {
                var column = columns[i];
                var field  = schemaValue.fields.FirstOrDefault(x => SheetData.IsEquals(x.sheetField, column.ColumnName));
                if (field == null)
                {
                    yield return(null);
                }
                yield return(field);
            }
        }
Пример #4
0
        public IEnumerable <Object> ApplyAssets(
            Type filterType,
            string sheetId,
            string folder,
            SheetSyncScheme syncScheme,
            ISpreadsheetData spreadsheetData,
            object[] keys,
            Object[] assets     = null,
            int count           = -1,
            bool createMissing  = true,
            string keyFieldName = "")
        {
            count = count < 0 ? keys.Length : count;
            count = Math.Min(keys.Length, count);

            var keyField = string.IsNullOrEmpty(keyFieldName) ? syncScheme.keyField : syncScheme.GetFieldBySheetFieldName(keyFieldName);

            try {
                for (var i = 0; i < count; i++)
                {
                    var keyValue    = keys[i];
                    var key         = keyValue.TryConvert <string>();
                    var targetAsset = assets?.FirstOrDefault(x => string.Equals(keyField.GetValue(x).TryConvert <string>(),
                                                                                key, StringComparison.OrdinalIgnoreCase));

                    //create asset if missing
                    if (targetAsset == null)
                    {
                        //skip asset creation step
                        if (createMissing == false)
                        {
                            continue;
                        }

                        targetAsset = filterType.CreateAsset();
                        targetAsset.SaveAsset($"{filterType.Name}_{i + 1}", folder, false);
                        Debug.Log($"Create Asset [{targetAsset}] for path {folder}", targetAsset);
                    }

                    //show assets progression
                    AssetEditorTools.ShowProgress(new ProgressData()
                    {
                        IsDone   = false,
                        Progress = i / (float)count,
                        Content  = $"{i}:{count}  {targetAsset.name}",
                        Title    = "Spreadsheet Importing"
                    });

                    var spreadsheetValueInfo = new SheetValueInfo()
                    {
                        Source          = targetAsset,
                        SheetName       = sheetId,
                        SpreadsheetData = spreadsheetData,
                        SyncScheme      = syncScheme,
                        SyncFieldName   = keyField.sheetField,
                        SyncFieldValue  = keyValue,
                    };
                    ApplyData(spreadsheetValueInfo);

                    yield return(targetAsset);
                }
            }
            finally {
                AssetEditorTools.ShowProgress(new ProgressData()
                {
                    IsDone = true,
                });
                AssetDatabase.SaveAssets();
            }
        }