Compare commits
	
		
			226 Commits
		
	
	
		
			a20c2598fc
			...
			3.2.0+127
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7169aff841 | |||
| fac3efb50c | |||
| e809aadaea | |||
| f33b569221 | |||
| e5f2e2d146 | |||
| 11368d064f | |||
| 246b163aec | |||
| 10e0d2fe5f | |||
| 99e10cb612 | |||
| 1db6941431 | |||
| 8370da4fe3 | |||
| 2bdf7029e9 | |||
| 86682a3a9a | |||
| c3925e81b5 | |||
| 6f1f488490 | |||
| 31b2de2e46 | |||
| 412dcfa62a | |||
| ffdc7e81ae | |||
| 1d3357803d | |||
| 6c48aa2356 | |||
| 466e354679 | |||
| 5d4b896f70 | |||
| a04dffdfe8 | |||
| ff871943cf | |||
| 1a892ab227 | |||
| af1b303211 | |||
| 6fd702eba8 | |||
| d220d43cd2 | |||
| 6892afb974 | |||
| 007b46b080 | |||
| 67d130dc34 | |||
| 7e923c77fe | |||
| a593b52812 | |||
| 
						 | 
					520dc80303 | ||
| 001897bbcd | |||
| 
						 | 
					bab29c23e3 | ||
| 76b39f2df3 | |||
| 509b3e145b | |||
| 2b80ebc2d0 | |||
| 0ab908dd2a | |||
| 6007467e7a | |||
| 3745157c42 | |||
| 94481ec7bd | |||
| fbfe8cbdee | |||
| fbbab0a981 | |||
| ae2fb3b303 | |||
| 3d7a4666ed | |||
| 5d3e0fb800 | |||
| 85ff52a661 | |||
| da7fd64a43 | |||
| 3902633217 | |||
| f478ea8b84 | |||
| 0f481aff5b | |||
| 7a31663310 | |||
| 0239c53c04 | |||
| 16987c758e | |||
| 3a36915140 | |||
| 4bde708878 | |||
| 2f0cf560f8 | |||
| cf355a95fd | |||
| 2f43073172 | |||
| 8236d31ecc | |||
| 459a7dade0 | |||
| e6000a660a | |||
| 75abaac205 | |||
| 603d5c3f73 | |||
| 4e4bd99598 | |||
| d1fbe5f15e | |||
| c061ef2132 | |||
| c378309bdd | |||
| b2c5d64fc5 | |||
| 
						 | 
					5371637b16 | ||
| c5cbf0af37 | |||
| 1a31e22450 | |||
| 
						 | 
					49db54529d | ||
| 8e0c0c6054 | |||
| f3d1183076 | |||
| a9f7f0cce0 | |||
| f2943f8411 | |||
| 808e7dcffa | |||
| 9bed4fa6fb | |||
| e6255a340b | |||
| 78bf319fb7 | |||
| 36a966d582 | |||
| f72b268d36 | |||
| 44ef31034e | |||
| 229dc2186f | |||
| a2f9a1efb4 | |||
| 
						 | 
					823e3c5de6 | ||
| 
						 | 
					faac7bac35 | ||
| 1fac1bfe02 | |||
| 9394b1d9c8 | |||
| 43dd13bac4 | |||
| 65bc372103 | |||
| 6558854a7a | |||
| 892035ab27 | |||
| 87ae8d2ff4 | |||
| 15c2dbaa0d | |||
| 6b3338b885 | |||
| bb00b1bc6a | |||
| 5e1a15ada2 | |||
| 9bdf8ba346 | |||
| 204c087f29 | |||
| 1def3e1895 | |||
| 550c74e544 | |||
| a39565f012 | |||
| aa9755e6a7 | |||
| b25e8d661a | |||
| 4b253ac3ec | |||
| 5d1b875d3c | |||
| e2e103fa67 | |||
| 43c90da4e3 | |||
| fa210dd98f | |||
| 43d9ca92bf | |||
| 5e592c143f | |||
| 0c59816f26 | |||
| 19c2457895 | |||
| af8d87857e | |||
| d05f63a36a | |||
| e2dc520012 | |||
| cff9c15e31 | |||
| f00135c4bf | |||
| 30b8a6c30f | |||
| b9c4ee31b1 | |||
| 87870af866 | |||
| b83cb0fb0b | |||
| 7fd1fe34e5 | |||
| 1c18330891 | |||
| d320879ad0 | |||
| 950150e119 | |||
| 3c4a9767e1 | |||
| 5df2445f3f | |||
| 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 | |||
| 552b4b2572 | |||
| 594ac39e3d | |||
| 23321171f3 | |||
| ee72d79c93 | 
							
								
								
									
										11
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -41,6 +41,15 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-output-windows
 | 
			
		||||
          path: build/windows/x64/runner/Release
 | 
			
		||||
      - name: Compile Installer
 | 
			
		||||
        uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
 | 
			
		||||
        with:
 | 
			
		||||
          path: setup.iss
 | 
			
		||||
      - name: Archive installer artifacts
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-output-windows-installer
 | 
			
		||||
          path: Installer/windows-x86_64-setup.exe
 | 
			
		||||
  build-linux:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
@@ -59,7 +68,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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -12,6 +12,9 @@
 | 
			
		||||
.swiftpm/
 | 
			
		||||
migrate_working_dir/
 | 
			
		||||
 | 
			
		||||
# Inno Setup
 | 
			
		||||
Installer/
 | 
			
		||||
 | 
			
		||||
# IntelliJ related
 | 
			
		||||
*.iml
 | 
			
		||||
