Compare commits
	
		
			90 Commits
		
	
	
		
			3.0.0+111
			...
			56543d7b4c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 56543d7b4c | |||
| 4c6fea1242 | |||
| fff43de9e3 | |||
| b31a915544 | |||
| 8956723ac5 | |||
| ccc3ac415e | |||
| 8c47a59b80 | |||
| a6d869ebf6 | |||
| f3a8699389 | |||
| d345c00e84 | |||
| a706f127b6 | |||
| 680ece0b6a | |||
| b976c6ed37 | |||
| 6ae6b132de | |||
| 95aec7c95b | |||
| edd760fbcb | |||
| ba269dbbb8 | |||
| 1aa45dd9f1 | |||
| 92685d7410 | |||
| c8e351514d | |||
| f3900825e3 | |||
| 2cc6652f75 | |||
| 4d4409de2e | |||
| e1286c797f | |||
| bec037622f | |||
| a0d8c1a9b3 | |||
| 26135d2116 | |||
| 71b67fd22d | |||
| 855072dfea | |||
| b39e2e2d64 | |||
| 84b1d6a346 | |||
| 28335dd548 | |||
| 7253e2d3ef | |||
| 4d489425fa | |||
| 890a8a44cf | |||
| 8e3583f57a | |||
| d0ff14659f | |||
| 1f7caaeaac | |||
| 9f9f42071a | |||
| 6bd6e994cb | |||
| 02e68d76ee | |||
| d04b06089c | |||
| 9be6fea2e0 | |||
| 6b1214a06f | |||
| 4597373ac9 | |||
| 047c8d93aa | |||
| 715f95ca22 | |||
| ba709012d7 | |||
| fd186f8391 | |||
| 262d36cd2d | |||
| f320855348 | |||
| ed90152462 | |||
| 6e5c5f1690 | |||
| 7c92dee097 | |||
| e4bb031138 | |||
| 97226ae96b | |||
| d8cd33e79a | |||
| 5ecd39b6a9 | |||
| 8854305e99 | |||
| 903cade296 | |||
| e48410a528 | |||
| 170ea4f2c0 | |||
| 19f0e11384 | |||
| 80bf6c3bbe | |||
| 8352ce8b5b | |||
| c06abf6e42 | |||
| 37cc0a5291 | |||
| 25ae18d6a9 | |||
| 18db50d80c | |||
| 903008d397 | |||
| 4499d4ec8e | |||
| 3a4faac8cb | |||
| e6c58b7b63 | |||
| a7454edec0 | |||
| cbf1952eb7 | |||
| 6d06f0a1b4 | |||
| f2d2a9efd8 | |||
| d44c8217b0 | |||
| 446c33d8b0 | |||
| 996462f1fd | |||
| 778f6bb79f | |||
| 8747f948b9 | |||
| 9546d6e4b8 | |||
| f8d1940af6 | |||
| b2b0891d24 | |||
| 274168d4bc | |||
| 2c98b348d5 | |||
| afc7887ddd | |||
| 99ff78a3d5 | |||
| 2ad85addf6 | 
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -59,7 +59,7 @@ jobs:
 | 
			
		||||
          sudo apt-get install -y libnotify-dev
 | 
			
		||||
          sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
 | 
			
		||||
          sudo apt-get install -y gstreamer-1.0
 | 
			
		||||
          sudo apt-get install -y libsecret-1-0
 | 
			
		||||
          sudo apt-get install -y libsecret-1-dev
 | 
			
		||||
      - run: flutter pub get
 | 
			
		||||
      - run: flutter build linux
 | 
			
		||||
      - name: Archive production artifacts
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,9 @@
 | 
			
		||||
 | 
			
		||||
Hello there! Welcome to the main repository of the DysonNetwork (also known as the Solar Network). The code here is mainly about the front-end app (also known as Solian). But you can still post issues here to get help and request new features!
 | 
			
		||||
 | 
			
		||||
如果你看得懂这行字,你可以前往我们的文档来了解更多:
 | 
			
		||||
