Browse Source

增加超时时间注解功能

zk 1 year ago
parent
commit
e79df258a2

+ 12 - 0
app/src/main/java/com/atmob/voiceai/data/api/AtmobApi.java

@@ -23,7 +23,9 @@ import com.atmob.voiceai.data.api.response.VoiceHistoryResponse;
 import com.atmob.voiceai.data.api.response.VoiceInfoResponse;
 import com.atmob.voiceai.data.api.response.VoiceListResponse;
 import com.atmob.voiceai.data.api.response.VoiceTypeResponse;
+import com.atmob.voiceai.data.api.timeout.ConnectionTime;
 
+import atmob.okhttp3.RequestBody;
 import atmob.reactivex.rxjava3.core.Single;
 import atmob.retrofit2.http.Body;
 import atmob.retrofit2.http.POST;
@@ -37,6 +39,7 @@ public interface AtmobApi {
     @POST("/project/voice/v1/voice/type")
     Single<BaseResponse<VoiceTypeResponse>> getVoiceType(@Body BaseRequest request);
 
+
     @POST("/project/voice/v1/voice/list")
     Single<BaseResponse<VoiceListResponse>> getVoiceList(@Body VoiceListRequest request);
 
@@ -64,4 +67,13 @@ public interface AtmobApi {
 
     @POST("/project/voice/v1/member/subscription/resume")
     Single<BaseResponse<Object>> subscriptionResume(@Body SubResumeRequest request);
+
+    @ConnectionTime(connectionTimeOut = 25, readTimeout = 25)
+    @POST("/project/voice/v1/voice/textToSpeech")
+    Single<BaseResponse<TextToSpeechResponse>> textToSpeech(@Body TextTosSpeechRequest request);
+
+
+    @ConnectionTime(connectionTimeOut = 25, writeTimeout = 120)
+    @POST("/project/voice/v1/voice/clone")
+    Single<BaseResponse<VoiceCloneResponse>> voiceClone(@Body RequestBody requestBody);
 }

+ 0 - 27
app/src/main/java/com/atmob/voiceai/data/api/GenerateApi.java

@@ -1,27 +0,0 @@
-package com.atmob.voiceai.data.api;
-
-import com.atmob.app.lib.base.BaseResponse;
-import com.atmob.voiceai.data.api.request.TextTosSpeechRequest;
-import com.atmob.voiceai.data.api.request.VoiceCloneRequest;
-import com.atmob.voiceai.data.api.response.TextToSpeechResponse;
-import com.atmob.voiceai.data.api.response.VoiceCloneResponse;
-
-import atmob.okhttp3.MultipartBody;
-import atmob.okhttp3.RequestBody;
-import atmob.reactivex.rxjava3.core.Single;
-import atmob.retrofit2.http.Body;
-import atmob.retrofit2.http.Multipart;
-import atmob.retrofit2.http.POST;
-import atmob.retrofit2.http.Part;
-
-public interface GenerateApi {
-
-
-    @POST("/project/voice/v1/voice/textToSpeech")
-    Single<BaseResponse<TextToSpeechResponse>> textToSpeech(@Body TextTosSpeechRequest request);
-
-
-    @POST("/project/voice/v1/voice/clone")
-    Single<BaseResponse<VoiceCloneResponse>> voiceClone(@Body RequestBody requestBody);
-
-}

+ 18 - 0
app/src/main/java/com/atmob/voiceai/data/api/timeout/ConnectionTime.java

@@ -0,0 +1,18 @@
+package com.atmob.voiceai.data.api.timeout;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface ConnectionTime {
+
+    int connectionTimeOut() default 10;
+
+    int readTimeout() default 10;
+
+    int writeTimeout() default 10;
+}

+ 38 - 0
app/src/main/java/com/atmob/voiceai/data/api/timeout/TimeoutInterceptor.java

@@ -0,0 +1,38 @@
+package com.atmob.voiceai.data.api.timeout;
+
+import androidx.annotation.NonNull;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.concurrent.TimeUnit;
+
+import atmob.okhttp3.Interceptor;
+import atmob.okhttp3.OkHttpClient;
+import atmob.okhttp3.Request;
+import atmob.okhttp3.Response;
+import atmob.retrofit2.Invocation;
+
+public class TimeoutInterceptor implements Interceptor {
+    @NonNull
+    @Override
+    public Response intercept(@NonNull Chain chain) throws IOException {
+        Request request = chain.request();
+        Invocation invocation = request.tag(Invocation.class);
+        Chain newChain = chain;
+        if (invocation != null) {
+            Method method = invocation.method();
+
+            ConnectionTime connectionTime = method.getAnnotation(ConnectionTime.class);
+            if (connectionTime != null) {
+                int connectTimeout = connectionTime.readTimeout();
+                int readTimeout = connectionTime.readTimeout();
+                int writeTimeout = connectionTime.writeTimeout();
+                newChain = chain
+                        .withConnectTimeout(connectTimeout, TimeUnit.SECONDS)
+                        .withReadTimeout(readTimeout, TimeUnit.SECONDS)
+                        .withWriteTimeout(writeTimeout, TimeUnit.SECONDS);
+            }
+        }
+        return newChain.proceed(request);
+    }
+}

+ 2 - 14
app/src/main/java/com/atmob/voiceai/data/repositories/CloneRepository.java

@@ -1,18 +1,12 @@
 package com.atmob.voiceai.data.repositories;
 
 
-import android.net.Uri;
-import android.text.TextUtils;
-
 import androidx.annotation.IntDef;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 
 import com.atmob.app.lib.handler.RxHttpHandler;
-import com.atmob.app.lib.livedata.SingleLiveEvent;
-import com.atmob.common.runtime.ContextUtil;
 import com.atmob.voiceai.data.api.AtmobApi;
-import com.atmob.voiceai.data.api.GenerateApi;
 import com.atmob.voiceai.data.api.bean.CloneVoiceListBean;
 import com.atmob.voiceai.data.api.request.BaseRequest;
 import com.atmob.voiceai.data.api.request.CloneDeleteRequest;
@@ -20,17 +14,13 @@ import com.atmob.voiceai.data.api.request.VoiceCloneRequest;
 import com.atmob.voiceai.data.api.response.VoiceCloneListResponse;
 import com.atmob.voiceai.data.api.response.VoiceCloneResponse;
 import com.atmob.voiceai.helper.ErrorHelper;
-import com.atmob.voiceai.utils.FileUtils;
 import com.atmob.voiceai.utils.ReflectionUtil;
 import com.atmob.voiceai.utils.ToastUtil;
-import com.google.gson.Gson;
 import com.google.gson.annotations.SerializedName;
 
 import java.io.File;
 import java.lang.reflect.Field;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
@@ -51,7 +41,6 @@ public class CloneRepository {
 
     private final AtmobApi atmobApi;
     private final VoiceAIRepository voiceAIRepository;
-    private final GenerateApi generateApi;
 
     private final MutableLiveData<List<CloneVoiceListBean>> cloneVoiceList = new MutableLiveData<>();
     private final MutableLiveData<Integer> cloneUploadState = new MutableLiveData<>();
@@ -67,9 +56,8 @@ public class CloneRepository {
     }
 
     @Inject
-    public CloneRepository(AtmobApi atmobApi, GenerateApi generateApi, VoiceAIRepository voiceAIRepository) {
+    public CloneRepository(AtmobApi atmobApi, VoiceAIRepository voiceAIRepository) {
         this.atmobApi = atmobApi;
-        this.generateApi = generateApi;
         this.voiceAIRepository = voiceAIRepository;
         refreshCloneList();
     }
@@ -176,7 +164,7 @@ public class CloneRepository {
         builder.addFormDataPart("file", file.getName(), fileRQ);
         builder.setType(MultipartBody.FORM);
         RequestBody body = builder.build();
-        return generateApi.voiceClone(body)
+        return atmobApi.voiceClone(body)
                 .compose(RxHttpHandler.handle(false))
                 .compose(RxJavaUtil.SingleSchedule.io2Main())
                 .doOnSuccess(response -> {

+ 2 - 11
app/src/main/java/com/atmob/voiceai/data/repositories/VoiceAIRepository.java

@@ -1,8 +1,6 @@
 package com.atmob.voiceai.data.repositories;
 
 
-import android.util.Pair;
-
 import androidx.annotation.IntDef;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
@@ -12,7 +10,6 @@ import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.runtime.ContextUtil;
 import com.atmob.voiceai.R;
 import com.atmob.voiceai.data.api.AtmobApi;
-import com.atmob.voiceai.data.api.GenerateApi;
 import com.atmob.voiceai.data.api.bean.UserVoiceBean;
 import com.atmob.voiceai.data.api.bean.VoiceListBean;
 import com.atmob.voiceai.data.api.request.BaseRequest;
@@ -24,10 +21,6 @@ import com.atmob.voiceai.data.api.response.VoiceListResponse;
 import com.atmob.voiceai.data.api.response.VoiceTypeResponse;
 import com.atmob.voiceai.utils.BoxingUtil;
 import com.atmob.voiceai.utils.ThreePair;
-import com.atmob.voiceai.utils.ToastUtil;
-
-import java.util.ArrayList;
-import java.util.List;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -43,7 +36,6 @@ public class VoiceAIRepository {
 
 
     private final AtmobApi atmobApi;
-    private final GenerateApi generateApi;
     private final HistoryRepository historyRepository;
     private final MemberRepository memberRepository;
 
@@ -70,9 +62,8 @@ public class VoiceAIRepository {
     }
 
     @Inject
-    public VoiceAIRepository(AtmobApi atmobApi, GenerateApi generateApi, MemberRepository memberRepository, HistoryRepository historyRepository) {
+    public VoiceAIRepository(AtmobApi atmobApi, MemberRepository memberRepository, HistoryRepository historyRepository) {
         this.atmobApi = atmobApi;
-        this.generateApi = generateApi;
         this.memberRepository = memberRepository;
         this.historyRepository = historyRepository;
         refreshVoiceInfo();
@@ -204,7 +195,7 @@ public class VoiceAIRepository {
     }
 
     private Single<TextToSpeechResponse> textToSpeech(int id, int voiceType, String content) {
-        return generateApi.textToSpeech(new TextTosSpeechRequest(id, voiceType, content))
+        return atmobApi.textToSpeech(new TextTosSpeechRequest(id, voiceType, content))
                 .compose(RxHttpHandler.handle(true))
                 .compose(RxJavaUtil.SingleSchedule.io2Main())
                 .doOnSuccess(data -> {

+ 5 - 18
app/src/main/java/com/atmob/voiceai/di/NetworkModule.java

@@ -3,7 +3,7 @@ package com.atmob.voiceai.di;
 import com.atmob.network.okhttp.AtmobOkHttpClient;
 import com.atmob.voiceai.BuildConfig;
 import com.atmob.voiceai.data.api.AtmobApi;
-import com.atmob.voiceai.data.api.GenerateApi;
+import com.atmob.voiceai.data.api.timeout.TimeoutInterceptor;
 import com.atmob.voiceai.data.consts.Constants;
 import com.google.gson.Gson;
 
@@ -28,7 +28,10 @@ public class NetworkModule {
     @Singleton
     @Provides
     public static AtmobApi provideAtmobApi(Gson gson) {
-        OkHttpClient okHttpClient = AtmobOkHttpClient.newInstance(ATMOB_TAG, BuildConfig.DEBUG);
+        OkHttpClient okHttpClient = AtmobOkHttpClient.newInstance(ATMOB_TAG, BuildConfig.DEBUG)
+                .newBuilder()
+                .addInterceptor(new TimeoutInterceptor())
+                .build();
         return new Retrofit.Builder()
                 .client(okHttpClient)
                 .addConverterFactory(GsonConverterFactory.create(gson))
@@ -38,22 +41,6 @@ public class NetworkModule {
                 .create(AtmobApi.class);
     }
 
-    @Singleton
-    @Provides
-    public static GenerateApi provideGenerateApi(Gson gson) {
-        OkHttpClient okHttpClient = AtmobOkHttpClient.newInstance(ATMOB_TAG, BuildConfig.DEBUG).newBuilder()
-                .connectTimeout(25, TimeUnit.SECONDS)
-                .readTimeout(15, TimeUnit.SECONDS)
-                .writeTimeout(15, TimeUnit.SECONDS)
-                .build();
-        return new Retrofit.Builder()
-                .client(okHttpClient)
-                .addConverterFactory(GsonConverterFactory.create(gson))
-                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
-                .baseUrl(Constants.Atmob_Server_Base_URL)
-                .build()
-                .create(GenerateApi.class);
-    }
 
     @Singleton
     @Provides