*.ipr
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ plugins {
 | 
			
		||||
    id("com.android.application")
 | 
			
		||||
    // START: FlutterFire Configuration
 | 
			
		||||
    id("com.google.gms.google-services")
 | 
			
		||||
    id("com.google.firebase.crashlytics")
 | 
			
		||||
    // END: FlutterFire Configuration
 | 
			
		||||
    id("kotlin-android")
 | 
			
		||||
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
 | 
			
		||||
@@ -51,6 +52,12 @@ android {
 | 
			
		||||
    buildTypes {
 | 
			
		||||
        release {
 | 
			
		||||
            signingConfig = signingConfigs.getByName("release")
 | 
			
		||||
 | 
			
		||||
            isMinifyEnabled = true
 | 
			
		||||
            proguardFiles(
 | 
			
		||||
                getDefaultProguardFile("proguard-android-optimize.txt"),
 | 
			
		||||
                "proguard-rules.pro"
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -58,8 +65,7 @@ android {
 | 
			
		||||
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")
 | 
			
		||||
    implementation("com.squareup.okhttp3:okhttp:5.1.0")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
flutter {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,12 @@
 | 
			
		||||
          "package_name": "dev.solsynth.solian"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "oauth_client": [],
 | 
			
		||||
      "oauth_client": [
 | 
			
		||||
        {
 | 
			
		||||
          "client_id": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com",
 | 
			
		||||
          "client_type": 3
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "api_key": [
 | 
			
		||||
        {
 | 
			
		||||
          "current_key": "AIzaSyDvFNudXYs29uDtcCv6pFR8h5tXBs90FYk"
 | 
			
		||||
@@ -20,7 +25,20 @@
 | 
			
		||||
      ],
 | 
			
		||||
      "services": {
 | 
			
		||||
        "appinvite_service": {
 | 
			
		||||
          "other_platform_oauth_client": []
 | 
			
		||||
          "other_platform_oauth_client": [
 | 
			
		||||
            {
 | 
			
		||||
              "client_id": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com",
 | 
			
		||||
              "client_type": 3
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "client_id": "961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com",
 | 
			
		||||
              "client_type": 2,
 | 
			
		||||
              "ios_info": {
 | 
			
		||||
                "bundle_id": "dev.solsynth.solian",
 | 
			
		||||
                "app_store_id": "6499032345"
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								android/app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								android/app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# JNI Zero initialization (required for WebRTC native method registration)
 | 
			
		||||
-keep class livekit.org.jni_zero.JniInit {
 | 
			
		||||
    # Keep the init method un-obfuscated for native code callback
 | 
			
		||||
    private static java.lang.Object[] init();
 | 
			
		||||
}
 | 
			
		||||
@@ -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())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								android/app/src/main/res/drawable/ic_notification.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								android/app/src/main/res/drawable/ic_notification.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:width="192dp"
 | 
			
		||||
    android:height="192dp"
 | 
			
		||||
    android:viewportWidth="192"
 | 
			
		||||
    android:viewportHeight="192">
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M54,147h86"
 | 
			
		||||
      android:strokeLineJoin="round"
 | 
			
		||||
      android:strokeWidth="12"
 | 
			
		||||
      android:fillColor="#00000000"
 | 
			
		||||
      android:strokeColor="#000"
 | 
			
		||||
      android:strokeLineCap="round"/>
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M57,111s-2,-4.5 -2,-10m22,22s-4,7 -11,4m9,-22s-2,-4.5 -2,-10"
 | 
			
		||||
      android:strokeLineJoin="round"
 | 
			
		||||
      android:strokeWidth="10"
 | 
			
		||||
      android:fillColor="#00000000"
 | 
			
		||||
      android:strokeColor="#000"
 | 
			
		||||
      android:strokeLineCap="round"/>
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M54,147a32,32 0,0 1,-12 -61.67A39,39 0,0 1,81 46m59,101a30,30 0,0 0,29.93 -28"
 | 
			
		||||
      android:strokeLineJoin="round"
 | 
			
		||||
      android:strokeWidth="12"
 | 
			
		||||
      android:fillColor="#00000000"
 | 
			
		||||
      android:strokeColor="#000"
 | 
			
		||||
      android:strokeLineCap="round"/>
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M132,75m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
 | 
			
		||||
      android:strokeLineJoin="round"
 | 
			
		||||
      android:strokeWidth="8"
 | 
			
		||||
      android:fillColor="#00000000"
 | 
			
		||||
      android:strokeColor="#000"
 | 
			
		||||
      android:strokeLineCap="round"/>
 | 
			
		||||
  <path
 | 
			
		||||
      android:pathData="M112.5,41.22C100.84,47.96 93,60.56 93,75c0,6.38 1.53,12.39 4.24,17.71m69.51,-35.42A38.84,38.84 0,0 1,171 75c0,14.43 -7.84,27.03 -19.49,33.78m-0.79,-43.32A20.9,20.9 0,0 1,153 75c0,7.77 -4.22,14.56 -10.49,18.19m-21,-36.38C115.22,60.44 111,67.23 111,75a20.9,20.9 0,0 0,2.28 9.53"
 | 
			
		||||
      android:strokeLineJoin="round"
 | 
			
		||||
      android:strokeWidth="10"
 | 
			
		||||
      android:fillColor="#00000000"
 | 
			
		||||
      android:strokeColor="#000"
 | 
			
		||||
      android:strokeLineCap="round"/>
 | 
			
		||||
</vector>
 | 
			
		||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
 | 
			
		||||
 
 | 
			
		||||
@@ -18,11 +18,12 @@ pluginManagement {
 | 
			
		||||
 | 
			
		||||
plugins {
 | 
			
		||||
    id("dev.flutter.flutter-plugin-loader") version "1.0.0"
 | 
			
		||||
    id("com.android.application") version "8.10.1" apply false
 | 
			
		||||
    id("com.android.application") version "8.12.0" apply false
 | 
			
		||||
    // START: FlutterFire Configuration
 | 
			
		||||
    id("com.google.gms.google-services") version("4.3.15") apply false
 | 
			
		||||
    id("com.google.firebase.crashlytics") version("2.8.1") apply false
 | 
			
		||||
    // END: FlutterFire Configuration
 | 
			
		||||
    id("org.jetbrains.kotlin.android") version "1.8.22" apply false
 | 
			
		||||
    id("org.jetbrains.kotlin.android") version("2.2.0") apply false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
include(":app")
 | 
			
		||||
 
 | 
			
		||||
@@ -144,9 +144,16 @@
 | 
			
		||||
    "other": "{} attachments"
 | 
			
		||||
  },
 | 
			
		||||
  "edited": "Edited",
 | 
			
		||||
  "editedAt": "Edited at {}",
 | 
			
		||||
  "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",
 | 
			
		||||
@@ -327,6 +334,7 @@
 | 
			
		||||
  "walletCreate": "Create a Wallet",
 | 
			
		||||
  "settingsServerUrl": "Server URL",
 | 
			
		||||
  "settingsApplied": "The settings has been applied.",
 | 
			
		||||
  "settingsCustomFontsHelper": "Use comma to seprate.",
 | 
			
		||||
  "notifications": "Notifications",
 | 
			
		||||
  "posts": "Posts",
 | 
			
		||||
  "settingsBackgroundImage": "Background Image",
 | 
			
		||||
@@ -352,6 +360,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",
 | 
			
		||||
@@ -375,7 +385,9 @@
 | 
			
		||||
  "postContent": "Content",
 | 
			
		||||
  "postSettings": "Settings",
 | 
			
		||||
  "postPublisherUnselected": "Publisher Unspecified",
 | 
			
		||||
  "postVisibility": "Visibility",
 | 
			
		||||
  "postType": "Post Type",
 | 
			
		||||
  "articleAttachmentHint": "Attachments must be uploaded and inserted into the article body to be visible.",
 | 
			
		||||
  "postVisibility": "Post Visibility",
 | 
			
		||||
  "postVisibilityPublic": "Public",
 | 
			
		||||
  "postVisibilityFriends": "Friends Only",
 | 
			
		||||
  "postVisibilityUnlisted": "Unlisted",
 | 
			
		||||
@@ -562,6 +574,7 @@
 | 
			
		||||
  "keyboardShortcuts": "Keyboard Shortcuts",
 | 
			
		||||
  "share": "Share",
 | 
			
		||||
  "sharePost": "Share Post",
 | 
			
		||||
  "sharePostPhoto": "Share Post as Photo",
 | 
			
		||||
  "quickActions": "Quick Actions",
 | 
			
		||||
  "post": "Post",
 | 
			
		||||
  "copy": "Copy",
 | 
			
		||||
@@ -588,6 +601,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.",
 | 
			
		||||
@@ -619,8 +633,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",
 | 
			
		||||
@@ -694,6 +708,151 @@
 | 
			
		||||
  "copyToClipboardTooltip": "Copy to clipboard",
 | 
			
		||||
  "postForwardingTo": "Forwarding to",
 | 
			
		||||
  "postReplyingTo": "Replying to",
 | 
			
		||||
  "postReplyPlaceholder": "Post your reply",
 | 
			
		||||
  "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.",
 | 
			
		||||
  "pollQuestions": "Questions",
 | 
			
		||||
  "publisher": "Publisher",
 | 
			
		||||
  "publisherHint": "Enter the publisher name",
 | 
			
		||||
  "publisherCannotBeEmpty": "Publisher cannot be empty",
 | 
			
		||||
  "operationFailed": "Operation failed: {}",
 | 
			
		||||
  "stickerMarketplace": "Sticker Marketplace",
 | 
			
		||||
  "stickerPackAdded": "Sticker pack added to your collection",
 | 
			
		||||
  "stickerPackRemoved": "Sticker pack removed from your collection",
 | 
			
		||||
  "addPack": "Add Pack",
 | 
			
		||||
  "removePack": "Remove Pack",
 | 
			
		||||
  "browseAndAddStickers": "Browse and add sticker packs",
 | 
			
		||||
  "stickerPack": "Sticker Pack",
 | 
			
		||||
  "postCategoryTechnology": "Technology",
 | 
			
		||||
  "postCategoryTravel": "Travel",
 | 
			
		||||
  "postCategoryFood": "Food",
 | 
			
		||||
  "postCategoryHealth": "Health",
 | 
			
		||||
  "postCategoryScience": "Science",
 | 
			
		||||
  "postCategorySports": "Sports",
 | 
			
		||||
  "postCategoryFinance": "Finance",
 | 
			
		||||
  "postCategoryLife": "Life",
 | 
			
		||||
  "postCategoryArt": "Art",
 | 
			
		||||
  "postCategoryStudy": "Study",
 | 
			
		||||
  "postCategoryGaming": "Gaming",
 | 
			
		||||
  "postCategoryProgramming": "Programming",
 | 
			
		||||
  "postCategoryMusic": "Music",
 | 
			
		||||
  "links": "Links",
 | 
			
		||||
  "addLink": "Add link",
 | 
			
		||||
  "linkKey": "Link Name",
 | 
			
		||||
  "linkValue": "URL",
 | 
			
		||||
  "debugOptions": "Debug Options",
 | 
			
		||||
  "joinedAt": "Joined at {}",
 | 
			
		||||
  "searchAccounts": "Search accounts...",
 | 
			
		||||
  "webFeeds": "Web Feeds",
 | 
			
		||||
  "polls": "Polls",
 | 
			
		||||
  "sharePostSlogan": "Explore more on the Solar Network",
 | 
			
		||||
  "filesListAdditional": {
 | 
			
		||||
    "one": "+{} file remaining",
 | 
			
		||||
    "other": "+{} files remaining"
 | 
			
		||||
  },
 | 
			
		||||
  "pollAnswerSubmitted": "Poll answer has been submitted.",
 | 
			
		||||
  "modifyAnswers": "Modify Answers",
 | 
			
		||||
  "back": "Back",
 | 
			
		||||
  "submit": "Submit",
 | 
			
		||||
  "pollOptionDefaultLabel": "Option 1",
 | 
			
		||||
  "pollUpdated": "Poll updated.",
 | 
			
		||||
  "pollCreated": "Poll created.",
 | 
			
		||||
  "pollCreate": "Create Poll",
 | 
			
		||||
  "pollEdit": "Edit Poll",
 | 
			
		||||
  "pollPreviewJsonDebug": "Debug Preview",
 | 
			
		||||
  "pollTitleRequired": "Title is required",
 | 
			
		||||
  "pollEndDateOptional": "End date & time (optional)",
 | 
			
		||||
  "notSet": "Not set",
 | 
			
		||||
  "pick": "Pick",
 | 
			
		||||
  "clear": "Clear",
 | 
			
		||||
  "questions": "Questions",
 | 
			
		||||
  "pollAddQuestion": "Add question",
 | 
			
		||||
  "pollQuestionTypeSingleChoice": "Single choice",
 | 
			
		||||
  "pollQuestionTypeMultipleChoice": "Multiple choice",
 | 
			
		||||
  "pollQuestionTypeFreeText": "Free text",
 | 
			
		||||
  "pollQuestionTypeYesNo": "Yes / No",
 | 
			
		||||
  "pollQuestionTypeRating": "Rating",
 | 
			
		||||
  "pollNoQuestionsYet": "No questions yet",
 | 
			
		||||
  "pollNoQuestionsHint": "Use \"Add question\" to start building your poll.",
 | 
			
		||||
  "pollDebugPreview": "Debug Preview",
 | 
			
		||||
  "pollUntitledQuestion": "Untitled question",
 | 
			
		||||
  "moveUp": "Move up",
 | 
			
		||||
  "moveDown": "Move down",
 | 
			
		||||
  "required": "Required",
 | 
			
		||||
  "pollQuestionTitle": "Question title",
 | 
			
		||||
  "pollQuestionTitleRequired": "Question title is required",
 | 
			
		||||
  "pollQuestionDescriptionOptional": "Question description (optional)",
 | 
			
		||||
  "options": "Options",
 | 
			
		||||
  "pollAddOption": "Add option",
 | 
			
		||||
  "pollOptionLabel": "Option label",
 | 
			
		||||
  "pollLongTextAnswerPreview": "Long text answer (preview)",
 | 
			
		||||
  "pollShortTextAnswerPreview": "Short text answer (preview)",
 | 
			
		||||
  "messageJumpNotLoaded": "The referenced message was not loaded, unable to jump to it.",
 | 
			
		||||
  "postUnlinkRealm": "No linked realm",
 | 
			
		||||
  "postSlug": "Slug",
 | 
			
		||||
  "postSlugHint": "The slug can be used to access your post via URL in the webpage, it should be publisher-wide unique.",
 | 
			
		||||
  "attachmentOnDevice": "On-device",
 | 
			
		||||
  "attachmentOnCloud": "On-cloud",
 | 
			
		||||
  "attachments": "Attachments",
 | 
			
		||||
  "publisherCollabInvitation": "Collabration invitations",
 | 
			
		||||
  "publisherCollabInvitationCount": {
 | 
			
		||||
    "zero": "No invitation",
 | 
			
		||||
    "one": "{} available invitation",
 | 
			
		||||
    "other": "{} available invitations"
 | 
			
		||||
  },
 | 
			
		||||
  "failedToLoadUserInfo": "Failed to load user info",
 | 
			
		||||
  "failedToLoadUserInfoNetwork": "It seems be network issue, you can tap the button below to try again.",
 | 
			
		||||
  "failedToLoadUserInfoUnauthorized": "It seems your session has been logged out or not available anymore, you can still try agian to fetch the user info if you want.",
 | 
			
		||||
  "okay": "Okay"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,6 @@
 | 
			
		||||
  "delete": "删除",
 | 
			
		||||
  "deletePublisher": "删除发布者",
 | 
			
		||||
  "deletePublisherHint": "确定要删除此发布者吗?这也会删除此发布者下的所有帖子和收藏。",
 | 
			
		||||
  "somethingWentWrong": "发生了一些错误",
 | 
			
		||||
  "deletePost": "删除帖子",
 | 
			
		||||
  "deletePostHint": "确定要删除这篇帖子吗?",
 | 
			
		||||
  "copyLink": "复制链接",
 | 
			
		||||
@@ -301,6 +300,7 @@
 | 
			
		||||
  "walletCreate": "创建钱包",
 | 
			
		||||
  "settingsServerUrl": "服务器 URL",
 | 
			
		||||
  "settingsApplied": "设置已应用。",
 | 
			
		||||
  "settingsCustomFontsHelper": "用逗号分隔。",
 | 
			
		||||
  "notifications": "通知",
 | 
			
		||||
  "posts": "帖子",
 | 
			
		||||
  "settingsBackgroundImage": "背景图片",
 | 
			
		||||
@@ -345,11 +345,10 @@
 | 
			
		||||
  "accountSettingsHelpContent": "此页面允许您管理您的帐户安全性、隐私和其他设置。如果您需要帮助,请联系管理员。",
 | 
			
		||||
  "unauthorized": "未授权",
 | 
			
		||||
  "unauthorizedHint": "您未登录或会话已过期,请重新登录。",
 | 
			
		||||
  "publisherBelongsTo": "属于 {}",
 | 
			
		||||
  "publisherBelongsTo": "属于",
 | 
			
		||||
  "postContent": "内容",
 | 
			
		||||
  "postSettings": "设置",
 | 
			
		||||
  "postPublisherUnselected": "未指定发布者",
 | 
			
		||||
  "postVisibility": "可见性",
 | 
			
		||||
  "postVisibilityPublic": "公开",
 | 
			
		||||
  "postVisibilityFriends": "仅好友可见",
 | 
			
		||||
  "postVisibilityUnlisted": "不公开",
 | 
			
		||||
@@ -473,7 +472,7 @@
 | 
			
		||||
  "description": "描述",
 | 
			
		||||
  "pinCode": "PIN 码",
 | 
			
		||||
  "biometric": "生物识别",
 | 
			
		||||
  "enterPinToConfirm": "请输入您的 6 位数字 PIN 以确认付款",
 | 
			
		||||
  "enterPinToConfirm": "请输入您的6位数字 PIN 以确认付款",
 | 
			
		||||
  "clearPin": "清除 PIN 码",
 | 
			
		||||
  "useBiometricToConfirm": "使用生物特征认证来确认付款",
 | 
			
		||||
  "touchSensorToAuthenticate": "触摸传感器进行身份验证",
 | 
			
		||||
@@ -490,20 +489,26 @@
 | 
			
		||||
  "paymentError": "付款失败: {error}",
 | 
			
		||||
  "usePinInstead": "使用 PIN 码",
 | 
			
		||||
  "levelProgress": "等级进度",
 | 
			
		||||
  "unlockedFeatures": "已解锁的功能",
 | 
			
		||||
  "unlockedFeaturesDescription": "在您当前级别上解锁的功能将显示在这里。",
 | 
			
		||||
  "stellarMembership": "恒星计划",
 | 
			
		||||
  "upgradeYourPlan": "升级您的计划",
 | 
			
		||||
  "chooseYourPlan": "选择你的方案",
 | 
			
		||||
  "currentMembership": "当前:{}",
 | 
			
		||||
  "currentMembershipMember": "恒星计划「{}」级会员",
 | 
			
		||||
  "membershipExpires": "过期于:{}",
 | 
			
		||||
  "membershipTierStellar": "恒星",
 | 
			
		||||
  "membershipTierNova": "新星",
 | 
			
		||||
  "membershipTierSupernova": "超新星",
 | 
			
		||||
  "membershipTierUnknown": "未知",
 | 
			
		||||
  "membershipPriceStellar": "每月 1200 源点,至少需要 3 级",
 | 
			
		||||
  "membershipPriceNova": "每月 2400 源点,至少需要 6 级",
 | 
			
		||||
  "membershipPriceSupernova": "每月 3600 源点,至少需要 9 级",
 | 
			
		||||
  "membershipFeatureBasic": "基础功能",
 | 
			
		||||
  "membershipFeaturePrioritySupport": "优先支持",
 | 
			
		||||
  "membershipFeatureAdFree": "无广告",
 | 
			
		||||
  "membershipFeatureAllPrimary": "所有主要功能",
 | 
			
		||||
  "membershipFeatureAdvancedCustomization": "高级自定义",
 | 
			
		||||
  "membershipFeatureEarlyAccess": "抢先体验",
 | 
			
		||||
  "membershipFeatureAllNova": "所有「新星」功能",
 | 
			
		||||
  "membershipFeatureExclusiveContent": "限定内容",
 | 
			
		||||
  "membershipFeatureVipSupport": "VIP 支持",
 | 
			
		||||
  "membershipCurrentBadge": "当前",
 | 
			
		||||
  "restorePurchase": "恢复购买",
 | 
			
		||||
  "restorePurchaseDescription": "输入您付款的提供商和订单 ID 以恢复您的购买。",
 | 
			
		||||
@@ -513,11 +518,186 @@
 | 
			
		||||
  "enterOrderId": "输入您的订单 ID",
 | 
			
		||||
  "restore": "恢复",
 | 
			
		||||
  "keyboardShortcuts": "键盘快捷键",
 | 
			
		||||
  "safetyReport": "举报",
 | 
			
		||||
  "safetyReportTitle": "举报",
 | 
			
		||||
  "safetyReportDescription": "通过举报不合适的内容和行为来维护我们社区的稳定。",
 | 
			
		||||
  "safetyReportType": "举报类型",
 | 
			
		||||
  "safetyReportReason": "更多证据",
 | 
			
		||||
  "safetyReportReasonHint": "请提供更多证据……",
 | 
			
		||||
  "safetyReportSubmit": "提交举报",
 | 
			
		||||
  "safetyReportSubmitting": "提交中……",
 | 
			
		||||
  "safetyReportSuccess": "举报成功,感谢您参与维护社区健康发展。",
 | 
			
		||||
  "safetyReportError": "举报失败,请稍后重试。",
 | 
			
		||||
  "safetyReportReasonRequired": "请提供举报证据",
 | 
			
		||||
  "safetyReportTypeSpam": "垃圾或导向错误",
 | 
			
		||||
  "safetyReportTypeHarassment": "骚扰或暴力行为",
 | 
			
		||||
  "safetyReportTypeHateSpeech": "歧视言论",
 | 
			
		||||
  "safetyReportTypeViolence": "威胁或暴力内容",
 | 
			
		||||
  "safetyReportTypeAdultContent": "成人内容",
 | 
			
		||||
  "safetyReportTypeIntellectualProperty": "抄袭",
 | 
			
		||||
  "safetyReportTypeOther": "其它",
 | 
			
		||||
  "safetyReportTypeInappropriate": "不良内容",
 | 
			
		||||
  "safetyReportTypeCopyright": "版权侵害",
 | 
			
		||||
  "safetyReportSuccessTitle": "举报成功",
 | 
			
		||||
  "safetyReportErrorTitle": "错误",
 | 
			
		||||
  "discover": "发现",
 | 
			
		||||
  "joinRealm": "加入领域",
 | 
			
		||||
  "removePublisherMember": "移除发布者",
 | 
			
		||||
  "removePublisherMemberHint": "你确定要将这个成员从发布者中移除?",
 | 
			
		||||
  "drafts": "草稿箱",
 | 
			
		||||
  "noDrafts": "无草稿",
 | 
			
		||||
  "articleDrafts": "文章草稿",
 | 
			
		||||
  "postDrafts": "帖子草稿",
 | 
			
		||||
  "saveDraft": "保存草稿",
 | 
			
		||||
  "draftSaved": "草稿已保存",
 | 
			
		||||
  "draftSaveFailed": "保存草稿失败",
 | 
			
		||||
  "clearAllDrafts": "清除全部草稿",
 | 
			
		||||
  "clearAllDraftsConfirm": "你确定要清除全部草稿?这一操作无法撤销。",
 | 
			
		||||
  "clearAll": "清除所有",
 | 
			
		||||
  "untitled": "未命名",
 | 
			
		||||
  "noContent": "内容为空",
 | 
			
		||||
  "justNow": "刚刚",
 | 
			
		||||
  "minutesAgo": "{} 分钟以前",
 | 
			
		||||
  "hoursAgo": "{} 小时以前",
 | 
			
		||||
  "daysAgo": "{} 天以前",
 | 
			
		||||
  "public": "公开的",
 | 
			
		||||
  "unlisted": "不列出",
 | 
			
		||||
  "friends": "朋友",
 | 
			
		||||
  "selected": "选择的",
 | 
			
		||||
  "private": "私密的",
 | 
			
		||||
  "postContentEmpty": "发布的内容不能为空",
 | 
			
		||||
  "share": "分享",
 | 
			
		||||
  "sharePost": "分享帖子",
 | 
			
		||||
  "quickActions": "快捷操作",
 | 
			
		||||
  "post": "发帖",
 | 
			
		||||
  "copy": "复制",
 | 
			
		||||
  "sendToChat": "发送到聊天",
 | 
			
		||||
  "failedToShareToPost": "分享到帖子失败:{}",
 | 
			
		||||
  "shareToChatComingSoon": "分享到聊天功能即将推出",
 | 
			
		||||
  "failedToShareToChat": "分享到聊天失败:{}",
 | 
			
		||||
  "shareToSpecificChatComingSoon": "分享到 {} 功能即将推出",
 | 
			
		||||
  "directChat": "私信",
 | 
			
		||||
  "systemShareComingSoon": "系统分享功能即将推出",
 | 
			
		||||
  "failedToShareToSystem": "分享到系统失败:{}",
 | 
			
		||||
  "failedToCopy": "复制失败:{}",
 | 
			
		||||
  "noChatRoomsAvailable": "无可用聊天室",
 | 
			
		||||
  "failedToLoadChats": "加载聊天失败",
 | 
			
		||||
  "contentToShare": "分享内容:",
 | 
			
		||||
  "unknownChat": "未知聊天",
 | 
			
		||||
  "addAdditionalMessage": "添加附加消息……",
 | 
			
		||||
  "uploadingFiles": "上传文件中……",
 | 
			
		||||
  "sharedSuccessfully": "分享成功!",
 | 
			
		||||
  "shareSuccess": "分享成功!",
 | 
			
		||||
  "shareToSpecificChatSuccess": "成功分享至 {}!",
 | 
			
		||||
  "wouldYouLikeToGoToChat": "是否前往该聊天?",
 | 
			
		||||
  "no": "否",
 | 
			
		||||
  "yes": "是",
 | 
			
		||||
  "navigateToChat": "前往聊天",
 | 
			
		||||
  "abuseReport": "举报",
 | 
			
		||||
  "abuseReportTitle": "举报内容",
 | 
			
		||||
  "abuseReportDescription": "举报不当内容或行为,协助维护社区安全。",
 | 
			
		||||
  "abuseReportType": "举报类型",
 | 
			
		||||
  "abuseReportReason": "补充详情",
 | 
			
		||||
  "abuseReportReasonHint": "请提供更多详情……",
 | 
			
		||||
  "abuseReportSubmit": "提交举报",
 | 
			
		||||
  "abuseReportSuccess": "举报提交成功,感谢你为社区维护作出贡献。",
 | 
			
		||||
  "abuseReportError": "无法提交举报,请稍后再试。",
 | 
			
		||||
  "abuseReportReasonRequired": "请提供关于此事件的细节",
 | 
			
		||||
  "abuseReportSuccessTitle": "举报已提交",
 | 
			
		||||
  "abuseReportErrorTitle": "错误",
 | 
			
		||||
  "abuseReportTypeSpam": "垃圾或错误信息",
 | 
			
		||||
  "abuseReportTypeHarassment": "骚扰或滥用",
 | 
			
		||||
  "abuseReportTypeInappropriate": "不合适的内容",
 | 
			
		||||
  "abuseReportTypeViolence": "暴力或人身威胁",
 | 
			
		||||
  "abuseReportTypeCopyright": "版权侵犯",
 | 
			
		||||
  "abuseReportTypeImpersonation": "冒充",
 | 
			
		||||
  "abuseReportTypeOffensiveContent": "冒犯性内容",
 | 
			
		||||
  "abuseReportTypePrivacyViolation": "隐私侵犯",
 | 
			
		||||
  "abuseReportTypeIllegalContent": "违法内容",
 | 
			
		||||
  "abuseReportTypeOther": "其他",
 | 
			
		||||
  "tags": "标签",
 | 
			
		||||
  "tagsHint": "输入标签,用英文逗号分隔",
 | 
			
		||||
  "categories": "分类",
 | 
			
		||||
  "categoriesHint": "输入分类,由逗号隔开",
 | 
			
		||||
  "chatNotJoined": "你还没有加入这个聊天。",
 | 
			
		||||
  "chatUnableJoin": "由于该聊天的访问设置使你无法加入。",
 | 
			
		||||
  "chatJoin": "加入聊天",
 | 
			
		||||
  "realmJoin": "加入领域",
 | 
			
		||||
  "realmJoinSuccess": "成功加入领域。",
 | 
			
		||||
  "search": "搜索",
 | 
			
		||||
  "publisherMembers": "合作者",
 | 
			
		||||
  "developerHub": "开发者中心",
 | 
			
		||||
  "developerHubUnselectedHint": "选择一名开发者查看总结数据或成为一名。",
 | 
			
		||||
  "enrollDeveloper": "成为一名开发者",
 | 
			
		||||
  "enrollDeveloperHint": "让你的一个发布者成为开发者。",
 | 
			
		||||
  "noPublishersToEnroll": "你没有可以成为开发者的发布者。",
 | 
			
		||||
  "totalCustomApps": "所有应用套件",
 | 
			
		||||
  "customApps": "应用套件",
 | 
			
		||||
  "noCustomApps": "还没有应用套件。",
 | 
			
		||||
  "createCustomApp": "创建应用套件",
 | 
			
		||||
  "editCustomApp": "编辑应用套件",
 | 
			
		||||
  "deleteCustomApp": "删除应用套件",
 | 
			
		||||
  "deleteCustomAppHint": "你确定要删除这个应用套件吗?这一步无法撤销。",
 | 
			
		||||
  "publicRealm": "公开领域",
 | 
			
		||||
  "publicRealmDescription": "所有人都可以预览这个领域的内容。",
 | 
			
		||||
  "communityRealm": "领域",
 | 
			
		||||
  "communityRealmDescription": "所有人都可以加入该领域并参与讨论,并将在发现和反馈页面显示。",
 | 
			
		||||
  "publicChat": "公开聊天",
 | 
			
		||||
  "publicChatDescription": "任何人都可以预览此聊天的内容。包括未加入的机器人。",
 | 
			
		||||
  "communityChat": "社区聊天",
 | 
			
		||||
  "communityChatDescription": "所有人都可以加入该聊天并参与参与讨论。",
 | 
			
		||||
  "appLinks": "应用链接",
 | 
			
		||||
  "homePageUrl": "主页链接",
 | 
			
		||||
  "privacyPolicyUrl": "隐私政策链接",
 | 
			
		||||
  "termsOfServiceUrl": "用户协议链接",
 | 
			
		||||
  "oauthConfig": "OAuth 配置",
 | 
			
		||||
  "clientUri": "客户端 URI",
 | 
			
		||||
  "redirectUris": "重定向 URIs",
 | 
			
		||||
  "addRedirectUri": "添加重定向 URI",
 | 
			
		||||
  "allowedScopes": "允许的范围",
 | 
			
		||||
  "requirePkce": "需要 PKCE",
 | 
			
		||||
  "allowOfflineAccess": "允许离线访问",
 | 
			
		||||
  "redirectUri": "重定向 URI",
 | 
			
		||||
  "redirectUriHint": "重定向 URI 用于 OAuth 认证,但您的项目状态转为线上时我们会验证请求中的重定向 URI 是否符合此配置。",
 | 
			
		||||
  "uriRequired": "这个 URI 是必须填写的。",
 | 
			
		||||
  "uriInvalid": "无效 URI。",
 | 
			
		||||
  "add": "添加",
 | 
			
		||||
  "addScope": "添加范围",
 | 
			
		||||
  "scope": "范围",
 | 
			
		||||
  "publisherFeatures": "功能",
 | 
			
		||||
  "publisherFeatureDevelop": "开发者计划",
 | 
			
		||||
  "publisherFeatureDevelopDescription": "为你的开发者解锁包括应用套件,API 及更多开发功能。",
 | 
			
		||||
  "publisherFeatureDevelopHint": "目前该功能还在开发中,你需要邀请才可解锁。",
 | 
			
		||||
  "learnMore": "了解更多",
 | 
			
		||||
  "discoverWebArticles": "来自站外的文章",
 | 
			
		||||
  "webArticlesStand": "文章亭",
 | 
			
		||||
  "about": "关于",
 | 
			
		||||
  "somethingWentWrong": "发生了一些错误",
 | 
			
		||||
  "editedAt": "编辑于 {}",
 | 
			
		||||
  "addAudio": "添加音频",
 | 
			
		||||
  "recordAudio": "录制音频",
 | 
			
		||||
  "linkAttachment": "链接附件",
 | 
			
		||||
  "fileIdCannotBeEmpty": "文件 ID 不能为空",
 | 
			
		||||
  "fileIdLinkHint": "还没有上传到 Solar Network?点击此处打开 Solar Network Drive,自定义您的上传内容。",
 | 
			
		||||
  "failedToFetchFile": "获取文件失败:{}",
 | 
			
		||||
  "callLeave": "离开",
 | 
			
		||||
  "callEnd": "挂断通话",
 | 
			
		||||
  "postType": "帖子类型",
 | 
			
		||||
  "articleAttachmentHint": "附件必须上传并插入到文章主体中才能显示出来。",
 | 
			
		||||
  "postVisibility": "可见性",
 | 
			
		||||
  "currentMembershipMember": "恒星计划成员 · {}",
 | 
			
		||||
  "membershipPriceStellar": "需要用户等级 3+,每月价格 1200 NSP",
 | 
			
		||||
  "membershipPriceNova": "需要用户等级 6+,每月价格 2400 NSP",
 | 
			
		||||
  "membershipPriceSupernova": "需要用户等级 9+,每月价格 3600 NSP",
 | 
			
		||||
  "sharePostPhoto": "通过图片分享帖子",
 | 
			
		||||
  "wouldYouLikeToNavigateToChat": "你想要前往聊天页面吗?",
 | 
			
		||||
  "abuseReports": "举报",
 | 
			
		||||
  "discoverRealms": "发现领域",
 | 
			
		||||
  "discoverPublishers": "发现发布者",
 | 
			
		||||
  "membershipCancel": "取消会员订阅",
 | 
			
		||||
  "membershipCancelConfirm": "您确定要取消您的会员订阅?",
 | 
			
		||||
  "membershipCancelHint": "您确定要取消您的会员订阅吗?您将不会再被收费。您的会员资格将在当前计费周期结束前保持有效。并且您在当前订阅结束之前无法重新订阅。",
 | 
			
		||||
  "membershipCancelSuccess": "您的会员订阅已成功取消。",
 | 
			
		||||
  "membershipCancelConfirm": "你确定要取消会员订阅吗?",
 | 
			
		||||
  "membershipCancelHint": "你确定要取消会员订阅吗?你将不会再次被扣费。你的会员资格将在当前计费周期结束前保持有效。并且你将无法重新订阅,直到当前订阅结束。",
 | 
			
		||||
  "membershipCancelSuccess": "你的会员订阅已成功取消。",
 | 
			
		||||
  "aboutScreenTitle": "关于",
 | 
			
		||||
  "aboutScreenVersionInfo": "版本 {} ({})",
 | 
			
		||||
  "aboutScreenAppInfoSectionTitle": "应用信息",
 | 
			
		||||
@@ -527,18 +707,126 @@
 | 
			
		||||
  "aboutScreenLinksSectionTitle": "链接",
 | 
			
		||||
  "aboutScreenPrivacyPolicyTitle": "隐私政策",
 | 
			
		||||
  "aboutScreenTermsOfServiceTitle": "服务条款",
 | 
			
		||||
  "aboutScreenOpenSourceLicensesTitle": "开源许可证",
 | 
			
		||||
  "aboutScreenOpenSourceLicensesTitle": "开源许可",
 | 
			
		||||
  "aboutScreenDeveloperSectionTitle": "开发者",
 | 
			
		||||
  "aboutScreenContactUsTitle": "联系我们",
 | 
			
		||||
  "aboutScreenLicenseTitle": "许可证",
 | 
			
		||||
  "aboutScreenLicenseContent": "GNU Affero General Public License v3.0",
 | 
			
		||||
  "aboutScreenCopyright": "版权所有 © 索尔辛茨 {}",
 | 
			
		||||
  "aboutScreenMadeWith": "由 Solar Network Team 用 ❤︎️ 制作",
 | 
			
		||||
  "aboutScreenFailedToLoadPackageInfo": "加载包信息失败:{error}",
 | 
			
		||||
  "aboutScreenLicenseTitle": "许可",
 | 
			
		||||
  "aboutScreenLicenseContent": "无法翻译",
 | 
			
		||||
  "aboutScreenCopyright": "版权所有 © Solsynth {}",
 | 
			
		||||
  "aboutScreenMadeWith": "由 Solar Network 团队用 ❤︎️ 制作",
 | 
			
		||||
  "aboutScreenFailedToLoadPackageInfo": "无法加载包信息:{error}",
 | 
			
		||||
  "copiedToClipboard": "已复制到剪贴板",
 | 
			
		||||
  "copyToClipboardTooltip": "复制到剪贴板",
 | 
			
		||||
  "postForwardingTo": "转发给",
 | 
			
		||||
  "postReplyingTo": "回复给",
 | 
			
		||||
  "postEditing": "您正在编辑现有帖子",
 | 
			
		||||
  "postArticle": "文章"
 | 
			
		||||
  "postForwardingTo": "正在转发到",
 | 
			
		||||
  "postReplyingTo": "正在回复",
 | 
			
		||||
  "postReplyPlaceholder": "发表你的回复",
 | 
			
		||||
  "postEditing": "你正在编辑一个现有的帖子",
 | 
			
		||||
  "postArticle": "文章",
 | 
			
		||||
  "aboutDeviceName": "设备名称",
 | 
			
		||||
  "aboutDeviceIdentifier": "设备标识符",
 | 
			
		||||
  "donate": "捐赠",
 | 
			
		||||
  "donateDescription": "支持我们继续开发 Solar Network,并维持服务器运行。",
 | 
			
		||||
  "fileId": "文件 ID",
 | 
			
		||||
  "fileIdHint": "文件 ID 是你通过 Solar Network Drive 上传文件后获得的 ID。",
 | 
			
		||||
  "translate": "翻译",
 | 
			
		||||
  "translating": "正在翻译",
 | 
			
		||||
  "translated": "已翻译",
 | 
			
		||||
  "reactionThumbUp": "赞",
 | 
			
		||||
  "reactionThumbDown": "踩",
 | 
			
		||||
  "reactionJustOkay": "还行",
 | 
			
		||||
  "reactionCry": "哭",
 | 
			
		||||
  "reactionConfuse": "困惑",
 | 
			
		||||
  "reactionClap": "鼓掌",
 | 
			
		||||
  "reactionLaugh": "笑",
 | 
			
		||||
  "reactionAngry": "生气",
 | 
			
		||||
  "reactionParty": "派对",
 | 
			
		||||
  "reactionPray": "祈祷",
 | 
			
		||||
  "reactionHeart": "爱心",
 | 
			
		||||
  "selectMicrophone": "选择麦克风",
 | 
			
		||||
  "selectCamera": "选择摄像头",
 | 
			
		||||
  "switchedTo": "已切换到 {}",
 | 
			
		||||
  "connecting": "正在连接",
 | 
			
		||||
  "reconnecting": "正在重新连接",
 | 
			
		||||
  "disconnected": "已断开连接",
 | 
			
		||||
  "connected": "已连接",
 | 
			
		||||
  "repliesLoadMore": "加载更多回复",
 | 
			
		||||
  "attachmentsRecentUploads": "最近上传",
 | 
			
		||||
  "attachmentsManualInput": "手动输入",
 | 
			
		||||
  "crop": "裁剪",
 | 
			
		||||
  "rename": "重命名",
 | 
			
		||||
  "markAsSensitive": "标记为敏感",
 | 
			
		||||
  "fileName": "文件名",
 | 
			
		||||
  "sensitiveCategories": {
 | 
			
		||||
    "language": "语言",
 | 
			
		||||
    "sexualContent": "色情内容",
 | 
			
		||||
    "violence": "暴力",
 | 
			
		||||
    "profanity": "亵渎",
 | 
			
		||||
    "hateSpeech": "仇恨言论",
 | 
			
		||||
    "racism": "种族主义",
 | 
			
		||||
    "adultContent": "成人内容",
 | 
			
		||||
    "drugAbuse": "药物滥用",
 | 
			
		||||
    "alcoholAbuse": "酗酒",
 | 
			
		||||
    "gambling": "赌博",
 | 
			
		||||
    "selfHarm": "自残",
 | 
			
		||||
    "childAbuse": "虐待儿童",
 | 
			
		||||
    "other": "其他"
 | 
			
		||||
  },
 | 
			
		||||
  "poll": "投票",
 | 
			
		||||
  "pollsRecent": "最近投票",
 | 
			
		||||
  "pollCreateNew": "创建新投票",
 | 
			
		||||
  "pollCreateNewHint": "为你的帖子创建一个新投票。选择一个发布者然后继续。",
 | 
			
		||||
  "publisher": "发布者",
 | 
			
		||||
  "publisherHint": "输入发布者名称",
 | 
			
		||||
  "publisherCannotBeEmpty": "发布者不能为空",
 | 
			
		||||
  "operationFailed": "操作失败:{}",
 | 
			
		||||
  "stickerMarketplace": "贴纸市场",
 | 
			
		||||
  "stickerPackAdded": "贴纸包已添加到你的收藏",
 | 
			
		||||
  "stickerPackRemoved": "贴纸包已从你的收藏中移除",
 | 
			
		||||
  "addPack": "添加贴纸包",
 | 
			
		||||
  "removePack": "移除贴纸包",
 | 
			
		||||
  "browseAndAddStickers": "浏览并添加贴纸包",
 | 
			
		||||
  "stickerPack": "贴纸包",
 | 
			
		||||
  "postCategoryTechnology": "科技",
 | 
			
		||||
  "postCategoryTravel": "旅行",
 | 
			
		||||
  "postCategoryFood": "美食",
 | 
			
		||||
  "postCategoryHealth": "健康",
 | 
			
		||||
  "postCategoryScience": "科学",
 | 
			
		||||
  "postCategorySports": "体育",
 | 
			
		||||
  "postCategoryFinance": "金融",
 | 
			
		||||
  "postCategoryLife": "生活",
 | 
			
		||||
  "postCategoryArt": "艺术",
 | 
			
		||||
  "postCategoryStudy": "学习",
 | 
			
		||||
  "postCategoryGaming": "游戏",
 | 
			
		||||
  "postCategoryProgramming": "编程",
 | 
			
		||||
  "postCategoryMusic": "音乐",
 | 
			
		||||
  "links": "链接",
 | 
			
		||||
  "addLink": "添加链接",
 | 
			
		||||
  "linkKey": "链接名称",
 | 
			
		||||
  "linkValue": "链接",
 | 
			
		||||
  "debugOptions": "调试选项",
 | 
			
		||||
  "joinedAt": "加入于 {}",
 | 
			
		||||
  "searchAccounts": "搜索帐号……",
 | 
			
		||||
  "webFeeds": "订阅源",
 | 
			
		||||
  "polls": "投票",
 | 
			
		||||
  "sharePostSlogan": "加入 Solar Network 以便探索更多",
 | 
			
		||||
  "filesListAdditional": {
 | 
			
		||||
    "one": "+{} 个文件被折叠",
 | 
			
		||||
    "other": "+{} 个文件被折叠"
 | 
			
		||||
  },
 | 
			
		||||
  "messageJumpNotLoaded": "引用的消息没有被加载,无法跳转。",
 | 
			
		||||
  "postUnlinkRealm": "不关联领域",
 | 
			
		||||
  "postSlug": "别名",
 | 
			
		||||
  "postSlugHint": "这个别名可以用于在网页通过 URL 浏览到你的帖子,它应该在同一发布者中是唯一。",
 | 
			
		||||
  "attachmentOnDevice": "离线",
 | 
			
		||||
  "attachmentOnCloud": "在线",
 | 
			
		||||
  "publisherCollabInvitation": "协作邀请",
 | 
			
		||||
  "publisherCollabInvitationCount": {
 | 
			
		||||
    "zero": "无邀请",
 | 
			
		||||
    "one": "{} 个可用邀请",
 | 
			
		||||
    "other": "{} 个可用邀请"
 | 
			
		||||
  },
 | 
			
		||||
  "failedToLoadUserInfo": "加载用户信息失败",
 | 
			
		||||
  "failedToLoadUserInfoNetwork": "这看起来是个网络问题,你可以按下面的按钮来重试",
 | 
			
		||||
  "failedToLoadUserInfoUnauthorized": "看来您的会话已被注销或不再可用,如果您愿意,您仍然可以再次尝试获取用户信息。",
 | 
			
		||||
  "okay": "了解"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								assets/icons/icon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/icons/icon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 108 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/images/media-offline.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/images/media-offline.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 307 KiB  | 
@@ -1 +1 @@
 | 
			
		||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:android:a8d3f7995b0b8e86f4188b","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"solian-0x001","configurations":{"android":"1:961776991058:android:a8d3f7995b0b8e86f4188b","ios":"1:961776991058:ios:727229d368cc47e1f4188b","macos":"1:961776991058:ios:727229d368cc47e1f4188b","web":"1:961776991058:web:b91d12f2892a5609f4188b","windows":"1:961776991058:web:3a912c0eb14028e5f4188b"}}}}}}
 | 
			
		||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:android:a8d3f7995b0b8e86f4188b","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"solian-0x001","appId":"1:961776991058:ios:727229d368cc47e1f4188b","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"solian-0x001","configurations":{"android":"1:961776991058:android:a8d3f7995b0b8e86f4188b","ios":"1:961776991058:ios:727229d368cc47e1f4188b","macos":"1:961776991058:ios:727229d368cc47e1f4188b","web":"1:961776991058:web:3a912c0eb14028e5f4188b","windows":"1:961776991058:web:3a912c0eb14028e5f4188b"}}}}}}
 | 
			
		||||
@@ -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'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										212
									
								
								ios/Podfile.lock
									
									
									
									
									
								
							
							
						
						
									
										212
									
								
								ios/Podfile.lock
									
									
									
									
									
								
							@@ -40,39 +40,91 @@ 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/Crashlytics (12.0.0):
 | 
			
		||||
    - Firebase/CoreOnly
 | 
			
		||||
    - FirebaseMessaging (~> 11.15.0)
 | 
			
		||||
  - firebase_core (3.15.0):
 | 
			
		||||
    - Firebase/CoreOnly (= 11.15.0)
 | 
			
		||||
    - FirebaseCrashlytics (~> 12.0.0)
 | 
			
		||||
  - Firebase/Messaging (12.0.0):
 | 
			
		||||
    - Firebase/CoreOnly
 | 
			
		||||
    - FirebaseMessaging (~> 12.0.0)
 | 
			
		||||
  - firebase_analytics (12.0.0):
 | 
			
		||||
    - firebase_core
 | 
			
		||||
    - FirebaseAnalytics (= 12.0.0)
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - firebase_messaging (15.2.8):
 | 
			
		||||
    - Firebase/Messaging (= 11.15.0)
 | 
			
		||||
  - firebase_core (4.0.0):
 | 
			
		||||
    - Firebase/CoreOnly (= 12.0.0)
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - firebase_crashlytics (5.0.0):
 | 
			
		||||
    - Firebase/Crashlytics (= 12.0.0)
 | 
			
		||||
    - firebase_core
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - FirebaseCore (11.15.0):
 | 
			
		||||
    - FirebaseCoreInternal (~> 11.15.0)
 | 
			
		||||
  - firebase_messaging (16.0.0):
 | 
			
		||||
    - Firebase/Messaging (= 12.0.0)
 | 
			
		||||
    - firebase_core
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - FirebaseAnalytics (12.0.0):
 | 
			
		||||
    - FirebaseAnalytics/Default (= 12.0.0)
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - FirebaseInstallations (~> 12.0.0)
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/MethodSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - FirebaseAnalytics/Default (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - FirebaseInstallations (~> 12.0.0)
 | 
			
		||||
    - GoogleAppMeasurement/Default (= 12.0.0)
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/MethodSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - FirebaseCore (12.0.0):
 | 
			
		||||
    - FirebaseCoreInternal (~> 12.0.0)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Logger (~> 8.1)
 | 
			
		||||
  - FirebaseCoreInternal (11.15.0):
 | 
			
		||||
  - FirebaseCoreExtension (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
  - FirebaseCoreInternal (12.0.0):
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
  - FirebaseInstallations (11.15.0):
 | 
			
		||||
    - FirebaseCore (~> 11.15.0)
 | 
			
		||||
  - FirebaseCrashlytics (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - FirebaseInstallations (~> 12.0.0)
 | 
			
		||||
    - FirebaseRemoteConfigInterop (~> 12.0.0)
 | 
			
		||||
    - FirebaseSessions (~> 12.0.0)
 | 
			
		||||
    - GoogleDataTransport (~> 10.1)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
    - PromisesObjC (~> 2.4)
 | 
			
		||||
  - 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)
 | 
			
		||||
    - GoogleUtilities/UserDefaults (~> 8.1)
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - FirebaseRemoteConfigInterop (12.0.0)
 | 
			
		||||
  - FirebaseSessions (12.0.0):
 | 
			
		||||
    - FirebaseCore (~> 12.0.0)
 | 
			
		||||
    - FirebaseCoreExtension (~> 12.0.0)
 | 
			
		||||
    - FirebaseInstallations (~> 12.0.0)
 | 
			
		||||
    - GoogleDataTransport (~> 10.1)
 | 
			
		||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/UserDefaults (~> 8.1)
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
    - PromisesSwift (~> 2.1)
 | 
			
		||||
  - Flutter (1.0.0)
 | 
			
		||||
  - flutter_app_update (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - flutter_inappwebview_ios (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - flutter_inappwebview_ios/Core (= 0.0.1)
 | 
			
		||||
@@ -93,12 +145,38 @@ 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
 | 
			
		||||
  - GoogleAdsOnDeviceConversion (2.1.0):
 | 
			
		||||
    - GoogleUtilities/Logger (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - GoogleAppMeasurement/Core (12.0.0):
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/MethodSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - GoogleAppMeasurement/Default (12.0.0):
 | 
			
		||||
    - GoogleAdsOnDeviceConversion (= 2.1.0)
 | 
			
		||||
    - GoogleAppMeasurement/Core (= 12.0.0)
 | 
			
		||||
    - GoogleAppMeasurement/IdentitySupport (= 12.0.0)
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/MethodSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - GoogleAppMeasurement/IdentitySupport (12.0.0):
 | 
			
		||||
    - GoogleAppMeasurement/Core (= 12.0.0)
 | 
			
		||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/MethodSwizzler (~> 8.1)
 | 
			
		||||
    - GoogleUtilities/Network (~> 8.1)
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
  - GoogleDataTransport (10.1.0):
 | 
			
		||||
    - nanopb (~> 3.30910.0)
 | 
			
		||||
    - PromisesObjC (~> 2.4)
 | 
			
		||||
@@ -112,6 +190,9 @@ PODS:
 | 
			
		||||
  - GoogleUtilities/Logger (8.1.0):
 | 
			
		||||
    - GoogleUtilities/Environment
 | 
			
		||||
    - GoogleUtilities/Privacy
 | 
			
		||||
  - GoogleUtilities/MethodSwizzler (8.1.0):
 | 
			
		||||
    - GoogleUtilities/Logger
 | 
			
		||||
    - GoogleUtilities/Privacy
 | 
			
		||||
  - GoogleUtilities/Network (8.1.0):
 | 
			
		||||
    - GoogleUtilities/Logger
 | 
			
		||||
    - "GoogleUtilities/NSData+zlib"
 | 
			
		||||
@@ -130,11 +211,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
 | 
			
		||||
@@ -160,9 +241,11 @@ PODS:
 | 
			
		||||
  - pointer_interceptor_ios (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - PromisesObjC (2.4.0)
 | 
			
		||||
  - PromisesSwift (2.4.0):
 | 
			
		||||
    - PromisesObjC (= 2.4.0)
 | 
			
		||||
  - receive_sharing_intent (1.8.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - record_ios (1.0.0):
 | 
			
		||||
  - record_ios (1.1.0):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - SAMKeychain (1.5.3)
 | 
			
		||||
  - SDWebImage (5.21.1):
 | 
			
		||||
@@ -178,28 +261,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.4):
 | 
			
		||||
    - sqlite3/common (= 3.50.4)
 | 
			
		||||
  - sqlite3/common (3.50.4)
 | 
			
		||||
  - sqlite3/dbstatvtab (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/fts5 (3.50.1):
 | 
			
		||||
  - sqlite3/fts5 (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/math (3.50.1):
 | 
			
		||||
  - sqlite3/math (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/perf-threadsafe (3.50.1):
 | 
			
		||||
  - sqlite3/perf-threadsafe (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/rtree (3.50.1):
 | 
			
		||||
  - sqlite3/rtree (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3/session (3.50.4):
 | 
			
		||||
    - sqlite3/common
 | 
			
		||||
  - sqlite3_flutter_libs (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
    - FlutterMacOS
 | 
			
		||||
    - sqlite3 (~> 3.50.1)
 | 
			
		||||
    - sqlite3 (~> 3.50.4)
 | 
			
		||||
    - 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 +295,7 @@ PODS:
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - wakelock_plus (0.0.1):
 | 
			
		||||
    - Flutter
 | 
			
		||||
  - WebRTC-SDK (125.6422.07)
 | 
			
		||||
  - WebRTC-SDK (137.7151.02)
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES:
 | 
			
		||||
  - Alamofire
 | 
			
		||||
@@ -217,9 +303,12 @@ DEPENDENCIES:
 | 
			
		||||
  - croppy (from `.symlinks/plugins/croppy/ios`)
 | 
			
		||||
  - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
 | 
			
		||||
  - file_picker (from `.symlinks/plugins/file_picker/ios`)
 | 
			
		||||
  - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
 | 
			
		||||
  - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
 | 
			
		||||
  - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`)
 | 
			
		||||
  - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
 | 
			
		||||
  - Flutter (from `Flutter`)
 | 
			
		||||
  - flutter_app_update (from `.symlinks/plugins/flutter_app_update/ios`)
 | 
			
		||||
  - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
 | 
			
		||||
  - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
 | 
			
		||||
  - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
 | 
			
		||||
@@ -259,16 +348,24 @@ SPEC REPOS:
 | 
			
		||||
    - DKImagePickerController
 | 
			
		||||
    - DKPhotoGallery
 | 
			
		||||
    - Firebase
 | 
			
		||||
    - FirebaseAnalytics
 | 
			
		||||
    - FirebaseCore
 | 
			
		||||
    - FirebaseCoreExtension
 | 
			
		||||
    - FirebaseCoreInternal
 | 
			
		||||
    - FirebaseCrashlytics
 | 
			
		||||
    - FirebaseInstallations
 | 
			
		||||
    - FirebaseMessaging
 | 
			
		||||
    - FirebaseRemoteConfigInterop
 | 
			
		||||
    - FirebaseSessions
 | 
			
		||||
    - GoogleAdsOnDeviceConversion
 | 
			
		||||
    - GoogleAppMeasurement
 | 
			
		||||
    - GoogleDataTransport
 | 
			
		||||
    - GoogleUtilities
 | 
			
		||||
    - Kingfisher
 | 
			
		||||
    - nanopb
 | 
			
		||||
    - OrderedSet
 | 
			
		||||
    - PromisesObjC
 | 
			
		||||
    - PromisesSwift
 | 
			
		||||
    - SAMKeychain
 | 
			
		||||
    - SDWebImage
 | 
			
		||||
    - sqlite3
 | 
			
		||||
@@ -284,12 +381,18 @@ EXTERNAL SOURCES:
 | 
			
		||||
    :path: ".symlinks/plugins/device_info_plus/ios"
 | 
			
		||||
  file_picker:
 | 
			
		||||
    :path: ".symlinks/plugins/file_picker/ios"
 | 
			
		||||
  firebase_analytics:
 | 
			
		||||
    :path: ".symlinks/plugins/firebase_analytics/ios"
 | 
			
		||||
  firebase_core:
 | 
			
		||||
    :path: ".symlinks/plugins/firebase_core/ios"
 | 
			
		||||
  firebase_crashlytics:
 | 
			
		||||
    :path: ".symlinks/plugins/firebase_crashlytics/ios"
 | 
			
		||||
  firebase_messaging:
 | 
			
		||||
    :path: ".symlinks/plugins/firebase_messaging/ios"
 | 
			
		||||
  Flutter:
 | 
			
		||||
    :path: Flutter
 | 
			
		||||
  flutter_app_update:
 | 
			
		||||
    :path: ".symlinks/plugins/flutter_app_update/ios"
 | 
			
		||||
  flutter_inappwebview_ios:
 | 
			
		||||
    :path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
 | 
			
		||||
  flutter_keyboard_visibility:
 | 
			
		||||
@@ -361,14 +464,22 @@ 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_analytics: cd56fc56f75c1df30a6ff5290cd56e230996a76d
 | 
			
		||||
  firebase_core: 633e1851ffe1b9ab875f6467a4f574c79cef02e4
 | 
			
		||||
  firebase_crashlytics: 2c6c1a17900a38081d938330e9f48e60ec5b255d
 | 
			
		||||
  firebase_messaging: d17feef781edc84ebefe62624fb384358ad96361
 | 
			
		||||
  FirebaseAnalytics: 6d790cd1b159b4eb61a99948df0934ce505a34f7
 | 
			
		||||
  FirebaseCore: 055f4ab117d5964158c833f3d5e7ec6d91648d4a
 | 
			
		||||
  FirebaseCoreExtension: 639afb3de6abd611952be78a794c54a47fa0f361
 | 
			
		||||
  FirebaseCoreInternal: dedc28e569a4be85f38f3d6af1070a2e12018d55
 | 
			
		||||
  FirebaseCrashlytics: db75aa0cab8d00f68406fa247c32fe17ade884d7
 | 
			
		||||
  FirebaseInstallations: d4c7c958f99c8860d7fcece786314ae790e2f988
 | 
			
		||||
  FirebaseMessaging: af49f8d7c0a3d2a017d9302c80946f45a7777dde
 | 
			
		||||
  FirebaseRemoteConfigInterop: bfa0ea72ba3dc5af739777296424e46bd6f42613
 | 
			
		||||
  FirebaseSessions: 4e784acda213108aafef536535cdfc03504acc42
 | 
			
		||||
  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
 | 
			
		||||
  flutter_app_update: 816fdb2e30e4832a7c45e3f108d391c42ef040a9
 | 
			
		||||
  flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
 | 
			
		||||
  flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
 | 
			
		||||
  flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
 | 
			
		||||
@@ -376,15 +487,17 @@ SPEC CHECKSUMS:
 | 
			
		||||
  flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
 | 
			
		||||
  flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
 | 
			
		||||
  flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9
 | 
			
		||||
  flutter_webrtc: fd0d3bdef8766a0736dbbe2e5b7e85f1f3c52117
 | 
			
		||||
  flutter_webrtc: 6f7da106613d52ade777d5b4875a43f48c28b457
 | 
			
		||||
  gal: baecd024ebfd13c441269ca7404792a7152fde89
 | 
			
		||||
  GoogleAdsOnDeviceConversion: 2be6297a4f048459e0ae17fad9bfd2844e10cf64
 | 
			
		||||
  GoogleAppMeasurement: 8f6ab04ad6ae493b53fcf56bd26323fb2f1384f3
 | 
			
		||||
  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
 | 
			
		||||
@@ -395,23 +508,24 @@ SPEC CHECKSUMS:
 | 
			
		||||
  path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
 | 
			
		||||
  pointer_interceptor_ios: ec847ef8b0915778bed2b2cef636f4d177fa8eed
 | 
			
		||||
  PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
 | 
			
		||||
  PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
 | 
			
		||||
  receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
 | 
			
		||||
  record_ios: fee1c924aa4879b882ebca2b4bce6011bcfc3d8b
 | 
			
		||||
  record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374
 | 
			
		||||
  SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
 | 
			
		||||
  SDWebImage: f29024626962457f3470184232766516dee8dfea
 | 
			
		||||
  share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
 | 
			
		||||
  shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
 | 
			
		||||
  sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
 | 
			
		||||
  sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
 | 
			
		||||
  sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5
 | 
			
		||||
  sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2
 | 
			
		||||
  sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
 | 
			
		||||
  sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
 | 
			
		||||
  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" */;
 | 
			
		||||
@@ -379,12 +439,14 @@
 | 
			
		||||
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
 | 
			
		||||
				8C0351B03869BBF493808288 /* [CP] Embed Pods Frameworks */,
 | 
			
		||||
				5E7D6EF29B671AC7EDBA5649 /* [CP] Copy Pods Resources */,
 | 
			
		||||
				E86CDE9D6464F4F52B910856 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
				73CDD6802DEC00480059D95D /* PBXTargetDependency */,
 | 
			
		||||
				73C305D72E0BE878009035B9 /* PBXTargetDependency */,
 | 
			
		||||
				73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */,
 | 
			
		||||
			);
 | 
			
		||||
			fileSystemSynchronizedGroups = (
 | 
			
		||||
				73268D272DEB012A0076E970 /* Services */,
 | 
			
		||||
@@ -409,6 +471,9 @@
 | 
			
		||||
						CreatedOnToolsVersion = 14.0;
 | 
			
		||||
						TestTargetID = 97C146ED1CF9000F007C117D;
 | 
			
		||||
					};
 | 
			
		||||
					73ACDFAA2E3D0E6100B63535 = {
 | 
			
		||||
						CreatedOnToolsVersion = 16.4;
 | 
			
		||||
					};
 | 
			
		||||
					73C305CD2E0BE878009035B9 = {
 | 
			
		||||
						CreatedOnToolsVersion = 16.4;
 | 
			
		||||
					};
 | 
			
		||||
@@ -438,6 +503,7 @@
 | 
			
		||||
				331C8080294A63A400263BE5 /* RunnerTests */,
 | 
			
		||||
				73CDD6792DEC00480059D95D /* SolianNotificationService */,
 | 
			
		||||
				73C305CD2E0BE878009035B9 /* SolianShareExtension */,
 | 
			
		||||
				73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
@@ -450,6 +516,13 @@
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFA92E3D0E6100B63535 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73C305CC2E0BE878009035B9 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -610,6 +683,24 @@
 | 
			
		||||
			shellPath = /bin/sh;
 | 
			
		||||
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
 | 
			
		||||
		};
 | 
			
		||||
		E86CDE9D6464F4F52B910856 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */ = {
 | 
			
		||||
			isa = PBXShellScriptBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
			);
 | 
			
		||||
			inputFileListPaths = (
 | 
			
		||||
			);
 | 
			
		||||
			inputPaths = (
 | 
			
		||||
			);
 | 
			
		||||
			name = "FlutterFire: \"flutterfire upload-crashlytics-symbols\"";
 | 
			
		||||
			outputFileListPaths = (
 | 
			
		||||
			);
 | 
			
		||||
			outputPaths = (
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
			shellPath = /bin/sh;
 | 
			
		||||
			shellScript = "\n#!/bin/bash\nPATH=\"${PATH}:$FLUTTER_ROOT/bin:${PUB_CACHE}/bin:$HOME/.pub-cache/bin\"\n\nif [ -z \"$PODS_ROOT\" ] || [ ! -d \"$PODS_ROOT/FirebaseCrashlytics\" ]; then\n  # Cannot use \"BUILD_DIR%/Build/*\" as per Firebase documentation, it points to \"flutter-project/build/ios/*\" path which doesn't have run script\n  DERIVED_DATA_PATH=$(echo \"$BUILD_ROOT\" | sed -E 's|(.*DerivedData/[^/]+).*|\\1|')\n  PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"${DERIVED_DATA_PATH}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\nelse\n  PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"$PODS_ROOT/FirebaseCrashlytics/run\"\nfi\n\n# Command to upload symbols script used to upload symbols to Firebase server\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=\"$PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT\" --platform=ios --apple-project-path=\"${SRCROOT}\" --env-platform-name=\"${PLATFORM_NAME}\" --env-configuration=\"${CONFIGURATION}\" --env-project-dir=\"${PROJECT_DIR}\" --env-built-products-dir=\"${BUILT_PRODUCTS_DIR}\" --env-dwarf-dsym-folder-path=\"${DWARF_DSYM_FOLDER_PATH}\" --env-dwarf-dsym-file-name=\"${DWARF_DSYM_FILE_NAME}\" --env-infoplist-path=\"${INFOPLIST_PATH}\" --default-config=default\n";
 | 
			
		||||
		};
 | 
			
		||||
		E947029FCA058878F9B63890 /* [CP] Check Pods Manifest.lock */ = {
 | 
			
		||||
			isa = PBXShellScriptBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -643,6 +734,13 @@
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73ACDFA72E3D0E6100B63535 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
		73C305CA2E0BE878009035B9 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
@@ -675,6 +773,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 +875,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 +939,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 +1423,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 +1451,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 +1478,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,6 +2,12 @@
 | 
			
		||||
<!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>ANDROID_CLIENT_ID</key>
 | 
			
		||||
	<string>961776991058-r4iv9qoio57ul7utbfpgfrda2etvtch8.apps.googleusercontent.com</string>
 | 
			
		||||
	<key>API_KEY</key>
 | 
			
		||||
	<string>AIzaSyCzQIyiYKoYHTpGXhN-IjgMML8z797WVD8</string>
 | 
			
		||||
	<key>GCM_SENDER_ID</key>
 | 
			
		||||
 
 | 
			
		||||
@@ -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>
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ class NotifyDelegate: UIResponder, UNUserNotificationCenterDelegate {
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        let serverUrl = UserDefaults.standard.getServerUrl()
 | 
			
		||||
        let url = "\(serverUrl)/chat/\(metadata["room_id"] ?? "")/messages"
 | 
			
		||||
        let url = "\(serverUrl)/sphere/chat/\(metadata["room_id"] ?? "")/messages"
 | 
			
		||||
        
 | 
			
		||||
        let parameters: [String: Any?] = [
 | 
			
		||||
            "content": textResponse.userText,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
import Foundation
 | 
			
		||||
 | 
			
		||||
func getAttachmentUrl(for identifier: String) -> String {
 | 
			
		||||
    let serverBaseUrl = "https://nt.solian.app"
 | 
			
		||||
    let serverBaseUrl = "https://api.solian.app"
 | 
			
		||||
    
 | 
			
		||||
    return identifier.starts(with: "http") ? identifier : "\(serverBaseUrl)/files/\(identifier)"
 | 
			
		||||
    return identifier.starts(with: "http") ? identifier : "\(serverBaseUrl)/drive/files/\(identifier)"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,484 +0,0 @@
 | 
			
		||||
import 'package:dio/dio.dart';
 | 
			
		||||
import 'package:island/database/drift_db.dart';
 | 
			
		||||
import 'package:island/database/message.dart';
 | 
			
		||||
import 'package:island/models/chat.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/services/file.dart';
 | 
			
		||||
import 'package:island/widgets/alert.dart';
 | 
			
		||||
import 'package:uuid/uuid.dart';
 | 
			
		||||
 | 
			
		||||
class MessageRepository {
 | 
			
		||||
  final SnChatRoom room;
 | 
			
		||||
  final SnChatMember identity;
 | 
			
		||||
  final Dio _apiClient;
 | 
			
		||||
  final AppDatabase _database;
 | 
			
		||||
 | 
			
		||||
  final Map<String, LocalChatMessage> pendingMessages = {};
 | 
			
		||||
  final Map<String, Map<int, double>> fileUploadProgress = {};
 | 
			
		||||
  int? _totalCount;
 | 
			
		||||
 | 
			
		||||
  MessageRepository(this.room, this.identity, this._apiClient, this._database);
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage?> getLastMessages() async {
 | 
			
		||||
    final dbMessages = await _database.getMessagesForRoom(
 | 
			
		||||
      room.id,
 | 
			
		||||
      offset: 0,
 | 
			
		||||
      limit: 1,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (dbMessages.isEmpty) {
 | 
			
		||||
      return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return _database.companionToMessage(dbMessages.first);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<bool> syncMessages() async {
 | 
			
		||||
    final lastMessage = await getLastMessages();
 | 
			
		||||
    if (lastMessage == null) return false;
 | 
			
		||||
    try {
 | 
			
		||||
      final resp = await _apiClient.post(
 | 
			
		||||
        '/chat/${room.id}/sync',
 | 
			
		||||
        data: {
 | 
			
		||||
          'last_sync_timestamp':
 | 
			
		||||
              lastMessage.toRemoteMessage().updatedAt.millisecondsSinceEpoch,
 | 
			
		||||
        },
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      final response = MessageSyncResponse.fromJson(resp.data);
 | 
			
		||||
      for (final change in response.changes) {
 | 
			
		||||
        switch (change.action) {
 | 
			
		||||
          case MessageChangeAction.create:
 | 
			
		||||
            await receiveMessage(change.message!);
 | 
			
		||||
            break;
 | 
			
		||||
          case MessageChangeAction.update:
 | 
			
		||||
            await receiveMessageUpdate(change.message!);
 | 
			
		||||
            break;
 | 
			
		||||
          case MessageChangeAction.delete:
 | 
			
		||||
            await receiveMessageDeletion(change.messageId.toString());
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      showErrorAlert(err);
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<LocalChatMessage>> listMessages({
 | 
			
		||||
    int offset = 0,
 | 
			
		||||
    int take = 20,
 | 
			
		||||
    bool synced = false,
 | 
			
		||||
  }) async {
 | 
			
		||||
    try {
 | 
			
		||||
      // For initial load, fetch latest messages in the background to sync.
 | 
			
		||||
      if (offset == 0 && !synced) {
 | 
			
		||||
        // Not awaiting this is intentional, for a quicker UI response.
 | 
			
		||||
        // The UI should rely on a stream from the database to get updates.
 | 
			
		||||
        _fetchAndCacheMessages(room.id, offset: 0, take: take).catchError((_) {
 | 
			
		||||
          // Best effort, errors will be handled by later fetches.
 | 
			
		||||
          return <LocalChatMessage>[];
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      final localMessages = await _getCachedMessages(
 | 
			
		||||
        room.id,
 | 
			
		||||
        offset: offset,
 | 
			
		||||
        take: take,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // If local cache has messages, return them. This is the common case for scrolling up.
 | 
			
		||||
      if (localMessages.isNotEmpty) {
 | 
			
		||||
        return localMessages;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // If local cache is empty, we've probably reached the end of cached history.
 | 
			
		||||
      // Fetch from remote. This will also be hit on first load if cache is empty.
 | 
			
		||||
      return await _fetchAndCacheMessages(room.id, offset: offset, take: take);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      // Final fallback to cache in case of network errors during fetch.
 | 
			
		||||
      final localMessages = await _getCachedMessages(
 | 
			
		||||
        room.id,
 | 
			
		||||
        offset: offset,
 | 
			
		||||
        take: take,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      if (localMessages.isNotEmpty) {
 | 
			
		||||
        return localMessages;
 | 
			
		||||
      }
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<LocalChatMessage>> _getCachedMessages(
 | 
			
		||||
    String roomId, {
 | 
			
		||||
    int offset = 0,
 | 
			
		||||
    int take = 20,
 | 
			
		||||
  }) async {
 | 
			
		||||
    // Get messages from local database
 | 
			
		||||
    final dbMessages = await _database.getMessagesForRoom(
 | 
			
		||||
      roomId,
 | 
			
		||||
      offset: offset,
 | 
			
		||||
      limit: take,
 | 
			
		||||
    );
 | 
			
		||||
    final dbLocalMessages =
 | 
			
		||||
        dbMessages.map(_database.companionToMessage).toList();
 | 
			
		||||
 | 
			
		||||
    // Combine with pending messages for the first page
 | 
			
		||||
    if (offset == 0) {
 | 
			
		||||
      final pendingForRoom =
 | 
			
		||||
          pendingMessages.values.where((msg) => msg.roomId == roomId).toList();
 | 
			
		||||
 | 
			
		||||
      final allMessages = [...pendingForRoom, ...dbLocalMessages];
 | 
			
		||||
      allMessages.sort((a, b) => b.createdAt.compareTo(a.createdAt));
 | 
			
		||||
 | 
			
		||||
      // Remove duplicates by ID, preserving the order
 | 
			
		||||
      final uniqueMessages = <LocalChatMessage>[];
 | 
			
		||||
      final seenIds = <String>{};
 | 
			
		||||
      for (final message in allMessages) {
 | 
			
		||||
        if (seenIds.add(message.id)) {
 | 
			
		||||
          uniqueMessages.add(message);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      return uniqueMessages;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return dbLocalMessages;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<LocalChatMessage>> _fetchAndCacheMessages(
 | 
			
		||||
    String roomId, {
 | 
			
		||||
    int offset = 0,
 | 
			
		||||
    int take = 20,
 | 
			
		||||
  }) async {
 | 
			
		||||
    // Use cached total count if available, otherwise fetch it
 | 
			
		||||
    if (_totalCount == null) {
 | 
			
		||||
      final response = await _apiClient.get(
 | 
			
		||||
        '/chat/$roomId/messages',
 | 
			
		||||
        queryParameters: {'offset': 0, 'take': 1},
 | 
			
		||||
      );
 | 
			
		||||
      _totalCount = int.parse(response.headers['x-total']?.firstOrNull ?? '0');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (offset >= _totalCount!) {
 | 
			
		||||
      return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    final response = await _apiClient.get(
 | 
			
		||||
      '/chat/$roomId/messages',
 | 
			
		||||
      queryParameters: {'offset': offset, 'take': take},
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    final List<dynamic> data = response.data;
 | 
			
		||||
    // Update total count from response headers
 | 
			
		||||
    _totalCount = int.parse(response.headers['x-total']?.firstOrNull ?? '0');
 | 
			
		||||
 | 
			
		||||
    final messages =
 | 
			
		||||
        data.map((json) {
 | 
			
		||||
          final remoteMessage = SnChatMessage.fromJson(json);
 | 
			
		||||
          return LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
            remoteMessage,
 | 
			
		||||
            MessageStatus.sent,
 | 
			
		||||
          );
 | 
			
		||||
        }).toList();
 | 
			
		||||
 | 
			
		||||
    for (final message in messages) {
 | 
			
		||||
      await _database.saveMessage(_database.messageToCompanion(message));
 | 
			
		||||
      if (message.nonce != null) {
 | 
			
		||||
        pendingMessages.removeWhere(
 | 
			
		||||
          (_, pendingMsg) => pendingMsg.nonce == message.nonce,
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return messages;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage> sendMessage(
 | 
			
		||||
    String token,
 | 
			
		||||
    String baseUrl,
 | 
			
		||||
    String roomId,
 | 
			
		||||
    String content,
 | 
			
		||||
    String nonce, {
 | 
			
		||||
    required List<UniversalFile> attachments,
 | 
			
		||||
    Map<String, dynamic>? meta,
 | 
			
		||||
    SnChatMessage? replyingTo,
 | 
			
		||||
    SnChatMessage? forwardingTo,
 | 
			
		||||
    SnChatMessage? editingTo,
 | 
			
		||||
    Function(LocalChatMessage)? onPending,
 | 
			
		||||
    Function(String, Map<int, double>)? onProgress,
 | 
			
		||||
  }) async {
 | 
			
		||||
    // Generate a unique nonce for this message
 | 
			
		||||
    final nonce = const Uuid().v4();
 | 
			
		||||
 | 
			
		||||
    // Create a local message with pending status
 | 
			
		||||
    final mockMessage = SnChatMessage(
 | 
			
		||||
      id: 'pending_$nonce',
 | 
			
		||||
      chatRoomId: roomId,
 | 
			
		||||
      senderId: identity.id,
 | 
			
		||||
      content: content,
 | 
			
		||||
      createdAt: DateTime.now(),
 | 
			
		||||
      updatedAt: DateTime.now(),
 | 
			
		||||
      nonce: nonce,
 | 
			
		||||
      sender: identity,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    final localMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
      mockMessage,
 | 
			
		||||
      MessageStatus.pending,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Store in memory and database
 | 
			
		||||
    pendingMessages[localMessage.id] = localMessage;
 | 
			
		||||
    fileUploadProgress[localMessage.id] = {};
 | 
			
		||||
    await _database.saveMessage(_database.messageToCompanion(localMessage));
 | 
			
		||||
    onPending?.call(localMessage);
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      var cloudAttachments = List.empty(growable: true);
 | 
			
		||||
      // Upload files
 | 
			
		||||
      for (var idx = 0; idx < attachments.length; idx++) {
 | 
			
		||||
        final cloudFile =
 | 
			
		||||
            await putMediaToCloud(
 | 
			
		||||
              fileData: attachments[idx],
 | 
			
		||||
              atk: token,
 | 
			
		||||
              baseUrl: baseUrl,
 | 
			
		||||
              filename: attachments[idx].data.name ?? 'Post media',
 | 
			
		||||
              mimetype:
 | 
			
		||||
                  attachments[idx].data.mimeType ??
 | 
			
		||||
                  switch (attachments[idx].type) {
 | 
			
		||||
                    UniversalFileType.image => 'image/unknown',
 | 
			
		||||
                    UniversalFileType.video => 'video/unknown',
 | 
			
		||||
                    UniversalFileType.audio => 'audio/unknown',
 | 
			
		||||
                    UniversalFileType.file => 'application/octet-stream',
 | 
			
		||||
                  },
 | 
			
		||||
              onProgress: (progress, _) {
 | 
			
		||||
                fileUploadProgress[localMessage.id]?[idx] = progress;
 | 
			
		||||
                onProgress?.call(
 | 
			
		||||
                  localMessage.id,
 | 
			
		||||
                  fileUploadProgress[localMessage.id] ?? {},
 | 
			
		||||
                );
 | 
			
		||||
              },
 | 
			
		||||
            ).future;
 | 
			
		||||
        if (cloudFile == null) {
 | 
			
		||||
          throw ArgumentError('Failed to upload the file...');
 | 
			
		||||
        }
 | 
			
		||||
        cloudAttachments.add(cloudFile);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Send to server
 | 
			
		||||
      final response = await _apiClient.request(
 | 
			
		||||
        editingTo == null
 | 
			
		||||
            ? '/chat/$roomId/messages'
 | 
			
		||||
            : '/chat/$roomId/messages/${editingTo.id}',
 | 
			
		||||
        data: {
 | 
			
		||||
          'content': content,
 | 
			
		||||
          'attachments_id': cloudAttachments.map((e) => e.id).toList(),
 | 
			
		||||
          'replied_message_id': replyingTo?.id,
 | 
			
		||||
          'forwarded_message_id': forwardingTo?.id,
 | 
			
		||||
          'meta': meta,
 | 
			
		||||
          'nonce': nonce,
 | 
			
		||||
        },
 | 
			
		||||
        options: Options(method: editingTo == null ? 'POST' : 'PATCH'),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Update with server response
 | 
			
		||||
      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
			
		||||
      final updatedMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
        remoteMessage,
 | 
			
		||||
        MessageStatus.sent,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Remove from pending and update in database
 | 
			
		||||
      pendingMessages.remove(localMessage.id);
 | 
			
		||||
      await _database.deleteMessage(localMessage.id);
 | 
			
		||||
      await _database.saveMessage(_database.messageToCompanion(updatedMessage));
 | 
			
		||||
 | 
			
		||||
      return updatedMessage;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      // Update status to failed
 | 
			
		||||
      localMessage.status = MessageStatus.failed;
 | 
			
		||||
      pendingMessages[localMessage.id] = localMessage;
 | 
			
		||||
      await _database.updateMessageStatus(
 | 
			
		||||
        localMessage.id,
 | 
			
		||||
        MessageStatus.failed,
 | 
			
		||||
      );
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage> retryMessage(String pendingMessageId) async {
 | 
			
		||||
    final message = await getMessageById(pendingMessageId);
 | 
			
		||||
    if (message == null) {
 | 
			
		||||
      throw Exception('Message not found');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Update status back to pending
 | 
			
		||||
    message.status = MessageStatus.pending;
 | 
			
		||||
    pendingMessages[pendingMessageId] = message;
 | 
			
		||||
    await _database.updateMessageStatus(
 | 
			
		||||
      pendingMessageId,
 | 
			
		||||
      MessageStatus.pending,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      // Send to server
 | 
			
		||||
      var remoteMessage = message.toRemoteMessage();
 | 
			
		||||
      final response = await _apiClient.post(
 | 
			
		||||
        '/chat/${message.roomId}/messages',
 | 
			
		||||
        data: {
 | 
			
		||||
          'content': remoteMessage.content,
 | 
			
		||||
          'attachments_id': remoteMessage.attachments,
 | 
			
		||||
          'meta': remoteMessage.meta,
 | 
			
		||||
          'nonce': message.nonce,
 | 
			
		||||
        },
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Update with server response
 | 
			
		||||
      remoteMessage = SnChatMessage.fromJson(response.data);
 | 
			
		||||
      final updatedMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
        remoteMessage,
 | 
			
		||||
        MessageStatus.sent,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Remove from pending and update in database
 | 
			
		||||
      pendingMessages.remove(pendingMessageId);
 | 
			
		||||
      await _database.deleteMessage(pendingMessageId);
 | 
			
		||||
      await _database.saveMessage(_database.messageToCompanion(updatedMessage));
 | 
			
		||||
 | 
			
		||||
      return updatedMessage;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      // Update status to failed
 | 
			
		||||
      message.status = MessageStatus.failed;
 | 
			
		||||
      pendingMessages[pendingMessageId] = message;
 | 
			
		||||
      await _database.updateMessageStatus(
 | 
			
		||||
        pendingMessageId,
 | 
			
		||||
        MessageStatus.failed,
 | 
			
		||||
      );
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage> receiveMessage(SnChatMessage remoteMessage) async {
 | 
			
		||||
    final localMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
      remoteMessage,
 | 
			
		||||
      MessageStatus.sent,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (remoteMessage.nonce != null) {
 | 
			
		||||
      pendingMessages.removeWhere(
 | 
			
		||||
        (_, pendingMsg) => pendingMsg.nonce == remoteMessage.nonce,
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    await _database.saveMessage(_database.messageToCompanion(localMessage));
 | 
			
		||||
    return localMessage;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage> receiveMessageUpdate(
 | 
			
		||||
    SnChatMessage remoteMessage,
 | 
			
		||||
  ) async {
 | 
			
		||||
    final localMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
      remoteMessage,
 | 
			
		||||
      MessageStatus.sent,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    await _database.updateMessage(_database.messageToCompanion(localMessage));
 | 
			
		||||
    return localMessage;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> receiveMessageDeletion(String messageId) async {
 | 
			
		||||
    // Remove from pending messages if exists
 | 
			
		||||
    pendingMessages.remove(messageId);
 | 
			
		||||
 | 
			
		||||
    // Delete from local database
 | 
			
		||||
    await _database.deleteMessage(messageId);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage> updateMessage(
 | 
			
		||||
    String messageId,
 | 
			
		||||
    String content, {
 | 
			
		||||
    List<SnCloudFile>? attachments,
 | 
			
		||||
    Map<String, dynamic>? meta,
 | 
			
		||||
  }) async {
 | 
			
		||||
    final message = pendingMessages[messageId];
 | 
			
		||||
    if (message != null) {
 | 
			
		||||
      // Update pending message
 | 
			
		||||
      final rmMessage = message.toRemoteMessage();
 | 
			
		||||
      final updatedRemoteMessage = rmMessage.copyWith(
 | 
			
		||||
        content: content,
 | 
			
		||||
        meta: meta ?? rmMessage.meta,
 | 
			
		||||
      );
 | 
			
		||||
      final updatedLocalMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
        updatedRemoteMessage,
 | 
			
		||||
        MessageStatus.pending,
 | 
			
		||||
      );
 | 
			
		||||
      pendingMessages[messageId] = updatedLocalMessage;
 | 
			
		||||
      await _database.updateMessage(
 | 
			
		||||
        _database.messageToCompanion(updatedLocalMessage),
 | 
			
		||||
      );
 | 
			
		||||
      return message;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      // Update on server
 | 
			
		||||
      final response = await _apiClient.put(
 | 
			
		||||
        '/chat/${room.id}/messages/$messageId',
 | 
			
		||||
        data: {'content': content, 'attachments': attachments, 'meta': meta},
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Update local copy
 | 
			
		||||
      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
			
		||||
      final updatedMessage = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
        remoteMessage,
 | 
			
		||||
        MessageStatus.sent,
 | 
			
		||||
      );
 | 
			
		||||
      await _database.updateMessage(
 | 
			
		||||
        _database.messageToCompanion(updatedMessage),
 | 
			
		||||
      );
 | 
			
		||||
      return updatedMessage;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> deleteMessage(String messageId) async {
 | 
			
		||||
    try {
 | 
			
		||||
      await _apiClient.delete('/chat/${room.id}/messages/$messageId');
 | 
			
		||||
      pendingMessages.remove(messageId);
 | 
			
		||||
      await _database.deleteMessage(messageId);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<LocalChatMessage?> getMessageById(String messageId) async {
 | 
			
		||||
    try {
 | 
			
		||||
      // Attempt to get the message from the local database
 | 
			
		||||
      final localMessage =
 | 
			
		||||
          await (_database.select(_database.chatMessages)
 | 
			
		||||
            ..where((tbl) => tbl.id.equals(messageId))).getSingleOrNull();
 | 
			
		||||
      if (localMessage != null) {
 | 
			
		||||
        return _database.companionToMessage(localMessage);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // If not found locally, fetch from the server
 | 
			
		||||
      final response = await _apiClient.get(
 | 
			
		||||
        '/chat/${room.id}/messages/$messageId',
 | 
			
		||||
      );
 | 
			
		||||
      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
			
		||||
      final message = LocalChatMessage.fromRemoteMessage(
 | 
			
		||||
        remoteMessage,
 | 
			
		||||
        MessageStatus.sent,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Save the fetched message to the local database
 | 
			
		||||
      await _database.saveMessage(_database.messageToCompanion(message));
 | 
			
		||||
      return message;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      if (e is DioException) return null;
 | 
			
		||||
      // Handle errors
 | 
			
		||||
      rethrow;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -29,10 +29,7 @@ class DefaultFirebaseOptions {
 | 
			
		||||
      case TargetPlatform.windows:
 | 
			
		||||
        return windows;
 | 
			
		||||
      case TargetPlatform.linux:
 | 
			
		||||
        throw UnsupportedError(
 | 
			
		||||
          'DefaultFirebaseOptions have not been configured for linux - '
 | 
			
		||||
          'you can reconfigure this by running the FlutterFire CLI again.',
 | 
			
		||||
        );
 | 
			
		||||
        return windows;
 | 
			
		||||
      default:
 | 
			
		||||
        throw UnsupportedError(
 | 
			
		||||
          'DefaultFirebaseOptions are not supported for this platform.',
 | 
			
		||||
@@ -41,13 +38,13 @@ class DefaultFirebaseOptions {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static const FirebaseOptions web = FirebaseOptions(
 | 
			
		||||
    apiKey: 'AIzaSyBKfIQpTouj5rXnlzkEieSlbAzepm4mgJE',
 | 
			
		||||
    appId: '1:961776991058:web:b91d12f2892a5609f4188b',
 | 
			
		||||
    apiKey: 'AIzaSyCfgOdlcr7h8x8j0WKx_S2wXnGkOopq320',
 | 
			
		||||
    appId: '1:961776991058:web:3a912c0eb14028e5f4188b',
 | 
			
		||||
    messagingSenderId: '961776991058',
 | 
			
		||||
    projectId: 'solian-0x001',
 | 
			
		||||
    authDomain: 'solian-0x001.firebaseapp.com',
 | 
			
		||||
    storageBucket: 'solian-0x001.firebasestorage.app',
 | 
			
		||||
    measurementId: 'G-XY3HHKG0PE',
 | 
			
		||||
    measurementId: 'G-JD1YEG9D6F',
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  static const FirebaseOptions android = FirebaseOptions(
 | 
			
		||||
@@ -64,6 +61,8 @@ class DefaultFirebaseOptions {
 | 
			
		||||
    messagingSenderId: '961776991058',
 | 
			
		||||
    projectId: 'solian-0x001',
 | 
			
		||||
    storageBucket: 'solian-0x001.firebasestorage.app',
 | 
			
		||||
    androidClientId: '961776991058-r4iv9qoio57ul7utbfpgfrda2etvtch8.apps.googleusercontent.com',
 | 
			
		||||
    iosClientId: '961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com',
 | 
			
		||||
    iosBundleId: 'dev.solsynth.solian',
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@@ -73,6 +72,8 @@ class DefaultFirebaseOptions {
 | 
			
		||||
    messagingSenderId: '961776991058',
 | 
			
		||||
    projectId: 'solian-0x001',
 | 
			
		||||
    storageBucket: 'solian-0x001.firebasestorage.app',
 | 
			
		||||
    androidClientId: '961776991058-r4iv9qoio57ul7utbfpgfrda2etvtch8.apps.googleusercontent.com',
 | 
			
		||||
    iosClientId: '961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com',
 | 
			
		||||
    iosBundleId: 'dev.solsynth.solian',
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import 'dart:io';
 | 
			
		||||
import 'package:croppy/croppy.dart';
 | 
			
		||||
import 'package:easy_localization/easy_localization.dart' hide TextDirection;
 | 
			
		||||
import 'package:firebase_core/firebase_core.dart';
 | 
			
		||||
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
 | 
			
		||||
import 'package:firebase_messaging/firebase_messaging.dart';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@@ -20,7 +21,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 +30,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,11 +52,29 @@ void main() async {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    await langdetect.initLangDetect();
 | 
			
		||||
    await EasyLocalization.ensureInitialized();
 | 
			
		||||
    await Firebase.initializeApp(
 | 
			
		||||
      options: DefaultFirebaseOptions.currentPlatform,
 | 
			
		||||
    );
 | 
			
		||||
    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
 | 
			
		||||
 | 
			
		||||
    if (kIsWeb || !Platform.isLinux) {
 | 
			
		||||
      await Firebase.initializeApp(
 | 
			
		||||
        options: DefaultFirebaseOptions.currentPlatform,
 | 
			
		||||
      );
 | 
			
		||||
      FirebaseMessaging.onBackgroundMessage(
 | 
			
		||||
        _firebaseMessagingBackgroundHandler,
 | 
			
		||||
      );
 | 
			
		||||
      // Although previous if case checked this. Still check is web or not
 | 
			
		||||
      // Otherwise the web platform will broke due to there is no Platform api on the web
 | 
			
		||||
      // Skip crashlytics setup on debug mode to prevent unexpected report to firebase
 | 
			
		||||
      if ((kIsWeb || !Platform.isWindows) && !kDebugMode) {
 | 
			
		||||
        FlutterError.onError =
 | 
			
		||||
            FirebaseCrashlytics.instance.recordFlutterFatalError;
 | 
			
		||||
        PlatformDispatcher.instance.onError = (error, stack) {
 | 
			
		||||
          FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
 | 
			
		||||
          return true;
 | 
			
		||||
        };
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    log("[SplashScreen] Firebase is ready!");
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    showErrorAlert(err);
 | 
			
		||||
@@ -164,6 +183,9 @@ class IslandApp extends HookConsumerWidget {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    useEffect(() {
 | 
			
		||||
      if (!kIsWeb && Platform.isLinux) {
 | 
			
		||||
        return null;
 | 
			
		||||
      }
 | 
			
		||||
      const channel = MethodChannel('dev.solsynth.solian/notifications');
 | 
			
		||||
 | 
			
		||||
      Future<void> handleInitialLink() async {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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,9 +1,10 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/auth.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/wallet.dart';
 | 
			
		||||
 | 
			
		||||
part 'user.freezed.dart';
 | 
			
		||||
part 'user.g.dart';
 | 
			
		||||
part 'account.freezed.dart';
 | 
			
		||||
part 'account.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAccount with _$SnAccount {
 | 
			
		||||
@@ -14,6 +15,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,
 | 
			
		||||
@@ -24,6 +26,32 @@ sealed class SnAccount with _$SnAccount {
 | 
			
		||||
      _$SnAccountFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class ProfileLink with _$ProfileLink {
 | 
			
		||||
  const factory ProfileLink({required String name, required String url}) =
 | 
			
		||||
      _ProfileLink;
 | 
			
		||||
 | 
			
		||||
  factory ProfileLink.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$ProfileLinkFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ProfileLinkConverter
 | 
			
		||||
    implements JsonConverter<List<ProfileLink>, dynamic> {
 | 
			
		||||
  const ProfileLinkConverter();
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  List<ProfileLink> fromJson(dynamic json) {
 | 
			
		||||
    return json is List<dynamic>
 | 
			
		||||
        ? json.map((e) => ProfileLink.fromJson(e)).cast<ProfileLink>().toList()
 | 
			
		||||
        : <ProfileLink>[];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  List<dynamic> toJson(List<ProfileLink> object) {
 | 
			
		||||
    return object.map((e) => e.toJson()).toList();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAccountProfile with _$SnAccountProfile {
 | 
			
		||||
  const factory SnAccountProfile({
 | 
			
		||||
@@ -37,6 +65,7 @@ sealed class SnAccountProfile with _$SnAccountProfile {
 | 
			
		||||
    @Default('') String location,
 | 
			
		||||
    @Default('') String timeZone,
 | 
			
		||||
    DateTime? birthday,
 | 
			
		||||
    @ProfileLinkConverter() @Default([]) List<ProfileLink> links,
 | 
			
		||||
    DateTime? lastSeenAt,
 | 
			
		||||
    SnAccountBadge? activeBadge,
 | 
			
		||||
    required int experience,
 | 
			
		||||
@@ -45,7 +74,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,
 | 
			
		||||
@@ -147,3 +175,36 @@ sealed class SnVerificationMark with _$SnVerificationMark {
 | 
			
		||||
  factory SnVerificationMark.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnVerificationMarkFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAuthDevice with _$SnAuthDevice {
 | 
			
		||||
  const factory SnAuthDevice({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String deviceId,
 | 
			
		||||
    required String deviceName,
 | 
			
		||||
    required String? deviceLabel,
 | 
			
		||||
    required String accountId,
 | 
			
		||||
    required int platform,
 | 
			
		||||
    @Default(false) bool isCurrent,
 | 
			
		||||
  }) = _SnAuthDevice;
 | 
			
		||||
 | 
			
		||||
  factory SnAuthDevice.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnAuthDeviceFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAuthDeviceWithChallenge with _$SnAuthDeviceWithChallenge {
 | 
			
		||||
  const factory SnAuthDeviceWithChallenge({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String deviceId,
 | 
			
		||||
    required String deviceName,
 | 
			
		||||
    required String? deviceLabel,
 | 
			
		||||
    required String accountId,
 | 
			
		||||
    required int platform,
 | 
			
		||||
    required List<SnAuthChallenge> challenges,
 | 
			
		||||
    @Default(false) bool isCurrent,
 | 
			
		||||
  }) = _SnAuthDeviceWithChallengee;
 | 
			
		||||
 | 
			
		||||
  factory SnAuthDeviceWithChallenge.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnAuthDeviceWithChallengeFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3023
									
								
								lib/models/account.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3023
									
								
								lib/models/account.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
			
		||||
 | 
			
		||||
part of 'user.dart';
 | 
			
		||||
part of 'account.dart';
 | 
			
		||||
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
@@ -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,12 +40,19 @@ 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(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_ProfileLink _$ProfileLinkFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _ProfileLink(name: json['name'] as String, url: json['url'] as String);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$ProfileLinkToJson(_ProfileLink instance) =>
 | 
			
		||||
    <String, dynamic>{'name': instance.name, 'url': instance.url};
 | 
			
		||||
 | 
			
		||||
_SnAccountProfile _$SnAccountProfileFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnAccountProfile(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
@@ -55,6 +68,10 @@ _SnAccountProfile _$SnAccountProfileFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
          json['birthday'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['birthday'] as String),
 | 
			
		||||
      links:
 | 
			
		||||
          json['links'] == null
 | 
			
		||||
              ? const []
 | 
			
		||||
              : const ProfileLinkConverter().fromJson(json['links']),
 | 
			
		||||
      lastSeenAt:
 | 
			
		||||
          json['last_seen_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
@@ -84,12 +101,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:
 | 
			
		||||
@@ -110,6 +121,7 @@ Map<String, dynamic> _$SnAccountProfileToJson(_SnAccountProfile instance) =>
 | 
			
		||||
      'location': instance.location,
 | 
			
		||||
      'time_zone': instance.timeZone,
 | 
			
		||||
      'birthday': instance.birthday?.toIso8601String(),
 | 
			
		||||
      'links': const ProfileLinkConverter().toJson(instance.links),
 | 
			
		||||
      'last_seen_at': instance.lastSeenAt?.toIso8601String(),
 | 
			
		||||
      'active_badge': instance.activeBadge?.toJson(),
 | 
			
		||||
      'experience': instance.experience,
 | 
			
		||||
@@ -118,7 +130,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(),
 | 
			
		||||
@@ -286,3 +297,54 @@ Map<String, dynamic> _$SnVerificationMarkToJson(_SnVerificationMark instance) =>
 | 
			
		||||
      'description': instance.description,
 | 
			
		||||
      'verified_by': instance.verifiedBy,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnAuthDevice _$SnAuthDeviceFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnAuthDevice(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      deviceId: json['device_id'] as String,
 | 
			
		||||
      deviceName: json['device_name'] as String,
 | 
			
		||||
      deviceLabel: json['device_label'] as String?,
 | 
			
		||||
      accountId: json['account_id'] as String,
 | 
			
		||||
      platform: (json['platform'] as num).toInt(),
 | 
			
		||||
      isCurrent: json['is_current'] as bool? ?? false,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnAuthDeviceToJson(_SnAuthDevice instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'device_id': instance.deviceId,
 | 
			
		||||
      'device_name': instance.deviceName,
 | 
			
		||||
      'device_label': instance.deviceLabel,
 | 
			
		||||
      'account_id': instance.accountId,
 | 
			
		||||
      'platform': instance.platform,
 | 
			
		||||
      'is_current': instance.isCurrent,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnAuthDeviceWithChallengee _$SnAuthDeviceWithChallengeeFromJson(
 | 
			
		||||
  Map<String, dynamic> json,
 | 
			
		||||
) => _SnAuthDeviceWithChallengee(
 | 
			
		||||
  id: json['id'] as String,
 | 
			
		||||
  deviceId: json['device_id'] as String,
 | 
			
		||||
  deviceName: json['device_name'] as String,
 | 
			
		||||
  deviceLabel: json['device_label'] as String?,
 | 
			
		||||
  accountId: json['account_id'] as String,
 | 
			
		||||
  platform: (json['platform'] as num).toInt(),
 | 
			
		||||
  challenges:
 | 
			
		||||
      (json['challenges'] as List<dynamic>)
 | 
			
		||||
          .map((e) => SnAuthChallenge.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          .toList(),
 | 
			
		||||
  isCurrent: json['is_current'] as bool? ?? false,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnAuthDeviceWithChallengeeToJson(
 | 
			
		||||
  _SnAuthDeviceWithChallengee instance,
 | 
			
		||||
) => <String, dynamic>{
 | 
			
		||||
  'id': instance.id,
 | 
			
		||||
  'device_id': instance.deviceId,
 | 
			
		||||
  'device_name': instance.deviceName,
 | 
			
		||||
  'device_label': instance.deviceLabel,
 | 
			
		||||
  'account_id': instance.accountId,
 | 
			
		||||
  'platform': instance.platform,
 | 
			
		||||
  'challenges': instance.challenges.map((e) => e.toJson()).toList(),
 | 
			
		||||
  'is_current': instance.isCurrent,
 | 
			
		||||
};
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'activity.freezed.dart';
 | 
			
		||||
part 'activity.g.dart';
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,14 +19,12 @@ sealed class SnAuthChallenge with _$SnAuthChallenge {
 | 
			
		||||
    required int stepRemain,
 | 
			
		||||
    required int stepTotal,
 | 
			
		||||
    required int failedAttempts,
 | 
			
		||||
    required int platform,
 | 
			
		||||
    required int type,
 | 
			
		||||
    required List<String> blacklistFactors,
 | 
			
		||||
    required List<dynamic> audiences,
 | 
			
		||||
    required List<dynamic> scopes,
 | 
			
		||||
    required String ipAddress,
 | 
			
		||||
    required String userAgent,
 | 
			
		||||
    required String deviceId,
 | 
			
		||||
    required String? nonce,
 | 
			
		||||
    required String? location,
 | 
			
		||||
    required String accountId,
 | 
			
		||||
@@ -76,22 +74,6 @@ sealed class SnAuthFactor with _$SnAuthFactor {
 | 
			
		||||
      _$SnAuthFactorFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAuthDevice with _$SnAuthDevice {
 | 
			
		||||
  const factory SnAuthDevice({
 | 
			
		||||
    required dynamic label,
 | 
			
		||||
    required String userAgent,
 | 
			
		||||
    required String deviceId,
 | 
			
		||||
    required int platform,
 | 
			
		||||
    required List<SnAuthSession> sessions,
 | 
			
		||||
    // Not from backend, used for UI
 | 
			
		||||
    @Default(false) bool isCurrent,
 | 
			
		||||
  }) = _SnAuthDevice;
 | 
			
		||||
 | 
			
		||||
  factory SnAuthDevice.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnAuthDeviceFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnAccountConnection with _$SnAccountConnection {
 | 
			
		||||
  const factory SnAccountConnection({
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
@@ -149,7 +272,7 @@ as String,
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnAuthChallenge {
 | 
			
		||||
 | 
			
		||||
 String get id; DateTime get expiredAt; int get stepRemain; int get stepTotal; int get failedAttempts; int get platform; int get type; List<String> get blacklistFactors; List<dynamic> get audiences; List<dynamic> get scopes; String get ipAddress; String get userAgent; String get deviceId; String? get nonce; String? get location; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
 String get id; DateTime get expiredAt; int get stepRemain; int get stepTotal; int get failedAttempts; int get type; List<String> get blacklistFactors; List<dynamic> get audiences; List<dynamic> get scopes; String get ipAddress; String get userAgent; String? get nonce; String? get location; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
/// Create a copy of SnAuthChallenge
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -162,16 +285,16 @@ $SnAuthChallengeCopyWith<SnAuthChallenge> get copyWith => _$SnAuthChallengeCopyW
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthChallenge&&(identical(other.id, id) || other.id == id)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&(identical(other.stepRemain, stepRemain) || other.stepRemain == stepRemain)&&(identical(other.stepTotal, stepTotal) || other.stepTotal == stepTotal)&&(identical(other.failedAttempts, failedAttempts) || other.failedAttempts == failedAttempts)&&(identical(other.platform, platform) || other.platform == platform)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.blacklistFactors, blacklistFactors)&&const DeepCollectionEquality().equals(other.audiences, audiences)&&const DeepCollectionEquality().equals(other.scopes, scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.nonce, nonce) || other.nonce == nonce)&&(identical(other.location, location) || other.location == location)&&(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));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthChallenge&&(identical(other.id, id) || other.id == id)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&(identical(other.stepRemain, stepRemain) || other.stepRemain == stepRemain)&&(identical(other.stepTotal, stepTotal) || other.stepTotal == stepTotal)&&(identical(other.failedAttempts, failedAttempts) || other.failedAttempts == failedAttempts)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.blacklistFactors, blacklistFactors)&&const DeepCollectionEquality().equals(other.audiences, audiences)&&const DeepCollectionEquality().equals(other.scopes, scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.nonce, nonce) || other.nonce == nonce)&&(identical(other.location, location) || other.location == location)&&(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.hashAll([runtimeType,id,expiredAt,stepRemain,stepTotal,failedAttempts,platform,type,const DeepCollectionEquality().hash(blacklistFactors),const DeepCollectionEquality().hash(audiences),const DeepCollectionEquality().hash(scopes),ipAddress,userAgent,deviceId,nonce,location,accountId,createdAt,updatedAt,deletedAt]);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,expiredAt,stepRemain,stepTotal,failedAttempts,type,const DeepCollectionEquality().hash(blacklistFactors),const DeepCollectionEquality().hash(audiences),const DeepCollectionEquality().hash(scopes),ipAddress,userAgent,nonce,location,accountId,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAuthChallenge(id: $id, expiredAt: $expiredAt, stepRemain: $stepRemain, stepTotal: $stepTotal, failedAttempts: $failedAttempts, platform: $platform, type: $type, blacklistFactors: $blacklistFactors, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, deviceId: $deviceId, nonce: $nonce, location: $location, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnAuthChallenge(id: $id, expiredAt: $expiredAt, stepRemain: $stepRemain, stepTotal: $stepTotal, failedAttempts: $failedAttempts, type: $type, blacklistFactors: $blacklistFactors, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, nonce: $nonce, location: $location, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -182,7 +305,7 @@ abstract mixin class $SnAuthChallengeCopyWith<$Res>  {
 | 
			
		||||
  factory $SnAuthChallengeCopyWith(SnAuthChallenge value, $Res Function(SnAuthChallenge) _then) = _$SnAuthChallengeCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 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
 | 
			
		||||
 String id, DateTime expiredAt, int stepRemain, int stepTotal, int failedAttempts, int type, List<String> blacklistFactors, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, String? nonce, String? location, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -199,21 +322,19 @@ class _$SnAuthChallengeCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAuthChallenge
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? expiredAt = null,Object? stepRemain = null,Object? stepTotal = null,Object? failedAttempts = null,Object? platform = null,Object? type = null,Object? blacklistFactors = null,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? deviceId = null,Object? nonce = freezed,Object? location = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? expiredAt = null,Object? stepRemain = null,Object? stepTotal = null,Object? failedAttempts = null,Object? type = null,Object? blacklistFactors = null,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? nonce = freezed,Object? location = 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,expiredAt: null == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,stepRemain: null == stepRemain ? _self.stepRemain : stepRemain // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,stepTotal: null == stepTotal ? _self.stepTotal : stepTotal // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,failedAttempts: null == failedAttempts ? _self.failedAttempts : failedAttempts // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,blacklistFactors: null == blacklistFactors ? _self.blacklistFactors : blacklistFactors // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<String>,audiences: null == audiences ? _self.audiences : audiences // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,scopes: null == scopes ? _self.scopes : scopes // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,ipAddress: null == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,nonce: freezed == nonce ? _self.nonce : nonce // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,location: freezed == location ? _self.location : location // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -227,11 +348,135 @@ 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 type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  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.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_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 type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  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.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_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 type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  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.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnAuthChallenge implements SnAuthChallenge {
 | 
			
		||||
  const _SnAuthChallenge({required this.id, required this.expiredAt, required this.stepRemain, required this.stepTotal, required this.failedAttempts, required this.platform, required this.type, required final  List<String> blacklistFactors, required final  List<dynamic> audiences, required final  List<dynamic> scopes, required this.ipAddress, required this.userAgent, required this.deviceId, required this.nonce, required this.location, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt}): _blacklistFactors = blacklistFactors,_audiences = audiences,_scopes = scopes;
 | 
			
		||||
  const _SnAuthChallenge({required this.id, required this.expiredAt, required this.stepRemain, required this.stepTotal, required this.failedAttempts, required this.type, required final  List<String> blacklistFactors, required final  List<dynamic> audiences, required final  List<dynamic> scopes, required this.ipAddress, required this.userAgent, required this.nonce, required this.location, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt}): _blacklistFactors = blacklistFactors,_audiences = audiences,_scopes = scopes;
 | 
			
		||||
  factory _SnAuthChallenge.fromJson(Map<String, dynamic> json) => _$SnAuthChallengeFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@@ -239,7 +484,6 @@ class _SnAuthChallenge implements SnAuthChallenge {
 | 
			
		||||
@override final  int stepRemain;
 | 
			
		||||
@override final  int stepTotal;
 | 
			
		||||
@override final  int failedAttempts;
 | 
			
		||||
@override final  int platform;
 | 
			
		||||
@override final  int type;
 | 
			
		||||
 final  List<String> _blacklistFactors;
 | 
			
		||||
@override List<String> get blacklistFactors {
 | 
			
		||||
@@ -264,7 +508,6 @@ class _SnAuthChallenge implements SnAuthChallenge {
 | 
			
		||||
 | 
			
		||||
@override final  String ipAddress;
 | 
			
		||||
@override final  String userAgent;
 | 
			
		||||
@override final  String deviceId;
 | 
			
		||||
@override final  String? nonce;
 | 
			
		||||
@override final  String? location;
 | 
			
		||||
@override final  String accountId;
 | 
			
		||||
@@ -285,16 +528,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthChallenge&&(identical(other.id, id) || other.id == id)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&(identical(other.stepRemain, stepRemain) || other.stepRemain == stepRemain)&&(identical(other.stepTotal, stepTotal) || other.stepTotal == stepTotal)&&(identical(other.failedAttempts, failedAttempts) || other.failedAttempts == failedAttempts)&&(identical(other.platform, platform) || other.platform == platform)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._blacklistFactors, _blacklistFactors)&&const DeepCollectionEquality().equals(other._audiences, _audiences)&&const DeepCollectionEquality().equals(other._scopes, _scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.nonce, nonce) || other.nonce == nonce)&&(identical(other.location, location) || other.location == location)&&(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));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthChallenge&&(identical(other.id, id) || other.id == id)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&(identical(other.stepRemain, stepRemain) || other.stepRemain == stepRemain)&&(identical(other.stepTotal, stepTotal) || other.stepTotal == stepTotal)&&(identical(other.failedAttempts, failedAttempts) || other.failedAttempts == failedAttempts)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._blacklistFactors, _blacklistFactors)&&const DeepCollectionEquality().equals(other._audiences, _audiences)&&const DeepCollectionEquality().equals(other._scopes, _scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.nonce, nonce) || other.nonce == nonce)&&(identical(other.location, location) || other.location == location)&&(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.hashAll([runtimeType,id,expiredAt,stepRemain,stepTotal,failedAttempts,platform,type,const DeepCollectionEquality().hash(_blacklistFactors),const DeepCollectionEquality().hash(_audiences),const DeepCollectionEquality().hash(_scopes),ipAddress,userAgent,deviceId,nonce,location,accountId,createdAt,updatedAt,deletedAt]);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,expiredAt,stepRemain,stepTotal,failedAttempts,type,const DeepCollectionEquality().hash(_blacklistFactors),const DeepCollectionEquality().hash(_audiences),const DeepCollectionEquality().hash(_scopes),ipAddress,userAgent,nonce,location,accountId,createdAt,updatedAt,deletedAt);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAuthChallenge(id: $id, expiredAt: $expiredAt, stepRemain: $stepRemain, stepTotal: $stepTotal, failedAttempts: $failedAttempts, platform: $platform, type: $type, blacklistFactors: $blacklistFactors, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, deviceId: $deviceId, nonce: $nonce, location: $location, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnAuthChallenge(id: $id, expiredAt: $expiredAt, stepRemain: $stepRemain, stepTotal: $stepTotal, failedAttempts: $failedAttempts, type: $type, blacklistFactors: $blacklistFactors, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, nonce: $nonce, location: $location, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -305,7 +548,7 @@ abstract mixin class _$SnAuthChallengeCopyWith<$Res> implements $SnAuthChallenge
 | 
			
		||||
  factory _$SnAuthChallengeCopyWith(_SnAuthChallenge value, $Res Function(_SnAuthChallenge) _then) = __$SnAuthChallengeCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 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
 | 
			
		||||
 String id, DateTime expiredAt, int stepRemain, int stepTotal, int failedAttempts, int type, List<String> blacklistFactors, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, String? nonce, String? location, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -322,21 +565,19 @@ class __$SnAuthChallengeCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAuthChallenge
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? expiredAt = null,Object? stepRemain = null,Object? stepTotal = null,Object? failedAttempts = null,Object? platform = null,Object? type = null,Object? blacklistFactors = null,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? deviceId = null,Object? nonce = freezed,Object? location = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? expiredAt = null,Object? stepRemain = null,Object? stepTotal = null,Object? failedAttempts = null,Object? type = null,Object? blacklistFactors = null,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? nonce = freezed,Object? location = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
  return _then(_SnAuthChallenge(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,expiredAt: null == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime,stepRemain: null == stepRemain ? _self.stepRemain : stepRemain // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,stepTotal: null == stepTotal ? _self.stepTotal : stepTotal // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,failedAttempts: null == failedAttempts ? _self.failedAttempts : failedAttempts // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,blacklistFactors: null == blacklistFactors ? _self._blacklistFactors : blacklistFactors // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<String>,audiences: null == audiences ? _self._audiences : audiences // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,scopes: null == scopes ? _self._scopes : scopes // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,ipAddress: null == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,nonce: freezed == nonce ? _self.nonce : nonce // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,location: freezed == location ? _self.location : location // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -432,6 +673,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 +965,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()
 | 
			
		||||
 | 
			
		||||
@@ -694,162 +1183,6 @@ as Map<String, dynamic>?,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnAuthDevice {
 | 
			
		||||
 | 
			
		||||
 dynamic get label; String get userAgent; String get deviceId; int get platform; List<SnAuthSession> get sessions;// Not from backend, used for UI
 | 
			
		||||
 bool get isCurrent;
 | 
			
		||||
/// Create a copy of SnAuthDevice
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnAuthDeviceCopyWith<SnAuthDevice> get copyWith => _$SnAuthDeviceCopyWithImpl<SnAuthDevice>(this as SnAuthDevice, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this SnAuthDevice to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthDevice&&const DeepCollectionEquality().equals(other.label, label)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other.sessions, sessions)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(label),userAgent,deviceId,platform,const DeepCollectionEquality().hash(sessions),isCurrent);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAuthDevice(label: $label, userAgent: $userAgent, deviceId: $deviceId, platform: $platform, sessions: $sessions, isCurrent: $isCurrent)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $SnAuthDeviceCopyWith<$Res>  {
 | 
			
		||||
  factory $SnAuthDeviceCopyWith(SnAuthDevice value, $Res Function(SnAuthDevice) _then) = _$SnAuthDeviceCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 dynamic label, String userAgent, String deviceId, int platform, List<SnAuthSession> sessions, bool isCurrent
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$SnAuthDeviceCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnAuthDeviceCopyWith<$Res> {
 | 
			
		||||
  _$SnAuthDeviceCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final SnAuthDevice _self;
 | 
			
		||||
  final $Res Function(SnAuthDevice) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAuthDevice
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? label = freezed,Object? userAgent = null,Object? deviceId = null,Object? platform = null,Object? sessions = null,Object? isCurrent = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as dynamic,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,sessions: null == sessions ? _self.sessions : sessions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnAuthSession>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnAuthDevice implements SnAuthDevice {
 | 
			
		||||
  const _SnAuthDevice({required this.label, required this.userAgent, required this.deviceId, required this.platform, required final  List<SnAuthSession> sessions, this.isCurrent = false}): _sessions = sessions;
 | 
			
		||||
  factory _SnAuthDevice.fromJson(Map<String, dynamic> json) => _$SnAuthDeviceFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  dynamic label;
 | 
			
		||||
@override final  String userAgent;
 | 
			
		||||
@override final  String deviceId;
 | 
			
		||||
@override final  int platform;
 | 
			
		||||
 final  List<SnAuthSession> _sessions;
 | 
			
		||||
@override List<SnAuthSession> get sessions {
 | 
			
		||||
  if (_sessions is EqualUnmodifiableListView) return _sessions;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableListView(_sessions);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Not from backend, used for UI
 | 
			
		||||
@override@JsonKey() final  bool isCurrent;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAuthDevice
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$SnAuthDeviceCopyWith<_SnAuthDevice> get copyWith => __$SnAuthDeviceCopyWithImpl<_SnAuthDevice>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$SnAuthDeviceToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthDevice&&const DeepCollectionEquality().equals(other.label, label)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other._sessions, _sessions)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(label),userAgent,deviceId,platform,const DeepCollectionEquality().hash(_sessions),isCurrent);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnAuthDevice(label: $label, userAgent: $userAgent, deviceId: $deviceId, platform: $platform, sessions: $sessions, isCurrent: $isCurrent)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$SnAuthDeviceCopyWith<$Res> implements $SnAuthDeviceCopyWith<$Res> {
 | 
			
		||||
  factory _$SnAuthDeviceCopyWith(_SnAuthDevice value, $Res Function(_SnAuthDevice) _then) = __$SnAuthDeviceCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 dynamic label, String userAgent, String deviceId, int platform, List<SnAuthSession> sessions, bool isCurrent
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$SnAuthDeviceCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnAuthDeviceCopyWith<$Res> {
 | 
			
		||||
  __$SnAuthDeviceCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _SnAuthDevice _self;
 | 
			
		||||
  final $Res Function(_SnAuthDevice) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnAuthDevice
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? label = freezed,Object? userAgent = null,Object? deviceId = null,Object? platform = null,Object? sessions = null,Object? isCurrent = null,}) {
 | 
			
		||||
  return _then(_SnAuthDevice(
 | 
			
		||||
label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as dynamic,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,sessions: null == sessions ? _self._sessions : sessions // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnAuthSession>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as bool,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnAccountConnection {
 | 
			
		||||
 | 
			
		||||
@@ -921,6 +1254,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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ _SnAuthChallenge _$SnAuthChallengeFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      stepRemain: (json['step_remain'] as num).toInt(),
 | 
			
		||||
      stepTotal: (json['step_total'] as num).toInt(),
 | 
			
		||||
      failedAttempts: (json['failed_attempts'] as num).toInt(),
 | 
			
		||||
      platform: (json['platform'] as num).toInt(),
 | 
			
		||||
      type: (json['type'] as num).toInt(),
 | 
			
		||||
      blacklistFactors:
 | 
			
		||||
          (json['blacklist_factors'] as List<dynamic>)
 | 
			
		||||
@@ -30,7 +29,6 @@ _SnAuthChallenge _$SnAuthChallengeFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      scopes: json['scopes'] as List<dynamic>,
 | 
			
		||||
      ipAddress: json['ip_address'] as String,
 | 
			
		||||
      userAgent: json['user_agent'] as String,
 | 
			
		||||
      deviceId: json['device_id'] as String,
 | 
			
		||||
      nonce: json['nonce'] as String?,
 | 
			
		||||
      location: json['location'] as String?,
 | 
			
		||||
      accountId: json['account_id'] as String,
 | 
			
		||||
@@ -49,14 +47,12 @@ Map<String, dynamic> _$SnAuthChallengeToJson(_SnAuthChallenge instance) =>
 | 
			
		||||
      'step_remain': instance.stepRemain,
 | 
			
		||||
      'step_total': instance.stepTotal,
 | 
			
		||||
      'failed_attempts': instance.failedAttempts,
 | 
			
		||||
      'platform': instance.platform,
 | 
			
		||||
      'type': instance.type,
 | 
			
		||||
      'blacklist_factors': instance.blacklistFactors,
 | 
			
		||||
      'audiences': instance.audiences,
 | 
			
		||||
      'scopes': instance.scopes,
 | 
			
		||||
      'ip_address': instance.ipAddress,
 | 
			
		||||
      'user_agent': instance.userAgent,
 | 
			
		||||
      'device_id': instance.deviceId,
 | 
			
		||||
      'nonce': instance.nonce,
 | 
			
		||||
      'location': instance.location,
 | 
			
		||||
      'account_id': instance.accountId,
 | 
			
		||||
@@ -133,29 +129,6 @@ Map<String, dynamic> _$SnAuthFactorToJson(_SnAuthFactor instance) =>
 | 
			
		||||
      'created_response': instance.createdResponse,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnAuthDevice _$SnAuthDeviceFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnAuthDevice(
 | 
			
		||||
      label: json['label'],
 | 
			
		||||
      userAgent: json['user_agent'] as String,
 | 
			
		||||
      deviceId: json['device_id'] as String,
 | 
			
		||||
      platform: (json['platform'] as num).toInt(),
 | 
			
		||||
      sessions:
 | 
			
		||||
          (json['sessions'] as List<dynamic>)
 | 
			
		||||
              .map((e) => SnAuthSession.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
              .toList(),
 | 
			
		||||
      isCurrent: json['is_current'] as bool? ?? false,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnAuthDeviceToJson(_SnAuthDevice instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'label': instance.label,
 | 
			
		||||
      'user_agent': instance.userAgent,
 | 
			
		||||
      'device_id': instance.deviceId,
 | 
			
		||||
      'platform': instance.platform,
 | 
			
		||||
      'sessions': instance.sessions.map((e) => e.toJson()).toList(),
 | 
			
		||||
      'is_current': instance.isCurrent,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnAccountConnection _$SnAccountConnectionFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnAccountConnection(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/realm.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'chat.freezed.dart';
 | 
			
		||||
part 'chat.g.dart';
 | 
			
		||||
@@ -91,6 +91,7 @@ sealed class SnChatMember with _$SnChatMember {
 | 
			
		||||
    required DateTime? breakUntil,
 | 
			
		||||
    required DateTime? timeoutUntil,
 | 
			
		||||
    required bool isBot,
 | 
			
		||||
    required SnAccountStatus? status,
 | 
			
		||||
    // Frontend data
 | 
			
		||||
    DateTime? lastTyped,
 | 
			
		||||
  }) = _SnChatMember;
 | 
			
		||||
@@ -162,8 +163,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
											
										
									
								
							@@ -177,6 +177,12 @@ _SnChatMember _$SnChatMemberFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['timeout_until'] as String),
 | 
			
		||||
      isBot: json['is_bot'] as bool,
 | 
			
		||||
      status:
 | 
			
		||||
          json['status'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : SnAccountStatus.fromJson(
 | 
			
		||||
                json['status'] as Map<String, dynamic>,
 | 
			
		||||
              ),
 | 
			
		||||
      lastTyped:
 | 
			
		||||
          json['last_typed'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
@@ -200,6 +206,7 @@ Map<String, dynamic> _$SnChatMemberToJson(_SnChatMember instance) =>
 | 
			
		||||
      'break_until': instance.breakUntil?.toIso8601String(),
 | 
			
		||||
      'timeout_until': instance.timeoutUntil?.toIso8601String(),
 | 
			
		||||
      'is_bot': instance.isBot,
 | 
			
		||||
      'status': instance.status?.toJson(),
 | 
			
		||||
      'last_typed': instance.lastTyped?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@@ -285,11 +292,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 +299,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,6 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'custom_app.freezed.dart';
 | 
			
		||||
part 'custom_app.g.dart';
 | 
			
		||||
 
 | 
			
		||||
@@ -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,14 +1,26 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/publisher.dart';
 | 
			
		||||
 | 
			
		||||
part 'developer.freezed.dart';
 | 
			
		||||
part 'developer.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnDeveloper with _$SnDeveloper {
 | 
			
		||||
  const factory SnDeveloper({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String publisherId,
 | 
			
		||||
    SnPublisher? publisher,
 | 
			
		||||
  }) = _SnDeveloper;
 | 
			
		||||
 | 
			
		||||
  factory SnDeveloper.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnDeveloperFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class DeveloperStats with _$DeveloperStats {
 | 
			
		||||
  const factory DeveloperStats({
 | 
			
		||||
    @Default(0) int totalCustomApps,
 | 
			
		||||
  }) = _DeveloperStats;
 | 
			
		||||
  const factory DeveloperStats({@Default(0) int totalCustomApps}) =
 | 
			
		||||
      _DeveloperStats;
 | 
			
		||||
 | 
			
		||||
  factory DeveloperStats.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$DeveloperStatsFromJson(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
 | 
			
		||||
 | 
			
		||||
@@ -13,6 +12,293 @@ part of 'developer.dart';
 | 
			
		||||
// dart format off
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnDeveloper {
 | 
			
		||||
 | 
			
		||||
 String get id; String get publisherId; SnPublisher? get publisher;
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnDeveloperCopyWith<SnDeveloper> get copyWith => _$SnDeveloperCopyWithImpl<SnDeveloper>(this as SnDeveloper, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this SnDeveloper to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnDeveloper&&(identical(other.id, id) || other.id == id)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,publisherId,publisher);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnDeveloper(id: $id, publisherId: $publisherId, publisher: $publisher)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $SnDeveloperCopyWith<$Res>  {
 | 
			
		||||
  factory $SnDeveloperCopyWith(SnDeveloper value, $Res Function(SnDeveloper) _then) = _$SnDeveloperCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String publisherId, SnPublisher? publisher
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$SnPublisherCopyWith<$Res>? get publisher;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$SnDeveloperCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnDeveloperCopyWith<$Res> {
 | 
			
		||||
  _$SnDeveloperCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final SnDeveloper _self;
 | 
			
		||||
  final $Res Function(SnDeveloper) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? publisherId = null,Object? publisher = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPublisher?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnPublisherCopyWith<$Res>? get publisher {
 | 
			
		||||
    if (_self.publisher == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnPublisherCopyWith<$Res>(_self.publisher!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(publisher: value));
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnDeveloper].
 | 
			
		||||
extension SnDeveloperPatterns on SnDeveloper {
 | 
			
		||||
/// 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( _SnDeveloper value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper() 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( _SnDeveloper value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper():
 | 
			
		||||
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( _SnDeveloper value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper() 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 publisherId,  SnPublisher? publisher)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.publisherId,_that.publisher);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 publisherId,  SnPublisher? publisher)  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper():
 | 
			
		||||
return $default(_that.id,_that.publisherId,_that.publisher);}
 | 
			
		||||
}
 | 
			
		||||
/// 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 publisherId,  SnPublisher? publisher)?  $default,) {final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnDeveloper() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.publisherId,_that.publisher);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnDeveloper implements SnDeveloper {
 | 
			
		||||
  const _SnDeveloper({required this.id, required this.publisherId, this.publisher});
 | 
			
		||||
  factory _SnDeveloper.fromJson(Map<String, dynamic> json) => _$SnDeveloperFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@override final  String publisherId;
 | 
			
		||||
@override final  SnPublisher? publisher;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$SnDeveloperCopyWith<_SnDeveloper> get copyWith => __$SnDeveloperCopyWithImpl<_SnDeveloper>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$SnDeveloperToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnDeveloper&&(identical(other.id, id) || other.id == id)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,publisherId,publisher);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnDeveloper(id: $id, publisherId: $publisherId, publisher: $publisher)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$SnDeveloperCopyWith<$Res> implements $SnDeveloperCopyWith<$Res> {
 | 
			
		||||
  factory _$SnDeveloperCopyWith(_SnDeveloper value, $Res Function(_SnDeveloper) _then) = __$SnDeveloperCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String publisherId, SnPublisher? publisher
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override $SnPublisherCopyWith<$Res>? get publisher;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$SnDeveloperCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnDeveloperCopyWith<$Res> {
 | 
			
		||||
  __$SnDeveloperCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _SnDeveloper _self;
 | 
			
		||||
  final $Res Function(_SnDeveloper) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? publisherId = null,Object? publisher = freezed,}) {
 | 
			
		||||
  return _then(_SnDeveloper(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPublisher?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnDeveloper
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnPublisherCopyWith<$Res>? get publisher {
 | 
			
		||||
    if (_self.publisher == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnPublisherCopyWith<$Res>(_self.publisher!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(publisher: value));
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$DeveloperStats {
 | 
			
		||||
 | 
			
		||||
@@ -76,6 +362,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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,22 @@ part of 'developer.dart';
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_SnDeveloper _$SnDeveloperFromJson(Map<String, dynamic> json) => _SnDeveloper(
 | 
			
		||||
  id: json['id'] as String,
 | 
			
		||||
  publisherId: json['publisher_id'] as String,
 | 
			
		||||
  publisher:
 | 
			
		||||
      json['publisher'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnDeveloperToJson(_SnDeveloper instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'publisher_id': instance.publisherId,
 | 
			
		||||
      'publisher': instance.publisher?.toJson(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_DeveloperStats _$DeveloperStatsFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _DeveloperStats(
 | 
			
		||||
      totalCustomApps: (json['total_custom_apps'] as num?)?.toInt() ?? 0,
 | 
			
		||||
 
 | 
			
		||||
@@ -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({
 | 
			
		||||
@@ -30,8 +11,8 @@ sealed class SnScrappedLink with _$SnScrappedLink {
 | 
			
		||||
    required String title,
 | 
			
		||||
    required String? description,
 | 
			
		||||
    required String? imageUrl,
 | 
			
		||||
    required String faviconUrl,
 | 
			
		||||
    required String siteName,
 | 
			
		||||
    required String? faviconUrl,
 | 
			
		||||
    required String? siteName,
 | 
			
		||||
    required String? contentType,
 | 
			
		||||
    required String? author,
 | 
			
		||||
    required DateTime? publishedDate,
 | 
			
		||||
 
 | 
			
		||||
@@ -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,170 +12,10 @@ 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 {
 | 
			
		||||
 | 
			
		||||
 String get type; String get url; String get title; String? get description; String? get imageUrl; String get faviconUrl; String get siteName; String? get contentType; String? get author; DateTime? get publishedDate;
 | 
			
		||||
 String get type; String get url; String get title; String? get description; String? get imageUrl; String? get faviconUrl; String? get siteName; String? get contentType; String? get author; DateTime? get publishedDate;
 | 
			
		||||
/// Create a copy of SnScrappedLink
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -209,7 +48,7 @@ abstract mixin class $SnScrappedLinkCopyWith<$Res>  {
 | 
			
		||||
  factory $SnScrappedLinkCopyWith(SnScrappedLink value, $Res Function(SnScrappedLink) _then) = _$SnScrappedLinkCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String type, String url, String title, String? description, String? imageUrl, String faviconUrl, String siteName, String? contentType, String? author, DateTime? publishedDate
 | 
			
		||||
 String type, String url, String title, String? description, String? imageUrl, String? faviconUrl, String? siteName, String? contentType, String? author, DateTime? publishedDate
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -226,16 +65,16 @@ class _$SnScrappedLinkCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnScrappedLink
 | 
			
		||||
/// 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,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? url = null,Object? title = null,Object? description = freezed,Object? imageUrl = freezed,Object? faviconUrl = freezed,Object? siteName = freezed,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?,faviconUrl: freezed == faviconUrl ? _self.faviconUrl : faviconUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,siteName: freezed == 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?,
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
@@ -257,8 +220,8 @@ class _SnScrappedLink implements SnScrappedLink {
 | 
			
		||||
@override final  String title;
 | 
			
		||||
@override final  String? description;
 | 
			
		||||
@override final  String? imageUrl;
 | 
			
		||||
@override final  String faviconUrl;
 | 
			
		||||
@override final  String siteName;
 | 
			
		||||
@override final  String? faviconUrl;
 | 
			
		||||
@override final  String? siteName;
 | 
			
		||||
@override final  String? contentType;
 | 
			
		||||
@override final  String? author;
 | 
			
		||||
@override final  DateTime? publishedDate;
 | 
			
		||||
@@ -296,7 +259,7 @@ abstract mixin class _$SnScrappedLinkCopyWith<$Res> implements $SnScrappedLinkCo
 | 
			
		||||
  factory _$SnScrappedLinkCopyWith(_SnScrappedLink value, $Res Function(_SnScrappedLink) _then) = __$SnScrappedLinkCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String type, String url, String title, String? description, String? imageUrl, String faviconUrl, String siteName, String? contentType, String? author, DateTime? publishedDate
 | 
			
		||||
 String type, String url, String title, String? description, String? imageUrl, String? faviconUrl, String? siteName, String? contentType, String? author, DateTime? publishedDate
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -313,16 +276,16 @@ class __$SnScrappedLinkCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnScrappedLink
 | 
			
		||||
/// 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,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? url = null,Object? title = null,Object? description = freezed,Object? imageUrl = freezed,Object? faviconUrl = freezed,Object? siteName = freezed,Object? contentType = freezed,Object? author = freezed,Object? publishedDate = freezed,}) {
 | 
			
		||||
  return _then(_SnScrappedLink(
 | 
			
		||||
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?,faviconUrl: freezed == faviconUrl ? _self.faviconUrl : faviconUrl // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,siteName: freezed == 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?,
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
@@ -43,8 +13,8 @@ _SnScrappedLink _$SnScrappedLinkFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      title: json['title'] as String,
 | 
			
		||||
      description: json['description'] as String?,
 | 
			
		||||
      imageUrl: json['image_url'] as String?,
 | 
			
		||||
      faviconUrl: json['favicon_url'] as String,
 | 
			
		||||
      siteName: json['site_name'] as String,
 | 
			
		||||
      faviconUrl: json['favicon_url'] as String?,
 | 
			
		||||
      siteName: json['site_name'] as String?,
 | 
			
		||||
      contentType: json['content_type'] as String?,
 | 
			
		||||
      author: json['author'] as String?,
 | 
			
		||||
      publishedDate:
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										108
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
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,
 | 
			
		||||
    @Default({}) 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,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class SnPollAnswer with _$SnPollAnswer {
 | 
			
		||||
  const factory SnPollAnswer({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required Map<String, dynamic> answer,
 | 
			
		||||
    required String accountId,
 | 
			
		||||
    required String pollId,
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    required DateTime? deletedAt,
 | 
			
		||||
  }) = _SnPollAnswer;
 | 
			
		||||
 | 
			
		||||
  factory SnPollAnswer.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPollAnswerFromJson(json);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1467
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1467
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										158
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
			
		||||
// 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>? ?? const {},
 | 
			
		||||
      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,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
_SnPollAnswer _$SnPollAnswerFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnPollAnswer(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      answer: json['answer'] as Map<String, dynamic>,
 | 
			
		||||
      accountId: json['account_id'] as String,
 | 
			
		||||
      pollId: json['poll_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> _$SnPollAnswerToJson(_SnPollAnswer instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'answer': instance.answer,
 | 
			
		||||
      'account_id': instance.accountId,
 | 
			
		||||
      'poll_id': instance.pollId,
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
    };
 | 
			
		||||
@@ -3,6 +3,7 @@ import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/post_category.dart';
 | 
			
		||||
import 'package:island/models/post_tag.dart';
 | 
			
		||||
import 'package:island/models/publisher.dart';
 | 
			
		||||
import 'package:island/models/realm.dart';
 | 
			
		||||
 | 
			
		||||
part 'post.freezed.dart';
 | 
			
		||||
part 'post.g.dart';
 | 
			
		||||
@@ -18,6 +19,7 @@ sealed class SnPost with _$SnPost {
 | 
			
		||||
    @Default(null) DateTime? publishedAt,
 | 
			
		||||
    @Default(0) int visibility,
 | 
			
		||||
    String? content,
 | 
			
		||||
    String? slug,
 | 
			
		||||
    @Default(0) int type,
 | 
			
		||||
    Map<String, dynamic>? meta,
 | 
			
		||||
    @Default(0) int viewsUnique,
 | 
			
		||||
@@ -31,12 +33,15 @@ sealed class SnPost with _$SnPost {
 | 
			
		||||
    SnPost? repliedPost,
 | 
			
		||||
    String? forwardedPostId,
 | 
			
		||||
    SnPost? forwardedPost,
 | 
			
		||||
    String? realmId,
 | 
			
		||||
    SnRealm? realm,
 | 
			
		||||
    @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,
 | 
			
		||||
    @Default([]) List<SnPostTag> tags,
 | 
			
		||||
    @Default([]) List<SnPostCategory> categories,
 | 
			
		||||
    @Default([]) List<dynamic> collections,
 | 
			
		||||
    @Default(null) DateTime? createdAt,
 | 
			
		||||
    @Default(null) DateTime? updatedAt,
 | 
			
		||||
@@ -77,6 +82,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; String? get slug; 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; String? get realmId; SnRealm? get realm; List<SnCloudFile> get attachments; SnPublisher get publisher; Map<String, int> get reactionsCount; Map<String, bool> get reactionsMade; List<dynamic> get reactions; List<SnPostTag> get tags; List<SnPostCategory> 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.slug, slug) || other.slug == slug)&&(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)&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&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,slug,type,const DeepCollectionEquality().hash(meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,realmId,realm,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, slug: $slug, 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, realmId: $realmId, realm: $realm, 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,11 +48,11 @@ 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, String? slug, 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, String? realmId, SnRealm? realm, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<SnPostTag> tags, List<SnPostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$SnPostCopyWith<$Res>? get threadedPost;$SnPostCopyWith<$Res>? get repliedPost;$SnPostCopyWith<$Res>? get forwardedPost;$SnPublisherCopyWith<$Res> get publisher;
 | 
			
		||||
$SnPostCopyWith<$Res>? get threadedPost;$SnPostCopyWith<$Res>? get repliedPost;$SnPostCopyWith<$Res>? get forwardedPost;$SnRealmCopyWith<$Res>? get realm;$SnPublisherCopyWith<$Res> get publisher;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@@ -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? slug = 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? realmId = freezed,Object? realm = 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
 | 
			
		||||
@@ -76,6 +75,7 @@ as String?,editedAt: freezed == editedAt ? _self.editedAt : editedAt // ignore:
 | 
			
		||||
as DateTime?,publishedAt: freezed == publishedAt ? _self.publishedAt : publishedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,visibility: null == visibility ? _self.visibility : visibility // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,content: freezed == content ? _self.content : content // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,slug: freezed == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,meta: freezed == meta ? _self.meta : meta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,viewsUnique: null == viewsUnique ? _self.viewsUnique : viewsUnique // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -89,13 +89,16 @@ as SnPost?,repliedPostId: freezed == repliedPostId ? _self.repliedPostId : repli
 | 
			
		||||
as String?,repliedPost: freezed == repliedPost ? _self.repliedPost : repliedPost // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,forwardedPostId: freezed == forwardedPostId ? _self.forwardedPostId : forwardedPostId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwardedPost // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,attachments: null == attachments ? _self.attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,realmId: freezed == realmId ? _self.realmId : realmId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnRealm?,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
 | 
			
		||||
as List<SnPostTag>,categories: null == categories ? _self.categories : categories // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnPostCategory>,collections: null == collections ? _self.collections : collections // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,createdAt: freezed == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,updatedAt: freezed == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -143,6 +146,18 @@ $SnPostCopyWith<$Res>? get forwardedPost {
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnRealmCopyWith<$Res>? get realm {
 | 
			
		||||
    if (_self.realm == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnRealmCopyWith<$Res>(_self.realm!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(realm: value));
 | 
			
		||||
  });
 | 
			
		||||
}/// Create a copy of SnPost
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnPublisherCopyWith<$Res> get publisher {
 | 
			
		||||
  
 | 
			
		||||
  return $SnPublisherCopyWith<$Res>(_self.publisher, (value) {
 | 
			
		||||
@@ -152,11 +167,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,  String? slug,  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,  String? realmId,  SnRealm? realm,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<SnPostTag> tags,  List<SnPostCategory> 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.slug,_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.realmId,_that.realm,_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,  String? slug,  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,  String? realmId,  SnRealm? realm,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<SnPostTag> tags,  List<SnPostCategory> 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.slug,_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.realmId,_that.realm,_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,  String? slug,  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,  String? realmId,  SnRealm? realm,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<SnPostTag> tags,  List<SnPostCategory> 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.slug,_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.realmId,_that.realm,_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.slug, 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, this.realmId, this.realm, 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<SnPostTag> tags = const [], final  List<SnPostCategory> 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;
 | 
			
		||||
@@ -167,6 +306,7 @@ class _SnPost implements SnPost {
 | 
			
		||||
@override@JsonKey() final  DateTime? publishedAt;
 | 
			
		||||
@override@JsonKey() final  int visibility;
 | 
			
		||||
@override final  String? content;
 | 
			
		||||
@override final  String? slug;
 | 
			
		||||
@override@JsonKey() final  int type;
 | 
			
		||||
 final  Map<String, dynamic>? _meta;
 | 
			
		||||
@override Map<String, dynamic>? get meta {
 | 
			
		||||
@@ -188,6 +328,8 @@ class _SnPost implements SnPost {
 | 
			
		||||
@override final  SnPost? repliedPost;
 | 
			
		||||
@override final  String? forwardedPostId;
 | 
			
		||||
@override final  SnPost? forwardedPost;
 | 
			
		||||
@override final  String? realmId;
 | 
			
		||||
@override final  SnRealm? realm;
 | 
			
		||||
 final  List<SnCloudFile> _attachments;
 | 
			
		||||
@override@JsonKey() List<SnCloudFile> get attachments {
 | 
			
		||||
  if (_attachments is EqualUnmodifiableListView) return _attachments;
 | 
			
		||||
@@ -203,6 +345,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;
 | 
			
		||||
@@ -210,15 +359,15 @@ class _SnPost implements SnPost {
 | 
			
		||||
  return EqualUnmodifiableListView(_reactions);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 final  List<PostTag> _tags;
 | 
			
		||||
@override@JsonKey() List<PostTag> get tags {
 | 
			
		||||
 final  List<SnPostTag> _tags;
 | 
			
		||||
@override@JsonKey() List<SnPostTag> get tags {
 | 
			
		||||
  if (_tags is EqualUnmodifiableListView) return _tags;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableListView(_tags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 final  List<PostCategory> _categories;
 | 
			
		||||
@override@JsonKey() List<PostCategory> get categories {
 | 
			
		||||
 final  List<SnPostCategory> _categories;
 | 
			
		||||
@override@JsonKey() List<SnPostCategory> get categories {
 | 
			
		||||
  if (_categories is EqualUnmodifiableListView) return _categories;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableListView(_categories);
 | 
			
		||||
@@ -249,16 +398,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.slug, slug) || other.slug == slug)&&(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)&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&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,slug,type,const DeepCollectionEquality().hash(_meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,realmId,realm,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, slug: $slug, 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, realmId: $realmId, realm: $realm, 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,11 +418,11 @@ 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, String? slug, 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, String? realmId, SnRealm? realm, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<SnPostTag> tags, List<SnPostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override $SnPostCopyWith<$Res>? get threadedPost;@override $SnPostCopyWith<$Res>? get repliedPost;@override $SnPostCopyWith<$Res>? get forwardedPost;@override $SnPublisherCopyWith<$Res> get publisher;
 | 
			
		||||
@override $SnPostCopyWith<$Res>? get threadedPost;@override $SnPostCopyWith<$Res>? get repliedPost;@override $SnPostCopyWith<$Res>? get forwardedPost;@override $SnRealmCopyWith<$Res>? get realm;@override $SnPublisherCopyWith<$Res> get publisher;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@@ -286,7 +435,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? slug = 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? realmId = freezed,Object? realm = 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
 | 
			
		||||
@@ -296,6 +445,7 @@ as String?,editedAt: freezed == editedAt ? _self.editedAt : editedAt // ignore:
 | 
			
		||||
as DateTime?,publishedAt: freezed == publishedAt ? _self.publishedAt : publishedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,visibility: null == visibility ? _self.visibility : visibility // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,content: freezed == content ? _self.content : content // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,slug: freezed == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as int,meta: freezed == meta ? _self._meta : meta // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as Map<String, dynamic>?,viewsUnique: null == viewsUnique ? _self.viewsUnique : viewsUnique // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -309,13 +459,16 @@ as SnPost?,repliedPostId: freezed == repliedPostId ? _self.repliedPostId : repli
 | 
			
		||||
as String?,repliedPost: freezed == repliedPost ? _self.repliedPost : repliedPost // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,forwardedPostId: freezed == forwardedPostId ? _self.forwardedPostId : forwardedPostId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwardedPost // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,attachments: null == attachments ? _self._attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnPost?,realmId: freezed == realmId ? _self.realmId : realmId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String?,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnRealm?,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
 | 
			
		||||
as List<SnPostTag>,categories: null == categories ? _self._categories : categories // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnPostCategory>,collections: null == collections ? _self._collections : collections // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<dynamic>,createdAt: freezed == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,updatedAt: freezed == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as DateTime?,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -364,6 +517,18 @@ $SnPostCopyWith<$Res>? get forwardedPost {
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnRealmCopyWith<$Res>? get realm {
 | 
			
		||||
    if (_self.realm == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnRealmCopyWith<$Res>(_self.realm!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(realm: value));
 | 
			
		||||
  });
 | 
			
		||||
}/// Create a copy of SnPost
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnPublisherCopyWith<$Res> get publisher {
 | 
			
		||||
  
 | 
			
		||||
  return $SnPublisherCopyWith<$Res>(_self.publisher, (value) {
 | 
			
		||||
@@ -440,6 +605,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 +872,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 +1131,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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
 | 
			
		||||
          : DateTime.parse(json['published_at'] as String),
 | 
			
		||||
  visibility: (json['visibility'] as num?)?.toInt() ?? 0,
 | 
			
		||||
  content: json['content'] as String?,
 | 
			
		||||
  slug: json['slug'] as String?,
 | 
			
		||||
  type: (json['type'] as num?)?.toInt() ?? 0,
 | 
			
		||||
  meta: json['meta'] as Map<String, dynamic>?,
 | 
			
		||||
  viewsUnique: (json['views_unique'] as num?)?.toInt() ?? 0,
 | 
			
		||||
@@ -43,6 +44,11 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
 | 
			
		||||
      json['forwarded_post'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : SnPost.fromJson(json['forwarded_post'] as Map<String, dynamic>),
 | 
			
		||||
  realmId: json['realm_id'] as String?,
 | 
			
		||||
  realm:
 | 
			
		||||
      json['realm'] == null
 | 
			
		||||
          ? null
 | 
			
		||||
          : SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
 | 
			
		||||
  attachments:
 | 
			
		||||
      (json['attachments'] as List<dynamic>?)
 | 
			
		||||
          ?.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
@@ -54,15 +60,20 @@ _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>?)
 | 
			
		||||
          ?.map((e) => PostTag.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          ?.map((e) => SnPostTag.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          .toList() ??
 | 
			
		||||
      const [],
 | 
			
		||||
  categories:
 | 
			
		||||
      (json['categories'] as List<dynamic>?)
 | 
			
		||||
          ?.map((e) => PostCategory.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          ?.map((e) => SnPostCategory.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
          .toList() ??
 | 
			
		||||
      const [],
 | 
			
		||||
  collections: json['collections'] as List<dynamic>? ?? const [],
 | 
			
		||||
@@ -90,6 +101,7 @@ Map<String, dynamic> _$SnPostToJson(_SnPost instance) => <String, dynamic>{
 | 
			
		||||
  'published_at': instance.publishedAt?.toIso8601String(),
 | 
			
		||||
  'visibility': instance.visibility,
 | 
			
		||||
  'content': instance.content,
 | 
			
		||||
  'slug': instance.slug,
 | 
			
		||||
  'type': instance.type,
 | 
			
		||||
  'meta': instance.meta,
 | 
			
		||||
  'views_unique': instance.viewsUnique,
 | 
			
		||||
@@ -103,9 +115,12 @@ Map<String, dynamic> _$SnPostToJson(_SnPost instance) => <String, dynamic>{
 | 
			
		||||
  'replied_post': instance.repliedPost?.toJson(),
 | 
			
		||||
  'forwarded_post_id': instance.forwardedPostId,
 | 
			
		||||
  'forwarded_post': instance.forwardedPost?.toJson(),
 | 
			
		||||
  'realm_id': instance.realmId,
 | 
			
		||||
  'realm': instance.realm?.toJson(),
 | 
			
		||||
  '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,19 +1,30 @@
 | 
			
		||||
 | 
			
		||||
import 'package:easy_localization/easy_localization.dart';
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/post.dart';
 | 
			
		||||
import 'package:island/services/text.dart';
 | 
			
		||||
 | 
			
		||||
part 'post_category.freezed.dart';
 | 
			
		||||
part 'post_category.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class PostCategory with _$PostCategory {
 | 
			
		||||
  const factory PostCategory({
 | 
			
		||||
sealed class SnPostCategory with _$SnPostCategory {
 | 
			
		||||
  const SnPostCategory._();
 | 
			
		||||
 | 
			
		||||
  const factory SnPostCategory({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String slug,
 | 
			
		||||
    String? name,
 | 
			
		||||
    @Default([]) List<SnPost> posts,
 | 
			
		||||
  }) = _PostCategory;
 | 
			
		||||
  }) = _SnPostCategory;
 | 
			
		||||
 | 
			
		||||
  factory PostCategory.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$PostCategoryFromJson(json);
 | 
			
		||||
  factory SnPostCategory.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPostCategoryFromJson(json);
 | 
			
		||||
 | 
			
		||||
  String get categoryDisplayTitle {
 | 
			
		||||
    final capitalizedSlug = slug.capitalizeEachWord();
 | 
			
		||||
    if ('postCategory$capitalizedSlug'.trExists()) {
 | 
			
		||||
      return 'postCategory$capitalizedSlug'.tr();
 | 
			
		||||
    }
 | 
			
		||||
    return name ?? slug;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
@@ -14,22 +13,22 @@ part of 'post_category.dart';
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$PostCategory {
 | 
			
		||||
mixin _$SnPostCategory {
 | 
			
		||||
 | 
			
		||||
 String get id; String get slug; String? get name; List<SnPost> get posts;
 | 
			
		||||
/// Create a copy of PostCategory
 | 
			
		||||
/// Create a copy of SnPostCategory
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$PostCategoryCopyWith<PostCategory> get copyWith => _$PostCategoryCopyWithImpl<PostCategory>(this as PostCategory, _$identity);
 | 
			
		||||
$SnPostCategoryCopyWith<SnPostCategory> get copyWith => _$SnPostCategoryCopyWithImpl<SnPostCategory>(this as SnPostCategory, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this PostCategory to a JSON map.
 | 
			
		||||
  /// Serializes this SnPostCategory to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is PostCategory&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other.posts, posts));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPostCategory&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other.posts, posts));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -38,15 +37,15 @@ int get hashCode => Object.hash(runtimeType,id,slug,name,const DeepCollectionEqu
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'PostCategory(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
  return 'SnPostCategory(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $PostCategoryCopyWith<$Res>  {
 | 
			
		||||
  factory $PostCategoryCopyWith(PostCategory value, $Res Function(PostCategory) _then) = _$PostCategoryCopyWithImpl;
 | 
			
		||||
abstract mixin class $SnPostCategoryCopyWith<$Res>  {
 | 
			
		||||
  factory $SnPostCategoryCopyWith(SnPostCategory value, $Res Function(SnPostCategory) _then) = _$SnPostCategoryCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String slug, String? name, List<SnPost> posts
 | 
			
		||||
@@ -57,14 +56,14 @@ $Res call({
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$PostCategoryCopyWithImpl<$Res>
 | 
			
		||||
    implements $PostCategoryCopyWith<$Res> {
 | 
			
		||||
  _$PostCategoryCopyWithImpl(this._self, this._then);
 | 
			
		||||
class _$SnPostCategoryCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnPostCategoryCopyWith<$Res> {
 | 
			
		||||
  _$SnPostCategoryCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final PostCategory _self;
 | 
			
		||||
  final $Res Function(PostCategory) _then;
 | 
			
		||||
  final SnPostCategory _self;
 | 
			
		||||
  final $Res Function(SnPostCategory) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostCategory
 | 
			
		||||
/// Create a copy of SnPostCategory
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? slug = null,Object? name = freezed,Object? posts = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
@@ -79,12 +78,136 @@ as List<SnPost>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPostCategory].
 | 
			
		||||
extension SnPostCategoryPatterns on SnPostCategory {
 | 
			
		||||
/// 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( _SnPostCategory value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostCategory() 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( _SnPostCategory value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostCategory():
 | 
			
		||||
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( _SnPostCategory value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostCategory() 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 _SnPostCategory() 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 _SnPostCategory():
 | 
			
		||||
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 _SnPostCategory() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _PostCategory implements PostCategory {
 | 
			
		||||
  const _PostCategory({required this.id, required this.slug, this.name, final  List<SnPost> posts = const []}): _posts = posts;
 | 
			
		||||
  factory _PostCategory.fromJson(Map<String, dynamic> json) => _$PostCategoryFromJson(json);
 | 
			
		||||
class _SnPostCategory extends SnPostCategory {
 | 
			
		||||
  const _SnPostCategory({required this.id, required this.slug, this.name, final  List<SnPost> posts = const []}): _posts = posts,super._();
 | 
			
		||||
  factory _SnPostCategory.fromJson(Map<String, dynamic> json) => _$SnPostCategoryFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@override final  String slug;
 | 
			
		||||
@@ -97,20 +220,20 @@ class _PostCategory implements PostCategory {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostCategory
 | 
			
		||||
/// Create a copy of SnPostCategory
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$PostCategoryCopyWith<_PostCategory> get copyWith => __$PostCategoryCopyWithImpl<_PostCategory>(this, _$identity);
 | 
			
		||||
_$SnPostCategoryCopyWith<_SnPostCategory> get copyWith => __$SnPostCategoryCopyWithImpl<_SnPostCategory>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$PostCategoryToJson(this, );
 | 
			
		||||
  return _$SnPostCategoryToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _PostCategory&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other._posts, _posts));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPostCategory&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other._posts, _posts));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -119,15 +242,15 @@ int get hashCode => Object.hash(runtimeType,id,slug,name,const DeepCollectionEqu
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'PostCategory(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
  return 'SnPostCategory(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$PostCategoryCopyWith<$Res> implements $PostCategoryCopyWith<$Res> {
 | 
			
		||||
  factory _$PostCategoryCopyWith(_PostCategory value, $Res Function(_PostCategory) _then) = __$PostCategoryCopyWithImpl;
 | 
			
		||||
abstract mixin class _$SnPostCategoryCopyWith<$Res> implements $SnPostCategoryCopyWith<$Res> {
 | 
			
		||||
  factory _$SnPostCategoryCopyWith(_SnPostCategory value, $Res Function(_SnPostCategory) _then) = __$SnPostCategoryCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String slug, String? name, List<SnPost> posts
 | 
			
		||||
@@ -138,17 +261,17 @@ $Res call({
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$PostCategoryCopyWithImpl<$Res>
 | 
			
		||||
    implements _$PostCategoryCopyWith<$Res> {
 | 
			
		||||
  __$PostCategoryCopyWithImpl(this._self, this._then);
 | 
			
		||||
class __$SnPostCategoryCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnPostCategoryCopyWith<$Res> {
 | 
			
		||||
  __$SnPostCategoryCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _PostCategory _self;
 | 
			
		||||
  final $Res Function(_PostCategory) _then;
 | 
			
		||||
  final _SnPostCategory _self;
 | 
			
		||||
  final $Res Function(_SnPostCategory) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostCategory
 | 
			
		||||
/// Create a copy of SnPostCategory
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? slug = null,Object? name = freezed,Object? posts = null,}) {
 | 
			
		||||
  return _then(_PostCategory(
 | 
			
		||||
  return _then(_SnPostCategory(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,slug: null == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,name: freezed == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ part of 'post_category.dart';
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_PostCategory _$PostCategoryFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _PostCategory(
 | 
			
		||||
_SnPostCategory _$SnPostCategoryFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
    _SnPostCategory(
 | 
			
		||||
      id: json['id'] as String,
 | 
			
		||||
      slug: json['slug'] as String,
 | 
			
		||||
      name: json['name'] as String?,
 | 
			
		||||
@@ -18,7 +18,7 @@ _PostCategory _$PostCategoryFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
          const [],
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$PostCategoryToJson(_PostCategory instance) =>
 | 
			
		||||
Map<String, dynamic> _$SnPostCategoryToJson(_SnPostCategory instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'slug': instance.slug,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/post.dart';
 | 
			
		||||
 | 
			
		||||
@@ -6,14 +5,14 @@ part 'post_tag.freezed.dart';
 | 
			
		||||
part 'post_tag.g.dart';
 | 
			
		||||
 | 
			
		||||
@freezed
 | 
			
		||||
sealed class PostTag with _$PostTag {
 | 
			
		||||
  const factory PostTag({
 | 
			
		||||
sealed class SnPostTag with _$SnPostTag {
 | 
			
		||||
  const factory SnPostTag({
 | 
			
		||||
    required String id,
 | 
			
		||||
    required String slug,
 | 
			
		||||
    String? name,
 | 
			
		||||
    @Default([]) List<SnPost> posts,
 | 
			
		||||
  }) = _PostTag;
 | 
			
		||||
  }) = _SnPostTag;
 | 
			
		||||
 | 
			
		||||
  factory PostTag.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$PostTagFromJson(json);
 | 
			
		||||
  factory SnPostTag.fromJson(Map<String, dynamic> json) =>
 | 
			
		||||
      _$SnPostTagFromJson(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
 | 
			
		||||
 | 
			
		||||
@@ -14,22 +13,22 @@ part of 'post_tag.dart';
 | 
			
		||||
T _$identity<T>(T value) => value;
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$PostTag {
 | 
			
		||||
mixin _$SnPostTag {
 | 
			
		||||
 | 
			
		||||
 String get id; String get slug; String? get name; List<SnPost> get posts;
 | 
			
		||||
/// Create a copy of PostTag
 | 
			
		||||
/// Create a copy of SnPostTag
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$PostTagCopyWith<PostTag> get copyWith => _$PostTagCopyWithImpl<PostTag>(this as PostTag, _$identity);
 | 
			
		||||
$SnPostTagCopyWith<SnPostTag> get copyWith => _$SnPostTagCopyWithImpl<SnPostTag>(this as SnPostTag, _$identity);
 | 
			
		||||
 | 
			
		||||
  /// Serializes this PostTag to a JSON map.
 | 
			
		||||
  /// Serializes this SnPostTag to a JSON map.
 | 
			
		||||
  Map<String, dynamic> toJson();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is PostTag&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other.posts, posts));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPostTag&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other.posts, posts));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -38,15 +37,15 @@ int get hashCode => Object.hash(runtimeType,id,slug,name,const DeepCollectionEqu
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'PostTag(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
  return 'SnPostTag(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class $PostTagCopyWith<$Res>  {
 | 
			
		||||
  factory $PostTagCopyWith(PostTag value, $Res Function(PostTag) _then) = _$PostTagCopyWithImpl;
 | 
			
		||||
abstract mixin class $SnPostTagCopyWith<$Res>  {
 | 
			
		||||
  factory $SnPostTagCopyWith(SnPostTag value, $Res Function(SnPostTag) _then) = _$SnPostTagCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String slug, String? name, List<SnPost> posts
 | 
			
		||||
@@ -57,14 +56,14 @@ $Res call({
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class _$PostTagCopyWithImpl<$Res>
 | 
			
		||||
    implements $PostTagCopyWith<$Res> {
 | 
			
		||||
  _$PostTagCopyWithImpl(this._self, this._then);
 | 
			
		||||
class _$SnPostTagCopyWithImpl<$Res>
 | 
			
		||||
    implements $SnPostTagCopyWith<$Res> {
 | 
			
		||||
  _$SnPostTagCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final PostTag _self;
 | 
			
		||||
  final $Res Function(PostTag) _then;
 | 
			
		||||
  final SnPostTag _self;
 | 
			
		||||
  final $Res Function(SnPostTag) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostTag
 | 
			
		||||
/// Create a copy of SnPostTag
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? slug = null,Object? name = freezed,Object? posts = null,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
@@ -79,12 +78,136 @@ as List<SnPost>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Adds pattern-matching-related methods to [SnPostTag].
 | 
			
		||||
extension SnPostTagPatterns on SnPostTag {
 | 
			
		||||
/// 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( _SnPostTag value)?  $default,{required TResult orElse(),}){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostTag() 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( _SnPostTag value)  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostTag():
 | 
			
		||||
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( _SnPostTag value)?  $default,){
 | 
			
		||||
final _that = this;
 | 
			
		||||
switch (_that) {
 | 
			
		||||
case _SnPostTag() 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 _SnPostTag() 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 _SnPostTag():
 | 
			
		||||
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 _SnPostTag() when $default != null:
 | 
			
		||||
return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _PostTag implements PostTag {
 | 
			
		||||
  const _PostTag({required this.id, required this.slug, this.name, final  List<SnPost> posts = const []}): _posts = posts;
 | 
			
		||||
  factory _PostTag.fromJson(Map<String, dynamic> json) => _$PostTagFromJson(json);
 | 
			
		||||
class _SnPostTag implements SnPostTag {
 | 
			
		||||
  const _SnPostTag({required this.id, required this.slug, this.name, final  List<SnPost> posts = const []}): _posts = posts;
 | 
			
		||||
  factory _SnPostTag.fromJson(Map<String, dynamic> json) => _$SnPostTagFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@override final  String slug;
 | 
			
		||||
@@ -97,20 +220,20 @@ class _PostTag implements PostTag {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostTag
 | 
			
		||||
/// Create a copy of SnPostTag
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
_$PostTagCopyWith<_PostTag> get copyWith => __$PostTagCopyWithImpl<_PostTag>(this, _$identity);
 | 
			
		||||
_$SnPostTagCopyWith<_SnPostTag> get copyWith => __$SnPostTagCopyWithImpl<_SnPostTag>(this, _$identity);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
Map<String, dynamic> toJson() {
 | 
			
		||||
  return _$PostTagToJson(this, );
 | 
			
		||||
  return _$SnPostTagToJson(this, );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _PostTag&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other._posts, _posts));
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPostTag&&(identical(other.id, id) || other.id == id)&&(identical(other.slug, slug) || other.slug == slug)&&(identical(other.name, name) || other.name == name)&&const DeepCollectionEquality().equals(other._posts, _posts));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -119,15 +242,15 @@ int get hashCode => Object.hash(runtimeType,id,slug,name,const DeepCollectionEqu
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'PostTag(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
  return 'SnPostTag(id: $id, slug: $slug, name: $name, posts: $posts)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
abstract mixin class _$PostTagCopyWith<$Res> implements $PostTagCopyWith<$Res> {
 | 
			
		||||
  factory _$PostTagCopyWith(_PostTag value, $Res Function(_PostTag) _then) = __$PostTagCopyWithImpl;
 | 
			
		||||
abstract mixin class _$SnPostTagCopyWith<$Res> implements $SnPostTagCopyWith<$Res> {
 | 
			
		||||
  factory _$SnPostTagCopyWith(_SnPostTag value, $Res Function(_SnPostTag) _then) = __$SnPostTagCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String slug, String? name, List<SnPost> posts
 | 
			
		||||
@@ -138,17 +261,17 @@ $Res call({
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
class __$PostTagCopyWithImpl<$Res>
 | 
			
		||||
    implements _$PostTagCopyWith<$Res> {
 | 
			
		||||
  __$PostTagCopyWithImpl(this._self, this._then);
 | 
			
		||||
class __$SnPostTagCopyWithImpl<$Res>
 | 
			
		||||
    implements _$SnPostTagCopyWith<$Res> {
 | 
			
		||||
  __$SnPostTagCopyWithImpl(this._self, this._then);
 | 
			
		||||
 | 
			
		||||
  final _PostTag _self;
 | 
			
		||||
  final $Res Function(_PostTag) _then;
 | 
			
		||||
  final _SnPostTag _self;
 | 
			
		||||
  final $Res Function(_SnPostTag) _then;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of PostTag
 | 
			
		||||
/// Create a copy of SnPostTag
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? slug = null,Object? name = freezed,Object? posts = null,}) {
 | 
			
		||||
  return _then(_PostTag(
 | 
			
		||||
  return _then(_SnPostTag(
 | 
			
		||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,slug: null == slug ? _self.slug : slug // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,name: freezed == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ part of 'post_tag.dart';
 | 
			
		||||
// JsonSerializableGenerator
 | 
			
		||||
// **************************************************************************
 | 
			
		||||
 | 
			
		||||
_PostTag _$PostTagFromJson(Map<String, dynamic> json) => _PostTag(
 | 
			
		||||
_SnPostTag _$SnPostTagFromJson(Map<String, dynamic> json) => _SnPostTag(
 | 
			
		||||
  id: json['id'] as String,
 | 
			
		||||
  slug: json['slug'] as String,
 | 
			
		||||
  name: json['name'] as String?,
 | 
			
		||||
@@ -17,9 +17,10 @@ _PostTag _$PostTagFromJson(Map<String, dynamic> json) => _PostTag(
 | 
			
		||||
      const [],
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$PostTagToJson(_PostTag instance) => <String, dynamic>{
 | 
			
		||||
  'id': instance.id,
 | 
			
		||||
  'slug': instance.slug,
 | 
			
		||||
  'name': instance.name,
 | 
			
		||||
  'posts': instance.posts.map((e) => e.toJson()).toList(),
 | 
			
		||||
};
 | 
			
		||||
Map<String, dynamic> _$SnPostTagToJson(_SnPostTag instance) =>
 | 
			
		||||
    <String, dynamic>{
 | 
			
		||||
      'id': instance.id,
 | 
			
		||||
      'slug': instance.slug,
 | 
			
		||||
      'name': instance.name,
 | 
			
		||||
      'posts': instance.posts.map((e) => e.toJson()).toList(),
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'publisher.freezed.dart';
 | 
			
		||||
part 'publisher.g.dart';
 | 
			
		||||
 
 | 
			
		||||
@@ -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,6 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/file.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'realm.freezed.dart';
 | 
			
		||||
part 'realm.g.dart';
 | 
			
		||||
@@ -40,6 +40,7 @@ sealed class SnRealmMember with _$SnRealmMember {
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    required DateTime? deletedAt,
 | 
			
		||||
    required SnAccountStatus? status,
 | 
			
		||||
  }) = _SnRealmMember;
 | 
			
		||||
 | 
			
		||||
  factory SnRealmMember.fromJson(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
 | 
			
		||||
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
@@ -236,7 +359,7 @@ $SnCloudFileCopyWith<$Res>? get background {
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnRealmMember {
 | 
			
		||||
 | 
			
		||||
 String get realmId; SnRealm? get realm; String get accountId; SnAccount? get account; int get role; DateTime? get joinedAt; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
 String get realmId; SnRealm? get realm; String get accountId; SnAccount? get account; int get role; DateTime? get joinedAt; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; SnAccountStatus? get status;
 | 
			
		||||
/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -249,16 +372,16 @@ $SnRealmMemberCopyWith<SnRealmMember> get copyWith => _$SnRealmMemberCopyWithImp
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnRealmMember&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.account, account) || other.account == account)&&(identical(other.role, role) || other.role == role)&&(identical(other.joinedAt, joinedAt) || other.joinedAt == joinedAt)&&(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 SnRealmMember&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.account, account) || other.account == account)&&(identical(other.role, role) || other.role == role)&&(identical(other.joinedAt, joinedAt) || other.joinedAt == joinedAt)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.status, status) || other.status == status));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,realmId,realm,accountId,account,role,joinedAt,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,realmId,realm,accountId,account,role,joinedAt,createdAt,updatedAt,deletedAt,status);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnRealmMember(realmId: $realmId, realm: $realm, accountId: $accountId, account: $account, role: $role, joinedAt: $joinedAt, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnRealmMember(realmId: $realmId, realm: $realm, accountId: $accountId, account: $account, role: $role, joinedAt: $joinedAt, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, status: $status)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -269,11 +392,11 @@ abstract mixin class $SnRealmMemberCopyWith<$Res>  {
 | 
			
		||||
  factory $SnRealmMemberCopyWith(SnRealmMember value, $Res Function(SnRealmMember) _then) = _$SnRealmMemberCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String realmId, SnRealm? realm, String accountId, SnAccount? account, int role, DateTime? joinedAt, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String realmId, SnRealm? realm, String accountId, SnAccount? account, int role, DateTime? joinedAt, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, SnAccountStatus? status
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$SnRealmCopyWith<$Res>? get realm;$SnAccountCopyWith<$Res>? get account;
 | 
			
		||||
$SnRealmCopyWith<$Res>? get realm;$SnAccountCopyWith<$Res>? get account;$SnAccountStatusCopyWith<$Res>? get status;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@@ -286,7 +409,7 @@ class _$SnRealmMemberCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? realmId = null,Object? realm = freezed,Object? accountId = null,Object? account = freezed,Object? role = null,Object? joinedAt = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@pragma('vm:prefer-inline') @override $Res call({Object? realmId = null,Object? realm = freezed,Object? accountId = null,Object? account = freezed,Object? role = null,Object? joinedAt = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? status = freezed,}) {
 | 
			
		||||
  return _then(_self.copyWith(
 | 
			
		||||
realmId: null == realmId ? _self.realmId : realmId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -297,7 +420,8 @@ as int,joinedAt: freezed == joinedAt ? _self.joinedAt : joinedAt // ignore: cast
 | 
			
		||||
as DateTime?,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?,
 | 
			
		||||
as DateTime?,status: freezed == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnAccountStatus?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
/// Create a copy of SnRealmMember
 | 
			
		||||
@@ -324,15 +448,151 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
  return $SnAccountCopyWith<$Res>(_self.account!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(account: value));
 | 
			
		||||
  });
 | 
			
		||||
}/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnAccountStatusCopyWith<$Res>? get status {
 | 
			
		||||
    if (_self.status == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnAccountStatusCopyWith<$Res>(_self.status!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(status: value));
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// 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,  SnAccountStatus? status)?  $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,_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( String realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  SnAccountStatus? status)  $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,_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( String realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  SnAccountStatus? status)?  $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,_that.status);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnRealmMember implements SnRealmMember {
 | 
			
		||||
  const _SnRealmMember({required this.realmId, required this.realm, required this.accountId, required this.account, required this.role, required this.joinedAt, required this.createdAt, required this.updatedAt, required this.deletedAt});
 | 
			
		||||
  const _SnRealmMember({required this.realmId, required this.realm, required this.accountId, required this.account, required this.role, required this.joinedAt, required this.createdAt, required this.updatedAt, required this.deletedAt, required this.status});
 | 
			
		||||
  factory _SnRealmMember.fromJson(Map<String, dynamic> json) => _$SnRealmMemberFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String realmId;
 | 
			
		||||
@@ -344,6 +604,7 @@ class _SnRealmMember implements SnRealmMember {
 | 
			
		||||
@override final  DateTime createdAt;
 | 
			
		||||
@override final  DateTime updatedAt;
 | 
			
		||||
@override final  DateTime? deletedAt;
 | 
			
		||||
@override final  SnAccountStatus? status;
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@@ -358,16 +619,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnRealmMember&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.account, account) || other.account == account)&&(identical(other.role, role) || other.role == role)&&(identical(other.joinedAt, joinedAt) || other.joinedAt == joinedAt)&&(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 _SnRealmMember&&(identical(other.realmId, realmId) || other.realmId == realmId)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.account, account) || other.account == account)&&(identical(other.role, role) || other.role == role)&&(identical(other.joinedAt, joinedAt) || other.joinedAt == joinedAt)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.status, status) || other.status == status));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,realmId,realm,accountId,account,role,joinedAt,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,realmId,realm,accountId,account,role,joinedAt,createdAt,updatedAt,deletedAt,status);
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnRealmMember(realmId: $realmId, realm: $realm, accountId: $accountId, account: $account, role: $role, joinedAt: $joinedAt, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnRealmMember(realmId: $realmId, realm: $realm, accountId: $accountId, account: $account, role: $role, joinedAt: $joinedAt, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, status: $status)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -378,11 +639,11 @@ abstract mixin class _$SnRealmMemberCopyWith<$Res> implements $SnRealmMemberCopy
 | 
			
		||||
  factory _$SnRealmMemberCopyWith(_SnRealmMember value, $Res Function(_SnRealmMember) _then) = __$SnRealmMemberCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String realmId, SnRealm? realm, String accountId, SnAccount? account, int role, DateTime? joinedAt, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String realmId, SnRealm? realm, String accountId, SnAccount? account, int role, DateTime? joinedAt, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, SnAccountStatus? status
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@override $SnRealmCopyWith<$Res>? get realm;@override $SnAccountCopyWith<$Res>? get account;
 | 
			
		||||
@override $SnRealmCopyWith<$Res>? get realm;@override $SnAccountCopyWith<$Res>? get account;@override $SnAccountStatusCopyWith<$Res>? get status;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@@ -395,7 +656,7 @@ class __$SnRealmMemberCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? realmId = null,Object? realm = freezed,Object? accountId = null,Object? account = freezed,Object? role = null,Object? joinedAt = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
			
		||||
@override @pragma('vm:prefer-inline') $Res call({Object? realmId = null,Object? realm = freezed,Object? accountId = null,Object? account = freezed,Object? role = null,Object? joinedAt = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? status = freezed,}) {
 | 
			
		||||
  return _then(_SnRealmMember(
 | 
			
		||||
realmId: null == realmId ? _self.realmId : realmId // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as String,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
@@ -406,7 +667,8 @@ as int,joinedAt: freezed == joinedAt ? _self.joinedAt : joinedAt // ignore: cast
 | 
			
		||||
as DateTime?,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?,
 | 
			
		||||
as DateTime?,status: freezed == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as SnAccountStatus?,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -434,6 +696,18 @@ $SnAccountCopyWith<$Res>? get account {
 | 
			
		||||
  return $SnAccountCopyWith<$Res>(_self.account!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(account: value));
 | 
			
		||||
  });
 | 
			
		||||
}/// Create a copy of SnRealmMember
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@override
 | 
			
		||||
@pragma('vm:prefer-inline')
 | 
			
		||||
$SnAccountStatusCopyWith<$Res>? get status {
 | 
			
		||||
    if (_self.status == null) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $SnAccountStatusCopyWith<$Res>(_self.status!, (value) {
 | 
			
		||||
    return _then(_self.copyWith(status: value));
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,12 @@ _SnRealmMember _$SnRealmMemberFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
          json['deleted_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['deleted_at'] as String),
 | 
			
		||||
      status:
 | 
			
		||||
          json['status'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : SnAccountStatus.fromJson(
 | 
			
		||||
                json['status'] as Map<String, dynamic>,
 | 
			
		||||
              ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnRealmMemberToJson(_SnRealmMember instance) =>
 | 
			
		||||
@@ -88,4 +94,5 @@ Map<String, dynamic> _$SnRealmMemberToJson(_SnRealmMember instance) =>
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
      'status': instance.status?.toJson(),
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'relationship.freezed.dart';
 | 
			
		||||
part 'relationship.g.dart';
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ sealed class SnStickerPack with _$SnStickerPack {
 | 
			
		||||
    required DateTime createdAt,
 | 
			
		||||
    required DateTime updatedAt,
 | 
			
		||||
    required DateTime? deletedAt,
 | 
			
		||||
    @Default([]) List<SnSticker> stickers,
 | 
			
		||||
  }) = _SnStickerPack;
 | 
			
		||||
 | 
			
		||||
  factory SnStickerPack.fromJson(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
 | 
			
		||||
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
@@ -215,7 +338,7 @@ $SnStickerPackCopyWith<$Res>? get pack {
 | 
			
		||||
/// @nodoc
 | 
			
		||||
mixin _$SnStickerPack {
 | 
			
		||||
 | 
			
		||||
 String get id; String get name; String get description; String get prefix; String get publisherId; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
			
		||||
 String get id; String get name; String get description; String get prefix; String get publisherId; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; List<SnSticker> get stickers;
 | 
			
		||||
/// Create a copy of SnStickerPack
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@@ -228,16 +351,16 @@ $SnStickerPackCopyWith<SnStickerPack> get copyWith => _$SnStickerPackCopyWithImp
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(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 SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other.stickers, stickers));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(stickers));
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -248,7 +371,7 @@ abstract mixin class $SnStickerPackCopyWith<$Res>  {
 | 
			
		||||
  factory $SnStickerPackCopyWith(SnStickerPack value, $Res Function(SnStickerPack) _then) = _$SnStickerPackCopyWithImpl;
 | 
			
		||||
@useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -265,7 +388,7 @@ class _$SnStickerPackCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnStickerPack
 | 
			
		||||
/// 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 = null,Object? prefix = null,Object? publisherId = null,Object? publisher = 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 = null,Object? prefix = null,Object? publisherId = null,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
 | 
			
		||||
  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
 | 
			
		||||
@@ -276,7 +399,8 @@ as String,publisher: freezed == publisher ? _self.publisher : publisher // ignor
 | 
			
		||||
as SnPublisher?,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?,
 | 
			
		||||
as DateTime?,stickers: null == stickers ? _self.stickers : stickers // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnSticker>,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
/// Create a copy of SnStickerPack
 | 
			
		||||
@@ -295,11 +419,135 @@ $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,  List<SnSticker> stickers)?  $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,_that.stickers);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,  List<SnSticker> stickers)  $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,_that.stickers);}
 | 
			
		||||
}
 | 
			
		||||
/// 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,  List<SnSticker> stickers)?  $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,_that.stickers);case _:
 | 
			
		||||
  return null;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @nodoc
 | 
			
		||||
@JsonSerializable()
 | 
			
		||||
 | 
			
		||||
class _SnStickerPack implements SnStickerPack {
 | 
			
		||||
  const _SnStickerPack({required this.id, required this.name, required this.description, required this.prefix, required this.publisherId, required this.publisher, required this.createdAt, required this.updatedAt, required this.deletedAt});
 | 
			
		||||
  const _SnStickerPack({required this.id, required this.name, required this.description, required this.prefix, required this.publisherId, required this.publisher, required this.createdAt, required this.updatedAt, required this.deletedAt, final  List<SnSticker> stickers = const []}): _stickers = stickers;
 | 
			
		||||
  factory _SnStickerPack.fromJson(Map<String, dynamic> json) => _$SnStickerPackFromJson(json);
 | 
			
		||||
 | 
			
		||||
@override final  String id;
 | 
			
		||||
@@ -311,6 +559,13 @@ class _SnStickerPack implements SnStickerPack {
 | 
			
		||||
@override final  DateTime createdAt;
 | 
			
		||||
@override final  DateTime updatedAt;
 | 
			
		||||
@override final  DateTime? deletedAt;
 | 
			
		||||
 final  List<SnSticker> _stickers;
 | 
			
		||||
@override@JsonKey() List<SnSticker> get stickers {
 | 
			
		||||
  if (_stickers is EqualUnmodifiableListView) return _stickers;
 | 
			
		||||
  // ignore: implicit_dynamic_type
 | 
			
		||||
  return EqualUnmodifiableListView(_stickers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnStickerPack
 | 
			
		||||
/// with the given fields replaced by the non-null parameter values.
 | 
			
		||||
@@ -325,16 +580,16 @@ Map<String, dynamic> toJson() {
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
bool operator ==(Object other) {
 | 
			
		||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(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 _SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other._stickers, _stickers));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
			
		||||
@override
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt);
 | 
			
		||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(_stickers));
 | 
			
		||||
 | 
			
		||||
@override
 | 
			
		||||
String toString() {
 | 
			
		||||
  return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
			
		||||
  return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -345,7 +600,7 @@ abstract mixin class _$SnStickerPackCopyWith<$Res> implements $SnStickerPackCopy
 | 
			
		||||
  factory _$SnStickerPackCopyWith(_SnStickerPack value, $Res Function(_SnStickerPack) _then) = __$SnStickerPackCopyWithImpl;
 | 
			
		||||
@override @useResult
 | 
			
		||||
$Res call({
 | 
			
		||||
 String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
			
		||||
 String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -362,7 +617,7 @@ class __$SnStickerPackCopyWithImpl<$Res>
 | 
			
		||||
 | 
			
		||||
/// Create a copy of SnStickerPack
 | 
			
		||||
/// 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 = null,Object? prefix = null,Object? publisherId = null,Object? publisher = 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 = null,Object? prefix = null,Object? publisherId = null,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
 | 
			
		||||
  return _then(_SnStickerPack(
 | 
			
		||||
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
 | 
			
		||||
@@ -373,7 +628,8 @@ as String,publisher: freezed == publisher ? _self.publisher : publisher // ignor
 | 
			
		||||
as SnPublisher?,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?,
 | 
			
		||||
as DateTime?,stickers: null == stickers ? _self._stickers : stickers // ignore: cast_nullable_to_non_nullable
 | 
			
		||||
as List<SnSticker>,
 | 
			
		||||
  ));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,11 @@ _SnStickerPack _$SnStickerPackFromJson(Map<String, dynamic> json) =>
 | 
			
		||||
          json['deleted_at'] == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : DateTime.parse(json['deleted_at'] as String),
 | 
			
		||||
      stickers:
 | 
			
		||||
          (json['stickers'] as List<dynamic>?)
 | 
			
		||||
              ?.map((e) => SnSticker.fromJson(e as Map<String, dynamic>))
 | 
			
		||||
              .toList() ??
 | 
			
		||||
          const [],
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
Map<String, dynamic> _$SnStickerPackToJson(_SnStickerPack instance) =>
 | 
			
		||||
@@ -67,4 +72,5 @@ Map<String, dynamic> _$SnStickerPackToJson(_SnStickerPack instance) =>
 | 
			
		||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
			
		||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
			
		||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
			
		||||
      'stickers': instance.stickers.map((e) => e.toJson()).toList(),
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
			
		||||
import 'package:island/models/user.dart';
 | 
			
		||||
import 'package:island/models/account.dart';
 | 
			
		||||
 | 
			
		||||
part 'wallet.freezed.dart';
 | 
			
		||||
part 'wallet.g.dart';
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
@@ -23,6 +23,8 @@ const kAppSoundEffects = 'app_sound_effects';
 | 
			
		||||
const kAppAprilFoolFeatures = 'app_april_fool_features';
 | 
			
		||||
const kAppWindowSize = 'app_window_size';
 | 
			
		||||
const kAppEnterToSend = 'app_enter_to_send';
 | 
			
		||||
const kFeaturedPostsCollapsedId =
 | 
			
		||||
    'featured_posts_collapsed_id'; // Key for storing the ID of the collapsed featured post
 | 
			
		||||
 | 
			
		||||
const Map<String, FilterQuality> kImageQualityLevel = {
 | 
			
		||||
  'settingsImageQualityLowest': FilterQuality.none,
 | 
			
		||||
@@ -82,7 +84,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 {
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user