Merge remote-tracking branch 'origin/master'

This commit is contained in:
Balazs Toldi 2024-01-04 11:04:26 +01:00
commit 6d23f4e13d
No known key found for this signature in database
GPG Key ID: 6C7D440036F99D58
51 changed files with 484 additions and 616 deletions

View File

@ -1,129 +0,0 @@
package eu.toldi.infinityforlemmy;
import android.os.Handler;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.apis.GfycatAPI;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.utils.JSONUtils;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
public class FetchGfycatOrRedgifsVideoLinks {
public interface FetchGfycatOrRedgifsVideoLinksListener {
void success(String webm, String mp4);
void failed(int errorCode);
}
public static void fetchGfycatVideoLinks(Executor executor, Handler handler, Retrofit gfycatRetrofit,
String gfycatId,
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
executor.execute(() -> {
try {
Response<String> response = gfycatRetrofit.create(GfycatAPI.class).getGfycatData(gfycatId).execute();
if (response.isSuccessful()) {
parseGfycatVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
} else {
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
}
} catch (IOException e) {
e.printStackTrace();
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
}
});
}
public static void fetchRedgifsVideoLinks(Executor executor, Handler handler, Retrofit redgifsRetrofit,
String gfycatId,
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
executor.execute(() -> {
try {
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(gfycatId).execute();
if (response.isSuccessful()) {
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
} else {
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
}
} catch (IOException e) {
e.printStackTrace();
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
}
});
}
public static void fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(Executor executor, Handler handler,
Call<String> gfycatCall,
boolean isGfycatVideo,
boolean automaticallyTryRedgifs,
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
executor.execute(() -> {
try {
Response<String> response = gfycatCall.execute();
if (response.isSuccessful()) {
if (isGfycatVideo) {
parseGfycatVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
} else {
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
}
} else {
if (response.code() == 404 && isGfycatVideo && automaticallyTryRedgifs) {
fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(executor, handler, gfycatCall.clone(),
false, false, fetchGfycatOrRedgifsVideoLinksListener);
} else {
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
}
}
} catch (IOException e) {
e.printStackTrace();
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
}
});
}
private static void parseGfycatVideoLinks(Handler handler, String response,
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
try {
JSONObject jsonObject = new JSONObject(response);
String mp4 = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).has(JSONUtils.MP4_URL_KEY) ?
jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getString(JSONUtils.MP4_URL_KEY)
: jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY)
.getJSONObject(JSONUtils.CONTENT_URLS_KEY)
.getJSONObject(JSONUtils.MP4_KEY)
.getString(JSONUtils.URL_KEY);
String webm;
if (jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).has(JSONUtils.WEBM_URL_KEY)) {
webm = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getString(JSONUtils.WEBM_URL_KEY);
} else if (jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getJSONObject(JSONUtils.CONTENT_URLS_KEY).has(JSONUtils.WEBM_KEY)) {
webm = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY)
.getJSONObject(JSONUtils.CONTENT_URLS_KEY)
.getJSONObject(JSONUtils.WEBM_KEY)
.getString(JSONUtils.URL_KEY);
} else {
webm = mp4;
}
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.success(webm, mp4));
} catch (JSONException e) {
e.printStackTrace();
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
}
}
private static void parseRedgifsVideoLinks(Handler handler, String response,
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
try {
String mp4 = new JSONObject(response).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.URLS_KEY)
.getString(JSONUtils.HD_KEY);
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.success(mp4, mp4));
} catch (JSONException e) {
e.printStackTrace();
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
}
}
}

View File

@ -0,0 +1,71 @@
package eu.toldi.infinityforlemmy;
import android.os.Handler;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.concurrent.Executor;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.utils.JSONUtils;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
public class FetchRedgifsVideoLinks {
public interface FetchRedgifsVideoLinksListener {
void success(String webm, String mp4);
void failed(int errorCode);
}
public static void fetchRedgifsVideoLinks(Executor executor, Handler handler, Retrofit redgifsRetrofit,
String redgifsId,
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
executor.execute(() -> {
try {
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(redgifsId).execute();
if (response.isSuccessful()) {
parseRedgifsVideoLinks(handler, response.body(), fetchRedgifsVideoLinksListener);
} else {
handler.post(() -> fetchRedgifsVideoLinksListener.failed(response.code()));
}
} catch (IOException e) {
e.printStackTrace();
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
}
});
}
public static void fetchRedgifsVideoLinksInRecyclerViewAdapter(Executor executor, Handler handler,
Call<String> redgifsCall,
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
executor.execute(() -> {
try {
Response<String> response = redgifsCall.execute();
if (response.isSuccessful()) {
parseRedgifsVideoLinks(handler, response.body(), fetchRedgifsVideoLinksListener);
} else {
handler.post(() -> fetchRedgifsVideoLinksListener.failed(response.code()));
}
} catch (IOException e) {
e.printStackTrace();
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
}
});
}
private static void parseRedgifsVideoLinks(Handler handler, String response,
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
try {
String mp4 = new JSONObject(response).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.URLS_KEY)
.getString(JSONUtils.HD_KEY);
handler.post(() -> fetchRedgifsVideoLinksListener.success(mp4, mp4));
} catch (JSONException e) {
e.printStackTrace();
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
}
}
}

View File

