Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 24 additions & 24 deletions Permanent.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -6014,7 +6014,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -6072,7 +6072,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
Expand Down Expand Up @@ -6101,7 +6101,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS";
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6134,7 +6134,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand All @@ -6158,7 +6158,7 @@
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PermanentUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -6183,7 +6183,7 @@
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PermanentUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -6208,7 +6208,7 @@
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PermanentUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -6233,7 +6233,7 @@
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = x86_64;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PermanentUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -6264,7 +6264,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = com.vsp.PermanentTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -6294,7 +6294,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = com.vsp.PermanentTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -6324,7 +6324,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = com.vsp.PermanentTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -6354,7 +6354,7 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = com.vsp.PermanentTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -6390,7 +6390,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6428,7 +6428,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6466,7 +6466,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6504,7 +6504,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging.ShareExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6573,7 +6573,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -6602,7 +6602,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
OTHER_SWIFT_FLAGS = "-D COCOAPODS -DSTAGING_ENVIRONMENT";
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6663,7 +6663,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
Expand Down Expand Up @@ -6692,7 +6692,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
OTHER_SWIFT_FLAGS = "-D COCOAPODS -DSTAGING_ENVIRONMENT";
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -6722,7 +6722,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PushExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -6751,7 +6751,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging.PushExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -6780,7 +6780,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.PermanentArchive.PushExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -6809,7 +6809,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.14.1;
MARKETING_VERSION = 1.14.2;
PRODUCT_BUNDLE_IDENTIFIER = org.permanent.permanent.staging.PushExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down
8 changes: 8 additions & 0 deletions Permanent/App/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import GoogleMaps
import StripeApplePay
import SwiftUI
import KeychainSwift
import SDWebImage

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
Expand All @@ -29,6 +30,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
initFirebase()
initNotifications()
configureLogging()
configureImageCache()

StripeAPI.defaultPublishableKey = stripeServiceInfo.publishableKey

Expand Down Expand Up @@ -285,6 +287,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
#endif
}

fileprivate func configureImageCache() {
let cache = SDImageCache.shared
cache.config.maxDiskSize = 300 * 1024 * 1024 // 300 MB disk cap
cache.config.maxMemoryCost = 50 * 1024 * 1024 // 50 MB memory cap
}

