diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dbd82d3b..ad3f728a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -89,6 +89,7 @@ jobs: sed -i '$a\RELEASE_KEY_ALIAS=TVBoxOSC' ./gradle.properties sed -i '$a\RELEASE_STORE_PASSWORD=TVBoxOSC' ./gradle.properties sed -i '$a\RELEASE_KEY_PASSWORD=TVBoxOSC' ./gradle.properties + sed -i 's/^#\(org.gradle.jvmargs=.*\)/\1/' ./gradle.properties - uses: actions/setup-java@v4 if: ${{ matrix.java_ver }} with: @@ -145,18 +146,6 @@ jobs: if: ${{ inputs.donotpublish && env.commit }} run: | echo "commit=" >> $GITHUB_ENV - - name: Release and Upload Assets - uses: ncipollo/release-action@v1 - if: ${{ env.commit }} - with: - name: ${{ env.tag }} - tag: ${{ env.tag }} - bodyFile: TVBoxOSC/apk/${{ matrix.userName }}-Release.log - allowUpdates: true - removeArtifacts: true - artifacts: | - TVBoxOSC/apk/*.apk - TVBoxOSC/apk/sourceCode-${{ env.commitS }}.* clean: needs: build runs-on: ubuntu-latest @@ -167,4 +156,4 @@ jobs: token: ${{ github.token }} repository: ${{ github.repository }} retain_days: 14 - keep_minimum_runs: 10 + keep_minimum_runs: 10 \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java b/app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java index 46f64e1d..4ba0086e 100644 --- a/app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java +++ b/app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java @@ -88,18 +88,38 @@ public class SourceViewModel extends ViewModel { public static final ExecutorService spThreadPool = Executors.newSingleThreadExecutor(); + //homeContent缓存,最多存储5个sourceKey的AbsSortXml对象 + private static Map sortCache = new LinkedHashMap(5, 0.75f, true) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > 5; + } + }; + + // homeContent - public void getSort(String sourceKey) { + public void getSort(final String sourceKey) { + LOG.i("echo--getSort-start"); if (sourceKey == null) { sortResult.postValue(null); return; } + + // 优先检查缓存 + AbsSortXml cached = sortCache.get(sourceKey); + if (cached != null) { + LOG.i("echo--getSort-cached--"+sourceKey); + sortResult.postValue(cached); + return; + } + SourceBean sourceBean = ApiConfig.get().getSource(sourceKey); if(sourceBean.getName().length()<=3 && sourceBean.getName().endsWith("搜")){ sortResult.postValue(null); return; } - int type = sourceBean.getType(); + + final int type = sourceBean.getType(); if (type == 3) { Runnable waitResponse = new Runnable() { @Override @@ -123,23 +143,26 @@ public class SourceViewModel extends ViewModel { e.printStackTrace(); } finally { if (sortJson != null) { - AbsSortXml sortXml = sortJson(sortResult, sortJson); + final AbsSortXml sortXml = sortJson(sortResult, sortJson); if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) { AbsXml absXml = json(null, sortJson, sourceBean.getKey()); if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) { sortXml.videoList = absXml.movie.videoList; sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } else { getHomeRecList(sourceBean, null, new HomeRecCallback() { @Override public void done(List videos) { sortXml.videoList = videos; sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } }); } } else { sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } } else { sortResult.postValue(null); @@ -181,16 +204,18 @@ public class SourceViewModel extends ViewModel { for (Movie.Video vod : sortXml.list.videoList) { ids.add(vod.id); } - AbsSortXml finalSortXml = sortXml; + final AbsSortXml finalSortXml = sortXml; getHomeRecList(sourceBean, ids, new HomeRecCallback() { @Override public void done(List videos) { finalSortXml.videoList = videos; sortResult.postValue(finalSortXml); + sortCache.put(sourceKey, finalSortXml); } }); } else { sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } } @@ -222,23 +247,26 @@ public class SourceViewModel extends ViewModel { public void onSuccess(Response response) { String sortJson = response.body(); if (sortJson != null) { - AbsSortXml sortXml = sortJson(sortResult, sortJson); + final AbsSortXml sortXml = sortJson(sortResult, sortJson); if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) { AbsXml absXml = json(null, sortJson, sourceBean.getKey()); if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) { sortXml.videoList = absXml.movie.videoList; sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } else { getHomeRecList(sourceBean, null, new HomeRecCallback() { @Override public void done(List videos) { sortXml.videoList = videos; sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } }); } } else { sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } } else { sortResult.postValue(null); @@ -265,16 +293,18 @@ public class SourceViewModel extends ViewModel { @Override public void onResponse(@NonNull Call call, @NonNull okhttp3.Response response) throws IOException { assert response.body() != null; - String sortJson = response.body().string(); - AbsSortXml sortXml = sortJson(sortResult, sortJson); + String sortJson = response.body().string(); + final AbsSortXml sortXml = sortJson(sortResult, sortJson); if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) { AbsXml absXml = json(null, sortJson, sourceBean.getKey()); if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) { sortXml.videoList = absXml.movie.videoList; sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } } else { sortResult.postValue(sortXml); + sortCache.put(sourceKey, sortXml); } } }); @@ -288,6 +318,7 @@ public class SourceViewModel extends ViewModel { } // categoryContent public void getList(MovieSort.SortData sortData, int page) { + LOG.i("getList:"); SourceBean homeSourceBean = ApiConfig.get().getHomeSourceBean(); int type = homeSourceBean.getType(); if (type == 3) { diff --git a/gradle.properties b/gradle.properties index 8e1f9a6b..e86424f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,6 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -#org.gradle.jvmargs=-Xmx2048m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects @@ -18,4 +17,4 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true IsDebug=true -#org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED +org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED