/// 分享模型 class ShareModel { final String id; final String name; final int visited; final int? downloaded; final int? price; final bool unlocked; final int sourceType; final ShareOwner? owner; final DateTime createdAt; final DateTime? expires; final bool expired; final String url; final int? size; final SharePermissionSetting? permissionSetting; final bool? isPrivate; final String? password; final bool? shareView; final String? sourceUri; final bool? showReadme; final bool? passwordProtected; ShareModel({ required this.id, required this.name, required this.visited, this.downloaded, this.price, required this.unlocked, required this.sourceType, this.owner, required this.createdAt, this.expires, required this.expired, required this.url, this.size, this.permissionSetting, this.isPrivate, this.password, this.shareView, this.sourceUri, this.showReadme, this.passwordProtected, }); factory ShareModel.fromJson(Map json) { return ShareModel( id: json['id'] as String, name: json['name'] as String, visited: (json['visited'] as num?)?.toInt() ?? 0, downloaded: (json['downloaded'] as num?)?.toInt(), price: (json['price'] as num?)?.toInt(), unlocked: json['unlocked'] as bool? ?? false, sourceType: (json['source_type'] as num?)?.toInt() ?? 0, owner: json['owner'] is Map ? ShareOwner.fromJson(json['owner'] as Map) : null, createdAt: json['created_at'] != null ? DateTime.parse(json['created_at'] as String) : DateTime.now(), expires: json['expires'] != null ? DateTime.parse(json['expires'] as String) : null, expired: json['expired'] as bool? ?? false, url: json['url'] as String? ?? '', size: (json['size'] as num?)?.toInt(), permissionSetting: json['permission_setting'] is Map ? SharePermissionSetting.fromJson(json['permission_setting'] as Map) : null, isPrivate: json['is_private'] as bool?, password: json['password'] as String?, shareView: json['share_view'] as bool?, sourceUri: json['source_uri'] as String?, showReadme: json['show_readme'] as bool?, passwordProtected: json['password_protected'] as bool?, ); } Map toJson() { return { 'id': id, 'name': name, 'visited': visited, 'downloaded': downloaded, 'price': price, 'unlocked': unlocked, 'source_type': sourceType, 'owner': owner?.toJson(), 'created_at': createdAt.toIso8601String(), 'expires': expires?.toIso8601String(), 'expired': expired, 'url': url, 'size': size, 'permission_setting': permissionSetting?.toJson(), 'is_private': isPrivate, 'password': password, 'share_view': shareView, 'source_uri': sourceUri, 'show_readme': showReadme, 'password_protected': passwordProtected, }; } bool get isFolder => sourceType == 1; bool get isFile => sourceType == 0; } /// 分享所有者信息 class ShareOwner { final String id; final String? email; final String nickname; final DateTime createdAt; final ShareOwnerGroup? group; final String? shareLinksInProfile; ShareOwner({ required this.id, this.email, required this.nickname, required this.createdAt, this.group, this.shareLinksInProfile, }); factory ShareOwner.fromJson(Map json) { return ShareOwner( id: json['id'] as String, email: json['email'] as String?, nickname: json['nickname'] as String, createdAt: json['created_at'] != null ? DateTime.parse(json['created_at'] as String) : DateTime.now(), group: json['group'] is Map ? ShareOwnerGroup.fromJson(json['group'] as Map) : null, shareLinksInProfile: json['share_links_in_profile'] as String?, ); } Map toJson() { return { 'id': id, 'email': email, 'nickname': nickname, 'created_at': createdAt.toIso8601String(), 'group': group?.toJson(), 'share_links_in_profile': shareLinksInProfile, }; } } /// 分享所有者所属组 class ShareOwnerGroup { final String id; final String name; ShareOwnerGroup({required this.id, required this.name}); factory ShareOwnerGroup.fromJson(Map json) { return ShareOwnerGroup( id: json['id'] as String, name: json['name'] as String, ); } Map toJson() => {'id': id, 'name': name}; } /// 权限设置 class SharePermissionSetting { final String? sameGroup; final String? other; final String? anonymous; final String? everyone; final Map? groupExplicit; final Map? userExplicit; SharePermissionSetting({ this.sameGroup, this.other, this.anonymous, this.everyone, this.groupExplicit, this.userExplicit, }); factory SharePermissionSetting.fromJson(Map json) { return SharePermissionSetting( sameGroup: json['same_group'] as String?, other: json['other'] as String?, anonymous: json['anonymous'] as String?, everyone: json['everyone'] as String?, groupExplicit: (json['group_explicit'] as Map?) ?.cast(), userExplicit: (json['user_explicit'] as Map?) ?.cast(), ); } Map toJson() { return { 'same_group': sameGroup, 'other': other, 'anonymous': anonymous, 'everyone': everyone, 'group_explicit': groupExplicit, 'user_explicit': userExplicit, }; } }