| 1196 | } |
| 1197 | |
| 1198 | func mergeCloudStoreFileSet(existingFiles []map[string]interface{}, incomingFiles []interface{}) []map[string]interface{} { |
| 1199 | finalFileSet := make([]map[string]interface{}, 0, len(existingFiles)+len(incomingFiles)) |
| 1200 | existingFilesMap := make(map[string]int) |
| 1201 | |
| 1202 | for _, file := range existingFiles { |
| 1203 | fileName := file["name"].(string) |
| 1204 | if _, ok := existingFilesMap[fileName]; ok { |
| 1205 | continue |
| 1206 | } |
| 1207 | existingFilesMap[fileName] = len(finalFileSet) |
| 1208 | finalFileSet = append(finalFileSet, copyFileMetadata(file)) |
| 1209 | } |
| 1210 | |
| 1211 | for i := range incomingFiles { |
| 1212 | file := incomingFiles[i].(map[string]interface{}) |
| 1213 | delete(file, "file") |
| 1214 | delete(file, "contents") |
| 1215 | incomingFiles[i] = file |
| 1216 | |
| 1217 | fileName := file["name"].(string) |
| 1218 | if existingIndex, ok := existingFilesMap[fileName]; ok { |
| 1219 | for key, value := range file { |
| 1220 | finalFileSet[existingIndex][key] = value |
| 1221 | } |
| 1222 | continue |
| 1223 | } |
| 1224 | |
| 1225 | existingFilesMap[fileName] = len(finalFileSet) |
| 1226 | finalFileSet = append(finalFileSet, copyFileMetadata(file)) |
| 1227 | } |
| 1228 | |
| 1229 | return finalFileSet |
| 1230 | } |
| 1231 | |
| 1232 | func copyFileMetadata(file map[string]interface{}) map[string]interface{} { |
| 1233 | copiedFile := make(map[string]interface{}, len(file)) |