fileprivate func initNotifications() {
UNUserNotificationCenter.current().delegate = self

Expand Down
2 changes: 1 addition & 1 deletion Permanent/Common/Base/SwiftUIViews/SectionHeaderView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ struct SectionHeaderView: View {
VStack {
HStack {
let files = selectedFiles
if !files.isEmpty, let url = URL(string: files.first?.thumbnailURL500) {
if !files.isEmpty, let url = URL(string: files.first?.preferredThumbnailURL) {
WebImage(url: url)
.resizable()
.placeholder(content: {
Expand Down
5 changes: 5 additions & 0 deletions Permanent/Common/Managers/AuthenticationManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import UIKit
import KeychainSwift
import FirebaseMessaging
import SDWebImage

class AuthenticationManager {
static let shared = AuthenticationManager()
Expand Down Expand Up @@ -212,6 +213,10 @@ class AuthenticationManager {
keychainHandler.clearSession()
UserDefaults.standard.set(false, forKey: Constants.Keys.StorageKeys.memberChecklistWasShown)

// Clear cached images to prevent data leaking between accounts
SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk()

Messaging.messaging().deleteFCMToken(forSenderID: googleServiceInfo.gcmSenderId) { _ in }
}

Expand Down
15 changes: 14 additions & 1 deletion Permanent/Common/Models/Data/ArchiveVO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ struct ArchiveVOData: Model {
let type: String?
let thumbStatus: Status?
let imageRatio: JSONAny?
let thumbnail256: String?
let thumbURL200: String?
let thumbURL500: String?
let thumbURL1000: String?
Expand All @@ -64,7 +65,18 @@ struct ArchiveVOData: Model {
case archiveID = "archiveId"
case publicDT, archiveNbr
case archiveVOPublic = "public"
case view, viewProperty, vaultKey, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, createdDT, updatedDT
case view, viewProperty, vaultKey, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbnail256, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, createdDT, updatedDT
}
}

extension ArchiveVOData {
private func nonEmpty(_ value: String?) -> String? {
guard let value = value, !value.isEmpty else { return nil }
return value
}

var preferredThumbnailURL: String? {
nonEmpty(thumbnail256) ?? nonEmpty(thumbURL500) ?? nonEmpty(thumbURL200) ?? nonEmpty(thumbURL1000) ?? nonEmpty(thumbURL2000)
}
}

Expand Down Expand Up @@ -99,6 +111,7 @@ extension ArchiveVOData {
type: "archive",
thumbStatus: .ok,
imageRatio: nil,
thumbnail256: nil,
thumbURL200: "https://example.com/thumb200.jpg",
thumbURL500: "https://example.com/thumb500.jpg",
thumbURL1000: "https://example.com/thumb1000.jpg",
Expand Down
14 changes: 13 additions & 1 deletion Permanent/Common/Models/Data/Folder/FolderVO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ struct FolderVOData: Model {
let viewProperty, thumbArchiveNbr: String?
let type, thumbStatus: String?
let imageRatio: JSONAny?
let thumbnail256: String?
let thumbURL200: String?
let thumbURL500: String?
let thumbURL1000: String?
Expand Down Expand Up @@ -74,7 +75,7 @@ struct FolderVOData: Model {
case special, sort
case locnID = "locnId"
case timeZoneID = "timeZoneId"
case view, viewProperty, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, publicDT
case view, viewProperty, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbnail256, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, publicDT
case parentFolderID = "parentFolderId"
case folderLinkType = "folder_linkType"
case folderLinkVOS = "FolderLinkVOs"
Expand Down Expand Up @@ -102,3 +103,14 @@ struct FolderVOData: Model {
case archiveArchiveNbr, returnDataSize, posStart, posLimit, searchScore, createdDT, updatedDT
}
}

extension FolderVOData {
private func nonEmpty(_ value: String?) -> String? {
guard let value = value, !value.isEmpty else { return nil }
return value
}

var preferredThumbnailURL: String? {
nonEmpty(thumbnail256) ?? nonEmpty(thumbURL500) ?? nonEmpty(thumbURL200) ?? nonEmpty(thumbURL1000) ?? nonEmpty(thumbURL2000)
}
}
14 changes: 13 additions & 1 deletion Permanent/Common/Models/Data/Folder/MinFolderVO.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ struct MinFolderVO: Codable {
let viewProperty, thumbArchiveNbr: JSONAny?
let type, thumbStatus: String?
let imageRatio: JSONAny?
let thumbnail256: String?
let thumbURL200: String?
let thumbURL500: String?
let thumbURL1000: String?
Expand Down Expand Up @@ -67,7 +68,7 @@ struct MinFolderVO: Codable {
case special, sort
case locnID = "locnId"
case timeZoneID = "timeZoneId"
case view, viewProperty, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, publicDT
case view, viewProperty, thumbArchiveNbr, imageRatio, type, thumbStatus, thumbnail256, thumbURL200, thumbURL500, thumbURL1000, thumbURL2000, thumbDT, status, publicDT
case parentFolderID = "parentFolderId"
case folderLinkType = "folder_linkType"
case folderLinkVOS = "FolderLinkVOs"
Expand Down Expand Up @@ -95,3 +96,14 @@ struct MinFolderVO: Codable {
case archiveArchiveNbr, returnDataSize, posStart, posLimit, searchScore, createdDT, updatedDT
}
}

extension MinFolderVO {
private func nonEmpty(_ value: String?) -> String? {
guard let value = value, !value.isEmpty else { return nil }
return value
}

var preferredThumbnailURL: String? {
nonEmpty(thumbnail256) ?? nonEmpty(thumbURL500) ?? nonEmpty(thumbURL200) ?? nonEmpty(thumbURL1000) ?? nonEmpty(thumbURL2000)
}
}
Loading
Loading