💄 Optimized drafts
This commit is contained in:
parent
568d70fffb
commit
b89cffeb18
@ -6,7 +6,7 @@ class ComposeDrafts extends Table {
|
||||
TextColumn get description => text().withDefault(const Constant(''))();
|
||||
TextColumn get content => text().withDefault(const Constant(''))();
|
||||
TextColumn get attachmentIds => text().withDefault(const Constant('[]'))(); // JSON array as string
|
||||
TextColumn get visibility => text().withDefault(const Constant('public'))();
|
||||
IntColumn get visibility => integer().withDefault(const Constant(0))(); // 0=public, 1=unlisted, 2=friends, 3=selected, 4=private
|
||||
DateTimeColumn get lastModified => dateTime()();
|
||||
|
||||
@override
|
||||
@ -18,7 +18,7 @@ class ArticleDrafts extends Table {
|
||||
TextColumn get title => text().withDefault(const Constant(''))();
|
||||
TextColumn get description => text().withDefault(const Constant(''))();
|
||||
TextColumn get content => text().withDefault(const Constant(''))();
|
||||
TextColumn get visibility => text().withDefault(const Constant('public'))();
|
||||
IntColumn get visibility => integer().withDefault(const Constant(0))(); // 0=public, 1=unlisted, 2=friends, 3=private
|
||||
DateTimeColumn get lastModified => dateTime()();
|
||||
|
||||
@override
|
||||
|
@ -634,13 +634,13 @@ class $ComposeDraftsTable extends ComposeDrafts
|
||||
'visibility',
|
||||
);
|
||||
@override
|
||||
late final GeneratedColumn<String> visibility = GeneratedColumn<String>(
|
||||
late final GeneratedColumn<int> visibility = GeneratedColumn<int>(
|
||||
'visibility',
|
||||
aliasedName,
|
||||
false,
|
||||
type: DriftSqlType.string,
|
||||
type: DriftSqlType.int,
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: const Constant('public'),
|
||||
defaultValue: const Constant(0),
|
||||
);
|
||||
static const VerificationMeta _lastModifiedMeta = const VerificationMeta(
|
||||
'lastModified',
|
||||
@ -763,7 +763,7 @@ class $ComposeDraftsTable extends ComposeDrafts
|
||||
)!,
|
||||
visibility:
|
||||
attachedDatabase.typeMapping.read(
|
||||
DriftSqlType.string,
|
||||
DriftSqlType.int,
|
||||
data['${effectivePrefix}visibility'],
|
||||
)!,
|
||||
lastModified:
|
||||
@ -786,7 +786,7 @@ class ComposeDraft extends DataClass implements Insertable<ComposeDraft> {
|
||||
final String description;
|
||||
final String content;
|
||||
final String attachmentIds;
|
||||
final String visibility;
|
||||
final int visibility;
|
||||
final DateTime lastModified;
|
||||
const ComposeDraft({
|
||||
required this.id,
|
||||
@ -805,7 +805,7 @@ class ComposeDraft extends DataClass implements Insertable<ComposeDraft> {
|
||||
map['description'] = Variable<String>(description);
|
||||
map['content'] = Variable<String>(content);
|
||||
map['attachment_ids'] = Variable<String>(attachmentIds);
|
||||
map['visibility'] = Variable<String>(visibility);
|
||||
map['visibility'] = Variable<int>(visibility);
|
||||
map['last_modified'] = Variable<DateTime>(lastModified);
|
||||
return map;
|
||||
}
|
||||
@ -833,7 +833,7 @@ class ComposeDraft extends DataClass implements Insertable<ComposeDraft> {
|
||||
description: serializer.fromJson<String>(json['description']),
|
||||
content: serializer.fromJson<String>(json['content']),
|
||||
attachmentIds: serializer.fromJson<String>(json['attachmentIds']),
|
||||
visibility: serializer.fromJson<String>(json['visibility']),
|
||||
visibility: serializer.fromJson<int>(json['visibility']),
|
||||
lastModified: serializer.fromJson<DateTime>(json['lastModified']),
|
||||
);
|
||||
}
|
||||
@ -846,7 +846,7 @@ class ComposeDraft extends DataClass implements Insertable<ComposeDraft> {
|
||||
'description': serializer.toJson<String>(description),
|
||||
'content': serializer.toJson<String>(content),
|
||||
'attachmentIds': serializer.toJson<String>(attachmentIds),
|
||||
'visibility': serializer.toJson<String>(visibility),
|
||||
'visibility': serializer.toJson<int>(visibility),
|
||||
'lastModified': serializer.toJson<DateTime>(lastModified),
|
||||
};
|
||||
}
|
||||
@ -857,7 +857,7 @@ class ComposeDraft extends DataClass implements Insertable<ComposeDraft> {
|
||||
String? description,
|
||||
String? content,
|
||||
String? attachmentIds,
|
||||
String? visibility,
|
||||
int? visibility,
|
||||
DateTime? lastModified,
|
||||
}) => ComposeDraft(
|
||||
id: id ?? this.id,
|
||||
@ -931,7 +931,7 @@ class ComposeDraftsCompanion extends UpdateCompanion<ComposeDraft> {
|
||||
final Value<String> description;
|
||||
final Value<String> content;
|
||||
final Value<String> attachmentIds;
|
||||
final Value<String> visibility;
|
||||
final Value<int> visibility;
|
||||
final Value<DateTime> lastModified;
|
||||
final Value<int> rowid;
|
||||
const ComposeDraftsCompanion({
|
||||
@ -961,7 +961,7 @@ class ComposeDraftsCompanion extends UpdateCompanion<ComposeDraft> {
|
||||
Expression<String>? description,
|
||||
Expression<String>? content,
|
||||
Expression<String>? attachmentIds,
|
||||
Expression<String>? visibility,
|
||||
Expression<int>? visibility,
|
||||
Expression<DateTime>? lastModified,
|
||||
Expression<int>? rowid,
|
||||
}) {
|
||||
@ -983,7 +983,7 @@ class ComposeDraftsCompanion extends UpdateCompanion<ComposeDraft> {
|
||||
Value<String>? description,
|
||||
Value<String>? content,
|
||||
Value<String>? attachmentIds,
|
||||
Value<String>? visibility,
|
||||
Value<int>? visibility,
|
||||
Value<DateTime>? lastModified,
|
||||
Value<int>? rowid,
|
||||
}) {
|
||||
@ -1018,7 +1018,7 @@ class ComposeDraftsCompanion extends UpdateCompanion<ComposeDraft> {
|
||||
map['attachment_ids'] = Variable<String>(attachmentIds.value);
|
||||
}
|
||||
if (visibility.present) {
|
||||
map['visibility'] = Variable<String>(visibility.value);
|
||||
map['visibility'] = Variable<int>(visibility.value);
|
||||
}
|
||||
if (lastModified.present) {
|
||||
map['last_modified'] = Variable<DateTime>(lastModified.value);
|
||||
@ -1098,13 +1098,13 @@ class $ArticleDraftsTable extends ArticleDrafts
|
||||
'visibility',
|
||||
);
|
||||
@override
|
||||
late final GeneratedColumn<String> visibility = GeneratedColumn<String>(
|
||||
late final GeneratedColumn<int> visibility = GeneratedColumn<int>(
|
||||
'visibility',
|
||||
aliasedName,
|
||||
false,
|
||||
type: DriftSqlType.string,
|
||||
type: DriftSqlType.int,
|
||||
requiredDuringInsert: false,
|
||||
defaultValue: const Constant('public'),
|
||||
defaultValue: const Constant(0),
|
||||
);
|
||||
static const VerificationMeta _lastModifiedMeta = const VerificationMeta(
|
||||
'lastModified',
|
||||
@ -1212,7 +1212,7 @@ class $ArticleDraftsTable extends ArticleDrafts
|
||||
)!,
|
||||
visibility:
|
||||
attachedDatabase.typeMapping.read(
|
||||
DriftSqlType.string,
|
||||
DriftSqlType.int,
|
||||
data['${effectivePrefix}visibility'],
|
||||
)!,
|
||||
lastModified:
|
||||
@ -1234,7 +1234,7 @@ class ArticleDraft extends DataClass implements Insertable<ArticleDraft> {
|
||||
final String title;
|
||||
final String description;
|
||||
final String content;
|
||||
final String visibility;
|
||||
final int visibility;
|
||||
final DateTime lastModified;
|
||||
const ArticleDraft({
|
||||
required this.id,
|
||||
@ -1251,7 +1251,7 @@ class ArticleDraft extends DataClass implements Insertable<ArticleDraft> {
|
||||
map['title'] = Variable<String>(title);
|
||||
map['description'] = Variable<String>(description);
|
||||
map['content'] = Variable<String>(content);
|
||||
map['visibility'] = Variable<String>(visibility);
|
||||
map['visibility'] = Variable<int>(visibility);
|
||||
map['last_modified'] = Variable<DateTime>(lastModified);
|
||||
return map;
|
||||
}
|
||||
@ -1277,7 +1277,7 @@ class ArticleDraft extends DataClass implements Insertable<ArticleDraft> {
|
||||
title: serializer.fromJson<String>(json['title']),
|
||||
description: serializer.fromJson<String>(json['description']),
|
||||
content: serializer.fromJson<String>(json['content']),
|
||||
visibility: serializer.fromJson<String>(json['visibility']),
|
||||
visibility: serializer.fromJson<int>(json['visibility']),
|
||||
lastModified: serializer.fromJson<DateTime>(json['lastModified']),
|
||||
);
|
||||
}
|
||||
@ -1289,7 +1289,7 @@ class ArticleDraft extends DataClass implements Insertable<ArticleDraft> {
|
||||
'title': serializer.toJson<String>(title),
|
||||
'description': serializer.toJson<String>(description),
|
||||
'content': serializer.toJson<String>(content),
|
||||
'visibility': serializer.toJson<String>(visibility),
|
||||
'visibility': serializer.toJson<int>(visibility),
|
||||
'lastModified': serializer.toJson<DateTime>(lastModified),
|
||||
};
|
||||
}
|
||||
@ -1299,7 +1299,7 @@ class ArticleDraft extends DataClass implements Insertable<ArticleDraft> {
|
||||
String? title,
|
||||
String? description,
|
||||
String? content,
|
||||
String? visibility,
|
||||
int? visibility,
|
||||
DateTime? lastModified,
|
||||
}) => ArticleDraft(
|
||||
id: id ?? this.id,
|
||||
@ -1358,7 +1358,7 @@ class ArticleDraftsCompanion extends UpdateCompanion<ArticleDraft> {
|
||||
final Value<String> title;
|
||||
final Value<String> description;
|
||||
final Value<String> content;
|
||||
final Value<String> visibility;
|
||||
final Value<int> visibility;
|
||||
final Value<DateTime> lastModified;
|
||||
final Value<int> rowid;
|
||||
const ArticleDraftsCompanion({
|
||||
@ -1385,7 +1385,7 @@ class ArticleDraftsCompanion extends UpdateCompanion<ArticleDraft> {
|
||||
Expression<String>? title,
|
||||
Expression<String>? description,
|
||||
Expression<String>? content,
|
||||
Expression<String>? visibility,
|
||||
Expression<int>? visibility,
|
||||
Expression<DateTime>? lastModified,
|
||||
Expression<int>? rowid,
|
||||
}) {
|
||||
@ -1405,7 +1405,7 @@ class ArticleDraftsCompanion extends UpdateCompanion<ArticleDraft> {
|
||||
Value<String>? title,
|
||||
Value<String>? description,
|
||||
Value<String>? content,
|
||||
Value<String>? visibility,
|
||||
Value<int>? visibility,
|
||||
Value<DateTime>? lastModified,
|
||||
Value<int>? rowid,
|
||||
}) {
|
||||
@ -1436,7 +1436,7 @@ class ArticleDraftsCompanion extends UpdateCompanion<ArticleDraft> {
|
||||
map['content'] = Variable<String>(content.value);
|
||||
}
|
||||
if (visibility.present) {
|
||||
map['visibility'] = Variable<String>(visibility.value);
|
||||
map['visibility'] = Variable<int>(visibility.value);
|
||||
}
|
||||
if (lastModified.present) {
|
||||
map['last_modified'] = Variable<DateTime>(lastModified.value);
|
||||
@ -1771,7 +1771,7 @@ typedef $$ComposeDraftsTableCreateCompanionBuilder =
|
||||
Value<String> description,
|
||||
Value<String> content,
|
||||
Value<String> attachmentIds,
|
||||
Value<String> visibility,
|
||||
Value<int> visibility,
|
||||
required DateTime lastModified,
|
||||
Value<int> rowid,
|
||||
});
|
||||
@ -1782,7 +1782,7 @@ typedef $$ComposeDraftsTableUpdateCompanionBuilder =
|
||||
Value<String> description,
|
||||
Value<String> content,
|
||||
Value<String> attachmentIds,
|
||||
Value<String> visibility,
|
||||
Value<int> visibility,
|
||||
Value<DateTime> lastModified,
|
||||
Value<int> rowid,
|
||||
});
|
||||
@ -1821,7 +1821,7 @@ class $$ComposeDraftsTableFilterComposer
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
ColumnFilters<String> get visibility => $composableBuilder(
|
||||
ColumnFilters<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
@ -1866,7 +1866,7 @@ class $$ComposeDraftsTableOrderingComposer
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
ColumnOrderings<String> get visibility => $composableBuilder(
|
||||
ColumnOrderings<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
@ -1905,7 +1905,7 @@ class $$ComposeDraftsTableAnnotationComposer
|
||||
builder: (column) => column,
|
||||
);
|
||||
|
||||
GeneratedColumn<String> get visibility => $composableBuilder(
|
||||
GeneratedColumn<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => column,
|
||||
);
|
||||
@ -1956,7 +1956,7 @@ class $$ComposeDraftsTableTableManager
|
||||
Value<String> description = const Value.absent(),
|
||||
Value<String> content = const Value.absent(),
|
||||
Value<String> attachmentIds = const Value.absent(),
|
||||
Value<String> visibility = const Value.absent(),
|
||||
Value<int> visibility = const Value.absent(),
|
||||
Value<DateTime> lastModified = const Value.absent(),
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => ComposeDraftsCompanion(
|
||||
@ -1976,7 +1976,7 @@ class $$ComposeDraftsTableTableManager
|
||||
Value<String> description = const Value.absent(),
|
||||
Value<String> content = const Value.absent(),
|
||||
Value<String> attachmentIds = const Value.absent(),
|
||||
Value<String> visibility = const Value.absent(),
|
||||
Value<int> visibility = const Value.absent(),
|
||||
required DateTime lastModified,
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => ComposeDraftsCompanion.insert(
|
||||
@ -2027,7 +2027,7 @@ typedef $$ArticleDraftsTableCreateCompanionBuilder =
|
||||
Value<String> title,
|
||||
Value<String> description,
|
||||
Value<String> content,
|
||||
Value<String> visibility,
|
||||
Value<int> visibility,
|
||||
required DateTime lastModified,
|
||||
Value<int> rowid,
|
||||
});
|
||||
@ -2037,7 +2037,7 @@ typedef $$ArticleDraftsTableUpdateCompanionBuilder =
|
||||
Value<String> title,
|
||||
Value<String> description,
|
||||
Value<String> content,
|
||||
Value<String> visibility,
|
||||
Value<int> visibility,
|
||||
Value<DateTime> lastModified,
|
||||
Value<int> rowid,
|
||||
});
|
||||
@ -2071,7 +2071,7 @@ class $$ArticleDraftsTableFilterComposer
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
|
||||
ColumnFilters<String> get visibility => $composableBuilder(
|
||||
ColumnFilters<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => ColumnFilters(column),
|
||||
);
|
||||
@ -2111,7 +2111,7 @@ class $$ArticleDraftsTableOrderingComposer
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
|
||||
ColumnOrderings<String> get visibility => $composableBuilder(
|
||||
ColumnOrderings<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => ColumnOrderings(column),
|
||||
);
|
||||
@ -2145,7 +2145,7 @@ class $$ArticleDraftsTableAnnotationComposer
|
||||
GeneratedColumn<String> get content =>
|
||||
$composableBuilder(column: $table.content, builder: (column) => column);
|
||||
|
||||
GeneratedColumn<String> get visibility => $composableBuilder(
|
||||
GeneratedColumn<int> get visibility => $composableBuilder(
|
||||
column: $table.visibility,
|
||||
builder: (column) => column,
|
||||
);
|
||||
@ -2195,7 +2195,7 @@ class $$ArticleDraftsTableTableManager
|
||||
Value<String> title = const Value.absent(),
|
||||
Value<String> description = const Value.absent(),
|
||||
Value<String> content = const Value.absent(),
|
||||
Value<String> visibility = const Value.absent(),
|
||||
Value<int> visibility = const Value.absent(),
|
||||
Value<DateTime> lastModified = const Value.absent(),
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => ArticleDraftsCompanion(
|
||||
@ -2213,7 +2213,7 @@ class $$ArticleDraftsTableTableManager
|
||||
Value<String> title = const Value.absent(),
|
||||
Value<String> description = const Value.absent(),
|
||||
Value<String> content = const Value.absent(),
|
||||
Value<String> visibility = const Value.absent(),
|
||||
Value<int> visibility = const Value.absent(),
|
||||
required DateTime lastModified,
|
||||
Value<int> rowid = const Value.absent(),
|
||||
}) => ArticleDraftsCompanion.insert(
|
||||
|
@ -14,6 +14,9 @@ sealed class UniversalFile with _$UniversalFile {
|
||||
required UniversalFileType type,
|
||||
}) = _UniversalFile;
|
||||
|
||||
factory UniversalFile.fromJson(Map<String, dynamic> json) =>
|
||||
_$UniversalFileFromJson(json);
|
||||
|
||||
bool get isOnCloud => data is SnCloudFile;
|
||||
bool get isOnDevice => !isOnCloud;
|
||||
|
||||
|
@ -12,6 +12,7 @@ part of 'file.dart';
|
||||
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
/// @nodoc
|
||||
mixin _$UniversalFile {
|
||||
|
||||
@ -22,6 +23,8 @@ mixin _$UniversalFile {
|
||||
@pragma('vm:prefer-inline')
|
||||
$UniversalFileCopyWith<UniversalFile> get copyWith => _$UniversalFileCopyWithImpl<UniversalFile>(this as UniversalFile, _$identity);
|
||||
|
||||
/// Serializes this UniversalFile to a JSON map.
|
||||
Map<String, dynamic> toJson();
|
||||
|
||||
|
||||
@override
|
||||
@ -29,7 +32,7 @@ bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type));
|
||||
}
|
||||
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
|
||||
|
||||
@ -75,11 +78,11 @@ as UniversalFileType,
|
||||
|
||||
|
||||
/// @nodoc
|
||||
|
||||
@JsonSerializable()
|
||||
|
||||
class _UniversalFile extends UniversalFile {
|
||||
const _UniversalFile({required this.data, required this.type}): super._();
|
||||
|
||||
factory _UniversalFile.fromJson(Map<String, dynamic> json) => _$UniversalFileFromJson(json);
|
||||
|
||||
@override final dynamic data;
|
||||
@override final UniversalFileType type;
|
||||
@ -90,14 +93,17 @@ class _UniversalFile extends UniversalFile {
|
||||
@pragma('vm:prefer-inline')
|
||||
_$UniversalFileCopyWith<_UniversalFile> get copyWith => __$UniversalFileCopyWithImpl<_UniversalFile>(this, _$identity);
|
||||
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$UniversalFileToJson(this, );
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type));
|
||||
}
|
||||
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
|
||||
|
||||
|
@ -6,6 +6,25 @@ part of 'file.dart';
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_UniversalFile _$UniversalFileFromJson(Map<String, dynamic> json) =>
|
||||
_UniversalFile(
|
||||
data: json['data'],
|
||||
type: $enumDecode(_$UniversalFileTypeEnumMap, json['type']),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$UniversalFileToJson(_UniversalFile instance) =>
|
||||
<String, dynamic>{
|
||||
'data': instance.data,
|
||||
'type': _$UniversalFileTypeEnumMap[instance.type]!,
|
||||
};
|
||||
|
||||
const _$UniversalFileTypeEnumMap = {
|
||||
UniversalFileType.image: 'image',
|
||||
UniversalFileType.video: 'video',
|
||||
UniversalFileType.audio: 'audio',
|
||||
UniversalFileType.file: 'file',
|
||||
};
|
||||
|
||||
_SnCloudFile _$SnCloudFileFromJson(Map<String, dynamic> json) => _SnCloudFile(
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
|
@ -62,21 +62,7 @@ class PostComposeScreen extends HookConsumerWidget {
|
||||
@QueryParam('type') this.type,
|
||||
});
|
||||
|
||||
// Helper method to parse visibility
|
||||
int _parseVisibility(String visibility) {
|
||||
switch (visibility) {
|
||||
case 'public':
|
||||
return 0;
|
||||
case 'unlisted':
|
||||
return 1;
|
||||
case 'friends':
|
||||
return 2;
|
||||
case 'private':
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
@ -140,9 +126,7 @@ class PostComposeScreen extends HookConsumerWidget {
|
||||
state.titleController.text = mostRecentDraft.title;
|
||||
state.descriptionController.text = mostRecentDraft.description;
|
||||
state.contentController.text = mostRecentDraft.content;
|
||||
state.visibility.value = _parseVisibility(
|
||||
mostRecentDraft.visibility,
|
||||
);
|
||||
state.visibility.value = mostRecentDraft.visibility;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -272,9 +256,7 @@ class PostComposeScreen extends HookConsumerWidget {
|
||||
state.descriptionController.text =
|
||||
draft.description;
|
||||
state.contentController.text = draft.content;
|
||||
state.visibility.value = _parseVisibility(
|
||||
draft.visibility,
|
||||
);
|
||||
state.visibility.value = draft.visibility;
|
||||
}
|
||||
},
|
||||
),
|
||||
|
@ -111,9 +111,7 @@ class ArticleComposeScreen extends HookConsumerWidget {
|
||||
state.titleController.text = mostRecentDraft.title;
|
||||
state.descriptionController.text = mostRecentDraft.description;
|
||||
state.contentController.text = mostRecentDraft.content;
|
||||
state.visibility.value = _parseArticleVisibility(
|
||||
mostRecentDraft.visibility,
|
||||
);
|
||||
state.visibility.value = mostRecentDraft.visibility;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -396,9 +394,7 @@ class ArticleComposeScreen extends HookConsumerWidget {
|
||||
state.descriptionController.text =
|
||||
draft.description;
|
||||
state.contentController.text = draft.content;
|
||||
state.visibility.value = _parseArticleVisibility(
|
||||
draft.visibility,
|
||||
);
|
||||
state.visibility.value = draft.visibility;
|
||||
}
|
||||
},
|
||||
),
|
||||
@ -548,7 +544,7 @@ class ArticleComposeScreen extends HookConsumerWidget {
|
||||
title: state.titleController.text,
|
||||
description: state.descriptionController.text,
|
||||
content: state.contentController.text,
|
||||
visibility: _visibilityToString(state.visibility.value),
|
||||
visibility: state.visibility.value,
|
||||
lastModified: DateTime.now(),
|
||||
);
|
||||
|
||||
@ -559,35 +555,5 @@ class ArticleComposeScreen extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
// Helper method to convert visibility int to string
|
||||
String _visibilityToString(int visibility) {
|
||||
switch (visibility) {
|
||||
case 0:
|
||||
return 'public';
|
||||
case 1:
|
||||
return 'unlisted';
|
||||
case 2:
|
||||
return 'friends';
|
||||
case 3:
|
||||
return 'private';
|
||||
default:
|
||||
return 'public';
|
||||
}
|
||||
}
|
||||
|
||||
// Helper method to parse article visibility
|
||||
int _parseArticleVisibility(String visibility) {
|
||||
switch (visibility) {
|
||||
case 'public':
|
||||
return 0;
|
||||
case 'unlisted':
|
||||
return 1;
|
||||
case 'friends':
|
||||
return 2;
|
||||
case 'private':
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,10 @@ import 'package:drift/drift.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:island/database/drift_db.dart';
|
||||
import 'package:island/pods/database.dart';
|
||||
import 'package:island/services/file.dart';
|
||||
import 'package:island/models/file.dart';
|
||||
import 'package:island/pods/config.dart';
|
||||
import 'package:island/pods/network.dart';
|
||||
|
||||
part 'compose_storage_db.g.dart';
|
||||
|
||||
@ -11,8 +15,8 @@ class ComposeDraftModel {
|
||||
final String title;
|
||||
final String description;
|
||||
final String content;
|
||||
final List<String> attachmentIds;
|
||||
final String visibility;
|
||||
final List<UniversalFile> attachments;
|
||||
final int visibility;
|
||||
final DateTime lastModified;
|
||||
|
||||
ComposeDraftModel({
|
||||
@ -20,7 +24,7 @@ class ComposeDraftModel {
|
||||
required this.title,
|
||||
required this.description,
|
||||
required this.content,
|
||||
required this.attachmentIds,
|
||||
required this.attachments,
|
||||
required this.visibility,
|
||||
required this.lastModified,
|
||||
});
|
||||
@ -30,7 +34,7 @@ class ComposeDraftModel {
|
||||
'title': title,
|
||||
'description': description,
|
||||
'content': content,
|
||||
'attachmentIds': attachmentIds,
|
||||
'attachments': attachments.map((e) => e.toJson()).toList(),
|
||||
'visibility': visibility,
|
||||
'lastModified': lastModified.toIso8601String(),
|
||||
};
|
||||
@ -40,8 +44,10 @@ class ComposeDraftModel {
|
||||
title: json['title'] as String? ?? '',
|
||||
description: json['description'] as String? ?? '',
|
||||
content: json['content'] as String? ?? '',
|
||||
attachmentIds: List<String>.from(json['attachmentIds'] as List? ?? []),
|
||||
visibility: json['visibility'] as String? ?? 'public',
|
||||
attachments: (json['attachments'] as List? ?? [])
|
||||
.map((e) => UniversalFile.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
visibility: json['visibility'] as int? ?? 0,
|
||||
lastModified: DateTime.parse(json['lastModified'] as String),
|
||||
);
|
||||
|
||||
@ -50,7 +56,9 @@ class ComposeDraftModel {
|
||||
title: row.title,
|
||||
description: row.description,
|
||||
content: row.content,
|
||||
attachmentIds: List<String>.from(jsonDecode(row.attachmentIds)),
|
||||
attachments: (jsonDecode(row.attachmentIds) as List)
|
||||
.map((e) => UniversalFile.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
visibility: row.visibility,
|
||||
lastModified: row.lastModified,
|
||||
);
|
||||
@ -60,7 +68,7 @@ class ComposeDraftModel {
|
||||
title: Value(title),
|
||||
description: Value(description),
|
||||
content: Value(content),
|
||||
attachmentIds: Value(jsonEncode(attachmentIds)),
|
||||
attachmentIds: Value(jsonEncode(attachments.map((e) => e.toJson()).toList())),
|
||||
visibility: Value(visibility),
|
||||
lastModified: Value(lastModified),
|
||||
);
|
||||
@ -70,8 +78,8 @@ class ComposeDraftModel {
|
||||
String? title,
|
||||
String? description,
|
||||
String? content,
|
||||
List<String>? attachmentIds,
|
||||
String? visibility,
|
||||
List<UniversalFile>? attachments,
|
||||
int? visibility,
|
||||
DateTime? lastModified,
|
||||
}) {
|
||||
return ComposeDraftModel(
|
||||
@ -79,7 +87,7 @@ class ComposeDraftModel {
|
||||
title: title ?? this.title,
|
||||
description: description ?? this.description,
|
||||
content: content ?? this.content,
|
||||
attachmentIds: attachmentIds ?? this.attachmentIds,
|
||||
attachments: attachments ?? this.attachments,
|
||||
visibility: visibility ?? this.visibility,
|
||||
lastModified: lastModified ?? this.lastModified,
|
||||
);
|
||||
@ -89,7 +97,7 @@ class ComposeDraftModel {
|
||||
title.isEmpty &&
|
||||
description.isEmpty &&
|
||||
content.isEmpty &&
|
||||
attachmentIds.isEmpty;
|
||||
attachments.isEmpty;
|
||||
}
|
||||
|
||||
class ArticleDraftModel {
|
||||
@ -97,7 +105,7 @@ class ArticleDraftModel {
|
||||
final String title;
|
||||
final String description;
|
||||
final String content;
|
||||
final String visibility;
|
||||
final int visibility;
|
||||
final DateTime lastModified;
|
||||
|
||||
ArticleDraftModel({
|
||||
@ -123,7 +131,7 @@ class ArticleDraftModel {
|
||||
title: json['title'] as String? ?? '',
|
||||
description: json['description'] as String? ?? '',
|
||||
content: json['content'] as String? ?? '',
|
||||
visibility: json['visibility'] as String? ?? 'public',
|
||||
visibility: json['visibility'] as int? ?? 0,
|
||||
lastModified: DateTime.parse(json['lastModified'] as String),
|
||||
);
|
||||
|
||||
@ -150,7 +158,7 @@ class ArticleDraftModel {
|
||||
String? title,
|
||||
String? description,
|
||||
String? content,
|
||||
String? visibility,
|
||||
int? visibility,
|
||||
DateTime? lastModified,
|
||||
}) {
|
||||
return ArticleDraftModel(
|
||||
@ -196,7 +204,38 @@ class ComposeStorageNotifier extends _$ComposeStorageNotifier {
|
||||
return;
|
||||
}
|
||||
|
||||
final updatedDraft = draft.copyWith(lastModified: DateTime.now());
|
||||
// Upload all attachments that are not yet uploaded
|
||||
final uploadedAttachments = <UniversalFile>[];
|
||||
final serverUrl = ref.read(serverUrlProvider);
|
||||
final token = ref.read(tokenProvider);
|
||||
|
||||
for (final attachment in draft.attachments) {
|
||||
if (!attachment.isOnCloud) {
|
||||
try {
|
||||
final completer = putMediaToCloud(
|
||||
fileData: attachment,
|
||||
atk: token?.token ?? '',
|
||||
baseUrl: serverUrl,
|
||||
);
|
||||
final uploadedFile = await completer.future;
|
||||
if (uploadedFile != null) {
|
||||
uploadedAttachments.add(UniversalFile.fromAttachment(uploadedFile));
|
||||
} else {
|
||||
uploadedAttachments.add(attachment);
|
||||
}
|
||||
} catch (e) {
|
||||
// If upload fails, keep the original file
|
||||
uploadedAttachments.add(attachment);
|
||||
}
|
||||
} else {
|
||||
uploadedAttachments.add(attachment);
|
||||
}
|
||||
}
|
||||
|
||||
final updatedDraft = draft.copyWith(
|
||||
attachments: uploadedAttachments,
|
||||
lastModified: DateTime.now(),
|
||||
);
|
||||
state = {...state, updatedDraft.id: updatedDraft};
|
||||
|
||||
try {
|
||||
|
@ -7,7 +7,7 @@ part of 'compose_storage_db.dart';
|
||||
// **************************************************************************
|
||||
|
||||
String _$composeStorageNotifierHash() =>
|
||||
r'57d3812b8fd430e6144f72708c694ddceea34c17';
|
||||
r'fcdb006dca44d30916a20804922e93d0caad49ca';
|
||||
|
||||
/// See also [ComposeStorageNotifier].
|
||||
@ProviderFor(ComposeStorageNotifier)
|
||||
|
@ -102,7 +102,7 @@ class ComposeLogic {
|
||||
titleController: TextEditingController(text: draft.title),
|
||||
descriptionController: TextEditingController(text: draft.description),
|
||||
contentController: TextEditingController(text: draft.content),
|
||||
visibility: ValueNotifier<int>(_parseVisibility(draft.visibility)),
|
||||
visibility: ValueNotifier<int>(draft.visibility),
|
||||
submitting: ValueNotifier<bool>(false),
|
||||
attachmentProgress: ValueNotifier<Map<int, double>>({}),
|
||||
currentPublisher: ValueNotifier<SnPublisher?>(null),
|
||||
@ -110,39 +110,7 @@ class ComposeLogic {
|
||||
);
|
||||
}
|
||||
|
||||
static int _parseVisibility(String visibility) {
|
||||
switch (visibility.toLowerCase()) {
|
||||
case 'public':
|
||||
return 0;
|
||||
case 'unlisted':
|
||||
return 1;
|
||||
case 'friends':
|
||||
return 2;
|
||||
case 'selected':
|
||||
return 3;
|
||||
case 'private':
|
||||
return 4;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static String _visibilityToString(int visibility) {
|
||||
switch (visibility) {
|
||||
case 0:
|
||||
return 'public';
|
||||
case 1:
|
||||
return 'unlisted';
|
||||
case 2:
|
||||
return 'friends';
|
||||
case 3:
|
||||
return 'selected';
|
||||
case 4:
|
||||
return 'private';
|
||||
default:
|
||||
return 'public';
|
||||
}
|
||||
}
|
||||
|
||||
static Future<void> saveDraft(WidgetRef ref, ComposeState state) async {
|
||||
try {
|
||||
@ -156,12 +124,8 @@ class ComposeLogic {
|
||||
title: state.titleController.text,
|
||||
description: state.descriptionController.text,
|
||||
content: state.contentController.text,
|
||||
attachmentIds:
|
||||
state.attachments.value
|
||||
.where((e) => e.isOnCloud)
|
||||
.map((e) => e.data.id.toString())
|
||||
.toList(),
|
||||
visibility: _visibilityToString(state.visibility.value),
|
||||
attachments: state.attachments.value,
|
||||
visibility: state.visibility.value,
|
||||
lastModified: DateTime.now(),
|
||||
);
|
||||
|
||||
|
@ -203,7 +203,7 @@ class _DraftItem extends StatelessWidget {
|
||||
? postDraft.description
|
||||
: 'noContent'.tr());
|
||||
lastModified = postDraft.lastModified;
|
||||
visibility = postDraft.visibility;
|
||||
visibility = _parseArticleVisibility(postDraft.visibility);
|
||||
}
|
||||
|
||||
final preview =
|
||||
@ -316,17 +316,17 @@ class _DraftItem extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
String _parseArticleVisibility(String visibility) {
|
||||
switch (visibility.toLowerCase()) {
|
||||
case 'public':
|
||||
String _parseArticleVisibility(int visibility) {
|
||||
switch (visibility) {
|
||||
case 0:
|
||||
return 'public'.tr();
|
||||
case 'unlisted':
|
||||
case 1:
|
||||
return 'unlisted'.tr();
|
||||
case 'friends':
|
||||
case 2:
|
||||
return 'friends'.tr();
|
||||
case 'selected':
|
||||
case 3:
|
||||
return 'selected'.tr();
|
||||
case 'private':
|
||||
case 4:
|
||||
return 'private'.tr();
|
||||
default:
|
||||
return 'unknown'.tr();
|
||||
|
Loading…
x
Reference in New Issue
Block a user