1
0
Fork 0
mirror of https://github.com/KokaKiwi/BarInsta synced 2026-03-04 03:21:36 +00:00

Merge remote-tracking branch 'origin/new-posts-grid' into new-posts-grid

This commit is contained in:
Ammar Githam 2020-11-03 17:30:24 +09:00
commit 3393166b51
30 changed files with 137 additions and 444 deletions

View file

@ -82,4 +82,8 @@ dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.0'
// temporary
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.10'
implementation 'org.jetbrains:annotations:13.0'
}

View file

@ -142,10 +142,12 @@ public final class CommentsAdapter extends ListAdapter<CommentModel, RecyclerVie
flatList.add(parent);
positionTypeMap.put(lastCommentIndex, TYPE_PARENT);
final List<CommentModel> children = parent.getChildCommentModels();
for (final CommentModel child : children) {
lastCommentIndex++;
flatList.add(child);
positionTypeMap.put(lastCommentIndex, TYPE_CHILD);
if (children != null) {
for (final CommentModel child : children) {
lastCommentIndex++;
flatList.add(child);
positionTypeMap.put(lastCommentIndex, TYPE_CHILD);
}
}
}
return flatList;

View file

@ -1,5 +1,7 @@
package awais.instagrabber.adapters.viewholder.comments;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
@ -77,6 +79,7 @@ public final class ChildCommentViewHolder extends RecyclerView.ViewHolder {
if (profileModel == null) return;
binding.tvUsername.setText(profileModel.getUsername());
binding.ivProfilePic.setImageURI(profileModel.getSdProfilePic());
binding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE);
}
private void setLikes(final int likes) {

View file

@ -1,5 +1,7 @@
package awais.instagrabber.adapters.viewholder.comments;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
@ -77,6 +79,7 @@ public final class ParentCommentViewHolder extends RecyclerView.ViewHolder {
if (profileModel == null) return;
binding.tvUsername.setText(profileModel.getUsername());
binding.ivProfilePic.setImageURI(profileModel.getSdProfilePic());
binding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE);
}
private void setLikes(final int likes) {

View file

@ -269,8 +269,8 @@ public final class CommentsFetcher extends AsyncTask<Void, Void, List<CommentMod
}
childCommentModels.get(childCommentsLen - 1).setPageCursor(hasNextPage, childEndCursor);
commentModel.setChildCommentModels(childCommentModels);
commentModels.add(commentModel);
}
commentModels.add(commentModel);
}
}

View file