@ -143,15 +143,6 @@ abstract class NetworkModule {
.build(); .build();
} }
@Provides
@Named("gfycat")
@Singleton
static Retrofit provideGfycatRetrofit(@Named("base") RetrofitHolder retrofit) {
return retrofit.getRetrofit().newBuilder()
.baseUrl(APIUtils.GFYCAT_API_BASE_URI)
.build();
}
@Provides @Provides
@Named("RedgifsAccessTokenAuthenticator") @Named("RedgifsAccessTokenAuthenticator")
static Interceptor redgifsAccessTokenAuthenticator(@Named("current_account") SharedPreferences currentAccountSharedPreferences) { static Interceptor redgifsAccessTokenAuthenticator(@Named("current_account") SharedPreferences currentAccountSharedPreferences) {

View File

@ -9,6 +9,7 @@ import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.post.enrich.CompositePostEnricher; import eu.toldi.infinityforlemmy.post.enrich.CompositePostEnricher;
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher; import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
import eu.toldi.infinityforlemmy.post.enrich.RedGifsPostEnricher; import eu.toldi.infinityforlemmy.post.enrich.RedGifsPostEnricher;
import eu.toldi.infinityforlemmy.post.enrich.VideoPostEnricher;
@Module @Module
abstract class PostEnricherModule { abstract class PostEnricherModule {
@ -19,6 +20,12 @@ abstract class PostEnricherModule {
return new RedGifsPostEnricher(redgifsAPI); return new RedGifsPostEnricher(redgifsAPI);
} }
@Provides
@IntoSet
static PostEnricher provideVideoPostEnricher() {
return new VideoPostEnricher();
}
@Provides @Provides
static PostEnricher providePostEnricher(Set<PostEnricher> postEnrichers) { static PostEnricher providePostEnricher(Set<PostEnricher> postEnrichers) {
return new CompositePostEnricher(postEnrichers); return new CompositePostEnricher(postEnrichers);

View File

@ -55,7 +55,6 @@ public class LinkResolverActivity extends AppCompatActivity {
private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?"; private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?";
private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?"; private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?";
private static final String REDD_IT_POST_PATTERN = "/\\w+/?"; private static final String REDD_IT_POST_PATTERN = "/\\w+/?";
private static final String GFYCAT_PATTERN = "(/i?fr)?/[\\w-]+$";
private static final String REDGIFS_PATTERN = "/watch/[\\w-]+$"; private static final String REDGIFS_PATTERN = "/watch/[\\w-]+$";
private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?"; private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?";
private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?"; private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?";
@ -346,20 +345,10 @@ public class LinkResolverActivity extends AppCompatActivity {
if (path.startsWith("/CL0/")) { if (path.startsWith("/CL0/")) {
handleUri(Uri.parse(path.substring("/CL0/".length()))); handleUri(Uri.parse(path.substring("/CL0/".length())));
} }
} else if (authority.contains("gfycat.com")) {
if (path.matches(GFYCAT_PATTERN)) {
Intent intent = new Intent(this, ViewVideoActivity.class);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, path.substring(path.lastIndexOf("/") + 1));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, getIntent().getBooleanExtra(EXTRA_IS_NSFW, false));
startActivity(intent);
} else {
deepLinkError(uri);
}
} else if (authority.contains("redgifs.com")) { } else if (authority.contains("redgifs.com")) {
if (path.matches(REDGIFS_PATTERN)) { if (path.matches(REDGIFS_PATTERN)) {
Intent intent = new Intent(this, ViewVideoActivity.class); Intent intent = new Intent(this, ViewVideoActivity.class);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, path.substring(path.lastIndexOf("/") + 1)); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, path.substring(path.lastIndexOf("/") + 1));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, true); intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, true);
startActivity(intent); startActivity(intent);

View File

@ -68,7 +68,6 @@ import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.video.VideoSize; import com.google.android.exoplayer2.video.VideoSize;
import com.google.android.material.bottomappbar.BottomAppBar; import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.otaliastudios.zoom.ZoomEngine; import com.otaliastudios.zoom.ZoomEngine;
import com.otaliastudios.zoom.ZoomSurfaceView; import com.otaliastudios.zoom.ZoomSurfaceView;
@ -88,7 +87,7 @@ import app.futured.hauler.LockableNestedScrollView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import eu.toldi.infinityforlemmy.CustomFontReceiver; import eu.toldi.infinityforlemmy.CustomFontReceiver;
import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks; import eu.toldi.infinityforlemmy.FetchRedgifsVideoLinks;
import eu.toldi.infinityforlemmy.FetchStreamableVideo; import eu.toldi.infinityforlemmy.FetchStreamableVideo;
import eu.toldi.infinityforlemmy.Infinity; import eu.toldi.infinityforlemmy.Infinity;
import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.R;
@ -133,7 +132,7 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
public static final String EXTRA_POST = "EP"; public static final String EXTRA_POST = "EP";
public static final String EXTRA_PROGRESS_SECONDS = "EPS"; public static final String EXTRA_PROGRESS_SECONDS = "EPS";
public static final String EXTRA_VIDEO_TYPE = "EVT"; public static final String EXTRA_VIDEO_TYPE = "EVT";
public static final String EXTRA_GFYCAT_ID = "EGI"; public static final String EXTRA_REDGIFS_ID = "ERI";
public static final String EXTRA_V_REDD_IT_URL = "EVRIU"; public static final String EXTRA_V_REDD_IT_URL = "EVRIU";
public static final String EXTRA_STREAMABLE_SHORT_CODE = "ESSC"; public static final String EXTRA_STREAMABLE_SHORT_CODE = "ESSC";
public static final String EXTRA_IS_NSFW = "EIN"; public static final String EXTRA_IS_NSFW = "EIN";
@ -142,7 +141,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
public static final int VIDEO_TYPE_V_REDD_IT = 4; public static final int VIDEO_TYPE_V_REDD_IT = 4;
public static final int VIDEO_TYPE_DIRECT = 3; public static final int VIDEO_TYPE_DIRECT = 3;
public static final int VIDEO_TYPE_REDGIFS = 2; public static final int VIDEO_TYPE_REDGIFS = 2;
public static final int VIDEO_TYPE_GFYCAT = 1;
private static final int VIDEO_TYPE_NORMAL = 0; private static final int VIDEO_TYPE_NORMAL = 0;
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0; private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
@ -204,10 +202,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
@Named("no_oauth") @Named("no_oauth")
RetrofitHolder retrofit; RetrofitHolder retrofit;
@Inject
@Named("gfycat")
Retrofit gfycatRetrofit;
@Inject @Inject
@Named("redgifs") @Named("redgifs")
Retrofit redgifsRetrofit; Retrofit redgifsRetrofit;
@ -548,29 +542,21 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
} }
} else if (videoType == VIDEO_TYPE_V_REDD_IT) { } else if (videoType == VIDEO_TYPE_V_REDD_IT) {
loadVReddItVideo(savedInstanceState); loadVReddItVideo(savedInstanceState);
} else if (videoType == VIDEO_TYPE_GFYCAT || videoType == VIDEO_TYPE_REDGIFS) { } else if (videoType == VIDEO_TYPE_REDGIFS) {
if (savedInstanceState != null) { if (savedInstanceState != null) {
videoDownloadUrl = savedInstanceState.getString(VIDEO_DOWNLOAD_URL_STATE); videoDownloadUrl = savedInstanceState.getString(VIDEO_DOWNLOAD_URL_STATE);
} else { } else {
videoDownloadUrl = intent.getStringExtra(EXTRA_VIDEO_DOWNLOAD_URL); videoDownloadUrl = intent.getStringExtra(EXTRA_VIDEO_DOWNLOAD_URL);
} }
String gfycatId = intent.getStringExtra(EXTRA_GFYCAT_ID); String redgifsId = intent.getStringExtra(EXTRA_REDGIFS_ID);
if (gfycatId != null && gfycatId.contains("-")) { if (redgifsId != null && redgifsId.contains("-")) {
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-')); redgifsId = redgifsId.substring(0, redgifsId.indexOf('-'));
}
if (videoType == VIDEO_TYPE_GFYCAT) {
videoFileName = "Gfycat-" + gfycatId + ".mp4";
} else {
videoFileName = "Redgifs-" + gfycatId + ".mp4";
} }
videoFileName = "Redgifs-" + redgifsId + ".mp4";
if (mVideoUri == null) { if (mVideoUri == null) {
if (videoType == VIDEO_TYPE_GFYCAT) { loadRedgifsVideo(redgifsId, savedInstanceState);
loadGfycatOrRedgifsVideo(gfycatRetrofit, gfycatId, true, savedInstanceState, true);
} else {
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false);
}
} else { } else {
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache) dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT)); .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
@ -725,61 +711,28 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
return C.TRACK_TYPE_UNKNOWN; return C.TRACK_TYPE_UNKNOWN;
} }
private void loadGfycatOrRedgifsVideo(Retrofit retrofit, String gfycatId, boolean isGfycatVideo, private void loadRedgifsVideo(String redgifsId, Bundle savedInstanceState) {
Bundle savedInstanceState, boolean needErrorHandling) {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
if (isGfycatVideo) { FetchRedgifsVideoLinks.fetchRedgifsVideoLinks(mExecutor, new Handler(), redgifsRetrofit,
FetchGfycatOrRedgifsVideoLinks.fetchGfycatVideoLinks(mExecutor, new Handler(), retrofit, gfycatId, redgifsId, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() { @Override
@Override public void success(String webm, String mp4) {
public void success(String webm, String mp4) { progressBar.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE); mVideoUri = Uri.parse(webm);
mVideoUri = Uri.parse(webm); videoDownloadUrl = mp4;
videoDownloadUrl = mp4; dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache) .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT)); preparePlayer(savedInstanceState);
preparePlayer(savedInstanceState); player.prepare();
player.prepare(); player.setMediaSource(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(mVideoUri)));
player.setMediaSource(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(mVideoUri))); }
}
@Override @Override
public void failed(int errorCode) { public void failed(int errorCode) {
if (errorCode == 404 && needErrorHandling) { progressBar.setVisibility(View.GONE);
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.AUTOMATICALLY_TRY_REDGIFS, true)) { Toast.makeText(ViewVideoActivity.this, R.string.fetch_redgifs_video_failed, Toast.LENGTH_SHORT).show();
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false); }
} else { });
Snackbar.make(coordinatorLayout, R.string.load_video_in_redgifs, Snackbar.LENGTH_INDEFINITE).setAction(R.string.yes,
view -> loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false)).show();
}
} else {
progressBar.setVisibility(View.GONE);
Toast.makeText(ViewVideoActivity.this, R.string.fetch_gfycat_video_failed, Toast.LENGTH_SHORT).show();
}
}
});
} else {
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(mExecutor, new Handler(), redgifsRetrofit,
gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
@Override
public void success(String webm, String mp4) {
progressBar.setVisibility(View.GONE);
mVideoUri = Uri.parse(webm);
videoDownloadUrl = mp4;
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
preparePlayer(savedInstanceState);
player.prepare();
player.setMediaSource(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(mVideoUri)));
}
@Override
public void failed(int errorCode) {
progressBar.setVisibility(View.GONE);
Toast.makeText(ViewVideoActivity.this, R.string.fetch_redgifs_video_failed, Toast.LENGTH_SHORT).show();
}
});
}
} }
private void loadVReddItVideo(Bundle savedInstanceState) { private void loadVReddItVideo(Bundle savedInstanceState) {
@ -797,30 +750,14 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
postEnricher, new FetchPost.FetchPostListener() { postEnricher, new FetchPost.FetchPostListener() {
@Override @Override
public void fetchPostSuccess(Post post) { public void fetchPostSuccess(Post post) {
if (post.isGfycat()) { if (post.isRedgifs()) {
videoType = VIDEO_TYPE_GFYCAT;
String gfycatId = post.getGfycatId();
if (gfycatId != null && gfycatId.contains("-")) {
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
}
if (videoType == VIDEO_TYPE_GFYCAT) {
videoFileName = "Gfycat-" + gfycatId + ".mp4";
} else {
videoFileName = "Redgifs-" + gfycatId + ".mp4";
}
loadGfycatOrRedgifsVideo(gfycatRetrofit, gfycatId, true, savedInstanceState, true);
} else if (post.isRedgifs()) {
videoType = VIDEO_TYPE_REDGIFS; videoType = VIDEO_TYPE_REDGIFS;
String gfycatId = post.getGfycatId(); String redgifsId = post.getRedgifsId();
if (gfycatId != null && gfycatId.contains("-")) { if (redgifsId != null && redgifsId.contains("-")) {
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-')); redgifsId = redgifsId.substring(0, redgifsId.indexOf('-'));
} }
if (videoType == VIDEO_TYPE_GFYCAT) { videoFileName = "Redgifs-" + redgifsId + ".mp4";
videoFileName = "Gfycat-" + gfycatId + ".mp4"; loadRedgifsVideo(redgifsId, savedInstanceState);
} else {
videoFileName = "Redgifs-" + gfycatId + ".mp4";
}
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false);
} else if (post.isStreamable()) { } else if (post.isStreamable()) {
videoType = VIDEO_TYPE_STREAMABLE; videoType = VIDEO_TYPE_STREAMABLE;
String shortCode = post.getStreamableShortCode(); String shortCode = post.getStreamableShortCode();

View File

@ -58,7 +58,7 @@ import java.util.regex.Pattern;
import javax.inject.Provider; import javax.inject.Provider;
import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks; import eu.toldi.infinityforlemmy.FetchRedgifsVideoLinks;
import eu.toldi.infinityforlemmy.FetchStreamableVideo; import eu.toldi.infinityforlemmy.FetchStreamableVideo;
import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.R;
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
@ -78,7 +78,6 @@ import eu.toldi.infinityforlemmy.activities.ViewRedditGalleryActivity;
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity; import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity; import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity; import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
import eu.toldi.infinityforlemmy.apis.GfycatAPI;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI; import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI; import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon; import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
@ -140,7 +139,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private ViewPostDetailFragment mFragment; private ViewPostDetailFragment mFragment;
private Executor mExecutor; private Executor mExecutor;
private RetrofitHolder mRetrofit; private RetrofitHolder mRetrofit;
private Retrofit mGfycatRetrofit;
private Retrofit mRedgifsRetrofit; private Retrofit mRedgifsRetrofit;
private final Provider<StreamableAPI> mStreamableApiProvider; private final Provider<StreamableAPI> mStreamableApiProvider;
private RedditDataRoomDatabase mRedditDataRoomDatabase; private RedditDataRoomDatabase mRedditDataRoomDatabase;
@ -166,7 +164,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private boolean mMuteAutoplayingVideos; private boolean mMuteAutoplayingVideos;
private double mStartAutoplayVisibleAreaOffset; private double mStartAutoplayVisibleAreaOffset;
private boolean mMuteNSFWVideo; private boolean mMuteNSFWVideo;
private boolean mAutomaticallyTryRedgifs;
private boolean mDataSavingMode; private boolean mDataSavingMode;
private boolean mDisableImagePreview; private boolean mDisableImagePreview;
private boolean mOnlyDisablePreviewInVideoAndGifPosts; private boolean mOnlyDisablePreviewInVideoAndGifPosts;
@ -227,7 +224,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment, public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
Executor executor, CustomThemeWrapper customThemeWrapper, Executor executor, CustomThemeWrapper customThemeWrapper,
RetrofitHolder retrofit, Retrofit gfycatRetrofit, RetrofitHolder retrofit,
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider, Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide, RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
boolean separatePostAndComments, String accessToken, boolean separatePostAndComments, String accessToken,
@ -242,7 +239,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mFragment = fragment; mFragment = fragment;
mExecutor = executor; mExecutor = executor;
mRetrofit = retrofit; mRetrofit = retrofit;
mGfycatRetrofit = gfycatRetrofit;
mRedgifsRetrofit = redgifsRetrofit; mRedgifsRetrofit = redgifsRetrofit;
mStreamableApiProvider = streamableApiProvider; mStreamableApiProvider = streamableApiProvider;
mRedditDataRoomDatabase = redditDataRoomDatabase; mRedditDataRoomDatabase = redditDataRoomDatabase;
@ -335,7 +331,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE, 50) / 100.0; sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE, 50) / 100.0;
mMuteNSFWVideo = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false); mMuteNSFWVideo = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false);
mAutomaticallyTryRedgifs = sharedPreferences.getBoolean(SharedPreferencesUtils.AUTOMATICALLY_TRY_REDGIFS, true);
String dataSavingModeString = sharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); String dataSavingModeString = sharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF);
if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) {
@ -704,45 +699,43 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
((PostDetailBaseVideoAutoplayViewHolder) holder).setVolume((mMuteAutoplayingVideos || (mPost.isNSFW() && mMuteNSFWVideo)) ? 0f : 1f); ((PostDetailBaseVideoAutoplayViewHolder) holder).setVolume((mMuteAutoplayingVideos || (mPost.isNSFW() && mMuteNSFWVideo)) ? 0f : 1f);
} }
if (mPost.isGfycat() || mPost.isRedgifs() && !mPost.isLoadGfycatOrStreamableVideoSuccess()) { if (mPost.isRedgifs() && !mPost.isLoadVideoSuccess()) {
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
mPost.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(mPost.getGfycatId()) : mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(mPost.getRedgifsId());
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(mPost.getGfycatId()); FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
mPost.isGfycat(), mAutomaticallyTryRedgifs,
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
@Override @Override
public void success(String webm, String mp4) { public void success(String webm, String mp4) {
mPost.setVideoDownloadUrl(mp4); mPost.setVideoDownloadUrl(mp4);
mPost.setVideoUrl(mp4); mPost.setVideoUrl(mp4);
mPost.setLoadGfyOrStreamableVideoSuccess(true); mPost.setLoadVideoSuccess(true);
((PostDetailBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(mPost.getVideoUrl())); ((PostDetailBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(mPost.getVideoUrl()));
} }
@Override @Override
public void failed(int errorCode) { public void failed(int errorCode) {
((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
}); });
} else if(mPost.isStreamable() && !mPost.isLoadGfycatOrStreamableVideoSuccess()) { } else if(mPost.isStreamable() && !mPost.isLoadVideoSuccess()) {
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
mStreamableApiProvider.get().getStreamableData(mPost.getStreamableShortCode()); mStreamableApiProvider.get().getStreamableData(mPost.getStreamableShortCode());
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
new FetchStreamableVideo.FetchStreamableVideoListener() { new FetchStreamableVideo.FetchStreamableVideoListener() {
@Override @Override
public void success(StreamableVideo streamableVideo) { public void success(StreamableVideo streamableVideo) {
StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4;
mPost.setVideoDownloadUrl(media.url); mPost.setVideoDownloadUrl(media.url);
mPost.setVideoUrl(media.url); mPost.setVideoUrl(media.url);
mPost.setLoadGfyOrStreamableVideoSuccess(true); mPost.setLoadVideoSuccess(true);
((PostDetailBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(mPost.getVideoUrl())); ((PostDetailBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(mPost.getVideoUrl()));
} }
@Override @Override
public void failed() { public void failed() {
((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
}); });
} else { } else {
@ -1143,11 +1136,11 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
((PostDetailBaseViewHolder) holder).contentMarkdownView.setVisibility(View.GONE); ((PostDetailBaseViewHolder) holder).contentMarkdownView.setVisibility(View.GONE);
if (holder instanceof PostDetailBaseVideoAutoplayViewHolder) { if (holder instanceof PostDetailBaseVideoAutoplayViewHolder) {
if (((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall != null && !((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.isCanceled()) { if (((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall != null && !((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.isCanceled()) {
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.cancel(); ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.cancel();
((PostDetailBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = null; ((PostDetailBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall = null;
} }
((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingGfycatImageView.setVisibility(View.GONE); ((PostDetailBaseVideoAutoplayViewHolder) holder).mErrorLoadingVideoImageView.setVisibility(View.GONE);
((PostDetailBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); ((PostDetailBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE);
if (!((PostDetailBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { if (!((PostDetailBaseVideoAutoplayViewHolder) holder).isManuallyPaused) {
((PostDetailBaseVideoAutoplayViewHolder) holder).resetVolume(); ((PostDetailBaseVideoAutoplayViewHolder) holder).resetVolume();
@ -1778,11 +1771,11 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
} }
class PostDetailBaseVideoAutoplayViewHolder extends PostDetailBaseViewHolder implements ToroPlayer { class PostDetailBaseVideoAutoplayViewHolder extends PostDetailBaseViewHolder implements ToroPlayer {
public Call<String> fetchGfycatOrStreamableVideoCall; public Call<String> fetchStreamableVideoCall;
AspectRatioFrameLayout aspectRatioFrameLayout; AspectRatioFrameLayout aspectRatioFrameLayout;
PlayerView playerView; PlayerView playerView;
GifImageView previewImageView; GifImageView previewImageView;
ImageView mErrorLoadingGfycatImageView; ImageView mErrorLoadingVideoImageView;
ImageView muteButton; ImageView muteButton;
ImageView fullscreenButton; ImageView fullscreenButton;
ImageView pauseButton; ImageView pauseButton;
@ -1815,7 +1808,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
AspectRatioFrameLayout aspectRatioFrameLayout, AspectRatioFrameLayout aspectRatioFrameLayout,
PlayerView playerView, PlayerView playerView,
GifImageView previewImageView, GifImageView previewImageView,
ImageView errorLoadingGfycatImageView, ImageView errorLoadingVideoImageView,
ImageView muteButton, ImageView muteButton,
ImageView fullscreenButton, ImageView fullscreenButton,
ImageView pauseButton, ImageView pauseButton,
@ -1859,7 +1852,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
this.aspectRatioFrameLayout = aspectRatioFrameLayout; this.aspectRatioFrameLayout = aspectRatioFrameLayout;
this.previewImageView = previewImageView; this.previewImageView = previewImageView;
this.mErrorLoadingGfycatImageView = errorLoadingGfycatImageView; this.mErrorLoadingVideoImageView = errorLoadingVideoImageView;
this.playerView = playerView; this.playerView = playerView;
this.muteButton = muteButton; this.muteButton = muteButton;
this.fullscreenButton = fullscreenButton; this.fullscreenButton = fullscreenButton;
@ -1890,17 +1883,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
if (mPost.isImgur()) { if (mPost.isImgur()) {
intent.setData(Uri.parse(mPost.getVideoUrl())); intent.setData(Uri.parse(mPost.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (mPost.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId());
if (mPost.isLoadGfycatOrStreamableVideoSuccess()) {
intent.setData(Uri.parse(mPost.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl());
}
} else if (mPost.isRedgifs()) { } else if (mPost.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, mPost.getRedgifsId());
if (mPost.isLoadGfycatOrStreamableVideoSuccess()) { if (mPost.isLoadVideoSuccess()) {
intent.setData(Uri.parse(mPost.getVideoUrl())); intent.setData(Uri.parse(mPost.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl()); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl());
} }
@ -2095,7 +2081,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
binding.aspectRatioFrameLayoutItemPostDetailVideoAutoplay, binding.aspectRatioFrameLayoutItemPostDetailVideoAutoplay,
binding.playerViewItemPostDetailVideoAutoplay, binding.playerViewItemPostDetailVideoAutoplay,
binding.previewImageViewItemPostDetailVideoAutoplay, binding.previewImageViewItemPostDetailVideoAutoplay,
binding.errorLoadingGfycatImageViewItemPostDetailVideoAutoplay, binding.errorLoadingVideoImageViewItemPostDetailVideoAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
binding.getRoot().findViewById(R.id.exo_pause), binding.getRoot().findViewById(R.id.exo_pause),
@ -2133,7 +2119,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
binding.aspectRatioFrameLayoutItemPostDetailVideoAutoplay, binding.aspectRatioFrameLayoutItemPostDetailVideoAutoplay,
binding.playerViewItemPostDetailVideoAutoplay, binding.playerViewItemPostDetailVideoAutoplay,
binding.previewImageViewItemPostDetailVideoAutoplay, binding.previewImageViewItemPostDetailVideoAutoplay,
binding.errorLoadingGfycatImageViewItemPostDetailVideoAutoplay, binding.errorLoadingVideoImageViewItemPostDetailVideoAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
binding.getRoot().findViewById(R.id.exo_pause), binding.getRoot().findViewById(R.id.exo_pause),
@ -2196,12 +2182,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
if (mPost.isImgur()) { if (mPost.isImgur()) {
intent.setData(Uri.parse(mPost.getVideoUrl())); intent.setData(Uri.parse(mPost.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (mPost.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId());
} else if (mPost.isRedgifs()) { } else if (mPost.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, mPost.getRedgifsId());
} else if (mPost.isStreamable()) { } else if (mPost.isStreamable()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE);
intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode()); intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode());
@ -2382,12 +2365,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
if (mPost != null) { if (mPost != null) {
if (mPost.getPostType() == Post.VIDEO_TYPE) { if (mPost.getPostType() == Post.VIDEO_TYPE) {
Intent intent = new Intent(mActivity, ViewVideoActivity.class); Intent intent = new Intent(mActivity, ViewVideoActivity.class);
if (mPost.isGfycat()) { if (mPost.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId());
} else if (mPost.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, mPost.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, mPost.getRedgifsId());
} else if (mPost.isStreamable()) { } else if (mPost.isStreamable()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE);
intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode()); intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode());

View File

@ -67,7 +67,7 @@ import javax.inject.Provider;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks; import eu.toldi.infinityforlemmy.FetchRedgifsVideoLinks;
import eu.toldi.infinityforlemmy.FetchStreamableVideo; import eu.toldi.infinityforlemmy.FetchStreamableVideo;
import eu.toldi.infinityforlemmy.MarkPostAsReadInterface; import eu.toldi.infinityforlemmy.MarkPostAsReadInterface;
import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.R;
@ -86,7 +86,6 @@ import eu.toldi.infinityforlemmy.activities.ViewRedditGalleryActivity;
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity; import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity; import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity; import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
import eu.toldi.infinityforlemmy.apis.GfycatAPI;
import eu.toldi.infinityforlemmy.apis.RedgifsAPI; import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
import eu.toldi.infinityforlemmy.apis.StreamableAPI; import eu.toldi.infinityforlemmy.apis.StreamableAPI;
import eu.toldi.infinityforlemmy.bottomsheetfragments.ShareLinkBottomSheetFragment; import eu.toldi.infinityforlemmy.bottomsheetfragments.ShareLinkBottomSheetFragment;
@ -171,7 +170,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
private SharedPreferences mCurrentAccountSharedPreferences; private SharedPreferences mCurrentAccountSharedPreferences;
private Executor mExecutor; private Executor mExecutor;
private RetrofitHolder retrofit; private RetrofitHolder retrofit;
private Retrofit mGfycatRetrofit;
private Retrofit mRedgifsRetrofit; private Retrofit mRedgifsRetrofit;
private Provider<StreamableAPI> mStreamableApiProvider; private Provider<StreamableAPI> mStreamableApiProvider;
private String mAccessToken; private String mAccessToken;
@ -236,7 +234,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
private boolean mShowThumbnailOnTheRightInCompactLayout; private boolean mShowThumbnailOnTheRightInCompactLayout;
private double mStartAutoplayVisibleAreaOffset; private double mStartAutoplayVisibleAreaOffset;
private boolean mMuteNSFWVideo; private boolean mMuteNSFWVideo;
private boolean mAutomaticallyTryRedgifs;
private boolean mLongPressToHideToolbarInCompactLayout; private boolean mLongPressToHideToolbarInCompactLayout;
private boolean mCompactLayoutToolbarHiddenByDefault; private boolean mCompactLayoutToolbarHiddenByDefault;
private boolean mDataSavingMode = false; private boolean mDataSavingMode = false;
@ -269,7 +266,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
private RecyclerView.RecycledViewPool mGalleryRecycledViewPool; private RecyclerView.RecycledViewPool mGalleryRecycledViewPool;
public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit, public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit,
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider, Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
CustomThemeWrapper customThemeWrapper, Locale locale, CustomThemeWrapper customThemeWrapper, Locale locale,
String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName, String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences, SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences,
@ -284,7 +281,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
mCurrentAccountSharedPreferences = currentAccountSharedPreferences; mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
mExecutor = executor; mExecutor = executor;
this.retrofit = retrofit; this.retrofit = retrofit;
mGfycatRetrofit = gfycatRetrofit;
mRedgifsRetrofit = redgifsRetrofit; mRedgifsRetrofit = redgifsRetrofit;
mStreamableApiProvider = streamableApiProvider; mStreamableApiProvider = streamableApiProvider;
mAccessToken = accessToken; mAccessToken = accessToken;
@ -316,7 +312,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE, 50) / 100.0; sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE, 50) / 100.0;
mMuteNSFWVideo = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false); mMuteNSFWVideo = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false);
mAutomaticallyTryRedgifs = sharedPreferences.getBoolean(SharedPreferencesUtils.AUTOMATICALLY_TRY_REDGIFS, true);
mLongPressToHideToolbarInCompactLayout = sharedPreferences.getBoolean(SharedPreferencesUtils.LONG_PRESS_TO_HIDE_TOOLBAR_IN_COMPACT_LAYOUT, false); mLongPressToHideToolbarInCompactLayout = sharedPreferences.getBoolean(SharedPreferencesUtils.LONG_PRESS_TO_HIDE_TOOLBAR_IN_COMPACT_LAYOUT, false);
mCompactLayoutToolbarHiddenByDefault = sharedPreferences.getBoolean(SharedPreferencesUtils.POST_COMPACT_LAYOUT_TOOLBAR_HIDDEN_BY_DEFAULT, false); mCompactLayoutToolbarHiddenByDefault = sharedPreferences.getBoolean(SharedPreferencesUtils.POST_COMPACT_LAYOUT_TOOLBAR_HIDDEN_BY_DEFAULT, false);
@ -881,19 +876,17 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
} }
} }
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isRedgifs() && !post.isLoadVideoSuccess()) {
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) : mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getRedgifsId());
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId()); FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
post.isGfycat(), mAutomaticallyTryRedgifs,
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
@Override @Override
public void success(String webm, String mp4) { public void success(String webm, String mp4) {
post.setVideoDownloadUrl(mp4); post.setVideoDownloadUrl(mp4);
post.setVideoUrl(mp4); post.setVideoUrl(mp4);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -902,22 +895,22 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed(int errorCode) { public void failed(int errorCode) {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
} else if (post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) { } else if (post.isStreamable() && !post.isLoadVideoSuccess()) {
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
new FetchStreamableVideo.FetchStreamableVideoListener() { new FetchStreamableVideo.FetchStreamableVideoListener() {
@Override @Override
public void success(StreamableVideo streamableVideo) { public void success(StreamableVideo streamableVideo) {
StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4;
post.setVideoDownloadUrl(media.url); post.setVideoDownloadUrl(media.url);
post.setVideoUrl(media.url); post.setVideoUrl(media.url);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -926,7 +919,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed() { public void failed() {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
@ -1073,19 +1066,17 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
} }
} }
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isRedgifs() && !post.isLoadVideoSuccess()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) : mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getRedgifsId());
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId()); FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
post.isGfycat(), mAutomaticallyTryRedgifs,
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
@Override @Override
public void success(String webm, String mp4) { public void success(String webm, String mp4) {
post.setVideoDownloadUrl(mp4); post.setVideoDownloadUrl(mp4);
post.setVideoUrl(mp4); post.setVideoUrl(mp4);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -1094,22 +1085,22 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed(int errorCode) { public void failed(int errorCode) {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
} else if (post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) { } else if (post.isStreamable() && !post.isLoadVideoSuccess()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
new FetchStreamableVideo.FetchStreamableVideoListener() { new FetchStreamableVideo.FetchStreamableVideoListener() {
@Override @Override
public void success(StreamableVideo streamableVideo) { public void success(StreamableVideo streamableVideo) {
StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4;
post.setVideoDownloadUrl(media.url); post.setVideoDownloadUrl(media.url);
post.setVideoUrl(media.url); post.setVideoUrl(media.url);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -1118,7 +1109,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed() { public void failed() {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
@ -1890,19 +1881,17 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
} }
} }
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isRedgifs() && !post.isLoadVideoSuccess()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) : mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getRedgifsId());
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId()); FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
post.isGfycat(), mAutomaticallyTryRedgifs,
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
@Override @Override
public void success(String webm, String mp4) { public void success(String webm, String mp4) {
post.setVideoDownloadUrl(mp4); post.setVideoDownloadUrl(mp4);
post.setVideoUrl(mp4); post.setVideoUrl(mp4);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -1911,22 +1900,22 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed(int errorCode) { public void failed(int errorCode) {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
} else if (post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) { } else if (post.isStreamable() && !post.isLoadVideoSuccess()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall =
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall, ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall,
new FetchStreamableVideo.FetchStreamableVideoListener() { new FetchStreamableVideo.FetchStreamableVideoListener() {
@Override @Override
public void success(StreamableVideo streamableVideo) { public void success(StreamableVideo streamableVideo) {
StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4;
post.setVideoDownloadUrl(media.url); post.setVideoDownloadUrl(media.url);
post.setVideoUrl(media.url); post.setVideoUrl(media.url);
post.setLoadGfyOrStreamableVideoSuccess(true); post.setLoadVideoSuccess(true);
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl()));
} }
@ -1935,7 +1924,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
@Override @Override
public void failed() { public void failed() {
if (position == holder.getBindingAdapterPosition()) { if (position == holder.getBindingAdapterPosition()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.VISIBLE); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.VISIBLE);
} }
} }
}); });
@ -2551,11 +2540,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
((PostBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); ((PostBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor);
if (holder instanceof PostBaseVideoAutoplayViewHolder) { if (holder instanceof PostBaseVideoAutoplayViewHolder) {
((PostBaseVideoAutoplayViewHolder) holder).mediaUri = null; ((PostBaseVideoAutoplayViewHolder) holder).mediaUri = null;
if (((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall != null && !((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.isCanceled()) { if (((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall != null && !((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.isCanceled()) {
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.cancel(); ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.cancel();
((PostBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = null; ((PostBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall = null;
} }
((PostBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.GONE); ((PostBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.GONE);
((PostBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); ((PostBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE);
if (!((PostBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { if (!((PostBaseVideoAutoplayViewHolder) holder).isManuallyPaused) {
((PostBaseVideoAutoplayViewHolder) holder).resetVolume(); ((PostBaseVideoAutoplayViewHolder) holder).resetVolume();
@ -2581,11 +2570,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setVisibility(View.GONE); ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setVisibility(View.GONE);
} else if (holder instanceof PostCard2BaseVideoAutoplayViewHolder) { } else if (holder instanceof PostCard2BaseVideoAutoplayViewHolder) {
((PostCard2BaseVideoAutoplayViewHolder) holder).mediaUri = null; ((PostCard2BaseVideoAutoplayViewHolder) holder).mediaUri = null;
if (((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall != null && !((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.isCanceled()) { if (((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall != null && !((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.isCanceled()) {
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.cancel(); ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.cancel();
((PostCard2BaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = null; ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall = null;
} }
((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.GONE); ((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.GONE);
((PostCard2BaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); ((PostCard2BaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE);
((PostCard2BaseVideoAutoplayViewHolder) holder).resetVolume(); ((PostCard2BaseVideoAutoplayViewHolder) holder).resetVolume();
mGlide.clear(((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView); mGlide.clear(((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView);
@ -2695,11 +2684,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
((PostMaterial3CardBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); ((PostMaterial3CardBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor);
if (holder instanceof PostMaterial3CardBaseVideoAutoplayViewHolder) { if (holder instanceof PostMaterial3CardBaseVideoAutoplayViewHolder) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).mediaUri = null; ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).mediaUri = null;
if (((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall != null && !((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.isCanceled()) { if (((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall != null && !((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.isCanceled()) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall.cancel(); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall.cancel();
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall = null; ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchStreamableVideoCall = null;
} }
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingGfycatImageView.setVisibility(View.GONE); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.GONE);
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE);
if (!((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { if (!((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).isManuallyPaused) {
((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).resetVolume(); ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).resetVolume();
@ -2822,12 +2811,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
if (post.isImgur()) { if (post.isImgur()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (post.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId());
} else if (post.isRedgifs()) { } else if (post.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, post.getRedgifsId());
} else if (post.isStreamable()) { } else if (post.isStreamable()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE);
intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, post.getStreamableShortCode()); intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, post.getStreamableShortCode());
@ -3546,7 +3532,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
class PostBaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer { class PostBaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer {
AspectRatioFrameLayout aspectRatioFrameLayout; AspectRatioFrameLayout aspectRatioFrameLayout;
GifImageView previewImageView; GifImageView previewImageView;
ImageView errorLoadingGfycatImageView; ImageView errorLoadingVideoImageView;
PlayerView videoPlayer; PlayerView videoPlayer;
ImageView muteButton; ImageView muteButton;
ImageView fullscreenButton; ImageView fullscreenButton;
@ -3559,7 +3545,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
ExoPlayerViewHelper helper; ExoPlayerViewHelper helper;
private Uri mediaUri; private Uri mediaUri;
private float volume; private float volume;
public Call<String> fetchGfycatOrStreamableVideoCall; public Call<String> fetchStreamableVideoCall;
private boolean isManuallyPaused; private boolean isManuallyPaused;
PostBaseVideoAutoplayViewHolder(View rootView, PostBaseVideoAutoplayViewHolder(View rootView,
@ -3581,7 +3567,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
CustomTextView awardsTextView, CustomTextView awardsTextView,
AspectRatioFrameLayout aspectRatioFrameLayout, AspectRatioFrameLayout aspectRatioFrameLayout,
GifImageView previewImageView, GifImageView previewImageView,
ImageView errorLoadingGfycatImageView, ImageView errorLoadingVideoImageView,
PlayerView videoPlayer, PlayerView videoPlayer,
ImageView muteButton, ImageView muteButton,
ImageView fullscreenButton, ImageView fullscreenButton,
@ -3625,7 +3611,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
this.aspectRatioFrameLayout = aspectRatioFrameLayout; this.aspectRatioFrameLayout = aspectRatioFrameLayout;
this.previewImageView = previewImageView; this.previewImageView = previewImageView;
this.errorLoadingGfycatImageView = errorLoadingGfycatImageView; this.errorLoadingVideoImageView = errorLoadingVideoImageView;
this.videoPlayer = videoPlayer; this.videoPlayer = videoPlayer;
this.muteButton = muteButton; this.muteButton = muteButton;
this.fullscreenButton = fullscreenButton; this.fullscreenButton = fullscreenButton;
@ -3665,17 +3651,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
if (post.isImgur()) { if (post.isImgur()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (post.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
}
} else if (post.isRedgifs()) { } else if (post.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, post.getRedgifsId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isLoadVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
} }
@ -3876,7 +3855,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.awardsTextViewItemPostVideoTypeAutoplay, binding.awardsTextViewItemPostVideoTypeAutoplay,
binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay, binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay,
binding.previewImageViewItemPostVideoTypeAutoplay, binding.previewImageViewItemPostVideoTypeAutoplay,
binding.errorLoadingGfycatImageViewItemPostVideoTypeAutoplay, binding.errorLoadingVideoImageViewItemPostVideoTypeAutoplay,
binding.playerViewItemPostVideoTypeAutoplay, binding.playerViewItemPostVideoTypeAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
@ -3915,7 +3894,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.awardsTextViewItemPostVideoTypeAutoplay, binding.awardsTextViewItemPostVideoTypeAutoplay,
binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay, binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay,
binding.previewImageViewItemPostVideoTypeAutoplay, binding.previewImageViewItemPostVideoTypeAutoplay,
binding.errorLoadingGfycatImageViewItemPostVideoTypeAutoplay, binding.errorLoadingVideoImageViewItemPostVideoTypeAutoplay,
binding.playerViewItemPostVideoTypeAutoplay, binding.playerViewItemPostVideoTypeAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
@ -5329,7 +5308,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
class PostCard2BaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer { class PostCard2BaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer {
AspectRatioFrameLayout aspectRatioFrameLayout; AspectRatioFrameLayout aspectRatioFrameLayout;
GifImageView previewImageView; GifImageView previewImageView;
ImageView errorLoadingGfycatImageView; ImageView errorLoadingVideoImageView;
PlayerView videoPlayer; PlayerView videoPlayer;
ImageView muteButton; ImageView muteButton;
ImageView fullscreenButton; ImageView fullscreenButton;
@ -5343,7 +5322,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
ExoPlayerViewHelper helper; ExoPlayerViewHelper helper;
private Uri mediaUri; private Uri mediaUri;
private float volume; private float volume;
public Call<String> fetchGfycatOrStreamableVideoCall; public Call<String> fetchStreamableVideoCall;
private boolean isManuallyPaused; private boolean isManuallyPaused;
PostCard2BaseVideoAutoplayViewHolder(View itemView, PostCard2BaseVideoAutoplayViewHolder(View itemView,
@ -5365,7 +5344,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
CustomTextView awardsTextView, CustomTextView awardsTextView,
AspectRatioFrameLayout aspectRatioFrameLayout, AspectRatioFrameLayout aspectRatioFrameLayout,
GifImageView previewImageView, GifImageView previewImageView,
ImageView errorLoadingGfycatImageView, ImageView errorLoadingVideoImageView,
PlayerView videoPlayer, PlayerView videoPlayer,
ImageView muteButton, ImageView muteButton,
ImageView fullscreenButton, ImageView fullscreenButton,
@ -5411,7 +5390,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
this.aspectRatioFrameLayout = aspectRatioFrameLayout; this.aspectRatioFrameLayout = aspectRatioFrameLayout;
this.previewImageView = previewImageView; this.previewImageView = previewImageView;
this.errorLoadingGfycatImageView = errorLoadingGfycatImageView; this.errorLoadingVideoImageView = errorLoadingVideoImageView;
this.videoPlayer = videoPlayer; this.videoPlayer = videoPlayer;
this.muteButton = muteButton; this.muteButton = muteButton;
this.fullscreenButton = fullscreenButton; this.fullscreenButton = fullscreenButton;
@ -5452,17 +5431,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
if (post.isImgur()) { if (post.isImgur()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (post.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
}
} else if (post.isRedgifs()) { } else if (post.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, post.getRedgifsId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isLoadVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
} }
@ -5662,7 +5634,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.awardsTextViewItemPostCard2VideoAutoplay, binding.awardsTextViewItemPostCard2VideoAutoplay,
binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay, binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay,
binding.previewImageViewItemPostCard2VideoAutoplay, binding.previewImageViewItemPostCard2VideoAutoplay,
binding.errorLoadingGfycatImageViewItemPostCard2VideoAutoplay, binding.errorLoadingVideoImageViewItemPostCard2VideoAutoplay,
binding.playerViewItemPostCard2VideoAutoplay, binding.playerViewItemPostCard2VideoAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
@ -5702,7 +5674,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.awardsTextViewItemPostCard2VideoAutoplay, binding.awardsTextViewItemPostCard2VideoAutoplay,
binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay, binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay,
binding.previewImageViewItemPostCard2VideoAutoplay, binding.previewImageViewItemPostCard2VideoAutoplay,
binding.errorLoadingGfycatImageViewItemPostCard2VideoAutoplay, binding.errorLoadingVideoImageViewItemPostCard2VideoAutoplay,
binding.playerViewItemPostCard2VideoAutoplay, binding.playerViewItemPostCard2VideoAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
@ -6397,7 +6369,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
class PostMaterial3CardBaseVideoAutoplayViewHolder extends PostMaterial3CardBaseViewHolder implements ToroPlayer { class PostMaterial3CardBaseVideoAutoplayViewHolder extends PostMaterial3CardBaseViewHolder implements ToroPlayer {
AspectRatioFrameLayout aspectRatioFrameLayout; AspectRatioFrameLayout aspectRatioFrameLayout;
GifImageView previewImageView; GifImageView previewImageView;
ImageView errorLoadingGfycatImageView; ImageView errorLoadingVideoImageView;
PlayerView videoPlayer; PlayerView videoPlayer;
ImageView muteButton; ImageView muteButton;
ImageView fullscreenButton; ImageView fullscreenButton;
@ -6410,7 +6382,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
ExoPlayerViewHelper helper; ExoPlayerViewHelper helper;
private Uri mediaUri; private Uri mediaUri;
private float volume; private float volume;
public Call<String> fetchGfycatOrStreamableVideoCall; public Call<String> fetchStreamableVideoCall;
private boolean isManuallyPaused; private boolean isManuallyPaused;
PostMaterial3CardBaseVideoAutoplayViewHolder(View rootView, PostMaterial3CardBaseVideoAutoplayViewHolder(View rootView,
@ -6422,7 +6394,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
TextView titleTextView, TextView titleTextView,
AspectRatioFrameLayout aspectRatioFrameLayout, AspectRatioFrameLayout aspectRatioFrameLayout,
GifImageView previewImageView, GifImageView previewImageView,
ImageView errorLoadingGfycatImageView, ImageView errorLoadingVideoImageView,
PlayerView videoPlayer, PlayerView videoPlayer,
ImageView muteButton, ImageView muteButton,
ImageView fullscreenButton, ImageView fullscreenButton,
@ -6457,7 +6429,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
this.aspectRatioFrameLayout = aspectRatioFrameLayout; this.aspectRatioFrameLayout = aspectRatioFrameLayout;
this.previewImageView = previewImageView; this.previewImageView = previewImageView;
this.errorLoadingGfycatImageView = errorLoadingGfycatImageView; this.errorLoadingVideoImageView = errorLoadingVideoImageView;
this.videoPlayer = videoPlayer; this.videoPlayer = videoPlayer;
this.muteButton = muteButton; this.muteButton = muteButton;
this.fullscreenButton = fullscreenButton; this.fullscreenButton = fullscreenButton;
@ -6497,17 +6469,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
if (post.isImgur()) { if (post.isImgur()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR);
} else if (post.isGfycat()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
}
} else if (post.isRedgifs()) { } else if (post.isRedgifs()) {
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, post.getGfycatId()); intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, post.getRedgifsId());
if (post.isLoadGfycatOrStreamableVideoSuccess()) { if (post.isLoadVideoSuccess()) {
intent.setData(Uri.parse(post.getVideoUrl())); intent.setData(Uri.parse(post.getVideoUrl()));
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl());
} }
@ -6698,7 +6663,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.titleTextViewItemPostCard3VideoTypeAutoplay, binding.titleTextViewItemPostCard3VideoTypeAutoplay,
binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay, binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay,
binding.previewImageViewItemPostCard3VideoTypeAutoplay, binding.previewImageViewItemPostCard3VideoTypeAutoplay,
binding.errorLoadingGfycatImageViewItemPostCard3VideoTypeAutoplay, binding.errorLoadingVideoImageViewItemPostCard3VideoTypeAutoplay,
binding.playerViewItemPostCard3VideoTypeAutoplay, binding.playerViewItemPostCard3VideoTypeAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),
@ -6726,7 +6691,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
binding.titleTextViewItemPostCard3VideoTypeAutoplay, binding.titleTextViewItemPostCard3VideoTypeAutoplay,
binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay, binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay,
binding.previewImageViewItemPostCard3VideoTypeAutoplay, binding.previewImageViewItemPostCard3VideoTypeAutoplay,
binding.errorLoadingGfycatImageViewItemPostCard3VideoTypeAutoplay, binding.errorLoadingVideoImageViewItemPostCard3VideoTypeAutoplay,
binding.playerViewItemPostCard3VideoTypeAutoplay, binding.playerViewItemPostCard3VideoTypeAutoplay,
binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), binding.getRoot().findViewById(R.id.mute_exo_playback_control_view),
binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view),

View File

@ -1,10 +0,0 @@
package eu.toldi.infinityforlemmy.apis;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface GfycatAPI {
@GET("{gfyid}")
Call<String> getGfycatData(@Path("gfyid") String gfyId);
}

View File

@ -187,9 +187,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
@Named("gfycat")
Retrofit mGfycatRetrofit;
@Inject
@Named("redgifs") @Named("redgifs")
Retrofit mRedgifsRetrofit; Retrofit mRedgifsRetrofit;
@Inject @Inject
@ -468,7 +465,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = new SortType(st == null ? SortType.Type.TOP_ALL : st,sortTime != null ? SortType.Time.valueOf(sortTime) : null); sortType = new SortType(st == null ? SortType.Type.TOP_ALL : st,sortTime != null ? SortType.Time.valueOf(sortTime) : null);
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -543,7 +540,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE + subredditName, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE + subredditName, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, displaySubredditName, accessToken, accountName, postType, postLayout, displaySubredditName,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -612,7 +609,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
defaultPostLayout); defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -678,7 +675,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -740,7 +737,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -799,7 +796,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -855,7 +852,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = newSortType(sort, sortTime); sortType = newSortType(sort, sortTime);
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout); postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, mGfycatRetrofit, mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
accessToken, accountName, postType, postLayout, true, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,

View File

@ -167,9 +167,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
@Named("reveddit") @Named("reveddit")
Retrofit revedditRetrofit; Retrofit revedditRetrofit;
@Inject @Inject
@Named("gfycat")
Retrofit mGfycatRetrofit;
@Inject
@Named("redgifs") @Named("redgifs")
Retrofit mRedgifsRetrofit; Retrofit mRedgifsRetrofit;
@Inject @Inject
@ -624,7 +621,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
setupMenu(); setupMenu();
mPostAdapter = new PostDetailRecyclerViewAdapter(activity, mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
this, mExecutor, mCustomThemeWrapper, mRetrofit, mGfycatRetrofit, this, mExecutor, mCustomThemeWrapper, mRetrofit,
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale, mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
@ -1361,7 +1358,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
mPost = post; mPost = post;
mPostAdapter = new PostDetailRecyclerViewAdapter(activity, mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper, ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
mRetrofit, mGfycatRetrofit, mRedgifsRetrofit, mRetrofit, mRedgifsRetrofit,
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences, mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,

View File

@ -77,7 +77,7 @@ public class FetchRemovedPost {
try { try {
Uri uri = Uri.parse(url); Uri uri = Uri.parse(url);
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null && (authority.contains("gfycat.com") || authority.contains("redgifs.com"))) { if (authority != null && authority.contains("redgifs.com")) {
post.setPostType(Post.LINK_TYPE); post.setPostType(Post.LINK_TYPE);
post.setUrl(url); post.setUrl(url);
} }

View File

@ -267,18 +267,12 @@ public class ParsePost {
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null) { if (authority != null) {
if (authority.contains("gfycat.com")) { if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase(); String redgifsId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE);
post.setIsGfycat(true);
post.setVideoUrl(url);
post.setGfycatId(gfycatId);
} else if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
post.setIsRedgifs(true); post.setIsRedgifs(true);
post.setVideoUrl(url); post.setVideoUrl(url);
post.setGfycatId(gfycatId); post.setRedgifsId(redgifsId);
} else if (authority.equals("streamable.com")) { } else if (authority.equals("streamable.com")) {
String shortCode = url.substring(url.lastIndexOf("/") + 1); String shortCode = url.substring(url.lastIndexOf("/") + 1);
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
@ -406,18 +400,12 @@ public class ParsePost {
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null) { if (authority != null) {
if (authority.contains("gfycat.com")) { if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase(); String redgifsId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE);
post.setIsGfycat(true);
post.setVideoUrl(url);
post.setGfycatId(gfycatId);
} else if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
post.setIsRedgifs(true); post.setIsRedgifs(true);
post.setVideoUrl(url); post.setVideoUrl(url);
post.setGfycatId(gfycatId); post.setRedgifsId(redgifsId);
} else if (authority.equals("streamable.com")) { } else if (authority.equals("streamable.com")) {
String shortCode = url.substring(url.lastIndexOf("/") + 1); String shortCode = url.substring(url.lastIndexOf("/") + 1);
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
@ -467,18 +455,12 @@ public class ParsePost {
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null) { if (authority != null) {
if (authority.contains("gfycat.com")) { if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase(); String redgifsId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE);
post.setIsGfycat(true);
post.setVideoUrl(url);
post.setGfycatId(gfycatId);
} else if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
post.setIsRedgifs(true); post.setIsRedgifs(true);
post.setVideoUrl(url); post.setVideoUrl(url);
post.setGfycatId(gfycatId); post.setRedgifsId(redgifsId);
} else if (authority.equals("streamable.com")) { } else if (authority.equals("streamable.com")) {
String shortCode = url.substring(url.lastIndexOf("/") + 1); String shortCode = url.substring(url.lastIndexOf("/") + 1);
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
@ -495,22 +477,14 @@ public class ParsePost {
try { try {
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null) { if (authority != null) {
if (authority.contains("gfycat.com")) { if (authority.contains("redgifs.com")) {
post.setIsGfycat(true); String redgifsId = url.substring(url.lastIndexOf("/") + 1);
post.setVideoUrl(url); if (redgifsId.contains("-")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1); redgifsId = redgifsId.substring(0, redgifsId.indexOf('-'));
if (gfycatId.contains("-")) {
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
}
post.setGfycatId(gfycatId.toLowerCase());
} else if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1);
if (gfycatId.contains("-")) {
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
} }
post.setIsRedgifs(true); post.setIsRedgifs(true);
post.setVideoUrl(url); post.setVideoUrl(url);
post.setGfycatId(gfycatId.toLowerCase()); post.setRedgifsId(redgifsId.toLowerCase());
} else if (authority.equals("streamable.com")) { } else if (authority.equals("streamable.com")) {
String shortCode = url.substring(url.lastIndexOf("/") + 1); String shortCode = url.substring(url.lastIndexOf("/") + 1);
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
@ -593,18 +567,12 @@ public class ParsePost {
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority != null) { if (authority != null) {
if (authority.contains("gfycat.com")) { if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase(); String redgifsId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE);
post.setIsGfycat(true);
post.setVideoUrl(url);
post.setGfycatId(gfycatId);
} else if (authority.contains("redgifs.com")) {
String gfycatId = url.substring(url.lastIndexOf("/") + 1).toLowerCase();
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);
post.setIsRedgifs(true); post.setIsRedgifs(true);
post.setVideoUrl(url); post.setVideoUrl(url);
post.setGfycatId(gfycatId); post.setRedgifsId(redgifsId);
} else if (authority.equals("streamable.com")) { } else if (authority.equals("streamable.com")) {
String shortCode = url.substring(url.lastIndexOf("/") + 1); String shortCode = url.substring(url.lastIndexOf("/") + 1);
post.setPostType(Post.VIDEO_TYPE); post.setPostType(Post.VIDEO_TYPE);

View File

@ -45,13 +45,12 @@ public class Post implements Parcelable {
private String url; private String url;
private String videoUrl; private String videoUrl;
private String videoDownloadUrl; private String videoDownloadUrl;
private String gfycatId; private String redgifsId;
private String streamableShortCode; private String streamableShortCode;
private boolean isImgur; private boolean isImgur;
private boolean isGfycat;
private boolean isRedgifs; private boolean isRedgifs;
private boolean isStreamable; private boolean isStreamable;
private boolean loadGfyOrStreamableVideoSuccess; private boolean loadVideoSuccess;
private String permalink; private String permalink;
private long postTimeMillis; private long postTimeMillis;
@ -152,13 +151,12 @@ public class Post implements Parcelable {
url = in.readString(); url = in.readString();
videoUrl = in.readString(); videoUrl = in.readString();
videoDownloadUrl = in.readString(); videoDownloadUrl = in.readString();
gfycatId = in.readString(); redgifsId = in.readString();
streamableShortCode = in.readString(); streamableShortCode = in.readString();
isImgur = in.readByte() != 0; isImgur = in.readByte() != 0;
isGfycat = in.readByte() != 0;
isRedgifs = in.readByte() != 0; isRedgifs = in.readByte() != 0;
isStreamable = in.readByte() != 0; isStreamable = in.readByte() != 0;
loadGfyOrStreamableVideoSuccess = in.readByte() != 0; loadVideoSuccess = in.readByte() != 0;
permalink = in.readString(); permalink = in.readString();
downvotes = in.readInt(); downvotes = in.readInt();
upvotes = in.readInt(); upvotes = in.readInt();
@ -303,12 +301,12 @@ public class Post implements Parcelable {
this.videoDownloadUrl = videoDownloadUrl; this.videoDownloadUrl = videoDownloadUrl;
} }
public String getGfycatId() { public String getRedgifsId() {
return gfycatId; return redgifsId;
} }
public void setGfycatId(String gfycatId) { public void setRedgifsId(String redgifsId) {
this.gfycatId = gfycatId; this.redgifsId = redgifsId;
} }
public String getStreamableShortCode() { public String getStreamableShortCode() {
@ -327,14 +325,6 @@ public class Post implements Parcelable {
return isImgur; return isImgur;
} }
public boolean isGfycat() {
return isGfycat;
}
public void setIsGfycat(boolean isGfycat) {
this.isGfycat = isGfycat;
}
public boolean isRedgifs() { public boolean isRedgifs() {
return isRedgifs; return isRedgifs;
} }
@ -351,12 +341,12 @@ public class Post implements Parcelable {
this.isStreamable = isStreamable; this.isStreamable = isStreamable;
} }
public boolean isLoadGfycatOrStreamableVideoSuccess() { public boolean isLoadVideoSuccess() {
return loadGfyOrStreamableVideoSuccess; return loadVideoSuccess;
} }
public void setLoadGfyOrStreamableVideoSuccess(boolean loadGfyOrStreamableVideoSuccess) { public void setLoadVideoSuccess(boolean loadVideoSuccess) {
this.loadGfyOrStreamableVideoSuccess = loadGfyOrStreamableVideoSuccess; this.loadVideoSuccess = loadVideoSuccess;
} }
public String getPermalink() { public String getPermalink() {
@ -525,13 +515,12 @@ public class Post implements Parcelable {
parcel.writeString(url); parcel.writeString(url);
parcel.writeString(videoUrl); parcel.writeString(videoUrl);
parcel.writeString(videoDownloadUrl); parcel.writeString(videoDownloadUrl);
parcel.writeString(gfycatId); parcel.writeString(redgifsId);
parcel.writeString(streamableShortCode); parcel.writeString(streamableShortCode);
parcel.writeByte((byte) (isImgur ? 1 : 0)); parcel.writeByte((byte) (isImgur ? 1 : 0));
parcel.writeByte((byte) (isGfycat ? 1 : 0));
parcel.writeByte((byte) (isRedgifs ? 1 : 0)); parcel.writeByte((byte) (isRedgifs ? 1 : 0));
parcel.writeByte((byte) (isStreamable ? 1 : 0)); parcel.writeByte((byte) (isStreamable ? 1 : 0));
parcel.writeByte((byte) (loadGfyOrStreamableVideoSuccess ? 1 : 0)); parcel.writeByte((byte) (loadVideoSuccess ? 1 : 0));
parcel.writeString(permalink); parcel.writeString(permalink);
parcel.writeInt(downvotes); parcel.writeInt(downvotes);
parcel.writeInt(upvotes); parcel.writeInt(upvotes);

View File

@ -19,7 +19,6 @@ public class APIUtils {
public static final String API_BASE_URI = "https://lemmy.world"; public static final String API_BASE_URI = "https://lemmy.world";
public static final String API_UPLOAD_MEDIA_URI = "https://reddit-uploaded-media.s3-accelerate.amazonaws.com"; public static final String API_UPLOAD_MEDIA_URI = "https://reddit-uploaded-media.s3-accelerate.amazonaws.com";
public static final String API_UPLOAD_VIDEO_URI = "https://reddit-uploaded-video.s3-accelerate.amazonaws.com"; public static final String API_UPLOAD_VIDEO_URI = "https://reddit-uploaded-video.s3-accelerate.amazonaws.com";
public static final String GFYCAT_API_BASE_URI = "https://api.gfycat.com/v1/gfycats/";
public static final String REDGIFS_API_BASE_URI = "https://api.redgifs.com"; public static final String REDGIFS_API_BASE_URI = "https://api.redgifs.com";
public static final String IMGUR_API_BASE_URI = "https://api.imgur.com/3/"; public static final String IMGUR_API_BASE_URI = "https://api.imgur.com/3/";
public static final String PUSHSHIFT_API_BASE_URI = "https://api.pushshift.io/"; public static final String PUSHSHIFT_API_BASE_URI = "https://api.pushshift.io/";

View File

@ -111,7 +111,6 @@ public class JSONUtils {
public static final String PATH_KEY = "path"; public static final String PATH_KEY = "path";
public static final String ALL_AWARDINGS_KEY = "all_awardings"; public static final String ALL_AWARDINGS_KEY = "all_awardings";
public static final String RESIZED_ICONS_KEY = "resized_icons"; public static final String RESIZED_ICONS_KEY = "resized_icons";
public static final String GFY_ITEM_KEY = "gfyItem";
public static final String MP4_URL_KEY = "mp4Url"; public static final String MP4_URL_KEY = "mp4Url";
public static final String TYPE_KEY = "type"; public static final String TYPE_KEY = "type";
public static final String MP4_KEY = "mp4"; public static final String MP4_KEY = "mp4";

View File

@ -122,7 +122,6 @@ public class SharedPreferencesUtils {
public static final String VIDEO_AUTOPLAY_VALUE_NEVER = "0"; public static final String VIDEO_AUTOPLAY_VALUE_NEVER = "0";
public static final String MUTE_AUTOPLAYING_VIDEOS = "mute_autoplaying_videos"; public static final String MUTE_AUTOPLAYING_VIDEOS = "mute_autoplaying_videos";
public static final String AUTOPLAY_NSFW_VIDEOS = "autoplay_nsfw_videos"; public static final String AUTOPLAY_NSFW_VIDEOS = "autoplay_nsfw_videos";
public static final String AUTOMATICALLY_TRY_REDGIFS = "automatically_try_redgifs";
public static final String LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "lock_jump_to_next_top_level_comment_button"; public static final String LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "lock_jump_to_next_top_level_comment_button";
public static final String SWAP_TAP_AND_LONG_COMMENTS = "swap_tap_and_long_in_comments"; public static final String SWAP_TAP_AND_LONG_COMMENTS = "swap_tap_and_long_in_comments";
public static final String SWIPE_UP_TO_HIDE_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "swipe_up_to_hide_jump_to_next_top_level_comments_button"; public static final String SWIPE_UP_TO_HIDE_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON = "swipe_up_to_hide_jump_to_next_top_level_comments_button";

View File

@ -12,7 +12,7 @@ import java.io.IOException
class RedGifsPostEnricher(private val redgifsAPI: RedgifsAPI) : PostEnricher { class RedGifsPostEnricher(private val redgifsAPI: RedgifsAPI) : PostEnricher {
override fun enrich(posts: Collection<Post>) { override fun enrich(posts: Collection<Post>) {
val redGifsPosts = posts.filter { it.isRedgifs && it.previews.isEmpty() } val redGifsPosts = posts.filter { it.isRedgifs && it.previews.isEmpty() }
.groupBy { it.gfycatId } .groupBy { it.redgifsId }
if (redGifsPosts.isEmpty()) { if (redGifsPosts.isEmpty()) {
return return

View File

@ -0,0 +1,43 @@
package eu.toldi.infinityforlemmy.post.enrich
import android.media.MediaMetadataRetriever
import android.util.Log
import eu.toldi.infinityforlemmy.post.Post
class VideoPostEnricher : PostEnricher {
override fun enrich(posts: Collection<Post>) {
for (post in posts) {
if (post.postType != Post.VIDEO_TYPE || post.previews.isNotEmpty()) {
continue
}
val url = post.videoUrl ?: continue
if (!url.endsWith(".mp4", ignoreCase = true) &&
!url.endsWith(".webm", ignoreCase = true)
) {
continue
}
val retriever = try {
MediaMetadataRetriever().apply {
setDataSource(url);
}
} catch (e: Exception) {
Log.w(TAG, "Error retrieving metadata", e)
continue
}
val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
?.toIntOrNull() ?: -1
val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
?.toIntOrNull() ?: -1
// Glide can extract thumbnails from video URLs (it uses MediaMetadataRetriever too)
post.previews = ArrayList(listOf(Post.Preview(url, width, height, null, null)))
}
}
companion object {
private const val TAG = "VideoPostEnricher"
}
}

View File

@ -42,7 +42,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_card_2_video_autoplay" android:id="@+id/error_loading_video_image_view_item_post_card_2_video_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -367,4 +367,4 @@
android:layout_height="1dp" android:layout_height="1dp"
android:paddingBottom="8dp" /> android:paddingBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -42,7 +42,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_card_2_video_autoplay" android:id="@+id/error_loading_video_image_view_item_post_card_2_video_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -366,4 +366,4 @@
android:layout_height="1dp" android:layout_height="1dp"
android:paddingBottom="8dp" /> android:paddingBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -40,7 +40,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_card_3_video_type_autoplay" android:id="@+id/error_loading_video_image_view_item_post_card_3_video_type_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -262,4 +262,4 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -40,7 +40,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_card_3_video_type_autoplay" android:id="@+id/error_loading_video_image_view_item_post_card_3_video_type_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -262,4 +262,4 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -244,7 +244,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_detail_video_autoplay" android:id="@+id/error_loading_video_image_view_item_post_detail_video_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -376,4 +376,4 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>

View File

@ -247,7 +247,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_detail_video_autoplay" android:id="@+id/error_loading_video_image_view_item_post_detail_video_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -379,4 +379,4 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>

View File

@ -254,7 +254,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_video_type_autoplay" android:id="@+id/error_loading_video_image_view_item_post_video_type_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -378,4 +378,4 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -254,7 +254,7 @@
android:visibility="gone" /> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/error_loading_gfycat_image_view_item_post_video_type_autoplay" android:id="@+id/error_loading_video_image_view_item_post_video_type_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
@ -378,4 +378,4 @@
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -314,7 +314,6 @@
<string name="settings_volume_keys_navigate_posts_title">Použít tlačítka hlasitosti pro navigaci v příspěvcích</string> <string name="settings_volume_keys_navigate_posts_title">Použít tlačítka hlasitosti pro navigaci v příspěvcích</string>
<string name="settings_mute_video_title">Ztlumit videa</string> <string name="settings_mute_video_title">Ztlumit videa</string>
<string name="settings_mute_nsfw_video_title">Ztlumit NSFW videa</string> <string name="settings_mute_nsfw_video_title">Ztlumit NSFW videa</string>
<string name="settings_automatically_try_redgifs_title">Automatický pokus o přístup k Redgifs, pokud jsou videa na Gfycat odstraněna.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignorovat navigační lištu v přehrávači videí</string> <string name="settings_video_player_ignore_nav_bar_title">Ignorovat navigační lištu v přehrávači videí</string>
<string name="settings_video_player_ignore_nav_bar_summary">Zabránit ovládání videa mít dodatečný okraj</string> <string name="settings_video_player_ignore_nav_bar_summary">Zabránit ovládání videa mít dodatečný okraj</string>
<string name="settings_confirm_to_exit">Potvrdit pro odchod</string> <string name="settings_confirm_to_exit">Potvrdit pro odchod</string>
@ -717,7 +716,6 @@
<string name="notifications">Oznámení</string> <string name="notifications">Oznámení</string>
<string name="messages">Zprávy</string> <string name="messages">Zprávy</string>
<string name="message">Zpráva</string> <string name="message">Zpráva</string>
<string name="fetch_gfycat_video_failed">Získávání Gfycat videa selhalo</string>
<string name="fetch_redgifs_video_failed">Získávání Redgifs videa selhalo</string> <string name="fetch_redgifs_video_failed">Získávání Redgifs videa selhalo</string>
<string name="fetching_video_info_please_wait">Získávání informací o videu. Čekejte prosím.</string> <string name="fetching_video_info_please_wait">Získávání informací o videu. Čekejte prosím.</string>
<string name="error_fetching_imgur_media">Nelze načíst obrázky</string> <string name="error_fetching_imgur_media">Nelze načíst obrázky</string>
@ -738,7 +736,6 @@
<string name="set_to_lock_screen">Nastavit na zamykací obrazovku</string> <string name="set_to_lock_screen">Nastavit na zamykací obrazovku</string>
<string name="set_to_both">Nastavit na oboje</string> <string name="set_to_both">Nastavit na oboje</string>
<string name="default_font_font_preview">Výchozí</string> <string name="default_font_font_preview">Výchozí</string>
<string name="load_video_in_redgifs">Zkusit načíst video na Redgifs</string>
<string name="top_score">%1$s bodů</string> <string name="top_score">%1$s bodů</string>
<string name="login_activity_2fa_prompt">Pokud máte zapnuté dvoufaktorové ověřování, vyplňte pole tokenu 2FA. V opačném případě jej ponechte prázdné</string> <string name="login_activity_2fa_prompt">Pokud máte zapnuté dvoufaktorové ověřování, vyplňte pole tokenu 2FA. V opačném případě jej ponechte prázdné</string>
<string name="submit_crosspost_activity_label">Crosspost</string> <string name="submit_crosspost_activity_label">Crosspost</string>

View File

@ -324,7 +324,6 @@
<string name="settings_mute_video_title">Videos stummschalten</string> <string name="settings_mute_video_title">Videos stummschalten</string>
<string name="settings_mute_nsfw_video_title">NSFW-Videos stummschalten</string> <string name="settings_mute_nsfw_video_title">NSFW-Videos stummschalten</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Automatisch versuchen, Redgifs abzurufen, falls Videos auf Gfycat entfernt wurden.</string>
<string name="settings_video_player_ignore_nav_bar_title">Navigationsleiste im Video-Player ignorieren</string> <string name="settings_video_player_ignore_nav_bar_title">Navigationsleiste im Video-Player ignorieren</string>
<string name="settings_video_player_ignore_nav_bar_summary">Kein extra Rand beim Video-Controller</string> <string name="settings_video_player_ignore_nav_bar_summary">Kein extra Rand beim Video-Controller</string>
<string name="settings_confirm_to_exit">Verlassen bestätigen</string> <string name="settings_confirm_to_exit">Verlassen bestätigen</string>
@ -744,7 +743,6 @@
<string name="notifications">Benachrichtigungen</string> <string name="notifications">Benachrichtigungen</string>
<string name="messages">Nachrichten</string> <string name="messages">Nachrichten</string>
<string name="message">Nachricht</string> <string name="message">Nachricht</string>
<string name="fetch_gfycat_video_failed">Abruf des Gfycat-Videos fehlgeschlagen</string>
<string name="fetch_redgifs_video_failed">Abruf des Redgifs-Videos fehlgeschlagen</string> <string name="fetch_redgifs_video_failed">Abruf des Redgifs-Videos fehlgeschlagen</string>
<string name="fetching_video_info_please_wait">Lade Video-Info. Bitte warten.</string> <string name="fetching_video_info_please_wait">Lade Video-Info. Bitte warten.</string>
<string name="error_fetching_imgur_media">Kann Bilder nicht laden</string> <string name="error_fetching_imgur_media">Kann Bilder nicht laden</string>
@ -768,7 +766,6 @@
<string name="set_to_lock_screen">Auf dem Sperrbildschirm setzen</string> <string name="set_to_lock_screen">Auf dem Sperrbildschirm setzen</string>
<string name="set_to_both">Auf beiden setzen</string> <string name="set_to_both">Auf beiden setzen</string>
<string name="default_font_font_preview">Standard</string> <string name="default_font_font_preview">Standard</string>
<string name="load_video_in_redgifs">Versuche Video von Redgifs zu laden</string>
<string name="top_score">%1$s Punkte</string> <string name="top_score">%1$s Punkte</string>
<string name="login_activity_2fa_prompt">Sofern du Zwei-Faktor-Authentifizierung aktiviert hast, trage den Code im 2FA-Feld ein. Ansonsten leer lassen</string> <string name="login_activity_2fa_prompt">Sofern du Zwei-Faktor-Authentifizierung aktiviert hast, trage den Code im 2FA-Feld ein. Ansonsten leer lassen</string>
<string name="submit_crosspost_activity_label">Crossposten</string> <string name="submit_crosspost_activity_label">Crossposten</string>

View File

@ -294,7 +294,6 @@
<string name="settings_volume_keys_navigate_posts_title">"Περιήγηση στις αναρτήσεις με τα κουμπιά έντασης"</string> <string name="settings_volume_keys_navigate_posts_title">"Περιήγηση στις αναρτήσεις με τα κουμπιά έντασης"</string>
<string name="settings_mute_video_title">"Σίγαση βίντεο"</string> <string name="settings_mute_video_title">"Σίγαση βίντεο"</string>
<string name="settings_mute_nsfw_video_title">"Σίγαση NSFW βίντεο"</string> <string name="settings_mute_nsfw_video_title">"Σίγαση NSFW βίντεο"</string>
<string name="settings_automatically_try_redgifs_title">"Αύτοματη προσπάθεια προσπέλασης στο Redgifs αν τα Βίντεο στο Gfycat έχουν αφαιρεθεί."</string>
<string name="settings_video_player_ignore_nav_bar_title">"Αγνόηση Μπάρας Πλοήγησης κατά την Αναπαραγωγή Βίντεο"</string> <string name="settings_video_player_ignore_nav_bar_title">"Αγνόηση Μπάρας Πλοήγησης κατά την Αναπαραγωγή Βίντεο"</string>
<string name="settings_video_player_ignore_nav_bar_summary">"Αποτρέπει τα Χειριστήρια του Βίντεο να έχουν έξτρα περιθώριο"</string> <string name="settings_video_player_ignore_nav_bar_summary">"Αποτρέπει τα Χειριστήρια του Βίντεο να έχουν έξτρα περιθώριο"</string>
<string name="settings_confirm_to_exit">"Επιβεβαίωση για Έξοδο"</string> <string name="settings_confirm_to_exit">"Επιβεβαίωση για Έξοδο"</string>
@ -686,7 +685,6 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="notifications">"Ειδοποιήσεις"</string> <string name="notifications">"Ειδοποιήσεις"</string>
<string name="messages">"Μηνύματα"</string> <string name="messages">"Μηνύματα"</string>
<string name="message">"Μήνυμα"</string> <string name="message">"Μήνυμα"</string>
<string name="fetch_gfycat_video_failed">"Η ανάκτηση του βίντεο Gfycat απέτυχε"</string>
<string name="fetch_redgifs_video_failed">"Η ανάκτηση του βίντεο Redgifs απέτυχε"</string> <string name="fetch_redgifs_video_failed">"Η ανάκτηση του βίντεο Redgifs απέτυχε"</string>
<string name="fetching_video_info_please_wait">"Ανάκτηση πληροφοριών βίντεο. Παρακαλώ περιμένετε."</string> <string name="fetching_video_info_please_wait">"Ανάκτηση πληροφοριών βίντεο. Παρακαλώ περιμένετε."</string>
<string name="error_fetching_imgur_media">"Αδυναμία φόρτωσης εικόνων"</string> <string name="error_fetching_imgur_media">"Αδυναμία φόρτωσης εικόνων"</string>
@ -707,7 +705,6 @@ https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforredd
<string name="set_to_lock_screen">"Ρύθμιση στην Οθόνη Κλειδώματος"</string> <string name="set_to_lock_screen">"Ρύθμιση στην Οθόνη Κλειδώματος"</string>
<string name="set_to_both">"Ρύθμιση και στα δύο"</string> <string name="set_to_both">"Ρύθμιση και στα δύο"</string>
<string name="default_font_font_preview">"Προεπιλογή"</string> <string name="default_font_font_preview">"Προεπιλογή"</string>
<string name="load_video_in_redgifs">"Προσπάθεια φόρτωσης βίντεο στο Redgifs"</string>
<string name="top_score">"%1$s βθμ"</string> <string name="top_score">"%1$s βθμ"</string>
<string name="login_activity_2fa_prompt">"Αν έχετε ενεργή την ταυτοποίηση 2 παραγόντων, παρακαλώ πληκτρολογήστε τον κωδικό με τον παρακάτω τρόπο: &lt;κωδικός&gt;:&lt;2FA κωδικός&gt;. <string name="login_activity_2fa_prompt">"Αν έχετε ενεργή την ταυτοποίηση 2 παραγόντων, παρακαλώ πληκτρολογήστε τον κωδικό με τον παρακάτω τρόπο: &lt;κωδικός&gt;:&lt;2FA κωδικός&gt;.
Παράδειγμα: οκωδικοςσας:123456"</string> Παράδειγμα: οκωδικοςσας:123456"</string>

View File

@ -104,7 +104,7 @@
<string name="since">Desde:</string> <string name="since">Desde:</string>
<string name="profile">Perfil de usuario</string> <string name="profile">Perfil de usuario</string>
<string name="subscriptions">Suscripciones</string> <string name="subscriptions">Suscripciones</string>
<string name="multi_reddit">Multireddit</string> <string name="multi_reddit">Multicomunidad</string>
<!-- Bandeja de Entrada --> <!-- Bandeja de Entrada -->
<string name="inbox">Bandeja de entrada</string> <string name="inbox">Bandeja de entrada</string>
<string name="upvoted">Upvoted</string> <string name="upvoted">Upvoted</string>
@ -113,7 +113,7 @@
<string name="saved">Guardado</string> <string name="saved">Guardado</string>
<string name="gilded">Premiado</string> <string name="gilded">Premiado</string>
<string name="settings">Configuración</string> <string name="settings">Configuración</string>
<string name="subscribers_number_detail">Suscriptores: %1$,d</string> <string name="subscribers_number_detail">%1$,d suscriptores</string>
<string name="online_subscribers_number_detail">En línea: %1$,d</string> <string name="online_subscribers_number_detail">En línea: %1$,d</string>
<string name="cannot_fetch_community_info">No fue posible obtener información del subreddit</string> <string name="cannot_fetch_community_info">No fue posible obtener información del subreddit</string>
<string name="cannot_fetch_user_info">No fue posible obtener información del usuario</string> <string name="cannot_fetch_user_info">No fue posible obtener información del usuario</string>
@ -323,7 +323,6 @@ Premio means prize, so it's better suited the first word instead of the second o
<string name="settings_volume_keys_navigate_posts_title">Usar las teclas de volumen para navegar publicaciones</string> <string name="settings_volume_keys_navigate_posts_title">Usar las teclas de volumen para navegar publicaciones</string>
<string name="settings_mute_video_title">Silenciar vídeos</string> <string name="settings_mute_video_title">Silenciar vídeos</string>
<string name="settings_mute_nsfw_video_title">Silenciar vídeos NSFW</string> <string name="settings_mute_nsfw_video_title">Silenciar vídeos NSFW</string>
<string name="settings_automatically_try_redgifs_title">Intentar acceder automáticamente a Redgifs si se eliminan los videos en Gfycat.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignorar la barra de navegación en el reproductor de vídeo</string> <string name="settings_video_player_ignore_nav_bar_title">Ignorar la barra de navegación en el reproductor de vídeo</string>
<string name="settings_video_player_ignore_nav_bar_summary">Bloquear al controlador de vídeo para que no tenga margen extra</string> <string name="settings_video_player_ignore_nav_bar_summary">Bloquear al controlador de vídeo para que no tenga margen extra</string>
<string name="settings_confirm_to_exit">Confirmar para salir</string> <string name="settings_confirm_to_exit">Confirmar para salir</string>
@ -737,7 +736,6 @@ Premio means prize, so it's better suited the first word instead of the second o
<string name="notifications">Notificaciones</string> <string name="notifications">Notificaciones</string>
<string name="messages">Mensajes</string> <string name="messages">Mensajes</string>
<string name="message">Mensaje</string> <string name="message">Mensaje</string>
<string name="fetch_gfycat_video_failed">No fue posible obtener el vídeo de Gfycat</string>
<string name="fetch_redgifs_video_failed">No fue posible obtener el vídeo de Redgifs</string> <string name="fetch_redgifs_video_failed">No fue posible obtener el vídeo de Redgifs</string>
<string name="fetching_video_info_please_wait">Obteniendo información del vídeo. Por favor espera.</string> <string name="fetching_video_info_please_wait">Obteniendo información del vídeo. Por favor espera.</string>
<string name="error_fetching_imgur_media">No fue posible cargar las imágenes</string> <string name="error_fetching_imgur_media">No fue posible cargar las imágenes</string>
@ -758,7 +756,6 @@ Premio means prize, so it's better suited the first word instead of the second o
<string name="set_to_lock_screen">Establecer como pantalla de bloqueo</string> <string name="set_to_lock_screen">Establecer como pantalla de bloqueo</string>
<string name="set_to_both">Establecer ambos</string> <string name="set_to_both">Establecer ambos</string>
<string name="default_font_font_preview">Por defecto</string> <string name="default_font_font_preview">Por defecto</string>
<string name="load_video_in_redgifs">Intentar cargando el vídeo en Redgifs</string>
<string name="top_score">%1$s puntos</string> <string name="top_score">%1$s puntos</string>
<string name="login_activity_2fa_prompt">Si tiene habilitada la autenticación de 2 factores, por favor escriba su contraseña como la siguiente: &lt;contraseña&gt;:&lt;código 2FA&gt;</string> <string name="login_activity_2fa_prompt">Si tiene habilitada la autenticación de 2 factores, por favor escriba su contraseña como la siguiente: &lt;contraseña&gt;:&lt;código 2FA&gt;</string>
<string name="submit_crosspost_activity_label">Crosspost</string> <string name="submit_crosspost_activity_label">Crosspost</string>
@ -882,7 +879,7 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/hJAe7sMhrfJzqjhp9VkDQOVC.PNG -->
<string name="multireddit_selection_activity_label">Seleccionar multireddit</string> <string name="multireddit_selection_activity_label">Seleccionar multireddit</string>
<string name="action_save_to_database">Guardar a la base de datos</string> <string name="action_save_to_database">Guardar a la base de datos</string>
<string name="action_read_all_messages">Leer todos los mensajes</string> <string name="action_read_all_messages">Leer todos los mensajes</string>
<string name="action_add_to_multireddit">Añadir a multireddit</string> <string name="action_add_to_multireddit">Añadir a la multicomunidad</string>
<string name="search_only_communities_hint">Buscar subreddits</string> <string name="search_only_communities_hint">Buscar subreddits</string>
<string name="search_only_users_hint">Buscar usuarios</string> <string name="search_only_users_hint">Buscar usuarios</string>
<string name="post_type_gif">GIF</string> <string name="post_type_gif">GIF</string>
@ -1191,4 +1188,28 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/hJAe7sMhrfJzqjhp9VkDQOVC.PNG -->
<string name="settings_backup_settings_summary">El archivo de respaldo de la contraseña es \"123321\".</string> <string name="settings_backup_settings_summary">El archivo de respaldo de la contraseña es \"123321\".</string>
<string name="settings_custom_font_family_title">Fuentes Personalizadas</string> <string name="settings_custom_font_family_title">Fuentes Personalizadas</string>
<string name="active_users_number_detail">%1$,d Usuarios activos</string> <string name="active_users_number_detail">%1$,d Usuarios activos</string>
<string name="subscription_activity_label">Suscripción</string>
<string name="settings_miscellaneous_dangerous_group_title">Peligroso</string>
<string name="settings_show_fewer_toolbar_options_threshold_summary">Nivel %1$d</string>
<string name="action_add_to_home_screen">Añadir a la página de inicio</string>
<string name="community_number_detail">%1$,d comunidades</string>
<string name="settings_hide_upvote_ratio_title">Ocultar proporción de votos positivos</string>
<string name="confirm_delete_all_recent_searches">¿Estás seguro de que quieres borrar todas las consultas de búsqueda recientes?</string>
<string name="settings_hide_comment_awards_title">Ocultar premios de los comentarios</string>
<string name="settings_hide_text_post_content">Ocultar el contenido de la publicación</string>
<string name="settings_post_feed_max_resolution_warning_title">Aumenta el valor para mostrar vistas previas con mayor resolución, pero la aplicación puede bloquearse inesperadamente.</string>
<string name="user_number_detail">%1$,d usuarios</string>
<string name="settings_easier_to_watch_in_full_screen_title">Más fácil de ver en pantalla completa</string>
<string name="comment_filter_preference_activity_label">Filtro de comentarios</string>
<string name="settings_show_author_avatar_title">Mostrar avatar del autor</string>
<string name="settings_reddit_video_default_resolution">Resolución predeterminada de los videos en Lemmy</string>
<string name="confirm">Confirmar</string>
<string name="settings_fixed_height_preview_in_card_title">Altura fija en la tarjeta</string>
<string name="customize_comment_filter_activity_label">Personalizar el filtro de comentarios</string>
<string name="settings_post_feed_max_resolution_title">Resolución máxima de la vista previa de las publicaciones del feed (Anchura * Altura)</string>
<string name="settings_reddit_user_agreement_title">Acuerdo de usuario de Lemmy</string>
<string name="settings_always_show_child_comment_count_title">Mostrar siempre el número de comentarios «hijo»</string>
<string name="post_count_detail">%1$,d publicaciones</string>
<string name="settings_show_fewer_toolbar_options_threshold_title">Mostrar menos opciones de la barra de herramientas a partir de</string>
<string name="comment_count_detail">%1$,d comentarios</string>
</resources> </resources>

View File

@ -213,7 +213,6 @@
<string name="theme_preview_activity_label">Teeman esikatselu</string> <string name="theme_preview_activity_label">Teeman esikatselu</string>
<string name="no_theme_name">Mikä on tämän teeman nimi\?</string> <string name="no_theme_name">Mikä on tämän teeman nimi\?</string>
<string name="copy_all_raw_text">Kopioi kaikki raakatekstinä</string> <string name="copy_all_raw_text">Kopioi kaikki raakatekstinä</string>
<string name="load_video_in_redgifs">Yritä ladata video Redgifsistä</string>
<string name="invalid_response">Virheellinen vastaus palvelimelta</string> <string name="invalid_response">Virheellinen vastaus palvelimelta</string>
<string name="action_share_link">Jaa linkki</string> <string name="action_share_link">Jaa linkki</string>
<string name="yes">Kyllä</string> <string name="yes">Kyllä</string>
@ -384,7 +383,6 @@
\nNapauta yrittääksesi uudelleen.</string> \nNapauta yrittääksesi uudelleen.</string>
<string name="custom_theme_listing_activity_label">Mukautetut teemat</string> <string name="custom_theme_listing_activity_label">Mukautetut teemat</string>
<string name="action_change_post_layout">Muuta viestien asettelua</string> <string name="action_change_post_layout">Muuta viestien asettelua</string>
<string name="settings_automatically_try_redgifs_title">Yritä automaattisesti videoita Redgifsistä jos video Gfycatista on poistettu.</string>
<string name="sort_time_6hours">6 tuntia</string> <string name="sort_time_6hours">6 tuntia</string>
<string name="app_lock_timeout_1_hour">1 tunti</string> <string name="app_lock_timeout_1_hour">1 tunti</string>
<string name="settings_swipe_action_title">Pyyhkäisyn toiminto</string> <string name="settings_swipe_action_title">Pyyhkäisyn toiminto</string>

View File

@ -343,7 +343,6 @@
<string name="settings_mute_video_title">Couper le son des vidéos</string> <string name="settings_mute_video_title">Couper le son des vidéos</string>
<string name="settings_mute_nsfw_video_title">Couper le son des Vidéos NSFW</string> <string name="settings_mute_nsfw_video_title">Couper le son des Vidéos NSFW</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Essayez d\'accéder automatiquement à redgif si les vidéos sur gfycat sont supprimées.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignorer la barre de navigation dans le lecteur vidéo</string> <string name="settings_video_player_ignore_nav_bar_title">Ignorer la barre de navigation dans le lecteur vidéo</string>
<string name="settings_video_player_ignore_nav_bar_summary">Empêcher le contrôleur vidéo de créer une marge supplémentaire</string> <string name="settings_video_player_ignore_nav_bar_summary">Empêcher le contrôleur vidéo de créer une marge supplémentaire</string>
<string name="settings_confirm_to_exit">Confirmer pour quitter</string> <string name="settings_confirm_to_exit">Confirmer pour quitter</string>
@ -768,7 +767,6 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/dFZKKms9HbrDGOlcgW9QTcwF.jpg -->
<string name="notifications">Notifications</string> <string name="notifications">Notifications</string>
<string name="messages">Messages</string> <string name="messages">Messages</string>
<string name="message">Message</string> <string name="message">Message</string>
<string name="fetch_gfycat_video_failed">Échec de la récupération de la vidéo Gfycat</string>
<string name="fetch_redgifs_video_failed">Échec de la récupération de la vidéo Redgifs</string> <string name="fetch_redgifs_video_failed">Échec de la récupération de la vidéo Redgifs</string>
<string name="fetching_video_info_please_wait">Récupération des informations vidéo. Veuillez patienter.</string> <string name="fetching_video_info_please_wait">Récupération des informations vidéo. Veuillez patienter.</string>
<string name="error_fetching_imgur_media">Impossible de charger les images</string> <string name="error_fetching_imgur_media">Impossible de charger les images</string>
@ -790,7 +788,6 @@ https://s3.eu-west-1.amazonaws.com/po-pub/i/dFZKKms9HbrDGOlcgW9QTcwF.jpg -->
<string name="set_to_lock_screen">Ajouter à l\'écran de verrouillage</string> <string name="set_to_lock_screen">Ajouter à l\'écran de verrouillage</string>
<string name="set_to_both">Définir pour les deux</string> <string name="set_to_both">Définir pour les deux</string>
<string name="default_font_font_preview">Par défaut</string> <string name="default_font_font_preview">Par défaut</string>
<string name="load_video_in_redgifs">Essayez de charger la vidéo sur Redgifs</string>
<string name="top_score">%1$s points</string> <string name="top_score">%1$s points</string>
<string name="login_activity_2fa_prompt">Si lauthentification à 2 facteurs est activée, vous devez remplir le champ du jeton 2FA. Sinon, laissez le vide.</string> <string name="login_activity_2fa_prompt">Si lauthentification à 2 facteurs est activée, vous devez remplir le champ du jeton 2FA. Sinon, laissez le vide.</string>
<string name="submit_crosspost_activity_label">Republier</string> <string name="submit_crosspost_activity_label">Republier</string>

View File

@ -333,7 +333,6 @@ Behavior -->
<!-- Are those commands or a state? Like 'search' is a state in 'search opration' but is a command in 'search something'. Hindi has different appraoch for these two. --> <!-- Are those commands or a state? Like 'search' is a state in 'search opration' but is a command in 'search something'. Hindi has different appraoch for these two. -->
<string name="settings_mute_nsfw_video_title">मौन NSFW वीडियोज</string> <string name="settings_mute_nsfw_video_title">मौन NSFW वीडियोज</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">स्वतः ही Redgifs खोलने का प्रयास यदि Gfycat पर वीडियोज हटा दी गयी हों।</string>
<string name="settings_video_player_ignore_nav_bar_title">वीडियो प्लेयर में नेवीगेशन बार का छिपना</string> <string name="settings_video_player_ignore_nav_bar_title">वीडियो प्लेयर में नेवीगेशन बार का छिपना</string>
<string name="settings_video_player_ignore_nav_bar_summary">वीडियो कंट्रोलर द्वारा अतिरिक्त हाशिया लेने पर रोक</string> <string name="settings_video_player_ignore_nav_bar_summary">वीडियो कंट्रोलर द्वारा अतिरिक्त हाशिया लेने पर रोक</string>
<string name="settings_confirm_to_exit">एप छोड़ने की पुष्टि</string> <string name="settings_confirm_to_exit">एप छोड़ने की पुष्टि</string>
@ -748,7 +747,6 @@ Behavior -->
<string name="notifications">अधिसूचनाएं</string> <string name="notifications">अधिसूचनाएं</string>
<string name="messages">संदेश</string> <string name="messages">संदेश</string>
<string name="message">संदेश</string> <string name="message">संदेश</string>
<string name="fetch_gfycat_video_failed">Gfycat वीडियो प्राप्ति सफल</string>
<string name="fetch_redgifs_video_failed">Redgifs वीडियो प्राप्ति असफल</string> <string name="fetch_redgifs_video_failed">Redgifs वीडियो प्राप्ति असफल</string>
<string name="fetching_video_info_please_wait">वीडियो इनफो प्राप्त हो रहा है। कृपया प्रतीक्षा करें।</string> <string name="fetching_video_info_please_wait">वीडियो इनफो प्राप्त हो रहा है। कृपया प्रतीक्षा करें।</string>
<string name="error_fetching_imgur_media">चित्र लोड नहीं हो सका</string> <string name="error_fetching_imgur_media">चित्र लोड नहीं हो सका</string>
@ -770,7 +768,6 @@ Behavior -->
<string name="set_to_lock_screen">लक स्क्रीन पे सेट करे</string> <string name="set_to_lock_screen">लक स्क्रीन पे सेट करे</string>
<string name="set_to_both">दोनो पे ही सेट करे</string> <string name="set_to_both">दोनो पे ही सेट करे</string>
<string name="default_font_font_preview">पूर्वनिर्धारित</string> <string name="default_font_font_preview">पूर्वनिर्धारित</string>
<string name="load_video_in_redgifs">वीडियो रेडगिफ्स पर लोड करने कि कोशिश करे</string>
<string name="top_score">%1$s अंक</string> <string name="top_score">%1$s अंक</string>
<string name="login_activity_2fa_prompt">अगार आपका 2-कदाम प्रमाणीकरण चालू है, तो कृपिया आपना पासबर्ड(चाबी) निम्ना लिखित तरीके से दिजीये: &lt;पासबर्ड&gt;:&lt;2FA code&gt;</string> <string name="login_activity_2fa_prompt">अगार आपका 2-कदाम प्रमाणीकरण चालू है, तो कृपिया आपना पासबर्ड(चाबी) निम्ना लिखित तरीके से दिजीये: &lt;पासबर्ड&gt;:&lt;2FA code&gt;</string>
<string name="submit_crosspost_activity_label">क्रॉसपोस्ट</string> <string name="submit_crosspost_activity_label">क्रॉसपोस्ट</string>

View File

@ -326,7 +326,6 @@
<string name="settings_mute_video_title">Isključi ton na videozapisima</string> <string name="settings_mute_video_title">Isključi ton na videozapisima</string>
<string name="settings_mute_nsfw_video_title">Isključi ton na NSFW videozapisima</string> <string name="settings_mute_nsfw_video_title">Isključi ton na NSFW videozapisima</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Automatski pokušaj pristupiti Redgifs ako su videozapisi na Gfycatu uklonjeni.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignoriraj navigacijsku traku u video playeru</string> <string name="settings_video_player_ignore_nav_bar_title">Ignoriraj navigacijsku traku u video playeru</string>
<string name="settings_video_player_ignore_nav_bar_summary">Onemogući dodatnu marginu na video kontroleru</string> <string name="settings_video_player_ignore_nav_bar_summary">Onemogući dodatnu marginu na video kontroleru</string>
<string name="settings_confirm_to_exit">Potvrdi izlaz</string> <string name="settings_confirm_to_exit">Potvrdi izlaz</string>
@ -739,7 +738,6 @@
<string name="notifications">Obavijesti</string> <string name="notifications">Obavijesti</string>
<string name="messages">Poruke</string> <string name="messages">Poruke</string>
<string name="message">Poruka</string> <string name="message">Poruka</string>
<string name="fetch_gfycat_video_failed">Dohvaćanje Gfycat videozapisa nije uspjelo</string>
<string name="fetch_redgifs_video_failed">Dohvaćanje Redgifs videozapisa nije uspjelo</string> <string name="fetch_redgifs_video_failed">Dohvaćanje Redgifs videozapisa nije uspjelo</string>
<string name="fetching_video_info_please_wait">Dohvaćanje informacija o videozapisu. Molim pričekajte.</string> <string name="fetching_video_info_please_wait">Dohvaćanje informacija o videozapisu. Molim pričekajte.</string>
<string name="error_fetching_imgur_media">Nije moguće učitati slike</string> <string name="error_fetching_imgur_media">Nije moguće učitati slike</string>
@ -761,7 +759,6 @@
<string name="set_to_lock_screen">Postavi na Zaključni zaslon</string> <string name="set_to_lock_screen">Postavi na Zaključni zaslon</string>
<string name="set_to_both">Postavi na oboje</string> <string name="set_to_both">Postavi na oboje</string>
<string name="default_font_font_preview">Zadano</string> <string name="default_font_font_preview">Zadano</string>
<string name="load_video_in_redgifs">Pokušajte učitati video na Redgifs</string>
<string name="top_score">%1$s boda/ova</string> <string name="top_score">%1$s boda/ova</string>
<string name="login_activity_2fa_prompt">Ukoliko imate omogućenu 2-faktorsku autentikaciju, upišite zaporku na sljedeći način:&lt;zaporka&gt;:&lt;2FA kod&gt;. Primjer: vašazaporka:123456</string> <string name="login_activity_2fa_prompt">Ukoliko imate omogućenu 2-faktorsku autentikaciju, upišite zaporku na sljedeći način:&lt;zaporka&gt;:&lt;2FA kod&gt;. Primjer: vašazaporka:123456</string>
<string name="submit_crosspost_activity_label">Crosspost</string> <string name="submit_crosspost_activity_label">Crosspost</string>

View File

@ -309,7 +309,6 @@
<string name="settings_mute_video_title">Videók némítása</string> <string name="settings_mute_video_title">Videók némítása</string>
<string name="settings_mute_nsfw_video_title">NSFW videók némítása</string> <string name="settings_mute_nsfw_video_title">NSFW videók némítása</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Próbálja autómatikusan elérni a Redgifeket, ha a videók Gfycat-en el vannak távolítva.</string>
<string name="settings_video_player_ignore_nav_bar_title">Navigációs sáv ignorálása videó lejátszóban</string> <string name="settings_video_player_ignore_nav_bar_title">Navigációs sáv ignorálása videó lejátszóban</string>
<string name="settings_video_player_ignore_nav_bar_summary">Annak megelőzése, hogy a videó kontrollernek extra szegélye legyen</string> <string name="settings_video_player_ignore_nav_bar_summary">Annak megelőzése, hogy a videó kontrollernek extra szegélye legyen</string>
<string name="settings_confirm_to_exit">Kilépés megerősítése</string> <string name="settings_confirm_to_exit">Kilépés megerősítése</string>
@ -717,7 +716,6 @@
<string name="notifications">Értesítések</string> <string name="notifications">Értesítések</string>
<string name="messages">Üzenetek</string> <string name="messages">Üzenetek</string>
<string name="message">Üzenet</string> <string name="message">Üzenet</string>
<string name="fetch_gfycat_video_failed">Gfycat videó megszerzése nem sikerült</string>
<string name="fetch_redgifs_video_failed">Redgifs videó megszerzése nem sikerült</string> <string name="fetch_redgifs_video_failed">Redgifs videó megszerzése nem sikerült</string>
<string name="fetching_video_info_please_wait">Videó infó megszerzése. Kérlek várj.</string> <string name="fetching_video_info_please_wait">Videó infó megszerzése. Kérlek várj.</string>
<string name="error_fetching_imgur_media">Nem lehet betölteni a képeket</string> <string name="error_fetching_imgur_media">Nem lehet betölteni a képeket</string>
@ -738,7 +736,6 @@
<string name="set_to_lock_screen">Beállítva zárolt képernyőre</string> <string name="set_to_lock_screen">Beállítva zárolt képernyőre</string>
<string name="set_to_both">Beállítva mindettőre</string> <string name="set_to_both">Beállítva mindettőre</string>
<string name="default_font_font_preview">Alapértelmezett</string> <string name="default_font_font_preview">Alapértelmezett</string>
<string name="load_video_in_redgifs">Próbáld meg betölteni a videót Redgifs-en</string>
<string name="top_score">%1$s pont</string> <string name="top_score">%1$s pont</string>
<string name="login_activity_2fa_prompt">Ha a két faktoros azonosítás be van kapcsolva, kérlek írd be a jelszavad így: &lt;jelszó&gt;:&lt;2FA kód&gt;. Például: jelszavad:123456</string> <string name="login_activity_2fa_prompt">Ha a két faktoros azonosítás be van kapcsolva, kérlek írd be a jelszavad így: &lt;jelszó&gt;:&lt;2FA kód&gt;. Például: jelszavad:123456</string>
<string name="submit_crosspost_activity_label">Crossposzt</string> <string name="submit_crosspost_activity_label">Crossposzt</string>

View File

@ -308,7 +308,6 @@
<string name="settings_volume_keys_navigate_posts_title">Usa i Tasti del Volume per Navigare i Post</string> <string name="settings_volume_keys_navigate_posts_title">Usa i Tasti del Volume per Navigare i Post</string>
<string name="settings_mute_video_title">Muta i video</string> <string name="settings_mute_video_title">Muta i video</string>
<string name="settings_mute_nsfw_video_title">Metti in muto i video NSFW</string> <string name="settings_mute_nsfw_video_title">Metti in muto i video NSFW</string>
<string name="settings_automatically_try_redgifs_title">Prova automaticamente ad accedere a Redgifs se i video su Gfycat vengono rimossi.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignora la Barra di Navigazione nel Lettore Video</string> <string name="settings_video_player_ignore_nav_bar_title">Ignora la Barra di Navigazione nel Lettore Video</string>
<string name="settings_video_player_ignore_nav_bar_summary">Impedisci ai controlli video di avere margine aggiuntivo</string> <string name="settings_video_player_ignore_nav_bar_summary">Impedisci ai controlli video di avere margine aggiuntivo</string>
<string name="settings_confirm_to_exit">Conferma per uscire</string> <string name="settings_confirm_to_exit">Conferma per uscire</string>
@ -707,7 +706,6 @@
<string name="notifications">Notifiche</string> <string name="notifications">Notifiche</string>
<string name="messages">Messaggi</string> <string name="messages">Messaggi</string>
<string name="message">Messaggio</string> <string name="message">Messaggio</string>
<string name="fetch_gfycat_video_failed">Impossibile recuperare il video da Gfycat</string>
<string name="fetch_redgifs_video_failed">Impossibile recuperare il video da Redgifs</string> <string name="fetch_redgifs_video_failed">Impossibile recuperare il video da Redgifs</string>
<string name="fetching_video_info_please_wait">Recupero delle informazioni sul video. Attendere prego.</string> <string name="fetching_video_info_please_wait">Recupero delle informazioni sul video. Attendere prego.</string>
<string name="error_fetching_imgur_media">Impossibile caricare immagini</string> <string name="error_fetching_imgur_media">Impossibile caricare immagini</string>
@ -728,7 +726,6 @@
<string name="set_to_lock_screen">Imposta sulla schermata di blocco</string> <string name="set_to_lock_screen">Imposta sulla schermata di blocco</string>
<string name="set_to_both">Imposta su Entrambi</string> <string name="set_to_both">Imposta su Entrambi</string>
<string name="default_font_font_preview">Predefinito</string> <string name="default_font_font_preview">Predefinito</string>
<string name="load_video_in_redgifs">Prova a caricare il video su Redgifs</string>
<string name="top_score">%1$s pts</string> <string name="top_score">%1$s pts</string>
<string name="login_activity_2fa_prompt">Se hai attivato l\'autenticazione a due fattori, per favore inserisci la password come segue: &lt;password&gt;:&lt;codice per l\'autenticazione a due fattori&gt;. <string name="login_activity_2fa_prompt">Se hai attivato l\'autenticazione a due fattori, per favore inserisci la password come segue: &lt;password&gt;:&lt;codice per l\'autenticazione a due fattori&gt;.
\nEsempio: latuapassword:123456</string> \nEsempio: latuapassword:123456</string>

View File

@ -337,7 +337,6 @@
<string name="settings_mute_video_title">動画をミュート再生</string> <string name="settings_mute_video_title">動画をミュート再生</string>
<string name="settings_mute_nsfw_video_title">NSFWの動画をミュート再生</string> <string name="settings_mute_nsfw_video_title">NSFWの動画をミュート再生</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Gfycatの動画が削除されていた場合、自動的にRedgifsでリトライ</string>
<string name="settings_video_player_ignore_nav_bar_title">動画プレーヤーでナビゲーションバーを無視</string> <string name="settings_video_player_ignore_nav_bar_title">動画プレーヤーでナビゲーションバーを無視</string>
<string name="settings_video_player_ignore_nav_bar_summary">動画コントローラーが余分な余白を使用することを防止します</string> <string name="settings_video_player_ignore_nav_bar_summary">動画コントローラーが余分な余白を使用することを防止します</string>
<string name="settings_confirm_to_exit">アプリの終了確認を表示</string> <string name="settings_confirm_to_exit">アプリの終了確認を表示</string>
@ -758,7 +757,6 @@
<string name="notifications">通知</string> <string name="notifications">通知</string>
<string name="messages">メッセージ</string> <string name="messages">メッセージ</string>
<string name="message">メッセージ</string> <string name="message">メッセージ</string>
<string name="fetch_gfycat_video_failed">Gfycat動画を取得できませんでした</string>
<string name="fetch_redgifs_video_failed">Redgifs動画を取得できませんでした</string> <string name="fetch_redgifs_video_failed">Redgifs動画を取得できませんでした</string>
<string name="fetching_video_info_please_wait">動画の情報を取得中です。少々お待ちください。</string> <string name="fetching_video_info_please_wait">動画の情報を取得中です。少々お待ちください。</string>
<string name="error_fetching_imgur_media">画像をロードできませんでした</string> <string name="error_fetching_imgur_media">画像をロードできませんでした</string>
@ -782,7 +780,6 @@
<string name="set_to_lock_screen">ロック画面に設定</string> <string name="set_to_lock_screen">ロック画面に設定</string>
<string name="set_to_both">両方に設定</string> <string name="set_to_both">両方に設定</string>
<string name="default_font_font_preview">Default</string> <string name="default_font_font_preview">Default</string>
<string name="load_video_in_redgifs">Redgifsから動画のロードを試行</string>
<string name="top_score">%1$s点</string> <string name="top_score">%1$s点</string>
<string name="login_activity_2fa_prompt">2段階認証を有効にしている場合、パスワードは次のように入力してください 「&lt;パスワード&gt;:&lt;2段階認証コード&gt;</string> <string name="login_activity_2fa_prompt">2段階認証を有効にしている場合、パスワードは次のように入力してください 「&lt;パスワード&gt;:&lt;2段階認証コード&gt;</string>
<string name="submit_crosspost_activity_label">クロスポスト</string> <string name="submit_crosspost_activity_label">クロスポスト</string>

View File

@ -324,7 +324,6 @@
<string name="settings_volume_keys_navigate_posts_title">"볼륨 키로 포스트 스크롤하기"</string> <string name="settings_volume_keys_navigate_posts_title">"볼륨 키로 포스트 스크롤하기"</string>
<string name="settings_mute_video_title">"둥영상 음소거"</string> <string name="settings_mute_video_title">"둥영상 음소거"</string>
<string name="settings_mute_nsfw_video_title">"NSFW 둥영상 음소거"</string> <string name="settings_mute_nsfw_video_title">"NSFW 둥영상 음소거"</string>
<string name="settings_automatically_try_redgifs_title">"Gfycat 비디오가 제거되었을 시 자동으로 Redgifs 접근 시도하기"</string>
<string name="settings_video_player_ignore_nav_bar_title">"영상에서 내비게이션 바 무시"</string> <string name="settings_video_player_ignore_nav_bar_title">"영상에서 내비게이션 바 무시"</string>
<string name="settings_confirm_to_exit">"나갈 때 확인"</string> <string name="settings_confirm_to_exit">"나갈 때 확인"</string>
<string name="settings_category_comment_title">"댓글"</string> <string name="settings_category_comment_title">"댓글"</string>

View File

@ -312,7 +312,6 @@
<string name="settings_mute_video_title">Video\'s dempen</string> <string name="settings_mute_video_title">Video\'s dempen</string>
<string name="settings_mute_nsfw_video_title">NSFW-video\'s dempen</string> <string name="settings_mute_nsfw_video_title">NSFW-video\'s dempen</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Automatisch trachten Redgifs te openen als video\'s zijn verwijderd van Gfycat</string>
<string name="settings_video_player_ignore_nav_bar_title">Navigatiebalk verbergen in videospeler</string> <string name="settings_video_player_ignore_nav_bar_title">Navigatiebalk verbergen in videospeler</string>
<string name="settings_video_player_ignore_nav_bar_summary">Voorkom dat de navigatiebalk extra opvulling heeft</string> <string name="settings_video_player_ignore_nav_bar_summary">Voorkom dat de navigatiebalk extra opvulling heeft</string>
<string name="settings_confirm_to_exit">Afsluiten bevestigen</string> <string name="settings_confirm_to_exit">Afsluiten bevestigen</string>
@ -722,7 +721,6 @@ not: "5 uren" -->
<string name="notifications">Notificaties</string> <string name="notifications">Notificaties</string>
<string name="messages">Berichten</string> <string name="messages">Berichten</string>
<string name="message">Bericht</string> <string name="message">Bericht</string>
<string name="fetch_gfycat_video_failed">Ophalen van Gfycat video is mislukt</string>
<string name="fetch_redgifs_video_failed">Ophalen van Redgifs video is mislukt</string> <string name="fetch_redgifs_video_failed">Ophalen van Redgifs video is mislukt</string>
<string name="fetching_video_info_please_wait">Ophalen van videoinfo. Even geduld aub.</string> <string name="fetching_video_info_please_wait">Ophalen van videoinfo. Even geduld aub.</string>
<string name="error_fetching_imgur_media">Kan afbeeldingen niet laden</string> <string name="error_fetching_imgur_media">Kan afbeeldingen niet laden</string>
@ -744,7 +742,6 @@ not: "5 uren" -->
<string name="set_to_lock_screen">Als vergrendeldscherm instellen</string> <string name="set_to_lock_screen">Als vergrendeldscherm instellen</string>
<string name="set_to_both">Als beiden instellen</string> <string name="set_to_both">Als beiden instellen</string>
<string name="default_font_font_preview">Standaard</string> <string name="default_font_font_preview">Standaard</string>
<string name="load_video_in_redgifs">Probeer de video op Redgifs te laden</string>
<string name="top_score">%1$s pnt</string> <string name="top_score">%1$s pnt</string>
<string name="login_activity_2fa_prompt">Als je 2-factor authenticatie hebt ingeschakeld, typ dan je wachtwoord als volgt in: &lt;wachtwoord&gt;: &lt;2FA code&gt;. <string name="login_activity_2fa_prompt">Als je 2-factor authenticatie hebt ingeschakeld, typ dan je wachtwoord als volgt in: &lt;wachtwoord&gt;: &lt;2FA code&gt;.
\nVoorbeeld: yourpass:123456</string> \nVoorbeeld: yourpass:123456</string>

View File

@ -313,7 +313,6 @@
<string name="settings_mute_video_title">Wycisz filmy</string> <string name="settings_mute_video_title">Wycisz filmy</string>
<string name="settings_mute_nsfw_video_title">Wycisz wideo NSFW</string> <string name="settings_mute_nsfw_video_title">Wycisz wideo NSFW</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Automatycznie próbuj uzyskać filmy z Redgifs, gdy są usunięte z Gfycat.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignoruj pasek nawigacji w odtwarzaczu wideo</string> <string name="settings_video_player_ignore_nav_bar_title">Ignoruj pasek nawigacji w odtwarzaczu wideo</string>
<string name="settings_video_player_ignore_nav_bar_summary">Zapobiegaj posiadaniu dodatkowego marginesu przez kontroler wideo</string> <string name="settings_video_player_ignore_nav_bar_summary">Zapobiegaj posiadaniu dodatkowego marginesu przez kontroler wideo</string>
<string name="settings_confirm_to_exit">Potwierdź aby wyjść</string> <string name="settings_confirm_to_exit">Potwierdź aby wyjść</string>
@ -720,7 +719,6 @@
<string name="notifications">Powiadomienia</string> <string name="notifications">Powiadomienia</string>
<string name="messages">Wiadomości</string> <string name="messages">Wiadomości</string>
<string name="message">Wiadomość</string> <string name="message">Wiadomość</string>
<string name="fetch_gfycat_video_failed">Nie udało się pobrać filmu z Gfycat</string>
<string name="fetch_redgifs_video_failed">Nie udało się pobrać filmu z Redgifs</string> <string name="fetch_redgifs_video_failed">Nie udało się pobrać filmu z Redgifs</string>
<string name="fetching_video_info_please_wait">Pobieranie informacji o filmie. Proszę czekać.</string> <string name="fetching_video_info_please_wait">Pobieranie informacji o filmie. Proszę czekać.</string>
<string name="error_fetching_imgur_media">Nie można załadować obrazów</string> <string name="error_fetching_imgur_media">Nie można załadować obrazów</string>
@ -742,7 +740,6 @@
<string name="set_to_lock_screen">Ustaw na ekranie blokady</string> <string name="set_to_lock_screen">Ustaw na ekranie blokady</string>
<string name="set_to_both">Ustaw na obu</string> <string name="set_to_both">Ustaw na obu</string>
<string name="default_font_font_preview">Domyślnie</string> <string name="default_font_font_preview">Domyślnie</string>
<string name="load_video_in_redgifs">Spróbuj załadować film na Redgifs</string>
<string name="top_score">%1$s punktów</string> <string name="top_score">%1$s punktów</string>
<string name="login_activity_2fa_prompt">Jeśli masz włączone uwierzytelnianie dwuskładnikowe, wpisz swoje hasło w następujący sposób: &lt;hasło&gt;:&lt;kod 2FA&gt;</string> <string name="login_activity_2fa_prompt">Jeśli masz włączone uwierzytelnianie dwuskładnikowe, wpisz swoje hasło w następujący sposób: &lt;hasło&gt;:&lt;kod 2FA&gt;</string>
<string name="submit_crosspost_activity_label">Crosspost</string> <string name="submit_crosspost_activity_label">Crosspost</string>

View File

@ -315,7 +315,6 @@
<string name="settings_volume_keys_navigate_posts_title">Usar as teclas de volume para navegar entre posts</string> <string name="settings_volume_keys_navigate_posts_title">Usar as teclas de volume para navegar entre posts</string>
<string name="settings_mute_video_title">Silenciar vídeos</string> <string name="settings_mute_video_title">Silenciar vídeos</string>
<string name="settings_mute_nsfw_video_title">Silenciar vídeos NSFW</string> <string name="settings_mute_nsfw_video_title">Silenciar vídeos NSFW</string>
<string name="settings_automatically_try_redgifs_title">Tentar acessar automaticamente o Redgifs se os vídeos do Gfycat forem removidos.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignorar barra de navegação no reprodutor de vídeos</string> <string name="settings_video_player_ignore_nav_bar_title">Ignorar barra de navegação no reprodutor de vídeos</string>
<string name="settings_video_player_ignore_nav_bar_summary">Evitar que o controle de vídeo tenha margens largas</string> <string name="settings_video_player_ignore_nav_bar_summary">Evitar que o controle de vídeo tenha margens largas</string>
<string name="settings_confirm_to_exit">Confirmar para sair</string> <string name="settings_confirm_to_exit">Confirmar para sair</string>
@ -717,7 +716,6 @@
<string name="notifications">Notificações</string> <string name="notifications">Notificações</string>
<string name="messages">Mensagens</string> <string name="messages">Mensagens</string>
<string name="message">Mensagem</string> <string name="message">Mensagem</string>
<string name="fetch_gfycat_video_failed">Falha ao buscar vídeos do Gfycat</string>
<string name="fetch_redgifs_video_failed">Erro ao buscar vídeos do Redgifs</string> <string name="fetch_redgifs_video_failed">Erro ao buscar vídeos do Redgifs</string>
<string name="fetching_video_info_please_wait">Obtendo informações do vídeo. Por favor aguarde.</string> <string name="fetching_video_info_please_wait">Obtendo informações do vídeo. Por favor aguarde.</string>
<string name="error_fetching_imgur_media">Não foi possível carregar as imagens</string> <string name="error_fetching_imgur_media">Não foi possível carregar as imagens</string>
@ -738,7 +736,6 @@
<string name="set_to_lock_screen">Aplicar na tela de bloqueio</string> <string name="set_to_lock_screen">Aplicar na tela de bloqueio</string>
<string name="set_to_both">Aplicar em ambos</string> <string name="set_to_both">Aplicar em ambos</string>
<string name="default_font_font_preview">Padrão</string> <string name="default_font_font_preview">Padrão</string>
<string name="load_video_in_redgifs">Tente carregar o vídeo no Redgifs</string>
<string name="top_score">%1$s pontos</string> <string name="top_score">%1$s pontos</string>
<string name="login_activity_2fa_prompt">Se você tem a Autenticação em 2 Etapas ativada, digite a senha da seguinte forma: &lt;senha&gt;:&lt;código de autenticação&gt;. <string name="login_activity_2fa_prompt">Se você tem a Autenticação em 2 Etapas ativada, digite a senha da seguinte forma: &lt;senha&gt;:&lt;código de autenticação&gt;.
\nExemplo: suasenha:123456</string> \nExemplo: suasenha:123456</string>

View File

@ -318,7 +318,6 @@
<string name="settings_mute_video_title">Vídeos Sem Som</string> <string name="settings_mute_video_title">Vídeos Sem Som</string>
<string name="settings_mute_nsfw_video_title">Vídeos 18+ Sem Som</string> <string name="settings_mute_nsfw_video_title">Vídeos 18+ Sem Som</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Tentar aceder ao Redgifs automaticamente caso os vídeos no Gfycat tenham sido removidos.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignorar Barra de Navegação no Reprodutor de Vídeo</string> <string name="settings_video_player_ignore_nav_bar_title">Ignorar Barra de Navegação no Reprodutor de Vídeo</string>
<string name="settings_video_player_ignore_nav_bar_summary">Impedir que o Controlador de Vídeo Tenha Margem Extra</string> <string name="settings_video_player_ignore_nav_bar_summary">Impedir que o Controlador de Vídeo Tenha Margem Extra</string>
<string name="settings_confirm_to_exit">Confirmar para Sair</string> <string name="settings_confirm_to_exit">Confirmar para Sair</string>
@ -709,7 +708,6 @@
<string name="notifications">Notificações</string> <string name="notifications">Notificações</string>
<string name="messages">Mensagens</string> <string name="messages">Mensagens</string>
<string name="message">Mensagem</string> <string name="message">Mensagem</string>
<string name="fetch_gfycat_video_failed">Falha ao obter vídeo do Gfycat</string>
<string name="fetch_redgifs_video_failed">Falha ao obter vídeo do Redgifs</string> <string name="fetch_redgifs_video_failed">Falha ao obter vídeo do Redgifs</string>
<string name="fetching_video_info_please_wait">A obter informações do vídeo. Aguarde.</string> <string name="fetching_video_info_please_wait">A obter informações do vídeo. Aguarde.</string>
<string name="error_fetching_imgur_media">Impossível carregar imagens</string> <string name="error_fetching_imgur_media">Impossível carregar imagens</string>
@ -730,7 +728,6 @@
<string name="set_to_lock_screen">Ecrã de Bloqueio</string> <string name="set_to_lock_screen">Ecrã de Bloqueio</string>
<string name="set_to_both">Ambos</string> <string name="set_to_both">Ambos</string>
<string name="default_font_font_preview">Padrão</string> <string name="default_font_font_preview">Padrão</string>
<string name="load_video_in_redgifs">Tente carregar o vídeo no Redgifs</string>
<string name="top_score">%1$s pontos</string> <string name="top_score">%1$s pontos</string>
<string name="login_activity_2fa_prompt">Caso tenha autenticação de dois fatores (2FA) ativada, tem de preencher o campo do token 2FA. Caso contrário, deixe-o vazio</string> <string name="login_activity_2fa_prompt">Caso tenha autenticação de dois fatores (2FA) ativada, tem de preencher o campo do token 2FA. Caso contrário, deixe-o vazio</string>
<string name="submit_crosspost_activity_label">Republicar</string> <string name="submit_crosspost_activity_label">Republicar</string>

View File

@ -325,7 +325,6 @@
<string name="settings_volume_keys_navigate_posts_title">Utilizează Tastele de Volum pentru a Naviga Postările</string> <string name="settings_volume_keys_navigate_posts_title">Utilizează Tastele de Volum pentru a Naviga Postările</string>
<string name="settings_mute_video_title">Amuțire Videoclip</string> <string name="settings_mute_video_title">Amuțire Videoclip</string>
<string name="settings_mute_nsfw_video_title">Amuțire Videoclipurilor NSFW</string> <string name="settings_mute_nsfw_video_title">Amuțire Videoclipurilor NSFW</string>
<string name="settings_automatically_try_redgifs_title">Încearcă Automat să Accesați Redgifs dacă Videoclipurile de pe Gfycat sunt Eliminate.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignoră Bara de Navigare în Player-ul pentru Video</string> <string name="settings_video_player_ignore_nav_bar_title">Ignoră Bara de Navigare în Player-ul pentru Video</string>
<string name="settings_video_player_ignore_nav_bar_summary">Împiedică Controller-ul Video să aibă Margine Suplimentară</string> <string name="settings_video_player_ignore_nav_bar_summary">Împiedică Controller-ul Video să aibă Margine Suplimentară</string>
<string name="settings_confirm_to_exit">Confirmă pentru a Ieși</string> <string name="settings_confirm_to_exit">Confirmă pentru a Ieși</string>
@ -731,11 +730,10 @@
<string name="report_reason_general_child_pornography">Conține Pornografie Infantilă</string> <string name="report_reason_general_child_pornography">Conține Pornografie Infantilă</string>
<string name="report_reason_general_abusive_content">Conține Conținut Abuziv</string> <string name="report_reason_general_abusive_content">Conține Conținut Abuziv</string>
<string name="subscribed_feed">Acasă</string> <string name="subscribed_feed">Acasă</string>
<string name="local">Popular</string> <string name="local">Local</string>
<string name="notifications">Notificări</string> <string name="notifications">Notificări</string>
<string name="messages">Mesaje</string> <string name="messages">Mesaje</string>
<string name="message">Mesaj</string> <string name="message">Mesaj</string>
<string name="fetch_gfycat_video_failed">Obținerea videoclipului Gfycat a eșuat</string>
<string name="fetch_redgifs_video_failed">Obținerea videoclipului Redgifs a eșuat</string> <string name="fetch_redgifs_video_failed">Obținerea videoclipului Redgifs a eșuat</string>
<string name="fetching_video_info_please_wait">Se obțin informații despre video. Te rugăm să aștepți.</string> <string name="fetching_video_info_please_wait">Se obțin informații despre video. Te rugăm să aștepți.</string>
<string name="error_fetching_imgur_media">Nu s-au putut încărca imaginile</string> <string name="error_fetching_imgur_media">Nu s-au putut încărca imaginile</string>
@ -756,10 +754,8 @@
<string name="set_to_lock_screen">Setează pe Ecranul de Blocare</string> <string name="set_to_lock_screen">Setează pe Ecranul de Blocare</string>
<string name="set_to_both">Setează pe Ambele</string> <string name="set_to_both">Setează pe Ambele</string>
<string name="default_font_font_preview">Implicit</string> <string name="default_font_font_preview">Implicit</string>
<string name="load_video_in_redgifs">Încearcă să încarci videoclipul pe Redgifs</string>
<string name="top_score">%1$s pct</string> <string name="top_score">%1$s pct</string>
<string name="login_activity_2fa_prompt">Dacă ai activat autentificarea cu 2 factori, te rugăm să introduci parola ta după cum urmează: &lt;parolă&gt;:&lt;cod 2FA&gt;. <string name="login_activity_2fa_prompt">Dacă aveți autentificarea cu doi pași activată, va trebui să umpleți câmpul jetonului 2FA. Lăsați-l gol altfel</string>
\nExemplu: parolata:123456</string>
<string name="submit_crosspost_activity_label">Crosspost</string> <string name="submit_crosspost_activity_label">Crosspost</string>
<string name="give_award_activity_label">Acordă un Premiu</string> <string name="give_award_activity_label">Acordă un Premiu</string>
<string name="action_crosspost">Crosspost</string> <string name="action_crosspost">Crosspost</string>
@ -803,10 +799,7 @@
<string name="settings_bottom_app_bar_option_4">Opțiunea 4</string> <string name="settings_bottom_app_bar_option_4">Opțiunea 4</string>
<string name="settings_bottom_app_bar_fab">Buton de Acțiune Plutitor</string> <string name="settings_bottom_app_bar_fab">Buton de Acțiune Plutitor</string>
<string name="settings_data_saving_mode">Regim de Economisire a Datelor</string> <string name="settings_data_saving_mode">Regim de Economisire a Datelor</string>
<string name="settings_data_saving_mode_info_summary">În regimul de economisire a datelor: <string name="settings_data_saving_mode_info_summary">În regimul de economisire a datelor: Imaginile de previzualizare au o rezoluție mai mică. Videoclipurile Lemmy au o rezoluție mai mică. Redarea automată a videoclipurilor este dezactivată.</string>
\nImaginile de previzualizare au o rezoluție mai mică.
\nVideoclipurile Reddit au o rezoluție mai mică.
\nRedarea automată a videoclipurilor este dezactivată.</string>
<string name="settings_translation_title">Traducere</string> <string name="settings_translation_title">Traducere</string>
<string name="settings_translation_summary">Tradu această aplicație pe POEditor. Mulțumiri tuturor contribuitorilor.</string> <string name="settings_translation_summary">Tradu această aplicație pe POEditor. Mulțumiri tuturor contribuitorilor.</string>
<string name="settings_credits_national_flags">Steaguri Naționale</string> <string name="settings_credits_national_flags">Steaguri Naționale</string>
@ -984,7 +977,7 @@
<string name="theme_item_current_user_color_detail">Aplicat pe: Utilizatorul curent în comentarii</string> <string name="theme_item_current_user_color_detail">Aplicat pe: Utilizatorul curent în comentarii</string>
<string name="exclude_domains_hint">Exclude domeniile</string> <string name="exclude_domains_hint">Exclude domeniile</string>
<string name="anonymous_front_page_no_subscriptions">Începe prin a te alătura unui subreddit!</string> <string name="anonymous_front_page_no_subscriptions">Începe prin a te alătura unui subreddit!</string>
<string name="backup_settings_success">A fost exportat cu succes setările în directorul de destinație. Parola fișierului zip generat este 123321. Vă rugăm să nu modificați fișierul zip.</string> <string name="backup_settings_success">Au fost exportate cu succes setările în directorul de destinație.</string>
<string name="create_zip_in_destination_directory_failed">Nu s-a putut crea fișierul zip de rezervă în directorul de destinație</string> <string name="create_zip_in_destination_directory_failed">Nu s-a putut crea fișierul zip de rezervă în directorul de destinație</string>
<string name="backup_some_settings_failed">Nu s-a putut include în copia de rezervă unele setări, dar celelalte au fost exportate cu succes în directorul de destinație</string> <string name="backup_some_settings_failed">Nu s-a putut include în copia de rezervă unele setări, dar celelalte au fost exportate cu succes în directorul de destinație</string>
<string name="restore_settings_success">Setările au fost restaurate cu succes. Repornește aplicația pentru a vedea modificările.</string> <string name="restore_settings_success">Setările au fost restaurate cu succes. Repornește aplicația pentru a vedea modificările.</string>
@ -1065,7 +1058,7 @@
<string name="uploaded_images">Imagini Încărcate</string> <string name="uploaded_images">Imagini Încărcate</string>
<string name="select_image">Selectează o Imagine</string> <string name="select_image">Selectează o Imagine</string>
<string name="capture">Capturează</string> <string name="capture">Capturează</string>
<string name="uploading_image">Se încarcă</string> <string name="uploading_image">Încărcare</string>
<string name="upload_image_success">Imaginea a fost încărcată cu succes. Apasă din nou pe butonul de imagine pentru a vedea imaginile încărcate.</string> <string name="upload_image_success">Imaginea a fost încărcată cu succes. Apasă din nou pe butonul de imagine pentru a vedea imaginile încărcate.</string>
<string name="get_image_bitmap_failed">Nu s-a putut obține bitmap-ul imaginii</string> <string name="get_image_bitmap_failed">Nu s-a putut obține bitmap-ul imaginii</string>
<string name="upload_image_failed">Nu s-a putut încărca imaginea</string> <string name="upload_image_failed">Nu s-a putut încărca imaginea</string>
@ -1227,7 +1220,6 @@
<string name="moderators">Moderatori</string> <string name="moderators">Moderatori</string>
<string name="anonymous_account_instance">Instanță Cont Anonim</string> <string name="anonymous_account_instance">Instanță Cont Anonim</string>
<string name="exo_controls_volume_off_description">Volum Oprit</string> <string name="exo_controls_volume_off_description">Volum Oprit</string>
<string name="user_username">Nume de utilizator</string> <string name="user_username">Nume de utilizator</string>
<string name="settings_comment_divider_type">Tip Divizor Comentarii</string> <string name="settings_comment_divider_type">Tip Divizor Comentarii</string>
<string name="settings_navigation_drawer_enable_hide_karma_title">Ascundeți Karma de la Cont</string> <string name="settings_navigation_drawer_enable_hide_karma_title">Ascundeți Karma de la Cont</string>
@ -1310,4 +1302,75 @@
<string name="unblock_user_success">Deblocat</string> <string name="unblock_user_success">Deblocat</string>
<string name="comment_count_detail">%1$,d Comentarii</string> <string name="comment_count_detail">%1$,d Comentarii</string>
<string name="sort_time_3months">3 Luni</string> <string name="sort_time_3months">3 Luni</string>
<string name="apply_to">Aplicați la</string>
<string name="post_filter_usage_embedded_user_all">Toți utilizatorii</string>
<string name="post_filter_usage_embedded_multireddit_all">Toate Multicomunitățile</string>
<string name="welcome_to_infinity">Bine ați venit la Infinity pentru Reddit, poarta dumneavoastră la o nouă dimensiune a navigării pe Reddit!</string>
<string name="comment_filter_preference_activity_label">Filtru Comentarii</string>
<string name="post_layout_card_3">Aspect Card 3</string>
<string name="confirm">Confirmați</string>
<string name="confirm_delete_all_recent_searches">Sunteți sigur că doriți să ștergeți toate căutările recente\?</string>
<string name="icon_original_label">Iconița originală</string>
<string name="theme_item_read_post_filled_card_view_background_color">Culoare de fundal pentru cardul umplut unei postări citite</string>
<string name="theme_item_read_post_filled_card_view_background_color_detail">Aplicat la: Fundalul unei postări citite într-un card umplut</string>
<string name="settings_credits_new_icon_summary">Creată de David Gerla</string>
<string name="settings_comment_filter_title">Filtru Comentarii</string>
<string name="theme_item_filled_card_view_background_color_detail">Aplicat la: Fundalul unei postări într-un card umplut, unele câmpuri de editare text</string>
<string name="post_filter_usage_embedded_subreddit_all">Toate Comunitățile</string>
<string name="subscription_prompt">Înainte să vă aruncați în posibilitățile nelimitate oferite de această aplicație, doresc să fiu anticipat și transparent despre o schimbare semnificativă pe care am implementat-o pentru a mă asigura că aveți cel mai bun serviciu.
\n
\nDe acum înainte, veți avea nevoie de un abonament lunar pentru a accesa API-ul Reddit din Infinity pentru Reddit și este din pricină că Reddit a început să ceară plăți pentru accesul la API din 1 Iulie, 2023.
\n
\nToate nivelele funcționează la fel. Dacă vreți să ajutați Infinity, puteți să vă abonați la un nivel mai înalt. Majoritatea banilor din nivelele joase se duc la Reddit.</string>
<string name="acknowledgement_purchase_failed_description">Ups, a avut loc o eroare la recunoașterea plății dumneavoastră. Dacă problema persistă pentru trei zile, veți primi un retur gratuit.
\nNu vă faceți griji, vă puteți bucura în continuare de Infinity pentru Reddit.</string>
<string name="settings_credits_new_icon">Noua iconiță a aplicației (Cosmic Lemmy)</string>
<string name="subscription_activity_label">Abonament</string>
<string name="important_info">Infinity pentru Reddit cu un abonament folosește o cheie API nouă de la Reddit și trebuie să vă logați din nou pentru a putea să continuați utilizarea aplicației.
\n
\nDoar deschideți sertarul de navigare și apăsați pe antetul contului dumneavoastră și selectați \"Adăugați un cont\" pentru a vă loga la Reddit folosind același cont din nou. Altfel, Infinity s-ar putea să nu mai încarce postări din nou. Scuze pentru inconveniență.</string>
<string name="action_add_to_home_screen">Adăugați la ecranul Acasă</string>
<string name="theme_item_filled_card_view_background_color">Culoare de fundal pentru cardul umplut vizibil</string>
<string name="billing_error_service_disconnected">Aplicația nu este conectată la serviciul Magazin Play prin librăria Facturări Google Play.</string>
<string name="acknowledging_subscription">Recunoașterea abonamentului dumneavoastră. Vă rugăm așteptați.</string>
<string name="click_to_apply_post_filter">Clic aici pentru a aplica la unele câmpuri ale postărilor</string>
<string name="post_filter_usage_embedded_more_count">și %1$d mai mult</string>
<string name="excludes_strings_hint">Excludeți cuvinte cheie (cuvânt1, cuvânt2)</string>
<string name="comment_filter_name_hint">Nume Filtru Comentarii</string>
<string name="comment_filter_requires_a_name">Care este numele acestui filtru de comentarii\?</string>
<string name="duplicate_comment_filter_dialog_title">\'%1$s\' Există deja</string>
<string name="duplicate_comment_filter_dialog_message">Scrieți peste\?</string>
<string name="comment_filter_usage_embedded_more_count">și %1$d mai mult</string>
<string name="monthly">Lunar</string>
<string name="yearly">Anual</string>
<string name="weekly">Săptămânal</string>
<string name="billing_error_billing_unavailable">Serviciul de plăți este indisponibil pe dispozitiv.</string>
<string name="billing_error_developer_error">Dezvoltatorul a făcut unele erori. Nu este problema dumneavoastră.</string>
<string name="billing_error_error">Eroare fatală în timpul acțiunii API.</string>
<string name="billing_error_feature_not_supported">Cererea nu este suportată de Magazin Play pe dispozitivul curent.</string>
<string name="billing_error_item_already_owned">Tranzacția a eșuat deoarece acest obiect este deja deținut.</string>
<string name="billing_error_item_unavailable">Produsul cerut nu este valabil pentru cumpărare.</string>
<string name="billing_error_network_error">O problemă de conexiune s-a întâmplat în timpul operațiunii.</string>
<string name="billing_error_service_unavailable">Serviciul este indisponibil momentan.</string>
<string name="billing_error_user_canceled">Tranzacția a fost anulată de utilizator.</string>
<string name="subscription_plan_description_monthly">Bronz</string>
<string name="subscription_plan_description_monthly_399">Argint</string>
<string name="subscription_plan_description_monthly_499">Aur - Alegerea Perfectă!</string>
<string name="subscription_plan_description_monthly_699">Platină</string>
<string name="subscription_plan_description_monthly_899">Diamant</string>
<string name="subscription_plan_description_monthly_999">Infinit</string>
<string name="acknowledge_purchase_failed">Achiziția nu a putut fi recunoscută</string>
<string name="connect_to_billing_system_failed">Eșuare în conectarea la sistemul de facturare</string>
<string name="connecting_to_billing_system">Conectare la sistemul de facturare. Vă rugăm așteptați.</string>
<string name="thank_you_for_subscription">Mulțumim pentru abonare</string>
<string name="load_subscription_options">Încărcați opțiunile de abonare</string>
<string name="continue_to_app">Continuați la aplicație</string>
<string name="restore_subscription_purchase_details">Ați plătit deja pentru un abonament\?</string>
<string name="restore_subscription_purchase">Restaurați cumpărarea abonamentului</string>
<string name="important_info_title">Vă rugăm să vă logați din nou în cont</string>
<string name="comment_filter_applied_to_all_subreddits">Aplicat la toate comunitățile</string>
<string name="customize_comment_filter_activity_label">Personalizați Filtrul de Comentarii</string>
<string name="original_app">Iconița originală a aplicației Reddit</string>
<string name="settings_credits_original_app_description">"Infinity a fost creat de u/Hostilenemy "</string>
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">URL-ul instanței preferate de Lemmy cu sau fără prefixul https://</string>
</resources> </resources>

View File

@ -319,7 +319,6 @@
<string name="settings_mute_video_title">Видео без звука</string> <string name="settings_mute_video_title">Видео без звука</string>
<string name="settings_mute_nsfw_video_title">NSFW-видео без звука</string> <string name="settings_mute_nsfw_video_title">NSFW-видео без звука</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Пытаться использовать Redgifs, если видео на Gfycat удалены.</string>
<string name="settings_video_player_ignore_nav_bar_title">Не использовать панель навигации в видеоплеере</string> <string name="settings_video_player_ignore_nav_bar_title">Не использовать панель навигации в видеоплеере</string>
<string name="settings_video_player_ignore_nav_bar_summary">Предотвратить случайные нажатия</string> <string name="settings_video_player_ignore_nav_bar_summary">Предотвратить случайные нажатия</string>
<string name="settings_confirm_to_exit">Подтверждать выход</string> <string name="settings_confirm_to_exit">Подтверждать выход</string>
@ -723,7 +722,6 @@
<string name="notifications">Уведомления</string> <string name="notifications">Уведомления</string>
<string name="messages">Сообщения</string> <string name="messages">Сообщения</string>
<string name="message">Сообщение</string> <string name="message">Сообщение</string>
<string name="fetch_gfycat_video_failed">Невозможно получить видео Gfycat</string>
<string name="fetch_redgifs_video_failed">Невозможно получить видео Redgifs</string> <string name="fetch_redgifs_video_failed">Невозможно получить видео Redgifs</string>
<string name="fetching_video_info_please_wait">Получение информации о видео. Пожалуйста, подождите.</string> <string name="fetching_video_info_please_wait">Получение информации о видео. Пожалуйста, подождите.</string>
<string name="error_fetching_imgur_media">Невозможно загрузить изображения</string> <string name="error_fetching_imgur_media">Невозможно загрузить изображения</string>
@ -744,7 +742,6 @@
<string name="set_to_lock_screen">Установить на экран блокировки</string> <string name="set_to_lock_screen">Установить на экран блокировки</string>
<string name="set_to_both">Установить на оба экрана</string> <string name="set_to_both">Установить на оба экрана</string>
<string name="default_font_font_preview">По умолчанию</string> <string name="default_font_font_preview">По умолчанию</string>
<string name="load_video_in_redgifs">Попробуйте загрузить видео на Redgifs</string>
<string name="top_score">%1$s пойнтов</string> <string name="top_score">%1$s пойнтов</string>
<string name="login_activity_2fa_prompt">Если у вас включена двухфакторная аутентификация, введите 2FA токен в поле. Иначе оставьте его пустым</string> <string name="login_activity_2fa_prompt">Если у вас включена двухфакторная аутентификация, введите 2FA токен в поле. Иначе оставьте его пустым</string>
<string name="submit_crosspost_activity_label">Кросспост</string> <string name="submit_crosspost_activity_label">Кросспост</string>
@ -967,7 +964,7 @@
<string name="theme_item_current_user_color_detail">Применяется к: текущий пользователь в комментариях</string> <string name="theme_item_current_user_color_detail">Применяется к: текущий пользователь в комментариях</string>
<string name="exclude_domains_hint">Исключить домены</string> <string name="exclude_domains_hint">Исключить домены</string>
<string name="anonymous_front_page_no_subscriptions">Начните с присоединения к сообществу!</string> <string name="anonymous_front_page_no_subscriptions">Начните с присоединения к сообществу!</string>
<string name="backup_settings_success">Настройки успешно экспортированы в выбранную папку. Пароль созданного zip-архива 123321. Пожалуйста, не изменяйте zip-файл.</string> <string name="backup_settings_success">Настройки успешно экспортированы в выбранную папку.</string>
<string name="create_zip_in_destination_directory_failed">Невозможно создать zip-архив с резервной копией в выбранной папке</string> <string name="create_zip_in_destination_directory_failed">Невозможно создать zip-архив с резервной копией в выбранной папке</string>
<string name="backup_some_settings_failed">Невозможно создать резервную копию некоторых настроек, но другие были успешно экспортированы в выбранную папку</string> <string name="backup_some_settings_failed">Невозможно создать резервную копию некоторых настроек, но другие были успешно экспортированы в выбранную папку</string>
<string name="restore_settings_success">Настройки успешно восстановлены. Перезапустите приложение, чтобы увидеть изменения.</string> <string name="restore_settings_success">Настройки успешно восстановлены. Перезапустите приложение, чтобы увидеть изменения.</string>
@ -1278,7 +1275,6 @@
<string name="settings_easier_to_watch_in_full_screen_title">Удобнее просматривать в полном экране</string> <string name="settings_easier_to_watch_in_full_screen_title">Удобнее просматривать в полном экране</string>
<string name="theme_name_carbonfox">Carbonfox</string> <string name="theme_name_carbonfox">Carbonfox</string>
<string name="i_understand">Понятно</string> <string name="i_understand">Понятно</string>
<string name="settings_hide_community_and_user_instance">Не показывать сообщество и сервер пользователя</string> <string name="settings_hide_community_and_user_instance">Не показывать сообщество и сервер пользователя</string>
<string name="settings_show_display_name_instead_of_user_name">Показывать сообщество и отображать имена пользователей</string> <string name="settings_show_display_name_instead_of_user_name">Показывать сообщество и отображать имена пользователей</string>
<string name="active_users_number_detail">%1$,d активных пользователей</string> <string name="active_users_number_detail">%1$,d активных пользователей</string>
@ -1288,4 +1284,56 @@
<string name="icon_original_label">Классическая иконка</string> <string name="icon_original_label">Классическая иконка</string>
<string name="settings_credits_new_icon">Новая иконка (Космический Lemmy)</string> <string name="settings_credits_new_icon">Новая иконка (Космический Lemmy)</string>
<string name="settings_credits_new_icon_summary">от David Gerla</string> <string name="settings_credits_new_icon_summary">от David Gerla</string>
<string name="duplicate_comment_filter_dialog_message">Перезаписать его\?</string>
<string name="comment_filter_usage_embedded_more_count">и ещё %1$d</string>
<string name="comment_filter_preference_activity_label">Фильтр комментариев</string>
<string name="action_add_to_home_screen">Добавить на главный экран</string>
<string name="subscription_activity_label">Подписка</string>
<string name="confirm">Подтвердить</string>
<string name="post_filter_usage_embedded_subreddit_all">Всем сообществам</string>
<string name="weekly">Еженедельно</string>
<string name="important_info_title">Пожалуйста, войдите в учётную запись заново</string>
<string name="restore_subscription_purchase_details">Подписка уже оплачена\?</string>
<string name="subscription_plan_description_monthly_399">Серебряный</string>
<string name="confirm_delete_all_recent_searches">Вы точно хотите удалить все недавние поисковые запросы\?</string>
<string name="post_filter_usage_embedded_user_all">Всем пользователям</string>
<string name="subscription_plan_description_monthly_499">Золотой - Отличный выбор!</string>
<string name="settings_comment_filter_title">Фильтр комментариев</string>
<string name="comment_filter_requires_a_name">Как назвать этот фильтр\?</string>
<string name="monthly">Ежемесячно</string>
<string name="subscription_plan_description_monthly_699">Платиновый</string>
<string name="post_layout_card_3">Разметка карты 3</string>
<string name="duplicate_comment_filter_dialog_title">«%1$s» уже существует</string>
<string name="billing_error_billing_unavailable">Служба оплаты недоступна на этом устройстве.</string>
<string name="settings_credits_original_app_description">"Infinity - разработка u/Hostilenemy "</string>
<string name="customize_comment_filter_activity_label">Настроить фильтр комментариев</string>
<string name="restore_subscription_purchase">Восстановить покупку подписки</string>
<string name="thank_you_for_subscription">Спасибо за подписку</string>
<string name="subscription_plan_description_monthly_899">Алмазный</string>
<string name="post_filter_usage_embedded_multireddit_all">Всем мультисообществам</string>
<string name="click_to_apply_post_filter">Коснитесь здесь, чтобы применить к каким-нибудь лентам</string>
<string name="post_filter_usage_embedded_more_count">и ещё %1$d</string>
<string name="yearly">Ежегодно</string>
<string name="billing_error_developer_error">Разработчик допустил некоторые ошибки. Это не ваша вина.</string>
<string name="billing_error_error">Критическая ошибка при работе с API.</string>
<string name="billing_error_user_canceled">Оплата отменена пользователем.</string>
<string name="subscription_plan_description_monthly">Бронзовый</string>
<string name="comment_filter_applied_to_all_subreddits">Применяется ко всем сообществам</string>
<string name="billing_error_item_unavailable">Запрошенный товар недоступен для покупки.</string>
<string name="comment_filter_name_hint">Название фильтра комментариев</string>
<string name="connecting_to_billing_system">Подключение к системе платежей. Пожалуйста, подождите.</string>
<string name="billing_error_feature_not_supported">Необходимый функционал не поддерживается Play Store на данном устройстве.</string>
<string name="acknowledging_subscription">Проверка наличия подписки. Пожалуйста, подождите.</string>
<string name="connect_to_billing_system_failed">Не удалось подключиться к системе платежей</string>
<string name="subscription_plan_description_monthly_999">Infinity</string>
<string name="excludes_strings_hint">Исключить ключевые слова (слово1,слово2)</string>
<string name="billing_error_item_already_owned">Покупка не удалась, т.к. вы уже владеете этим товаром.</string>
<string name="billing_error_service_unavailable">В данный момент служба недоступна.</string>
<string name="continue_to_app">Продолжить в приложении</string>
<string name="apply_to">Применять ко</string>
<string name="acknowledge_purchase_failed">Не удалось проверить покупку</string>
<string name="welcome_to_infinity">Добро пожаловать в Infinity для Reddit — новое измерение просмотра Reddit!</string>
<string name="acknowledgement_purchase_failed_description">Упс.. при проверке вашей покупки возникла ошибка. Если эта проблема не решится за три дня, вы получите возврат автоматически.
\nНе переживайте, вы по-прежнему можете использовать Infinity для Reddit.</string>
<string name="billing_error_network_error">При произведении операции произошла ошибка сети.</string>
</resources> </resources>

View File

@ -320,7 +320,6 @@ This translation does it work well in this kinda format. People use "since" in s
<string name="settings_mute_video_title">Videoları Sessize Al</string> <string name="settings_mute_video_title">Videoları Sessize Al</string>
<string name="settings_mute_nsfw_video_title">NSFW Videolarını Sessize Al</string> <string name="settings_mute_nsfw_video_title">NSFW Videolarını Sessize Al</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Gfycat\'teki Videolar Kaldırılmışsa Otomatik Olarak Redgif\'lere Erişmeyi Dene.</string>
<string name="settings_video_player_ignore_nav_bar_title">Video Oynatıcısındaki Navigasyon Çubuğunu Yoksay</string> <string name="settings_video_player_ignore_nav_bar_title">Video Oynatıcısındaki Navigasyon Çubuğunu Yoksay</string>
<string name="settings_video_player_ignore_nav_bar_summary">Video Denetleyicisinde Fazladan Kenar Olmasını Önle</string> <string name="settings_video_player_ignore_nav_bar_summary">Video Denetleyicisinde Fazladan Kenar Olmasını Önle</string>
<string name="settings_confirm_to_exit">Çıkışı Doğrula</string> <string name="settings_confirm_to_exit">Çıkışı Doğrula</string>
@ -726,7 +725,6 @@ This translation does it work well in this kinda format. People use "since" in s
<string name="notifications">Bildirimler</string> <string name="notifications">Bildirimler</string>
<string name="messages">Mesajlar</string> <string name="messages">Mesajlar</string>
<string name="message">Mesaj</string> <string name="message">Mesaj</string>
<string name="fetch_gfycat_video_failed">Gfycat video\'su alınamadı</string>
<string name="fetch_redgifs_video_failed">Redgifs video\'su alınamadı</string> <string name="fetch_redgifs_video_failed">Redgifs video\'su alınamadı</string>
<string name="fetching_video_info_please_wait">Video bilgisi alınıyor. Lütfen bekleyin.</string> <string name="fetching_video_info_please_wait">Video bilgisi alınıyor. Lütfen bekleyin.</string>
<string name="error_fetching_imgur_media">Görüntüler yüklenemedi</string> <string name="error_fetching_imgur_media">Görüntüler yüklenemedi</string>
@ -748,7 +746,6 @@ This translation does it work well in this kinda format. People use "since" in s
<string name="set_to_lock_screen">Kilit Ekranına Ayarla</string> <string name="set_to_lock_screen">Kilit Ekranına Ayarla</string>
<string name="set_to_both">İkisine de Ayarla</string> <string name="set_to_both">İkisine de Ayarla</string>
<string name="default_font_font_preview">Varsayılan</string> <string name="default_font_font_preview">Varsayılan</string>
<string name="load_video_in_redgifs">Videoyu Redgifs\'e yüklemeyi deneyin</string>
<string name="top_score">%1$s puan</string> <string name="top_score">%1$s puan</string>
<string name="login_activity_2fa_prompt">2 faktörlü kimlik doğrulamasını etkinleştirdiyseniz, lütfen şifrenizi aşağıdaki gibi yazınız: &lt;parola&gt;: &lt;2FA code&gt;</string> <string name="login_activity_2fa_prompt">2 faktörlü kimlik doğrulamasını etkinleştirdiyseniz, lütfen şifrenizi aşağıdaki gibi yazınız: &lt;parola&gt;: &lt;2FA code&gt;</string>
<string name="submit_crosspost_activity_label">Çapraz Gönderi</string> <string name="submit_crosspost_activity_label">Çapraz Gönderi</string>

View File

@ -312,7 +312,6 @@
<string name="settings_volume_keys_navigate_posts_title">Пересуватися дописами клавішами гучності</string> <string name="settings_volume_keys_navigate_posts_title">Пересуватися дописами клавішами гучності</string>
<string name="settings_mute_video_title">Глушити відео</string> <string name="settings_mute_video_title">Глушити відео</string>
<string name="settings_mute_nsfw_video_title">Глушити відео НБДР</string> <string name="settings_mute_nsfw_video_title">Глушити відео НБДР</string>
<string name="settings_automatically_try_redgifs_title">Автоматично спробувати отримати доступ до Redgifs, якщо відео на Gfycat видалено.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ігнорувати панель пересування у відеопрогравачі</string> <string name="settings_video_player_ignore_nav_bar_title">Ігнорувати панель пересування у відеопрогравачі</string>
<string name="settings_video_player_ignore_nav_bar_summary">Не дозволяти відеоконтролеру мати додаткове поле</string> <string name="settings_video_player_ignore_nav_bar_summary">Не дозволяти відеоконтролеру мати додаткове поле</string>
<string name="settings_confirm_to_exit">Підтверджувати вихід</string> <string name="settings_confirm_to_exit">Підтверджувати вихід</string>
@ -714,7 +713,6 @@
<string name="notifications">Сповіщення</string> <string name="notifications">Сповіщення</string>
<string name="messages">Повідомлення</string> <string name="messages">Повідомлення</string>
<string name="message">Повідомлення</string> <string name="message">Повідомлення</string>
<string name="fetch_gfycat_video_failed">Не вдалося отримати відеозапис Gfycat</string>
<string name="fetch_redgifs_video_failed">Не вдалося отримати відеозапис Redgifs</string> <string name="fetch_redgifs_video_failed">Не вдалося отримати відеозапис Redgifs</string>
<string name="fetching_video_info_please_wait">Отримання відомостей про відео. Зачекайте.</string> <string name="fetching_video_info_please_wait">Отримання відомостей про відео. Зачекайте.</string>
<string name="error_fetching_imgur_media">Неможливо завантажити зображення</string> <string name="error_fetching_imgur_media">Неможливо завантажити зображення</string>
@ -735,7 +733,6 @@
<string name="set_to_lock_screen">Установити на екран блокування</string> <string name="set_to_lock_screen">Установити на екран блокування</string>
<string name="set_to_both">Установити для обох</string> <string name="set_to_both">Установити для обох</string>
<string name="default_font_font_preview">Типово</string> <string name="default_font_font_preview">Типово</string>
<string name="load_video_in_redgifs">Спробувати завантажити відеозапис на Redgifs</string>
<string name="top_score">%1$s балів</string> <string name="top_score">%1$s балів</string>
<string name="login_activity_2fa_prompt">Якщо у Вас увімкнено 2-факторну автентифікацію, Вам треба заповнити поле «Токен 2FA». Якщо ні — залиште його порожнім</string> <string name="login_activity_2fa_prompt">Якщо у Вас увімкнено 2-факторну автентифікацію, Вам треба заповнити поле «Токен 2FA». Якщо ні — залиште його порожнім</string>
<string name="submit_crosspost_activity_label">Передопис</string> <string name="submit_crosspost_activity_label">Передопис</string>
@ -1340,4 +1337,10 @@
<string name="settings_credits_original_app_description">"Infinity створив редитор u/Hostilenemy "</string> <string name="settings_credits_original_app_description">"Infinity створив редитор u/Hostilenemy "</string>
<string name="original_app">Оригінальний застосунок для Reddit</string> <string name="original_app">Оригінальний застосунок для Reddit</string>
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">URL вибраного Вами сервера Lemmy (з https:// або без нього)</string> <string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">URL вибраного Вами сервера Lemmy (з https:// або без нього)</string>
<string name="subscription_plan_description_monthly_499">Золота — ідеальний вибір!</string>
<string name="subscription_plan_description_monthly_399">Срібна</string>
<string name="subscription_plan_description_monthly_899">Діамантова</string>
<string name="subscription_plan_description_monthly_999">Infinity</string>
<string name="subscription_plan_description_monthly">Бронзова</string>
<string name="subscription_plan_description_monthly_699">Платинова</string>
</resources> </resources>

View File

@ -315,7 +315,6 @@
<string name="settings_mute_video_title">Tắt tiếng Video</string> <string name="settings_mute_video_title">Tắt tiếng Video</string>
<string name="settings_mute_nsfw_video_title">Tắt tiếng video NSFW</string> <string name="settings_mute_nsfw_video_title">Tắt tiếng video NSFW</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">Tự động thử truy cập Redgifs nếu Video trên Gfycat bị xóa.</string>
<string name="settings_video_player_ignore_nav_bar_title">Bỏ qua thanh điều hướng trong trình phát video</string> <string name="settings_video_player_ignore_nav_bar_title">Bỏ qua thanh điều hướng trong trình phát video</string>
<string name="settings_video_player_ignore_nav_bar_summary">Ngăn trình điều khiển video có thêm lề</string> <string name="settings_video_player_ignore_nav_bar_summary">Ngăn trình điều khiển video có thêm lề</string>
<string name="settings_confirm_to_exit">Xác nhận để thoát</string> <string name="settings_confirm_to_exit">Xác nhận để thoát</string>
@ -718,7 +717,6 @@
<string name="notifications">Thông báo</string> <string name="notifications">Thông báo</string>
<string name="messages">Tin nhắn</string> <string name="messages">Tin nhắn</string>
<string name="message">Tin nhắn</string> <string name="message">Tin nhắn</string>
<string name="fetch_gfycat_video_failed">Lấy video Gfycat thất bại</string>
<string name="fetch_redgifs_video_failed">Lấy video Redgifs thất bại</string> <string name="fetch_redgifs_video_failed">Lấy video Redgifs thất bại</string>
<string name="fetching_video_info_please_wait">Đang lấy thông tin video. Vui lòng đợi.</string> <string name="fetching_video_info_please_wait">Đang lấy thông tin video. Vui lòng đợi.</string>
<string name="error_fetching_imgur_media">Không thể tải hình ảnh</string> <string name="error_fetching_imgur_media">Không thể tải hình ảnh</string>
@ -739,7 +737,6 @@
<string name="set_to_lock_screen">Đặt làm màn hình khoá</string> <string name="set_to_lock_screen">Đặt làm màn hình khoá</string>
<string name="set_to_both">Đặt làm cả hai</string> <string name="set_to_both">Đặt làm cả hai</string>
<string name="default_font_font_preview">Mặc định</string> <string name="default_font_font_preview">Mặc định</string>
<string name="load_video_in_redgifs">Thử tải video trên Redgifs</string>
<string name="top_score">%1$s điểm</string> <string name="top_score">%1$s điểm</string>
<string name="login_activity_2fa_prompt">Nếu bạn đã bật xác thực 2 yếu tố, hãy vui lòng nhập mật khẩu như sau: &lt;mật khẩu&gt;:&lt;mã 2FA&gt;. <string name="login_activity_2fa_prompt">Nếu bạn đã bật xác thực 2 yếu tố, hãy vui lòng nhập mật khẩu như sau: &lt;mật khẩu&gt;:&lt;mã 2FA&gt;.
\nVí dụ: yourpass:123456</string> \nVí dụ: yourpass:123456</string>

View File

@ -312,7 +312,6 @@
<string name="settings_mute_video_title">静音视频</string> <string name="settings_mute_video_title">静音视频</string>
<string name="settings_mute_nsfw_video_title">静音 NSFW 视频</string> <string name="settings_mute_nsfw_video_title">静音 NSFW 视频</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_automatically_try_redgifs_title">如果 Gfycat 上的视频已被删除,则自动尝试访问 Redgifs。</string>
<string name="settings_video_player_ignore_nav_bar_title">视频播放器中忽略导航栏</string> <string name="settings_video_player_ignore_nav_bar_title">视频播放器中忽略导航栏</string>
<!-- Fuzzy --> <!-- Fuzzy -->
<string name="settings_video_player_ignore_nav_bar_summary">防止视频控制栏有额外的外边距</string> <string name="settings_video_player_ignore_nav_bar_summary">防止视频控制栏有额外的外边距</string>
@ -739,7 +738,6 @@
<string name="notifications">通知</string> <string name="notifications">通知</string>
<string name="messages">消息</string> <string name="messages">消息</string>
<string name="message">消息</string> <string name="message">消息</string>
<string name="fetch_gfycat_video_failed">获取 Gfycat 视频失败</string>
<string name="fetch_redgifs_video_failed">获取 Redgifs 视频失败</string> <string name="fetch_redgifs_video_failed">获取 Redgifs 视频失败</string>
<string name="fetching_video_info_please_wait">正在获取视频信息,请稍候。</string> <string name="fetching_video_info_please_wait">正在获取视频信息,请稍候。</string>
<string name="error_fetching_imgur_media">无法加载图像</string> <string name="error_fetching_imgur_media">无法加载图像</string>
@ -761,7 +759,6 @@
<string name="set_to_lock_screen">设置到锁定屏幕</string> <string name="set_to_lock_screen">设置到锁定屏幕</string>
<string name="set_to_both">设置到主屏幕和锁定屏幕</string> <string name="set_to_both">设置到主屏幕和锁定屏幕</string>
<string name="default_font_font_preview">默认字体</string> <string name="default_font_font_preview">默认字体</string>
<string name="load_video_in_redgifs">尝试加载 Redgifs 上的视频</string>
<!-- Don't know how to translate it, never seen this before. --> <!-- Don't know how to translate it, never seen this before. -->
<string name="top_score">%1$s 分</string> <string name="top_score">%1$s 分</string>
<string name="login_activity_2fa_prompt">如果您启用了两步验证,请按如下格式输入密码(使用英文的冒号):&lt;密码&gt;:&lt;两步验证代码&gt; <string name="login_activity_2fa_prompt">如果您启用了两步验证,请按如下格式输入密码(使用英文的冒号):&lt;密码&gt;:&lt;两步验证代码&gt;

View File

@ -371,7 +371,6 @@
<string name="settings_volume_keys_navigate_posts_title">Use Volume Keys to Navigate Posts</string> <string name="settings_volume_keys_navigate_posts_title">Use Volume Keys to Navigate Posts</string>
<string name="settings_mute_video_title">Mute Videos</string> <string name="settings_mute_video_title">Mute Videos</string>
<string name="settings_mute_nsfw_video_title">Mute NSFW Videos</string> <string name="settings_mute_nsfw_video_title">Mute NSFW Videos</string>
<string name="settings_automatically_try_redgifs_title">Automatically Try Accessing Redgifs if Videos on Gfycat are Removed.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignore Navigation Bar in Video Player</string> <string name="settings_video_player_ignore_nav_bar_title">Ignore Navigation Bar in Video Player</string>
<string name="settings_video_player_ignore_nav_bar_summary">Prevent the Video Controller Having Extra Margin</string> <string name="settings_video_player_ignore_nav_bar_summary">Prevent the Video Controller Having Extra Margin</string>
<string name="settings_main_page_back_button_action">Main Page Back Button Action</string> <string name="settings_main_page_back_button_action">Main Page Back Button Action</string>
@ -967,7 +966,6 @@
<string name="notifications">Notifications</string> <string name="notifications">Notifications</string>
<string name="messages">Messages</string> <string name="messages">Messages</string>
<string name="message">Message</string> <string name="message">Message</string>
<string name="fetch_gfycat_video_failed">Fetch Gfycat video failed</string>
<string name="fetch_redgifs_video_failed">Fetch Redgifs video failed</string> <string name="fetch_redgifs_video_failed">Fetch Redgifs video failed</string>
<string name="fetching_video_info_please_wait">Fetching video info. Please wait.</string> <string name="fetching_video_info_please_wait">Fetching video info. Please wait.</string>
<string name="fetch_streamable_video_failed">Fetch Streamable video failed</string> <string name="fetch_streamable_video_failed">Fetch Streamable video failed</string>
@ -994,7 +992,6 @@
<string name="set_to_lock_screen">Set to Lock Screen</string> <string name="set_to_lock_screen">Set to Lock Screen</string>
<string name="set_to_both">Set to Both</string> <string name="set_to_both">Set to Both</string>
<string name="default_font_font_preview">Default</string> <string name="default_font_font_preview">Default</string>
<string name="load_video_in_redgifs">Try loading the video on Redgifs</string>
<string name="top_score">%1$s pts</string> <string name="top_score">%1$s pts</string>
<string name="login_activity_2fa_prompt">If you have 2-factor authentication enabled, you need to fill the 2FA token filed. Leave empty otherwise</string> <string name="login_activity_2fa_prompt">If you have 2-factor authentication enabled, you need to fill the 2FA token filed. Leave empty otherwise</string>
<string name="block_user">Block User</string> <string name="block_user">Block User</string>

View File

@ -14,11 +14,6 @@
app:icon="@drawable/ic_mute_preferences_24dp" app:icon="@drawable/ic_mute_preferences_24dp"
app:title="@string/settings_mute_nsfw_video_title" /> app:title="@string/settings_mute_nsfw_video_title" />
<eu.toldi.infinityforlemmy.customviews.CustomFontSwitchPreference
app:defaultValue="true"
app:key="automatically_try_redgifs"
app:title="@string/settings_automatically_try_redgifs_title" />
<eu.toldi.infinityforlemmy.customviews.CustomFontSwitchPreference <eu.toldi.infinityforlemmy.customviews.CustomFontSwitchPreference
app:defaultValue="false" app:defaultValue="false"
app:key="video_player_ignore_nav_bar" app:key="video_player_ignore_nav_bar"