[Suki - Solar Network](https://kb.solsynth.dev/zh/solar-network)
 | 
			
		||||
 | 
			
		||||
## Server
 | 
			
		||||
 | 
			
		||||
The backend of the Solar Network project is located at [Solsynth/DysonNetwork](https://github.com/Solsynth/DysonNetwork)
 | 
			
		||||
@@ -25,8 +28,6 @@ The content below will lead you to the world of Solar Network.
 | 
			
		||||
 | 
			
		||||
### For Normal Users
 | 
			
		||||
 | 
			
		||||
**The v3 Release is not ready, yet.**
 | 
			
		||||
 | 
			
		||||
1. Go to the Github Releases page, and download the latest release / pre-release according to your platform.
 | 
			
		||||
   - **What's the difference between stable and pre-release?** The pre-release is untested by the other users and includes the new cutting-edge features, usually the pre-release is the feature drop. At the same time, due to we're not doing the API versioning, some breaking changes may break the stable release, so use the pre-release one instead.
 | 
			
		||||
2. Create an account on the Solar Network
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,6 @@ dependencies {
 | 
			
		||||
    implementation("com.google.android.material:material:1.12.0")
 | 
			
		||||
    implementation("com.github.bumptech.glide:glide:4.16.0")
 | 
			
		||||
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
 | 
			
		||||
    implementation("com.google.firebase:firebase-messaging-ktx")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
flutter {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
    <uses-permission android:name="android.permission.CAMERA" />
 | 
			
		||||
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 | 
			
		||||
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
			
		||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
			
		||||
@@ -41,7 +42,16 @@
 | 
			
		||||
                <action android:name="android.intent.action.MAIN" />
 | 
			
		||||
                <category android:name="android.intent.category.LAUNCHER" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <!-- Deeplinking -->
 | 
			
		||||
            <intent-filter android:autoVerify="true">
 | 
			
		||||
                <action android:name="android.intent.action.VIEW" />
 | 
			
		||||
                <category android:name="android.intent.category.DEFAULT" />
 | 
			
		||||
                <category android:name="android.intent.category.BROWSABLE" />
 | 
			
		||||
                <data android:scheme="http" android:host="solian.app" />
 | 
			
		||||
                <data android:scheme="https" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
 | 
			
		||||
            <!-- Share Intent Filters -->
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
                <action android:name="android.intent.action.SEND" />
 | 
			
		||||
@@ -80,6 +90,13 @@
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
        </activity>
 | 
			
		||||
 | 
			
		||||
        <!-- Livekit Screenshare -->
 | 
			
		||||
        <service
 | 
			
		||||
            android:name="de.julianassmann.flutter_background.IsolateHolderService"
 | 
			
		||||
            android:enabled="true"
 | 
			
		||||
            android:exported="false"
 | 
			
		||||
            android:foregroundServiceType="mediaProjection" />
 | 
			
		||||
 | 
			
		||||
        <!-- Sign in with Apple -->
 | 
			
		||||
        <activity
 | 
			
		||||
            android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback"
 | 
			
		||||
@@ -100,14 +117,6 @@
 | 
			
		||||
            android:enabled="true"
 | 
			
		||||
            android:exported="true" />
 | 
			
		||||
 | 
			
		||||
        <service
 | 
			
		||||
            android:name=".service.MessagingService"
 | 
			
		||||
            android:exported="false">
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
        </service>
 | 
			
		||||
 | 
			
		||||
        <provider
 | 
			
		||||
            android:name="androidx.core.content.FileProvider"
 | 
			
		||||
            android:authorities="dev.solsynth.solian.provider"
 | 
			
		||||
@@ -134,4 +143,4 @@
 | 
			
		||||
            <data android:mimeType="text/plain" />
 | 
			
		||||
        </intent>
 | 
			
		||||
    </queries>
 | 
			
		||||
</manifest>
 | 
			
		||||
</manifest>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,102 +0,0 @@
 | 
			
		||||
package dev.solsynth.solian.service
 | 
			
		||||
 | 
			
		||||
import android.app.PendingIntent
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.graphics.Bitmap
 | 
			
		||||
import android.graphics.drawable.Drawable
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import androidx.core.app.NotificationCompat
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat
 | 
			
		||||
import androidx.core.app.RemoteInput
 | 
			
		||||
import com.bumptech.glide.Glide
 | 
			
		||||
import com.bumptech.glide.request.target.CustomTarget
 | 
			
		||||
import com.bumptech.glide.request.transition.Transition
 | 
			
		||||
import com.google.firebase.messaging.FirebaseMessagingService
 | 
			
		||||
import com.google.firebase.messaging.RemoteMessage
 | 
			
		||||
import dev.solsynth.solian.MainActivity
 | 
			
		||||
import dev.solsynth.solian.receiver.ReplyReceiver
 | 
			
		||||
import org.json.JSONObject
 | 
			
		||||
 | 
			
		||||
class MessagingService: FirebaseMessagingService() {
 | 
			
		||||
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
 | 
			
		||||
        val type = remoteMessage.data["type"]
 | 
			
		||||
        if (type == "messages.new") {
 | 
			
		||||
            handleMessageNotification(remoteMessage)
 | 
			
		||||
        } else {
 | 
			
		||||
            // Handle other notification types
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun handleMessageNotification(remoteMessage: RemoteMessage) {
 | 
			
		||||
        val data = remoteMessage.data
 | 
			
		||||
        val metaString = data["meta"] ?: return
 | 
			
		||||
        val meta = JSONObject(metaString)
 | 
			
		||||
 | 
			
		||||
        val pfp = meta.optString("pfp", null)
 | 
			
		||||
        val roomId = meta.optString("room_id", null)
 | 
			
		||||
        val messageId = meta.optString("message_id", null)
 | 
			
		||||
 | 
			
		||||
        val notificationId = System.currentTimeMillis().toInt()
 | 
			
		||||
 | 
			
		||||
        val replyLabel = "Reply"
 | 
			
		||||
        val remoteInput = RemoteInput.Builder("key_text_reply")
 | 
			
		||||
            .setLabel(replyLabel)
 | 
			
		||||
            .build()
 | 
			
		||||
 | 
			
		||||
        val replyIntent = Intent(this, ReplyReceiver::class.java).apply {
 | 
			
		||||
            putExtra("room_id", roomId)
 | 
			
		||||
            putExtra("message_id", messageId)
 | 
			
		||||
            putExtra("notification_id", notificationId)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val pendingIntentFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
 | 
			
		||||
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
 | 
			
		||||
        } else {
 | 
			
		||||
            PendingIntent.FLAG_UPDATE_CURRENT
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val replyPendingIntent = PendingIntent.getBroadcast(
 | 
			
		||||
            applicationContext,
 | 
			
		||||
            notificationId,
 | 
			
		||||
            replyIntent,
 | 
			
		||||
            pendingIntentFlags
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        val action = NotificationCompat.Action.Builder(
 | 
			
		||||
            android.R.drawable.ic_menu_send,
 | 
			
		||||
            replyLabel,
 | 
			
		||||
            replyPendingIntent
 | 
			
		||||
        )
 | 
			
		||||
            .addRemoteInput(remoteInput)
 | 
			
		||||
            .build()
 | 
			
		||||
 | 
			
		||||
        val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
 | 
			
		||||
        intent.putExtra("room_id", roomId)
 | 
			
		||||
        val pendingIntent = PendingIntent.getActivity(this, 0, intent, pendingIntentFlags)
 | 
			
		||||
 | 
			
		||||
        val notificationBuilder = NotificationCompat.Builder(this, "messages")
 | 
			
		||||
            .setSmallIcon(android.R.drawable.ic_dialog_info)
 | 
			
		||||
            .setContentTitle(remoteMessage.notification?.title)
 | 
			
		||||
            .setContentText(remoteMessage.notification?.body)
 | 
			
		||||
            .setPriority(NotificationCompat.PRIORITY_HIGH)
 | 
			
		||||
            .setContentIntent(pendingIntent)
 | 
			
		||||
            .addAction(action)
 | 
			
		||||
 | 
			
		||||
        if (pfp != null) {
 | 
			
		||||
            Glide.with(applicationContext)
 | 
			
		||||
                .asBitmap()
 | 
			
		||||
                .load(pfp)
 | 
			
		||||
                .into(object : CustomTarget<Bitmap>() {
 | 
			
		||||
                    override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
 | 
			
		||||
                        notificationBuilder.setLargeIcon(resource)
 | 
			
		||||
                        NotificationManagerCompat.from(applicationContext).notify(notificationId, notificationBuilder.build())
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    override fun onLoadCleared(placeholder: Drawable?) {}
 | 
			
		||||
                })
 | 
			
		||||
        } else {
 | 
			
		||||
            NotificationManagerCompat.from(this).notify(notificationId, notificationBuilder.build())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -146,7 +146,13 @@
 | 
			
		||||
  "edited": "Edited",
 | 
			
		||||
  "addVideo": "Add video",
 | 
			
		||||
  "addPhoto": "Add photo",
 | 
			
		||||
  "addAudio": "Add audio",
 | 
			
		||||
  "addFile": "Add file",
 | 
			
		||||
  "recordAudio": "Record Audio",
 | 
			
		||||
  "linkAttachment": "Link Attachment",
 | 
			
		||||
  "fileIdCannotBeEmpty": "File ID cannot be empty",
 | 
			
		||||
  "fileIdLinkHint": "Haven't upload to the Solar Network? Tap here to open Solar Network Drive to customize your uploads.",
 | 
			
		||||
  "failedToFetchFile": "Failed to fetch file: {}",
 | 
			
		||||
  "createDirectMessage": "Send new DM",
 | 
			
		||||
  "gotoDirectMessage": "Go to DM",
 | 
			
		||||
  "react": "React",
 | 
			
		||||
@@ -352,6 +358,8 @@
 | 
			
		||||
  "postTitle": "Title",
 | 
			
		||||
  "postDescription": "Description",
 | 
			
		||||
  "call": "Call",
 | 
			
		||||
  "callLeave": "Leave",
 | 
			
		||||
  "callEnd": "End this call",
 | 
			
		||||
  "done": "Done",
 | 
			
		||||
  "loginResetPasswordSent": "Password reset link sent, please check your email inbox.",
 | 
			
		||||
  "accountDeletion": "Delete Account",
 | 
			
		||||
@@ -590,6 +598,7 @@
 | 
			
		||||
  "yes": "Yes",
 | 
			
		||||
  "navigateToChat": "Navigate to Chat",
 | 
			
		||||
  "wouldYouLikeToNavigateToChat": "Would You like to navigate to the chat?",
 | 
			
		||||
  "abuseReports": "Abuse Reports",
 | 
			
		||||
  "abuseReport": "Report",
 | 
			
		||||
  "abuseReportTitle": "Report Content",
 | 
			
		||||
  "abuseReportDescription": "Help us keep the community safe by reporting inappropriate content or behavior.",
 | 
			
		||||
@@ -621,8 +630,8 @@
 | 
			
		||||
  "chatJoin": "Join the Chat",
 | 
			
		||||
  "realmJoin": "Join the Realm",
 | 
			
		||||
  "realmJoinSuccess": "Successfully joined the realm.",
 | 
			
		||||
  "discoverRealms": "Discover Realms",
 | 
			
		||||
  "discoverPublishers": "Discover Publishers",
 | 
			
		||||
  "discoverRealms": "Discover realms",
 | 
			
		||||
  "discoverPublishers": "Discover publishers",
 | 
			
		||||
  "search": "Search",
 | 
			
		||||
  "publisherMembers": "Collaborators",
 | 
			
		||||
  "developerHub": "Developer Hub",
 | 
			
		||||
@@ -697,5 +706,60 @@
 | 
			
		||||
  "postForwardingTo": "Forwarding to",
 | 
			
		||||
  "postReplyingTo": "Replying to",
 | 
			
		||||
  "postEditing": "You are editing an existing post",
 | 
			
		||||
  "postArticle": "Article"
 | 
			
		||||
}
 | 
			
		||||
  "postArticle": "Article",
 | 
			
		||||
  "aboutDeviceName": "Device Name",
 | 
			
		||||
  "aboutDeviceIdentifier": "Device Identifier",
 | 
			
		||||
  "donate": "Donate",
 | 
			
		||||
  "donateDescription": "Support us to continue developing the Solar Network and keep the server up and running.",
 | 
			
		||||
  "fileId": "File ID",
 | 
			
		||||
  "fileIdHint": "The file ID is the ID you get after upload the file via the Solar Network Drive.",
 | 
			
		||||
  "translate": "Translate",
 | 
			
		||||
  "translating": "Translating",
 | 
			
		||||
  "translated": "Translated",
 | 
			
		||||
  "reactionThumbUp": "Thumbs Up",
 | 
			
		||||
  "reactionThumbDown": "Thumbs Down",
 | 
			
		||||
  "reactionJustOkay": "Just Okay",
 | 
			
		||||
  "reactionCry": "Cry",
 | 
			
		||||
  "reactionConfuse": "Confused",
 | 
			
		||||
  "reactionClap": "Clap",
 | 
			
		||||
  "reactionLaugh": "Laugh",
 | 
			
		||||
  "reactionAngry": "Angry",
 | 
			
		||||
  "reactionParty": "Party",
 | 
			
		||||
  "reactionPray": "Pray",
 | 
			
		||||
  "reactionHeart": "Heart",
 | 
			
		||||
  "selectMicrophone": "Select Microphone",
 | 
			
		||||
  "selectCamera": "Select Camera",
 | 
			
		||||
  "switchedTo": "Switched to {}",
 | 
			
		||||
  "connecting": "Connecting",
 | 
			
		||||
  "reconnecting": "Reconnecting",
 | 
			
		||||
  "disconnected": "Disconnected",
 | 
			
		||||
  "connected": "Connected",
 | 
			
		||||
  "repliesLoadMore": "Load more replies",
 | 
			
		||||
  "attachmentsRecentUploads": "Recent Uploads",
 | 
			
		||||
  "attachmentsManualInput": "Manual Input",
 | 
			
		||||
  "crop": "Crop",
 | 
			
		||||
  "rename": "Rename",
 | 
			
		||||
  "markAsSensitive": "Mark as Sensitive",
 | 
			
		||||
  "fileName": "File name",
 | 
			
		||||
  "sensitiveCategories.language": "Language",
 | 
			
		||||
  "sensitiveCategories.sexualContent": "Sexual Content",
 | 
			
		||||
  "sensitiveCategories.violence": "Violence",
 | 
			
		||||
  "sensitiveCategories.profanity": "Profanity",
 | 
			
		||||
  "sensitiveCategories.hateSpeech": "Hate Speech",
 | 
			
		||||
  "sensitiveCategories.racism": "Racism",
 | 
			
		||||
  "sensitiveCategories.adultContent": "Adult Content",
 | 
			
		||||
  "sensitiveCategories.drugAbuse": "Drug Abuse",
 | 
			
		||||
  "sensitiveCategories.alcoholAbuse": "Alcohol Abuse",
 | 
			
		||||
  "sensitiveCategories.gambling": "Gambling",
 | 
			
		||||
  "sensitiveCategories.selfHarm": "Self-harm",
 | 
			
		||||
  "sensitiveCategories.childAbuse": "Child Abuse",
 | 
			
		||||
  "sensitiveCategories.other": "Other",
 | 
			
		||||
  "poll": "Poll",
 | 
			
		||||
  "pollsRecent": "Recent Polls",
 | 
			
		||||
  "pollCreateNew": "Create New",
 | 
			
		||||
  "pollCreateNewHint": "Create a new poll for your post. Pick a publisher and continue.",
 | 
			
		||||
  "publisher": "Publisher",
 | 
			
		||||
  "publisherHint": "Enter the publisher name",
 | 
			
		||||
  "publisherCannotBeEmpty": "Publisher cannot be empty",
 | 
			
		||||
  "operationFailed": "Operation failed: {}"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -123,6 +123,10 @@
 | 
			
		||||
  "addVideo": "添加视频",
 | 
			
		||||
  "addPhoto": "添加照片",
 | 
			
		||||
  "addFile": "添加文件",
 | 
			
		||||
  "addAttachmentById": "通过 ID 添加附件",
 | 
			
		||||
  "enterFileId": "输入文件 ID",
 | 
			
		||||
  "fileIdCannotBeEmpty": "文件 ID 不能为空",
 | 
			
		||||
  "failedToFetchFile": "获取文件失败: {}",
 | 
			
		||||
  "createDirectMessage": "创建新私人消息",
 | 
			
		||||
  "gotoDirectMessage": "前往私信",
 | 
			
		||||
  "react": "反应",
 | 
			
		||||
 
 | 
			
		||||
@@ -123,6 +123,10 @@
 | 
			
		||||
    "addVideo": "新增影片",
 | 
			
		||||
    "addPhoto": "新增照片",
 | 
			
		||||
    "addFile": "新增檔案",
 | 
			
		||||
    "addAttachmentById": "透過 ID 新增附件",
 | 
			
		||||
    "enterFileId": "輸入檔案 ID",
 | 
			
		||||
    "fileIdCannotBeEmpty": "檔案 ID 不能為空",
 | 
			
		||||
    "failedToFetchFile": "無法取得檔案: {}",
 | 
			
		||||
    "createDirectMessage": "建立新私人訊息",
 | 
			
		||||
    "gotoDirectMessage": "Go to DM",
 | 
			
		||||
    "react": "反應",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
# Uncomment this line to define a global platform for your project
 | 
			
		||||
platform :ios, '13.0'
 | 
			
		||||
platform :ios, '15.0'
 | 
			
		||||
 | 
			
		||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 | 
			
		||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
 | 
			
		||||
 
 | 
			
		||||
@@ -40,33 +40,33 @@ PODS:
 | 
			
		||||
  - file_picker (0.0.1):
 | 
			
		||||
    - DKImagePickerController/PhotoGallery
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - Firebase/CoreOnly (11.15.0):
 | 
			
		||||
    - FirebaseCore (~> 11.15.0)
 | 
			
		||||
  - Firebase/Messaging (11.15.0):
 | 
			
		||||
  - Firebase/CoreOnly (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
  - Firebase/Messaging (12.0.0):
 | 
			
		||||
    - Firebase/CoreOnly
 | 
			
		||||
    - FirebaseMessaging (~> 11.15.0)
 | 
			
		||||
  - firebase_core (3.15.0):
 | 
			
		||||
    - Firebase/CoreOnly (= 11.15.0)
 | 
			
		||||
    - FirebaseMessaging (~> 12.0.0)
 | 
			
		||||
  - firebase_core (4.0.0):
 | 
			
		||||
    - Firebase/CoreOnly (= 12.0.0)
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - firebase_messaging (15.2.8):
 | 
			
		||||
    - Firebase/Messaging (= 11.15.0)
 | 
			
		||||
  - firebase_messaging (16.0.0):
 | 
			
		||||
    - Firebase/Messaging (= 12.0.0)
 | 
			
		||||
    - firebase_core
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - FirebaseCore (11.15.0):
 | 
			
		||||
    - FirebaseCoreInternal (~> 11.15.0)
 | 
			
		||||
  - FirebaseCore (12.0.0):
 | 
			
		||||
    - FirebaseCoreInternal (~> 12.0.0)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Logger (~> 8.1)
 | 
			
		||||
  - FirebaseCoreInternal (11.15.0):
 | 
			
		||||
  - FirebaseCoreInternal (12.0.0):
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
  - FirebaseInstallations (11.15.0):
 | 
			
		||||
    - FirebaseCore (~> 11.15.0)
 | 
			
		||||
  - FirebaseInstallations (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/UserDefaults (~> 8.1)
 | 
			
		||||
    - PromisesObjC (~> 2.4)
 | 
			
		||||
  - FirebaseMessaging (11.15.0):
 | 
			
		||||
    - FirebaseCore (~> 11.15.0)
 | 
			
		||||
    - FirebaseInstallations (~> 11.0)
 | 
			
		||||
    - GoogleDataTransport (~> 10.0)
 | 
			
		||||
  - FirebaseMessaging (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - FirebaseInstallations (~> 12.0.0)
 | 
			
		||||
    - GoogleDataTransport (~> 10.1)
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Reachability (~> 8.1)
 | 
			
		||||
@@ -93,9 +93,9 @@ PODS:
 | 
			
		||||
  - flutter_udid (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - SAMKeychain
 | 
			
		||||
  - flutter_webrtc (0.14.0):
 | 
			
		||||
  - flutter_webrtc (1.0.0):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - WebRTC-SDK (= 125.6422.07)
 | 
			
		||||
    - WebRTC-SDK (= 137.7151.02)
 | 
			
		||||
  - gal (1.0.0):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - FlutterMacOS
 | 
			
		||||
@@ -130,11 +130,11 @@ PODS:
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - irondash_engine_context (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - Kingfisher (8.3.3)
 | 
			
		||||
  - livekit_client (2.4.9):
 | 
			
		||||
  - Kingfisher (8.5.0)
 | 
			
		||||
  - livekit_client (2.5.0):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - flutter_webrtc
 | 
			
		||||
    - WebRTC-SDK (= 125.6422.07)
 | 
			
		||||
    - WebRTC-SDK (= 137.7151.02)
 | 
			
		||||
  - local_auth_darwin (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - FlutterMacOS
 | 
			
		||||
@@ -178,28 +178,31 @@ PODS:
 | 
			
		||||
  - sqflite_darwin (0.0.4):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - FlutterMacOS
 | 
			
		||||
  - sqlite3 (3.50.1):
 | 
			
		||||
    - sqlite3/common (= 3.50.1)
 | 
			
		||||
  - sqlite3/common (3.50.1)
 | 
			
		||||
  - sqlite3/dbstatvtab (3.50.1):
 | 
			
		||||
  - sqlite3 (3.50.3):
 | 
			
		||||
    - sqlite3/common (= 3.50.3)
 | 
			
		||||
  - sqlite3/common (3.50.3)
 | 
			
		||||
  - sqlite3/dbstatvtab (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/fts5 (3.50.1):
 | 
			
		||||
  - sqlite3/fts5 (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/math (3.50.1):
 | 
			
		||||
  - sqlite3/math (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/perf-threadsafe (3.50.1):
 | 
			
		||||
  - sqlite3/perf-threadsafe (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/rtree (3.50.1):
 | 
			
		||||
  - sqlite3/rtree (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/session (3.50.3):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3_flutter_libs (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - FlutterMacOS
 | 
			
		||||
    - sqlite3 (~> 3.50.1)
 | 
			
		||||
    - sqlite3 (~> 3.50.3)
 | 
			
		||||
    - sqlite3/dbstatvtab
 | 
			
		||||
    - sqlite3/fts5
 | 
			
		||||
    - sqlite3/math
 | 
			
		||||
    - sqlite3/perf-threadsafe
 | 
			
		||||
    - sqlite3/rtree
 | 
			
		||||
    - sqlite3/session
 | 
			
		||||
  - super_native_extensions (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - SwiftyGif (5.4.5)
 | 
			
		||||
@@ -209,7 +212,7 @@ PODS:
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - wakelock_plus (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - WebRTC-SDK (125.6422.07)
 | 
			
		||||
  - WebRTC-SDK (137.7151.02)
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES:
 | 
			
		||||
  - Alamofire
 | 
			
		||||
@@ -361,13 +364,13 @@ SPEC CHECKSUMS:
 | 
			
		||||
  DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
 | 
			
		||||
  DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
 | 
			
		||||
  file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
 | 
			
		||||
  Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e
 | 
			
		||||
  firebase_core: c727a02c560a53f1f1e56e18f16515eb5753c492
 | 
			
		||||
  firebase_messaging: 4158969b04b667f5435731ec9d6e453bb58b0c4c
 | 
			
		||||
  FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e
 | 
			
		||||
  FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4
 | 
			
		||||
  FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843
 | 
			
		||||
  FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09
 | 
			
		||||
  Firebase: 800d487043c0557d9faed71477a38d9aafb08a41
 | 
			
		||||
  firebase_core: 633e1851ffe1b9ab875f6467a4f574c79cef02e4
 | 
			
		||||
  firebase_messaging: d17feef781edc84ebefe62624fb384358ad96361
 | 
			
		||||
  FirebaseCore: 055f4ab117d5964158c833f3d5e7ec6d91648d4a
 | 
			
		||||
  FirebaseCoreInternal: dedc28e569a4be85f38f3d6af1070a2e12018d55
 | 
			
		||||
  FirebaseInstallations: d4c7c958f99c8860d7fcece786314ae790e2f988
 | 
			
		||||
  FirebaseMessaging: af49f8d7c0a3d2a017d9302c80946f45a7777dde
 | 
			
		||||
  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
 | 
			
		||||
  flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
 | 
			
		||||
  flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
 | 
			
		||||
@@ -376,15 +379,15 @@ SPEC CHECKSUMS:
 | 
			
		||||
  flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
 | 
			
		||||
  flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
 | 
			
		||||
  flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9
 | 
			
		||||
  flutter_webrtc: fd0d3bdef8766a0736dbbe2e5b7e85f1f3c52117
 | 
			
		||||
  flutter_webrtc: 6f7da106613d52ade777d5b4875a43f48c28b457
 | 
			
		||||
  gal: baecd024ebfd13c441269ca7404792a7152fde89
 | 
			
		||||
  GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
 | 
			
		||||
  GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
 | 
			
		||||
  image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
 | 
			
		||||
  irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486
 | 
			
		||||
  Kingfisher: ff82cb91d9266ddb56cbb2f72d32c26f00d3e5be
 | 
			
		||||
  livekit_client: 3f79d79233a5bd13d5b541732624ef959d7c538e
 | 
			
		||||
  local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
 | 
			
		||||
  Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c
 | 
			
		||||
  livekit_client: e3b79b99405428aac439b6b76a254cd9a11dbbfb
 | 
			
		||||
  local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19
 | 
			
		||||
  media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854
 | 
			
		||||
  media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474
 | 
			
		||||
  nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
 | 
			
		||||
@@ -403,15 +406,15 @@ SPEC CHECKSUMS:
 | 
			
		||||
  shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
 | 
			
		||||
  sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
 | 
			
		||||
  sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
 | 
			
		||||
  sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5
 | 
			
		||||
  sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2
 | 
			
		||||
  sqlite3: 83105acd294c9137c026e2da1931c30b4588ab81
 | 
			
		||||
  sqlite3_flutter_libs: 616267f2fca40e9c6af8c5d82324e05667040b6e
 | 
			
		||||
  super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
 | 
			
		||||
  SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
 | 
			
		||||
  url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
 | 
			
		||||
  volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
 | 
			
		||||
  wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
 | 
			
		||||
  WebRTC-SDK: dff00a3892bc570b6014e046297782084071657e
 | 
			
		||||
  WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b
 | 
			
		||||
 | 
			
		||||
PODFILE CHECKSUM: f6df17c2a0cbd7af89692fd3877231eaea40230f
 | 
			
		||||
PODFILE CHECKSUM: c818292390b02fa379036ea099713a332bd7193f
 | 
			
		||||
 | 
			
		||||
COCOAPODS: 1.16.2
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,8 @@
 | 
			
		||||
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
			
		||||
		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
 | 
			
		||||
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
			
		||||
		73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */; };
 | 
			
		||||
		73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
			
		||||
		73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
			
		||||
		73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
			
		||||
		73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; };
 | 
			
		||||
@@ -32,6 +34,13 @@
 | 
			
		||||
			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
 | 
			
		||||
			remoteInfo = Runner;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
			
		||||
			proxyType = 1;
 | 
			
		||||
			remoteGlobalIDString = 73ACDFAA2E3D0E6100B63535;
 | 
			
		||||
			remoteInfo = SolianBroadcastExtension;
 | 
			
		||||
		};
 | 
			
		||||
		73C305D62E0BE878009035B9 /* PBXContainerItemProxy */ = {
 | 
			
		||||
			isa = PBXContainerItemProxy;
 | 
			
		||||
			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
			
		||||
@@ -55,6 +64,7 @@
 | 
			
		||||
			dstPath = "";
 | 
			
		||||
			dstSubfolderSpec = 13;
 | 
			
		||||
			files = (
 | 
			
		||||
				73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */,
 | 
			
		||||
				73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */,
 | 
			
		||||
				73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -91,6 +101,9 @@
 | 
			
		||||
		3A1C47BD29CC6AC2587D4DBE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
 | 
			
		||||
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
 | 
			
		||||
		737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
 | 
			
		||||
		73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		73ACDFB82E3D0E6100B63535 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; };
 | 
			
		||||
@@ -117,6 +130,13 @@
 | 
			
		||||
/* End PBXFileReference section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
 | 
			
		||||
		73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */ = {
 | 
			
		||||
			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 | 
			
		||||
			membershipExceptions = (
 | 
			
		||||
				Info.plist,
 | 
			
		||||
			);
 | 
			
		||||
			target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */;
 | 
			
		||||
		};
 | 
			
		||||
		73C305DC2E0BE878009035B9 /* Exceptions for "SolianShareExtension" folder in "SolianShareExtension" target */ = {
 | 
			
		||||
			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 | 
			
		||||
			membershipExceptions = (
 | 
			
		||||
@@ -150,6 +170,14 @@
 | 
			
		||||
			path = Services;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */ = {
 | 
			
		||||
			isa = PBXFileSystemSynchronizedRootGroup;
 | 
			
		||||
			exceptions = (
 | 
			
		||||
				73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */,
 | 
			
		||||
			);
 | 
			
		||||
			path = SolianBroadcastExtension;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		73C305CF2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
			
		||||
			isa = PBXFileSystemSynchronizedRootGroup;
 | 
			
		||||
			exceptions = (
 | 
			
		||||
@@ -177,6 +205,14 @@
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFA82E3D0E6100B63535 /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73C305CB2E0BE878009035B9 /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -220,6 +256,8 @@
 | 
			
		||||
				AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */,
 | 
			
		||||
				39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */,
 | 
			
		||||
				7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */,
 | 
			
		||||
				73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */,
 | 
			
		||||
				73ACDFB82E3D0E6100B63535 /* UIKit.framework */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Frameworks;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
@@ -264,6 +302,7 @@
 | 
			
		||||
				97C146F01CF9000F007C117D /* Runner */,
 | 
			
		||||
				73CDD67B2DEC00480059D95D /* SolianNotificationService */,
 | 
			
		||||
				73C305CF2E0BE878009035B9 /* SolianShareExtension */,
 | 
			
		||||
				73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
			
		||||
				97C146EF1CF9000F007C117D /* Products */,
 | 
			
		||||
				331C8082294A63A400263BE5 /* RunnerTests */,
 | 
			
		||||
				91E124CE95BCB4DCD890160D /* Pods */,
 | 
			
		||||
@@ -279,6 +318,7 @@
 | 
			
		||||
				331C8081294A63A400263BE5 /* RunnerTests.xctest */,
 | 
			
		||||
				73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */,
 | 
			
		||||
				73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */,
 | 
			
		||||
				73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
@@ -323,6 +363,26 @@
 | 
			
		||||
			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
 | 
			
		||||
			productType = "com.apple.product-type.bundle.unit-test";
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = 73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				73ACDFA72E3D0E6100B63535 /* Sources */,
 | 
			
		||||
				73ACDFA82E3D0E6100B63535 /* Frameworks */,
 | 
			
		||||
				73ACDFA92E3D0E6100B63535 /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
			);
 | 
			
		||||
			fileSystemSynchronizedGroups = (
 | 
			
		||||
				73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
			
		||||
			);
 | 
			
		||||
			name = SolianBroadcastExtension;
 | 
			
		||||
			productName = SolianBroadcastExtension;
 | 
			
		||||
			productReference = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */;
 | 
			
		||||
			productType = "com.apple.product-type.app-extension";
 | 
			
		||||
		};
 | 
			
		||||
		73C305CD2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = 73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */;
 | 
			
		||||
@@ -385,6 +445,7 @@
 | 
			
		||||
			dependencies = (
 | 
			
		||||
				73CDD6802DEC00480059D95D /* PBXTargetDependency */,
 | 
			
		||||
				73C305D72E0BE878009035B9 /* PBXTargetDependency */,
 | 
			
		||||
				73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */,
 | 
			
		||||
			);
 | 
			
		||||
			fileSystemSynchronizedGroups = (
 | 
			
		||||
				73268D272DEB012A0076E970 /* Services */,
 | 
			
		||||
@@ -409,6 +470,9 @@
 | 
			
		||||
						CreatedOnToolsVersion = 14.0;
 | 
			
		||||
						TestTargetID = 97C146ED1CF9000F007C117D;
 | 
			
		||||
					};
 | 
			
		||||
					73ACDFAA2E3D0E6100B63535 = {
 | 
			
		||||
						CreatedOnToolsVersion = 16.4;
 | 
			
		||||
					};
 | 
			
		||||
					73C305CD2E0BE878009035B9 = {
 | 
			
		||||
						CreatedOnToolsVersion = 16.4;
 | 
			
		||||
					};
 | 
			
		||||
@@ -438,6 +502,7 @@
 | 
			
		||||
				331C8080294A63A400263BE5 /* RunnerTests */,
 | 
			
		||||
				73CDD6792DEC00480059D95D /* SolianNotificationService */,
 | 
			
		||||
				73C305CD2E0BE878009035B9 /* SolianShareExtension */,
 | 
			
		||||
				73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
@@ -450,6 +515,13 @@
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFA92E3D0E6100B63535 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73C305CC2E0BE878009035B9 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -643,6 +715,13 @@
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFA72E3D0E6100B63535 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73C305CA2E0BE878009035B9 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -675,6 +754,11 @@
 | 
			
		||||
			target = 97C146ED1CF9000F007C117D /* Runner */;
 | 
			
		||||
			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */ = {
 | 
			
		||||
			isa = PBXTargetDependency;
 | 
			
		||||
			target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */;
 | 
			
		||||
			targetProxy = 73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */;
 | 
			
		||||
		};
 | 
			
		||||
		73C305D72E0BE878009035B9 /* PBXTargetDependency */ = {
 | 
			
		||||
			isa = PBXTargetDependency;
 | 
			
		||||
			target = 73C305CD2E0BE878009035B9 /* SolianShareExtension */;
 | 
			
		||||
@@ -772,7 +856,8 @@
 | 
			
		||||
				ENABLE_BITCODE = NO;
 | 
			
		||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
			
		||||
				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
@@ -835,6 +920,123 @@
 | 
			
		||||
			};
 | 
			
		||||
			name = Profile;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFC42E3D0E6100B63535 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
			
		||||
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
			
		||||
				CLANG_ENABLE_OBJC_WEAK = YES;
 | 
			
		||||
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
			
		||||
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
			
		||||
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
			
		||||
				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
			
		||||
				CODE_SIGN_STYLE = Automatic;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 1;
 | 
			
		||||
				DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
			
		||||
				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
			
		||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
			
		||||
				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
			
		||||
				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
					"@executable_path/../../Frameworks",
 | 
			
		||||
				);
 | 
			
		||||
				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
			
		||||
				MARKETING_VERSION = 1.0;
 | 
			
		||||
				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 | 
			
		||||
				MTL_FAST_MATH = YES;
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
 | 
			
		||||
				SWIFT_EMIT_LOC_STRINGS = YES;
 | 
			
		||||
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
			
		||||
				SWIFT_VERSION = 5.0;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFC52E3D0E6100B63535 /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
			
		||||
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
			
		||||
				CLANG_ENABLE_OBJC_WEAK = YES;
 | 
			
		||||
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
			
		||||
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
			
		||||
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
			
		||||
				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
			
		||||
				CODE_SIGN_STYLE = Automatic;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 1;
 | 
			
		||||
				DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
			
		||||
				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
			
		||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
			
		||||
				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
			
		||||
				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
					"@executable_path/../../Frameworks",
 | 
			
		||||
				);
 | 
			
		||||
				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
			
		||||
				MARKETING_VERSION = 1.0;
 | 
			
		||||
				MTL_FAST_MATH = YES;
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_EMIT_LOC_STRINGS = YES;
 | 
			
		||||
				SWIFT_VERSION = 5.0;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFC62E3D0E6100B63535 /* Profile */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
			
		||||
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
			
		||||
				CLANG_ENABLE_OBJC_WEAK = YES;
 | 
			
		||||
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
			
		||||
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
			
		||||
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
			
		||||
				CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
			
		||||
				CODE_SIGN_STYLE = Automatic;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 1;
 | 
			
		||||
				DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
			
		||||
				ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
			
		||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
			
		||||
				INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
			
		||||
				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
					"@executable_path/../../Frameworks",
 | 
			
		||||
				);
 | 
			
		||||
				LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
			
		||||
				MARKETING_VERSION = 1.0;
 | 
			
		||||
				MTL_FAST_MATH = YES;
 | 
			
		||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SKIP_INSTALL = YES;
 | 
			
		||||
				SWIFT_EMIT_LOC_STRINGS = YES;
 | 
			
		||||
				SWIFT_VERSION = 5.0;
 | 
			
		||||
				TARGETED_DEVICE_FAMILY = "1,2";
 | 
			
		||||
			};
 | 
			
		||||
			name = Profile;
 | 
			
		||||
		};
 | 
			
		||||
		73C305D92E0BE878009035B9 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			baseConfigurationReference = 17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */;
 | 
			
		||||
@@ -1202,7 +1404,8 @@
 | 
			
		||||
				ENABLE_BITCODE = NO;
 | 
			
		||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
			
		||||
				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
@@ -1229,7 +1432,8 @@
 | 
			
		||||
				ENABLE_BITCODE = NO;
 | 
			
		||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
			
		||||
				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					"@executable_path/Frameworks",
 | 
			
		||||
@@ -1255,6 +1459,16 @@
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				73ACDFC42E3D0E6100B63535 /* Debug */,
 | 
			
		||||
				73ACDFC52E3D0E6100B63535 /* Release */,
 | 
			
		||||
				73ACDFC62E3D0E6100B63535 /* Profile */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
		73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ import UIKit
 | 
			
		||||
        UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory])
 | 
			
		||||
        
 | 
			
		||||
        GeneratedPluginRegistrant.register(with: self)
 | 
			
		||||
        
 | 
			
		||||
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
 | 
			
		||||
    <device id="retina6_12" orientation="portrait" appearance="light"/>
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <deployment identifier="iOS"/>
 | 
			
		||||
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
 | 
			
		||||
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
 | 
			
		||||
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
    <scenes>
 | 
			
		||||
        <!--Flutter View Controller-->
 | 
			
		||||
@@ -14,13 +16,14 @@
 | 
			
		||||
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
 | 
			
		||||
                    </layoutGuides>
 | 
			
		||||
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
 | 
			
		||||
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
 | 
			
		||||
                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
 | 
			
		||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
			
		||||
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
 | 
			
		||||
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
 | 
			
		||||
                    </view>
 | 
			
		||||
                </viewController>
 | 
			
		||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
 | 
			
		||||
            </objects>
 | 
			
		||||
            <point key="canvasLocation" x="-26" y="-76"/>
 | 
			
		||||
        </scene>
 | 
			
		||||
    </scenes>
 | 
			
		||||
</document>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,10 @@
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>CLIENT_ID</key>
 | 
			
		||||
	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string>
 | 
			
		||||
	<key>REVERSED_CLIENT_ID</key>
 | 
			
		||||
	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string>
 | 
			
		||||
	<key>PLIST_VERSION</key>
 | 
			
		||||
	<string>1</string>
 | 
			
		||||
	<key>AppGroupId</key>
 | 
			
		||||
	<string>$(CUSTOM_GROUP_ID)</string>
 | 
			
		||||
	<key>BUNDLE_ID</key>
 | 
			
		||||
	<string>dev.solsynth.solian</string>
 | 
			
		||||
	<key>ITSAppUsesNonExemptEncryption</key>
 | 
			
		||||
	<false/>
 | 
			
		||||
	<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>CFBundleDevelopmentRegion</key>
 | 
			
		||||
@@ -32,31 +26,46 @@
 | 
			
		||||
	<string>$(FLUTTER_BUILD_NAME)</string>
 | 
			
		||||
	<key>CFBundleSignature</key>
 | 
			
		||||
	<string>????</string>
 | 
			
		||||
	<key>CFBundleURLTypes</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<dict>
 | 
			
		||||
			<key>CFBundleTypeRole</key>
 | 
			
		||||
			<string>Editor</string>
 | 
			
		||||
			<key>CFBundleURLSchemes</key>
 | 
			
		||||
			<array>
 | 
			
		||||
				<string>ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 | 
			
		||||
			</array>
 | 
			
		||||
		</dict>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>CFBundleVersion</key>
 | 
			
		||||
	<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
			
		||||
    <key>CFBundleURLTypes</key>
 | 
			
		||||
    <array>
 | 
			
		||||
        <dict>
 | 
			
		||||
            <key>CFBundleTypeRole</key>
 | 
			
		||||
            <string>Editor</string>
 | 
			
		||||
            <key>CFBundleURLSchemes</key>
 | 
			
		||||
            <array>
 | 
			
		||||
                <string>ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 | 
			
		||||
            </array>
 | 
			
		||||
        </dict>
 | 
			
		||||
    </array>
 | 
			
		||||
	<key>CLIENT_ID</key>
 | 
			
		||||
	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string>
 | 
			
		||||
	<key>ITSAppUsesNonExemptEncryption</key>
 | 
			
		||||
	<false/>
 | 
			
		||||
	<key>LSRequiresIPhoneOS</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>NSCalendarsUsageDescription</key>
 | 
			
		||||
	<string>Grant access to Calander help us to shows Solar Calander with your own events.</string>
 | 
			
		||||
	<key>NSCameraUsageDescription</key>
 | 
			
		||||
	<string>Grant access to Camera will allow Solian take photo or video for your post.</string>
 | 
			
		||||
	<key>NSFaceIDUsageDescription</key>
 | 
			
		||||
	<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string>
 | 
			
		||||
	<key>NSMicrophoneUsageDescription</key>
 | 
			
		||||
	<string>Grant access to Microphone will allow Solian record audio for your post.</string>
 | 
			
		||||
	<key>NSPhotoLibraryAddUsageDescription</key>
 | 
			
		||||
	<string>Grant access to Photo Library will allow Solian download photo to album for you.</string>
 | 
			
		||||
	<key>NSPhotoLibraryUsageDescription</key>
 | 
			
		||||
	<string>Grant access to Photo Library will allow Solian upload photo or video for your post.</string>
 | 
			
		||||
	<key>NSUserActivityTypes</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>INStartCallIntent</string>
 | 
			
		||||
		<string>INSendMessageIntent</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>PLIST_VERSION</key>
 | 
			
		||||
	<string>1</string>
 | 
			
		||||
	<key>REVERSED_CLIENT_ID</key>
 | 
			
		||||
	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string>
 | 
			
		||||
	<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
			
		||||
	<true/>
 | 
			
		||||
	<key>UIBackgroundModes</key>
 | 
			
		||||
@@ -74,25 +83,16 @@
 | 
			
		||||
	<false/>
 | 
			
		||||
	<key>UISupportedInterfaceOrientations</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>UISupportedInterfaceOrientations~ipad</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>NSFaceIDUsageDescription</key>
 | 
			
		||||
	<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string>
 | 
			
		||||
	<key>AppGroupId</key>
 | 
			
		||||
	<string>$(CUSTOM_GROUP_ID)</string>
 | 
			
		||||
	<key>NSUserActivityTypes</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>INStartCallIntent</string>
 | 
			
		||||
		<string>INSendMessageIntent</string>
 | 
			
		||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
			
		||||
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
			
		||||
	</array>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								ios/SolianBroadcastExtension/Atomic.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ios/SolianBroadcastExtension/Atomic.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
//
 | 
			
		||||
//  Atomic.swift
 | 
			
		||||
//  Broadcast Extension
 | 
			
		||||
//
 | 
			
		||||
//  Created by Maksym Shcheglov.
 | 
			
		||||
//  https://www.onswiftwings.com/posts/atomic-property-wrapper/
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import Foundation
 | 
			
		||||
 | 
			
		||||
@propertyWrapper
 | 
			
		||||
struct Atomic<Value> {
 | 
			
		||||
 | 
			
		||||
    private var value: Value
 | 
			
		||||
    private let lock = NSLock()
 | 
			
		||||
 | 
			
		||||
    init(wrappedValue value: Value) {
 | 
			
		||||
        self.value = value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var wrappedValue: Value {
 | 
			
		||||
        get { load() }
 | 
			
		||||
        set { store(newValue: newValue) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func load() -> Value {
 | 
			
		||||
        lock.lock()
 | 
			
		||||
        defer { lock.unlock() }
 | 
			
		||||
        return value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mutating func store(newValue: Value) {
 | 
			
		||||
        lock.lock()
 | 
			
		||||
        defer { lock.unlock() }
 | 
			
		||||
        value = newValue
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								ios/SolianBroadcastExtension/DarwinNotification.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								ios/SolianBroadcastExtension/DarwinNotification.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
//
 | 
			
		||||
//  DarwinNotificationCenter.swift
 | 
			
		||||
//  Broadcast Extension
 | 
			
		||||
//
 | 
			
		||||
//  Created by Alex-Dan Bumbu on 23/03/2021.
 | 
			
		||||
//  Copyright © 2021 8x8, Inc. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import Foundation
 | 
			
		||||
 | 
			
		||||
enum DarwinNotification: String {
 | 
			
		||||
    case broadcastStarted = "iOS_BroadcastStarted"
 | 
			
		||||
    case broadcastStopped = "iOS_BroadcastStopped"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class DarwinNotificationCenter {
 | 
			
		||||
    
 | 
			
		||||
    static let shared = DarwinNotificationCenter()
 | 
			
		||||
    
 | 
			
		||||
    private let notificationCenter: CFNotificationCenter
 | 
			
		||||
    
 | 
			
		||||
    init() {
 | 
			
		||||
        notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func postNotification(_ name: DarwinNotification) {
 | 
			
		||||
        CFNotificationCenterPostNotification(notificationCenter, CFNotificationName(rawValue: name.rawValue as CFString), nil, nil, true)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								ios/SolianBroadcastExtension/Info.plist
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ios/SolianBroadcastExtension/Info.plist
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>NSExtension</key>
 | 
			
		||||
	<dict>
 | 
			
		||||
		<key>NSExtensionPointIdentifier</key>
 | 
			
		||||
		<string>com.apple.broadcast-services-upload</string>
 | 
			
		||||
		<key>NSExtensionPrincipalClass</key>
 | 
			
		||||
		<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>
 | 
			
		||||
		<key>RPBroadcastProcessMode</key>
 | 
			
		||||
		<string>RPBroadcastProcessModeSampleBuffer</string>
 | 
			
		||||
	</dict>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
							
								
								
									
										103
									
								
								ios/SolianBroadcastExtension/SampleHandler.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								ios/SolianBroadcastExtension/SampleHandler.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
//
 | 
			
		||||
//  SampleHandler.swift
 | 
			
		||||
//  Broadcast Extension
 | 
			
		||||
//
 | 
			
		||||
//  Created by Alex-Dan Bumbu on 04.06.2021.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import ReplayKit
 | 
			
		||||
import OSLog
 | 
			
		||||
 | 
			
		||||
let broadcastLogger = OSLog(subsystem: "dev.solsynth.solian", category: "Broadcast")
 | 
			
		||||
private enum Constants {
 | 
			
		||||
    // the App Group ID value that the app and the broadcast extension targets are setup with. It differs for each app.
 | 
			
		||||
    static let appGroupIdentifier = "group.solsynth.solian"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SampleHandler: RPBroadcastSampleHandler {
 | 
			
		||||
 | 
			
		||||
    private var clientConnection: SocketConnection?
 | 
			
		||||
    private var uploader: SampleUploader?
 | 
			
		||||
 | 
			
		||||
    private var frameCount: Int = 0
 | 
			
		||||
 | 
			
		||||
    var socketFilePath: String {
 | 
			
		||||
      let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier)
 | 
			
		||||
        return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? ""
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override init() {
 | 
			
		||||
      super.init()
 | 
			
		||||
        if let connection = SocketConnection(filePath: socketFilePath) {
 | 
			
		||||
          clientConnection = connection
 | 
			
		||||
          setupConnection()
 | 
			
		||||
 | 
			
		||||
          uploader = SampleUploader(connection: connection)
 | 
			
		||||
        }
 | 
			
		||||
        os_log(.debug, log: broadcastLogger, "%{public}s", socketFilePath)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override func broadcastStarted(withSetupInfo setupInfo: [String: NSObject]?) {
 | 
			
		||||
        // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
 | 
			
		||||
        frameCount = 0
 | 
			
		||||
 | 
			
		||||
        DarwinNotificationCenter.shared.postNotification(.broadcastStarted)
 | 
			
		||||
        openConnection()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override func broadcastPaused() {
 | 
			
		||||
        // User has requested to pause the broadcast. Samples will stop being delivered.
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override func broadcastResumed() {
 | 
			
		||||
        // User has requested to resume the broadcast. Samples delivery will resume.
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override func broadcastFinished() {
 | 
			
		||||
        // User has requested to finish the broadcast.
 | 
			
		||||
        DarwinNotificationCenter.shared.postNotification(.broadcastStopped)
 | 
			
		||||
        clientConnection?.close()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
 | 
			
		||||
        switch sampleBufferType {
 | 
			
		||||
        case RPSampleBufferType.video:
 | 
			
		||||
            uploader?.send(sample: sampleBuffer)
 | 
			
		||||
        default:
 | 
			
		||||
            break
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private extension SampleHandler {
 | 
			
		||||
 | 
			
		||||
    func setupConnection() {
 | 
			
		||||
        clientConnection?.didClose = { [weak self] error in
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "client connection did close \(String(describing: error))")
 | 
			
		||||
 | 
			
		||||
            if let error = error {
 | 
			
		||||
                self?.finishBroadcastWithError(error)
 | 
			
		||||
            } else {
 | 
			
		||||
                // the displayed failure message is more user friendly when using NSError instead of Error
 | 
			
		||||
                let JMScreenSharingStopped = 10001
 | 
			
		||||
                let customError = NSError(domain: RPRecordingErrorDomain, code: JMScreenSharingStopped, userInfo: [NSLocalizedDescriptionKey: "Screen sharing stopped"])
 | 
			
		||||
                self?.finishBroadcastWithError(customError)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func openConnection() {
 | 
			
		||||
        let queue = DispatchQueue(label: "broadcast.connectTimer")
 | 
			
		||||
        let timer = DispatchSource.makeTimerSource(queue: queue)
 | 
			
		||||
        timer.schedule(deadline: .now(), repeating: .milliseconds(100), leeway: .milliseconds(500))
 | 
			
		||||
        timer.setEventHandler { [weak self] in
 | 
			
		||||
            guard self?.clientConnection?.open() == true else {
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            timer.cancel()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        timer.resume()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										147
									
								
								ios/SolianBroadcastExtension/SampleUploader.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								ios/SolianBroadcastExtension/SampleUploader.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
//
 | 
			
		||||
//  SampleUploader.swift
 | 
			
		||||
//  Broadcast Extension
 | 
			
		||||
//
 | 
			
		||||
//  Created by Alex-Dan Bumbu on 22/03/2021.
 | 
			
		||||
//  Copyright © 2021 8x8, Inc. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import Foundation
 | 
			
		||||
import ReplayKit
 | 
			
		||||
import OSLog
 | 
			
		||||
 | 
			
		||||
private enum Constants {
 | 
			
		||||
    static let bufferMaxLength = 10240
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SampleUploader {
 | 
			
		||||
    
 | 
			
		||||
    private static var imageContext = CIContext(options: nil)
 | 
			
		||||
    
 | 
			
		||||
    @Atomic private var isReady = false
 | 
			
		||||
    private var connection: SocketConnection
 | 
			
		||||
  
 | 
			
		||||
    private var dataToSend: Data?
 | 
			
		||||
    private var byteIndex = 0
 | 
			
		||||
  
 | 
			
		||||
    private let serialQueue: DispatchQueue
 | 
			
		||||
    
 | 
			
		||||
    init(connection: SocketConnection) {
 | 
			
		||||
        self.connection = connection
 | 
			
		||||
        self.serialQueue = DispatchQueue(label: "org.jitsi.meet.broadcast.sampleUploader")
 | 
			
		||||
      
 | 
			
		||||
        setupConnection()
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    @discardableResult func send(sample buffer: CMSampleBuffer) -> Bool {
 | 
			
		||||
        guard isReady else {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        isReady = false
 | 
			
		||||
 | 
			
		||||
        dataToSend = prepare(sample: buffer)
 | 
			
		||||
        byteIndex = 0
 | 
			
		||||
 | 
			
		||||
        serialQueue.async { [weak self] in
 | 
			
		||||
            self?.sendDataChunk()
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private extension SampleUploader {
 | 
			
		||||
    
 | 
			
		||||
    func setupConnection() {
 | 
			
		||||
        connection.didOpen = { [weak self] in
 | 
			
		||||
            self?.isReady = true
 | 
			
		||||
        }
 | 
			
		||||
        connection.streamHasSpaceAvailable = { [weak self] in
 | 
			
		||||
            self?.serialQueue.async {
 | 
			
		||||
                if let success = self?.sendDataChunk() {
 | 
			
		||||
                    self?.isReady = !success
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @discardableResult func sendDataChunk() -> Bool {
 | 
			
		||||
        guard let dataToSend = dataToSend else {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
      
 | 
			
		||||
        var bytesLeft = dataToSend.count - byteIndex
 | 
			
		||||
        var length = bytesLeft > Constants.bufferMaxLength ? Constants.bufferMaxLength : bytesLeft
 | 
			
		||||
 | 
			
		||||
        length = dataToSend[byteIndex..<(byteIndex + length)].withUnsafeBytes {
 | 
			
		||||
            guard let ptr = $0.bindMemory(to: UInt8.self).baseAddress else {
 | 
			
		||||
                return 0
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return connection.writeToStream(buffer: ptr, maxLength: length)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if length > 0 {
 | 
			
		||||
            byteIndex += length
 | 
			
		||||
            bytesLeft -= length
 | 
			
		||||
 | 
			
		||||
            if bytesLeft == 0 {
 | 
			
		||||
                self.dataToSend = nil
 | 
			
		||||
                byteIndex = 0
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "writeBufferToStream failure")
 | 
			
		||||
        }
 | 
			
		||||
      
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func prepare(sample buffer: CMSampleBuffer) -> Data? {
 | 
			
		||||
        guard let imageBuffer = CMSampleBufferGetImageBuffer(buffer) else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "image buffer not available")
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        CVPixelBufferLockBaseAddress(imageBuffer, .readOnly)
 | 
			
		||||
        
 | 
			
		||||
        let scaleFactor = 1.0
 | 
			
		||||
        let width = CVPixelBufferGetWidth(imageBuffer)/Int(scaleFactor)
 | 
			
		||||
        let height = CVPixelBufferGetHeight(imageBuffer)/Int(scaleFactor)
 | 
			
		||||
        let orientation = CMGetAttachment(buffer, key: RPVideoSampleOrientationKey as CFString, attachmentModeOut: nil)?.uintValue ?? 0
 | 
			
		||||
                                    
 | 
			
		||||
        let scaleTransform = CGAffineTransform(scaleX: CGFloat(1.0/scaleFactor), y: CGFloat(1.0/scaleFactor))
 | 
			
		||||
        let bufferData = self.jpegData(from: imageBuffer, scale: scaleTransform)
 | 
			
		||||
        
 | 
			
		||||
        CVPixelBufferUnlockBaseAddress(imageBuffer, .readOnly)
 | 
			
		||||
        
 | 
			
		||||
        guard let messageData = bufferData else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "corrupted image buffer")
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
              
 | 
			
		||||
        let httpResponse = CFHTTPMessageCreateResponse(nil, 200, nil, kCFHTTPVersion1_1).takeRetainedValue()
 | 
			
		||||
        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Content-Length" as CFString, String(messageData.count) as CFString)
 | 
			
		||||
        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Width" as CFString, String(width) as CFString)
 | 
			
		||||
        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Height" as CFString, String(height) as CFString)
 | 
			
		||||
        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Orientation" as CFString, String(orientation) as CFString)
 | 
			
		||||
        
 | 
			
		||||
        CFHTTPMessageSetBody(httpResponse, messageData as CFData)
 | 
			
		||||
        
 | 
			
		||||
        let serializedMessage = CFHTTPMessageCopySerializedMessage(httpResponse)?.takeRetainedValue() as Data?
 | 
			
		||||
      
 | 
			
		||||
        return serializedMessage
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func jpegData(from buffer: CVPixelBuffer, scale scaleTransform: CGAffineTransform) -> Data? {
 | 
			
		||||
        let image = CIImage(cvPixelBuffer: buffer).transformed(by: scaleTransform)
 | 
			
		||||
        
 | 
			
		||||
        guard let colorSpace = image.colorSpace else {
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
      
 | 
			
		||||
        let options: [CIImageRepresentationOption: Float] = [kCGImageDestinationLossyCompressionQuality as CIImageRepresentationOption: 1.0]
 | 
			
		||||
 | 
			
		||||
        return SampleUploader.imageContext.jpegRepresentation(of: image, colorSpace: colorSpace, options: options)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										199
									
								
								ios/SolianBroadcastExtension/SocketConnection.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								ios/SolianBroadcastExtension/SocketConnection.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
//
 | 
			
		||||
//  SocketConnection.swift
 | 
			
		||||
//  Broadcast Extension
 | 
			
		||||
//
 | 
			
		||||
//  Created by Alex-Dan Bumbu on 22/03/2021.
 | 
			
		||||
//  Copyright © 2021 Atlassian Inc. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import Foundation
 | 
			
		||||
import OSLog
 | 
			
		||||
 | 
			
		||||
class SocketConnection: NSObject {
 | 
			
		||||
    var didOpen: (() -> Void)?
 | 
			
		||||
    var didClose: ((Error?) -> Void)?
 | 
			
		||||
    var streamHasSpaceAvailable: (() -> Void)?
 | 
			
		||||
 | 
			
		||||
    private let filePath: String
 | 
			
		||||
    private var socketHandle: Int32 = -1
 | 
			
		||||
    private var address: sockaddr_un?
 | 
			
		||||
 | 
			
		||||
    private var inputStream: InputStream?
 | 
			
		||||
    private var outputStream: OutputStream?
 | 
			
		||||
    
 | 
			
		||||
    private var networkQueue: DispatchQueue?
 | 
			
		||||
    private var shouldKeepRunning = false
 | 
			
		||||
 | 
			
		||||
    init?(filePath path: String) {
 | 
			
		||||
        filePath = path
 | 
			
		||||
        socketHandle = Darwin.socket(AF_UNIX, SOCK_STREAM, 0)
 | 
			
		||||
 | 
			
		||||
        guard socketHandle != -1 else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "failure: create socket")
 | 
			
		||||
            return nil
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func open() -> Bool {
 | 
			
		||||
        os_log(.debug, log: broadcastLogger, "open socket connection")
 | 
			
		||||
 | 
			
		||||
        guard FileManager.default.fileExists(atPath: filePath) else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "failure: socket file missing")
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
      
 | 
			
		||||
        guard setupAddress() == true else {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        guard connectSocket() == true else {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        setupStreams()
 | 
			
		||||
        
 | 
			
		||||
        inputStream?.open()
 | 
			
		||||
        outputStream?.open()
 | 
			
		||||
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func close() {
 | 
			
		||||
        unscheduleStreams()
 | 
			
		||||
 | 
			
		||||
        inputStream?.delegate = nil
 | 
			
		||||
        outputStream?.delegate = nil
 | 
			
		||||
 | 
			
		||||
        inputStream?.close()
 | 
			
		||||
        outputStream?.close()
 | 
			
		||||
        
 | 
			
		||||
        inputStream = nil
 | 
			
		||||
        outputStream = nil
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func writeToStream(buffer: UnsafePointer<UInt8>, maxLength length: Int) -> Int {
 | 
			
		||||
        outputStream?.write(buffer, maxLength: length) ?? 0
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension SocketConnection: StreamDelegate {
 | 
			
		||||
 | 
			
		||||
    func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
 | 
			
		||||
        switch eventCode {
 | 
			
		||||
        case .openCompleted:
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "client stream open completed")
 | 
			
		||||
            if aStream == outputStream {
 | 
			
		||||
                didOpen?()
 | 
			
		||||
            }
 | 
			
		||||
        case .hasBytesAvailable:
 | 
			
		||||
            if aStream == inputStream {
 | 
			
		||||
                var buffer: UInt8 = 0
 | 
			
		||||
                let numberOfBytesRead = inputStream?.read(&buffer, maxLength: 1)
 | 
			
		||||
                if numberOfBytesRead == 0 && aStream.streamStatus == .atEnd {
 | 
			
		||||
                    os_log(.debug, log: broadcastLogger, "server socket closed")
 | 
			
		||||
                    close()
 | 
			
		||||
                    notifyDidClose(error: nil)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        case .hasSpaceAvailable:
 | 
			
		||||
            if aStream == outputStream {
 | 
			
		||||
                streamHasSpaceAvailable?()
 | 
			
		||||
            }
 | 
			
		||||
        case .errorOccurred:
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "client stream error occured: \(String(describing: aStream.streamError))")
 | 
			
		||||
            close()
 | 
			
		||||
            notifyDidClose(error: aStream.streamError)
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            break
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private extension SocketConnection {
 | 
			
		||||
  
 | 
			
		||||
    func setupAddress() -> Bool {
 | 
			
		||||
        var addr = sockaddr_un()
 | 
			
		||||
        guard filePath.count < MemoryLayout.size(ofValue: addr.sun_path) else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "failure: fd path is too long")
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _ = withUnsafeMutablePointer(to: &addr.sun_path.0) { ptr in
 | 
			
		||||
            filePath.withCString {
 | 
			
		||||
                strncpy(ptr, $0, filePath.count)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        address = addr
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func connectSocket() -> Bool {
 | 
			
		||||
        guard var addr = address else {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        let status = withUnsafePointer(to: &addr) { ptr in
 | 
			
		||||
            ptr.withMemoryRebound(to: sockaddr.self, capacity: 1) {
 | 
			
		||||
                Darwin.connect(socketHandle, $0, socklen_t(MemoryLayout<sockaddr_un>.size))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        guard status == noErr else {
 | 
			
		||||
            os_log(.debug, log: broadcastLogger, "failure: \(status)")
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func setupStreams() {
 | 
			
		||||
        var readStream: Unmanaged<CFReadStream>?
 | 
			
		||||
        var writeStream: Unmanaged<CFWriteStream>?
 | 
			
		||||
 | 
			
		||||
        CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketHandle, &readStream, &writeStream)
 | 
			
		||||
 | 
			
		||||
        inputStream = readStream?.takeRetainedValue()
 | 
			
		||||
        inputStream?.delegate = self
 | 
			
		||||
        inputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
 | 
			
		||||
 | 
			
		||||
        outputStream = writeStream?.takeRetainedValue()
 | 
			
		||||
        outputStream?.delegate = self
 | 
			
		||||
        outputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
 | 
			
		||||
 | 
			
		||||
        scheduleStreams()
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    func scheduleStreams() {
 | 
			
		||||
        shouldKeepRunning = true
 | 
			
		||||
        
 | 
			
		||||
        networkQueue = DispatchQueue.global(qos: .userInitiated)
 | 
			
		||||
        networkQueue?.async { [weak self] in
 | 
			
		||||
            self?.inputStream?.schedule(in: .current, forMode: .common)
 | 
			
		||||
            self?.outputStream?.schedule(in: .current, forMode: .common)
 | 
			
		||||
            RunLoop.current.run()
 | 
			
		||||
            
 | 
			
		||||
            var isRunning = false
 | 
			
		||||
                        
 | 
			
		||||
            repeat {
 | 
			
		||||
                isRunning = self?.shouldKeepRunning ?? false && RunLoop.current.run(mode: .default, before: .distantFuture)
 | 
			
		||||
            } while (isRunning)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func unscheduleStreams() {
 | 
			
		||||
        networkQueue?.sync { [weak self] in
 | 
			
		||||
            self?.inputStream?.remove(from: .current, forMode: .common)
 | 
			
		||||
            self?.outputStream?.remove(from: .current, forMode: .common)
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        shouldKeepRunning = false
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func notifyDidClose(error: Error?) {
 | 
			
		||||
        if didClose != nil {
 | 
			
		||||
            didClose?(error)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>com.apple.security.application-groups</key>
 | 
			
		||||
	<array>
 | 
			
		||||
		<string>group.solsynth.solian</string>
 | 
			
		||||
	</array>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
@@ -49,8 +49,7 @@ class AppDatabase extends _$AppDatabase {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<int> updateMessage(ChatMessagesCompanion message) {
 | 
			
		||||
    return (update(chatMessages)
 | 
			
		||||
      ..where((m) => m.id.equals(message.id.value))).write(message);
 | 
			
		||||
    return into(chatMessages).insert(message, mode: InsertMode.insertOrReplace);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<int> updateMessageStatus(String id, MessageStatus status) {
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ class MessageRepository {
 | 
			
		||||
    if (lastMessage == null) return false;
 | 
			
		||||
    try {
 | 
			
		||||
      final resp = await _apiClient.post(
 | 
			
		||||
        '/chat/${room.id}/sync',
 | 
			
		||||
        '/sphere/chat/${room.id}/sync',
 | 
			
		||||
        data: {
 | 
			
		||||
          'last_sync_timestamp':
 | 
			
		||||
              lastMessage.toRemoteMessage().updatedAt.millisecondsSinceEpoch,
 | 
			
		||||
@@ -154,7 +154,7 @@ class MessageRepository {
 | 
			
		||||
    // Use cached total count if available, otherwise fetch it
 | 
			
		||||
    if (_totalCount == null) {
 | 
			
		||||
      final response = await _apiClient.get(
 | 
			
		||||
        '/chat/$roomId/messages',
 | 
			
		||||
        '/sphere/chat/$roomId/messages',
 | 
			
		||||
        queryParameters: {'offset': 0, 'take': 1},
 | 
			
		||||
      );
 | 
			
		||||
      _totalCount = int.parse(response.headers['x-total']?.firstOrNull ?? '0');
 | 
			
		||||
@@ -165,7 +165,7 @@ class MessageRepository {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    final response = await _apiClient.get(
 | 
			
		||||
      '/chat/$roomId/messages',
 | 
			
		||||
      '/sphere/chat/$roomId/messages',
 | 
			
		||||
      queryParameters: {'offset': offset, 'take': take},
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@@ -269,8 +269,8 @@ class MessageRepository {
 | 
			
		||||
      // Send to server
 | 
			
		||||
      final response = await _apiClient.request(
 | 
			
		||||
        editingTo == null
 | 
			
		||||
            ? '/chat/$roomId/messages'
 | 
			
		||||
            : '/chat/$roomId/messages/${editingTo.id}',
 | 
			
		||||
            ? '/sphere/chat/$roomId/messages'
 | 
			
		||||
            : '/sphere/chat/$roomId/messages/${editingTo.id}',
 | 
			
		||||
        data: {
 | 
			
		||||
          'content': content,
 | 
			
		||||
          'attachments_id': cloudAttachments.map((e) => e.id).toList(),
 | 
			
		||||
@@ -325,7 +325,7 @@ class MessageRepository {
 | 
			
		||||
      // Send to server
 | 
			
		||||
      var remoteMessage = message.toRemoteMessage();
 | 
			
		||||
      final response = await _apiClient.post(
 | 
			
		||||
        '/chat/${message.roomId}/messages',
 | 
			
		||||
        '/sphere/chat/${message.roomId}/messages',
 | 
			
		||||
        data: {
 | 
			
		||||
          'content': remoteMessage.content,
 | 
			
		||||
          'attachments_id': remoteMessage.attachments,
 | 
			
		||||
@@ -423,7 +423,7 @@ class MessageRepository {
 | 
			
		||||
    try {
 | 
			
		||||
      // Update on server
 | 
			
		||||
      final response = await _apiClient.put(
 | 
			
		||||
        '/chat/${room.id}/messages/$messageId',
 | 
			
		||||
        '/sphere/chat/${room.id}/messages/$messageId',
 | 
			
		||||
        data: {'content': content, 'attachments': attachments, 'meta': meta},
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@@ -444,7 +444,7 @@ class MessageRepository {
 | 
			
		||||
 | 
			
		||||
  Future<void> deleteMessage(String messageId) async {
 | 
			
		||||
    try {
 | 
			
		||||
      await _apiClient.delete('/chat/${room.id}/messages/$messageId');
 | 
			
		||||
      await _apiClient.delete('/sphere/chat/${room.id}/messages/$messageId');
 | 
			
		||||
      pendingMessages.remove(messageId);
 | 
			
		||||
      await _database.deleteMessage(messageId);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@@ -464,7 +464,7 @@ class MessageRepository {
 | 
			
		||||
 | 
			
		||||
      // If not found locally, fetch from the server
 | 
			
		||||
      final response = await _apiClient.get(
 | 
			
		||||
        '/chat/${room.id}/messages/$messageId',
 | 
			
		||||
        '/sphere/chat/${room.id}/messages/$messageId',
 | 
			
		||||
      );
 | 
			
		||||
      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
			
		||||
      final message = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ import 'package:bitsdojo_window/bitsdojo_window.dart';
 | 
			
		||||
import 'package:island/pods/userinfo.dart';
 | 
			
		||||
import 'package:island/pods/websocket.dart';
 | 
			
		||||
import 'package:island/route.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:island/services/notify.dart';
 | 
			
		||||
import 'package:island/services/timezone.dart';
 | 
			
		||||
import 'package:island/widgets/alert.dart';
 | 
			
		||||
@@ -30,6 +29,7 @@ import 'package:shared_preferences/shared_preferences.dart';
 | 
			
		||||
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
 | 
			
		||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher_string.dart';
 | 
			
		||||
import 'package:flutter_langdetect/flutter_langdetect.dart' as langdetect;
 | 
			
		||||
 | 
			
		||||
@pragma('vm:entry-point')
 | 
			
		||||
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
 | 
			
		||||
@@ -51,6 +51,7 @@ void main() async {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    await langdetect.initLangDetect();
 | 
			
		||||
    await EasyLocalization.ensureInitialized();
 | 
			
		||||
    await Firebase.initializeApp(
 | 
			
		||||
      options: DefaultFirebaseOptions.currentPlatform,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								lib/models/abuse_report.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								lib/models/abuse_report.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
 | 
			
		||||
part 'abuse_report.freezed.dart';
 | 
			
		||||
part 'abuse_report.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAbuseReport with _$SnAbuseReport {
 | 
			
		||||
  const factory SnAbuseReport({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String resourceIdentifier,
 | 
			
		||||
    required int type,
 | 
			
		||||
    required String reason,
 | 
			
		||||
    required DateTime? resolvedAt,
 | 
			
		||||
    required String? resolution,
 | 
			
		||||
    required String accountId,
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    required DateTime? deletedAt,
 | 
			
		||||
  }) = _SnAbuseReport;
 | 
			
		||||
 | 
			
		||||
  factory SnAbuseReport.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnAbuseReportFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										298
									
								
								lib/models/abuse_report.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								lib/models/abuse_report.freezed.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,298 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
part of 'abuse_report.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// FreezedGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
// dart format off
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnAbuseReport {
 | 
			
		||||
 | 
			
		||||
 String get id; String get resourceIdentifier; int get type; String get reason; DateTime? get resolvedAt; String? get resolution; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
/// Create a copy of SnAbuseReport
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnAbuseReportCopyWith<SnAbuseReport> get copyWith => _$SnAbuseReportCopyWithImpl<SnAbuseReport>(this as SnAbuseReport, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this SnAbuseReport to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAbuseReport&&(identical(other.id, id) || other.id == id)&&(identical(other.resourceIdentifier, resourceIdentifier) || other.resourceIdentifier == resourceIdentifier)&&(identical(other.type, type) || other.type == type)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.resolvedAt, resolvedAt) || other.resolvedAt == resolvedAt)&&(identical(other.resolution, resolution) || other.resolution == resolution)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,resourceIdentifier,type,reason,resolvedAt,resolution,accountId,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAbuseReport(id: $id, resourceIdentifier: $resourceIdentifier, type: $type, reason: $reason, resolvedAt: $resolvedAt, resolution: $resolution, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $SnAbuseReportCopyWith<$Res>  {
 | 
			
		||||
  factory $SnAbuseReportCopyWith(SnAbuseReport value, $Res Function(SnAbuseReport) _then) = _$SnAbuseReportCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String resourceIdentifier, int type, String reason, DateTime? resolvedAt, String? resolution, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$SnAbuseReportCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnAbuseReportCopyWith<$Res> {
 | 
			
		||||
  _$SnAbuseReportCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final SnAbuseReport _self;
 | 
			
		||||
  final $Res Function(SnAbuseReport) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAbuseReport
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? resourceIdentifier = null,Object? type = null,Object? reason = null,Object? resolvedAt = freezed,Object? resolution = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,resourceIdentifier: null == resourceIdentifier ? _self.resourceIdentifier : resourceIdentifier // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,resolvedAt: freezed == resolvedAt ? _self.resolvedAt : resolvedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,resolution: freezed == resolution ? _self.resolution : resolution // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAbuseReport].
 | 
			
		||||
extension SnAbuseReportPatterns on SnAbuseReport {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAbuseReport value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAbuseReport value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAbuseReport value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport():
 | 
			
		||||
return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAbuseReport() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnAbuseReport implements SnAbuseReport {
 | 
			
		||||
  const _SnAbuseReport({required this.id, required this.resourceIdentifier, required this.type, required this.reason, required this.resolvedAt, required this.resolution, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt});
 | 
			
		||||
  factory _SnAbuseReport.fromJson(Map<String, dynamic> json) => _$SnAbuseReportFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@override final  String resourceIdentifier;
 | 
			
		||||
@override final  int type;
 | 
			
		||||
@override final  String reason;
 | 
			
		||||
@override final  DateTime? resolvedAt;
 | 
			
		||||
@override final  String? resolution;
 | 
			
		||||
@override final  String accountId;
 | 
			
		||||
@override final  DateTime createdAt;
 | 
			
		||||
@override final  DateTime updatedAt;
 | 
			
		||||
@override final  DateTime? deletedAt;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAbuseReport
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$SnAbuseReportCopyWith<_SnAbuseReport> get copyWith => __$SnAbuseReportCopyWithImpl<_SnAbuseReport>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$SnAbuseReportToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAbuseReport&&(identical(other.id, id) || other.id == id)&&(identical(other.resourceIdentifier, resourceIdentifier) || other.resourceIdentifier == resourceIdentifier)&&(identical(other.type, type) || other.type == type)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.resolvedAt, resolvedAt) || other.resolvedAt == resolvedAt)&&(identical(other.resolution, resolution) || other.resolution == resolution)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,resourceIdentifier,type,reason,resolvedAt,resolution,accountId,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAbuseReport(id: $id, resourceIdentifier: $resourceIdentifier, type: $type, reason: $reason, resolvedAt: $resolvedAt, resolution: $resolution, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$SnAbuseReportCopyWith<$Res> implements $SnAbuseReportCopyWith<$Res> {
 | 
			
		||||
  factory _$SnAbuseReportCopyWith(_SnAbuseReport value, $Res Function(_SnAbuseReport) _then) = __$SnAbuseReportCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String resourceIdentifier, int type, String reason, DateTime? resolvedAt, String? resolution, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$SnAbuseReportCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnAbuseReportCopyWith<$Res> {
 | 
			
		||||
  __$SnAbuseReportCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _SnAbuseReport _self;
 | 
			
		||||
  final $Res Function(_SnAbuseReport) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAbuseReport
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? resourceIdentifier = null,Object? type = null,Object? reason = null,Object? resolvedAt = freezed,Object? resolution = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
  return _then(_SnAbuseReport(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,resourceIdentifier: null == resourceIdentifier ? _self.resourceIdentifier : resourceIdentifier // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,resolvedAt: freezed == resolvedAt ? _self.resolvedAt : resolvedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,resolution: freezed == resolution ? _self.resolution : resolution // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// dart format on
 | 
			
		||||
							
								
								
									
										41
									
								
								lib/models/abuse_report.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								lib/models/abuse_report.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
 | 
			
		||||
part of 'abuse_report.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_SnAbuseReport _$SnAbuseReportFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnAbuseReport(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      resourceIdentifier: json['resource_identifier'] as String,
 | 
			
		||||
      type: (json['type'] as num).toInt(),
 | 
			
		||||
      reason: json['reason'] as String,
 | 
			
		||||
      resolvedAt:
 | 
			
		||||
          json['resolved_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['resolved_at'] as String),
 | 
			
		||||
      resolution: json['resolution'] as String?,
 | 
			
		||||
      accountId: json['account_id'] as String,
 | 
			
		||||
      createdAt: DateTime.parse(json['created_at'] as String),
 | 
			
		||||
      updatedAt: DateTime.parse(json['updated_at'] as String),
 | 
			
		||||
      deletedAt:
 | 
			
		||||
          json['deleted_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['deleted_at'] as String),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnAbuseReportToJson(_SnAbuseReport instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'resource_identifier': instance.resourceIdentifier,
 | 
			
		||||
      'type': instance.type,
 | 
			
		||||
      'reason': instance.reason,
 | 
			
		||||
      'resolved_at': instance.resolvedAt?.toIso8601String(),
 | 
			
		||||
      'resolution': instance.resolution,
 | 
			
		||||
      'account_id': instance.accountId,
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
							
								
								
									
										38
									
								
								lib/models/abuse_report_type.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lib/models/abuse_report_type.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
enum AbuseReportType {
 | 
			
		||||
  copyright(0),
 | 
			
		||||
  harassment(1),
 | 
			
		||||
  impersonation(2),
 | 
			
		||||
  offensiveContent(3),
 | 
			
		||||
  spam(4),
 | 
			
		||||
  privacyViolation(5),
 | 
			
		||||
  illegalContent(6),
 | 
			
		||||
  other(7);
 | 
			
		||||
 | 
			
		||||
  const AbuseReportType(this.value);
 | 
			
		||||
  final int value;
 | 
			
		||||
 | 
			
		||||
  static AbuseReportType fromValue(int value) {
 | 
			
		||||
    return values.firstWhere((e) => e.value == value);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  String get displayName {
 | 
			
		||||
    switch (this) {
 | 
			
		||||
      case AbuseReportType.copyright:
 | 
			
		||||
        return 'Copyright';
 | 
			
		||||
      case AbuseReportType.harassment:
 | 
			
		||||
        return 'Harassment';
 | 
			
		||||
      case AbuseReportType.impersonation:
 | 
			
		||||
        return 'Impersonation';
 | 
			
		||||
      case AbuseReportType.offensiveContent:
 | 
			
		||||
        return 'Offensive Content';
 | 
			
		||||
      case AbuseReportType.spam:
 | 
			
		||||
        return 'Spam';
 | 
			
		||||
      case AbuseReportType.privacyViolation:
 | 
			
		||||
        return 'Privacy Violation';
 | 
			
		||||
      case AbuseReportType.illegalContent:
 | 
			
		||||
        return 'Illegal Content';
 | 
			
		||||
      case AbuseReportType.other:
 | 
			
		||||
        return 'Other';
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -82,6 +81,130 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnActivity].
 | 
			
		||||
extension SnActivityPatterns on SnActivity {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnActivity value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnActivity value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnActivity value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity():
 | 
			
		||||
return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnActivity() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -246,6 +369,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnCheckInResult].
 | 
			
		||||
extension SnCheckInResultPatterns on SnCheckInResult {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnCheckInResult value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnCheckInResult value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnCheckInResult value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult():
 | 
			
		||||
return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCheckInResult() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -413,6 +660,130 @@ as String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnFortuneTip].
 | 
			
		||||
extension SnFortuneTipPatterns on SnFortuneTip {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnFortuneTip value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnFortuneTip value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnFortuneTip value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isPositive,  String title,  String content)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip() when $default != null:
 | 
			
		||||
return $default(_that.isPositive,_that.title,_that.content);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isPositive,  String title,  String content)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip():
 | 
			
		||||
return $default(_that.isPositive,_that.title,_that.content);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isPositive,  String title,  String content)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnFortuneTip() when $default != null:
 | 
			
		||||
return $default(_that.isPositive,_that.title,_that.content);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -564,6 +935,130 @@ $SnCheckInResultCopyWith<$Res>? get checkInResult {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnEventCalendarEntry].
 | 
			
		||||
extension SnEventCalendarEntryPatterns on SnEventCalendarEntry {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnEventCalendarEntry value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnEventCalendarEntry value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnEventCalendarEntry value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry() when $default != null:
 | 
			
		||||
return $default(_that.date,_that.checkInResult,_that.statuses);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry():
 | 
			
		||||
return $default(_that.date,_that.checkInResult,_that.statuses);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnEventCalendarEntry() when $default != null:
 | 
			
		||||
return $default(_that.date,_that.checkInResult,_that.statuses);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -76,6 +75,130 @@ as String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [AppToken].
 | 
			
		||||
extension AppTokenPatterns on AppToken {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _AppToken value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _AppToken value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _AppToken value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String token)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken() when $default != null:
 | 
			
		||||
return $default(_that.token);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String token)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken():
 | 
			
		||||
return $default(_that.token);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String token)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppToken() when $default != null:
 | 
			
		||||
return $default(_that.token);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -227,6 +350,130 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAuthChallenge].
 | 
			
		||||
extension SnAuthChallengePatterns on SnAuthChallenge {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthChallenge value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthChallenge value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthChallenge value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge():
 | 
			
		||||
return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthChallenge() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -432,6 +679,130 @@ $SnAuthChallengeCopyWith<$Res> get challenge {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAuthSession].
 | 
			
		||||
extension SnAuthSessionPatterns on SnAuthSession {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthSession value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthSession value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthSession value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession():
 | 
			
		||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthSession() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -600,6 +971,130 @@ as Map<String, dynamic>?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAuthFactor].
 | 
			
		||||
extension SnAuthFactorPatterns on SnAuthFactor {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthFactor value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthFactor value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthFactor value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor():
 | 
			
		||||
return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthFactor() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -763,6 +1258,130 @@ as bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAuthDevice].
 | 
			
		||||
extension SnAuthDevicePatterns on SnAuthDevice {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthDevice value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthDevice value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthDevice value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice() when $default != null:
 | 
			
		||||
return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice():
 | 
			
		||||
return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAuthDevice() when $default != null:
 | 
			
		||||
return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -921,6 +1540,130 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnAccountConnection].
 | 
			
		||||
extension SnAccountConnectionPatterns on SnAccountConnection {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAccountConnection value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAccountConnection value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAccountConnection value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection():
 | 
			
		||||
return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnAccountConnection() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -100,6 +99,136 @@ as List<AutoCompletionItem>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [AutoCompletionResponse].
 | 
			
		||||
extension AutoCompletionResponsePatterns on AutoCompletionResponse {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( AutoCompletionAccountResponse value)?  account,TResult Function( AutoCompletionStickerResponse value)?  sticker,required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse() when account != null:
 | 
			
		||||
return account(_that);case AutoCompletionStickerResponse() when sticker != null:
 | 
			
		||||
return sticker(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( AutoCompletionAccountResponse value)  account,required TResult Function( AutoCompletionStickerResponse value)  sticker,}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse():
 | 
			
		||||
return account(_that);case AutoCompletionStickerResponse():
 | 
			
		||||
return sticker(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( AutoCompletionAccountResponse value)?  account,TResult? Function( AutoCompletionStickerResponse value)?  sticker,}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse() when account != null:
 | 
			
		||||
return account(_that);case AutoCompletionStickerResponse() when sticker != null:
 | 
			
		||||
return sticker(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String type,  List<AutoCompletionItem> items)?  account,TResult Function( String type,  List<AutoCompletionItem> items)?  sticker,required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse() when account != null:
 | 
			
		||||
return account(_that.type,_that.items);case AutoCompletionStickerResponse() when sticker != null:
 | 
			
		||||
return sticker(_that.type,_that.items);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String type,  List<AutoCompletionItem> items)  account,required TResult Function( String type,  List<AutoCompletionItem> items)  sticker,}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse():
 | 
			
		||||
return account(_that.type,_that.items);case AutoCompletionStickerResponse():
 | 
			
		||||
return sticker(_that.type,_that.items);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String type,  List<AutoCompletionItem> items)?  account,TResult? Function( String type,  List<AutoCompletionItem> items)?  sticker,}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case AutoCompletionAccountResponse() when account != null:
 | 
			
		||||
return account(_that.type,_that.items);case AutoCompletionStickerResponse() when sticker != null:
 | 
			
		||||
return sticker(_that.type,_that.items);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -330,6 +459,130 @@ as dynamic,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [AutoCompletionItem].
 | 
			
		||||
extension AutoCompletionItemPatterns on AutoCompletionItem {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _AutoCompletionItem value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _AutoCompletionItem value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _AutoCompletionItem value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem():
 | 
			
		||||
return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AutoCompletionItem() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -162,8 +162,6 @@ sealed class CallParticipant with _$CallParticipant {
 | 
			
		||||
    required String identity,
 | 
			
		||||
    required String name,
 | 
			
		||||
    required DateTime joinedAt,
 | 
			
		||||
    required String? accountId,
 | 
			
		||||
    required SnChatMember? profile,
 | 
			
		||||
  }) = _CallParticipant;
 | 
			
		||||
 | 
			
		||||
  factory CallParticipant.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -285,11 +285,6 @@ _CallParticipant _$CallParticipantFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      identity: json['identity'] as String,
 | 
			
		||||
      name: json['name'] as String,
 | 
			
		||||
      joinedAt: DateTime.parse(json['joined_at'] as String),
 | 
			
		||||
      accountId: json['account_id'] as String?,
 | 
			
		||||
      profile:
 | 
			
		||||
          json['profile'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : SnChatMember.fromJson(json['profile'] as Map<String, dynamic>),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$CallParticipantToJson(_CallParticipant instance) =>
 | 
			
		||||
@@ -297,8 +292,6 @@ Map<String, dynamic> _$CallParticipantToJson(_CallParticipant instance) =>
 | 
			
		||||
      'identity': instance.identity,
 | 
			
		||||
      'name': instance.name,
 | 
			
		||||
      'joined_at': instance.joinedAt.toIso8601String(),
 | 
			
		||||
      'account_id': instance.accountId,
 | 
			
		||||
      'profile': instance.profile?.toJson(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnRealtimeCall _$SnRealtimeCallFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -147,6 +146,130 @@ $CustomAppLinksCopyWith<$Res>? get links {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CustomApp].
 | 
			
		||||
extension CustomAppPatterns on CustomApp {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CustomApp value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CustomApp value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CustomApp value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp():
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomApp() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -370,6 +493,130 @@ as String?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CustomAppLinks].
 | 
			
		||||
extension CustomAppLinksPatterns on CustomAppLinks {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CustomAppLinks value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CustomAppLinks value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CustomAppLinks value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? homePage,  String? privacyPolicy,  String? termsOfService)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks() when $default != null:
 | 
			
		||||
return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? homePage,  String? privacyPolicy,  String? termsOfService)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks():
 | 
			
		||||
return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? homePage,  String? privacyPolicy,  String? termsOfService)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppLinks() when $default != null:
 | 
			
		||||
return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -513,6 +760,130 @@ as bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CustomAppOauthConfig].
 | 
			
		||||
extension CustomAppOauthConfigPatterns on CustomAppOauthConfig {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CustomAppOauthConfig value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CustomAppOauthConfig value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CustomAppOauthConfig value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig() when $default != null:
 | 
			
		||||
return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig():
 | 
			
		||||
return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppOauthConfig() when $default != null:
 | 
			
		||||
return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -689,6 +1060,130 @@ as String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CustomAppSecret].
 | 
			
		||||
extension CustomAppSecretPatterns on CustomAppSecret {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CustomAppSecret value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CustomAppSecret value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CustomAppSecret value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret():
 | 
			
		||||
return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CustomAppSecret() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -76,6 +75,130 @@ as int,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [DeveloperStats].
 | 
			
		||||
extension DeveloperStatsPatterns on DeveloperStats {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _DeveloperStats value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _DeveloperStats value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _DeveloperStats value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( int totalCustomApps)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats() when $default != null:
 | 
			
		||||
return $default(_that.totalCustomApps);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( int totalCustomApps)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats():
 | 
			
		||||
return $default(_that.totalCustomApps);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( int totalCustomApps)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _DeveloperStats() when $default != null:
 | 
			
		||||
return $default(_that.totalCustomApps);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,25 +3,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
part 'embed.freezed.dart';
 | 
			
		||||
part 'embed.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnEmbedLink with _$SnEmbedLink {
 | 
			
		||||
  const factory SnEmbedLink({
 | 
			
		||||
    @JsonKey(name: 'Type') required String type,
 | 
			
		||||
    @JsonKey(name: 'Url') required String url,
 | 
			
		||||
    @JsonKey(name: 'Title') required String title,
 | 
			
		||||
    @JsonKey(name: 'Description') required String? description,
 | 
			
		||||
    @JsonKey(name: 'ImageUrl') required String? imageUrl,
 | 
			
		||||
    @JsonKey(name: 'FaviconUrl') required String faviconUrl,
 | 
			
		||||
    @JsonKey(name: 'SiteName') required String siteName,
 | 
			
		||||
    @JsonKey(name: 'ContentType') required String? contentType,
 | 
			
		||||
    @JsonKey(name: 'Author') required String? author,
 | 
			
		||||
    @JsonKey(name: 'PublishedDate') required DateTime? publishedDate,
 | 
			
		||||
  }) = _SnEmbedLink;
 | 
			
		||||
 | 
			
		||||
  factory SnEmbedLink.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnEmbedLinkFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnScrappedLink with _$SnScrappedLink {
 | 
			
		||||
  const factory SnScrappedLink({
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -13,166 +12,6 @@ part of 'embed.dart';
 | 
			
		||||
// dart format off
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnEmbedLink {
 | 
			
		||||
 | 
			
		||||
@JsonKey(name: 'Type') String get type;@JsonKey(name: 'Url') String get url;@JsonKey(name: 'Title') String get title;@JsonKey(name: 'Description') String? get description;@JsonKey(name: 'ImageUrl') String? get imageUrl;@JsonKey(name: 'FaviconUrl') String get faviconUrl;@JsonKey(name: 'SiteName') String get siteName;@JsonKey(name: 'ContentType') String? get contentType;@JsonKey(name: 'Author') String? get author;@JsonKey(name: 'PublishedDate') DateTime? get publishedDate;
 | 
			
		||||
/// Create a copy of SnEmbedLink
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnEmbedLinkCopyWith<SnEmbedLink> get copyWith => _$SnEmbedLinkCopyWithImpl<SnEmbedLink>(this as SnEmbedLink, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this SnEmbedLink to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnEmbedLink&&(identical(other.type, type) || other.type == type)&&(identical(other.url, url) || other.url == url)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.imageUrl, imageUrl) || other.imageUrl == imageUrl)&&(identical(other.faviconUrl, faviconUrl) || other.faviconUrl == faviconUrl)&&(identical(other.siteName, siteName) || other.siteName == siteName)&&(identical(other.contentType, contentType) || other.contentType == contentType)&&(identical(other.author, author) || other.author == author)&&(identical(other.publishedDate, publishedDate) || other.publishedDate == publishedDate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,url,title,description,imageUrl,faviconUrl,siteName,contentType,author,publishedDate);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnEmbedLink(type: $type, url: $url, title: $title, description: $description, imageUrl: $imageUrl, faviconUrl: $faviconUrl, siteName: $siteName, contentType: $contentType, author: $author, publishedDate: $publishedDate)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $SnEmbedLinkCopyWith<$Res>  {
 | 
			
		||||
  factory $SnEmbedLinkCopyWith(SnEmbedLink value, $Res Function(SnEmbedLink) _then) = _$SnEmbedLinkCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
@JsonKey(name: 'Type') String type,@JsonKey(name: 'Url') String url,@JsonKey(name: 'Title') String title,@JsonKey(name: 'Description') String? description,@JsonKey(name: 'ImageUrl') String? imageUrl,@JsonKey(name: 'FaviconUrl') String faviconUrl,@JsonKey(name: 'SiteName') String siteName,@JsonKey(name: 'ContentType') String? contentType,@JsonKey(name: 'Author') String? author,@JsonKey(name: 'PublishedDate') DateTime? publishedDate
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$SnEmbedLinkCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnEmbedLinkCopyWith<$Res> {
 | 
			
		||||
  _$SnEmbedLinkCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final SnEmbedLink _self;
 | 
			
		||||
  final $Res Function(SnEmbedLink) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnEmbedLink
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? url = null,Object? title = null,Object? description = freezed,Object? imageUrl = freezed,Object? faviconUrl = null,Object? siteName = null,Object? contentType = freezed,Object? author = freezed,Object? publishedDate = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,url: null == url ? _self.url : url // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,title: null == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,imageUrl: freezed == imageUrl ? _self.imageUrl : imageUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,faviconUrl: null == faviconUrl ? _self.faviconUrl : faviconUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,siteName: null == siteName ? _self.siteName : siteName // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,contentType: freezed == contentType ? _self.contentType : contentType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,author: freezed == author ? _self.author : author // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,publishedDate: freezed == publishedDate ? _self.publishedDate : publishedDate // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnEmbedLink implements SnEmbedLink {
 | 
			
		||||
  const _SnEmbedLink({@JsonKey(name: 'Type') required this.type, @JsonKey(name: 'Url') required this.url, @JsonKey(name: 'Title') required this.title, @JsonKey(name: 'Description') required this.description, @JsonKey(name: 'ImageUrl') required this.imageUrl, @JsonKey(name: 'FaviconUrl') required this.faviconUrl, @JsonKey(name: 'SiteName') required this.siteName, @JsonKey(name: 'ContentType') required this.contentType, @JsonKey(name: 'Author') required this.author, @JsonKey(name: 'PublishedDate') required this.publishedDate});
 | 
			
		||||
  factory _SnEmbedLink.fromJson(Map<String, dynamic> json) => _$SnEmbedLinkFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override@JsonKey(name: 'Type') final  String type;
 | 
			
		||||
@override@JsonKey(name: 'Url') final  String url;
 | 
			
		||||
@override@JsonKey(name: 'Title') final  String title;
 | 
			
		||||
@override@JsonKey(name: 'Description') final  String? description;
 | 
			
		||||
@override@JsonKey(name: 'ImageUrl') final  String? imageUrl;
 | 
			
		||||
@override@JsonKey(name: 'FaviconUrl') final  String faviconUrl;
 | 
			
		||||
@override@JsonKey(name: 'SiteName') final  String siteName;
 | 
			
		||||
@override@JsonKey(name: 'ContentType') final  String? contentType;
 | 
			
		||||
@override@JsonKey(name: 'Author') final  String? author;
 | 
			
		||||
@override@JsonKey(name: 'PublishedDate') final  DateTime? publishedDate;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnEmbedLink
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$SnEmbedLinkCopyWith<_SnEmbedLink> get copyWith => __$SnEmbedLinkCopyWithImpl<_SnEmbedLink>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$SnEmbedLinkToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnEmbedLink&&(identical(other.type, type) || other.type == type)&&(identical(other.url, url) || other.url == url)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.imageUrl, imageUrl) || other.imageUrl == imageUrl)&&(identical(other.faviconUrl, faviconUrl) || other.faviconUrl == faviconUrl)&&(identical(other.siteName, siteName) || other.siteName == siteName)&&(identical(other.contentType, contentType) || other.contentType == contentType)&&(identical(other.author, author) || other.author == author)&&(identical(other.publishedDate, publishedDate) || other.publishedDate == publishedDate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,url,title,description,imageUrl,faviconUrl,siteName,contentType,author,publishedDate);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnEmbedLink(type: $type, url: $url, title: $title, description: $description, imageUrl: $imageUrl, faviconUrl: $faviconUrl, siteName: $siteName, contentType: $contentType, author: $author, publishedDate: $publishedDate)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$SnEmbedLinkCopyWith<$Res> implements $SnEmbedLinkCopyWith<$Res> {
 | 
			
		||||
  factory _$SnEmbedLinkCopyWith(_SnEmbedLink value, $Res Function(_SnEmbedLink) _then) = __$SnEmbedLinkCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
@JsonKey(name: 'Type') String type,@JsonKey(name: 'Url') String url,@JsonKey(name: 'Title') String title,@JsonKey(name: 'Description') String? description,@JsonKey(name: 'ImageUrl') String? imageUrl,@JsonKey(name: 'FaviconUrl') String faviconUrl,@JsonKey(name: 'SiteName') String siteName,@JsonKey(name: 'ContentType') String? contentType,@JsonKey(name: 'Author') String? author,@JsonKey(name: 'PublishedDate') DateTime? publishedDate
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$SnEmbedLinkCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnEmbedLinkCopyWith<$Res> {
 | 
			
		||||
  __$SnEmbedLinkCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _SnEmbedLink _self;
 | 
			
		||||
  final $Res Function(_SnEmbedLink) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnEmbedLink
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? url = null,Object? title = null,Object? description = freezed,Object? imageUrl = freezed,Object? faviconUrl = null,Object? siteName = null,Object? contentType = freezed,Object? author = freezed,Object? publishedDate = freezed,}) {
 | 
			
		||||
  return _then(_SnEmbedLink(
 | 
			
		||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,url: null == url ? _self.url : url // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,title: null == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,imageUrl: freezed == imageUrl ? _self.imageUrl : imageUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,faviconUrl: null == faviconUrl ? _self.faviconUrl : faviconUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,siteName: null == siteName ? _self.siteName : siteName // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,contentType: freezed == contentType ? _self.contentType : contentType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,author: freezed == author ? _self.author : author // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,publishedDate: freezed == publishedDate ? _self.publishedDate : publishedDate // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnScrappedLink {
 | 
			
		||||
 | 
			
		||||
@@ -245,6 +84,130 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnScrappedLink].
 | 
			
		||||
extension SnScrappedLinkPatterns on SnScrappedLink {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnScrappedLink value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnScrappedLink value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnScrappedLink value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink() when $default != null:
 | 
			
		||||
return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink():
 | 
			
		||||
return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnScrappedLink() when $default != null:
 | 
			
		||||
return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,36 +6,6 @@ part of 'embed.dart';
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_SnEmbedLink _$SnEmbedLinkFromJson(Map<String, dynamic> json) => _SnEmbedLink(
 | 
			
		||||
  type: json['Type'] as String,
 | 
			
		||||
  url: json['Url'] as String,
 | 
			
		||||
  title: json['Title'] as String,
 | 
			
		||||
  description: json['Description'] as String?,
 | 
			
		||||
  imageUrl: json['ImageUrl'] as String?,
 | 
			
		||||
  faviconUrl: json['FaviconUrl'] as String,
 | 
			
		||||
  siteName: json['SiteName'] as String,
 | 
			
		||||
  contentType: json['ContentType'] as String?,
 | 
			
		||||
  author: json['Author'] as String?,
 | 
			
		||||
  publishedDate:
 | 
			
		||||
      json['PublishedDate'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : DateTime.parse(json['PublishedDate'] as String),
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnEmbedLinkToJson(_SnEmbedLink instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'Type': instance.type,
 | 
			
		||||
      'Url': instance.url,
 | 
			
		||||
      'Title': instance.title,
 | 
			
		||||
      'Description': instance.description,
 | 
			
		||||
      'ImageUrl': instance.imageUrl,
 | 
			
		||||
      'FaviconUrl': instance.faviconUrl,
 | 
			
		||||
      'SiteName': instance.siteName,
 | 
			
		||||
      'ContentType': instance.contentType,
 | 
			
		||||
      'Author': instance.author,
 | 
			
		||||
      'PublishedDate': instance.publishedDate?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnScrappedLink _$SnScrappedLinkFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnScrappedLink(
 | 
			
		||||
      type: json['type'] as String,
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ sealed class UniversalFile with _$UniversalFile {
 | 
			
		||||
  const factory UniversalFile({
 | 
			
		||||
    required dynamic data,
 | 
			
		||||
    required UniversalFileType type,
 | 
			
		||||
    @Default(false) bool isLink,
 | 
			
		||||
  }) = _UniversalFile;
 | 
			
		||||
 | 
			
		||||
  factory UniversalFile.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
@@ -41,6 +42,7 @@ sealed class SnCloudFile with _$SnCloudFile {
 | 
			
		||||
    required String? description,
 | 
			
		||||
    required Map<String, dynamic>? fileMeta,
 | 
			
		||||
    required Map<String, dynamic>? userMeta,
 | 
			
		||||
    @Default([]) List<int> sensitiveMarks,
 | 
			
		||||
    required String? mimeType,
 | 
			
		||||
    required String? hash,
 | 
			
		||||
    required int size,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -16,7 +15,7 @@ T _$identity<T>(T value) => value;
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$UniversalFile {
 | 
			
		||||
 | 
			
		||||
 dynamic get data; UniversalFileType get type;
 | 
			
		||||
 dynamic get data; UniversalFileType get type; bool get isLink;
 | 
			
		||||
/// Create a copy of UniversalFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -29,16 +28,16 @@ $UniversalFileCopyWith<UniversalFile> get copyWith => _$UniversalFileCopyWithImp
 | 
			
		||||
 | 
			
		||||
@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));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type)&&(identical(other.isLink, isLink) || other.isLink == isLink));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type,isLink);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'UniversalFile(data: $data, type: $type)';
 | 
			
		||||
  return 'UniversalFile(data: $data, type: $type, isLink: $isLink)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +48,7 @@ abstract mixin class $UniversalFileCopyWith<$Res>  {
 | 
			
		||||
  factory $UniversalFileCopyWith(UniversalFile value, $Res Function(UniversalFile) _then) = _$UniversalFileCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 dynamic data, UniversalFileType type
 | 
			
		||||
 dynamic data, UniversalFileType type, bool isLink
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -66,26 +65,152 @@ class _$UniversalFileCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of UniversalFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? data = freezed,Object? type = null,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? data = freezed,Object? type = null,Object? isLink = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as UniversalFileType,
 | 
			
		||||
as UniversalFileType,isLink: null == isLink ? _self.isLink : isLink // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [UniversalFile].
 | 
			
		||||
extension UniversalFilePatterns on UniversalFile {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _UniversalFile value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _UniversalFile value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _UniversalFile value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( dynamic data,  UniversalFileType type,  bool isLink)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile() when $default != null:
 | 
			
		||||
return $default(_that.data,_that.type,_that.isLink);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( dynamic data,  UniversalFileType type,  bool isLink)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile():
 | 
			
		||||
return $default(_that.data,_that.type,_that.isLink);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( dynamic data,  UniversalFileType type,  bool isLink)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _UniversalFile() when $default != null:
 | 
			
		||||
return $default(_that.data,_that.type,_that.isLink);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _UniversalFile extends UniversalFile {
 | 
			
		||||
  const _UniversalFile({required this.data, required this.type}): super._();
 | 
			
		||||
  const _UniversalFile({required this.data, required this.type, this.isLink = false}): super._();
 | 
			
		||||
  factory _UniversalFile.fromJson(Map<String, dynamic> json) => _$UniversalFileFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  dynamic data;
 | 
			
		||||
@override final  UniversalFileType type;
 | 
			
		||||
@override@JsonKey() final  bool isLink;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of UniversalFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@@ -100,16 +225,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@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));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type)&&(identical(other.isLink, isLink) || other.isLink == isLink));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type,isLink);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'UniversalFile(data: $data, type: $type)';
 | 
			
		||||
  return 'UniversalFile(data: $data, type: $type, isLink: $isLink)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -120,7 +245,7 @@ abstract mixin class _$UniversalFileCopyWith<$Res> implements $UniversalFileCopy
 | 
			
		||||
  factory _$UniversalFileCopyWith(_UniversalFile value, $Res Function(_UniversalFile) _then) = __$UniversalFileCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 dynamic data, UniversalFileType type
 | 
			
		||||
 dynamic data, UniversalFileType type, bool isLink
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -137,11 +262,12 @@ class __$UniversalFileCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of UniversalFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? data = freezed,Object? type = null,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? data = freezed,Object? type = null,Object? isLink = null,}) {
 | 
			
		||||
  return _then(_UniversalFile(
 | 
			
		||||
data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as UniversalFileType,
 | 
			
		||||
as UniversalFileType,isLink: null == isLink ? _self.isLink : isLink // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -152,7 +278,7 @@ as UniversalFileType,
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnCloudFile {
 | 
			
		||||
 | 
			
		||||
 String get id; String get name; String? get description; Map<String, dynamic>? get fileMeta; Map<String, dynamic>? get userMeta; String? get mimeType; String? get hash; int get size; DateTime? get uploadedAt; String? get uploadedTo; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
 String get id; String get name; String? get description; Map<String, dynamic>? get fileMeta; Map<String, dynamic>? get userMeta; List<int> get sensitiveMarks; String? get mimeType; String? get hash; int get size; DateTime? get uploadedAt; String? get uploadedTo; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
/// Create a copy of SnCloudFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -165,16 +291,16 @@ $SnCloudFileCopyWith<SnCloudFile> get copyWith => _$SnCloudFileCopyWithImpl<SnCl
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other.fileMeta, fileMeta)&&const DeepCollectionEquality().equals(other.userMeta, userMeta)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other.fileMeta, fileMeta)&&const DeepCollectionEquality().equals(other.userMeta, userMeta)&&const DeepCollectionEquality().equals(other.sensitiveMarks, sensitiveMarks)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(fileMeta),const DeepCollectionEquality().hash(userMeta),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(fileMeta),const DeepCollectionEquality().hash(userMeta),const DeepCollectionEquality().hash(sensitiveMarks),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, sensitiveMarks: $sensitiveMarks, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -185,7 +311,7 @@ abstract mixin class $SnCloudFileCopyWith<$Res>  {
 | 
			
		||||
  factory $SnCloudFileCopyWith(SnCloudFile value, $Res Function(SnCloudFile) _then) = _$SnCloudFileCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, List<int> sensitiveMarks, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -202,14 +328,15 @@ class _$SnCloudFileCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnCloudFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? sensitiveMarks = null,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,fileMeta: freezed == fileMeta ? _self.fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self.userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,sensitiveMarks: null == sensitiveMarks ? _self.sensitiveMarks : sensitiveMarks // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<int>,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -224,11 +351,135 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnCloudFile].
 | 
			
		||||
extension SnCloudFilePatterns on SnCloudFile {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnCloudFile value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnCloudFile value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnCloudFile value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile():
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnCloudFile() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnCloudFile implements SnCloudFile {
 | 
			
		||||
  const _SnCloudFile({required this.id, required this.name, required this.description, required final  Map<String, dynamic>? fileMeta, required final  Map<String, dynamic>? userMeta, required this.mimeType, required this.hash, required this.size, required this.uploadedAt, required this.uploadedTo, required this.createdAt, required this.updatedAt, required this.deletedAt}): _fileMeta = fileMeta,_userMeta = userMeta;
 | 
			
		||||
  const _SnCloudFile({required this.id, required this.name, required this.description, required final  Map<String, dynamic>? fileMeta, required final  Map<String, dynamic>? userMeta, final  List<int> sensitiveMarks = const [], required this.mimeType, required this.hash, required this.size, required this.uploadedAt, required this.uploadedTo, required this.createdAt, required this.updatedAt, required this.deletedAt}): _fileMeta = fileMeta,_userMeta = userMeta,_sensitiveMarks = sensitiveMarks;
 | 
			
		||||
  factory _SnCloudFile.fromJson(Map<String, dynamic> json) => _$SnCloudFileFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@@ -252,6 +503,13 @@ class _SnCloudFile implements SnCloudFile {
 | 
			
		||||
  return EqualUnmodifiableMapView(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 final  List<int> _sensitiveMarks;
 | 
			
		||||
@override@JsonKey() List<int> get sensitiveMarks {
 | 
			
		||||
  if (_sensitiveMarks is EqualUnmodifiableListView) return _sensitiveMarks;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableListView(_sensitiveMarks);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override final  String? mimeType;
 | 
			
		||||
@override final  String? hash;
 | 
			
		||||
@override final  int size;
 | 
			
		||||
@@ -274,16 +532,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other._fileMeta, _fileMeta)&&const DeepCollectionEquality().equals(other._userMeta, _userMeta)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other._fileMeta, _fileMeta)&&const DeepCollectionEquality().equals(other._userMeta, _userMeta)&&const DeepCollectionEquality().equals(other._sensitiveMarks, _sensitiveMarks)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(_fileMeta),const DeepCollectionEquality().hash(_userMeta),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(_fileMeta),const DeepCollectionEquality().hash(_userMeta),const DeepCollectionEquality().hash(_sensitiveMarks),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, sensitiveMarks: $sensitiveMarks, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -294,7 +552,7 @@ abstract mixin class _$SnCloudFileCopyWith<$Res> implements $SnCloudFileCopyWith
 | 
			
		||||
  factory _$SnCloudFileCopyWith(_SnCloudFile value, $Res Function(_SnCloudFile) _then) = __$SnCloudFileCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, List<int> sensitiveMarks, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -311,14 +569,15 @@ class __$SnCloudFileCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnCloudFile
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? sensitiveMarks = null,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
  return _then(_SnCloudFile(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,fileMeta: freezed == fileMeta ? _self._fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self._userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,sensitiveMarks: null == sensitiveMarks ? _self._sensitiveMarks : sensitiveMarks // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<int>,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
 
 | 
			
		||||
@@ -10,12 +10,14 @@ _UniversalFile _$UniversalFileFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _UniversalFile(
 | 
			
		||||
      data: json['data'],
 | 
			
		||||
      type: $enumDecode(_$UniversalFileTypeEnumMap, json['type']),
 | 
			
		||||
      isLink: json['is_link'] as bool? ?? false,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$UniversalFileToJson(_UniversalFile instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'data': instance.data,
 | 
			
		||||
      'type': _$UniversalFileTypeEnumMap[instance.type]!,
 | 
			
		||||
      'is_link': instance.isLink,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
const _$UniversalFileTypeEnumMap = {
 | 
			
		||||
@@ -31,6 +33,11 @@ _SnCloudFile _$SnCloudFileFromJson(Map<String, dynamic> json) => _SnCloudFile(
 | 
			
		||||
  description: json['description'] as String?,
 | 
			
		||||
  fileMeta: json['file_meta'] as Map<String, dynamic>?,
 | 
			
		||||
  userMeta: json['user_meta'] as Map<String, dynamic>?,
 | 
			
		||||
  sensitiveMarks:
 | 
			
		||||
      (json['sensitive_marks'] as List<dynamic>?)
 | 
			
		||||
          ?.map((e) => (e as num).toInt())
 | 
			
		||||
          .toList() ??
 | 
			
		||||
      const [],
 | 
			
		||||
  mimeType: json['mime_type'] as String?,
 | 
			
		||||
  hash: json['hash'] as String?,
 | 
			
		||||
  size: (json['size'] as num).toInt(),
 | 
			
		||||
@@ -54,6 +61,7 @@ Map<String, dynamic> _$SnCloudFileToJson(_SnCloudFile instance) =>
 | 
			
		||||
      'description': instance.description,
 | 
			
		||||
      'file_meta': instance.fileMeta,
 | 
			
		||||
      'user_meta': instance.userMeta,
 | 
			
		||||
      'sensitive_marks': instance.sensitiveMarks,
 | 
			
		||||
      'mime_type': instance.mimeType,
 | 
			
		||||
      'hash': instance.hash,
 | 
			
		||||
      'size': instance.size,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/publisher.dart';
 | 
			
		||||
 | 
			
		||||
part 'poll.freezed.dart';
 | 
			
		||||
part 'poll.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnPollWithStats with _$SnPollWithStats {
 | 
			
		||||
  const factory SnPollWithStats({
 | 
			
		||||
    required Map<String, dynamic>? userAnswer,
 | 
			
		||||
    required Map<String, dynamic> stats,
 | 
			
		||||
    required String id,
 | 
			
		||||
    required List<SnPollQuestion> questions,
 | 
			
		||||
    String? title,
 | 
			
		||||
    String? description,
 | 
			
		||||
    DateTime? endedAt,
 | 
			
		||||
    required String publisherId,
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    DateTime? deletedAt,
 | 
			
		||||
  }) = _SnPollWithStats;
 | 
			
		||||
 | 
			
		||||
  factory SnPollWithStats.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPollWithStatsFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnPoll with _$SnPoll {
 | 
			
		||||
  const factory SnPoll({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required List<SnPollQuestion> questions,
 | 
			
		||||
 | 
			
		||||
    String? title,
 | 
			
		||||
    String? description,
 | 
			
		||||
 | 
			
		||||
    DateTime? endedAt,
 | 
			
		||||
 | 
			
		||||
    required String publisherId,
 | 
			
		||||
    SnPublisher? publisher,
 | 
			
		||||
 | 
			
		||||
    // ModelBase fields
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    DateTime? deletedAt,
 | 
			
		||||
  }) = _SnPoll;
 | 
			
		||||
 | 
			
		||||
  factory SnPoll.fromJson(Map<String, dynamic> json) => _$SnPollFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnPollQuestion with _$SnPollQuestion {
 | 
			
		||||
  const factory SnPollQuestion({
 | 
			
		||||
    required String id,
 | 
			
		||||
 | 
			
		||||
    required SnPollQuestionType type,
 | 
			
		||||
    List<SnPollOption>? options,
 | 
			
		||||
 | 
			
		||||
    required String title,
 | 
			
		||||
    String? description,
 | 
			
		||||
    required int order,
 | 
			
		||||
    required bool isRequired,
 | 
			
		||||
  }) = _SnPollQuestion;
 | 
			
		||||
 | 
			
		||||
  factory SnPollQuestion.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPollQuestionFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnPollOption with _$SnPollOption {
 | 
			
		||||
  const factory SnPollOption({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String label,
 | 
			
		||||
    String? description,
 | 
			
		||||
    required int order,
 | 
			
		||||
  }) = _SnPollOption;
 | 
			
		||||
 | 
			
		||||
  factory SnPollOption.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPollOptionFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum SnPollQuestionType {
 | 
			
		||||
  @JsonValue(0)
 | 
			
		||||
  singleChoice,
 | 
			
		||||
  @JsonValue(1)
 | 
			
		||||
  multipleChoice,
 | 
			
		||||
  @JsonValue(2)
 | 
			
		||||
  yesNo,
 | 
			
		||||
  @JsonValue(3)
 | 
			
		||||
  rating,
 | 
			
		||||
  @JsonValue(4)
 | 
			
		||||
  freeText,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1186
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1186
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										133
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
 | 
			
		||||
part of 'poll.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_SnPollWithStats _$SnPollWithStatsFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnPollWithStats(
 | 
			
		||||
      userAnswer: json['user_answer'] as Map<String, dynamic>?,
 | 
			
		||||
      stats: json['stats'] as Map<String, dynamic>,
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      questions:
 | 
			
		||||
          (json['questions'] as List<dynamic>)
 | 
			
		||||
              .map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
              .toList(),
 | 
			
		||||
      title: json['title'] as String?,
 | 
			
		||||
      description: json['description'] as String?,
 | 
			
		||||
      endedAt:
 | 
			
		||||
          json['ended_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['ended_at'] as String),
 | 
			
		||||
      publisherId: json['publisher_id'] as String,
 | 
			
		||||
      createdAt: DateTime.parse(json['created_at'] as String),
 | 
			
		||||
      updatedAt: DateTime.parse(json['updated_at'] as String),
 | 
			
		||||
      deletedAt:
 | 
			
		||||
          json['deleted_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['deleted_at'] as String),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnPollWithStatsToJson(_SnPollWithStats instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'user_answer': instance.userAnswer,
 | 
			
		||||
      'stats': instance.stats,
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'questions': instance.questions.map((e) => e.toJson()).toList(),
 | 
			
		||||
      'title': instance.title,
 | 
			
		||||
      'description': instance.description,
 | 
			
		||||
      'ended_at': instance.endedAt?.toIso8601String(),
 | 
			
		||||
      'publisher_id': instance.publisherId,
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnPoll _$SnPollFromJson(Map<String, dynamic> json) => _SnPoll(
 | 
			
		||||
  id: json['id'] as String,
 | 
			
		||||
  questions:
 | 
			
		||||
      (json['questions'] as List<dynamic>)
 | 
			
		||||
          .map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          .toList(),
 | 
			
		||||
  title: json['title'] as String?,
 | 
			
		||||
  description: json['description'] as String?,
 | 
			
		||||
  endedAt:
 | 
			
		||||
      json['ended_at'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : DateTime.parse(json['ended_at'] as String),
 | 
			
		||||
  publisherId: json['publisher_id'] as String,
 | 
			
		||||
  publisher:
 | 
			
		||||
      json['publisher'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
 | 
			
		||||
  createdAt: DateTime.parse(json['created_at'] as String),
 | 
			
		||||
  updatedAt: DateTime.parse(json['updated_at'] as String),
 | 
			
		||||
  deletedAt:
 | 
			
		||||
      json['deleted_at'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : DateTime.parse(json['deleted_at'] as String),
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnPollToJson(_SnPoll instance) => <String, dynamic>{
 | 
			
		||||
  'id': instance.id,
 | 
			
		||||
  'questions': instance.questions.map((e) => e.toJson()).toList(),
 | 
			
		||||
  'title': instance.title,
 | 
			
		||||
  'description': instance.description,
 | 
			
		||||
  'ended_at': instance.endedAt?.toIso8601String(),
 | 
			
		||||
  'publisher_id': instance.publisherId,
 | 
			
		||||
  'publisher': instance.publisher?.toJson(),
 | 
			
		||||
  'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
  'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
  'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
_SnPollQuestion _$SnPollQuestionFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnPollQuestion(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      type: $enumDecode(_$SnPollQuestionTypeEnumMap, json['type']),
 | 
			
		||||
      options:
 | 
			
		||||
          (json['options'] as List<dynamic>?)
 | 
			
		||||
              ?.map((e) => SnPollOption.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
              .toList(),
 | 
			
		||||
      title: json['title'] as String,
 | 
			
		||||
      description: json['description'] as String?,
 | 
			
		||||
      order: (json['order'] as num).toInt(),
 | 
			
		||||
      isRequired: json['is_required'] as bool,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnPollQuestionToJson(_SnPollQuestion instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'type': _$SnPollQuestionTypeEnumMap[instance.type]!,
 | 
			
		||||
      'options': instance.options?.map((e) => e.toJson()).toList(),
 | 
			
		||||
      'title': instance.title,
 | 
			
		||||
      'description': instance.description,
 | 
			
		||||
      'order': instance.order,
 | 
			
		||||
      'is_required': instance.isRequired,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
const _$SnPollQuestionTypeEnumMap = {
 | 
			
		||||
  SnPollQuestionType.singleChoice: 0,
 | 
			
		||||
  SnPollQuestionType.multipleChoice: 1,
 | 
			
		||||
  SnPollQuestionType.yesNo: 2,
 | 
			
		||||
  SnPollQuestionType.rating: 3,
 | 
			
		||||
  SnPollQuestionType.freeText: 4,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
_SnPollOption _$SnPollOptionFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnPollOption(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      label: json['label'] as String,
 | 
			
		||||
      description: json['description'] as String?,
 | 
			
		||||
      order: (json['order'] as num).toInt(),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnPollOptionToJson(_SnPollOption instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'label': instance.label,
 | 
			
		||||
      'description': instance.description,
 | 
			
		||||
      'order': instance.order,
 | 
			
		||||
    };
 | 
			
		||||
@@ -34,6 +34,7 @@ sealed class SnPost with _$SnPost {
 | 
			
		||||
    @Default([]) List<SnCloudFile> attachments,
 | 
			
		||||
    required SnPublisher publisher,
 | 
			
		||||
    @Default({}) Map<String, int> reactionsCount,
 | 
			
		||||
    @Default({}) Map<String, bool> reactionsMade,
 | 
			
		||||
    @Default([]) List<dynamic> reactions,
 | 
			
		||||
    @Default([]) List<PostTag> tags,
 | 
			
		||||
    @Default([]) List<PostCategory> categories,
 | 
			
		||||
@@ -77,6 +78,13 @@ sealed class SnSubscriptionStatus with _$SnSubscriptionStatus {
 | 
			
		||||
sealed class ReactInfo with _$ReactInfo {
 | 
			
		||||
  const factory ReactInfo({required String icon, required int attitude}) =
 | 
			
		||||
      _ReactInfo;
 | 
			
		||||
 | 
			
		||||
  static String getTranslationKey(String templateKey) {
 | 
			
		||||
    final parts = templateKey.split('_');
 | 
			
		||||
    final camelCase =
 | 
			
		||||
        parts.map((p) => p[0].toUpperCase() + p.substring(1)).join();
 | 
			
		||||
    return 'reaction$camelCase';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Map<String, ReactInfo> kReactionTemplates = {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -16,7 +15,7 @@ T _$identity<T>(T value) => value;
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnPost {
 | 
			
		||||
 | 
			
		||||
 String get id; String? get title; String? get description; String? get language; DateTime? get editedAt; DateTime? get publishedAt; int get visibility; String? get content; int get type; Map<String, dynamic>? get meta; int get viewsUnique; int get viewsTotal; int get upvotes; int get downvotes; int get repliesCount; String? get threadedPostId; SnPost? get threadedPost; String? get repliedPostId; SnPost? get repliedPost; String? get forwardedPostId; SnPost? get forwardedPost; List<SnCloudFile> get attachments; SnPublisher get publisher; Map<String, int> get reactionsCount; List<dynamic> get reactions; List<PostTag> get tags; List<PostCategory> get categories; List<dynamic> get collections; DateTime? get createdAt; DateTime? get updatedAt; DateTime? get deletedAt; bool get isTruncated;
 | 
			
		||||
 String get id; String? get title; String? get description; String? get language; DateTime? get editedAt; DateTime? get publishedAt; int get visibility; String? get content; int get type; Map<String, dynamic>? get meta; int get viewsUnique; int get viewsTotal; int get upvotes; int get downvotes; int get repliesCount; String? get threadedPostId; SnPost? get threadedPost; String? get repliedPostId; SnPost? get repliedPost; String? get forwardedPostId; SnPost? get forwardedPost; List<SnCloudFile> get attachments; SnPublisher get publisher; Map<String, int> get reactionsCount; Map<String, bool> get reactionsMade; List<dynamic> get reactions; List<PostTag> get tags; List<PostCategory> get categories; List<dynamic> get collections; DateTime? get createdAt; DateTime? get updatedAt; DateTime? get deletedAt; bool get isTruncated;
 | 
			
		||||
/// Create a copy of SnPost
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -29,16 +28,16 @@ $SnPostCopyWith<SnPost> get copyWith => _$SnPostCopyWithImpl<SnPost>(this as SnP
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.meta, meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other.attachments, attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other.reactionsCount, reactionsCount)&&const DeepCollectionEquality().equals(other.reactions, reactions)&&const DeepCollectionEquality().equals(other.tags, tags)&&const DeepCollectionEquality().equals(other.categories, categories)&&const DeepCollectionEquality().equals(other.collections, collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.meta, meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other.attachments, attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other.reactionsCount, reactionsCount)&&const DeepCollectionEquality().equals(other.reactionsMade, reactionsMade)&&const DeepCollectionEquality().equals(other.reactions, reactions)&&const DeepCollectionEquality().equals(other.tags, tags)&&const DeepCollectionEquality().equals(other.categories, categories)&&const DeepCollectionEquality().equals(other.collections, collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(attachments),publisher,const DeepCollectionEquality().hash(reactionsCount),const DeepCollectionEquality().hash(reactions),const DeepCollectionEquality().hash(tags),const DeepCollectionEquality().hash(categories),const DeepCollectionEquality().hash(collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
			
		||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(attachments),publisher,const DeepCollectionEquality().hash(reactionsCount),const DeepCollectionEquality().hash(reactionsMade),const DeepCollectionEquality().hash(reactions),const DeepCollectionEquality().hash(tags),const DeepCollectionEquality().hash(categories),const DeepCollectionEquality().hash(collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
			
		||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactionsMade: $reactionsMade, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +48,7 @@ abstract mixin class $SnPostCopyWith<$Res>  {
 | 
			
		||||
  factory $SnPostCopyWith(SnPost value, $Res Function(SnPost) _then) = _$SnPostCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +65,7 @@ class _$SnPostCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnPost
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactionsMade = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -92,7 +91,8 @@ as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwa
 | 
			
		||||
as SnPost?,attachments: null == attachments ? _self.attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPublisher,reactionsCount: null == reactionsCount ? _self.reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, int>,reactions: null == reactions ? _self.reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, int>,reactionsMade: null == reactionsMade ? _self.reactionsMade : reactionsMade // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, bool>,reactions: null == reactions ? _self.reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,tags: null == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<PostTag>,categories: null == categories ? _self.categories : categories // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<PostCategory>,collections: null == collections ? _self.collections : collections // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -152,11 +152,135 @@ $SnPublisherCopyWith<$Res> get publisher {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPost].
 | 
			
		||||
extension SnPostPatterns on SnPost {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnPost value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnPost value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnPost value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost():
 | 
			
		||||
return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPost() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnPost implements SnPost {
 | 
			
		||||
  const _SnPost({required this.id, this.title, this.description, this.language, this.editedAt, this.publishedAt = null, this.visibility = 0, this.content, this.type = 0, final  Map<String, dynamic>? meta, this.viewsUnique = 0, this.viewsTotal = 0, this.upvotes = 0, this.downvotes = 0, this.repliesCount = 0, this.threadedPostId, this.threadedPost, this.repliedPostId, this.repliedPost, this.forwardedPostId, this.forwardedPost, final  List<SnCloudFile> attachments = const [], required this.publisher, final  Map<String, int> reactionsCount = const {}, final  List<dynamic> reactions = const [], final  List<PostTag> tags = const [], final  List<PostCategory> categories = const [], final  List<dynamic> collections = const [], this.createdAt = null, this.updatedAt = null, this.deletedAt, this.isTruncated = false}): _meta = meta,_attachments = attachments,_reactionsCount = reactionsCount,_reactions = reactions,_tags = tags,_categories = categories,_collections = collections;
 | 
			
		||||
  const _SnPost({required this.id, this.title, this.description, this.language, this.editedAt, this.publishedAt = null, this.visibility = 0, this.content, this.type = 0, final  Map<String, dynamic>? meta, this.viewsUnique = 0, this.viewsTotal = 0, this.upvotes = 0, this.downvotes = 0, this.repliesCount = 0, this.threadedPostId, this.threadedPost, this.repliedPostId, this.repliedPost, this.forwardedPostId, this.forwardedPost, final  List<SnCloudFile> attachments = const [], required this.publisher, final  Map<String, int> reactionsCount = const {}, final  Map<String, bool> reactionsMade = const {}, final  List<dynamic> reactions = const [], final  List<PostTag> tags = const [], final  List<PostCategory> categories = const [], final  List<dynamic> collections = const [], this.createdAt = null, this.updatedAt = null, this.deletedAt, this.isTruncated = false}): _meta = meta,_attachments = attachments,_reactionsCount = reactionsCount,_reactionsMade = reactionsMade,_reactions = reactions,_tags = tags,_categories = categories,_collections = collections;
 | 
			
		||||
  factory _SnPost.fromJson(Map<String, dynamic> json) => _$SnPostFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@@ -203,6 +327,13 @@ class _SnPost implements SnPost {
 | 
			
		||||
  return EqualUnmodifiableMapView(_reactionsCount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 final  Map<String, bool> _reactionsMade;
 | 
			
		||||
@override@JsonKey() Map<String, bool> get reactionsMade {
 | 
			
		||||
  if (_reactionsMade is EqualUnmodifiableMapView) return _reactionsMade;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableMapView(_reactionsMade);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 final  List<dynamic> _reactions;
 | 
			
		||||
@override@JsonKey() List<dynamic> get reactions {
 | 
			
		||||
  if (_reactions is EqualUnmodifiableListView) return _reactions;
 | 
			
		||||
@@ -249,16 +380,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._meta, _meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other._attachments, _attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other._reactionsCount, _reactionsCount)&&const DeepCollectionEquality().equals(other._reactions, _reactions)&&const DeepCollectionEquality().equals(other._tags, _tags)&&const DeepCollectionEquality().equals(other._categories, _categories)&&const DeepCollectionEquality().equals(other._collections, _collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._meta, _meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other._attachments, _attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other._reactionsCount, _reactionsCount)&&const DeepCollectionEquality().equals(other._reactionsMade, _reactionsMade)&&const DeepCollectionEquality().equals(other._reactions, _reactions)&&const DeepCollectionEquality().equals(other._tags, _tags)&&const DeepCollectionEquality().equals(other._categories, _categories)&&const DeepCollectionEquality().equals(other._collections, _collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(_meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(_attachments),publisher,const DeepCollectionEquality().hash(_reactionsCount),const DeepCollectionEquality().hash(_reactions),const DeepCollectionEquality().hash(_tags),const DeepCollectionEquality().hash(_categories),const DeepCollectionEquality().hash(_collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
			
		||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(_meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(_attachments),publisher,const DeepCollectionEquality().hash(_reactionsCount),const DeepCollectionEquality().hash(_reactionsMade),const DeepCollectionEquality().hash(_reactions),const DeepCollectionEquality().hash(_tags),const DeepCollectionEquality().hash(_categories),const DeepCollectionEquality().hash(_collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
			
		||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactionsMade: $reactionsMade, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -269,7 +400,7 @@ abstract mixin class _$SnPostCopyWith<$Res> implements $SnPostCopyWith<$Res> {
 | 
			
		||||
  factory _$SnPostCopyWith(_SnPost value, $Res Function(_SnPost) _then) = __$SnPostCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -286,7 +417,7 @@ class __$SnPostCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnPost
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactionsMade = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
			
		||||
  return _then(_SnPost(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -312,7 +443,8 @@ as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwa
 | 
			
		||||
as SnPost?,attachments: null == attachments ? _self._attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPublisher,reactionsCount: null == reactionsCount ? _self._reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, int>,reactions: null == reactions ? _self._reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, int>,reactionsMade: null == reactionsMade ? _self._reactionsMade : reactionsMade // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, bool>,reactions: null == reactions ? _self._reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,tags: null == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<PostTag>,categories: null == categories ? _self._categories : categories // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<PostCategory>,collections: null == collections ? _self._collections : collections // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -440,6 +572,130 @@ as int,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPublisherStats].
 | 
			
		||||
extension SnPublisherStatsPatterns on SnPublisherStats {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnPublisherStats value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnPublisherStats value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnPublisherStats value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats() when $default != null:
 | 
			
		||||
return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats():
 | 
			
		||||
return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherStats() when $default != null:
 | 
			
		||||
return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -583,6 +839,130 @@ as String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnSubscriptionStatus].
 | 
			
		||||
extension SnSubscriptionStatusPatterns on SnSubscriptionStatus {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnSubscriptionStatus value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnSubscriptionStatus value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnSubscriptionStatus value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isSubscribed,  String publisherId,  String publisherName)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus() when $default != null:
 | 
			
		||||
return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isSubscribed,  String publisherId,  String publisherName)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus():
 | 
			
		||||
return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isSubscribed,  String publisherId,  String publisherName)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSubscriptionStatus() when $default != null:
 | 
			
		||||
return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -718,6 +1098,130 @@ as int,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [ReactInfo].
 | 
			
		||||
extension ReactInfoPatterns on ReactInfo {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _ReactInfo value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _ReactInfo value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _ReactInfo value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String icon,  int attitude)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo() when $default != null:
 | 
			
		||||
return $default(_that.icon,_that.attitude);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String icon,  int attitude)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo():
 | 
			
		||||
return $default(_that.icon,_that.attitude);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String icon,  int attitude)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _ReactInfo() when $default != null:
 | 
			
		||||
return $default(_that.icon,_that.attitude);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,11 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
 | 
			
		||||
        (k, e) => MapEntry(k, (e as num).toInt()),
 | 
			
		||||
      ) ??
 | 
			
		||||
      const {},
 | 
			
		||||
  reactionsMade:
 | 
			
		||||
      (json['reactions_made'] as Map<String, dynamic>?)?.map(
 | 
			
		||||
        (k, e) => MapEntry(k, e as bool),
 | 
			
		||||
      ) ??
 | 
			
		||||
      const {},
 | 
			
		||||
  reactions: json['reactions'] as List<dynamic>? ?? const [],
 | 
			
		||||
  tags:
 | 
			
		||||
      (json['tags'] as List<dynamic>?)
 | 
			
		||||
@@ -106,6 +111,7 @@ Map<String, dynamic> _$SnPostToJson(_SnPost instance) => <String, dynamic>{
 | 
			
		||||
  'attachments': instance.attachments.map((e) => e.toJson()).toList(),
 | 
			
		||||
  'publisher': instance.publisher.toJson(),
 | 
			
		||||
  'reactions_count': instance.reactionsCount,
 | 
			
		||||
  'reactions_made': instance.reactionsMade,
 | 
			
		||||
  'reactions': instance.reactions,
 | 
			
		||||
  'tags': instance.tags.map((e) => e.toJson()).toList(),
 | 
			
		||||
  'categories': instance.categories.map((e) => e.toJson()).toList(),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -79,6 +78,130 @@ as List<SnPost>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [PostCategory].
 | 
			
		||||
extension PostCategoryPatterns on PostCategory {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _PostCategory value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _PostCategory value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _PostCategory value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory():
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostCategory() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -79,6 +78,130 @@ as List<SnPost>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [PostTag].
 | 
			
		||||
extension PostTagPatterns on PostTag {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _PostTag value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _PostTag value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _PostTag value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag():
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _PostTag() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +136,130 @@ $SnVerificationMarkCopyWith<$Res>? get verification {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPublisher].
 | 
			
		||||
extension SnPublisherPatterns on SnPublisher {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnPublisher value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnPublisher value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnPublisher value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher():
 | 
			
		||||
return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisher() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -376,6 +499,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPublisherMember].
 | 
			
		||||
extension SnPublisherMemberPatterns on SnPublisherMember {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnPublisherMember value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnPublisherMember value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnPublisherMember value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember() when $default != null:
 | 
			
		||||
return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember():
 | 
			
		||||
return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPublisherMember() when $default != null:
 | 
			
		||||
return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -113,6 +112,130 @@ $SnCloudFileCopyWith<$Res>? get background {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnRealm].
 | 
			
		||||
extension SnRealmPatterns on SnRealm {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnRealm value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnRealm value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnRealm value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm():
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealm() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -328,6 +451,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnRealmMember].
 | 
			
		||||
extension SnRealmMemberPatterns on SnRealmMember {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnRealmMember value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnRealmMember value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnRealmMember value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember() when $default != null:
 | 
			
		||||
return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember():
 | 
			
		||||
return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRealmMember() when $default != null:
 | 
			
		||||
return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -102,6 +101,130 @@ $SnAccountCopyWith<$Res> get related {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnRelationship].
 | 
			
		||||
extension SnRelationshipPatterns on SnRelationship {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnRelationship value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnRelationship value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnRelationship value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship() when $default != null:
 | 
			
		||||
return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship():
 | 
			
		||||
return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnRelationship() when $default != null:
 | 
			
		||||
return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -105,6 +104,130 @@ $SnStickerPackCopyWith<$Res>? get pack {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnSticker].
 | 
			
		||||
extension SnStickerPatterns on SnSticker {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnSticker value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnSticker value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnSticker value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker():
 | 
			
		||||
return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnSticker() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -295,6 +418,130 @@ $SnPublisherCopyWith<$Res>? get publisher {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnStickerPack].
 | 
			
		||||
extension SnStickerPackPatterns on SnStickerPack {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnStickerPack value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnStickerPack value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnStickerPack value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack():
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnStickerPack() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ sealed class SnAccount with _$SnAccount {
 | 
			
		||||
    required String language,
 | 
			
		||||
    required bool isSuperuser,
 | 
			
		||||
    required SnAccountProfile profile,
 | 
			
		||||
    required SnWalletSubscriptionRef? perkSubscription,
 | 
			
		||||
    @Default([]) List<SnAccountBadge> badges,
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
@@ -45,7 +46,6 @@ sealed class SnAccountProfile with _$SnAccountProfile {
 | 
			
		||||
    required SnCloudFile? picture,
 | 
			
		||||
    required SnCloudFile? background,
 | 
			
		||||
    required SnVerificationMark? verification,
 | 
			
		||||
    required SnWalletSubscriptionRef? stellarMembership,
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    required DateTime? deletedAt,
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -13,6 +13,12 @@ _SnAccount _$SnAccountFromJson(Map<String, dynamic> json) => _SnAccount(
 | 
			
		||||
  language: json['language'] as String,
 | 
			
		||||
  isSuperuser: json['is_superuser'] as bool,
 | 
			
		||||
  profile: SnAccountProfile.fromJson(json['profile'] as Map<String, dynamic>),
 | 
			
		||||
  perkSubscription:
 | 
			
		||||
      json['perk_subscription'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : SnWalletSubscriptionRef.fromJson(
 | 
			
		||||
            json['perk_subscription'] as Map<String, dynamic>,
 | 
			
		||||
          ),
 | 
			
		||||
  badges:
 | 
			
		||||
      (json['badges'] as List<dynamic>?)
 | 
			
		||||
          ?.map((e) => SnAccountBadge.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
@@ -34,6 +40,7 @@ Map<String, dynamic> _$SnAccountToJson(_SnAccount instance) =>
 | 
			
		||||
      'language': instance.language,
 | 
			
		||||
      'is_superuser': instance.isSuperuser,
 | 
			
		||||
      'profile': instance.profile.toJson(),
 | 
			
		||||
      'perk_subscription': instance.perkSubscription?.toJson(),
 | 
			
		||||
      'badges': instance.badges.map((e) => e.toJson()).toList(),
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
@@ -84,12 +91,6 @@ _SnAccountProfile _$SnAccountProfileFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
              : SnVerificationMark.fromJson(
 | 
			
		||||
                json['verification'] as Map<String, dynamic>,
 | 
			
		||||
              ),
 | 
			
		||||
      stellarMembership:
 | 
			
		||||
          json['stellar_membership'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : SnWalletSubscriptionRef.fromJson(
 | 
			
		||||
                json['stellar_membership'] as Map<String, dynamic>,
 | 
			
		||||
              ),
 | 
			
		||||
      createdAt: DateTime.parse(json['created_at'] as String),
 | 
			
		||||
      updatedAt: DateTime.parse(json['updated_at'] as String),
 | 
			
		||||
      deletedAt:
 | 
			
		||||
@@ -118,7 +119,6 @@ Map<String, dynamic> _$SnAccountProfileToJson(_SnAccountProfile instance) =>
 | 
			
		||||
      'picture': instance.picture?.toJson(),
 | 
			
		||||
      'background': instance.background?.toJson(),
 | 
			
		||||
      'verification': instance.verification?.toJson(),
 | 
			
		||||
      'stellar_membership': instance.stellarMembership?.toJson(),
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -94,6 +93,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWallet].
 | 
			
		||||
extension SnWalletPatterns on SnWallet {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWallet value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWallet value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWallet value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet():
 | 
			
		||||
return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWallet() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -263,6 +386,130 @@ as DateTime?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWalletPocket].
 | 
			
		||||
extension SnWalletPocketPatterns on SnWalletPocket {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWalletPocket value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWalletPocket value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWalletPocket value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket():
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletPocket() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -443,6 +690,130 @@ $SnWalletCopyWith<$Res>? get payeeWallet {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnTransaction].
 | 
			
		||||
extension SnTransactionPatterns on SnTransaction {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnTransaction value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnTransaction value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnTransaction value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction():
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnTransaction() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -653,6 +1024,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWalletSubscription].
 | 
			
		||||
extension SnWalletSubscriptionPatterns on SnWalletSubscription {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWalletSubscription value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWalletSubscription value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWalletSubscription value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription():
 | 
			
		||||
return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscription() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -850,6 +1345,130 @@ as String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWalletSubscriptionRef].
 | 
			
		||||
extension SnWalletSubscriptionRefPatterns on SnWalletSubscriptionRef {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWalletSubscriptionRef value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWalletSubscriptionRef value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWalletSubscriptionRef value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef():
 | 
			
		||||
return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletSubscriptionRef() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -1035,6 +1654,130 @@ $SnTransactionCopyWith<$Res>? get transaction {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWalletOrder].
 | 
			
		||||
extension SnWalletOrderPatterns on SnWalletOrder {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWalletOrder value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWalletOrder value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWalletOrder value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder():
 | 
			
		||||
return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWalletOrder() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -76,6 +75,130 @@ as bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWebFeedConfig].
 | 
			
		||||
extension SnWebFeedConfigPatterns on SnWebFeedConfig {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWebFeedConfig value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWebFeedConfig value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWebFeedConfig value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool scrapPage)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig() when $default != null:
 | 
			
		||||
return $default(_that.scrapPage);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool scrapPage)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig():
 | 
			
		||||
return $default(_that.scrapPage);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool scrapPage)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeedConfig() when $default != null:
 | 
			
		||||
return $default(_that.scrapPage);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -240,6 +363,130 @@ $SnWebFeedConfigCopyWith<$Res> get config {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWebFeed].
 | 
			
		||||
extension SnWebFeedPatterns on SnWebFeed {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWebFeed value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWebFeed value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWebFeed value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed():
 | 
			
		||||
return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebFeed() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
@@ -456,6 +703,130 @@ $SnWebFeedCopyWith<$Res>? get feed {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnWebArticle].
 | 
			
		||||
extension SnWebArticlePatterns on SnWebArticle {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnWebArticle value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnWebArticle value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnWebArticle value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle():
 | 
			
		||||
return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnWebArticle() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,28 +4,27 @@ import 'package:island/models/webfeed.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
 | 
			
		||||
/// Provider that fetches a single article by its ID
 | 
			
		||||
final articleDetailProvider = FutureProvider.autoDispose.family<SnWebArticle, String>(
 | 
			
		||||
  (ref, articleId) async {
 | 
			
		||||
    final dio = ref.watch(apiClientProvider);
 | 
			
		||||
    
 | 
			
		||||
    try {
 | 
			
		||||
      final response = await dio.get<Map<String, dynamic>>(
 | 
			
		||||
        '/feeds/articles/$articleId',
 | 
			
		||||
      );
 | 
			
		||||
      
 | 
			
		||||
      if (response.statusCode == 200 && response.data != null) {
 | 
			
		||||
        return SnWebArticle.fromJson(response.data!);
 | 
			
		||||
      } else {
 | 
			
		||||
        throw Exception('Failed to load article');
 | 
			
		||||
final articleDetailProvider = FutureProvider.autoDispose
 | 
			
		||||
    .family<SnWebArticle, String>((ref, articleId) async {
 | 
			
		||||
      final dio = ref.watch(apiClientProvider);
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        final response = await dio.get<Map<String, dynamic>>(
 | 
			
		||||
          '/sphere/feeds/articles/$articleId',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (response.statusCode == 200 && response.data != null) {
 | 
			
		||||
          return SnWebArticle.fromJson(response.data!);
 | 
			
		||||
        } else {
 | 
			
		||||
          throw Exception('Failed to load article');
 | 
			
		||||
        }
 | 
			
		||||
      } on DioException catch (e) {
 | 
			
		||||
        if (e.response?.statusCode == 404) {
 | 
			
		||||
          throw Exception('Article not found');
 | 
			
		||||
        } else {
 | 
			
		||||
          throw Exception('Failed to load article: ${e.message}');
 | 
			
		||||
        }
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
        throw Exception('Failed to load article: $e');
 | 
			
		||||
      }
 | 
			
		||||
    } on DioException catch (e) {
 | 
			
		||||
      if (e.response?.statusCode == 404) {
 | 
			
		||||
        throw Exception('Article not found');
 | 
			
		||||
      } else {
 | 
			
		||||
        throw Exception('Failed to load article: ${e.message}');
 | 
			
		||||
      }
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      throw Exception('Failed to load article: $e');
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
);
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,14 @@
 | 
			
		||||
import 'package:island/pods/userinfo.dart';
 | 
			
		||||
import 'package:island/screens/chat/chat.dart';
 | 
			
		||||
import 'dart:async';
 | 
			
		||||
import 'dart:developer';
 | 
			
		||||
import 'dart:io';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:flutter_webrtc/flutter_webrtc.dart';
 | 
			
		||||
import 'package:island/widgets/chat/call_button.dart';
 | 
			
		||||
import 'package:livekit_client/livekit_client.dart';
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'dart:async';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
import 'package:island/models/chat.dart';
 | 
			
		||||
import 'package:island/pods/websocket.dart';
 | 
			
		||||
 | 
			
		||||
part 'call.g.dart';
 | 
			
		||||
part 'call.freezed.dart';
 | 
			
		||||
@@ -27,6 +28,7 @@ sealed class CallState with _$CallState {
 | 
			
		||||
    required bool isMicrophoneEnabled,
 | 
			
		||||
    required bool isCameraEnabled,
 | 
			
		||||
    required bool isScreenSharing,
 | 
			
		||||
    required bool isSpeakerphone,
 | 
			
		||||
    @Default(Duration(seconds: 0)) Duration duration,
 | 
			
		||||
    String? error,
 | 
			
		||||
  }) = _CallState;
 | 
			
		||||
@@ -42,7 +44,8 @@ sealed class CallParticipantLive with _$CallParticipantLive {
 | 
			
		||||
  }) = _CallParticipantLive;
 | 
			
		||||
 | 
			
		||||
  bool get isSpeaking => remoteParticipant.isSpeaking;
 | 
			
		||||
  bool get isMuted => remoteParticipant.isMuted;
 | 
			
		||||
  bool get isMuted =>
 | 
			
		||||
      remoteParticipant.isMuted || !remoteParticipant.isMicrophoneEnabled();
 | 
			
		||||
  bool get isScreenSharing => remoteParticipant.isScreenShareEnabled();
 | 
			
		||||
  bool get isScreenSharingWithAudio =>
 | 
			
		||||
      remoteParticipant.isScreenShareAudioEnabled();
 | 
			
		||||
@@ -57,13 +60,14 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
  LocalParticipant? _localParticipant;
 | 
			
		||||
  List<CallParticipantLive> _participants = [];
 | 
			
		||||
  final Map<String, CallParticipant> _participantInfoByIdentity = {};
 | 
			
		||||
  StreamSubscription? _wsSubscription;
 | 
			
		||||
  EventsListener? _roomListener;
 | 
			
		||||
 | 
			
		||||
  List<CallParticipantLive> get participants =>
 | 
			
		||||
      List.unmodifiable(_participants);
 | 
			
		||||
  LocalParticipant? get localParticipant => _localParticipant;
 | 
			
		||||
 | 
			
		||||
  Map<String, double> participantsVolumes = {};
 | 
			
		||||
 | 
			
		||||
  Timer? _durationTimer;
 | 
			
		||||
 | 
			
		||||
  Room? get room => _room;
 | 
			
		||||
@@ -71,36 +75,15 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
  @override
 | 
			
		||||
  CallState build() {
 | 
			
		||||
    // Subscribe to websocket updates
 | 
			
		||||
    _subscribeToParticipantsUpdate();
 | 
			
		||||
    return const CallState(
 | 
			
		||||
      isConnected: false,
 | 
			
		||||
      isMicrophoneEnabled: true,
 | 
			
		||||
      isCameraEnabled: false,
 | 
			
		||||
      isScreenSharing: false,
 | 
			
		||||
      isSpeakerphone: true,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _subscribeToParticipantsUpdate() {
 | 
			
		||||
    // Only subscribe once
 | 
			
		||||
    if (_wsSubscription != null) return;
 | 
			
		||||
    final ws = ref.read(websocketProvider);
 | 
			
		||||
    _wsSubscription = ws.dataStream.listen((packet) {
 | 
			
		||||
      if (packet.type == 'call.participants.update' && packet.data != null) {
 | 
			
		||||
        final participantsData = packet.data!["participants"];
 | 
			
		||||
        if (participantsData is List) {
 | 
			
		||||
          final parsed =
 | 
			
		||||
              participantsData
 | 
			
		||||
                  .map(
 | 
			
		||||
                    (e) =>
 | 
			
		||||
                        CallParticipant.fromJson(Map<String, dynamic>.from(e)),
 | 
			
		||||
                  )
 | 
			
		||||
                  .toList();
 | 
			
		||||
          _updateLiveParticipants(parsed);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _initRoomListeners() {
 | 
			
		||||
    if (_room == null) return;
 | 
			
		||||
    _roomListener?.dispose();
 | 
			
		||||
@@ -143,8 +126,6 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
              identity: remote.identity,
 | 
			
		||||
              name: remote.identity,
 | 
			
		||||
              joinedAt: DateTime.now(),
 | 
			
		||||
              accountId: null,
 | 
			
		||||
              profile: null,
 | 
			
		||||
            );
 | 
			
		||||
        return CallParticipantLive(
 | 
			
		||||
          participant: match,
 | 
			
		||||
@@ -169,16 +150,12 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
      if (idx != -1) return participants[idx];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    final userInfo = ref.read(userInfoProvider);
 | 
			
		||||
    final roomIdentity = ref.read(chatroomIdentityProvider(_roomId));
 | 
			
		||||
    // Otherwise, use info from the identity map or fallback to minimal
 | 
			
		||||
    return _participantInfoByIdentity[_localParticipant!.identity] ??
 | 
			
		||||
        CallParticipant(
 | 
			
		||||
          identity: _localParticipant!.identity,
 | 
			
		||||
          name: _localParticipant!.identity,
 | 
			
		||||
          joinedAt: DateTime.now(),
 | 
			
		||||
          accountId: userInfo.value?.id,
 | 
			
		||||
          profile: roomIdentity.value,
 | 
			
		||||
        );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -205,6 +182,7 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
          remoteParticipant: _localParticipant!,
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
      state = state.copyWith();
 | 
			
		||||
    }
 | 
			
		||||
    // Add remote participants
 | 
			
		||||
    _participants.addAll(
 | 
			
		||||
@@ -233,7 +211,13 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
 | 
			
		||||
  Future<void> joinRoom(String roomId) async {
 | 
			
		||||
    if (_roomId == roomId && _room != null) {
 | 
			
		||||
      log('[Call] Call skipped. Already has data');
 | 
			
		||||
      return;
 | 
			
		||||
    } else if (_room != null) {
 | 
			
		||||
      if (!_room!.isDisposed &&
 | 
			
		||||
          _room!.connectionState != ConnectionState.disconnected) {
 | 
			
		||||
        throw Exception('Call already connected');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    _roomId = roomId;
 | 
			
		||||
    if (_room != null) {
 | 
			
		||||
@@ -246,7 +230,9 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
    try {
 | 
			
		||||
      final apiClient = ref.read(apiClientProvider);
 | 
			
		||||
      final ongoingCall = await ref.read(ongoingCallProvider(roomId).future);
 | 
			
		||||
      final response = await apiClient.get('/chat/realtime/$roomId/join');
 | 
			
		||||
      final response = await apiClient.get(
 | 
			
		||||
        '/sphere/chat/realtime/$roomId/join',
 | 
			
		||||
      );
 | 
			
		||||
      if (response.statusCode == 200 && response.data != null) {
 | 
			
		||||
        final data = response.data;
 | 
			
		||||
        // Parse join response
 | 
			
		||||
@@ -262,7 +248,8 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
            duration: Duration(
 | 
			
		||||
              milliseconds:
 | 
			
		||||
                  (DateTime.now().millisecondsSinceEpoch -
 | 
			
		||||
                      (ongoingCall?.createdAt.millisecondsSinceEpoch ?? 0)),
 | 
			
		||||
                      (ongoingCall?.createdAt.millisecondsSinceEpoch ??
 | 
			
		||||
                          DateTime.now().millisecondsSinceEpoch)),
 | 
			
		||||
            ),
 | 
			
		||||
          );
 | 
			
		||||
        });
 | 
			
		||||
@@ -284,6 +271,10 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
        _initRoomListeners();
 | 
			
		||||
        _updateLiveParticipants(participants);
 | 
			
		||||
 | 
			
		||||
        if (!kIsWeb && (Platform.isIOS || Platform.isAndroid)) {
 | 
			
		||||
          Hardware.instance.setSpeakerphoneOn(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Listen for connection updates
 | 
			
		||||
        _room!.addListener(() {
 | 
			
		||||
          state = state.copyWith(
 | 
			
		||||
@@ -316,6 +307,7 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
          stopOnMute: autostop,
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
      state = state.copyWith();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -324,6 +316,7 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
      final target = !_localParticipant!.isCameraEnabled();
 | 
			
		||||
      state = state.copyWith(isCameraEnabled: target);
 | 
			
		||||
      await _localParticipant!.setCameraEnabled(target);
 | 
			
		||||
      state = state.copyWith();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -332,9 +325,16 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
      final target = !_localParticipant!.isScreenShareEnabled();
 | 
			
		||||
      state = state.copyWith(isScreenSharing: target);
 | 
			
		||||
      await _localParticipant!.setScreenShareEnabled(target);
 | 
			
		||||
      state = state.copyWith();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> toggleSpeakerphone() async {
 | 
			
		||||
    state = state.copyWith(isSpeakerphone: !state.isSpeakerphone);
 | 
			
		||||
    await Hardware.instance.setSpeakerphoneOn(state.isSpeakerphone);
 | 
			
		||||
    state = state.copyWith();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> disconnect() async {
 | 
			
		||||
    if (_room != null) {
 | 
			
		||||
      await _room!.disconnect();
 | 
			
		||||
@@ -347,11 +347,39 @@ class CallNotifier extends _$CallNotifier {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setParticipantVolume(CallParticipantLive live, double volume) {
 | 
			
		||||
    if (participantsVolumes[live.remoteParticipant.sid] == null) {
 | 
			
		||||
      participantsVolumes[live.remoteParticipant.sid] = 1;
 | 
			
		||||
    }
 | 
			
		||||
    Helper.setVolume(
 | 
			
		||||
      volume,
 | 
			
		||||
      live
 | 
			
		||||
          .remoteParticipant
 | 
			
		||||
          .audioTrackPublications
 | 
			
		||||
          .first
 | 
			
		||||
          .track!
 | 
			
		||||
          .mediaStreamTrack,
 | 
			
		||||
    );
 | 
			
		||||
    participantsVolumes[live.remoteParticipant.sid] = volume;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  double getParticipantVolume(CallParticipantLive live) {
 | 
			
		||||
    return participantsVolumes[live.remoteParticipant.sid] ?? 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void dispose() {
 | 
			
		||||
    _wsSubscription?.cancel();
 | 
			
		||||
    state = state.copyWith(
 | 
			
		||||
      error: null,
 | 
			
		||||
      isConnected: false,
 | 
			
		||||
      isMicrophoneEnabled: false,
 | 
			
		||||
      isCameraEnabled: false,
 | 
			
		||||
      isScreenSharing: false,
 | 
			
		||||
    );
 | 
			
		||||
    _roomListener?.dispose();
 | 
			
		||||
    _room?.removeListener(_onRoomChange);
 | 
			
		||||
    _room?.dispose();
 | 
			
		||||
    _durationTimer?.cancel();
 | 
			
		||||
    _roomId = null;
 | 
			
		||||
    participantsVolumes = {};
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -13,9 +12,9 @@ part of 'call.dart';
 | 
			
		||||
// dart format off
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$CallState {
 | 
			
		||||
mixin _$CallState implements DiagnosticableTreeMixin {
 | 
			
		||||
 | 
			
		||||
 bool get isConnected; bool get isMicrophoneEnabled; bool get isCameraEnabled; bool get isScreenSharing; Duration get duration; String? get error;
 | 
			
		||||
 bool get isConnected; bool get isMicrophoneEnabled; bool get isCameraEnabled; bool get isScreenSharing; bool get isSpeakerphone; Duration get duration; String? get error;
 | 
			
		||||
/// Create a copy of CallState
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -23,19 +22,25 @@ mixin _$CallState {
 | 
			
		||||
$CallStateCopyWith<CallState> get copyWith => _$CallStateCopyWithImpl<CallState>(this as CallState, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'CallState'))
 | 
			
		||||
    ..add(DiagnosticsProperty('isConnected', isConnected))..add(DiagnosticsProperty('isMicrophoneEnabled', isMicrophoneEnabled))..add(DiagnosticsProperty('isCameraEnabled', isCameraEnabled))..add(DiagnosticsProperty('isScreenSharing', isScreenSharing))..add(DiagnosticsProperty('isSpeakerphone', isSpeakerphone))..add(DiagnosticsProperty('duration', duration))..add(DiagnosticsProperty('error', error));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.isSpeakerphone, isSpeakerphone) || other.isSpeakerphone == isSpeakerphone)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,duration,error);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,isSpeakerphone,duration,error);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, duration: $duration, error: $error)';
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, isSpeakerphone: $isSpeakerphone, duration: $duration, error: $error)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -46,7 +51,7 @@ abstract mixin class $CallStateCopyWith<$Res>  {
 | 
			
		||||
  factory $CallStateCopyWith(CallState value, $Res Function(CallState) _then) = _$CallStateCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, Duration duration, String? error
 | 
			
		||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, bool isSpeakerphone, Duration duration, String? error
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -63,12 +68,13 @@ class _$CallStateCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of CallState
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? duration = null,Object? error = freezed,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? isSpeakerphone = null,Object? duration = null,Object? error = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isSpeakerphone: null == isSpeakerphone ? _self.isSpeakerphone : isSpeakerphone // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,
 | 
			
		||||
@@ -78,17 +84,142 @@ as String?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CallState].
 | 
			
		||||
extension CallStatePatterns on CallState {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CallState value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CallState value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CallState value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState() when $default != null:
 | 
			
		||||
return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState():
 | 
			
		||||
return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallState() when $default != null:
 | 
			
		||||
return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _CallState implements CallState {
 | 
			
		||||
  const _CallState({required this.isConnected, required this.isMicrophoneEnabled, required this.isCameraEnabled, required this.isScreenSharing, this.duration = const Duration(seconds: 0), this.error});
 | 
			
		||||
class _CallState with DiagnosticableTreeMixin implements CallState {
 | 
			
		||||
  const _CallState({required this.isConnected, required this.isMicrophoneEnabled, required this.isCameraEnabled, required this.isScreenSharing, required this.isSpeakerphone, this.duration = const Duration(seconds: 0), this.error});
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
@override final  bool isConnected;
 | 
			
		||||
@override final  bool isMicrophoneEnabled;
 | 
			
		||||
@override final  bool isCameraEnabled;
 | 
			
		||||
@override final  bool isScreenSharing;
 | 
			
		||||
@override final  bool isSpeakerphone;
 | 
			
		||||
@override@JsonKey() final  Duration duration;
 | 
			
		||||
@override final  String? error;
 | 
			
		||||
 | 
			
		||||
@@ -99,19 +230,25 @@ class _CallState implements CallState {
 | 
			
		||||
_$CallStateCopyWith<_CallState> get copyWith => __$CallStateCopyWithImpl<_CallState>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'CallState'))
 | 
			
		||||
    ..add(DiagnosticsProperty('isConnected', isConnected))..add(DiagnosticsProperty('isMicrophoneEnabled', isMicrophoneEnabled))..add(DiagnosticsProperty('isCameraEnabled', isCameraEnabled))..add(DiagnosticsProperty('isScreenSharing', isScreenSharing))..add(DiagnosticsProperty('isSpeakerphone', isSpeakerphone))..add(DiagnosticsProperty('duration', duration))..add(DiagnosticsProperty('error', error));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.isSpeakerphone, isSpeakerphone) || other.isSpeakerphone == isSpeakerphone)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,duration,error);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,isSpeakerphone,duration,error);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, duration: $duration, error: $error)';
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, isSpeakerphone: $isSpeakerphone, duration: $duration, error: $error)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -122,7 +259,7 @@ abstract mixin class _$CallStateCopyWith<$Res> implements $CallStateCopyWith<$Re
 | 
			
		||||
  factory _$CallStateCopyWith(_CallState value, $Res Function(_CallState) _then) = __$CallStateCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, Duration duration, String? error
 | 
			
		||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, bool isSpeakerphone, Duration duration, String? error
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -139,12 +276,13 @@ class __$CallStateCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of CallState
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? duration = null,Object? error = freezed,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? isSpeakerphone = null,Object? duration = null,Object? error = freezed,}) {
 | 
			
		||||
  return _then(_CallState(
 | 
			
		||||
isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,isSpeakerphone: null == isSpeakerphone ? _self.isSpeakerphone : isSpeakerphone // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,
 | 
			
		||||
@@ -155,7 +293,7 @@ as String?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$CallParticipantLive {
 | 
			
		||||
mixin _$CallParticipantLive implements DiagnosticableTreeMixin {
 | 
			
		||||
 | 
			
		||||
 CallParticipant get participant; Participant get remoteParticipant;
 | 
			
		||||
/// Create a copy of CallParticipantLive
 | 
			
		||||
@@ -165,6 +303,12 @@ mixin _$CallParticipantLive {
 | 
			
		||||
$CallParticipantLiveCopyWith<CallParticipantLive> get copyWith => _$CallParticipantLiveCopyWithImpl<CallParticipantLive>(this as CallParticipantLive, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'CallParticipantLive'))
 | 
			
		||||
    ..add(DiagnosticsProperty('participant', participant))..add(DiagnosticsProperty('remoteParticipant', remoteParticipant));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
@@ -176,7 +320,7 @@ bool operator ==(Object other) {
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -225,10 +369,134 @@ $CallParticipantCopyWith<$Res> get participant {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [CallParticipantLive].
 | 
			
		||||
extension CallParticipantLivePatterns on CallParticipantLive {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CallParticipantLive value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CallParticipantLive value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CallParticipantLive value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( CallParticipant participant,  Participant remoteParticipant)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive() when $default != null:
 | 
			
		||||
return $default(_that.participant,_that.remoteParticipant);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( CallParticipant participant,  Participant remoteParticipant)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive():
 | 
			
		||||
return $default(_that.participant,_that.remoteParticipant);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( CallParticipant participant,  Participant remoteParticipant)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _CallParticipantLive() when $default != null:
 | 
			
		||||
return $default(_that.participant,_that.remoteParticipant);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _CallParticipantLive extends CallParticipantLive {
 | 
			
		||||
class _CallParticipantLive extends CallParticipantLive with DiagnosticableTreeMixin {
 | 
			
		||||
  const _CallParticipantLive({required this.participant, required this.remoteParticipant}): super._();
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
@@ -242,6 +510,12 @@ class _CallParticipantLive extends CallParticipantLive {
 | 
			
		||||
_$CallParticipantLiveCopyWith<_CallParticipantLive> get copyWith => __$CallParticipantLiveCopyWithImpl<_CallParticipantLive>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'CallParticipantLive'))
 | 
			
		||||
    ..add(DiagnosticsProperty('participant', participant))..add(DiagnosticsProperty('remoteParticipant', remoteParticipant));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
@@ -253,7 +527,7 @@ bool operator ==(Object other) {
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'call.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$callNotifierHash() => r'47eaba43aa2af1a107725998f4a34af2c94fbc55';
 | 
			
		||||
String _$callNotifierHash() => r'18fb807f067eecd3ea42631c1426c3e5f1fb4280';
 | 
			
		||||
 | 
			
		||||
/// See also [CallNotifier].
 | 
			
		||||
@ProviderFor(CallNotifier)
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ class ChatSummary extends _$ChatSummary {
 | 
			
		||||
  @override
 | 
			
		||||
  Future<Map<String, SnChatSummary>> build() async {
 | 
			
		||||
    final client = ref.watch(apiClientProvider);
 | 
			
		||||
    final resp = await client.get('/chat/summary');
 | 
			
		||||
    final resp = await client.get('/sphere/chat/summary');
 | 
			
		||||
 | 
			
		||||
    final Map<String, dynamic> data = resp.data;
 | 
			
		||||
    return data.map(
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'chat_summary.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$chatSummaryHash() => r'19aad48b5fabb33a76b742400d3b738ceb81c40c';
 | 
			
		||||
String _$chatSummaryHash() => r'87a10e4cefa37dc5fa8eadb175ef1b2bed6070bf';
 | 
			
		||||
 | 
			
		||||
/// See also [ChatSummary].
 | 
			
		||||
@ProviderFor(ChatSummary)
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ part 'config.g.dart';
 | 
			
		||||
 | 
			
		||||
const kTokenPairStoreKey = 'dyn_user_tk';
 | 
			
		||||
 | 
			
		||||
const kNetworkServerDefault = 'https://nt.solian.app';
 | 
			
		||||
const kNetworkServerDefault = 'https://api.solian.app';
 | 
			
		||||
const kNetworkServerStoreKey = 'app_server_url';
 | 
			
		||||
 | 
			
		||||
const kAppbarTransparentStoreKey = 'app_bar_transparent';
 | 
			
		||||
@@ -82,7 +82,7 @@ class AppSettingsNotifier extends _$AppSettingsNotifier {
 | 
			
		||||
  Size? _getWindowSizeFromPrefs(SharedPreferences prefs) {
 | 
			
		||||
    final sizeString = prefs.getString(kAppWindowSize);
 | 
			
		||||
    if (sizeString == null) return null;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      final parts = sizeString.split(',');
 | 
			
		||||
      if (parts.length == 2) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -81,6 +80,130 @@ as Size?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [AppSettings].
 | 
			
		||||
extension AppSettingsPatterns on AppSettings {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _AppSettings value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _AppSettings value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _AppSettings value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings() when $default != null:
 | 
			
		||||
return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings():
 | 
			
		||||
return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _AppSettings() when $default != null:
 | 
			
		||||
return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,10 @@ part 'event_calendar.g.dart';
 | 
			
		||||
class EventCalendarQuery {
 | 
			
		||||
  /// Username to fetch calendar for, null means current user ('me')
 | 
			
		||||
  final String? uname;
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  /// Year to fetch calendar for
 | 
			
		||||
  final int year;
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  /// Month to fetch calendar for
 | 
			
		||||
  final int month;
 | 
			
		||||
 | 
			
		||||
@@ -43,14 +43,12 @@ Future<List<SnEventCalendarEntry>> eventCalendar(
 | 
			
		||||
  EventCalendarQuery query,
 | 
			
		||||
) async {
 | 
			
		||||
  final client = ref.watch(apiClientProvider);
 | 
			
		||||
  final resp = await client.get('/accounts/${query.uname ?? 'me'}/calendar', 
 | 
			
		||||
    queryParameters: {
 | 
			
		||||
      'year': query.year,
 | 
			
		||||
      'month': query.month,
 | 
			
		||||
    },
 | 
			
		||||
  final resp = await client.get(
 | 
			
		||||
    '/id/accounts/${query.uname ?? 'me'}/calendar',
 | 
			
		||||
    queryParameters: {'year': query.year, 'month': query.month},
 | 
			
		||||
  );
 | 
			
		||||
  return resp.data
 | 
			
		||||
      .map((e) => SnEventCalendarEntry.fromJson(e))
 | 
			
		||||
      .cast<SnEventCalendarEntry>()
 | 
			
		||||
      .toList();
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'event_calendar.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$eventCalendarHash() => r'6f2454404fa8660b96334d654490e1a40ee53e10';
 | 
			
		||||
String _$eventCalendarHash() => r'72232fc044ac3c99b855dca37ff2f06a64be0afb';
 | 
			
		||||
 | 
			
		||||
/// Copied from Dart SDK
 | 
			
		||||
class _SystemHash {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								lib/pods/translate.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lib/pods/translate.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
import 'dart:convert';
 | 
			
		||||
import 'dart:developer';
 | 
			
		||||
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
import 'package:flutter_langdetect/flutter_langdetect.dart' as langdetect;
 | 
			
		||||
 | 
			
		||||
part 'translate.freezed.dart';
 | 
			
		||||
part 'translate.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class TranslateQuery with _$TranslateQuery {
 | 
			
		||||
  const factory TranslateQuery({required String text, required String lang}) =
 | 
			
		||||
      _TranslateQuery;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<String> translateString(Ref ref, TranslateQuery query) async {
 | 
			
		||||
  final client = ref.watch(apiClientProvider);
 | 
			
		||||
  final response = await client.post(
 | 
			
		||||
    '/sphere/translate',
 | 
			
		||||
    queryParameters: {'to': query.lang},
 | 
			
		||||
    data: jsonEncode(query.text),
 | 
			
		||||
  );
 | 
			
		||||
  return response.data as String;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
String? detectStringLanguage(Ref ref, String text) {
 | 
			
		||||
  try {
 | 
			
		||||
    return langdetect.detectLangs(text).firstOrNull?.lang;
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    log('[Language] Unable to detect text\'s language: $text');
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										268
									
								
								lib/pods/translate.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								lib/pods/translate.freezed.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,268 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
part of 'translate.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// FreezedGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
// dart format off
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$TranslateQuery {
 | 
			
		||||
 | 
			
		||||
 String get text; String get lang;
 | 
			
		||||
/// Create a copy of TranslateQuery
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$TranslateQueryCopyWith<TranslateQuery> get copyWith => _$TranslateQueryCopyWithImpl<TranslateQuery>(this as TranslateQuery, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is TranslateQuery&&(identical(other.text, text) || other.text == text)&&(identical(other.lang, lang) || other.lang == lang));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,text,lang);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'TranslateQuery(text: $text, lang: $lang)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $TranslateQueryCopyWith<$Res>  {
 | 
			
		||||
  factory $TranslateQueryCopyWith(TranslateQuery value, $Res Function(TranslateQuery) _then) = _$TranslateQueryCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String text, String lang
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$TranslateQueryCopyWithImpl<$Res>
 | 
			
		||||
    implements $TranslateQueryCopyWith<$Res> {
 | 
			
		||||
  _$TranslateQueryCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final TranslateQuery _self;
 | 
			
		||||
  final $Res Function(TranslateQuery) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of TranslateQuery
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? text = null,Object? lang = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,lang: null == lang ? _self.lang : lang // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [TranslateQuery].
 | 
			
		||||
extension TranslateQueryPatterns on TranslateQuery {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _TranslateQuery value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _TranslateQuery value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _TranslateQuery value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String text,  String lang)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery() when $default != null:
 | 
			
		||||
return $default(_that.text,_that.lang);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String text,  String lang)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery():
 | 
			
		||||
return $default(_that.text,_that.lang);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String text,  String lang)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _TranslateQuery() when $default != null:
 | 
			
		||||
return $default(_that.text,_that.lang);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _TranslateQuery implements TranslateQuery {
 | 
			
		||||
  const _TranslateQuery({required this.text, required this.lang});
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
@override final  String text;
 | 
			
		||||
@override final  String lang;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of TranslateQuery
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$TranslateQueryCopyWith<_TranslateQuery> get copyWith => __$TranslateQueryCopyWithImpl<_TranslateQuery>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _TranslateQuery&&(identical(other.text, text) || other.text == text)&&(identical(other.lang, lang) || other.lang == lang));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,text,lang);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'TranslateQuery(text: $text, lang: $lang)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$TranslateQueryCopyWith<$Res> implements $TranslateQueryCopyWith<$Res> {
 | 
			
		||||
  factory _$TranslateQueryCopyWith(_TranslateQuery value, $Res Function(_TranslateQuery) _then) = __$TranslateQueryCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String text, String lang
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$TranslateQueryCopyWithImpl<$Res>
 | 
			
		||||
    implements _$TranslateQueryCopyWith<$Res> {
 | 
			
		||||
  __$TranslateQueryCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _TranslateQuery _self;
 | 
			
		||||
  final $Res Function(_TranslateQuery) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of TranslateQuery
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? text = null,Object? lang = null,}) {
 | 
			
		||||
  return _then(_TranslateQuery(
 | 
			
		||||
text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,lang: null == lang ? _self.lang : lang // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// dart format on
 | 
			
		||||
							
								
								
									
										274
									
								
								lib/pods/translate.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										274
									
								
								lib/pods/translate.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,274 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
 | 
			
		||||
part of 'translate.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$translateStringHash() => r'51d638cf07cbf3ffa9469298f5bd9c667bc0ccb7';
 | 
			
		||||
 | 
			
		||||
/// Copied from Dart SDK
 | 
			
		||||
class _SystemHash {
 | 
			
		||||
  _SystemHash._();
 | 
			
		||||
 | 
			
		||||
  static int combine(int hash, int value) {
 | 
			
		||||
    // ignore: parameter_assignments
 | 
			
		||||
    hash = 0x1fffffff & (hash + value);
 | 
			
		||||
    // ignore: parameter_assignments
 | 
			
		||||
    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
 | 
			
		||||
    return hash ^ (hash >> 6);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static int finish(int hash) {
 | 
			
		||||
    // ignore: parameter_assignments
 | 
			
		||||
    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
 | 
			
		||||
    // ignore: parameter_assignments
 | 
			
		||||
    hash = hash ^ (hash >> 11);
 | 
			
		||||
    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// See also [translateString].
 | 
			
		||||
@ProviderFor(translateString)
 | 
			
		||||
const translateStringProvider = TranslateStringFamily();
 | 
			
		||||
 | 
			
		||||
/// See also [translateString].
 | 
			
		||||
class TranslateStringFamily extends Family<AsyncValue<String>> {
 | 
			
		||||
  /// See also [translateString].
 | 
			
		||||
  const TranslateStringFamily();
 | 
			
		||||
 | 
			
		||||
  /// See also [translateString].
 | 
			
		||||
  TranslateStringProvider call(TranslateQuery query) {
 | 
			
		||||
    return TranslateStringProvider(query);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  TranslateStringProvider getProviderOverride(
 | 
			
		||||
    covariant TranslateStringProvider provider,
 | 
			
		||||
  ) {
 | 
			
		||||
    return call(provider.query);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static const Iterable<ProviderOrFamily>? _dependencies = null;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Iterable<ProviderOrFamily>? get dependencies => _dependencies;
 | 
			
		||||
 | 
			
		||||
  static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
 | 
			
		||||
      _allTransitiveDependencies;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String? get name => r'translateStringProvider';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// See also [translateString].
 | 
			
		||||
class TranslateStringProvider extends AutoDisposeFutureProvider<String> {
 | 
			
		||||
  /// See also [translateString].
 | 
			
		||||
  TranslateStringProvider(TranslateQuery query)
 | 
			
		||||
    : this._internal(
 | 
			
		||||
        (ref) => translateString(ref as TranslateStringRef, query),
 | 
			
		||||
        from: translateStringProvider,
 | 
			
		||||
        name: r'translateStringProvider',
 | 
			
		||||
        debugGetCreateSourceHash:
 | 
			
		||||
            const bool.fromEnvironment('dart.vm.product')
 | 
			
		||||
                ? null
 | 
			
		||||
                : _$translateStringHash,
 | 
			
		||||
        dependencies: TranslateStringFamily._dependencies,
 | 
			
		||||
        allTransitiveDependencies:
 | 
			
		||||
            TranslateStringFamily._allTransitiveDependencies,
 | 
			
		||||
        query: query,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  TranslateStringProvider._internal(
 | 
			
		||||
    super._createNotifier, {
 | 
			
		||||
    required super.name,
 | 
			
		||||
    required super.dependencies,
 | 
			
		||||
    required super.allTransitiveDependencies,
 | 
			
		||||
    required super.debugGetCreateSourceHash,
 | 
			
		||||
    required super.from,
 | 
			
		||||
    required this.query,
 | 
			
		||||
  }) : super.internal();
 | 
			
		||||
 | 
			
		||||
  final TranslateQuery query;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Override overrideWith(
 | 
			
		||||
    FutureOr<String> Function(TranslateStringRef provider) create,
 | 
			
		||||
  ) {
 | 
			
		||||
    return ProviderOverride(
 | 
			
		||||
      origin: this,
 | 
			
		||||
      override: TranslateStringProvider._internal(
 | 
			
		||||
        (ref) => create(ref as TranslateStringRef),
 | 
			
		||||
        from: from,
 | 
			
		||||
        name: null,
 | 
			
		||||
        dependencies: null,
 | 
			
		||||
        allTransitiveDependencies: null,
 | 
			
		||||
        debugGetCreateSourceHash: null,
 | 
			
		||||
        query: query,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  AutoDisposeFutureProviderElement<String> createElement() {
 | 
			
		||||
    return _TranslateStringProviderElement(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  bool operator ==(Object other) {
 | 
			
		||||
    return other is TranslateStringProvider && other.query == query;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  int get hashCode {
 | 
			
		||||
    var hash = _SystemHash.combine(0, runtimeType.hashCode);
 | 
			
		||||
    hash = _SystemHash.combine(hash, query.hashCode);
 | 
			
		||||
 | 
			
		||||
    return _SystemHash.finish(hash);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
			
		||||
// ignore: unused_element
 | 
			
		||||
mixin TranslateStringRef on AutoDisposeFutureProviderRef<String> {
 | 
			
		||||
  /// The parameter `query` of this provider.
 | 
			
		||||
  TranslateQuery get query;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _TranslateStringProviderElement
 | 
			
		||||
    extends AutoDisposeFutureProviderElement<String>
 | 
			
		||||
    with TranslateStringRef {
 | 
			
		||||
  _TranslateStringProviderElement(super.provider);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  TranslateQuery get query => (origin as TranslateStringProvider).query;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String _$detectStringLanguageHash() =>
 | 
			
		||||
    r'697b68464b3d00927cc43ccc1ba8ba93f2a470ed';
 | 
			
		||||
 | 
			
		||||
/// See also [detectStringLanguage].
 | 
			
		||||
@ProviderFor(detectStringLanguage)
 | 
			
		||||
const detectStringLanguageProvider = DetectStringLanguageFamily();
 | 
			
		||||
 | 
			
		||||
/// See also [detectStringLanguage].
 | 
			
		||||
class DetectStringLanguageFamily extends Family<String?> {
 | 
			
		||||
  /// See also [detectStringLanguage].
 | 
			
		||||
  const DetectStringLanguageFamily();
 | 
			
		||||
 | 
			
		||||
  /// See also [detectStringLanguage].
 | 
			
		||||
  DetectStringLanguageProvider call(String text) {
 | 
			
		||||
    return DetectStringLanguageProvider(text);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  DetectStringLanguageProvider getProviderOverride(
 | 
			
		||||
    covariant DetectStringLanguageProvider provider,
 | 
			
		||||
  ) {
 | 
			
		||||
    return call(provider.text);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static const Iterable<ProviderOrFamily>? _dependencies = null;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Iterable<ProviderOrFamily>? get dependencies => _dependencies;
 | 
			
		||||
 | 
			
		||||
  static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
 | 
			
		||||
      _allTransitiveDependencies;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String? get name => r'detectStringLanguageProvider';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// See also [detectStringLanguage].
 | 
			
		||||
class DetectStringLanguageProvider extends AutoDisposeProvider<String?> {
 | 
			
		||||
  /// See also [detectStringLanguage].
 | 
			
		||||
  DetectStringLanguageProvider(String text)
 | 
			
		||||
    : this._internal(
 | 
			
		||||
        (ref) => detectStringLanguage(ref as DetectStringLanguageRef, text),
 | 
			
		||||
        from: detectStringLanguageProvider,
 | 
			
		||||
        name: r'detectStringLanguageProvider',
 | 
			
		||||
        debugGetCreateSourceHash:
 | 
			
		||||
            const bool.fromEnvironment('dart.vm.product')
 | 
			
		||||
                ? null
 | 
			
		||||
                : _$detectStringLanguageHash,
 | 
			
		||||
        dependencies: DetectStringLanguageFamily._dependencies,
 | 
			
		||||
        allTransitiveDependencies:
 | 
			
		||||
            DetectStringLanguageFamily._allTransitiveDependencies,
 | 
			
		||||
        text: text,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  DetectStringLanguageProvider._internal(
 | 
			
		||||
    super._createNotifier, {
 | 
			
		||||
    required super.name,
 | 
			
		||||
    required super.dependencies,
 | 
			
		||||
    required super.allTransitiveDependencies,
 | 
			
		||||
    required super.debugGetCreateSourceHash,
 | 
			
		||||
    required super.from,
 | 
			
		||||
    required this.text,
 | 
			
		||||
  }) : super.internal();
 | 
			
		||||
 | 
			
		||||
  final String text;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Override overrideWith(
 | 
			
		||||
    String? Function(DetectStringLanguageRef provider) create,
 | 
			
		||||
  ) {
 | 
			
		||||
    return ProviderOverride(
 | 
			
		||||
      origin: this,
 | 
			
		||||
      override: DetectStringLanguageProvider._internal(
 | 
			
		||||
        (ref) => create(ref as DetectStringLanguageRef),
 | 
			
		||||
        from: from,
 | 
			
		||||
        name: null,
 | 
			
		||||
        dependencies: null,
 | 
			
		||||
        allTransitiveDependencies: null,
 | 
			
		||||
        debugGetCreateSourceHash: null,
 | 
			
		||||
        text: text,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  AutoDisposeProviderElement<String?> createElement() {
 | 
			
		||||
    return _DetectStringLanguageProviderElement(this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  bool operator ==(Object other) {
 | 
			
		||||
    return other is DetectStringLanguageProvider && other.text == text;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  int get hashCode {
 | 
			
		||||
    var hash = _SystemHash.combine(0, runtimeType.hashCode);
 | 
			
		||||
    hash = _SystemHash.combine(hash, text.hashCode);
 | 
			
		||||
 | 
			
		||||
    return _SystemHash.finish(hash);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
			
		||||
// ignore: unused_element
 | 
			
		||||
mixin DetectStringLanguageRef on AutoDisposeProviderRef<String?> {
 | 
			
		||||
  /// The parameter `text` of this provider.
 | 
			
		||||
  String get text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _DetectStringLanguageProviderElement
 | 
			
		||||
    extends AutoDisposeProviderElement<String?>
 | 
			
		||||
    with DetectStringLanguageRef {
 | 
			
		||||
  _DetectStringLanguageProviderElement(super.provider);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String get text => (origin as DetectStringLanguageProvider).text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
 | 
			
		||||
@@ -14,7 +14,7 @@ class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
 | 
			
		||||
  Future<void> fetchUser() async {
 | 
			
		||||
    try {
 | 
			
		||||
      final client = _ref.read(apiClientProvider);
 | 
			
		||||
      final response = await client.get('/accounts/me');
 | 
			
		||||
      final response = await client.get('/id/accounts/me');
 | 
			
		||||
      final user = SnAccount.fromJson(response.data);
 | 
			
		||||
      state = AsyncValue.data(user);
 | 
			
		||||
    } catch (error, stackTrace) {
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ final webFeedListProvider = FutureProvider.family<List<SnWebFeed>, String>((
 | 
			
		||||
  pubName,
 | 
			
		||||
) async {
 | 
			
		||||
  final client = ref.watch(apiClientProvider);
 | 
			
		||||
  final response = await client.get('/publishers/$pubName/feeds');
 | 
			
		||||
  final response = await client.get('/sphere/publishers/$pubName/feeds');
 | 
			
		||||
  return (response.data as List)
 | 
			
		||||
      .map((json) => SnWebFeed.fromJson(json))
 | 
			
		||||
      .toList();
 | 
			
		||||
@@ -39,7 +39,7 @@ class WebFeedNotifier
 | 
			
		||||
    try {
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      final response = await client.get(
 | 
			
		||||
        '/publishers/${arg.pubName}/feeds/${arg.feedId}',
 | 
			
		||||
        '/sphere/publishers/${arg.pubName}/feeds/${arg.feedId}',
 | 
			
		||||
      );
 | 
			
		||||
      return SnWebFeed.fromJson(response.data);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@@ -51,7 +51,7 @@ class WebFeedNotifier
 | 
			
		||||
    state = const AsyncValue.loading();
 | 
			
		||||
    try {
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      final url = '/publishers/${feed.publisherId}/feeds';
 | 
			
		||||
      final url = '/sphere/publishers/${feed.publisherId}/feeds';
 | 
			
		||||
 | 
			
		||||
      final response =
 | 
			
		||||
          feed.id.isEmpty
 | 
			
		||||
@@ -72,7 +72,7 @@ class WebFeedNotifier
 | 
			
		||||
    state = const AsyncValue.loading();
 | 
			
		||||
    try {
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      await client.delete('/publishers/${arg.pubName}/feeds/$feedId');
 | 
			
		||||
      await client.delete('/sphere/publishers/${arg.pubName}/feeds/$feedId');
 | 
			
		||||
      state = AsyncValue.data(
 | 
			
		||||
        SnWebFeed(
 | 
			
		||||
          id: '',
 | 
			
		||||
@@ -98,7 +98,7 @@ class WebFeedNotifier
 | 
			
		||||
    try {
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      await client.post(
 | 
			
		||||
        '/publishers/${arg.pubName}/feeds/$feedId/scrap',
 | 
			
		||||
        '/sphere/publishers/${arg.pubName}/feeds/$feedId/scrap',
 | 
			
		||||
        options: Options(
 | 
			
		||||
          sendTimeout: const Duration(seconds: 60),
 | 
			
		||||
          receiveTimeout: const Duration(seconds: 180),
 | 
			
		||||
@@ -107,7 +107,7 @@ class WebFeedNotifier
 | 
			
		||||
 | 
			
		||||
      // Reload the feed
 | 
			
		||||
      final response = await client.get(
 | 
			
		||||
        '/publishers/${arg.pubName}/feeds/$feedId',
 | 
			
		||||
        '/sphere/publishers/${arg.pubName}/feeds/$feedId',
 | 
			
		||||
      );
 | 
			
		||||
      state = AsyncValue.data(SnWebFeed.fromJson(response.data));
 | 
			
		||||
    } catch (error, stackTrace) {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ sealed class WebSocketPacket with _$WebSocketPacket {
 | 
			
		||||
  const factory WebSocketPacket({
 | 
			
		||||
    required String type,
 | 
			
		||||
    required Map<String, dynamic>? data,
 | 
			
		||||
    String? endpoint,
 | 
			
		||||
    String? errorMessage,
 | 
			
		||||
  }) = _WebSocketPacket;
 | 
			
		||||
 | 
			
		||||
@@ -45,6 +46,10 @@ class WebSocketService {
 | 
			
		||||
  final StreamController<WebSocketState> _statusStreamController =
 | 
			
		||||
      StreamController<WebSocketState>.broadcast();
 | 
			
		||||
  Timer? _reconnectTimer;
 | 
			
		||||
  Timer? _heartbeatTimer;
 | 
			
		||||
 | 
			
		||||
  DateTime? _heartbeatAt;
 | 
			
		||||
  Duration? _heartbeatDelay;
 | 
			
		||||
 | 
			
		||||
  Stream<WebSocketPacket> get dataStream => _streamController.stream;
 | 
			
		||||
  Stream<WebSocketState> get statusStream => _statusStreamController.stream;
 | 
			
		||||
@@ -65,11 +70,12 @@ class WebSocketService {
 | 
			
		||||
      } else {
 | 
			
		||||
        _channel = IOWebSocketChannel.connect(
 | 
			
		||||
          Uri.parse(url),
 | 
			
		||||
          headers: {'Authorization': 'Bearer $token'},
 | 
			
		||||
          headers: {'Authorization': 'AtField $token'},
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
      await _channel!.ready;
 | 
			
		||||
      _statusStreamController.sink.add(WebSocketState.connected());
 | 
			
		||||
      _scheduleHeartbeat();
 | 
			
		||||
      _channel!.stream.listen(
 | 
			
		||||
        (data) {
 | 
			
		||||
          final dataStr =
 | 
			
		||||
@@ -79,6 +85,13 @@ class WebSocketService {
 | 
			
		||||
          log(
 | 
			
		||||
            "[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}",
 | 
			
		||||
          );
 | 
			
		||||
          if (packet.type == 'pong' && _heartbeatAt != null) {
 | 
			
		||||
            var now = DateTime.now();
 | 
			
		||||
            _heartbeatDelay = now.difference(_heartbeatAt!);
 | 
			
		||||
            log(
 | 
			
		||||
              "[WebSocket] Server respond last heartbeat for ${_heartbeatDelay!.inMilliseconds} ms",
 | 
			
		||||
            );
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        onDone: () {
 | 
			
		||||
          log('[WebSocket] Connection closed, attempting to reconnect...');
 | 
			
		||||
@@ -107,6 +120,19 @@ class WebSocketService {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _scheduleHeartbeat() {
 | 
			
		||||
    _heartbeatTimer?.cancel();
 | 
			
		||||
    _heartbeatTimer = Timer.periodic(const Duration(seconds: 60), (_) {
 | 
			
		||||
      _beatTheHeart();
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _beatTheHeart() {
 | 
			
		||||
    _heartbeatAt = DateTime.now();
 | 
			
		||||
    log('[WebSocket] We\'re beating the heart! $_heartbeatAt');
 | 
			
		||||
    sendMessage(jsonEncode(WebSocketPacket(type: 'ping', data: null)));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  WebSocketChannel? get ws => _channel;
 | 
			
		||||
 | 
			
		||||
  void sendMessage(String message) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
// dart format width=80
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
// coverage:ignore-file
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
			
		||||
 | 
			
		||||
@@ -48,6 +47,148 @@ $WebSocketStateCopyWith(WebSocketState _, $Res Function(WebSocketState) __);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [WebSocketState].
 | 
			
		||||
extension WebSocketStatePatterns on WebSocketState {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Connected value)?  connected,TResult Function( _Connecting value)?  connecting,TResult Function( _Disconnected value)?  disconnected,TResult Function( _Error value)?  error,required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected() when connected != null:
 | 
			
		||||
return connected(_that);case _Connecting() when connecting != null:
 | 
			
		||||
return connecting(_that);case _Disconnected() when disconnected != null:
 | 
			
		||||
return disconnected(_that);case _Error() when error != null:
 | 
			
		||||
return error(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Connected value)  connected,required TResult Function( _Connecting value)  connecting,required TResult Function( _Disconnected value)  disconnected,required TResult Function( _Error value)  error,}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected():
 | 
			
		||||
return connected(_that);case _Connecting():
 | 
			
		||||
return connecting(_that);case _Disconnected():
 | 
			
		||||
return disconnected(_that);case _Error():
 | 
			
		||||
return error(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Connected value)?  connected,TResult? Function( _Connecting value)?  connecting,TResult? Function( _Disconnected value)?  disconnected,TResult? Function( _Error value)?  error,}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected() when connected != null:
 | 
			
		||||
return connected(_that);case _Connecting() when connecting != null:
 | 
			
		||||
return connecting(_that);case _Disconnected() when disconnected != null:
 | 
			
		||||
return disconnected(_that);case _Error() when error != null:
 | 
			
		||||
return error(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()?  connected,TResult Function()?  connecting,TResult Function()?  disconnected,TResult Function( String message)?  error,required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected() when connected != null:
 | 
			
		||||
return connected();case _Connecting() when connecting != null:
 | 
			
		||||
return connecting();case _Disconnected() when disconnected != null:
 | 
			
		||||
return disconnected();case _Error() when error != null:
 | 
			
		||||
return error(_that.message);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function()  connected,required TResult Function()  connecting,required TResult Function()  disconnected,required TResult Function( String message)  error,}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected():
 | 
			
		||||
return connected();case _Connecting():
 | 
			
		||||
return connecting();case _Disconnected():
 | 
			
		||||
return disconnected();case _Error():
 | 
			
		||||
return error(_that.message);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()?  connected,TResult? Function()?  connecting,TResult? Function()?  disconnected,TResult? Function( String message)?  error,}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _Connected() when connected != null:
 | 
			
		||||
return connected();case _Connecting() when connecting != null:
 | 
			
		||||
return connecting();case _Disconnected() when disconnected != null:
 | 
			
		||||
return disconnected();case _Error() when error != null:
 | 
			
		||||
return error(_that.message);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -238,7 +379,7 @@ as String,
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$WebSocketPacket implements DiagnosticableTreeMixin {
 | 
			
		||||
 | 
			
		||||
 String get type; Map<String, dynamic>? get data; String? get errorMessage;
 | 
			
		||||
 String get type; Map<String, dynamic>? get data; String? get endpoint; String? get errorMessage;
 | 
			
		||||
/// Create a copy of WebSocketPacket
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -252,21 +393,21 @@ $WebSocketPacketCopyWith<WebSocketPacket> get copyWith => _$WebSocketPacketCopyW
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
			
		||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
			
		||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('endpoint', endpoint))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.endpoint, endpoint) || other.endpoint == endpoint)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(data),errorMessage);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(data),endpoint,errorMessage);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'WebSocketPacket(type: $type, data: $data, errorMessage: $errorMessage)';
 | 
			
		||||
  return 'WebSocketPacket(type: $type, data: $data, endpoint: $endpoint, errorMessage: $errorMessage)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -277,7 +418,7 @@ abstract mixin class $WebSocketPacketCopyWith<$Res>  {
 | 
			
		||||
  factory $WebSocketPacketCopyWith(WebSocketPacket value, $Res Function(WebSocketPacket) _then) = _$WebSocketPacketCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String type, Map<String, dynamic>? data, String? errorMessage
 | 
			
		||||
 String type, Map<String, dynamic>? data, String? endpoint, String? errorMessage
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -294,11 +435,12 @@ class _$WebSocketPacketCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of WebSocketPacket
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? data = freezed,Object? errorMessage = freezed,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? data = freezed,Object? endpoint = freezed,Object? errorMessage = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,endpoint: freezed == endpoint ? _self.endpoint : endpoint // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
@@ -306,11 +448,135 @@ as String?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [WebSocketPacket].
 | 
			
		||||
extension WebSocketPacketPatterns on WebSocketPacket {
 | 
			
		||||
/// A variant of `map` that fallback to returning `orElse`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _WebSocketPacket value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// Callbacks receives the raw object, upcasted.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case final Subclass2 value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _WebSocketPacket value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket():
 | 
			
		||||
return $default(_that);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `map` that fallback to returning `null`.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case final Subclass value:
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _WebSocketPacket value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket() when $default != null:
 | 
			
		||||
return $default(_that);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to an `orElse` callback.
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return orElse();
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket() when $default != null:
 | 
			
		||||
return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);case _:
 | 
			
		||||
  return orElse();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
/// A `switch`-like method, using callbacks.
 | 
			
		||||
///
 | 
			
		||||
/// As opposed to `map`, this offers destructuring.
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case Subclass2(:final field2):
 | 
			
		||||
///     return ...;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket():
 | 
			
		||||
return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);}
 | 
			
		||||
}
 | 
			
		||||
/// A variant of `when` that fallback to returning `null`
 | 
			
		||||
///
 | 
			
		||||
/// It is equivalent to doing:
 | 
			
		||||
/// ```dart
 | 
			
		||||
/// switch (sealedClass) {
 | 
			
		||||
///   case Subclass(:final field):
 | 
			
		||||
///     return ...;
 | 
			
		||||
///   case _:
 | 
			
		||||
///     return null;
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
 | 
			
		||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _WebSocketPacket() when $default != null:
 | 
			
		||||
return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _WebSocketPacket with DiagnosticableTreeMixin implements WebSocketPacket {
 | 
			
		||||
  const _WebSocketPacket({required this.type, required final  Map<String, dynamic>? data, this.errorMessage}): _data = data;
 | 
			
		||||
  const _WebSocketPacket({required this.type, required final  Map<String, dynamic>? data, this.endpoint, this.errorMessage}): _data = data;
 | 
			
		||||
  factory _WebSocketPacket.fromJson(Map<String, dynamic> json) => _$WebSocketPacketFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String type;
 | 
			
		||||
@@ -323,6 +589,7 @@ class _WebSocketPacket with DiagnosticableTreeMixin implements WebSocketPacket {
 | 
			
		||||
  return EqualUnmodifiableMapView(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override final  String? endpoint;
 | 
			
		||||
@override final  String? errorMessage;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of WebSocketPacket
 | 
			
		||||
@@ -339,21 +606,21 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
			
		||||
  properties
 | 
			
		||||
    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
			
		||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
			
		||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('endpoint', endpoint))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._data, _data)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._data, _data)&&(identical(other.endpoint, endpoint) || other.endpoint == endpoint)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(_data),errorMessage);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(_data),endpoint,errorMessage);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
			
		||||
  return 'WebSocketPacket(type: $type, data: $data, errorMessage: $errorMessage)';
 | 
			
		||||
  return 'WebSocketPacket(type: $type, data: $data, endpoint: $endpoint, errorMessage: $errorMessage)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -364,7 +631,7 @@ abstract mixin class _$WebSocketPacketCopyWith<$Res> implements $WebSocketPacket
 | 
			
		||||
  factory _$WebSocketPacketCopyWith(_WebSocketPacket value, $Res Function(_WebSocketPacket) _then) = __$WebSocketPacketCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String type, Map<String, dynamic>? data, String? errorMessage
 | 
			
		||||
 String type, Map<String, dynamic>? data, String? endpoint, String? errorMessage
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -381,11 +648,12 @@ class __$WebSocketPacketCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of WebSocketPacket
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? data = freezed,Object? errorMessage = freezed,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? data = freezed,Object? endpoint = freezed,Object? errorMessage = freezed,}) {
 | 
			
		||||
  return _then(_WebSocketPacket(
 | 
			
		||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,data: freezed == data ? _self._data : data // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,endpoint: freezed == endpoint ? _self.endpoint : endpoint // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ _WebSocketPacket _$WebSocketPacketFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _WebSocketPacket(
 | 
			
		||||
      type: json['type'] as String,
 | 
			
		||||
      data: json['data'] as Map<String, dynamic>?,
 | 
			
		||||
      endpoint: json['endpoint'] as String?,
 | 
			
		||||
      errorMessage: json['error_message'] as String?,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@@ -17,5 +18,6 @@ Map<String, dynamic> _$WebSocketPacketToJson(_WebSocketPacket instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'type': instance.type,
 | 
			
		||||
      'data': instance.data,
 | 
			
		||||
      'endpoint': instance.endpoint,
 | 
			
		||||
      'error_message': instance.errorMessage,
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										177
									
								
								lib/route.dart
									
									
									
									
									
								
							
							
						
						
									
										177
									
								
								lib/route.dart
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ import 'package:island/screens/posts/post_search.dart';
 | 
			
		||||
import 'package:island/widgets/app_wrapper.dart';
 | 
			
		||||
import 'package:island/screens/tabs.dart';
 | 
			
		||||
import 'package:island/screens/explore.dart';
 | 
			
		||||
import 'package:island/screens/article_detail_screen.dart';
 | 
			
		||||
import 'package:island/screens/discovery/article_detail.dart';
 | 
			
		||||
import 'package:island/screens/account.dart';
 | 
			
		||||
import 'package:island/screens/notification.dart';
 | 
			
		||||
import 'package:island/screens/wallet.dart';
 | 
			
		||||
@@ -28,9 +28,11 @@ import 'package:island/screens/creators/hub.dart';
 | 
			
		||||
import 'package:island/screens/creators/posts/post_manage_list.dart';
 | 
			
		||||
import 'package:island/screens/creators/stickers/stickers.dart';
 | 
			
		||||
import 'package:island/screens/creators/stickers/pack_detail.dart';
 | 
			
		||||
import 'package:island/screens/creators/poll/poll_list.dart';
 | 
			
		||||
import 'package:island/screens/creators/publishers.dart';
 | 
			
		||||
import 'package:island/screens/creators/webfeed/webfeed_list.dart';
 | 
			
		||||
import 'package:island/screens/creators/webfeed/webfeed_edit.dart';
 | 
			
		||||
import 'package:island/screens/poll/poll_editor.dart';
 | 
			
		||||
import 'package:island/screens/posts/compose.dart';
 | 
			
		||||
import 'package:island/screens/posts/post_detail.dart';
 | 
			
		||||
import 'package:island/screens/posts/pub_profile.dart';
 | 
			
		||||
@@ -41,6 +43,8 @@ import 'package:island/screens/realm/realms.dart';
 | 
			
		||||
import 'package:island/screens/realm/realm_detail.dart';
 | 
			
		||||
import 'package:island/screens/account/event_calendar.dart';
 | 
			
		||||
import 'package:island/screens/discovery/realms.dart';
 | 
			
		||||
import 'package:island/screens/reports/report_detail.dart';
 | 
			
		||||
import 'package:island/screens/reports/report_list.dart';
 | 
			
		||||
 | 
			
		||||
// Shell route keys for nested navigation
 | 
			
		||||
final rootNavigatorKey = GlobalKey<NavigatorState>();
 | 
			
		||||
@@ -61,6 +65,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
        routes: [
 | 
			
		||||
          // Standalone routes without bottom navigation
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'postCompose',
 | 
			
		||||
            path: '/posts/compose',
 | 
			
		||||
            builder:
 | 
			
		||||
                (context, state) => PostComposeScreen(
 | 
			
		||||
@@ -71,6 +76,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                ),
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'postEdit',
 | 
			
		||||
            path: '/posts/:id/edit',
 | 
			
		||||
            builder: (context, state) {
 | 
			
		||||
              final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -78,6 +84,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'chatCall',
 | 
			
		||||
            path: '/chat/:id/call',
 | 
			
		||||
            builder: (context, state) {
 | 
			
		||||
              final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -85,6 +92,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'accountCalendar',
 | 
			
		||||
            path: '/account/:name/calendar',
 | 
			
		||||
            builder: (context, state) {
 | 
			
		||||
              final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -96,11 +104,13 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                (context, state, child) => CreatorHubShellScreen(child: child),
 | 
			
		||||
            routes: [
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorHub',
 | 
			
		||||
                path: '/creators',
 | 
			
		||||
                builder: (context, state) => const CreatorHubScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
              // Web Feed Routes
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorFeeds',
 | 
			
		||||
                path: '/creators/:name/feeds',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -108,6 +118,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
                routes: [
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'creatorFeedNew',
 | 
			
		||||
                    path: 'new',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      return WebFeedNewScreen(
 | 
			
		||||
@@ -116,6 +127,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'creatorFeedEdit',
 | 
			
		||||
                    path: ':feedId',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      return WebFeedEditScreen(
 | 
			
		||||
@@ -127,13 +139,46 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorPosts',
 | 
			
		||||
                path: '/creators/:name/posts',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  return CreatorPostListScreen(pubName: name);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              // Poll list route
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorPolls',
 | 
			
		||||
                path: '/creators/:name/polls',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  return CreatorPollListScreen(pubName: name);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              // Poll routes
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorPollNew',
 | 
			
		||||
                path: '/creators/:name/polls/new',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  // initialPollId left null for create; initialPublisher prefilled
 | 
			
		||||
                  return PollEditorScreen(initialPublisher: name);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorPollEdit',
 | 
			
		||||
                path: '/creators/:name/polls/:id/edit',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  final id = state.pathParameters['id']!;
 | 
			
		||||
                  return PollEditorScreen(
 | 
			
		||||
                    initialPollId: id,
 | 
			
		||||
                    initialPublisher: name,
 | 
			
		||||
                  );
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickers',
 | 
			
		||||
                path: '/creators/:name/stickers',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -141,6 +186,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickerPackNew',
 | 
			
		||||
                path: '/creators/:name/stickers/new',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -148,6 +194,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickerPackEdit',
 | 
			
		||||
                path: '/creators/:name/stickers/:packId/edit',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -156,6 +203,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickerPackDetail',
 | 
			
		||||
                path: '/creators/:name/stickers/:packId',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -164,6 +212,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickerNew',
 | 
			
		||||
                path: '/creators/:name/stickers/:packId/new',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final packId = state.pathParameters['packId']!;
 | 
			
		||||
@@ -171,6 +220,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorStickerEdit',
 | 
			
		||||
                path: '/creators/:name/stickers/:packId/:id/edit',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final packId = state.pathParameters['packId']!;
 | 
			
		||||
@@ -179,10 +229,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorNew',
 | 
			
		||||
                path: '/creators/new',
 | 
			
		||||
                builder: (context, state) => const NewPublisherScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'creatorEdit',
 | 
			
		||||
                path: '/creators/:name/edit',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
@@ -197,10 +249,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    DeveloperHubShellScreen(child: child),
 | 
			
		||||
            routes: [
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'developerHub',
 | 
			
		||||
                path: '/developers',
 | 
			
		||||
                builder: (context, state) => const DeveloperHubScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'developerApps',
 | 
			
		||||
                path: '/developers/:name/apps',
 | 
			
		||||
                builder:
 | 
			
		||||
                    (context, state) => CustomAppsScreen(
 | 
			
		||||
@@ -208,6 +262,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    ),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'developerAppNew',
 | 
			
		||||
                path: '/developers/:name/apps/new',
 | 
			
		||||
                builder:
 | 
			
		||||
                    (context, state) => NewCustomAppScreen(
 | 
			
		||||
@@ -215,6 +270,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    ),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'developerAppEdit',
 | 
			
		||||
                path: '/developers/:name/apps/:id',
 | 
			
		||||
                builder:
 | 
			
		||||
                    (context, state) => EditAppScreen(
 | 
			
		||||
@@ -227,10 +283,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
 | 
			
		||||
          // Web articles
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'articles',
 | 
			
		||||
            path: '/feeds/articles',
 | 
			
		||||
            builder: (context, state) => const ArticlesScreen(),
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'articleDetail',
 | 
			
		||||
            path: '/feeds/articles/:id',
 | 
			
		||||
            builder: (context, state) {
 | 
			
		||||
              final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -240,24 +298,37 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
 | 
			
		||||
          // Auth routes
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'login',
 | 
			
		||||
            path: '/auth/login',
 | 
			
		||||
            builder: (context, state) => const LoginScreen(),
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'createAccount',
 | 
			
		||||
            path: '/auth/create-account',
 | 
			
		||||
            builder: (context, state) => const CreateAccountScreen(),
 | 
			
		||||
          ),
 | 
			
		||||
 | 
			
		||||
          // Other routes
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'settings',
 | 
			
		||||
            path: '/settings',
 | 
			
		||||
            builder: (context, state) => const SettingsScreen(),
 | 
			
		||||
          ),
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'about',
 | 
			
		||||
            path: '/about',
 | 
			
		||||
            builder: (context, state) => const AboutScreen(),
 | 
			
		||||
          ),
 | 
			
		||||
 | 
			
		||||
          GoRoute(
 | 
			
		||||
            name: 'reportDetail',
 | 
			
		||||
            path: '/safety/reports/me/:id',
 | 
			
		||||
            builder: (context, state) {
 | 
			
		||||
              final id = state.pathParameters['id']!;
 | 
			
		||||
              return AbuseReportDetailScreen(reportId: id);
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
 | 
			
		||||
          // Main tabs with TabsScreen shell
 | 
			
		||||
          ShellRoute(
 | 
			
		||||
            navigatorKey: _tabsShellKey,
 | 
			
		||||
@@ -266,37 +337,36 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
            },
 | 
			
		||||
            routes: [
 | 
			
		||||
              // Explore tab
 | 
			
		||||
              ShellRoute(
 | 
			
		||||
                builder:
 | 
			
		||||
                    (context, state, child) => ExploreShellScreen(child: child),
 | 
			
		||||
                routes: [
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/',
 | 
			
		||||
                    builder: (context, state) => const ExploreScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/posts/search',
 | 
			
		||||
                    builder: (context, state) => const PostSearchScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/posts/:id',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final id = state.pathParameters['id']!;
 | 
			
		||||
                      return PostDetailScreen(id: id);
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/publishers/:name',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final name = state.pathParameters['name']!;
 | 
			
		||||
                      return PublisherProfileScreen(name: name);
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/discovery/realms',
 | 
			
		||||
                    builder: (context, state) => const DiscoveryRealmsScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                ],
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'explore',
 | 
			
		||||
                path: '/',
 | 
			
		||||
                builder: (context, state) => const ExploreScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'postSearch',
 | 
			
		||||
                path: '/posts/search',
 | 
			
		||||
                builder: (context, state) => const PostSearchScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'postDetail',
 | 
			
		||||
                path: '/posts/:id',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final id = state.pathParameters['id']!;
 | 
			
		||||
                  return PostDetailScreen(id: id);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'publisherProfile',
 | 
			
		||||
                path: '/publishers/:name',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  return PublisherProfileScreen(name: name);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'discoveryRealms',
 | 
			
		||||
                path: '/discovery/realms',
 | 
			
		||||
                builder: (context, state) => const DiscoveryRealmsScreen(),
 | 
			
		||||
              ),
 | 
			
		||||
 | 
			
		||||
              // Chat tab
 | 
			
		||||
@@ -305,14 +375,17 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    (context, state, child) => ChatShellScreen(child: child),
 | 
			
		||||
                routes: [
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'chatList',
 | 
			
		||||
                    path: '/chat',
 | 
			
		||||
                    builder: (context, state) => const ChatListScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'chatNew',
 | 
			
		||||
                    path: '/chat/new',
 | 
			
		||||
                    builder: (context, state) => const NewChatScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'chatRoom',
 | 
			
		||||
                    path: '/chat/:id',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -320,6 +393,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'chatEdit',
 | 
			
		||||
                    path: '/chat/:id/edit',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -327,6 +401,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'chatDetail',
 | 
			
		||||
                    path: '/chat/:id/detail',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final id = state.pathParameters['id']!;
 | 
			
		||||
@@ -338,14 +413,17 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
 | 
			
		||||
              // Realms tab
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'realmList',
 | 
			
		||||
                path: '/realms',
 | 
			
		||||
                builder: (context, state) => const RealmListScreen(),
 | 
			
		||||
                routes: [
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'realmNew',
 | 
			
		||||
                    path: 'new',
 | 
			
		||||
                    builder: (context, state) => const NewRealmScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'realmDetail',
 | 
			
		||||
                    path: ':slug',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final slug = state.pathParameters['slug']!;
 | 
			
		||||
@@ -353,6 +431,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'realmEdit',
 | 
			
		||||
                    path: ':slug/edit',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final slug = state.pathParameters['slug']!;
 | 
			
		||||
@@ -368,42 +447,56 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
			
		||||
                    (context, state, child) => AccountShellScreen(child: child),
 | 
			
		||||
                routes: [
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'account',
 | 
			
		||||
                    path: '/account',
 | 
			
		||||
                    builder: (context, state) => const AccountScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'notifications',
 | 
			
		||||
                    path: '/account/notifications',
 | 
			
		||||
                    builder: (context, state) => const NotificationScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'wallet',
 | 
			
		||||
                    path: '/account/wallet',
 | 
			
		||||
                    builder: (context, state) => const WalletScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'relationships',
 | 
			
		||||
                    path: '/account/relationships',
 | 
			
		||||
                    builder: (context, state) => const RelationshipScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/account/:name',
 | 
			
		||||
                    builder: (context, state) {
 | 
			
		||||
                      final name = state.pathParameters['name']!;
 | 
			
		||||
                      return AccountProfileScreen(name: name);
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'profileUpdate',
 | 
			
		||||
                    path: '/account/me/update',
 | 
			
		||||
                    builder: (context, state) => const UpdateProfileScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'leveling',
 | 
			
		||||
                    path: '/account/me/leveling',
 | 
			
		||||
                    builder: (context, state) => const LevelingScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    path: '/account/settings',
 | 
			
		||||
                    name: 'accountSettings',
 | 
			
		||||
                    path: '/account/me/settings',
 | 
			
		||||
                    builder: (context, state) => const AccountSettingsScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                  GoRoute(
 | 
			
		||||
                    name: 'reportList',
 | 
			
		||||
                    path: '/safety/reports/me',
 | 
			
		||||
                    builder: (context, state) => const AbuseReportListScreen(),
 | 
			
		||||
                  ),
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
 | 
			
		||||
              GoRoute(
 | 
			
		||||
                name: 'accountProfile',
 | 
			
		||||
                path: '/account/:name',
 | 
			
		||||
                builder: (context, state) {
 | 
			
		||||
                  final name = state.pathParameters['name']!;
 | 
			
		||||
                  return AccountProfileScreen(name: name);
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
@@ -426,6 +519,10 @@ class AppRouter {
 | 
			
		||||
    context.push(path);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static void pushNamed(BuildContext context, String name) {
 | 
			
		||||
    context.pushNamed(name);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static void pop(BuildContext context) {
 | 
			
		||||
    context.pop();
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,19 @@
 | 
			
		||||
import 'dart:io';
 | 
			
		||||
 | 
			
		||||
import 'package:device_info_plus/device_info_plus.dart';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter/services.dart';
 | 
			
		||||
import 'package:gap/gap.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
import 'package:island/services/notify.dart';
 | 
			
		||||
import 'package:island/services/udid.native.dart';
 | 
			
		||||
import 'package:island/widgets/alert.dart';
 | 
			
		||||
import 'package:island/widgets/app_scaffold.dart';
 | 
			
		||||
import 'package:material_symbols_icons/symbols.dart';
 | 
			
		||||
import 'package:package_info_plus/package_info_plus.dart';
 | 
			
		||||
import 'package:styled_widget/styled_widget.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
import 'package:easy_localization/easy_localization.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher_string.dart';
 | 
			
		||||
 | 
			
		||||
class AboutScreen extends ConsumerStatefulWidget {
 | 
			
		||||
  const AboutScreen({super.key});
 | 
			
		||||
@@ -90,7 +92,8 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final theme = Theme.of(context);
 | 
			
		||||
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      isNoBackground: false,
 | 
			
		||||
      appBar: AppBar(title: Text('about'.tr()), elevation: 0),
 | 
			
		||||
      body:
 | 
			
		||||
          _isLoading
 | 
			
		||||
@@ -167,34 +170,16 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
			
		||||
                          _buildInfoItem(
 | 
			
		||||
                            context,
 | 
			
		||||
                            icon: Symbols.label,
 | 
			
		||||
                            label: 'Device Name',
 | 
			
		||||
                            label: 'aboutDeviceName'.tr(),
 | 
			
		||||
                            value: _deviceInfo?.data['name'],
 | 
			
		||||
                          ),
 | 
			
		||||
                          _buildInfoItem(
 | 
			
		||||
                            context,
 | 
			
		||||
                            icon: Symbols.fingerprint,
 | 
			
		||||
                            label: 'Device Identifier',
 | 
			
		||||
                            label: 'aboutDeviceIdentifier'.tr(),
 | 
			
		||||
                            value: _deviceUdid ?? 'N/A',
 | 
			
		||||
                            copyable: true,
 | 
			
		||||
                          ),
 | 
			
		||||
                          const Divider(height: 1),
 | 
			
		||||
                          _buildListTile(
 | 
			
		||||
                            context,
 | 
			
		||||
                            icon: Symbols.notifications_active,
 | 
			
		||||
                            title: 'Reactivate Push Notifications',
 | 
			
		||||
                            onTap: () async {
 | 
			
		||||
                              showLoadingModal(context);
 | 
			
		||||
                              try {
 | 
			
		||||
                                await subscribePushNotification(
 | 
			
		||||
                                  ref.watch(apiClientProvider),
 | 
			
		||||
                                );
 | 
			
		||||
                              } catch (err) {
 | 
			
		||||
                                showErrorAlert(err);
 | 
			
		||||
                              } finally {
 | 
			
		||||
                                if (context.mounted) hideLoadingModal(context);
 | 
			
		||||
                              }
 | 
			
		||||
                            },
 | 
			
		||||
                          ),
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
 | 
			
		||||
@@ -265,6 +250,18 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
			
		||||
                                'https://github.com/Solsynth/Solian/blob/v3/LICENSE.txt',
 | 
			
		||||
                              ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        if (kIsWeb || !(Platform.isMacOS || Platform.isIOS))
 | 
			
		||||
                          _buildListTile(
 | 
			
		||||
                            context,
 | 
			
		||||
                            icon: Symbols.favorite,
 | 
			
		||||
                            title: 'donate'.tr(),
 | 
			
		||||
                            subtitle: 'donateDescription'.tr(),
 | 
			
		||||
                            onTap: () {
 | 
			
		||||
                              launchUrlString(
 | 
			
		||||
                                'https://afdian.com/@littlesheep',
 | 
			
		||||
                              );
 | 
			
		||||
                            },
 | 
			
		||||
                          ),
 | 
			
		||||
                      ],
 | 
			
		||||
                    ),
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      noBackground: isWide,
 | 
			
		||||
      isNoBackground: isWide,
 | 
			
		||||
      appBar: AppBar(backgroundColor: Colors.transparent, toolbarHeight: 0),
 | 
			
		||||
      body: SingleChildScrollView(
 | 
			
		||||
        padding: getTabbedPadding(context),
 | 
			
		||||
@@ -98,7 +98,10 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
                          radius: 24,
 | 
			
		||||
                        ),
 | 
			
		||||
                        onTap: () {
 | 
			
		||||
                          context.push('/account/${user.value!.name}');
 | 
			
		||||
                          context.pushNamed(
 | 
			
		||||
                            'accountProfile',
 | 
			
		||||
                            pathParameters: {'name': user.value!.name},
 | 
			
		||||
                          );
 | 
			
		||||
                        },
 | 
			
		||||
                      ),
 | 
			
		||||
                      Expanded(
 | 
			
		||||
@@ -143,7 +146,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
                progress: user.value!.profile.levelingProgress,
 | 
			
		||||
              ),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/me/leveling');
 | 
			
		||||
                context.pushNamed('leveling');
 | 
			
		||||
              },
 | 
			
		||||
            ).padding(horizontal: 12),
 | 
			
		||||
            Row(
 | 
			
		||||
@@ -161,7 +164,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
                        ],
 | 
			
		||||
                      ).padding(horizontal: 16, vertical: 12),
 | 
			
		||||
                      onTap: () {
 | 
			
		||||
                        context.push('/creators');
 | 
			
		||||
                        context.pushNamed('creatorHub');
 | 
			
		||||
                      },
 | 
			
		||||
                    ),
 | 
			
		||||
                  ).height(140),
 | 
			
		||||
@@ -179,7 +182,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
                        ],
 | 
			
		||||
                      ).padding(horizontal: 16, vertical: 12),
 | 
			
		||||
                      onTap: () {
 | 
			
		||||
                        context.push('/developers');
 | 
			
		||||
                        context.pushNamed('developerHub');
 | 
			
		||||
                      },
 | 
			
		||||
                    ),
 | 
			
		||||
                  ).height(140),
 | 
			
		||||
@@ -202,7 +205,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/notifications');
 | 
			
		||||
                context.pushNamed('notifications');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
@@ -212,7 +215,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('wallet').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/wallet');
 | 
			
		||||
                context.pushNamed('wallet');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
@@ -222,9 +225,17 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('relationships').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/relationship');
 | 
			
		||||
                context.pushNamed('relationships');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              minTileHeight: 48,
 | 
			
		||||
              title: Text('abuseReports').tr(),
 | 
			
		||||
              contentPadding: const EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              leading: const Icon(Symbols.gavel),
 | 
			
		||||
              trailing: const Icon(Symbols.chevron_right),
 | 
			
		||||
              onTap: () => context.pushNamed('reportList'),
 | 
			
		||||
            ),
 | 
			
		||||
            const Divider(height: 1).padding(vertical: 8),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              minTileHeight: 48,
 | 
			
		||||
@@ -233,7 +244,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('appSettings').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/settings');
 | 
			
		||||
                context.pushNamed('settings');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
@@ -243,7 +254,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('updateYourProfile').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/me/update');
 | 
			
		||||
                context.pushNamed('profileUpdate');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
@@ -253,7 +264,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('accountSettings').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/account/me/settings');
 | 
			
		||||
                context.pushNamed('accountSettings');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            if (kDebugMode) const Divider(height: 1).padding(vertical: 8),
 | 
			
		||||
@@ -288,7 +299,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
			
		||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
			
		||||
              title: Text('about').tr(),
 | 
			
		||||
              onTap: () {
 | 
			
		||||
                context.push('/about');
 | 
			
		||||
                context.pushNamed('about');
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
@@ -328,7 +339,7 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
			
		||||
                  child: Card(
 | 
			
		||||
                    child: InkWell(
 | 
			
		||||
                      onTap: () {
 | 
			
		||||
                        context.push('/auth/create');
 | 
			
		||||
                        context.pushNamed('createAccount');
 | 
			
		||||
                      },
 | 
			
		||||
                      child: Padding(
 | 
			
		||||
                        padding: const EdgeInsets.all(16),
 | 
			
		||||
@@ -350,7 +361,7 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
			
		||||
                  child: Card(
 | 
			
		||||
                    child: InkWell(
 | 
			
		||||
                      onTap: () {
 | 
			
		||||
                        context.push('/auth/login');
 | 
			
		||||
                        context.pushNamed('login');
 | 
			
		||||
                      },
 | 
			
		||||
                      child: Padding(
 | 
			
		||||
                        padding: const EdgeInsets.all(16),
 | 
			
		||||
@@ -372,13 +383,13 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
			
		||||
                  children: [
 | 
			
		||||
                    TextButton(
 | 
			
		||||
                      onPressed: () {
 | 
			
		||||
                        context.push('/about');
 | 
			
		||||
                        context.pushNamed('about');
 | 
			
		||||
                      },
 | 
			
		||||
                      child: Text('about').tr(),
 | 
			
		||||
                    ),
 | 
			
		||||
                    TextButton(
 | 
			
		||||
                      onPressed: () {
 | 
			
		||||
                        context.push('/settings');
 | 
			
		||||
                        context.pushNamed('settings');
 | 
			
		||||
                      },
 | 
			
		||||
                      child: Text('appSettings').tr(),
 | 
			
		||||
                    ),
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ class EventCalanderScreen extends HookConsumerWidget {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      noBackground: false,
 | 
			
		||||
      isNoBackground: false,
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: const PageBackButton(),
 | 
			
		||||
        title: Text('eventCalander').tr(),
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ part 'leveling.g.dart';
 | 
			
		||||
Future<SnWalletSubscription?> accountStellarSubscription(Ref ref) async {
 | 
			
		||||
  try {
 | 
			
		||||
    final client = ref.watch(apiClientProvider);
 | 
			
		||||
    final resp = await client.get('/subscriptions/fuzzy/solian.stellar');
 | 
			
		||||
    final resp = await client.get('/id/subscriptions/fuzzy/solian.stellar');
 | 
			
		||||
    return SnWalletSubscription.fromJson(resp.data);
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    if (err is DioException && err.response?.statusCode == 404) return null;
 | 
			
		||||
@@ -280,7 +280,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.post('/subscriptions/${membership.identifier}/cancel');
 | 
			
		||||
        await client.post('/id/subscriptions/${membership.identifier}/cancel');
 | 
			
		||||
        ref.invalidate(accountStellarSubscriptionProvider);
 | 
			
		||||
        ref.read(userInfoProvider.notifier).fetchUser();
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
@@ -432,7 +432,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
			
		||||
        'id': 'solian.stellar.nova',
 | 
			
		||||
        'name': 'membershipTierNova'.tr(),
 | 
			
		||||
        'price': 'membershipPriceNova'.tr(),
 | 
			
		||||
        'color': Colors.indigo,
 | 
			
		||||
        'color': Color.fromRGBO(57, 197, 187, 1),
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        'id': 'solian.stellar.supernova',
 | 
			
		||||
@@ -603,7 +603,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
			
		||||
    try {
 | 
			
		||||
      showLoadingModal(context);
 | 
			
		||||
      final resp = await client.post(
 | 
			
		||||
        '/subscriptions',
 | 
			
		||||
        '/id/subscriptions',
 | 
			
		||||
        data: {
 | 
			
		||||
          'identifier': tierId,
 | 
			
		||||
          'payment_method': 'solian.wallet',
 | 
			
		||||
@@ -615,7 +615,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
			
		||||
      final subscription = SnWalletSubscription.fromJson(resp.data);
 | 
			
		||||
      if (subscription.status == 1) return;
 | 
			
		||||
      final orderResp = await client.post(
 | 
			
		||||
        '/subscriptions/${subscription.identifier}/order',
 | 
			
		||||
        '/id/subscriptions/${subscription.identifier}/order',
 | 
			
		||||
      );
 | 
			
		||||
      final order = SnWalletOrder.fromJson(orderResp.data);
 | 
			
		||||
 | 
			
		||||
@@ -633,7 +633,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
      if (paidOrder != null) {
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/subscriptions/order/handle',
 | 
			
		||||
          '/id/subscriptions/order/handle',
 | 
			
		||||
          data: {'order_id': paidOrder.id},
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ part of 'leveling.dart';
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$accountStellarSubscriptionHash() =>
 | 
			
		||||
    r'37fb821460e3ac50b5cf777c933b6779f732daee';
 | 
			
		||||
    r'80abcdefb3868775fd8fe3c980215713efff5948';
 | 
			
		||||
 | 
			
		||||
/// See also [accountStellarSubscription].
 | 
			
		||||
@ProviderFor(accountStellarSubscription)
 | 
			
		||||
 
 | 
			
		||||
@@ -28,14 +28,14 @@ part 'settings.g.dart';
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<List<SnAuthFactor>> authFactors(Ref ref) async {
 | 
			
		||||
  final client = ref.read(apiClientProvider);
 | 
			
		||||
  final res = await client.get('/accounts/me/factors');
 | 
			
		||||
  final res = await client.get('/id/accounts/me/factors');
 | 
			
		||||
  return res.data.map<SnAuthFactor>((e) => SnAuthFactor.fromJson(e)).toList();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<List<SnContactMethod>> contactMethods(Ref ref) async {
 | 
			
		||||
  final client = ref.read(apiClientProvider);
 | 
			
		||||
  final resp = await client.get('/accounts/me/contacts');
 | 
			
		||||
  final resp = await client.get('/id/accounts/me/contacts');
 | 
			
		||||
  return resp.data
 | 
			
		||||
      .map<SnContactMethod>((e) => SnContactMethod.fromJson(e))
 | 
			
		||||
      .toList();
 | 
			
		||||
@@ -44,7 +44,7 @@ Future<List<SnContactMethod>> contactMethods(Ref ref) async {
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<List<SnAccountConnection>> accountConnections(Ref ref) async {
 | 
			
		||||
  final client = ref.read(apiClientProvider);
 | 
			
		||||
  final resp = await client.get('/accounts/me/connections');
 | 
			
		||||
  final resp = await client.get('/id/accounts/me/connections');
 | 
			
		||||
  return resp.data
 | 
			
		||||
      .map<SnAccountConnection>((e) => SnAccountConnection.fromJson(e))
 | 
			
		||||
      .toList();
 | 
			
		||||
@@ -68,7 +68,7 @@ class AccountSettingsScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.delete('/accounts/me');
 | 
			
		||||
        await client.delete('/id/accounts/me');
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
          showSnackBar('accountDeletionSent'.tr());
 | 
			
		||||
        }
 | 
			
		||||
@@ -94,7 +94,7 @@ class AccountSettingsScreen extends HookConsumerWidget {
 | 
			
		||||
        final userInfo = ref.read(userInfoProvider);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/accounts/recovery/password',
 | 
			
		||||
          '/id/accounts/recovery/password',
 | 
			
		||||
          data: {'account': userInfo.value!.name, 'captcha_token': captchaTk},
 | 
			
		||||
        );
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'settings.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$authFactorsHash() => r'4bb65bc0c065c4091c209ee81e57ddef41051ae2';
 | 
			
		||||
String _$authFactorsHash() => r'24fe2f7b375b019d87fc3b85cbedbe857f399c0f';
 | 
			
		||||
 | 
			
		||||
/// See also [authFactors].
 | 
			
		||||
@ProviderFor(authFactors)
 | 
			
		||||
@@ -25,7 +25,7 @@ final authFactorsProvider =
 | 
			
		||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
			
		||||
// ignore: unused_element
 | 
			
		||||
typedef AuthFactorsRef = AutoDisposeFutureProviderRef<List<SnAuthFactor>>;
 | 
			
		||||
String _$contactMethodsHash() => r'4d7952fc196dce4dc646314565a49c115fd1d292';
 | 
			
		||||
String _$contactMethodsHash() => r'76a1a93f61c51c44b32b4821f5112d58406155f0';
 | 
			
		||||
 | 
			
		||||
/// See also [contactMethods].
 | 
			
		||||
@ProviderFor(contactMethods)
 | 
			
		||||
@@ -45,7 +45,7 @@ final contactMethodsProvider =
 | 
			
		||||
// ignore: unused_element
 | 
			
		||||
typedef ContactMethodsRef = AutoDisposeFutureProviderRef<List<SnContactMethod>>;
 | 
			
		||||
String _$accountConnectionsHash() =>
 | 
			
		||||
    r'38a309d596e0ea2539cd92ea86984e1e4fb346e4';
 | 
			
		||||
    r'9f69e7f23e3e53c528d38b93d76f0c9efc9a83db';
 | 
			
		||||
 | 
			
		||||
/// See also [accountConnections].
 | 
			
		||||
@ProviderFor(accountConnections)
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.delete('/accounts/me/factors/${factor.id}');
 | 
			
		||||
        await client.delete('/id/accounts/me/factors/${factor.id}');
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -49,7 +49,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post('/accounts/me/factors/${factor.id}/disable');
 | 
			
		||||
        await client.post('/id/accounts/me/factors/${factor.id}/disable');
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -106,7 +106,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/accounts/me/factors/${factor.id}/enable',
 | 
			
		||||
          '/id/accounts/me/factors/${factor.id}/enable',
 | 
			
		||||
          data: jsonEncode(password),
 | 
			
		||||
        );
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
@@ -193,7 +193,7 @@ class AuthFactorNewSheet extends HookConsumerWidget {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final apiClient = ref.read(apiClientProvider);
 | 
			
		||||
        final resp = await apiClient.post(
 | 
			
		||||
          '/accounts/me/factors',
 | 
			
		||||
          '/id/accounts/me/factors',
 | 
			
		||||
          data: {'type': factorType.value, 'secret': secretController.text},
 | 
			
		||||
        );
 | 
			
		||||
        final factor = SnAuthFactor.fromJson(resp.data);
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ class AccountConnectionSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.delete('/accounts/me/connections/${connection.id}');
 | 
			
		||||
        await client.delete('/id/accounts/me/connections/${connection.id}');
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -174,7 +174,7 @@ class AccountConnectionNewSheet extends HookConsumerWidget {
 | 
			
		||||
            if (context.mounted) showLoadingModal(context);
 | 
			
		||||
 | 
			
		||||
            await client.post(
 | 
			
		||||
              '/auth/connect/apple/mobile',
 | 
			
		||||
              '/id/auth/connect/apple/mobile',
 | 
			
		||||
              data: {
 | 
			
		||||
                'identity_token': credential.identityToken!,
 | 
			
		||||
                'authorization_code': credential.authorizationCode,
 | 
			
		||||
@@ -336,7 +336,7 @@ class AccountConnectionsSheet extends HookConsumerWidget {
 | 
			
		||||
                                try {
 | 
			
		||||
                                  final client = ref.read(apiClientProvider);
 | 
			
		||||
                                  await client.delete(
 | 
			
		||||
                                    '/accounts/me/connections/${connection.id}',
 | 
			
		||||
                                    '/id/accounts/me/connections/${connection.id}',
 | 
			
		||||
                                  );
 | 
			
		||||
                                  ref.invalidate(accountConnectionsProvider);
 | 
			
		||||
                                  return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.delete('/accounts/me/contacts/${contact.id}');
 | 
			
		||||
        await client.delete('/id/accounts/me/contacts/${contact.id}');
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -38,7 +38,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post('/accounts/me/contacts/${contact.id}/verify');
 | 
			
		||||
        await client.post('/id/accounts/me/contacts/${contact.id}/verify');
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
          showSnackBar('contactMethodVerificationSent'.tr());
 | 
			
		||||
        }
 | 
			
		||||
@@ -53,7 +53,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post('/accounts/me/contacts/${contact.id}/primary');
 | 
			
		||||
        await client.post('/id/accounts/me/contacts/${contact.id}/primary');
 | 
			
		||||
        if (context.mounted) Navigator.pop(context, true);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -160,7 +160,7 @@ class ContactMethodNewSheet extends HookConsumerWidget {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final apiClient = ref.read(apiClientProvider);
 | 
			
		||||
        await apiClient.post(
 | 
			
		||||
          '/accounts/me/contacts',
 | 
			
		||||
          '/id/accounts/me/contacts',
 | 
			
		||||
          data: {'type': contactType.value, 'content': contentController.text},
 | 
			
		||||
        );
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
			
		||||
        }
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.patch(
 | 
			
		||||
          '/accounts/me/profile',
 | 
			
		||||
          '/id/accounts/me/profile',
 | 
			
		||||
          data: {'${position}_id': cloudFile.id},
 | 
			
		||||
        );
 | 
			
		||||
        final userNotifier = ref.read(userInfoProvider.notifier);
 | 
			
		||||
@@ -102,7 +102,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.patch(
 | 
			
		||||
          '/accounts/me',
 | 
			
		||||
          '/id/accounts/me',
 | 
			
		||||
          data: {
 | 
			
		||||
            'name': usernameController.text,
 | 
			
		||||
            'nick': nicknameController.text,
 | 
			
		||||
@@ -154,7 +154,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.patch(
 | 
			
		||||
          '/accounts/me/profile',
 | 
			
		||||
          '/id/accounts/me/profile',
 | 
			
		||||
          data: {
 | 
			
		||||
            'bio': bioController.text,
 | 
			
		||||
            'first_name': firstNameController.text,
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ import 'package:island/pods/event_calendar.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
import 'package:island/pods/userinfo.dart';
 | 
			
		||||
import 'package:island/services/color.dart';
 | 
			
		||||
import 'package:island/services/responsive.dart';
 | 
			
		||||
import 'package:island/services/time.dart';
 | 
			
		||||
import 'package:island/services/timezone/native.dart';
 | 
			
		||||
import 'package:island/widgets/account/account_name.dart';
 | 
			
		||||
@@ -22,9 +23,12 @@ import 'package:island/widgets/account/status.dart';
 | 
			
		||||
import 'package:island/widgets/alert.dart';
 | 
			
		||||
import 'package:island/widgets/app_scaffold.dart';
 | 
			
		||||
import 'package:island/widgets/content/cloud_files.dart';
 | 
			
		||||
import 'package:island/widgets/content/markdown.dart';
 | 
			
		||||
import 'package:island/widgets/safety/abuse_report_helper.dart';
 | 
			
		||||
import 'package:material_symbols_icons/symbols.dart';
 | 
			
		||||
import 'package:palette_generator/palette_generator.dart';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
import 'package:share_plus/share_plus.dart';
 | 
			
		||||
import 'package:styled_widget/styled_widget.dart';
 | 
			
		||||
 | 
			
		||||
part 'profile.g.dart';
 | 
			
		||||
@@ -38,14 +42,14 @@ Future<SnAccount> account(Ref ref, String uname) async {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  final apiClient = ref.watch(apiClientProvider);
 | 
			
		||||
  final resp = await apiClient.get("/accounts/$uname");
 | 
			
		||||
  final resp = await apiClient.get("/id/accounts/$uname");
 | 
			
		||||
  return SnAccount.fromJson(resp.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<List<SnAccountBadge>> accountBadges(Ref ref, String uname) async {
 | 
			
		||||
  final apiClient = ref.watch(apiClientProvider);
 | 
			
		||||
  final resp = await apiClient.get("/accounts/$uname/badges");
 | 
			
		||||
  final resp = await apiClient.get("/id/accounts/$uname/badges");
 | 
			
		||||
  return List<SnAccountBadge>.from(
 | 
			
		||||
    resp.data.map((x) => SnAccountBadge.fromJson(x)),
 | 
			
		||||
  );
 | 
			
		||||
@@ -77,7 +81,7 @@ Future<SnChatRoom?> accountDirectChat(Ref ref, String uname) async {
 | 
			
		||||
  final account = await ref.watch(accountProvider(uname).future);
 | 
			
		||||
  final apiClient = ref.watch(apiClientProvider);
 | 
			
		||||
  try {
 | 
			
		||||
    final resp = await apiClient.get("/chat/direct/${account.id}");
 | 
			
		||||
    final resp = await apiClient.get("/sphere/chat/direct/${account.id}");
 | 
			
		||||
    return SnChatRoom.fromJson(resp.data);
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
			
		||||
@@ -94,7 +98,7 @@ Future<SnRelationship?> accountRelationship(Ref ref, String uname) async {
 | 
			
		||||
  final account = await ref.watch(accountProvider(uname).future);
 | 
			
		||||
  final apiClient = ref.watch(apiClientProvider);
 | 
			
		||||
  try {
 | 
			
		||||
    final resp = await apiClient.get("/relationships/${account.id}");
 | 
			
		||||
    final resp = await apiClient.get("/id/relationships/${account.id}");
 | 
			
		||||
    return SnRelationship.fromJson(resp.data);
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
			
		||||
@@ -134,7 +138,24 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
			
		||||
      showLoadingModal(context);
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.post('/relationships/${account.value!.id}/friends');
 | 
			
		||||
        await client.post('/id/relationships/${account.value!.id}/friends');
 | 
			
		||||
        ref.invalidate(accountRelationshipProvider(name));
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
      } finally {
 | 
			
		||||
        if (context.mounted) hideLoadingModal(context);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Future<void> blockAction() async {
 | 
			
		||||
      showLoadingModal(context);
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        if (accountRelationship.value == null) {
 | 
			
		||||
          await client.post('/id/relationships/${account.value!.id}/block');
 | 
			
		||||
        } else {
 | 
			
		||||
          await client.delete('/id/relationships/${account.value!.id}/block');
 | 
			
		||||
        }
 | 
			
		||||
        ref.invalidate(accountRelationshipProvider(name));
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -146,18 +167,23 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
			
		||||
    Future<void> directMessageAction() async {
 | 
			
		||||
      if (!account.hasValue) return;
 | 
			
		||||
      if (accountChat.value != null) {
 | 
			
		||||
        context.push('/chat/${accountChat.value!.id}');
 | 
			
		||||
        context.pushNamed(
 | 
			
		||||
          'chatRoom',
 | 
			
		||||
          pathParameters: {'id': accountChat.value!.id},
 | 
			
		||||
        );
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      showLoadingModal(context);
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        final resp = await client.post(
 | 
			
		||||
          '/chat/direct',
 | 
			
		||||
          '/sphere/chat/direct',
 | 
			
		||||
          data: {'related_user_id': account.value!.id},
 | 
			
		||||
        );
 | 
			
		||||
        final chat = SnChatRoom.fromJson(resp.data);
 | 
			
		||||
        if (context.mounted) context.push('/chat/${chat.id}');
 | 
			
		||||
        if (context.mounted) {
 | 
			
		||||
          context.pushNamed('chatRoom', pathParameters: {'id': chat.id});
 | 
			
		||||
        }
 | 
			
		||||
        ref.invalidate(accountDirectChatProvider(name));
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
@@ -225,235 +251,402 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
    final user = ref.watch(userInfoProvider);
 | 
			
		||||
 | 
			
		||||
    Widget accountBasicInfo(SnAccount data) => Padding(
 | 
			
		||||
      padding: const EdgeInsets.fromLTRB(24, 24, 24, 8),
 | 
			
		||||
      child: Row(
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
        children: [
 | 
			
		||||
          ProfilePictureWidget(file: data.profile.picture, radius: 32),
 | 
			
		||||
          const Gap(20),
 | 
			
		||||
          Expanded(
 | 
			
		||||
            child: Column(
 | 
			
		||||
              crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
			
		||||
              children: [
 | 
			
		||||
                Row(
 | 
			
		||||
                  children: [
 | 
			
		||||
                    AccountName(account: data, style: TextStyle(fontSize: 20)),
 | 
			
		||||
                    const Gap(6),
 | 
			
		||||
                    Flexible(
 | 
			
		||||
                      child: Text(
 | 
			
		||||
                        '@${data.name}',
 | 
			
		||||
                        maxLines: 1,
 | 
			
		||||
                        overflow: TextOverflow.ellipsis,
 | 
			
		||||
                      ).fontSize(14).opacity(0.85),
 | 
			
		||||
                    ),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
                AccountStatusWidget(uname: name, padding: EdgeInsets.zero),
 | 
			
		||||
              ],
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
          IconButton(
 | 
			
		||||
            onPressed: () {
 | 
			
		||||
              SharePlus.instance.share(
 | 
			
		||||
                ShareParams(
 | 
			
		||||
                  uri: Uri.parse('https://id.solian.app/@${data.name}'),
 | 
			
		||||
                ),
 | 
			
		||||
              );
 | 
			
		||||
            },
 | 
			
		||||
            icon: const Icon(Symbols.share),
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    Widget accountProfileBio(SnAccount data) => Card(
 | 
			
		||||
      child: Column(
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
        children: [
 | 
			
		||||
          Text('bio').tr().bold().fontSize(15).padding(bottom: 8),
 | 
			
		||||
          if (data.profile.bio.isEmpty)
 | 
			
		||||
            Text('descriptionNone').tr().italic()
 | 
			
		||||
          else
 | 
			
		||||
            MarkdownTextContent(
 | 
			
		||||
              content: data.profile.bio,
 | 
			
		||||
              linesMargin: EdgeInsets.zero,
 | 
			
		||||
            ),
 | 
			
		||||
        ],
 | 
			
		||||
      ).padding(horizontal: 24, vertical: 20),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    Widget accountProfileDetail(SnAccount data) => Card(
 | 
			
		||||
      child: Column(
 | 
			
		||||
        crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
			
		||||
        spacing: 24,
 | 
			
		||||
        children: [
 | 
			
		||||
          if (buildSubcolumn(data).isNotEmpty)
 | 
			
		||||
            Column(
 | 
			
		||||
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
              spacing: 2,
 | 
			
		||||
              children: buildSubcolumn(data),
 | 
			
		||||
            ),
 | 
			
		||||
          if (data.profile.timeZone.isNotEmpty)
 | 
			
		||||
            Column(
 | 
			
		||||
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
              children: [
 | 
			
		||||
                Text('timeZone').tr().bold(),
 | 
			
		||||
                Row(
 | 
			
		||||
                  crossAxisAlignment: CrossAxisAlignment.baseline,
 | 
			
		||||
                  textBaseline: TextBaseline.alphabetic,
 | 
			
		||||
                  spacing: 6,
 | 
			
		||||
                  children: [
 | 
			
		||||
                    Text(data.profile.timeZone),
 | 
			
		||||
                    Text(
 | 
			
		||||
                      getTzInfo(
 | 
			
		||||
                        data.profile.timeZone,
 | 
			
		||||
                      ).$2.formatCustomGlobal('HH:mm'),
 | 
			
		||||
                    ),
 | 
			
		||||
                    Text(
 | 
			
		||||
                      getTzInfo(data.profile.timeZone).$1.formatOffsetLocal(),
 | 
			
		||||
                    ).fontSize(11),
 | 
			
		||||
                    Text(
 | 
			
		||||
                      'UTC${getTzInfo(data.profile.timeZone).$1.formatOffset()}',
 | 
			
		||||
                    ).fontSize(11).opacity(0.75),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
              ],
 | 
			
		||||
            ),
 | 
			
		||||
        ],
 | 
			
		||||
      ).padding(horizontal: 24, vertical: 16),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    Widget accountAction(SnAccount data) => Card(
 | 
			
		||||
      child: Column(
 | 
			
		||||
        children: [
 | 
			
		||||
          Row(
 | 
			
		||||
            spacing: 8,
 | 
			
		||||
            children: [
 | 
			
		||||
              if (accountRelationship.value == null ||
 | 
			
		||||
                  accountRelationship.value!.status > -100)
 | 
			
		||||
                Expanded(
 | 
			
		||||
                  child: FilledButton.icon(
 | 
			
		||||
                    style: ButtonStyle(
 | 
			
		||||
                      backgroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? null
 | 
			
		||||
                            : Theme.of(context).colorScheme.secondary,
 | 
			
		||||
                      ),
 | 
			
		||||
                      foregroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? null
 | 
			
		||||
                            : Theme.of(context).colorScheme.onSecondary,
 | 
			
		||||
                      ),
 | 
			
		||||
                    ),
 | 
			
		||||
                    onPressed: relationshipAction,
 | 
			
		||||
                    label:
 | 
			
		||||
                        Text(
 | 
			
		||||
                          accountRelationship.value == null
 | 
			
		||||
                              ? 'addFriendShort'
 | 
			
		||||
                              : 'added',
 | 
			
		||||
                        ).tr(),
 | 
			
		||||
                    icon:
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? const Icon(Symbols.person_add)
 | 
			
		||||
                            : const Icon(Symbols.person_check),
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
              if (accountRelationship.value == null ||
 | 
			
		||||
                  accountRelationship.value!.status <= -100)
 | 
			
		||||
                Expanded(
 | 
			
		||||
                  child: FilledButton.icon(
 | 
			
		||||
                    style: ButtonStyle(
 | 
			
		||||
                      backgroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? null
 | 
			
		||||
                            : Theme.of(context).colorScheme.secondary,
 | 
			
		||||
                      ),
 | 
			
		||||
                      foregroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? null
 | 
			
		||||
                            : Theme.of(context).colorScheme.onSecondary,
 | 
			
		||||
                      ),
 | 
			
		||||
                    ),
 | 
			
		||||
                    onPressed: blockAction,
 | 
			
		||||
                    label:
 | 
			
		||||
                        Text(
 | 
			
		||||
                          accountRelationship.value == null
 | 
			
		||||
                              ? 'blockUser'
 | 
			
		||||
                              : 'unblockUser',
 | 
			
		||||
                        ).tr(),
 | 
			
		||||
                    icon:
 | 
			
		||||
                        accountRelationship.value == null
 | 
			
		||||
                            ? const Icon(Symbols.block)
 | 
			
		||||
                            : const Icon(Symbols.person_cancel),
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
          Row(
 | 
			
		||||
            spacing: 8,
 | 
			
		||||
            children: [
 | 
			
		||||
              Expanded(
 | 
			
		||||
                child: FilledButton.icon(
 | 
			
		||||
                  onPressed: directMessageAction,
 | 
			
		||||
                  icon: const Icon(Symbols.message),
 | 
			
		||||
                  label:
 | 
			
		||||
                      Text(
 | 
			
		||||
                        accountChat.value == null
 | 
			
		||||
                            ? 'createDirectMessage'
 | 
			
		||||
                            : 'gotoDirectMessage',
 | 
			
		||||
                        maxLines: 1,
 | 
			
		||||
                      ).tr(),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
              IconButton.filled(
 | 
			
		||||
                onPressed: () {
 | 
			
		||||
                  showAbuseReportSheet(
 | 
			
		||||
                    context,
 | 
			
		||||
                    resourceIdentifier: 'account/${data.id}',
 | 
			
		||||
                  );
 | 
			
		||||
                },
 | 
			
		||||
                icon: Icon(
 | 
			
		||||
                  Symbols.flag,
 | 
			
		||||
                  color: Theme.of(context).colorScheme.onError,
 | 
			
		||||
                ),
 | 
			
		||||
                style: ButtonStyle(
 | 
			
		||||
                  backgroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                    Theme.of(context).colorScheme.error,
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
      ).padding(horizontal: 16, vertical: 8),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return account.when(
 | 
			
		||||
      data:
 | 
			
		||||
          (data) => AppScaffold(
 | 
			
		||||
            body: CustomScrollView(
 | 
			
		||||
              slivers: [
 | 
			
		||||
                SliverAppBar(
 | 
			
		||||
                  foregroundColor: appbarColor.value,
 | 
			
		||||
                  expandedHeight: 180,
 | 
			
		||||
                  pinned: true,
 | 
			
		||||
                  leading: PageBackButton(
 | 
			
		||||
                    color: appbarColor.value,
 | 
			
		||||
                    shadows: [appbarShadow],
 | 
			
		||||
                  ),
 | 
			
		||||
                  flexibleSpace: Stack(
 | 
			
		||||
                    children: [
 | 
			
		||||
                      Positioned.fill(
 | 
			
		||||
                        child:
 | 
			
		||||
                            data.profile.background?.id != null
 | 
			
		||||
                                ? CloudImageWidget(
 | 
			
		||||
                                  file: data.profile.background,
 | 
			
		||||
                                )
 | 
			
		||||
                                : Container(
 | 
			
		||||
                                  color:
 | 
			
		||||
                                      Theme.of(
 | 
			
		||||
                                        context,
 | 
			
		||||
                                      ).appBarTheme.backgroundColor,
 | 
			
		||||
                                ),
 | 
			
		||||
            isNoBackground: false,
 | 
			
		||||
            appBar:
 | 
			
		||||
                isWideScreen(context)
 | 
			
		||||
                    ? AppBar(
 | 
			
		||||
                      foregroundColor: appbarColor.value,
 | 
			
		||||
                      leading: PageBackButton(
 | 
			
		||||
                        color: appbarColor.value,
 | 
			
		||||
                        shadows: [appbarShadow],
 | 
			
		||||
                      ),
 | 
			
		||||
                      FlexibleSpaceBar(
 | 
			
		||||
                        title: Text(
 | 
			
		||||
                          data.nick,
 | 
			
		||||
                          style: TextStyle(
 | 
			
		||||
                            color:
 | 
			
		||||
                                appbarColor.value ??
 | 
			
		||||
                                Theme.of(context).appBarTheme.foregroundColor,
 | 
			
		||||
                            shadows: [appbarShadow],
 | 
			
		||||
                      flexibleSpace: Stack(
 | 
			
		||||
                        children: [
 | 
			
		||||
                          Positioned.fill(
 | 
			
		||||
                            child:
 | 
			
		||||
                                data.profile.background?.id != null
 | 
			
		||||
                                    ? CloudImageWidget(
 | 
			
		||||
                                      file: data.profile.background,
 | 
			
		||||
                                    )
 | 
			
		||||
                                    : Container(
 | 
			
		||||
                                      color:
 | 
			
		||||
                                          Theme.of(
 | 
			
		||||
                                            context,
 | 
			
		||||
                                          ).appBarTheme.backgroundColor,
 | 
			
		||||
                                    ),
 | 
			
		||||
                          ),
 | 
			
		||||
                          FlexibleSpaceBar(
 | 
			
		||||
                            title: Text(
 | 
			
		||||
                              data.nick,
 | 
			
		||||
                              style: TextStyle(
 | 
			
		||||
                                color:
 | 
			
		||||
                                    appbarColor.value ??
 | 
			
		||||
                                    Theme.of(
 | 
			
		||||
                                      context,
 | 
			
		||||
                                    ).appBarTheme.foregroundColor,
 | 
			
		||||
                                shadows: [appbarShadow],
 | 
			
		||||
                              ),
 | 
			
		||||
                            ),
 | 
			
		||||
                          ),
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
                    )
 | 
			
		||||
                    : null,
 | 
			
		||||
            body:
 | 
			
		||||
                isWideScreen(context)
 | 
			
		||||
                    ? Row(
 | 
			
		||||
                      children: [
 | 
			
		||||
                        Flexible(
 | 
			
		||||
                          child: CustomScrollView(
 | 
			
		||||
                            slivers: [
 | 
			
		||||
                              SliverToBoxAdapter(child: accountBasicInfo(data)),
 | 
			
		||||
                              if (data.badges.isNotEmpty)
 | 
			
		||||
                                SliverToBoxAdapter(
 | 
			
		||||
                                  child: BadgeList(
 | 
			
		||||
                                    badges: data.badges,
 | 
			
		||||
                                  ).padding(horizontal: 24, bottom: 24),
 | 
			
		||||
                                ),
 | 
			
		||||
                              SliverToBoxAdapter(
 | 
			
		||||
                                child: Column(
 | 
			
		||||
                                  spacing: 12,
 | 
			
		||||
                                  children: [
 | 
			
		||||
                                    LevelingProgressCard(
 | 
			
		||||
                                      level: data.profile.level,
 | 
			
		||||
                                      experience: data.profile.experience,
 | 
			
		||||
                                      progress: data.profile.levelingProgress,
 | 
			
		||||
                                    ),
 | 
			
		||||
                                    if (data.profile.verification != null)
 | 
			
		||||
                                      Card(
 | 
			
		||||
                                        child: VerificationStatusCard(
 | 
			
		||||
                                          mark: data.profile.verification!,
 | 
			
		||||
                                        ),
 | 
			
		||||
                                      ),
 | 
			
		||||
                                  ],
 | 
			
		||||
                                ).padding(horizontal: 4, top: 8),
 | 
			
		||||
                              ),
 | 
			
		||||
                              SliverToBoxAdapter(
 | 
			
		||||
                                child: accountProfileBio(data).padding(top: 4),
 | 
			
		||||
                              ),
 | 
			
		||||
                              SliverToBoxAdapter(
 | 
			
		||||
                                child: accountProfileDetail(data),
 | 
			
		||||
                              ),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: Padding(
 | 
			
		||||
                    padding: const EdgeInsets.fromLTRB(24, 24, 24, 8),
 | 
			
		||||
                    child: Row(
 | 
			
		||||
                      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                      children: [
 | 
			
		||||
                        ProfilePictureWidget(
 | 
			
		||||
                          file: data.profile.picture,
 | 
			
		||||
                          radius: 32,
 | 
			
		||||
                        ),
 | 
			
		||||
                        const Gap(20),
 | 
			
		||||
                        Expanded(
 | 
			
		||||
                          child: Column(
 | 
			
		||||
                            crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
			
		||||
                            children: [
 | 
			
		||||
                              Row(
 | 
			
		||||
                                children: [
 | 
			
		||||
                                  AccountName(
 | 
			
		||||
                                    account: data,
 | 
			
		||||
                                    style: TextStyle(fontSize: 20),
 | 
			
		||||
                        Flexible(
 | 
			
		||||
                          child: CustomScrollView(
 | 
			
		||||
                            slivers: [
 | 
			
		||||
                              SliverGap(24),
 | 
			
		||||
                              if (user.value != null)
 | 
			
		||||
                                SliverToBoxAdapter(child: accountAction(data)),
 | 
			
		||||
                              SliverToBoxAdapter(
 | 
			
		||||
                                child: Card(
 | 
			
		||||
                                  child: FortuneGraphWidget(
 | 
			
		||||
                                    events: accountEvents,
 | 
			
		||||
                                    eventCalanderUser: data.name,
 | 
			
		||||
                                    margin: EdgeInsets.zero,
 | 
			
		||||
                                  ),
 | 
			
		||||
                                  const Gap(6),
 | 
			
		||||
                                  Text(
 | 
			
		||||
                                    '@${data.name}',
 | 
			
		||||
                                  ).fontSize(14).opacity(0.85),
 | 
			
		||||
                                ],
 | 
			
		||||
                              ),
 | 
			
		||||
                              AccountStatusWidget(
 | 
			
		||||
                                uname: name,
 | 
			
		||||
                                padding: EdgeInsets.zero,
 | 
			
		||||
                                ),
 | 
			
		||||
                              ),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ],
 | 
			
		||||
                    ),
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
                if (data.badges.isNotEmpty)
 | 
			
		||||
                  SliverToBoxAdapter(
 | 
			
		||||
                    child: BadgeList(
 | 
			
		||||
                      badges: data.badges,
 | 
			
		||||
                    ).padding(horizontal: 24, bottom: 24),
 | 
			
		||||
                  ),
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: Column(
 | 
			
		||||
                    spacing: 12,
 | 
			
		||||
                    children: [
 | 
			
		||||
                      LevelingProgressCard(
 | 
			
		||||
                        level: data.profile.level,
 | 
			
		||||
                        experience: data.profile.experience,
 | 
			
		||||
                        progress: data.profile.levelingProgress,
 | 
			
		||||
                      ),
 | 
			
		||||
                      if (data.profile.verification != null)
 | 
			
		||||
                        VerificationStatusCard(
 | 
			
		||||
                          mark: data.profile.verification!,
 | 
			
		||||
                        ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ).padding(horizontal: 20),
 | 
			
		||||
                ),
 | 
			
		||||
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: const Divider(height: 1).padding(vertical: 24),
 | 
			
		||||
                ),
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: Column(
 | 
			
		||||
                    crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
			
		||||
                    spacing: 24,
 | 
			
		||||
                    children: [
 | 
			
		||||
                      if (buildSubcolumn(data).isNotEmpty)
 | 
			
		||||
                        Column(
 | 
			
		||||
                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                          spacing: 2,
 | 
			
		||||
                          children: buildSubcolumn(data),
 | 
			
		||||
                        ),
 | 
			
		||||
                      Column(
 | 
			
		||||
                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                        children: [
 | 
			
		||||
                          Text('bio').tr().bold(),
 | 
			
		||||
                          Text(
 | 
			
		||||
                            data.profile.bio.isEmpty
 | 
			
		||||
                                ? 'descriptionNone'.tr()
 | 
			
		||||
                                : data.profile.bio,
 | 
			
		||||
                    ).padding(horizontal: 24)
 | 
			
		||||
                    : CustomScrollView(
 | 
			
		||||
                      slivers: [
 | 
			
		||||
                        SliverAppBar(
 | 
			
		||||
                          foregroundColor: appbarColor.value,
 | 
			
		||||
                          expandedHeight: 180,
 | 
			
		||||
                          pinned: true,
 | 
			
		||||
                          leading: PageBackButton(
 | 
			
		||||
                            color: appbarColor.value,
 | 
			
		||||
                            shadows: [appbarShadow],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
                      if (data.profile.timeZone.isNotEmpty)
 | 
			
		||||
                        Column(
 | 
			
		||||
                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
                          children: [
 | 
			
		||||
                            Text('timeZone').tr().bold(),
 | 
			
		||||
                            Row(
 | 
			
		||||
                              crossAxisAlignment: CrossAxisAlignment.baseline,
 | 
			
		||||
                              textBaseline: TextBaseline.alphabetic,
 | 
			
		||||
                              spacing: 6,
 | 
			
		||||
                              children: [
 | 
			
		||||
                                Text(data.profile.timeZone),
 | 
			
		||||
                                Text(
 | 
			
		||||
                                  getTzInfo(
 | 
			
		||||
                                    data.profile.timeZone,
 | 
			
		||||
                                  ).$2.formatCustomGlobal('HH:mm'),
 | 
			
		||||
                          flexibleSpace: Stack(
 | 
			
		||||
                            children: [
 | 
			
		||||
                              Positioned.fill(
 | 
			
		||||
                                child:
 | 
			
		||||
                                    data.profile.background?.id != null
 | 
			
		||||
                                        ? CloudImageWidget(
 | 
			
		||||
                                          file: data.profile.background,
 | 
			
		||||
                                        )
 | 
			
		||||
                                        : Container(
 | 
			
		||||
                                          color:
 | 
			
		||||
                                              Theme.of(
 | 
			
		||||
                                                context,
 | 
			
		||||
                                              ).appBarTheme.backgroundColor,
 | 
			
		||||
                                        ),
 | 
			
		||||
                              ),
 | 
			
		||||
                              FlexibleSpaceBar(
 | 
			
		||||
                                title: Text(
 | 
			
		||||
                                  data.nick,
 | 
			
		||||
                                  style: TextStyle(
 | 
			
		||||
                                    color:
 | 
			
		||||
                                        appbarColor.value ??
 | 
			
		||||
                                        Theme.of(
 | 
			
		||||
                                          context,
 | 
			
		||||
                                        ).appBarTheme.foregroundColor,
 | 
			
		||||
                                    shadows: [appbarShadow],
 | 
			
		||||
                                  ),
 | 
			
		||||
                                ),
 | 
			
		||||
                                Text(
 | 
			
		||||
                                  getTzInfo(
 | 
			
		||||
                                    data.profile.timeZone,
 | 
			
		||||
                                  ).$1.formatOffsetLocal(),
 | 
			
		||||
                                ).fontSize(11),
 | 
			
		||||
                                Text(
 | 
			
		||||
                                  'UTC${getTzInfo(data.profile.timeZone).$1.formatOffset()}',
 | 
			
		||||
                                ).fontSize(11).opacity(0.75),
 | 
			
		||||
                              ],
 | 
			
		||||
                            ),
 | 
			
		||||
                          ],
 | 
			
		||||
                        ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ).padding(horizontal: 24),
 | 
			
		||||
                ),
 | 
			
		||||
 | 
			
		||||
                if (user.value != null)
 | 
			
		||||
                  SliverToBoxAdapter(
 | 
			
		||||
                    child: const Divider(
 | 
			
		||||
                      height: 1,
 | 
			
		||||
                    ).padding(top: 24, bottom: 12),
 | 
			
		||||
                  ),
 | 
			
		||||
                if (user.value != null)
 | 
			
		||||
                  SliverToBoxAdapter(
 | 
			
		||||
                    child: Row(
 | 
			
		||||
                      spacing: 8,
 | 
			
		||||
                      children: [
 | 
			
		||||
                        Expanded(
 | 
			
		||||
                          child: FilledButton.icon(
 | 
			
		||||
                            style: ButtonStyle(
 | 
			
		||||
                              backgroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                                accountRelationship.value == null
 | 
			
		||||
                                    ? null
 | 
			
		||||
                                    : Theme.of(context).colorScheme.secondary,
 | 
			
		||||
                              ),
 | 
			
		||||
                              foregroundColor: WidgetStatePropertyAll(
 | 
			
		||||
                                accountRelationship.value == null
 | 
			
		||||
                                    ? null
 | 
			
		||||
                                    : Theme.of(context).colorScheme.onSecondary,
 | 
			
		||||
                              ),
 | 
			
		||||
                            ),
 | 
			
		||||
                            onPressed: relationshipAction,
 | 
			
		||||
                            label:
 | 
			
		||||
                                Text(
 | 
			
		||||
                                  accountRelationship.value == null
 | 
			
		||||
                                      ? 'addFriendShort'
 | 
			
		||||
                                      : 'added',
 | 
			
		||||
                                ).tr(),
 | 
			
		||||
                            icon:
 | 
			
		||||
                                accountRelationship.value == null
 | 
			
		||||
                                    ? const Icon(Symbols.person_add)
 | 
			
		||||
                                    : const Icon(Symbols.person_check),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        Expanded(
 | 
			
		||||
                          child: FilledButton.icon(
 | 
			
		||||
                            onPressed: directMessageAction,
 | 
			
		||||
                            icon: const Icon(Symbols.message),
 | 
			
		||||
                            label:
 | 
			
		||||
                                Text(
 | 
			
		||||
                                  accountChat.value == null
 | 
			
		||||
                                      ? 'createDirectMessage'
 | 
			
		||||
                                      : 'gotoDirectMessage',
 | 
			
		||||
                                  maxLines: 1,
 | 
			
		||||
                                ).tr(),
 | 
			
		||||
                        SliverToBoxAdapter(child: accountBasicInfo(data)),
 | 
			
		||||
                        if (data.badges.isNotEmpty)
 | 
			
		||||
                          SliverToBoxAdapter(
 | 
			
		||||
                            child: BadgeList(
 | 
			
		||||
                              badges: data.badges,
 | 
			
		||||
                            ).padding(horizontal: 24, bottom: 24),
 | 
			
		||||
                          ),
 | 
			
		||||
                        SliverToBoxAdapter(
 | 
			
		||||
                          child: Column(
 | 
			
		||||
                            children: [
 | 
			
		||||
                              LevelingProgressCard(
 | 
			
		||||
                                level: data.profile.level,
 | 
			
		||||
                                experience: data.profile.experience,
 | 
			
		||||
                                progress: data.profile.levelingProgress,
 | 
			
		||||
                              ).padding(top: 8, horizontal: 8, bottom: 4),
 | 
			
		||||
                              if (data.profile.verification != null)
 | 
			
		||||
                                Card(
 | 
			
		||||
                                  child: VerificationStatusCard(
 | 
			
		||||
                                    mark: data.profile.verification!,
 | 
			
		||||
                                  ),
 | 
			
		||||
                                ).padding(horizontal: 4),
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        SliverToBoxAdapter(
 | 
			
		||||
                          child: accountProfileBio(data).padding(horizontal: 4),
 | 
			
		||||
                        ),
 | 
			
		||||
                        SliverToBoxAdapter(
 | 
			
		||||
                          child: accountProfileDetail(
 | 
			
		||||
                            data,
 | 
			
		||||
                          ).padding(horizontal: 4),
 | 
			
		||||
                        ),
 | 
			
		||||
                        if (user.value != null)
 | 
			
		||||
                          SliverToBoxAdapter(
 | 
			
		||||
                            child: accountAction(data).padding(horizontal: 4),
 | 
			
		||||
                          ),
 | 
			
		||||
                        SliverToBoxAdapter(
 | 
			
		||||
                          child: Card(
 | 
			
		||||
                            child: FortuneGraphWidget(
 | 
			
		||||
                              events: accountEvents,
 | 
			
		||||
                              eventCalanderUser: data.name,
 | 
			
		||||
                            ),
 | 
			
		||||
                          ).padding(horizontal: 4),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ],
 | 
			
		||||
                    ).padding(horizontal: 16),
 | 
			
		||||
                  ),
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: const Divider(height: 1).padding(top: 12),
 | 
			
		||||
                ),
 | 
			
		||||
                SliverToBoxAdapter(
 | 
			
		||||
                  child: Column(
 | 
			
		||||
                    children: [
 | 
			
		||||
                      FortuneGraphWidget(
 | 
			
		||||
                        events: accountEvents,
 | 
			
		||||
                        eventCalanderUser: data.name,
 | 
			
		||||
                      ),
 | 
			
		||||
                    ],
 | 
			
		||||
                  ).padding(all: 8),
 | 
			
		||||
                ),
 | 
			
		||||
              ],
 | 
			
		||||
            ),
 | 
			
		||||
                    ),
 | 
			
		||||
          ),
 | 
			
		||||
      error:
 | 
			
		||||
          (error, stackTrace) => AppScaffold(
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'profile.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$accountHash() => r'd2b0579617e6264452d98f47f695a9cdf45b24ec';
 | 
			
		||||
String _$accountHash() => r'ce7264a04f69e32a5cb07bc10ca5fa47ae1fddaa';
 | 
			
		||||
 | 
			
		||||
/// Copied from Dart SDK
 | 
			
		||||
class _SystemHash {
 | 
			
		||||
@@ -145,7 +145,7 @@ class _AccountProviderElement
 | 
			
		||||
  String get uname => (origin as AccountProvider).uname;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String _$accountBadgesHash() => r'4bfe5fb0d6ac0d4cde4563460bde289289188f6d';
 | 
			
		||||
String _$accountBadgesHash() => r'1de05e122c23ff2c6ac6d318977165761e2ad177';
 | 
			
		||||
 | 
			
		||||
/// See also [accountBadges].
 | 
			
		||||
@ProviderFor(accountBadges)
 | 
			
		||||
@@ -395,7 +395,7 @@ class _AccountAppbarForcegroundColorProviderElement
 | 
			
		||||
  String get uname => (origin as AccountAppbarForcegroundColorProvider).uname;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String _$accountDirectChatHash() => r'60d0015fc2a3c8fc2190bb41d6818cf3027d9d0a';
 | 
			
		||||
String _$accountDirectChatHash() => r'149ea3a3730672cfbbb8c16fe1f2caa0bb9f0e17';
 | 
			
		||||
 | 
			
		||||
/// See also [accountDirectChat].
 | 
			
		||||
@ProviderFor(accountDirectChat)
 | 
			
		||||
@@ -517,7 +517,7 @@ class _AccountDirectChatProviderElement
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String _$accountRelationshipHash() =>
 | 
			
		||||
    r'cb7d0d3f8cd4f23ad9d2d529872c540dac483d4f';
 | 
			
		||||
    r'9a3a4e8c6c6706f73df95feccb86736fcad33f30';
 | 
			
		||||
 | 
			
		||||
/// See also [accountRelationship].
 | 
			
		||||
@ProviderFor(accountRelationship)
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ part 'relationship.g.dart';
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<List<SnRelationship>> sentFriendRequest(Ref ref) async {
 | 
			
		||||
  final client = ref.read(apiClientProvider);
 | 
			
		||||
  final resp = await client.get('/relationships/requests');
 | 
			
		||||
  final resp = await client.get('/id/relationships/requests');
 | 
			
		||||
  return resp.data
 | 
			
		||||
      .map((e) => SnRelationship.fromJson(e))
 | 
			
		||||
      .cast<SnRelationship>()
 | 
			
		||||
@@ -42,7 +42,7 @@ class RelationshipListNotifier extends _$RelationshipListNotifier
 | 
			
		||||
    final take = 20;
 | 
			
		||||
 | 
			
		||||
    final response = await client.get(
 | 
			
		||||
      '/relationships',
 | 
			
		||||
      '/id/relationships',
 | 
			
		||||
      queryParameters: {'offset': offset, 'take': take},
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@@ -221,7 +221,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
			
		||||
      if (result == null) return;
 | 
			
		||||
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      await client.post('/relationships/${result.id}/friends');
 | 
			
		||||
      await client.post('/id/relationships/${result.id}/friends');
 | 
			
		||||
      ref.invalidate(sentFriendRequestProvider);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -235,7 +235,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
			
		||||
        submitting.value = true;
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
 | 
			
		||||
          '/id/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
 | 
			
		||||
        );
 | 
			
		||||
        relationshipNotifier.forceRefresh();
 | 
			
		||||
        if (!context.mounted) return;
 | 
			
		||||
@@ -262,7 +262,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
			
		||||
    ) async {
 | 
			
		||||
      final client = ref.read(apiClientProvider);
 | 
			
		||||
      await client.patch(
 | 
			
		||||
        '/relationships/${relationship.accountId}',
 | 
			
		||||
        '/id/relationships/${relationship.accountId}',
 | 
			
		||||
        data: {'status': newStatus},
 | 
			
		||||
      );
 | 
			
		||||
      relationshipNotifier.forceRefresh();
 | 
			
		||||
@@ -345,7 +345,7 @@ class _SentFriendRequestsSheet extends HookConsumerWidget {
 | 
			
		||||
    Future<void> cancelRequest(SnRelationship request) async {
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.read(apiClientProvider);
 | 
			
		||||
        await client.delete('/relationships/${request.relatedId}/friends');
 | 
			
		||||
        await client.delete('/id/relationships/${request.relatedId}/friends');
 | 
			
		||||
        ref.invalidate(sentFriendRequestProvider);
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        showErrorAlert(err);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'relationship.dart';
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$sentFriendRequestHash() => r'2efa72835b1740e0fe96bd347bce0f98b6ae80d6';
 | 
			
		||||
String _$sentFriendRequestHash() => r'dc02ace6cb755a01ab862c9fcff3b26de7f946cb';
 | 
			
		||||
 | 
			
		||||
/// See also [sentFriendRequest].
 | 
			
		||||
@ProviderFor(sentFriendRequest)
 | 
			
		||||
@@ -27,7 +27,7 @@ final sentFriendRequestProvider =
 | 
			
		||||
typedef SentFriendRequestRef =
 | 
			
		||||
    AutoDisposeFutureProviderRef<List<SnRelationship>>;
 | 
			
		||||
String _$relationshipListNotifierHash() =>
 | 
			
		||||
    r'560410cba6e4c26affd91aa86b3666319bd31f24';
 | 
			
		||||
    r'0a134ce69489a4f2002d2223853855b6f22e4e9f';
 | 
			
		||||
 | 
			
		||||
/// See also [RelationshipListNotifier].
 | 
			
		||||
@ProviderFor(RelationshipListNotifier)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								lib/screens/auth/captcha.config.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/screens/auth/captcha.config.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:island/pods/network.dart';
 | 
			
		||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
			
		||||
 | 
			
		||||
part 'captcha.config.g.dart';
 | 
			
		||||
 | 
			
		||||
@riverpod
 | 
			
		||||
Future<String> captchaUrl(Ref ref) async {
 | 
			
		||||
  final apiClient = ref.watch(apiClientProvider);
 | 
			
		||||
  final resp = await apiClient.get('/.well-known/services');
 | 
			
		||||
  final serviceMapping = await resp.data;
 | 
			
		||||
  var baseUrl = serviceMapping['DysonNetwork.Pass'] as String;
 | 
			
		||||
  // The backend using self-signed certicates on development
 | 
			
		||||
  // Which mobile simulator might not accept, use this to avoid errors
 | 
			
		||||
  if (baseUrl.contains('https://localhost')) baseUrl = 'http://localhost:5216';
 | 
			
		||||
  return '$baseUrl/captcha';
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								lib/screens/auth/captcha.config.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lib/screens/auth/captcha.config.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
 | 
			
		||||
part of 'captcha.config.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// RiverpodGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
String _$captchaUrlHash() => r'bbed0d18272dd205069642b3c6583ea2eef735d1';
 | 
			
		||||
 | 
			
		||||
/// See also [captchaUrl].
 | 
			
		||||
@ProviderFor(captchaUrl)
 | 
			
		||||
final captchaUrlProvider = AutoDisposeFutureProvider<String>.internal(
 | 
			
		||||
  captchaUrl,
 | 
			
		||||
  name: r'captchaUrlProvider',
 | 
			
		||||
  debugGetCreateSourceHash:
 | 
			
		||||
      const bool.fromEnvironment('dart.vm.product') ? null : _$captchaUrlHash,
 | 
			
		||||
  dependencies: null,
 | 
			
		||||
  allTransitiveDependencies: null,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
			
		||||
// ignore: unused_element
 | 
			
		||||
typedef CaptchaUrlRef = AutoDisposeFutureProviderRef<String>;
 | 
			
		||||
// ignore_for_file: type=lint
 | 
			
		||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 | 
			
		||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
 | 
			
		||||
import 'package:island/pods/config.dart';
 | 
			
		||||
import 'package:island/screens/auth/captcha.config.dart';
 | 
			
		||||
import 'package:island/widgets/app_scaffold.dart';
 | 
			
		||||
 | 
			
		||||
class CaptchaScreen extends ConsumerWidget {
 | 
			
		||||
@@ -9,13 +9,15 @@ class CaptchaScreen extends ConsumerWidget {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final serverUrl = ref.watch(serverUrlProvider);
 | 
			
		||||
    final captchaUrl = ref.watch(captchaUrlProvider);
 | 
			
		||||
 | 
			
		||||
    if (!captchaUrl.hasValue) return Center(child: CircularProgressIndicator());
 | 
			
		||||
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      appBar: AppBar(title: Text("Anti-Robot")),
 | 
			
		||||
      body: InAppWebView(
 | 
			
		||||
        initialUrlRequest: URLRequest(
 | 
			
		||||
          url: WebUri('$serverUrl/auth/captcha?redirect_uri=solink://captcha'),
 | 
			
		||||
          url: WebUri('${captchaUrl.value}?redirect_uri=solian://captcha'),
 | 
			
		||||
        ),
 | 
			
		||||
        shouldOverrideUrlLoading: (controller, navigationAction) async {
 | 
			
		||||
          Uri? url = navigationAction.request.url;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
import 'dart:ui_web' as ui;
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:island/pods/config.dart';
 | 
			
		||||
import 'package:island/screens/auth/captcha.config.dart';
 | 
			
		||||
import 'package:island/widgets/app_scaffold.dart';
 | 
			
		||||
import 'package:web/web.dart' as web;
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@@ -17,7 +18,7 @@ class CaptchaScreen extends ConsumerStatefulWidget {
 | 
			
		||||
class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
 | 
			
		||||
  bool _isInitialized = false;
 | 
			
		||||
 | 
			
		||||
  void _setupWebListener(String serverUrl) {
 | 
			
		||||
  void _setupWebListener(String serverUrl) async {
 | 
			
		||||
    web.window.onMessage.listen((event) {
 | 
			
		||||
      if (event.data != null && event.data is String) {
 | 
			
		||||
        final message = event.data as String;
 | 
			
		||||
@@ -29,9 +30,11 @@ class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    final captchaUrl = await ref.watch(captchaUrlProvider.future);
 | 
			
		||||
 | 
			
		||||
    final iframe =
 | 
			
		||||
        web.HTMLIFrameElement()
 | 
			
		||||
          ..src = '$serverUrl/auth/captcha'
 | 
			
		||||
          ..src = captchaUrl
 | 
			
		||||
          ..style.border = 'none'
 | 
			
		||||
          ..width = '100%'
 | 
			
		||||
          ..height = '100%';
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ class CreateAccountScreen extends HookConsumerWidget {
 | 
			
		||||
        showLoadingModal(context);
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/accounts',
 | 
			
		||||
          '/id/accounts',
 | 
			
		||||
          data: {
 | 
			
		||||
            'name': usernameController.text,
 | 
			
		||||
            'nick': nicknameController.text,
 | 
			
		||||
@@ -73,7 +73,7 @@ class CreateAccountScreen extends HookConsumerWidget {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      noBackground: false,
 | 
			
		||||
      isNoBackground: false,
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: const PageBackButton(),
 | 
			
		||||
        title: Text('createAccount').tr(),
 | 
			
		||||
@@ -305,7 +305,7 @@ class _PostCreateModal extends HookConsumerWidget {
 | 
			
		||||
            TextButton(
 | 
			
		||||
              onPressed: () {
 | 
			
		||||
                Navigator.pop(context);
 | 
			
		||||
                context.pushReplacement('/auth/login');
 | 
			
		||||
                context.pushReplacementNamed('login');
 | 
			
		||||
              },
 | 
			
		||||
              child: Text('login'.tr()),
 | 
			
		||||
            ),
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ class LoginScreen extends HookConsumerWidget {
 | 
			
		||||
    final factorPicked = useState<SnAuthFactor?>(null);
 | 
			
		||||
 | 
			
		||||
    return AppScaffold(
 | 
			
		||||
      noBackground: false,
 | 
			
		||||
      isNoBackground: false,
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        leading: const PageBackButton(),
 | 
			
		||||
        title: Text('login').tr(),
 | 
			
		||||
@@ -178,7 +178,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
			
		||||
      // Get token if challenge is completed
 | 
			
		||||
      final client = ref.watch(apiClientProvider);
 | 
			
		||||
      final tokenResp = await client.post(
 | 
			
		||||
        '/auth/token',
 | 
			
		||||
        '/id/auth/token',
 | 
			
		||||
        data: {
 | 
			
		||||
          'grant_type': 'authorization_code',
 | 
			
		||||
          'code': code ?? challenge!.id,
 | 
			
		||||
@@ -215,7 +215,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
			
		||||
        if (name != null) {
 | 
			
		||||
          final client = ref.watch(apiClientProvider);
 | 
			
		||||
          await client.patch(
 | 
			
		||||
            '/accounts/me/sessions/current/label',
 | 
			
		||||
            '/id/accounts/me/sessions/current/label',
 | 
			
		||||
            data: jsonEncode(name),
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
@@ -225,6 +225,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
			
		||||
    useEffect(() {
 | 
			
		||||
      if (challenge != null && challenge?.stepRemain == 0) {
 | 
			
		||||
        Future(() {
 | 
			
		||||
          if (isBusy.value) return;
 | 
			
		||||
          isBusy.value = true;
 | 
			
		||||
          getToken().catchError((err) {
 | 
			
		||||
            showErrorAlert(err);
 | 
			
		||||
@@ -265,7 +266,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
			
		||||
        // Pass challenge
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        final resp = await client.patch(
 | 
			
		||||
          '/auth/challenge/${challenge!.id}',
 | 
			
		||||
          '/id/auth/challenge/${challenge!.id}',
 | 
			
		||||
          data: {'factor_id': factor!.id, 'password': pwd},
 | 
			
		||||
        );
 | 
			
		||||
        final result = SnAuthChallenge.fromJson(resp.data);
 | 
			
		||||
@@ -412,7 +413,7 @@ class _LoginPickerScreen extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/auth/challenge/${challenge!.id}/factors/${factorPicked.value!.id}',
 | 
			
		||||
          '/id/auth/challenge/${challenge!.id}/factors/${factorPicked.value!.id}',
 | 
			
		||||
          data:
 | 
			
		||||
              hintController.text.isNotEmpty
 | 
			
		||||
                  ? jsonEncode(hintController.text)
 | 
			
		||||
@@ -555,7 +556,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        await client.post(
 | 
			
		||||
          '/accounts/recovery/password',
 | 
			
		||||
          '/id/accounts/recovery/password',
 | 
			
		||||
          data: {'account': uname, 'captcha_token': captchaTk},
 | 
			
		||||
        );
 | 
			
		||||
        showInfoAlert('loginResetPasswordSent'.tr(), 'done'.tr());
 | 
			
		||||
@@ -573,7 +574,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
      try {
 | 
			
		||||
        final client = ref.watch(apiClientProvider);
 | 
			
		||||
        final resp = await client.post(
 | 
			
		||||
          '/auth/challenge',
 | 
			
		||||
          '/id/auth/challenge',
 | 
			
		||||
          data: {
 | 
			
		||||
            'account': uname,
 | 
			
		||||
            'device_id': await getUdid(),
 | 
			
		||||
@@ -593,7 +594,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
        final result = SnAuthChallenge.fromJson(resp.data);
 | 
			
		||||
        onChallenge(result);
 | 
			
		||||
        final factorResp = await client.get(
 | 
			
		||||
          '/auth/challenge/${result.id}/factors',
 | 
			
		||||
          '/id/auth/challenge/${result.id}/factors',
 | 
			
		||||
        );
 | 
			
		||||
        onFactor(
 | 
			
		||||
          List<SnAuthFactor>.from(
 | 
			
		||||
@@ -622,7 +623,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
        if (context.mounted) showLoadingModal(context);
 | 
			
		||||
        final resp = await client.post(
 | 
			
		||||
          '/auth/login/apple/mobile',
 | 
			
		||||
          '/id/auth/login/apple/mobile',
 | 
			
		||||
          data: {
 | 
			
		||||
            'identity_token': credential.identityToken!,
 | 
			
		||||
            'authorization_code': credential.authorizationCode,
 | 
			
		||||
@@ -633,7 +634,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
			
		||||
        onChallenge(challenge);
 | 
			
		||||
        final factorResp = await client.get(
 | 
			
		||||
          '/auth/challenge/${challenge.id}/factors',
 | 
			
		||||
          '/id/auth/challenge/${challenge.id}/factors',
 | 
			
		||||
        );
 | 
			
		||||
        onFactor(
 | 
			
		||||
          List<SnAuthFactor>.from(
 | 
			
		||||
@@ -658,11 +659,11 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
      final client = ref.watch(apiClientProvider);
 | 
			
		||||
      try {
 | 
			
		||||
        final resp = await client.get('/auth/challenge/$challengeId');
 | 
			
		||||
        final resp = await client.get('/id/auth/challenge/$challengeId');
 | 
			
		||||
        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
			
		||||
        onChallenge(challenge);
 | 
			
		||||
        final factorResp = await client.get(
 | 
			
		||||
          '/auth/challenge/${challenge.id}/factors',
 | 
			
		||||
          '/id/auth/challenge/${challenge.id}/factors',
 | 
			
		||||
        );
 | 
			
		||||
        onFactor(
 | 
			
		||||
          List<SnAuthFactor>.from(
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ class _OidcScreenState extends ConsumerState<OidcScreen> {
 | 
			
		||||
                            : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
 | 
			
		||||
                  ),
 | 
			
		||||
                  initialUrlRequest: URLRequest(
 | 
			
		||||
                    url: WebUri('$serverUrl/auth/login/${widget.provider}'),
 | 
			
		||||
                    url: WebUri('$serverUrl/id/auth/login/${widget.provider}'),
 | 
			
		||||
                    headers: {
 | 
			
		||||
                      if (token?.token.isNotEmpty ?? false)
 | 
			
		||||
                        'Authorization': 'AtField ${token!.token}',
 | 
			
		||||
@@ -205,7 +205,7 @@ class _OidcScreenState extends ConsumerState<OidcScreen> {
 | 
			
		||||
                      onPressed: () {
 | 
			
		||||
                        if (currentUrl != null) {
 | 
			
		||||
                          Clipboard.setData(ClipboardData(text: currentUrl!));
 | 
			
		||||
                          showSnackBar('copyToClipboard');
 | 
			
		||||
                          showSnackBar('copyToClipboard'.tr());
 | 
			
		||||
                        }
 | 
			
		||||
                      },
 | 
			
		||||
                    ),
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user