@ -1,340 +0,0 @@
// package awais.instagrabber.fragments;
//
// import android.content.Context;
// import android.content.DialogInterface;
// import android.content.pm.PackageManager;
// import android.os.AsyncTask;
// import android.os.Bundle;
// import android.util.Log;
// import android.view.LayoutInflater;
// import android.view.View;
// import android.view.ViewGroup;
//
// import androidx.annotation.NonNull;
// import androidx.annotation.Nullable;
// import androidx.appcompat.app.AlertDialog;
// import androidx.fragment.app.Fragment;
// import androidx.fragment.app.FragmentActivity;
// import androidx.lifecycle.ViewModelProvider;
// import androidx.navigation.NavDirections;
// import androidx.navigation.fragment.NavHostFragment;
// import androidx.viewpager2.widget.ViewPager2;
//
// import java.util.ArrayList;
// import java.util.Arrays;
// import java.util.Collections;
// import java.util.List;
//
// import awais.instagrabber.R;
// import awais.instagrabber.adapters.PostViewAdapter;
// import awais.instagrabber.adapters.PostViewAdapter.OnPostViewChildViewClickListener;
// import awais.instagrabber.asyncs.PostFetcher;
// import awais.instagrabber.asyncs.i.iPostFetcher;
// import awais.instagrabber.databinding.FragmentPostViewBinding;
// import awais.instagrabber.interfaces.FetchListener;
// import awais.instagrabber.interfaces.MentionClickListener;
// import awais.instagrabber.models.FeedModel;
// import awais.instagrabber.models.ViewerPostModel;
// import awais.instagrabber.models.ViewerPostModelWrapper;
// import awais.instagrabber.models.enums.DownloadMethod;
// import awais.instagrabber.utils.Constants;
// import awais.instagrabber.utils.CookieUtils;
// import awais.instagrabber.utils.DownloadUtils;
// import awais.instagrabber.utils.Utils;
// import awais.instagrabber.viewmodels.ViewerPostViewModel;
// import awais.instagrabber.webservices.MediaService;
// import awais.instagrabber.webservices.ServiceCallback;
//
// import static androidx.core.content.ContextCompat.checkSelfPermission;
// import static awais.instagrabber.utils.Utils.settingsHelper;
//
// public class PostViewFragment extends Fragment {
// private static final String TAG = "PostViewFragment";
// private static final String COOKIE = settingsHelper.getString(Constants.COOKIE);
//
// private FragmentActivity fragmentActivity;
// private FragmentPostViewBinding binding;
// private ViewPager2 root;
// private boolean shouldRefresh = true;
// private ViewerPostViewModel viewerPostViewModel;
// private boolean isId;
// private int currentPostIndex;
// private List<String> idOrCodeList;
// private boolean hasInitialResult = false;
// private PostViewAdapter adapter;
// private boolean session;
// private MediaService mediaService;
//
// private FetchListener<FeedModel> pfl = result -> {
// if (result == null) return;
// final List<ViewerPostModelWrapper> viewerPostModels = viewerPostViewModel.getList().getValue();
// final List<ViewerPostModelWrapper> temp = viewerPostModels == null ? new ArrayList<>(idOrCodeList.size())
// : new ArrayList<>(viewerPostModels);
// String idOrCode = isId ? result.getPostId() : result.getShortCode();
// if (idOrCode == null) return;
// if (isId) {
// // the post id is appended with `_` in the result
// idOrCode = idOrCode.substring(0, idOrCode.indexOf('_'));
// }
// final int index = idOrCodeList.indexOf(idOrCode);
// if (index < 0) return;
// final ViewerPostModelWrapper viewerPostModelWrapper = temp.get(index);
// viewerPostModelWrapper.setViewerPostModels(result.getSliderItems() == null ? Collections.emptyList() : result.getSliderItems());
// temp.set(index, viewerPostModelWrapper);
// viewerPostViewModel.getList().setValue(temp);
// adapter.notifyItemChanged(index);
// if (!hasInitialResult) {
// Log.d(TAG, "setting delayed position to: " + currentPostIndex);
// binding.getRoot()
// .postDelayed(() -> binding.getRoot().setCurrentItem(currentPostIndex), 200);
// }
// hasInitialResult = true;
// };
// private MentionClickListener mentionListener = (view, text, isHashtag, isLocation) -> {
// if (isHashtag) {
// final NavDirections action = PostViewFragmentDirections
// .actionGlobalHashTagFragment(text);
// NavHostFragment.findNavController(this).navigate(action);
// return;
// }
// if (isLocation) {
// final NavDirections action = PostViewFragmentDirections
// .actionGlobalLocationFragment(text);
// NavHostFragment.findNavController(this).navigate(action);
// return;
// }
// final NavDirections action = PostViewFragmentDirections
// .actionGlobalProfileFragment("@" + text);
// NavHostFragment.findNavController(this).navigate(action);
// };
// private OnPostViewChildViewClickListener clickListener = (v, wrapper, postPosition, childPosition) -> {
// final ViewerPostModel postModel = wrapper.getViewerPostModels().get(0);
// final String username = postModel.getProfileModel().getUsername();
// final int id = v.getId();
// switch (id) {
// case R.id.viewerCaption:
// break;
// case R.id.btnComments:
// String postId = postModel.getPostId();
// if (postId.contains("_")) postId = postId.substring(0, postId.indexOf("_"));
// final NavDirections commentsAction = PostViewFragmentDirections.actionGlobalCommentsViewerFragment(
// postModel.getShortCode(),
// postId,
// postModel.getProfileModel().getId()
// );
// NavHostFragment.findNavController(this).navigate(commentsAction);
// break;
// case R.id.btnDownload:
// final Context context = getContext();
// if (context == null) return;
// if (checkSelfPermission(context,
// DownloadUtils.PERMS[0]) == PackageManager.PERMISSION_GRANTED) {
// showDownloadDialog(wrapper.getViewerPostModels(),
// childPosition,
// username);
// return;
// }
// requestPermissions(DownloadUtils.PERMS, 8020);
// break;
// case R.id.ivProfilePic:
// case R.id.title:
// mentionListener.onClick(null, username, false, false);
// break;
// case R.id.btnLike:
// if (mediaService != null) {
// final String userId = CookieUtils.getUserIdFromCookie(COOKIE);
// final String csrfToken = CookieUtils.getCsrfTokenFromCookie(COOKIE);
// v.setEnabled(false);
// final ServiceCallback<Boolean> likeCallback = new ServiceCallback<Boolean>() {
// @Override
// public void onSuccess(final Boolean result) {
// v.setEnabled(true);
// if (result) {
// postModel.setManualLike(!postModel.getLike());
// adapter.notifyItemChanged(postPosition);
// return;
// }
// Log.e(TAG, "like/unlike unsuccessful!");
// }
//
// @Override
// public void onFailure(final Throwable t) {
// v.setEnabled(true);
// Log.e(TAG, "Error during like/unlike", t);
// }
// };
// if (!postModel.getLike()) {
// mediaService.like(postModel.getPostId(), userId, csrfToken, likeCallback);
// } else {
// mediaService.unlike(postModel.getPostId(), userId, csrfToken, likeCallback);
// }
// }
// break;
// case R.id.btnBookmark:
// if (mediaService != null) {
// final String userId = CookieUtils.getUserIdFromCookie(COOKIE);
// final String csrfToken = CookieUtils.getCsrfTokenFromCookie(COOKIE);
// v.setEnabled(false);
// final ServiceCallback<Boolean> saveCallback = new ServiceCallback<Boolean>() {
// @Override
// public void onSuccess(final Boolean result) {
// v.setEnabled(true);
// if (result) {
// // postModel.setBookmarked(!postModel.isSaved());
// adapter.notifyItemChanged(postPosition);
// return;
// }
// Log.e(TAG, "save/unsave unsuccessful!");
// }
//
// @Override
// public void onFailure(final Throwable t) {
// v.setEnabled(true);
// Log.e(TAG, "Error during save/unsave", t);
// }
// };
// if (!postModel.isSaved()) {
// mediaService.save(postModel.getPostId(), userId, csrfToken, saveCallback);
// } else {
// mediaService.unsave(postModel.getPostId(), userId, csrfToken, saveCallback);
// }
// }
// break;
// }
// };
// private PostViewAdapter.OnPostCaptionLongClickListener captionLongClickListener = text -> {
// final Context context = getContext();
// if (context == null) return;
// Utils.copyText(context, text);
// };
//
// @Override
// public void onCreate(@Nullable final Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// fragmentActivity = getActivity();
// mediaService = MediaService.getInstance();
// }
//
// @Nullable
// @Override
// public View onCreateView(@NonNull final LayoutInflater inflater,
// @Nullable final ViewGroup container,
// @Nullable final Bundle savedInstanceState) {
// if (root != null) {
// shouldRefresh = false;
// return root;
// }
// binding = FragmentPostViewBinding.inflate(inflater, container, false);
// root = binding.getRoot();
// setupViewPager();
// return root;
// }
//
// @Override
// public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
// if (!shouldRefresh) return;
// init();
// shouldRefresh = false;
// }
//
// private void setupViewPager() {
// viewerPostViewModel = new ViewModelProvider(fragmentActivity)
// .get(ViewerPostViewModel.class);
// adapter = new PostViewAdapter(clickListener, captionLongClickListener, mentionListener);
// root.setAdapter(adapter);
// root.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
//
// @Override
// public void onPageSelected(final int position) {
// // Log.d(TAG, "onPageSelected: " + position + ", hasInitialResult: " + hasInitialResult);
// if (!hasInitialResult) {
// return;
// }
// currentPostIndex = position;
// fetchPost();
// }
// });
// viewerPostViewModel.getList().observe(fragmentActivity, list -> adapter.submitList(list));
// }
//
// private void init() {
// if (getArguments() == null) return;
// final PostViewFragmentArgs fragmentArgs = PostViewFragmentArgs.fromBundle(getArguments());
// final String[] idOrCodeArray = fragmentArgs.getIdOrCodeArray();
// if (idOrCodeArray.length == 0) return;
// currentPostIndex = fragmentArgs.getIndex();
// if (currentPostIndex < 0) return;
// if (currentPostIndex >= idOrCodeArray.length) return;
// idOrCodeList = Arrays.asList(idOrCodeArray);
// viewerPostViewModel.getList().setValue(createPlaceholderModels(idOrCodeArray.length));
// isId = fragmentArgs.getIsId();
// fetchPost();
// }
//
// private List<ViewerPostModelWrapper> createPlaceholderModels(final int size) {
// final List<ViewerPostModelWrapper> viewerPostModels = new ArrayList<>(size);
// for (int i = 0; i < size; i++) {
// // viewerPostModels.add(new ViewerPostModel[]{ViewerPostModel.getDefaultModel(-i, "")});
// viewerPostModels.add(new ViewerPostModelWrapper(i, null));
// }
// return viewerPostModels;
// }
//
// private void fetchPost() {
// // Log.d(TAG, "fetchPost, currentPostIndex: " + currentPostIndex);
// final List<ViewerPostModelWrapper> list = viewerPostViewModel.getList().getValue();
// if (list != null) {
// final ViewerPostModelWrapper viewerPostModels = list.get(currentPostIndex);
// if (viewerPostModels != null && viewerPostModels
// .getViewerPostModels() != null && viewerPostModels
// .getViewerPostModels().size() > 0) {
// Log.d(TAG, "returning without fetching");
// return;
// }
// }
// if (currentPostIndex >= idOrCodeList.size() || currentPostIndex < 0) return;
// final String idOrShortCode = idOrCodeList.get(currentPostIndex);
// if (isId) {
// new iPostFetcher(idOrShortCode, pfl).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// return;
// }
// new PostFetcher(idOrShortCode, pfl).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// }
//
// private void showDownloadDialog(final List<ViewerPostModel> postModels,
// final int childPosition,
// final String username) {
// final List<ViewerPostModel> postModelsToDownload = new ArrayList<>();
// final Context context = getContext();
// if (context == null) return;
// if (!session && postModels.size() > 1) {
// final DialogInterface.OnClickListener clickListener = (dialog, which) -> {
// if (which == DialogInterface.BUTTON_NEGATIVE) {
// postModelsToDownload.addAll(postModels);
// } else if (which == DialogInterface.BUTTON_POSITIVE) {
// postModelsToDownload.add(postModels.get(childPosition));
// } else {
// session = true;
// postModelsToDownload.add(postModels.get(childPosition));
// }
// if (postModelsToDownload.size() > 0) {
// DownloadUtils.batchDownload(context,
// username,
// DownloadMethod.DOWNLOAD_POST_VIEWER,
// postModelsToDownload);
// }
// };
// new AlertDialog.Builder(context)
// .setTitle(R.string.post_viewer_download_dialog_title)
// .setMessage(R.string.post_viewer_download_message)
// .setNeutralButton(R.string.post_viewer_download_session, clickListener)
// .setPositiveButton(R.string.post_viewer_download_current, clickListener)
// .setNegativeButton(R.string.post_viewer_download_album, clickListener).show();
// } else {
// DownloadUtils.batchDownload(context,
// username,
// DownloadMethod.DOWNLOAD_POST_VIEWER,
// Collections.singletonList(postModels.get(childPosition)));
// }
// }
// }

