@@ -7,7 +7,6 @@ import com.codeinc.gen.user.v1.IdentityService.GetTwitterUserRequest
77import com.codeinc.gen.user.v1.IdentityService.LoginToThirdPartyAppRequest
88import com.codeinc.gen.user.v1.IdentityService.LoginToThirdPartyAppResponse
99import com.codeinc.gen.user.v1.IdentityService.UpdatePreferencesRequest
10- import com.codeinc.gen.user.v1.IdentityService.User
1110import com.getcode.db.Database
1211import com.getcode.ed25519.Ed25519
1312import com.getcode.ed25519.Ed25519.KeyPair
@@ -23,10 +22,8 @@ import com.google.common.collect.Sets
2322import io.reactivex.rxjava3.core.Flowable
2423import io.reactivex.rxjava3.core.Single
2524import kotlinx.coroutines.flow.first
26- import kotlinx.coroutines.flow.firstOrNull
2725import kotlinx.coroutines.flow.map
2826import timber.log.Timber
29- import java.io.ByteArrayOutputStream
3027import java.util.Locale
3128import java.util.concurrent.TimeUnit
3229import javax.inject.Inject
@@ -296,19 +293,18 @@ class IdentityRepository @Inject constructor(
296293 }
297294 }
298295
299- suspend fun fetchTwitterUser (username : String ): Result <TwitterUser > {
296+ suspend fun fetchTwitterUserByUsername (username : String ): Result <TwitterUser > {
300297 val request = GetTwitterUserRequest .newBuilder()
301298 .setUsername(username)
302299 .build()
303300
304301 return try {
305- Timber .d(" fetchTwitterUser" )
306302 networkOracle.managedRequest(identityApi.fetchTwitterUser(request))
307303 .map { response ->
308304 when (response.result) {
309305 IdentityService .GetTwitterUserResponse .Result .OK -> {
310306 Timber .d(" user ok" )
311- val user = TwitterUser .invoke(response)
307+ val user = TwitterUser .invoke(response.twitterUser )
312308 if (user == null ) {
313309 val error =
314310 Throwable (" Error: failed to parse twitter user." )
@@ -345,4 +341,53 @@ class IdentityRepository @Inject constructor(
345341 Result .failure(e)
346342 }
347343 }
344+
345+ suspend fun fetchTwitterUserByAddress (address : PublicKey ): Result <TwitterUser > {
346+ val request = GetTwitterUserRequest .newBuilder()
347+ .setTipAddress(address.byteArray.toSolanaAccount())
348+ .build()
349+
350+ return try {
351+ networkOracle.managedRequest(identityApi.fetchTwitterUser(request))
352+ .map { response ->
353+ when (response.result) {
354+ IdentityService .GetTwitterUserResponse .Result .OK -> {
355+ Timber .d(" user ok" )
356+ val user = TwitterUser .invoke(response.twitterUser)
357+ if (user == null ) {
358+ val error =
359+ Throwable (" Error: failed to parse twitter user." )
360+ ErrorUtils .handleError(error)
361+ Result .failure(error)
362+ } else {
363+ Timber .d(" user found" )
364+ Result .success(user)
365+ }
366+ }
367+
368+ IdentityService .GetTwitterUserResponse .Result .NOT_FOUND -> {
369+ val error = Throwable (" Error: user for address not found." )
370+ ErrorUtils .handleError(error)
371+ Result .failure(error)
372+ }
373+
374+ IdentityService .GetTwitterUserResponse .Result .UNRECOGNIZED -> {
375+ val error = Throwable (" Error: fetchTwitterUser Unrecognized request." )
376+ ErrorUtils .handleError(error)
377+ Result .failure(error)
378+ }
379+
380+ else -> {
381+ val error = Throwable (" Error: fetchTwitterUser Unknown" )
382+ ErrorUtils .handleError(error)
383+ Result .failure(error)
384+ }
385+ }
386+ }.first()
387+ } catch (e: Exception ) {
388+ e.printStackTrace()
389+ ErrorUtils .handleError(e)
390+ Result .failure(e)
391+ }
392+ }
348393}
0 commit comments