[client] Parse new api data format for ls

This commit is contained in:
Abhishek Shroff
2024-11-02 00:31:47 +05:30
parent 55497ea232
commit 5c796a39e5
10 changed files with 389 additions and 338 deletions

View File

@@ -26,7 +26,7 @@ class DownloadManager extends StateNotifier<DownloadManagerState> {
Future<void> downloadResource(Resource r) async {
int id = account.getPersisted<int>(_keyDownloadTaskId) ?? 1;
await account.persist(_keyDownloadTaskId, id + 1);
final task = DownloadTask(id: id, resourceId: r.id, resourceName: r.name, expectedSize: r.size);
final task = DownloadTask(id: id, resourceId: r.id, resourceName: r.name, expectedSize: r.contentSize);
RemoveListener? remove;
remove = task._statusNotifier.addListener((status) {
@@ -53,7 +53,7 @@ class DownloadManager extends StateNotifier<DownloadManagerState> {
}
final sink = output.openWrite();
final length = response.contentLength ?? r.size;
final length = response.contentLength ?? r.contentSize;
int received = 0;
final stream = response.stream.map((s) {
received += s.length;

View File

@@ -95,7 +95,7 @@ class ResourceCopyAction extends PhylumAction with JsonApiAction, ResourceCreate
@override
FutureOr<void> processResponse(PhylumAccount account, ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceResponse(response.data);
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}

View File

@@ -68,7 +68,7 @@ class ResourceMkdirAction extends PhylumAction with JsonApiAction, ResourceCreat
@override
FutureOr<void> processResponse(PhylumAccount account, ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceResponse(response.data);
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}

View File

@@ -105,7 +105,7 @@ class ResourceMoveAction extends PhylumAction with JsonApiAction {
@override
FutureOr<void> processResponse(PhylumAccount account, ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceResponse(response.data);
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}

View File

@@ -104,7 +104,7 @@ class ResourceUploadAction extends PhylumAction with FileUploadApiAction, Resour
@override
FutureOr<void> processResponse(PhylumAccount account, ApiResponse response) async {
if (response is PhylumApiSuccessResponse) {
await account.resourceRepository.processResourceResponse(response.data);
await account.resourceRepository.processResourceUpdateResponse(resourceId, response.data);
}
}

View File

@@ -16,7 +16,7 @@ class AppDatabase extends _$AppDatabase {
AppDatabase({required this.id}) : super(_openConnection(id));
@override
int get schemaVersion => 9;
int get schemaVersion => 10;
@override
MigrationStrategy get migration => MigrationStrategy(

View File

@@ -35,28 +35,18 @@ class $ResourcesTable extends Resources
requiredDuringInsert: true,
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("dir" IN (0, 1))'));
static const VerificationMeta _createdMeta =
const VerificationMeta('created');
@override
late final GeneratedColumn<DateTime> created = GeneratedColumn<DateTime>(
'created', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _modifiedMeta =
const VerificationMeta('modified');
@override
late final GeneratedColumn<DateTime> modified = GeneratedColumn<DateTime>(
'modified', aliasedName, false,
type: DriftSqlType.dateTime, requiredDuringInsert: true);
static const VerificationMeta _sizeMeta = const VerificationMeta('size');
@override
late final GeneratedColumn<int> size = GeneratedColumn<int>(
'size', aliasedName, false,
type: DriftSqlType.int, requiredDuringInsert: true);
static const VerificationMeta _sha256Meta = const VerificationMeta('sha256');
@override
late final GeneratedColumn<String> sha256 = GeneratedColumn<String>(
'sha256', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
static const VerificationMeta _contentTypeMeta =
const VerificationMeta('contentType');
@override
late final GeneratedColumn<String> contentType = GeneratedColumn<String>(
'content_type', aliasedName, false,
type: DriftSqlType.string, requiredDuringInsert: true);
'modified', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _deletedMeta =
const VerificationMeta('deleted');
@override
@@ -67,24 +57,36 @@ class $ResourcesTable extends Resources
defaultConstraints:
GeneratedColumn.constraintIsAlways('CHECK ("deleted" IN (0, 1))'),
defaultValue: const Constant(false));
static const VerificationMeta _lastFetchMeta =
const VerificationMeta('lastFetch');
static const VerificationMeta _contentSizeMeta =
const VerificationMeta('contentSize');
@override
late final GeneratedColumn<DateTime> lastFetch = GeneratedColumn<DateTime>(
'last_fetch', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
late final GeneratedColumn<int> contentSize = GeneratedColumn<int>(
'content_size', aliasedName, false,
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultValue: const Constant(0));
static const VerificationMeta _contentSha256Meta =
const VerificationMeta('contentSha256');
@override
late final GeneratedColumn<String> contentSha256 = GeneratedColumn<String>(
'content_sha256', aliasedName, false,
type: DriftSqlType.string,
requiredDuringInsert: false,
defaultValue: const Constant(""));
static const VerificationMeta _contentTypeMeta =
const VerificationMeta('contentType');
@override
late final GeneratedColumn<String> contentType = GeneratedColumn<String>(
'content_type', aliasedName, false,
type: DriftSqlType.string,
requiredDuringInsert: false,
defaultValue: const Constant(""));
static const VerificationMeta _permissionsMeta =
const VerificationMeta('permissions');
@override
late final GeneratedColumn<String> permissions = GeneratedColumn<String>(
'permissions', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
static const VerificationMeta _inheritedMeta =
const VerificationMeta('inherited');
@override
late final GeneratedColumn<String> inherited = GeneratedColumn<String>(
'inherited', aliasedName, true,
type: DriftSqlType.string, requiredDuringInsert: false);
static const VerificationMeta _publinksMeta =
const VerificationMeta('publinks');
@override
@@ -93,21 +95,27 @@ class $ResourcesTable extends Resources
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultValue: const Constant(0));
static const VerificationMeta _lastRefreshMeta =
const VerificationMeta('lastRefresh');
@override
late final GeneratedColumn<DateTime> lastRefresh = GeneratedColumn<DateTime>(
'last_refresh', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false);
@override
List<GeneratedColumn> get $columns => [
id,
parent,
name,
dir,
created,
modified,
size,
sha256,
contentType,
deleted,
lastFetch,
contentSize,
contentSha256,
contentType,
permissions,
inherited,
publinks
publinks,
lastRefresh
];
@override
String get aliasedName => _alias ?? actualTableName;
@@ -140,39 +148,35 @@ class $ResourcesTable extends Resources
} else if (isInserting) {
context.missing(_dirMeta);
}
if (data.containsKey('created')) {
context.handle(_createdMeta,
created.isAcceptableOrUnknown(data['created']!, _createdMeta));
}
if (data.containsKey('modified')) {
context.handle(_modifiedMeta,
modified.isAcceptableOrUnknown(data['modified']!, _modifiedMeta));
} else if (isInserting) {
context.missing(_modifiedMeta);
}
if (data.containsKey('size')) {
if (data.containsKey('deleted')) {
context.handle(_deletedMeta,
deleted.isAcceptableOrUnknown(data['deleted']!, _deletedMeta));
}
if (data.containsKey('content_size')) {
context.handle(
_sizeMeta, size.isAcceptableOrUnknown(data['size']!, _sizeMeta));
} else if (isInserting) {
context.missing(_sizeMeta);
_contentSizeMeta,
contentSize.isAcceptableOrUnknown(
data['content_size']!, _contentSizeMeta));
}
if (data.containsKey('sha256')) {
context.handle(_sha256Meta,
sha256.isAcceptableOrUnknown(data['sha256']!, _sha256Meta));
} else if (isInserting) {
context.missing(_sha256Meta);
if (data.containsKey('content_sha256')) {
context.handle(
_contentSha256Meta,
contentSha256.isAcceptableOrUnknown(
data['content_sha256']!, _contentSha256Meta));
}
if (data.containsKey('content_type')) {
context.handle(
_contentTypeMeta,
contentType.isAcceptableOrUnknown(
data['content_type']!, _contentTypeMeta));
} else if (isInserting) {
context.missing(_contentTypeMeta);
}
if (data.containsKey('deleted')) {
context.handle(_deletedMeta,
deleted.isAcceptableOrUnknown(data['deleted']!, _deletedMeta));
}
if (data.containsKey('last_fetch')) {
context.handle(_lastFetchMeta,
lastFetch.isAcceptableOrUnknown(data['last_fetch']!, _lastFetchMeta));
}
if (data.containsKey('permissions')) {
context.handle(
@@ -180,14 +184,16 @@ class $ResourcesTable extends Resources
permissions.isAcceptableOrUnknown(
data['permissions']!, _permissionsMeta));
}
if (data.containsKey('inherited')) {
context.handle(_inheritedMeta,
inherited.isAcceptableOrUnknown(data['inherited']!, _inheritedMeta));
}
if (data.containsKey('publinks')) {
context.handle(_publinksMeta,
publinks.isAcceptableOrUnknown(data['publinks']!, _publinksMeta));
}
if (data.containsKey('last_refresh')) {
context.handle(
_lastRefreshMeta,
lastRefresh.isAcceptableOrUnknown(
data['last_refresh']!, _lastRefreshMeta));
}
return context;
}
@@ -205,24 +211,24 @@ class $ResourcesTable extends Resources
.read(DriftSqlType.string, data['${effectivePrefix}name'])!,
dir: attachedDatabase.typeMapping
.read(DriftSqlType.bool, data['${effectivePrefix}dir'])!,
created: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}created']),
modified: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}modified'])!,
size: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}size'])!,
sha256: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}sha256'])!,
contentType: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}content_type'])!,
.read(DriftSqlType.dateTime, data['${effectivePrefix}modified']),
deleted: attachedDatabase.typeMapping
.read(DriftSqlType.bool, data['${effectivePrefix}deleted'])!,
lastFetch: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}last_fetch']),
contentSize: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}content_size'])!,
contentSha256: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}content_sha256'])!,
contentType: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}content_type'])!,
permissions: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}permissions']),
inherited: attachedDatabase.typeMapping
.read(DriftSqlType.string, data['${effectivePrefix}inherited']),
publinks: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}publinks'])!,
lastRefresh: attachedDatabase.typeMapping
.read(DriftSqlType.dateTime, data['${effectivePrefix}last_refresh']),
);
}
@@ -237,29 +243,29 @@ class Resource extends DataClass implements Insertable<Resource> {
final String? parent;
final String name;
final bool dir;
final DateTime modified;
final int size;
final String sha256;
final String contentType;
final DateTime? created;
final DateTime? modified;
final bool deleted;
final DateTime? lastFetch;
final int contentSize;
final String contentSha256;
final String contentType;
final String? permissions;
final String? inherited;
final int publinks;
final DateTime? lastRefresh;
const Resource(
{required this.id,
this.parent,
required this.name,
required this.dir,
required this.modified,
required this.size,
required this.sha256,
required this.contentType,
this.created,
this.modified,
required this.deleted,
this.lastFetch,
required this.contentSize,
required this.contentSha256,
required this.contentType,
this.permissions,
this.inherited,
required this.publinks});
required this.publinks,
this.lastRefresh});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{};
@@ -269,21 +275,23 @@ class Resource extends DataClass implements Insertable<Resource> {
}
map['name'] = Variable<String>(name);
map['dir'] = Variable<bool>(dir);
map['modified'] = Variable<DateTime>(modified);
map['size'] = Variable<int>(size);
map['sha256'] = Variable<String>(sha256);
map['content_type'] = Variable<String>(contentType);
map['deleted'] = Variable<bool>(deleted);
if (!nullToAbsent || lastFetch != null) {
map['last_fetch'] = Variable<DateTime>(lastFetch);
if (!nullToAbsent || created != null) {
map['created'] = Variable<DateTime>(created);
}
if (!nullToAbsent || modified != null) {
map['modified'] = Variable<DateTime>(modified);
}
map['deleted'] = Variable<bool>(deleted);
map['content_size'] = Variable<int>(contentSize);
map['content_sha256'] = Variable<String>(contentSha256);
map['content_type'] = Variable<String>(contentType);
if (!nullToAbsent || permissions != null) {
map['permissions'] = Variable<String>(permissions);
}
if (!nullToAbsent || inherited != null) {
map['inherited'] = Variable<String>(inherited);
}
map['publinks'] = Variable<int>(publinks);
if (!nullToAbsent || lastRefresh != null) {
map['last_refresh'] = Variable<DateTime>(lastRefresh);
}
return map;
}
@@ -294,21 +302,23 @@ class Resource extends DataClass implements Insertable<Resource> {
parent == null && nullToAbsent ? const Value.absent() : Value(parent),
name: Value(name),
dir: Value(dir),
modified: Value(modified),
size: Value(size),
sha256: Value(sha256),
contentType: Value(contentType),
deleted: Value(deleted),
lastFetch: lastFetch == null && nullToAbsent
created: created == null && nullToAbsent
? const Value.absent()
: Value(lastFetch),
: Value(created),
modified: modified == null && nullToAbsent
? const Value.absent()
: Value(modified),
deleted: Value(deleted),
contentSize: Value(contentSize),
contentSha256: Value(contentSha256),
contentType: Value(contentType),
permissions: permissions == null && nullToAbsent
? const Value.absent()
: Value(permissions),
inherited: inherited == null && nullToAbsent
? const Value.absent()
: Value(inherited),
publinks: Value(publinks),
lastRefresh: lastRefresh == null && nullToAbsent
? const Value.absent()
: Value(lastRefresh),
);
}
@@ -320,15 +330,15 @@ class Resource extends DataClass implements Insertable<Resource> {
parent: serializer.fromJson<String?>(json['parent']),
name: serializer.fromJson<String>(json['name']),
dir: serializer.fromJson<bool>(json['dir']),
modified: serializer.fromJson<DateTime>(json['modified']),
size: serializer.fromJson<int>(json['size']),
sha256: serializer.fromJson<String>(json['sha256']),
contentType: serializer.fromJson<String>(json['contentType']),
created: serializer.fromJson<DateTime?>(json['created']),
modified: serializer.fromJson<DateTime?>(json['modified']),
deleted: serializer.fromJson<bool>(json['deleted']),
lastFetch: serializer.fromJson<DateTime?>(json['lastFetch']),
contentSize: serializer.fromJson<int>(json['contentSize']),
contentSha256: serializer.fromJson<String>(json['contentSha256']),
contentType: serializer.fromJson<String>(json['contentType']),
permissions: serializer.fromJson<String?>(json['permissions']),
inherited: serializer.fromJson<String?>(json['inherited']),
publinks: serializer.fromJson<int>(json['publinks']),
lastRefresh: serializer.fromJson<DateTime?>(json['lastRefresh']),
);
}
@override
@@ -339,15 +349,15 @@ class Resource extends DataClass implements Insertable<Resource> {
'parent': serializer.toJson<String?>(parent),
'name': serializer.toJson<String>(name),
'dir': serializer.toJson<bool>(dir),
'modified': serializer.toJson<DateTime>(modified),
'size': serializer.toJson<int>(size),
'sha256': serializer.toJson<String>(sha256),
'contentType': serializer.toJson<String>(contentType),
'created': serializer.toJson<DateTime?>(created),
'modified': serializer.toJson<DateTime?>(modified),
'deleted': serializer.toJson<bool>(deleted),
'lastFetch': serializer.toJson<DateTime?>(lastFetch),
'contentSize': serializer.toJson<int>(contentSize),
'contentSha256': serializer.toJson<String>(contentSha256),
'contentType': serializer.toJson<String>(contentType),
'permissions': serializer.toJson<String?>(permissions),
'inherited': serializer.toJson<String?>(inherited),
'publinks': serializer.toJson<int>(publinks),
'lastRefresh': serializer.toJson<DateTime?>(lastRefresh),
};
}
@@ -356,29 +366,29 @@ class Resource extends DataClass implements Insertable<Resource> {
Value<String?> parent = const Value.absent(),
String? name,
bool? dir,
DateTime? modified,
int? size,
String? sha256,
String? contentType,
Value<DateTime?> created = const Value.absent(),
Value<DateTime?> modified = const Value.absent(),
bool? deleted,
Value<DateTime?> lastFetch = const Value.absent(),
int? contentSize,
String? contentSha256,
String? contentType,
Value<String?> permissions = const Value.absent(),
Value<String?> inherited = const Value.absent(),
int? publinks}) =>
int? publinks,
Value<DateTime?> lastRefresh = const Value.absent()}) =>
Resource(
id: id ?? this.id,
parent: parent.present ? parent.value : this.parent,
name: name ?? this.name,
dir: dir ?? this.dir,
modified: modified ?? this.modified,
size: size ?? this.size,
sha256: sha256 ?? this.sha256,
contentType: contentType ?? this.contentType,
created: created.present ? created.value : this.created,
modified: modified.present ? modified.value : this.modified,
deleted: deleted ?? this.deleted,
lastFetch: lastFetch.present ? lastFetch.value : this.lastFetch,
contentSize: contentSize ?? this.contentSize,
contentSha256: contentSha256 ?? this.contentSha256,
contentType: contentType ?? this.contentType,
permissions: permissions.present ? permissions.value : this.permissions,
inherited: inherited.present ? inherited.value : this.inherited,
publinks: publinks ?? this.publinks,
lastRefresh: lastRefresh.present ? lastRefresh.value : this.lastRefresh,
);
Resource copyWithCompanion(ResourcesCompanion data) {
return Resource(
@@ -386,17 +396,21 @@ class Resource extends DataClass implements Insertable<Resource> {
parent: data.parent.present ? data.parent.value : this.parent,
name: data.name.present ? data.name.value : this.name,
dir: data.dir.present ? data.dir.value : this.dir,
created: data.created.present ? data.created.value : this.created,
modified: data.modified.present ? data.modified.value : this.modified,
size: data.size.present ? data.size.value : this.size,
sha256: data.sha256.present ? data.sha256.value : this.sha256,
deleted: data.deleted.present ? data.deleted.value : this.deleted,
contentSize:
data.contentSize.present ? data.contentSize.value : this.contentSize,
contentSha256: data.contentSha256.present
? data.contentSha256.value
: this.contentSha256,
contentType:
data.contentType.present ? data.contentType.value : this.contentType,
deleted: data.deleted.present ? data.deleted.value : this.deleted,
lastFetch: data.lastFetch.present ? data.lastFetch.value : this.lastFetch,
permissions:
data.permissions.present ? data.permissions.value : this.permissions,
inherited: data.inherited.present ? data.inherited.value : this.inherited,
publinks: data.publinks.present ? data.publinks.value : this.publinks,
lastRefresh:
data.lastRefresh.present ? data.lastRefresh.value : this.lastRefresh,
);
}
@@ -407,22 +421,34 @@ class Resource extends DataClass implements Insertable<Resource> {
..write('parent: $parent, ')
..write('name: $name, ')
..write('dir: $dir, ')
..write('created: $created, ')
..write('modified: $modified, ')
..write('size: $size, ')
..write('sha256: $sha256, ')
..write('contentType: $contentType, ')
..write('deleted: $deleted, ')
..write('lastFetch: $lastFetch, ')
..write('contentSize: $contentSize, ')
..write('contentSha256: $contentSha256, ')
..write('contentType: $contentType, ')
..write('permissions: $permissions, ')
..write('inherited: $inherited, ')
..write('publinks: $publinks')
..write('publinks: $publinks, ')
..write('lastRefresh: $lastRefresh')
..write(')'))
.toString();
}
@override
int get hashCode => Object.hash(id, parent, name, dir, modified, size, sha256,
contentType, deleted, lastFetch, permissions, inherited, publinks);
int get hashCode => Object.hash(
id,
parent,
name,
dir,
created,
modified,
deleted,
contentSize,
contentSha256,
contentType,
permissions,
publinks,
lastRefresh);
@override
bool operator ==(Object other) =>
identical(this, other) ||
@@ -431,15 +457,15 @@ class Resource extends DataClass implements Insertable<Resource> {
other.parent == this.parent &&
other.name == this.name &&
other.dir == this.dir &&
other.created == this.created &&
other.modified == this.modified &&
other.size == this.size &&
other.sha256 == this.sha256 &&
other.contentType == this.contentType &&
other.deleted == this.deleted &&
other.lastFetch == this.lastFetch &&
other.contentSize == this.contentSize &&
other.contentSha256 == this.contentSha256 &&
other.contentType == this.contentType &&
other.permissions == this.permissions &&
other.inherited == this.inherited &&
other.publinks == this.publinks);
other.publinks == this.publinks &&
other.lastRefresh == this.lastRefresh);
}
class ResourcesCompanion extends UpdateCompanion<Resource> {
@@ -447,30 +473,30 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
final Value<String?> parent;
final Value<String> name;
final Value<bool> dir;
final Value<DateTime> modified;
final Value<int> size;
final Value<String> sha256;
final Value<String> contentType;
final Value<DateTime?> created;
final Value<DateTime?> modified;
final Value<bool> deleted;
final Value<DateTime?> lastFetch;
final Value<int> contentSize;
final Value<String> contentSha256;
final Value<String> contentType;
final Value<String?> permissions;
final Value<String?> inherited;
final Value<int> publinks;
final Value<DateTime?> lastRefresh;
final Value<int> rowid;
const ResourcesCompanion({
this.id = const Value.absent(),
this.parent = const Value.absent(),
this.name = const Value.absent(),
this.dir = const Value.absent(),
this.created = const Value.absent(),
this.modified = const Value.absent(),
this.size = const Value.absent(),
this.sha256 = const Value.absent(),
this.contentType = const Value.absent(),
this.deleted = const Value.absent(),
this.lastFetch = const Value.absent(),
this.contentSize = const Value.absent(),
this.contentSha256 = const Value.absent(),
this.contentType = const Value.absent(),
this.permissions = const Value.absent(),
this.inherited = const Value.absent(),
this.publinks = const Value.absent(),
this.lastRefresh = const Value.absent(),
this.rowid = const Value.absent(),
});
ResourcesCompanion.insert({
@@ -478,37 +504,33 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
this.parent = const Value.absent(),
required String name,
required bool dir,
required DateTime modified,
required int size,
required String sha256,
required String contentType,
this.created = const Value.absent(),
this.modified = const Value.absent(),
this.deleted = const Value.absent(),
this.lastFetch = const Value.absent(),
this.contentSize = const Value.absent(),
this.contentSha256 = const Value.absent(),
this.contentType = const Value.absent(),
this.permissions = const Value.absent(),
this.inherited = const Value.absent(),
this.publinks = const Value.absent(),
this.lastRefresh = const Value.absent(),
this.rowid = const Value.absent(),
}) : id = Value(id),
name = Value(name),
dir = Value(dir),
modified = Value(modified),
size = Value(size),
sha256 = Value(sha256),
contentType = Value(contentType);
dir = Value(dir);
static Insertable<Resource> custom({
Expression<String>? id,
Expression<String>? parent,
Expression<String>? name,
Expression<bool>? dir,
Expression<DateTime>? created,
Expression<DateTime>? modified,
Expression<int>? size,
Expression<String>? sha256,
Expression<String>? contentType,
Expression<bool>? deleted,
Expression<DateTime>? lastFetch,
Expression<int>? contentSize,
Expression<String>? contentSha256,
Expression<String>? contentType,
Expression<String>? permissions,
Expression<String>? inherited,
Expression<int>? publinks,
Expression<DateTime>? lastRefresh,
Expression<int>? rowid,
}) {
return RawValuesInsertable({
@@ -516,15 +538,15 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
if (parent != null) 'parent': parent,
if (name != null) 'name': name,
if (dir != null) 'dir': dir,
if (created != null) 'created': created,
if (modified != null) 'modified': modified,
if (size != null) 'size': size,
if (sha256 != null) 'sha256': sha256,
if (contentType != null) 'content_type': contentType,
if (deleted != null) 'deleted': deleted,
if (lastFetch != null) 'last_fetch': lastFetch,
if (contentSize != null) 'content_size': contentSize,
if (contentSha256 != null) 'content_sha256': contentSha256,
if (contentType != null) 'content_type': contentType,
if (permissions != null) 'permissions': permissions,
if (inherited != null) 'inherited': inherited,
if (publinks != null) 'publinks': publinks,
if (lastRefresh != null) 'last_refresh': lastRefresh,
if (rowid != null) 'rowid': rowid,
});
}
@@ -534,30 +556,30 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
Value<String?>? parent,
Value<String>? name,
Value<bool>? dir,
Value<DateTime>? modified,
Value<int>? size,
Value<String>? sha256,
Value<String>? contentType,
Value<DateTime?>? created,
Value<DateTime?>? modified,
Value<bool>? deleted,
Value<DateTime?>? lastFetch,
Value<int>? contentSize,
Value<String>? contentSha256,
Value<String>? contentType,
Value<String?>? permissions,
Value<String?>? inherited,
Value<int>? publinks,
Value<DateTime?>? lastRefresh,
Value<int>? rowid}) {
return ResourcesCompanion(
id: id ?? this.id,
parent: parent ?? this.parent,
name: name ?? this.name,
dir: dir ?? this.dir,
created: created ?? this.created,
modified: modified ?? this.modified,
size: size ?? this.size,
sha256: sha256 ?? this.sha256,
contentType: contentType ?? this.contentType,
deleted: deleted ?? this.deleted,
lastFetch: lastFetch ?? this.lastFetch,
contentSize: contentSize ?? this.contentSize,
contentSha256: contentSha256 ?? this.contentSha256,
contentType: contentType ?? this.contentType,
permissions: permissions ?? this.permissions,
inherited: inherited ?? this.inherited,
publinks: publinks ?? this.publinks,
lastRefresh: lastRefresh ?? this.lastRefresh,
rowid: rowid ?? this.rowid,
);
}
@@ -577,33 +599,33 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
if (dir.present) {
map['dir'] = Variable<bool>(dir.value);
}
if (created.present) {
map['created'] = Variable<DateTime>(created.value);
}
if (modified.present) {
map['modified'] = Variable<DateTime>(modified.value);
}
if (size.present) {
map['size'] = Variable<int>(size.value);
}
if (sha256.present) {
map['sha256'] = Variable<String>(sha256.value);
}
if (contentType.present) {
map['content_type'] = Variable<String>(contentType.value);
}
if (deleted.present) {
map['deleted'] = Variable<bool>(deleted.value);
}
if (lastFetch.present) {
map['last_fetch'] = Variable<DateTime>(lastFetch.value);
if (contentSize.present) {
map['content_size'] = Variable<int>(contentSize.value);
}
if (contentSha256.present) {
map['content_sha256'] = Variable<String>(contentSha256.value);
}
if (contentType.present) {
map['content_type'] = Variable<String>(contentType.value);
}
if (permissions.present) {
map['permissions'] = Variable<String>(permissions.value);
}
if (inherited.present) {
map['inherited'] = Variable<String>(inherited.value);
}
if (publinks.present) {
map['publinks'] = Variable<int>(publinks.value);
}
if (lastRefresh.present) {
map['last_refresh'] = Variable<DateTime>(lastRefresh.value);
}
if (rowid.present) {
map['rowid'] = Variable<int>(rowid.value);
}
@@ -617,15 +639,15 @@ class ResourcesCompanion extends UpdateCompanion<Resource> {
..write('parent: $parent, ')
..write('name: $name, ')
..write('dir: $dir, ')
..write('created: $created, ')
..write('modified: $modified, ')
..write('size: $size, ')
..write('sha256: $sha256, ')
..write('contentType: $contentType, ')
..write('deleted: $deleted, ')
..write('lastFetch: $lastFetch, ')
..write('contentSize: $contentSize, ')
..write('contentSha256: $contentSha256, ')
..write('contentType: $contentType, ')
..write('permissions: $permissions, ')
..write('inherited: $inherited, ')
..write('publinks: $publinks, ')
..write('lastRefresh: $lastRefresh, ')
..write('rowid: $rowid')
..write(')'))
.toString();
@@ -648,15 +670,15 @@ typedef $$ResourcesTableCreateCompanionBuilder = ResourcesCompanion Function({
Value<String?> parent,
required String name,
required bool dir,
required DateTime modified,
required int size,
required String sha256,
required String contentType,
Value<DateTime?> created,
Value<DateTime?> modified,
Value<bool> deleted,
Value<DateTime?> lastFetch,
Value<int> contentSize,
Value<String> contentSha256,
Value<String> contentType,
Value<String?> permissions,
Value<String?> inherited,
Value<int> publinks,
Value<DateTime?> lastRefresh,
Value<int> rowid,
});
typedef $$ResourcesTableUpdateCompanionBuilder = ResourcesCompanion Function({
@@ -664,15 +686,15 @@ typedef $$ResourcesTableUpdateCompanionBuilder = ResourcesCompanion Function({
Value<String?> parent,
Value<String> name,
Value<bool> dir,
Value<DateTime> modified,
Value<int> size,
Value<String> sha256,
Value<String> contentType,
Value<DateTime?> created,
Value<DateTime?> modified,
Value<bool> deleted,
Value<DateTime?> lastFetch,
Value<int> contentSize,
Value<String> contentSha256,
Value<String> contentType,
Value<String?> permissions,
Value<String?> inherited,
Value<int> publinks,
Value<DateTime?> lastRefresh,
Value<int> rowid,
});
@@ -712,33 +734,33 @@ class $$ResourcesTableFilterComposer
ColumnFilters<bool> get dir => $composableBuilder(
column: $table.dir, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get created => $composableBuilder(
column: $table.created, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get modified => $composableBuilder(
column: $table.modified, builder: (column) => ColumnFilters(column));
ColumnFilters<int> get size => $composableBuilder(
column: $table.size, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get sha256 => $composableBuilder(
column: $table.sha256, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => ColumnFilters(column));
ColumnFilters<bool> get deleted => $composableBuilder(
column: $table.deleted, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastFetch => $composableBuilder(
column: $table.lastFetch, builder: (column) => ColumnFilters(column));
ColumnFilters<int> get contentSize => $composableBuilder(
column: $table.contentSize, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get contentSha256 => $composableBuilder(
column: $table.contentSha256, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get permissions => $composableBuilder(
column: $table.permissions, builder: (column) => ColumnFilters(column));
ColumnFilters<String> get inherited => $composableBuilder(
column: $table.inherited, builder: (column) => ColumnFilters(column));
ColumnFilters<int> get publinks => $composableBuilder(
column: $table.publinks, builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastRefresh => $composableBuilder(
column: $table.lastRefresh, builder: (column) => ColumnFilters(column));
$$ResourcesTableFilterComposer get parent {
final $$ResourcesTableFilterComposer composer = $composerBuilder(
composer: this,
@@ -778,33 +800,34 @@ class $$ResourcesTableOrderingComposer
ColumnOrderings<bool> get dir => $composableBuilder(
column: $table.dir, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get created => $composableBuilder(
column: $table.created, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get modified => $composableBuilder(
column: $table.modified, builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get size => $composableBuilder(
column: $table.size, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get sha256 => $composableBuilder(
column: $table.sha256, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => ColumnOrderings(column));
ColumnOrderings<bool> get deleted => $composableBuilder(
column: $table.deleted, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastFetch => $composableBuilder(
column: $table.lastFetch, builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get contentSize => $composableBuilder(
column: $table.contentSize, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get contentSha256 => $composableBuilder(
column: $table.contentSha256,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get permissions => $composableBuilder(
column: $table.permissions, builder: (column) => ColumnOrderings(column));
ColumnOrderings<String> get inherited => $composableBuilder(
column: $table.inherited, builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get publinks => $composableBuilder(
column: $table.publinks, builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastRefresh => $composableBuilder(
column: $table.lastRefresh, builder: (column) => ColumnOrderings(column));
$$ResourcesTableOrderingComposer get parent {
final $$ResourcesTableOrderingComposer composer = $composerBuilder(
composer: this,
@@ -844,33 +867,33 @@ class $$ResourcesTableAnnotationComposer
GeneratedColumn<bool> get dir =>
$composableBuilder(column: $table.dir, builder: (column) => column);
GeneratedColumn<DateTime> get created =>
$composableBuilder(column: $table.created, builder: (column) => column);
GeneratedColumn<DateTime> get modified =>
$composableBuilder(column: $table.modified, builder: (column) => column);
GeneratedColumn<int> get size =>
$composableBuilder(column: $table.size, builder: (column) => column);
GeneratedColumn<String> get sha256 =>
$composableBuilder(column: $table.sha256, builder: (column) => column);
GeneratedColumn<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => column);
GeneratedColumn<bool> get deleted =>
$composableBuilder(column: $table.deleted, builder: (column) => column);
GeneratedColumn<DateTime> get lastFetch =>
$composableBuilder(column: $table.lastFetch, builder: (column) => column);
GeneratedColumn<int> get contentSize => $composableBuilder(
column: $table.contentSize, builder: (column) => column);
GeneratedColumn<String> get contentSha256 => $composableBuilder(
column: $table.contentSha256, builder: (column) => column);
GeneratedColumn<String> get contentType => $composableBuilder(
column: $table.contentType, builder: (column) => column);
GeneratedColumn<String> get permissions => $composableBuilder(
column: $table.permissions, builder: (column) => column);
GeneratedColumn<String> get inherited =>
$composableBuilder(column: $table.inherited, builder: (column) => column);
GeneratedColumn<int> get publinks =>
$composableBuilder(column: $table.publinks, builder: (column) => column);
GeneratedColumn<DateTime> get lastRefresh => $composableBuilder(
column: $table.lastRefresh, builder: (column) => column);
$$ResourcesTableAnnotationComposer get parent {
final $$ResourcesTableAnnotationComposer composer = $composerBuilder(
composer: this,
@@ -919,15 +942,15 @@ class $$ResourcesTableTableManager extends RootTableManager<
Value<String?> parent = const Value.absent(),
Value<String> name = const Value.absent(),
Value<bool> dir = const Value.absent(),
Value<DateTime> modified = const Value.absent(),
Value<int> size = const Value.absent(),
Value<String> sha256 = const Value.absent(),
Value<String> contentType = const Value.absent(),
Value<DateTime?> created = const Value.absent(),
Value<DateTime?> modified = const Value.absent(),
Value<bool> deleted = const Value.absent(),
Value<DateTime?> lastFetch = const Value.absent(),
Value<int> contentSize = const Value.absent(),
Value<String> contentSha256 = const Value.absent(),
Value<String> contentType = const Value.absent(),
Value<String?> permissions = const Value.absent(),
Value<String?> inherited = const Value.absent(),
Value<int> publinks = const Value.absent(),
Value<DateTime?> lastRefresh = const Value.absent(),
Value<int> rowid = const Value.absent(),
}) =>
ResourcesCompanion(
@@ -935,15 +958,15 @@ class $$ResourcesTableTableManager extends RootTableManager<
parent: parent,
name: name,
dir: dir,
created: created,
modified: modified,
size: size,
sha256: sha256,
contentType: contentType,
deleted: deleted,
lastFetch: lastFetch,
contentSize: contentSize,
contentSha256: contentSha256,
contentType: contentType,
permissions: permissions,
inherited: inherited,
publinks: publinks,
lastRefresh: lastRefresh,
rowid: rowid,
),
createCompanionCallback: ({
@@ -951,15 +974,15 @@ class $$ResourcesTableTableManager extends RootTableManager<
Value<String?> parent = const Value.absent(),
required String name,
required bool dir,
required DateTime modified,
required int size,
required String sha256,
required String contentType,
Value<DateTime?> created = const Value.absent(),
Value<DateTime?> modified = const Value.absent(),
Value<bool> deleted = const Value.absent(),
Value<DateTime?> lastFetch = const Value.absent(),
Value<int> contentSize = const Value.absent(),
Value<String> contentSha256 = const Value.absent(),
Value<String> contentType = const Value.absent(),
Value<String?> permissions = const Value.absent(),
Value<String?> inherited = const Value.absent(),
Value<int> publinks = const Value.absent(),
Value<DateTime?> lastRefresh = const Value.absent(),
Value<int> rowid = const Value.absent(),
}) =>
ResourcesCompanion.insert(
@@ -967,15 +990,15 @@ class $$ResourcesTableTableManager extends RootTableManager<
parent: parent,
name: name,
dir: dir,
created: created,
modified: modified,
size: size,
sha256: sha256,
contentType: contentType,
deleted: deleted,
lastFetch: lastFetch,
contentSize: contentSize,
contentSha256: contentSha256,
contentType: contentType,
permissions: permissions,
inherited: inherited,
publinks: publinks,
lastRefresh: lastRefresh,
rowid: rowid,
),
withReferenceMapper: (p0) => p0

View File

@@ -5,15 +5,15 @@ class Resources extends Table {
TextColumn get parent => text().nullable().references(Resources, #id)();
TextColumn get name => text()();
BoolColumn get dir => boolean()();
DateTimeColumn get modified => dateTime()();
IntColumn get size => integer()();
TextColumn get sha256 => text()();
TextColumn get contentType => text()();
DateTimeColumn get created => dateTime().nullable()();
DateTimeColumn get modified => dateTime().nullable()();
BoolColumn get deleted => boolean().withDefault(const Constant(false))();
DateTimeColumn get lastFetch => dateTime().nullable()();
IntColumn get contentSize => integer().withDefault(const Constant(0))();
TextColumn get contentSha256 => text().withDefault(const Constant(""))();
TextColumn get contentType => text().withDefault(const Constant(""))();
TextColumn get permissions => text().nullable()();
TextColumn get inherited => text().nullable()();
IntColumn get publinks => integer().withDefault(const Constant(0))();
DateTimeColumn get lastRefresh => dateTime().nullable()();
@override
Set<Column> get primaryKey => {id};

View File

@@ -53,10 +53,12 @@ class ResourceRepository {
name: name,
parent: Value(parent),
dir: dir,
modified: DateTime.now(),
size: 0,
sha256: "",
contentType: contentType,
created: Value(DateTime.now()),
modified: Value(DateTime.now()),
contentSize: Value(0),
contentSha256: Value(""),
contentType: Value(contentType),
publinks: Value(0),
),
mode: InsertMode.insertOrReplace,
);
@@ -72,46 +74,72 @@ class ResourceRepository {
Future processResourceResponse(Map<String, dynamic> data) async {
final db = account.db;
final (resources, deleted) = await parseResourceObject(data);
final (resources, deleted) = await parseFullResourceObject(data);
await db.batch((batch) {
batch.deleteWhere(db.resources, (o) => o.id.isIn(deleted));
batch.insertAll(db.resources, resources, mode: InsertMode.insertOrReplace);
batch.insertAllOnConflictUpdate(db.resources, resources);
});
}
Future<(Iterable<ResourcesCompanion>, Iterable<String>)> parseResourceObject(Map<String, dynamic> data) async {
bool fullFetch = data.containsKey('children');
final id = data['id'];
final details = ResourcesCompanion.insert(
id: id,
parent: Value(data['parent']),
name: data['name'],
dir: data['dir'],
modified: DateTime.parse(data['modified']),
size: data['csize'],
sha256: data['csha256'],
contentType: data['ctype'] ?? '',
deleted: Value(data['deleted'] != null),
permissions: data['permisisons'] == '{}' ? Value.absent() : Value(data['permisisons']),
lastFetch: fullFetch ? Value(DateTime.now()) : const Value.absent(),
);
Future processResourceUpdateResponse(String id, Map<String, dynamic> data) async {
final resource = parsePartialResourceObject(data);
final update = (account.db.resources.update()..where((o) => o.id.equals(id)));
return update.write(resource);
}
Future<(Iterable<ResourcesCompanion>, Iterable<String>)> parseFullResourceObject(Map<String, dynamic> data) async {
final ancestors = (data['ancestors'] as List).cast<Map>().map(
(a) => parsePartialResourceObject(a.cast<String, dynamic>()).copyWith(dir: Value(true)),
);
final info = parseResourceObject(data['info'])..copyWith(lastRefresh: Value(DateTime.now()));
final id = info.id.value;
final db = account.db;
if (data.containsKey('children')) {
final resources = [details];
final deleted = [];
final existing = Set.of(await (db.select(db.resources)..where((t) => t.parent.equals(id))).map((r) => r.id).get());
final children = (data['children'] as List).cast<Map>();
for (final childData in children) {
existing.remove(childData['id']);
final (r, del) = await parseResourceObject(childData.cast<String, dynamic>());
resources.addAll(r);
deleted.addAll(del);
}
deleted.addAll(existing);
return (resources, existing);
} else {
return ([details], const <String>[]);
}
final existing = Set.of(await (db.select(db.resources)..where((t) => t.parent.equals(id))).map((r) => r.id).get());
final children = (data['children'] as List).cast<Map>().map((c) {
existing.remove(c['id']);
return parseResourceObject(c.cast<String, dynamic>());
});
return ([...ancestors, info, ...children], existing);
}
ResourcesCompanion parseResourceObject(Map<String, dynamic> data) {
return ResourcesCompanion(
id: Value(data['id']),
parent: Value(data['parent']),
name: Value(data['name']),
dir: Value(data['dir']),
created: Value(DateTime.parse(data['created'])),
modified: Value(DateTime.parse(data['modified'])),
deleted: Value(data['deleted'] != null),
contentSize: Value(data['c_size']),
contentSha256: Value(data['c_sha256']),
contentType: Value(data['c_type']),
permissions: data['permisisons'] == '{}' ? Value(null) : Value(data['permisisons']),
publinks: Value(data['publinks']),
lastRefresh: Value(DateTime.now()),
);
}
ResourcesCompanion parsePartialResourceObject(Map<String, dynamic> data) {
return ResourcesCompanion(
id: Value.absentIfNull(data['id']),
parent: Value.absentIfNull(data['parent']),
name: Value.absentIfNull(data['name']),
dir: Value.absentIfNull(data['dir']),
created: Value.absentIfNull(data.containsKey('created') ? DateTime.parse(data['created']) : null),
modified: Value.absentIfNull(data.containsKey('modified') ? DateTime.parse(data['modified']) : null),
deleted: Value.absentIfNull(data.containsKey('deleted') ? data['deleted'] != null : null),
contentSize: Value.absentIfNull(data['c_size']),
contentSha256: Value.absentIfNull(data['c_sha256']),
contentType: Value.absentIfNull(data['c_type']),
permissions: data.containsKey('permissions')
? data['permisisons'] == '{}'
? Value(null)
: Value(data['permisisons'])
: Value.absent(),
publinks: Value.absentIfNull(data['publinks']),
);
}
}

View File

@@ -64,7 +64,7 @@ class _ResourcePreviewState extends State<ResourcePreview> {
style: TextStyle(fontSize: 18),
);
}
if (r.size > maxPreviewSize) {
if (r.contentSize > maxPreviewSize) {
return const Text(
'File too large to preview',
style: TextStyle(fontSize: 18),