View file

@ -764,6 +764,7 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment {
private void setupTitles() {
binding.title.setText(feedModel.getProfileModel().getUsername());
binding.righttitle.setText(feedModel.getProfileModel().getName());
binding.isVerified.setVisibility(feedModel.getProfileModel().isVerified() ? View.VISIBLE : View.GONE);
binding.title.setOnClickListener(v -> navigateToProfile("@" + feedModel.getProfileModel().getUsername()));
binding.righttitle.setOnClickListener(v -> navigateToProfile("@" + feedModel.getProfileModel().getUsername()));
final String locationName = feedModel.getLocationName();

View file

@ -72,6 +72,7 @@ public final class LocaleUtils {
if (appLanguageIndex == 11) return "fa";
if (appLanguageIndex == 12) return "mk";
if (appLanguageIndex == 13) return "vi";
if (appLanguageIndex == 14) return "hi";
return null;
}

View file

@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import java.io.IOException;
import awais.instagrabber.utils.Constants;
import awais.instagrabber.utils.LocaleUtils;
import awais.instagrabber.utils.Utils;
import okhttp3.Interceptor;
import okhttp3.Request;
@ -22,6 +23,10 @@ public class AddCookiesInterceptor implements Interceptor {
if (request.header(userAgentHeader) == null) {
builder.addHeader(userAgentHeader, Constants.I_USER_AGENT);
}
final String languageHeader = "Accept-Language";
if (request.header(languageHeader) == null) {
builder.addHeader(languageHeader, LocaleUtils.getCurrentLocale().getLanguage() + ",en-US;q=0.8");
}
final Request updatedRequest = builder.build();
return chain.proceed(updatedRequest);
}

View file

@ -172,7 +172,7 @@ public class ProfileService extends BaseService {
} else {
resourceUrl = mediaNode.has("display_resources") ? ResponseBodyUtils.getHighQualityImage(mediaNode) : displayUrl;
}
JSONObject tempJsonObject = mediaNode.optJSONObject("edge_media_preview_comment");
JSONObject tempJsonObject = mediaNode.optJSONObject("edge_media_to_comment");
final long commentsCount = tempJsonObject != null ? tempJsonObject.optLong("count") : 0;
tempJsonObject = mediaNode.optJSONObject("edge_media_preview_like");
final long likesCount = tempJsonObject != null ? tempJsonObject.optLong("count") : 0;

View file

@ -65,29 +65,42 @@
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/subtitle"
app:layout_constraintEnd_toEndOf="@id/righttitle"
app:layout_constraintEnd_toStartOf="@id/isVerified"
app:layout_constraintStart_toEndOf="@id/profile_pic"
app:layout_constraintTop_toTopOf="@id/profile_pic"
tools:text="Username Username Username" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/isVerified"
android:layout_width="20dp"
android:layout_height="0dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/title"
app:layout_constraintStart_toEndOf="@id/title"
app:layout_constraintTop_toTopOf="@id/title"
app:srcCompat="@drawable/verified"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/righttitle"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginStart="4dp"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
android:textColor="@color/grey_600"
app:layout_constraintBottom_toBottomOf="@id/title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/title"
app:layout_constraintStart_toEndOf="@id/isVerified"
app:layout_constraintTop_toTopOf="@id/title"
tools:text="Full name Full name Full name Full name Full name Full name Full name " />

View file

@ -24,7 +24,7 @@
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvUsername"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:paddingStart="4dp"
@ -36,11 +36,23 @@
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/tvComment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivProfilePic"
app:layout_constraintTop_toTopOf="parent"
tools:text="username" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/isVerified"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitStart"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/tvUsername"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvUsername"
app:layout_constraintTop_toTopOf="@id/tvUsername"
app:srcCompat="@drawable/verified"
tools:visibility="visible" />
<awais.instagrabber.customviews.RamboTextViewV2
android:id="@+id/tvComment"
android:layout_width="0dp"

View file

@ -35,11 +35,23 @@
android:textColor="?android:textColorPrimary"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/tvComment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivProfilePic"
app:layout_constraintTop_toTopOf="parent"
tools:text="username" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/isVerified"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitStart"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/tvUsername"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvUsername"
app:layout_constraintTop_toTopOf="@id/tvUsername"
app:srcCompat="@drawable/verified"
tools:visibility="visible" />
<awais.instagrabber.customviews.RamboTextViewV2
android:id="@+id/tvComment"
android:layout_width="0dp"

View file

@ -6,8 +6,6 @@
<string name="action_download">Herunterladen</string>
<string name="action_search">Benutzernamen suchen…</string>
<string name="action_compare">Vergleichen</string>
<string name="single_like">Like</string>
<string name="multiple_likes">Likes</string>
<string name="clipboard_error">Fehler beim Kopieren des Textes</string>
<string name="clipboard_copied">In die Zwischenablage kopiert!</string>
<string name="report">Melden</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Descarga</string>
<string name="action_search">Buscar usuario…</string>
<string name="action_compare">Comparar</string>
<string name="single_like">me gusta</string>
<string name="multiple_likes">me gustas</string>
<string name="clipboard_error">Error al copiar texto</string>
<string name="clipboard_copied">¡Copiar al portapapeles!</string>
<string name="report">Reportar</string>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="languages">
<item>پیش فرض سیستم</item>
<item>پیشگزیده سامانه</item>
<item>انگلیسی</item>
<item>فرانسوی [ با سپاس از kernoeb@ ]</item>
<item>اسپانیایی [ با سپاس از sguinetti@ ]</item>
@ -32,7 +32,7 @@
<string-array name="theme_presets">
<item>خودکار / پیروی از سیستم</item>
<item>خودکار / پیروی از باتری</item>
<item>تاریک</item>
<item>تیره</item>
<item>روشن</item>
</string-array>
<string-array name="theme_presets_values">

View file

@ -6,8 +6,6 @@
<string name="action_download">دانلود</string>
<string name="action_search">جستجوی نام کاربری…</string>
<string name="action_compare">مقایسه</string>
<string name="single_like">پسندیدن</string>
<string name="multiple_likes">پسند</string>
<string name="clipboard_error">خطا هنگام کپی متن</string>
<string name="clipboard_copied">به کلیپ بورد کپی شد!</string>
<string name="report">گزارش</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Téléchargement</string>
<string name="action_search">Rechercher par nom d\'utilisateur…</string>
<string name="action_compare">Comparer</string>
<string name="single_like">j\'aime</string>
<string name="multiple_likes">j\'aimes</string>
<string name="clipboard_error">Erreur lors de la copie des éléments</string>
<string name="clipboard_copied">Copié dans le presse-papier !</string>
<string name="report">Reporter</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">डाउनलोड करें</string>
<string name="action_search">ब्यबहारकारीयों के ब्यबहृत नाम ढुंढे...</string>
<string name="action_compare">तुलना करें</string>
<string name="single_like">पसंद करें</string>
<string name="multiple_likes">पसन्दित</string>
<string name="clipboard_error">लेखा उतारने में त्रुटि</string>
<string name="clipboard_copied">क्लिपबोर्ड पर नक़ल किया</string>
<string name="report">रिपोर्ट करें</string>
@ -213,27 +211,27 @@
<string name="followers_type_followers">अनुयायी</string>
<string name="followers_type_following">फ़ॉलो कर रहे हैं</string>
<string name="followers_compare">फलोअर्स &amp; फलोइंग के तुलना</string>
<string name="followers_both_following">Both following each other</string>
<string name="followers_not_following">not following %s</string>
<string name="followers_not_follower">%s is not following</string>
<string name="login_error_loading_cookies">Error loading cookies</string>
<string name="login_success_loading_cookies">Successfully loaded cookies!\nIf you still can\'t open private pages/posts, re-login!</string>
<string name="comment_hint">Write a new comment...</string>
<string name="dm_hint">Write a new message...</string>
<string name="liked_notif">Liked your post</string>
<string name="comment_notif">Commented on your post:</string>
<string name="follow_notif">Started following you</string>
<string name="mention_notif">Mentioned you:</string>
<string name="request_notif">Requested following you</string>
<string name="request_approve">Approve request</string>
<string name="request_reject">Reject request</string>
<string name="share_public_post">Share this public post to...</string>
<string name="share_private_post">This is a private post! Share to those who can view them!</string>
<string name="discover_empty">This category is somehow empty...</string>
<string name="update_available">An update is available! (%s)</string>
<string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string>
<string name="updated">Thank you for updating Barinsta!</string>
<string name="crash_title">App crashed</string>
<string name="followers_both_following">एक दुसरे को फोलो कर रहें हैं</string>
<string name="followers_not_following">फोलो नहीं कर रहा %s</string>
<string name="followers_not_follower">%s फोलो नहीं कर रहा है</string>
<string name="login_error_loading_cookies">कुकीज लोड करने में त्रुटि</string>
<string name="login_success_loading_cookies">कुकीज सफलतापूर्बक लोड हुआ!\nअगर आप अभी तक गोपन पेज या पोस्ट खुल नहीं पा रहे हैं, फिर से लग इन करें!</string>
<string name="comment_hint">नया कमेंट करें...</string>
<string name="dm_hint">एक नया संदेश लिखो...</string>
<string name="liked_notif">आपकी पोस्ट को पसंद किया</string>
<string name="comment_notif">आपके पोस्ट पर कमेंट किया है:</string>
<string name="follow_notif">आपको फॉलो करना शुरू किया</string>
<string name="mention_notif">आपका उल्लेख किया:</string>
<string name="request_notif">आपको फॉलो करने का निवेदन किया</string>
<string name="request_approve">निवेदन को ग्रहण करें</string>
<string name="request_reject">अनुरोध प्रत्याख्यान करें</string>
<string name="share_public_post">इसी सार्वजनिक पोस्ट को भेजें...</string>
<string name="share_private_post">यह एक गुप्त पोस्ट है! उन लोगों को बांटना जो उन्हें देख सकते हैं!</string>
<string name="discover_empty">यह वर्ग रिक्त है...</string>
<string name="update_available">नया अद्यतन उपलब्ध! (%s)</string>
<string name="update_notice">याद रखें: अगर आप f-droid से डाउनलोड किया है तो उसी से ही अपडेट करें! Github के लिये भी बही।</string>
<string name="updated">बारइनष्टा को अद्दतन करने के लिए धन्यबाद!</string>
<string name="crash_title">एप में त्रुटि हुयी।</string>
<string name="crash_descr">Oops.. the app crashed, but don\'t worry you can send error report to the developer to help him fix the issue. (:</string>
<string name="use_amoled_dark_theme">Use AMOLED mode for Dark theme</string>
<string name="action_notif">Activity</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Unduh</string>
<string name="action_search">Cari Pengguna…</string>
<string name="action_compare">Bandingkan</string>
<string name="single_like">suka</string>
<string name="multiple_likes">suka</string>
<string name="clipboard_error">Galat menyalin tulisan</string>
<string name="clipboard_copied">Tersalin!</string>
<string name="report">Laporkan</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Scarica</string>
<string name="action_search">Cerca utente…</string>
<string name="action_compare">Compara</string>
<string name="single_like">hai messo un Like</string>
<string name="multiple_likes">likes</string>
<string name="clipboard_error">Errore durante la copia del testo</string>
<string name="clipboard_copied">Copiato negli appunti!</string>
<string name="report">Segnala</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Превземи</string>
<string name="action_search">Пребарај username…</string>
<string name="action_compare">Спореди</string>
<string name="single_like">лајкни</string>
<string name="multiple_likes">лајкови</string>
<string name="clipboard_error">Грешка при копрање текст</string>
<string name="clipboard_copied">Копрано во clipboard!</string>
<string name="report">Пријави</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Pobierz</string>
<string name="action_search">Szukaj użytkownika…</string>
<string name="action_compare">Porównaj</string>
<string name="single_like">polubienie</string>
<string name="multiple_likes">polubienia</string>
<string name="clipboard_error">Wystąpił błąd podczas kopiowania tekstu</string>
<string name="clipboard_copied">Skopiowano do schowka!</string>
<string name="report">Zgłoś</string>

View file

@ -6,9 +6,7 @@
<string name="action_download">Baixar</string>
<string name="action_search">Pesquisar nome de usuário…</string>
<string name="action_compare">Comparar</string>
<string name="single_like">like</string>
<string name="multiple_likes">likes</string>
<string name="clipboard_error">Erro ao copiar texto</string>
<string name="clipboard_error">Falha ao copiar texto</string>
<string name="clipboard_copied">Copiado para a área de transferência!</string>
<string name="report">Reportar</string>
<string name="password">Senha (máx. 32 caracteres)</string>
@ -31,15 +29,15 @@
<string name="title_changelog">Histórico de atualizações</string>
<string name="bottom_toolbar">Mostrar barra de ferramentas na parte inferior</string>
<string name="update_check">Verificar se há atualizações ao iniciar</string>
<string name="download_user_folder">Baixar postagens para pastas com o nome de usuário</string>
<string name="autoload_posts">Carregar automaticamente todas as postagens do usuário</string>
<string name="download_user_folder">Baixar publicações para pastas com o nome de usuário</string>
<string name="autoload_posts">Carregar automaticamente todas as publicações do usuário</string>
<string name="mark_as_seen_setting">Marcar stories como vistos após a visualização</string>
<string name="mark_as_seen_setting_summary">O autor do story saberá que você viu</string>
<string name="dm_mark_as_seen_setting">Marcar DM como vista após a visualização</string>
<string name="dm_mark_as_seen_setting_summary">Outros membros saberão que você viu</string>
<string name="activity_setting">Ativar notificações de atividade</string>
<string name="error_loading_profile">Erro ao carregar o perfil!\nTente fazer login e pesquise novamente.</string>
<string name="error_creating_folders">Erro ao criar pasta(s) de download.</string>
<string name="error_loading_profile">Falha ao carregar o perfil!\nTente fazer login e pesquisar novamente.</string>
<string name="error_creating_folders">Falha ao criar pasta(s) de download.</string>
<string name="show_feed">Mostrar feed do usuário (funciona apenas quando o usuário está logado)</string>
<string name="save_to_folder">Salvar em pasta personalizada</string>
<string name="select_folder">Selecione uma pasta</string>
@ -53,25 +51,25 @@
<string name="import_export">Importar/Exportar</string>
<string name="select_language">Idioma</string>
<string name="what_to_do_dialog">O que fazer?</string>
<string name="main_posts_count">%s\n Postagens</string>
<string name="main_posts_count_inline">%s Postagens</string>
<string name="main_posts_count">%s\nPublicações</string>
<string name="main_posts_count_inline">%s Publicações</string>
<string name="main_posts_followers">%s\nSeguidores</string>
<string name="main_posts_following">%s\nSeguindo</string>
<string name="post_viewer_video_post">Postagem de vídeo</string>
<string name="post_viewer_image_post">Postagem de imagem</string>
<string name="post_viewer_video_post">Publicação de vídeo</string>
<string name="post_viewer_image_post">Publicação de imagem</string>
<string name="post_viewer_autoplay_video">Reprodução automática de vídeos</string>
<string name="post_viewer_muted_autoplay">Sempre silenciar vídeos</string>
<string name="post_viewer_post_from">%s - %s</string>
<string name="post_viewer_download_message" comment="post_viewer_download_message&#10;&#10;[Session] is NOT a variable, please translate it and ignore warnings">Nota: A [Sessão] atual não mostrará esta caixa de diálogo até que você esteja aqui e sempre fará o download do slide de postagem mostrado.</string>
<string name="post_viewer_download_message" comment="post_viewer_download_message&#10;&#10;[Session] is NOT a variable, please translate it and ignore warnings">Obs: A [Sessão] atual não mostrará esta mensagem até que você esteja aqui e sempre baixará o slide de publicação mostrado.</string>
<string name="post_viewer_download_dialog_title">Selecione o que baixar</string>
<string name="post_viewer_download_session" comment="post_viewer_download_session&#10;&#10;[Session] is NOT a variable, please translate it and ignore warnings">[Sessão] Atual</string>
<string name="post_viewer_download_current">Atual</string>
<string name="post_viewer_download_album">Álbum inteiro</string>
<string name="show_stories">Mostrar stories</string>
<string name="no_more_stories">Sem mais stories!</string>
<string name="be_patient">Seja paciente!</string>
<string name="view_story_post">Ver postagem</string>
<string name="view_post">Ver postagem</string>
<string name="be_patient">Tenha paciência!</string>
<string name="view_story_post">Ver Publicação</string>
<string name="view_post">Ver Publicação</string>
<string name="spotify">Spotify</string>
<string name="stories_notloggedin">Não é possível interagir se você não estiver logado!</string>
<string name="vote_story_poll">Votar</string>
@ -79,7 +77,7 @@
<string name="voted_story_poll">Você já votou!</string>
<string name="respond_story">Responder</string>
<string name="answer_hint">Responder...</string>
<string name="answered_story">Resposta bem-sucedida!</string>
<string name="answered_story">Resposta enviada!</string>
<string name="reply_story">Responder o story</string>
<string name="reply_hint">Responder...</string>
<string name="story_quiz">Quiz</string>
@ -89,8 +87,8 @@
<string name="priv_acc_confirm">Você não será capaz de acessar as publicações após deixar de seguir! Tem certeza?</string>
<string name="no_acc">Você pode fazer login em Mais -&gt; Conta no canto inferior direito ou você pode ver as contas públicas sem fazer login!</string>
<string name="no_acc_logged_in">Você pode deslizar para a esquerda/direita para explorar/feed ou pesquisar algo abaixo!</string>
<string name="empty_acc">Esta conta não tem postagens</string>
<string name="empty_list">Não há essas postagens!</string>
<string name="empty_acc">Esta conta não tem publicações</string>
<string name="empty_list">Não há publicações!</string>
<string name="curr_version">Versão atual: v%s</string>
<string name="read_more">ler mais…</string>
<string name="login">Logar</string>
@ -167,7 +165,7 @@
<string name="dms_inbox_unlike">Descurtir mensagem</string>
<string name="dms_inbox_unsend">Cancelar envio</string>
<string name="dms_inbox_author">Ver perfil do autor</string>
<string name="dms_inbox_media_shared_from">Postagem compartilhada de %s</string>
<string name="dms_inbox_media_shared_from">Publicação compartilhada de %s</string>
<string name="dms_inbox_raven_media_unknown"><i>Tipo de mídia desconhecido</i></string>
<string name="dms_inbox_raven_media_expired">Mídia expirada!</string>
<string name="dms_inbox_raven_media_delivered">Entregue</string>
@ -185,19 +183,19 @@
<string name="dms_action_kick">Expulsar</string>
<string name="dms_left_users">Usuários que saíram</string>
<string name="direct_download">Baixar diretamente</string>
<string name="direct_download_desc">Baixar as postagens diretamente no telefone!</string>
<string name="direct_download_loading">Buscando postagem(s)</string>
<string name="direct_download_desc">Baixar as publicações diretamente no telefone!</string>
<string name="direct_download_loading">Buscando publicação(ões)</string>
<string name="direct_download_perms_ask">Por favor, conceda as permissões e tente baixar novamente!</string>
<string name="downloader_started">Download iniciado</string>
<string name="downloader_complete">Download concluído</string>
<string name="downloader_downloading_post">Baixando postagem</string>
<string name="downloader_downloading_post">Baixando publicação</string>
<string name="downloader_downloading_media">Baixando mídia</string>
<string name="downloader_downloading_pfp">Baixando foto do perfil</string>
<string name="downloader_downloaded_in_folder">Arquivo baixado na pasta Downloads!</string>
<string name="downloader_unknown_error">Ocorreu um erro desconhecido!!!</string>
<string name="downloader_error_creating_folder">Erro ao criar pasta!</string>
<string name="downloader_error_download_file">Erro ao baixar o arquivo</string>
<string name="downloader_too_many">Você só pode baixar 100 postagens por vez. Não seja tão ganancioso!</string>
<string name="downloader_error_creating_folder">Falha ao criar pasta!</string>
<string name="downloader_error_download_file">Falha ao baixar arquivo</string>
<string name="downloader_too_many">Você só pode baixar 100 publicações por vez. Não seja tão ganancioso!</string>
<string name="comment_viewer_copy_user">Copiar nome de usuário</string>
<string name="comment_viewer_copy_comment">Copiar comentário</string>
<string name="comment_viewer_reply_comment">Responder comentário</string>
@ -214,19 +212,19 @@
<string name="followers_both_following">Ambos se seguem</string>
<string name="followers_not_following">não segue %s</string>
<string name="followers_not_follower">%s não segue</string>
<string name="login_error_loading_cookies">Erro ao carregar cookies</string>
<string name="login_success_loading_cookies">Cookies carregados com sucesso!\nSe você ainda não consegue abrir páginas/postagens privadas, faça o login novamente!</string>
<string name="login_error_loading_cookies">Falha ao carregar cookies</string>
<string name="login_success_loading_cookies">Cookies carregados com sucesso!\nSe você ainda não consegue abrir páginas/publicações privadas, faça o login novamente!</string>
<string name="comment_hint">Escrever um novo comentário...</string>
<string name="dm_hint">Escrever uma nova mensagem...</string>
<string name="liked_notif">Curtiu sua postagem</string>
<string name="comment_notif">Comentou em sua postagem:</string>
<string name="liked_notif">Curtiu sua publicação</string>
<string name="comment_notif">Comentou em sua publicação:</string>
<string name="follow_notif">Começou a seguir você</string>
<string name="mention_notif">Mencionou você:</string>
<string name="request_notif">Pediu para seguir você</string>
<string name="request_approve">Aprovar pedido</string>
<string name="request_reject">Rejeitar pedido</string>
<string name="share_public_post">Compartilhar esta postagem pública com...</string>
<string name="share_private_post">Esta é uma postagem privada! Compartilhe com quem pode visualizá-la!</string>
<string name="share_public_post">Compartilhar esta publicação pública com...</string>
<string name="share_private_post">Esta é uma publicação privada! Compartilhe com quem pode visualizá-la!</string>
<string name="discover_empty">Esta categoria está vazia...</string>
<string name="update_available">Uma atualização está disponível! (%s)</string>
<string name="update_notice">Lembrete: se você baixou do F-Droid, você deve atualizar a partir dele! O mesmo se aplica ao GitHub.</string>
@ -242,7 +240,7 @@
<string name="activity_count_comments">%d comentários</string>
<string name="activity_count_commentlikes">%d comentários curtidos</string>
<string name="activity_count_usertags">%d marcações</string>
<string name="activity_count_likes">%d likes</string>
<string name="activity_count_likes">%d curtidas</string>
<string name="activity_notloggedin">Você deslogou antes de clicar nessa notificação?!</string>
<string name="feed">Feed</string>
<string name="profile">Perfil</string>
@ -287,10 +285,10 @@
<string name="locations">Localizações</string>
<string name="unknown">Desconhecido</string>
<string name="removed_from_favs">Removido dos Favoritos</string>
<string name="backup_and_restore">Backup &amp; Restauração</string>
<string name="backup_and_restore">Becape &amp; Restauração</string>
<string name="create_backup">Criar</string>
<string name="restore_backup">Restaurar</string>
<string name="file_chosen_label">Arquivo:</string>
<string name="enter_password">Digite a senha</string>
<string name="select_backup_file">Selecione um arquivo de backup (.zaai/.backup)</string>
<string name="select_backup_file">Selecione um arquivo de becape (.zaai/.backup)</string>
</resources>

View file

@ -6,8 +6,6 @@
<string name="action_download">İndir</string>
<string name="action_search">Kullanıcı adı ara…</string>
<string name="action_compare">Karşılaştır</string>
<string name="single_like">beğeni</string>
<string name="multiple_likes">beğeni</string>
<string name="clipboard_error">Metin kopyalanamadı</string>
<string name="clipboard_copied">Panoya kopyalandı!</string>
<string name="report">Bildir</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">Tải xuống</string>
<string name="action_search">Tìm tên người dùng…</string>
<string name="action_compare">So sánh</string>
<string name="single_like">thích</string>
<string name="multiple_likes">thích</string>
<string name="clipboard_error">Lỗi khi sao chép</string>
<string name="clipboard_copied">Đã sao chép vào clipboard!</string>
<string name="report">Báo cáo</string>

View file

@ -6,8 +6,6 @@
<string name="action_download">下载</string>
<string name="action_search">搜索用户名…</string>
<string name="action_compare">比较</string>
<string name="single_like">次赞</string>
<string name="multiple_likes">次赞</string>
<string name="clipboard_error">复制文字时出错</string>
<string name="clipboard_copied">已复制到剪贴板!</string>
<string name="report">报告</string>

View file

@ -306,11 +306,11 @@
<string name="player_timeline_desc">Video player timeline</string>
<string name="one_x" translatable="false">1x</string>
<string name="two_x" translatable="false">2x</string>
<string name="pt_two_five_x">0.25x</string>
<string name="pt_five_x">0.5x</string>
<string name="pt_seven_five_x">0.75x</string>
<string name="one_pt_two_five_x">1.25x</string>
<string name="one_pt_five_x">1.5x</string>
<string name="pt_two_five_x" translatable="false">0.25x</string>
<string name="pt_five_x" translatable="false">0.5x</string>
<string name="pt_seven_five_x" translatable="false">0.75x</string>
<string name="one_pt_two_five_x" translatable="false">1.25x</string>
<string name="one_pt_five_x" translatable="false">1.5x</string>
<string name="liking">Liking…</string>
<string name="like_unsuccessful">Like unsuccessful</string>
<string name="unlike_unsuccessful">Unlike unsuccessful</string>