Add logic

This commit is contained in:
Thomas 2020-09-20 12:06:38 +02:00
parent 0c6c5c813f
commit 7c40060438
4 changed files with 85 additions and 5 deletions

View File

@ -60,19 +60,29 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.MergingMediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.source.SingleSampleMediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.PlayerControlView;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import org.jetbrains.annotations.NotNull;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
@ -111,6 +121,7 @@ import app.fedilab.fedilabtube.webview.MastalabWebViewClient;
import es.dmoral.toasty.Toasty;
import static app.fedilab.fedilabtube.helper.Helper.getAttColor;
import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance;
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST;
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST_FOR_VIDEO;
@ -142,7 +153,6 @@ public class PeertubeActivity extends AppCompatActivity {
private boolean playInMinimized;
private boolean onStopCalled;
private List<Caption> captions;
private String captionValue;
public static void hideKeyboard(Activity activity) {
if (activity != null && activity.getWindow() != null) {
@ -684,7 +694,45 @@ public class PeertubeActivity extends AppCompatActivity {
}
}
dialogBuilder.setSingleChoiceItems(itemsLabelLanguage, i, (dialog, which) -> {
captionValue = itemsKeyLanguage[which];
Uri uri = Uri.parse("https://" + getLiveInstance(PeertubeActivity.this) + captions.get(which).getCaptionPath());
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
long position = player.getCurrentPosition();
if (player != null)
player.release();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this, trackSelector);
ProgressiveMediaSource videoSource;
MediaSource subtitleSource;
Format subtitleFormat = Format.createTextSampleFormat(
null,
MimeTypes.APPLICATION_SUBRIP,
Format.NO_VALUE,
"en");
if (video_cache == 0) {
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
Util.getUserAgent(PeertubeActivity.this, null), null);
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
subtitleSource = new SingleSampleMediaSource(uri, dataSourceFactory, subtitleFormat, C.TIME_UNSET);
} else {
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
subtitleSource = new SingleSampleMediaSource(uri, cacheDataSourceFactory, subtitleFormat, C.TIME_UNSET);
}
MergingMediaSource mergedSource =
new MergingMediaSource(videoSource, subtitleSource);
playerView.setPlayer(player);
player.prepare(mergedSource);
player.seekTo(0, position);
player.setPlayWhenReady(true);
});
dialogBuilder.setOnDismissListener(dialogInterface -> {
@ -748,6 +796,7 @@ public class PeertubeActivity extends AppCompatActivity {
change();
}
public void manageVIewComment(APIResponse apiResponse) {
if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 501)) {
if (apiResponse == null)

View File

@ -45,6 +45,7 @@ public class APIResponse {
private List<Instance> instances;
private String stringData;
private int statusCode;
private String captionText;
public List<Account> getAccounts() {
return accounts;
@ -180,4 +181,12 @@ public class APIResponse {
public void setCaptions(List<Caption> captions) {
this.captions = captions;
}
public String getCaptionText() {
return captionText;
}
public void setCaptionText(String captionText) {
this.captionText = captionText;
}
}

View File

@ -21,7 +21,6 @@ import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.text.Html;
import android.text.SpannableString;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
@ -1010,7 +1009,6 @@ public class PeertubeAPI {
apiResponse = new APIResponse();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/videos/%s/captions", videoId)), 60, null, prefKeyOauthTokenT);
Log.v(Helper.TAG, "response: " + response);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
List<Caption> captions = parseCaption(jsonArray);
apiResponse.setCaptions(captions);

View File

@ -25,6 +25,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import app.fedilab.fedilabtube.client.APIResponse;
import app.fedilab.fedilabtube.client.HttpsConnection;
import app.fedilab.fedilabtube.client.PeertubeAPI;
@ -41,6 +42,12 @@ public class CaptionsVM extends AndroidViewModel {
return apiResponseMutableLiveData;
}
public LiveData<APIResponse> loadCaption(String url) {
apiResponseMutableLiveData = new MutableLiveData<>();
load(url);
return apiResponseMutableLiveData;
}
private void loadCaptions(String videoId) {
Context _mContext = getApplication().getApplicationContext();
new Thread(() -> {
@ -55,4 +62,21 @@ public class CaptionsVM extends AndroidViewModel {
}
}).start();
}
private void load(String url) {
Context _mContext = getApplication().getApplicationContext();
new Thread(() -> {
try {
String captionText = new HttpsConnection(_mContext).get(url);
APIResponse apiResponse = new APIResponse();
apiResponse.setCaptionText(captionText);
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse);
mainHandler.post(myRunnable);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}