@@ -12,6 +12,8 @@ import RealmSwift
1212private enum LocationMetadataTransferError : LocalizedError {
1313 case emptyData
1414 case invalidFile
15+ case missingOwner
16+ case ownerMismatch
1517 case missingChecksum
1618 case checksumMismatch
1719
@@ -21,6 +23,10 @@ private enum LocationMetadataTransferError: LocalizedError {
2123 return " 내보낼 위치 메타데이터가 없습니다. "
2224 case . invalidFile:
2325 return " 가져오기 파일 형식이 올바르지 않습니다. "
26+ case . missingOwner:
27+ return " 가져오기 파일의 사용자 정보가 없습니다. "
28+ case . ownerMismatch:
29+ return " 다른 계정에서 내보낸 위치 데이터 파일입니다. "
2430 case . missingChecksum:
2531 return " 가져오기 파일에 체크섬 정보가 없습니다. "
2632 case . checksumMismatch:
@@ -36,10 +42,11 @@ final class LocationMetadataTransferRepository {
3642 let schemaVersion : Int
3743 let exportedAt : Date
3844 let appVersion : String
45+ let ownerUserId : Int64
3946 let items : [ LocationMetadataTransferItem ]
4047 }
4148
42- func exportLocationMetadataPack( ) throws -> ( fileURL: URL , itemCount: Int ) {
49+ func exportLocationMetadataPack( ownerUserId : Int64 ) throws -> ( fileURL: URL , itemCount: Int ) {
4350 let realm = try Realm ( )
4451 let rows = realm. objects ( PhotoMetadata . self) . sorted ( byKeyPath: " capturedAt " , ascending: true )
4552
@@ -70,6 +77,7 @@ final class LocationMetadataTransferRepository {
7077 schemaVersion: schemaVersion,
7178 exportedAt: exportedAt,
7279 appVersion: appVersion,
80+ ownerUserId: ownerUserId,
7381 items: Array ( items)
7482 )
7583 )
@@ -78,6 +86,7 @@ final class LocationMetadataTransferRepository {
7886 schemaVersion: schemaVersion,
7987 exportedAt: exportedAt,
8088 appVersion: appVersion,
89+ ownerUserId: ownerUserId,
8190 checksum: checksum,
8291 items: Array ( items)
8392 )
@@ -93,13 +102,19 @@ final class LocationMetadataTransferRepository {
93102 return ( destination, items. count)
94103 }
95104
96- func importLocationMetadataPack( from fileURL: URL ) throws -> LocationMetadataImportResult {
105+ func importLocationMetadataPack( from fileURL: URL , expectedOwnerUserId : Int64 ) throws -> LocationMetadataImportResult {
97106 let data = try Data ( contentsOf: fileURL)
98107 let decoder = JSONDecoder ( )
99108 decoder. dateDecodingStrategy = . iso8601
100109 guard let pack = try ? decoder. decode ( LocationMetadataTransferPack . self, from: data) else {
101110 throw LocationMetadataTransferError . invalidFile
102111 }
112+ guard let ownerUserId = pack. ownerUserId else {
113+ throw LocationMetadataTransferError . missingOwner
114+ }
115+ guard ownerUserId == expectedOwnerUserId else {
116+ throw LocationMetadataTransferError . ownerMismatch
117+ }
103118 guard let checksum = pack. checksum, checksum. isEmpty == false else {
104119 throw LocationMetadataTransferError . missingChecksum
105120 }
@@ -108,6 +123,7 @@ final class LocationMetadataTransferRepository {
108123 schemaVersion: pack. schemaVersion,
109124 exportedAt: pack. exportedAt,
110125 appVersion: pack. appVersion,
126+ ownerUserId: ownerUserId,
111127 items: pack. items
112128 )
113129 )
0 commit comments