Overview
Comment: | Store next batch |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
6ab44895eb491d19d18a7d9b2a078ba2 |
User & Date: | js on 2020-10-03 22:32:12 |
Other Links: | manifest | tags |
Context
2020-10-04
| ||
01:18 | Include "since" in sync check-in: 2682b2dc32 user: js tags: trunk | |
2020-10-03
| ||
22:32 | Store next batch check-in: 6ab44895eb user: js tags: trunk | |
21:56 | Initial support for sync check-in: 17e299f073 user: js tags: trunk | |
Changes
Modified src/MTXClient.m from [348fd1db0b] to [00b0c5338a].
︙ | ︙ | |||
214 215 216 217 218 219 220 221 222 223 224 225 226 227 | if (statusCode != 200) { block([MTXSyncFailedException exceptionWithStatusCode: statusCode response: response client: self]); return; } block(nil); }]; objc_autoreleasePoolPop(pool); } | > > > > > > > > > > > > > > | 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | if (statusCode != 200) { block([MTXSyncFailedException exceptionWithStatusCode: statusCode response: response client: self]); return; } OFString *nextBatch = response[@"next_batch"]; if (![nextBatch isKindOfClass: OFString.class]) { block([OFInvalidServerReplyException exception]); return; } @try { [_storage setNextBatch: nextBatch forDeviceID: _deviceID]; } @catch (id e) { block(e); return; } block(nil); }]; objc_autoreleasePoolPop(pool); } |
︙ | ︙ |
Modified src/MTXSQLite3Storage.m from [a4e0f0eb93] to [1f1db09c0f].
︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #import <ObjSQLite3/ObjSQLite3.h> #import "MTXSQLite3Storage.h" @implementation MTXSQLite3Storage { SL3Connection *_conn; } + (instancetype)storageWithPath: (OFString *)path { return [[[self alloc] initWithPath: path] autorelease]; } - (instancetype)initWithPath: (OFString *)path { self = [super init]; @try { _conn = [[SL3Connection alloc] initWithPath: path]; } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_conn release]; [super dealloc]; } @end | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #import <ObjSQLite3/ObjSQLite3.h> #import "MTXSQLite3Storage.h" @implementation MTXSQLite3Storage { SL3Connection *_conn; SL3PreparedStatement *_nextBatchSetStatement, *_nextBatchGetStatement; } + (instancetype)storageWithPath: (OFString *)path { return [[[self alloc] initWithPath: path] autorelease]; } - (instancetype)initWithPath: (OFString *)path { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); _conn = [[SL3Connection alloc] initWithPath: path]; [self createTables]; _nextBatchSetStatement = [[_conn prepareStatement: @"INSERT OR REPLACE INTO next_batch (\n" @" device_id, next_batch\n" @") VALUES (\n" @" $device_id, $next_batch\n" @")"] retain]; _nextBatchGetStatement = [[_conn prepareStatement: @"SELECT next_batch FROM next_batch\n" @"WHERE device_id=$device_id"] retain]; objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_nextBatchSetStatement release]; [_nextBatchGetStatement release]; [_conn release]; [super dealloc]; } - (void)createTables { [_conn executeStatement: @"CREATE TABLE IF NOT EXISTS next_batch (\n" @" device_id TEXT PRIMARY KEY,\n" @" next_batch TEXT\n" @")"]; } - (void)setNextBatch: (OFString *)nextBatch forDeviceID: (OFString *)deviceID { void *pool = objc_autoreleasePoolPush(); [_nextBatchSetStatement reset]; [_nextBatchSetStatement bindWithDictionary: @{ @"$device_id": deviceID, @"$next_batch": nextBatch }]; [_nextBatchSetStatement step]; objc_autoreleasePoolPop(pool); } - (OFString *)nextBatchForDeviceID: (OFString *)deviceID { void *pool = objc_autoreleasePoolPush(); [_nextBatchGetStatement reset]; [_nextBatchGetStatement bindWithDictionary: @{ @"$device_id": deviceID }]; if (![_nextBatchGetStatement step]) return nil; OFString *nextBatch = [[_nextBatchGetStatement rowDictionary][@"next_batch"] retain]; objc_autoreleasePoolPop(pool); return [nextBatch autorelease]; } @end |
Modified src/MTXStorage.h from [68a1513741] to [9ebb54087f].
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 | OF_ASSUME_NONNULL_BEGIN /** * @brief A protocol for a storage to be used by @ref MTXClient. */ @protocol MTXStorage <OFObject> @end OF_ASSUME_NONNULL_END | > > > > > > > > > > > > > > > > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | OF_ASSUME_NONNULL_BEGIN /** * @brief A protocol for a storage to be used by @ref MTXClient. */ @protocol MTXStorage <OFObject> /** * @brief Stores the next batch for the specified device. * * @param nextBatch The next batch for the device * @param deviceID The device for which to store the next batch */ - (void)setNextBatch: (OFString *)nextBatch forDeviceID: (OFString *)deviceID; /** * @brief Returns the next batch for the specified device. * * @param deviceID The device ID for which to return the next batch * @return The next batch for the specified device, or `nil` if none is * available. */ - (nullable OFString *)nextBatchForDeviceID: (OFString *)deviceID; @end OF_ASSUME_NONNULL_END |