Page MenuHomePhabricator

D4393.diff
No OneTemporary

D4393.diff

diff --git a/native/ios/Comm/TemporaryMessageStorage/TemporaryMessageStorage.mm b/native/ios/Comm/TemporaryMessageStorage/TemporaryMessageStorage.mm
--- a/native/ios/Comm/TemporaryMessageStorage/TemporaryMessageStorage.mm
+++ b/native/ios/Comm/TemporaryMessageStorage/TemporaryMessageStorage.mm
@@ -46,6 +46,61 @@
return self;
}
+- (void)writeMessage:(NSString *)message {
+ NSArray<NSString *> *storageContent =
+ [NSFileManager.defaultManager contentsOfDirectoryAtPath:self.directoryPath
+ error:nil];
+ if (!storageContent) {
+ comm::Logger::log("Storage not existing yet. Skipping notification");
+ return;
+ }
+
+ NSString *currentFileName = nil;
+ if (storageContent.count) {
+ currentFileName =
+ [storageContent sortedArrayUsingSelector:@selector(compare:)]
+ .lastObject;
+ } else if (!(currentFileName = [self _createNewStorage])) {
+ comm::Logger::log(
+ "Failed to create new storage file. Details: " +
+ std::string(strerror(errno)));
+ }
+
+ NSString *currentFilePath = [self _getPath:currentFileName];
+ NSString *lockName = [self _getLockName:currentFileName];
+ NonBlockingLock *lock = [[NonBlockingLock alloc] initWithName:lockName];
+
+ NSError *lockError = nil;
+ NSError *writeError = nil;
+
+ @try {
+ if (![lock tryAcquireLock:&lockError]) {
+ NSString *randomPath =
+ [self.directoryURL
+ URLByAppendingPathComponent:[NSUUID UUID].UUIDString]
+ .path;
+ [EncryptedFileUtils writeData:message toFileAtPath:randomPath error:nil];
+ comm::Logger::log(
+ "Failed to acquire lock. Details: " +
+ std::string([lockError.localizedDescription UTF8String]) +
+ " Persisting notification at path: " +
+ std::string([randomPath UTF8String]));
+ return;
+ }
+ [EncryptedFileUtils appendData:message
+ toFileAtPath:currentFilePath
+ error:&writeError];
+ } @finally {
+ [lock releaseLock:&lockError];
+ }
+
+ if (writeError) {
+ comm::Logger::log(
+ "Failed to append message to storage. Details: " +
+ std::string([writeError.localizedDescription UTF8String]));
+ }
+}
+
- (NSString *)_createNewStorage {
int64_t timestamp = (int64_t)[NSDate date].timeIntervalSince1970;
NSString *newStorageName = [NSString stringWithFormat:@"msg_%lld", timestamp];

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 6, 12:29 AM (21 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2427002
Default Alt Text
D4393.diff (2 KB)

Event Timeline