diff --git a/app/src/main/java/awais/instagrabber/InstaGrabberApplication.java b/app/src/main/java/awais/instagrabber/InstaGrabberApplication.java index c5cd0d69..b90c8343 100644 --- a/app/src/main/java/awais/instagrabber/InstaGrabberApplication.java +++ b/app/src/main/java/awais/instagrabber/InstaGrabberApplication.java @@ -18,14 +18,14 @@ import awais.instagrabber.utils.LocaleUtils; import awais.instagrabber.utils.SettingsHelper; import awais.instagrabber.utils.TextUtils; import awaisomereport.CrashReporter; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; import static awais.instagrabber.utils.CookieUtils.NET_COOKIE_MANAGER; import static awais.instagrabber.utils.Utils.applicationHandler; import static awais.instagrabber.utils.Utils.cacheDir; import static awais.instagrabber.utils.Utils.clipboardManager; import static awais.instagrabber.utils.Utils.datetimeParser; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; import static awais.instagrabber.utils.Utils.settingsHelper; public final class InstaGrabberApplication extends Application { @@ -56,7 +56,7 @@ public final class InstaGrabberApplication extends Application { } if (!BuildConfig.DEBUG) CrashReporter.get(this).start(); - logCollector = new LogCollector(this); +// logCollector = new LogCollector(this); CookieHandler.setDefault(NET_COOKIE_MANAGER); diff --git a/app/src/main/java/awais/instagrabber/activities/MainActivity.java b/app/src/main/java/awais/instagrabber/activities/MainActivity.java index 302e65a0..ac97e169 100644 --- a/app/src/main/java/awais/instagrabber/activities/MainActivity.java +++ b/app/src/main/java/awais/instagrabber/activities/MainActivity.java @@ -21,6 +21,7 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; import android.widget.AutoCompleteTextView; import android.widget.Toast; @@ -143,6 +144,8 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage final String cookie = settingsHelper.getString(Constants.COOKIE); CookieUtils.setupCookies(cookie); isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) != 0; + if (settingsHelper.getBoolean(Constants.FLAG_SECURE)) + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); setContentView(binding.getRoot()); final Toolbar toolbar = binding.toolbar; setSupportActionBar(toolbar); diff --git a/app/src/main/java/awais/instagrabber/adapters/FeedStoriesListAdapter.java b/app/src/main/java/awais/instagrabber/adapters/FeedStoriesListAdapter.java index 6c54b587..9d7401e0 100755 --- a/app/src/main/java/awais/instagrabber/adapters/FeedStoriesListAdapter.java +++ b/app/src/main/java/awais/instagrabber/adapters/FeedStoriesListAdapter.java @@ -2,23 +2,46 @@ package awais.instagrabber.adapters; import android.view.LayoutInflater; import android.view.ViewGroup; +import android.widget.Filter; +import android.widget.Filterable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import awais.instagrabber.adapters.viewholder.StoryListViewHolder; import awais.instagrabber.databinding.ItemNotificationBinding; import awais.instagrabber.models.FeedStoryModel; -import awais.instagrabber.utils.Utils; +import awais.instagrabber.utils.TextUtils; -public final class FeedStoriesListAdapter extends ListAdapter { +public final class FeedStoriesListAdapter extends ListAdapter implements Filterable { private final OnFeedStoryClickListener listener; + private List list; + + private final Filter filter = new Filter() { + @Nullable + @Override + protected FilterResults performFiltering(final CharSequence filter) { + final boolean isFilterEmpty = TextUtils.isEmpty(filter); + final String query = isFilterEmpty ? null : filter.toString().toLowerCase(); + + for (FeedStoryModel item : list) { + if (isFilterEmpty) item.setShown(true); + else item.setShown(item.getProfileModel().getUsername().toLowerCase().contains(query)); + } + return null; + } + + @Override + protected void publishResults(final CharSequence constraint, final FilterResults results) { + submitList(list); + notifyDataSetChanged(); + } + }; private static final DiffUtil.ItemCallback diffCallback = new DiffUtil.ItemCallback() { @Override @@ -37,6 +60,17 @@ public final class FeedStoriesListAdapter extends ListAdapter list) { + super.submitList(list.stream().filter(i -> i.isShown()).collect(Collectors.toList())); + this.list = list; + } + @NonNull @Override public StoryListViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) { diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaShareViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaShareViewHolder.java index d4e63b11..8874e818 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaShareViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaShareViewHolder.java @@ -89,7 +89,7 @@ public class DirectItemMediaShareViewHolder extends DirectItemViewHolder { private void setupPreview(@NonNull final Media media, final MessageDirection messageDirection) { - final String url = ResponseBodyUtils.getThumbUrl(media.getImageVersions2()); + final String url = ResponseBodyUtils.getThumbUrl(media); if (Objects.equals(url, binding.mediaPreview.getTag())) { return; } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaViewHolder.java index cb32f0f1..24a9e62e 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemMediaViewHolder.java @@ -66,9 +66,7 @@ public class DirectItemMediaViewHolder extends DirectItemViewHolder { binding.mediaPreview.requestLayout(); binding.bgTime.getLayoutParams().width = width; binding.bgTime.requestLayout(); - final ImageVersions2 imageVersions2 = media.getImageVersions2(); - if (imageVersions2 == null) return; - final String thumbUrl = ResponseBodyUtils.getThumbUrl(imageVersions2); + final String thumbUrl = ResponseBodyUtils.getThumbUrl(media); binding.mediaPreview.setImageURI(thumbUrl); } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemProfileViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemProfileViewHolder.java index 34727b95..4b55c59f 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemProfileViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemProfileViewHolder.java @@ -86,8 +86,7 @@ public class DirectItemProfileViewHolder extends DirectItemViewHolder { for (int i = 0; i < previewMedias.size(); i++) { final Media previewMedia = previewMedias.get(i); if (previewMedia == null) continue; - final ImageVersions2 imageVersions2 = previewMedia.getImageVersions2(); - final String url = ResponseBodyUtils.getThumbUrl(imageVersions2); + final String url = ResponseBodyUtils.getThumbUrl(previewMedia); if (url == null) continue; previewViews.get(i).setImageURI(url); } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemRavenMediaViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemRavenMediaViewHolder.java index 1b68efa6..a8fb8dda 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemRavenMediaViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemRavenMediaViewHolder.java @@ -180,9 +180,7 @@ public class DirectItemRavenMediaViewHolder extends DirectItemViewHolder { layoutParams.width = widthHeight.first != null ? widthHeight.first : 0; layoutParams.height = widthHeight.second != null ? widthHeight.second : 0; binding.preview.requestLayout(); - final ImageVersions2 imageVersions2 = media.getImageVersions2(); - if (imageVersions2 == null) return; - final String thumbUrl = ResponseBodyUtils.getThumbUrl(imageVersions2); + final String thumbUrl = ResponseBodyUtils.getThumbUrl(media); binding.preview.setImageURI(thumbUrl); } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemReelShareViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemReelShareViewHolder.java index 7ae6b5d8..bb139332 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemReelShareViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemReelShareViewHolder.java @@ -162,9 +162,7 @@ public class DirectItemReelShareViewHolder extends DirectItemViewHolder { binding.preview.setHierarchy(new GenericDraweeHierarchyBuilder(itemView.getResources()) .setRoundingParams(roundingParams) .build()); - final ImageVersions2 imageVersions2 = media.getImageVersions2(); - if (imageVersions2 == null) return; - final String thumbUrl = ResponseBodyUtils.getThumbUrl(imageVersions2); + final String thumbUrl = ResponseBodyUtils.getThumbUrl(media); binding.preview.setImageURI(thumbUrl); } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemStoryShareViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemStoryShareViewHolder.java index c5a81993..b6b7bf68 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemStoryShareViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemStoryShareViewHolder.java @@ -86,9 +86,7 @@ public class DirectItemStoryShareViewHolder extends DirectItemViewHolder { layoutParams.width = widthHeight.first != null ? widthHeight.first : 0; layoutParams.height = widthHeight.second != null ? widthHeight.second : 0; binding.ivMediaPreview.requestLayout(); - final ImageVersions2 imageVersions2 = storyShareMedia.getImageVersions2(); - if (imageVersions2 == null) return; - final String thumbUrl = ResponseBodyUtils.getThumbUrl(imageVersions2); + final String thumbUrl = ResponseBodyUtils.getThumbUrl(storyShareMedia); binding.ivMediaPreview.setImageURI(thumbUrl); } diff --git a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java index 55b4904a..9580abd8 100644 --- a/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java +++ b/app/src/main/java/awais/instagrabber/adapters/viewholder/directmessages/DirectItemViewHolder.java @@ -242,10 +242,10 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder imple text = replied.getPlaceholder().getMessage(); break; case MEDIA: - url = ResponseBodyUtils.getThumbUrl(replied.getMedia().getImageVersions2()); + url = ResponseBodyUtils.getThumbUrl(replied.getMedia()); break; case RAVEN_MEDIA: - url = ResponseBodyUtils.getThumbUrl(replied.getVisualMedia().getMedia().getImageVersions2()); + url = ResponseBodyUtils.getThumbUrl(replied.getVisualMedia().getMedia()); break; case VOICE_MEDIA: text = resources.getString(R.string.voice_message); @@ -255,7 +255,7 @@ public abstract class DirectItemViewHolder extends RecyclerView.ViewHolder imple if (mediaShare.getMediaType() == MediaItemType.MEDIA_TYPE_SLIDER) { mediaShare = mediaShare.getCarouselMedia().get(0); } - url = ResponseBodyUtils.getThumbUrl(mediaShare.getImageVersions2()); + url = ResponseBodyUtils.getThumbUrl(mediaShare); break; case REEL_SHARE: text = replied.getReelShare().getText(); diff --git a/app/src/main/java/awais/instagrabber/asyncs/CommentsFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/CommentsFetcher.java index 044ebfe0..b75b758c 100755 --- a/app/src/main/java/awais/instagrabber/asyncs/CommentsFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/CommentsFetcher.java @@ -22,9 +22,9 @@ import awais.instagrabber.repositories.responses.User; import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.NetworkUtils; import awais.instagrabber.utils.TextUtils; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; public final class CommentsFetcher extends AsyncTask> { private static final String TAG = "CommentsFetcher"; @@ -130,11 +130,11 @@ public final class CommentsFetcher extends AsyncTask("commentModels.size", commentModels.size())); +// if (logCollector != null) +// logCollector.appendException(e, +// LogCollector.LogFile.ASYNC_COMMENTS_FETCHER, +// "getChildComments", +// new Pair<>("commentModels.size", commentModels.size())); if (BuildConfig.DEBUG) Log.e(TAG, "", e); if (fetchListener != null) fetchListener.onFailure(e); break; @@ -256,9 +256,9 @@ public final class CommentsFetcher extends AsyncTask("commentModelsList.size", commentModels.size())); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_COMMENTS_FETCHER, "getParentComments", +// new Pair<>("commentModelsList.size", commentModels.size())); if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); if (fetchListener != null) fetchListener.onFailure(e); return null; diff --git a/app/src/main/java/awais/instagrabber/asyncs/HashtagFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/HashtagFetcher.java index db2f5df3..09630e6f 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/HashtagFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/HashtagFetcher.java @@ -20,9 +20,9 @@ import awais.instagrabber.interfaces.FetchListener; import awais.instagrabber.models.HashtagModel; import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.NetworkUtils; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; public final class HashtagFetcher extends AsyncTask { private static final String TAG = "HashtagFetcher"; @@ -86,8 +86,8 @@ public final class HashtagFetcher extends AsyncTask { conn.disconnect(); } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ASYNC_HASHTAG_FETCHER, "doInBackground"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_HASHTAG_FETCHER, "doInBackground"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); if (fetchListener != null) fetchListener.onFailure(e); } diff --git a/app/src/main/java/awais/instagrabber/asyncs/LocationFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/LocationFetcher.java index 8ccd47ce..8aabc107 100644 --- a/app/src/main/java/awais/instagrabber/asyncs/LocationFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/LocationFetcher.java @@ -16,9 +16,9 @@ import awais.instagrabber.interfaces.FetchListener; import awais.instagrabber.models.LocationModel; import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.NetworkUtils; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; public final class LocationFetcher extends AsyncTask { private static final String TAG = "LocationFetcher"; @@ -65,8 +65,8 @@ public final class LocationFetcher extends AsyncTask conn.disconnect(); } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ASYNC_LOCATION_FETCHER, "doInBackground"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_LOCATION_FETCHER, "doInBackground"); if (BuildConfig.DEBUG) { Log.e(TAG, "", e); } diff --git a/app/src/main/java/awais/instagrabber/asyncs/PostFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/PostFetcher.java index c22954b5..eef69f41 100755 --- a/app/src/main/java/awais/instagrabber/asyncs/PostFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/PostFetcher.java @@ -12,9 +12,9 @@ import awais.instagrabber.interfaces.FetchListener; import awais.instagrabber.repositories.responses.Media; import awais.instagrabber.utils.NetworkUtils; import awais.instagrabber.utils.ResponseBodyUtils; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; public final class PostFetcher extends AsyncTask { private static final String TAG = "PostFetcher"; @@ -136,9 +136,9 @@ public final class PostFetcher extends AsyncTask { return ResponseBodyUtils.parseGraphQLItem(media); } } catch (Exception e) { - if (logCollector != null) { - logCollector.appendException(e, LogCollector.LogFile.ASYNC_POST_FETCHER, "doInBackground"); - } +// if (logCollector != null) { +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_POST_FETCHER, "doInBackground"); +// } Log.e(TAG, "Error fetching post", e); } finally { if (conn != null) { diff --git a/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java index 612259bd..1f1ba2cc 100755 --- a/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java +++ b/app/src/main/java/awais/instagrabber/asyncs/ProfileFetcher.java @@ -18,13 +18,16 @@ public final class ProfileFetcher extends AsyncTask { private final GraphQLService graphQLService; private final FetchListener fetchListener; + private final long myId; private final boolean isLoggedIn; private final String userName; public ProfileFetcher(final String userName, + final long myId, final boolean isLoggedIn, final FetchListener fetchListener) { this.userName = userName; + this.myId = myId; this.isLoggedIn = isLoggedIn; this.fetchListener = fetchListener; userService = isLoggedIn ? UserService.getInstance() : null; @@ -34,7 +37,7 @@ public final class ProfileFetcher extends AsyncTask { @Nullable @Override protected Void doInBackground(final Void... voids) { - if (isLoggedIn) { + if (isLoggedIn && userName != null) { userService.getUsernameInfo(userName, new ServiceCallback() { @Override public void onSuccess(final User user) { @@ -60,6 +63,20 @@ public final class ProfileFetcher extends AsyncTask { } }); } + else if (isLoggedIn) { + userService.getUserInfo(myId, new ServiceCallback() { + @Override + public void onSuccess(final User user) { + fetchListener.onResult(user); + } + + @Override + public void onFailure(final Throwable t) { + Log.e(TAG, "Error", t); + fetchListener.onFailure(t); + } + }); + } else { graphQLService.fetchUser(userName, new ServiceCallback() { @Override diff --git a/app/src/main/java/awais/instagrabber/asyncs/UsernameFetcher.java b/app/src/main/java/awais/instagrabber/asyncs/UsernameFetcher.java deleted file mode 100755 index d0feb459..00000000 --- a/app/src/main/java/awais/instagrabber/asyncs/UsernameFetcher.java +++ /dev/null @@ -1,55 +0,0 @@ -package awais.instagrabber.asyncs; - -import android.os.AsyncTask; -import android.util.Log; - -import androidx.annotation.Nullable; - -import org.json.JSONObject; - -import java.net.HttpURLConnection; -import java.net.URL; - -import awais.instagrabber.BuildConfig; -import awais.instagrabber.interfaces.FetchListener; -import awais.instagrabber.utils.Constants; -import awais.instagrabber.utils.NetworkUtils; -import awais.instagrabber.utils.Utils; - -public final class UsernameFetcher extends AsyncTask { - private final FetchListener fetchListener; - private final long uid; - - public UsernameFetcher(final long uid, final FetchListener fetchListener) { - this.uid = uid; - this.fetchListener = fetchListener; - } - - @Nullable - @Override - protected String doInBackground(final Void... voids) { - String result = null; - - try { - final HttpURLConnection conn = (HttpURLConnection) new URL("https://i.instagram.com/api/v1/users/" + uid + "/info/").openConnection(); - conn.setRequestProperty("User-Agent", Utils.settingsHelper.getString(Constants.BROWSER_UA)); - conn.setUseCaches(true); - - final JSONObject user; - if (conn.getResponseCode() == HttpURLConnection.HTTP_OK && - (user = new JSONObject(NetworkUtils.readFromConnection(conn)).optJSONObject(Constants.EXTRAS_USER)) != null) - result = user.getString(Constants.EXTRAS_USERNAME); - - conn.disconnect(); - } catch (final Exception e) { - if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); - } - - return result; - } - - @Override - protected void onPostExecute(final String result) { - if (fetchListener != null) fetchListener.onResult(result); - } -} diff --git a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java index 68e26dbd..d2b30803 100644 --- a/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/HashTagFragment.java @@ -70,11 +70,11 @@ import awais.instagrabber.utils.Utils; import awais.instagrabber.webservices.ServiceCallback; import awais.instagrabber.webservices.StoriesService; import awais.instagrabber.webservices.TagsService; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; import static androidx.core.content.PermissionChecker.checkSelfPermission; import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; import static awais.instagrabber.utils.Utils.settingsHelper; public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { @@ -607,8 +607,8 @@ public class HashTagFragment extends Fragment implements SwipeRefreshLayout.OnRe try { currentlyExecuting.cancel(true); } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.MAIN_HELPER, "stopCurrentExecutor"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.MAIN_HELPER, "stopCurrentExecutor"); Log.e(TAG, "", e); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java index d21e750e..24fa4b88 100644 --- a/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/LocationFragment.java @@ -69,12 +69,12 @@ import awais.instagrabber.utils.TextUtils; import awais.instagrabber.utils.Utils; import awais.instagrabber.webservices.ServiceCallback; import awais.instagrabber.webservices.StoriesService; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; import static androidx.core.content.PermissionChecker.checkSelfPermission; import static awais.instagrabber.fragments.HashTagFragment.ARG_HASHTAG; import static awais.instagrabber.utils.DownloadUtils.WRITE_PERMISSION; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; import static awais.instagrabber.utils.Utils.settingsHelper; public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener { @@ -586,8 +586,8 @@ public class LocationFragment extends Fragment implements SwipeRefreshLayout.OnR try { currentlyExecuting.cancel(true); } catch (final Exception e) { - if (logCollector != null) logCollector.appendException( - e, LogCollector.LogFile.MAIN_HELPER, "stopCurrentExecutor"); +// if (logCollector != null) logCollector.appendException( +// e, LogCollector.LogFile.MAIN_HELPER, "stopCurrentExecutor"); Log.e(TAG, "", e); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/NotificationsViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/NotificationsViewerFragment.java index 351c6a33..cae95e09 100644 --- a/app/src/main/java/awais/instagrabber/fragments/NotificationsViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/NotificationsViewerFragment.java @@ -103,17 +103,24 @@ public final class NotificationsViewerFragment extends Fragment implements Swipe model.getArgs().getUsername())); NavHostFragment.findNavController(NotificationsViewerFragment.this).navigate(action); } else { + final AlertDialog alertDialog = new AlertDialog.Builder(context) + .setCancelable(false) + .setView(R.layout.dialog_opening_post) + .create(); + alertDialog.show(); mediaService.fetch(mediaId, new ServiceCallback() { @Override public void onSuccess(final Media feedModel) { final PostViewV2Fragment fragment = PostViewV2Fragment .builder(feedModel) .build(); + fragment.setOnShowListener(dialog -> alertDialog.dismiss()); fragment.show(getChildFragmentManager(), "post_view"); } @Override public void onFailure(final Throwable t) { + alertDialog.dismiss(); Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); } }); diff --git a/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java b/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java index 4c987059..0ca2a30e 100644 --- a/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/PostViewV2Fragment.java @@ -647,7 +647,6 @@ public class PostViewV2Fragment extends SharedElementTransitionDialogFragment im navController.navigate(R.id.action_global_likesViewerFragment, bundle); return true; } - Utils.displayToastAboveView(context, v, getString(R.string.like_without_count)); return true; }); } diff --git a/app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java index d71a7cfb..57a9d7be 100644 --- a/app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java @@ -4,6 +4,9 @@ import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; @@ -12,6 +15,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.NavDirections; @@ -51,8 +55,9 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr private ArchivesViewModel archivesViewModel; private StoriesService storiesService; private Context context; - private String type, endCursor = null; + private String type, currentQuery, endCursor = null; private FeedStoriesListAdapter adapter; + private MenuItem menuSearch; private final OnFeedStoryClickListener clickListener = new OnFeedStoryClickListener() { @Override @@ -119,6 +124,7 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr fragmentActivity = (AppCompatActivity) requireActivity(); context = getContext(); if (context == null) return; + setHasOptionsMenu(true); storiesService = StoriesService.getInstance(null, 0L, null); } @@ -141,6 +147,30 @@ public final class StoryListViewerFragment extends Fragment implements SwipeRefr shouldRefresh = false; } + @Override + public void onCreateOptionsMenu(@NonNull final Menu menu, final MenuInflater inflater) { + inflater.inflate(R.menu.search, menu); + menuSearch = menu.findItem(R.id.action_search); + final SearchView searchView = (SearchView) menuSearch.getActionView(); + searchView.setQueryHint(getResources().getString(R.string.action_search)); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + + @Override + public boolean onQueryTextSubmit(final String query) { + return false; + } + + @Override + public boolean onQueryTextChange(final String query) { + if (adapter != null) { + currentQuery = query; + adapter.getFilter().filter(query); + } + return true; + } + }); + } + @Override public void onResume() { super.onResume(); diff --git a/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java b/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java index f5818a4d..4b2108a8 100644 --- a/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java @@ -87,6 +87,7 @@ import awais.instagrabber.models.stickers.SwipeUpModel; import awais.instagrabber.repositories.requests.StoryViewerOptions; import awais.instagrabber.repositories.requests.StoryViewerOptions.Type; import awais.instagrabber.repositories.requests.directmessages.BroadcastOptions; +import awais.instagrabber.repositories.responses.Media; import awais.instagrabber.repositories.responses.StoryStickerResponse; import awais.instagrabber.repositories.responses.directmessages.DirectThreadBroadcastResponse; import awais.instagrabber.utils.Constants; @@ -99,9 +100,10 @@ import awais.instagrabber.viewmodels.FeedStoriesViewModel; import awais.instagrabber.viewmodels.HighlightsViewModel; import awais.instagrabber.viewmodels.StoriesViewModel; import awais.instagrabber.webservices.DirectMessagesService; +import awais.instagrabber.webservices.MediaService; import awais.instagrabber.webservices.ServiceCallback; import awais.instagrabber.webservices.StoriesService; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -109,7 +111,7 @@ import retrofit2.Response; import static awais.instagrabber.customviews.helpers.SwipeGestureListener.SWIPE_THRESHOLD; import static awais.instagrabber.customviews.helpers.SwipeGestureListener.SWIPE_VELOCITY_THRESHOLD; import static awais.instagrabber.utils.Constants.MARK_AS_SEEN; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; import static awais.instagrabber.utils.Utils.settingsHelper; public class StoryViewerFragment extends Fragment { @@ -123,6 +125,7 @@ public class StoryViewerFragment extends Fragment { private SwipeEvent swipeEvent; private GestureDetectorCompat gestureDetector; private StoriesService storiesService; + private MediaService mediaService; private StoryModel currentStory; private int slidePos; private int lastSlidePos; @@ -161,6 +164,7 @@ public class StoryViewerFragment extends Fragment { final String deviceId = settingsHelper.getString(Constants.DEVICE_UUID); fragmentActivity = (AppCompatActivity) requireActivity(); storiesService = StoriesService.getInstance(csrfToken, userIdFromCookie, deviceId); + mediaService = MediaService.getInstance(null, null, 0); directMessagesService = DirectMessagesService.getInstance(csrfToken, userIdFromCookie, deviceId); setHasOptionsMenu(true); } @@ -396,10 +400,10 @@ public class StoryViewerFragment extends Fragment { return true; } } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ACTIVITY_STORY_VIEWER, "setupListeners", - new Pair<>("swipeEvent", swipeEvent), - new Pair<>("diffX", diffX)); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ACTIVITY_STORY_VIEWER, "setupListeners", +// new Pair<>("swipeEvent", swipeEvent), +// new Pair<>("diffX", diffX)); if (BuildConfig.DEBUG) Log.e(TAG, "Error", e); } return false; @@ -422,35 +426,40 @@ public class StoryViewerFragment extends Fragment { binding.spotify.setOnClickListener(v -> { final Object tag = v.getTag(); if (tag instanceof CharSequence) { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(tag.toString())); - startActivity(intent); + Utils.openURL(context, tag.toString()); } }); binding.swipeUp.setOnClickListener(v -> { final Object tag = v.getTag(); if (tag instanceof CharSequence) { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(tag.toString())); - startActivity(intent); + Utils.openURL(context, tag.toString()); } }); binding.viewStoryPost.setOnClickListener(v -> { final Object tag = v.getTag(); if (!(tag instanceof CharSequence)) return; - final String shortCode = tag.toString(); + final String mediaId = tag.toString(); final AlertDialog alertDialog = new AlertDialog.Builder(context) .setCancelable(false) .setView(R.layout.dialog_opening_post) .create(); alertDialog.show(); - new PostFetcher(shortCode, feedModel -> { - final PostViewV2Fragment fragment = PostViewV2Fragment - .builder(feedModel) - .build(); - fragment.setOnShowListener(dialog -> alertDialog.dismiss()); - fragment.show(getChildFragmentManager(), "post_view"); - }).execute(); + mediaService.fetch(Long.valueOf(mediaId), new ServiceCallback() { + @Override + public void onSuccess(final Media feedModel) { + final PostViewV2Fragment fragment = PostViewV2Fragment + .builder(feedModel) + .build(); + fragment.setOnShowListener(dialog -> alertDialog.dismiss()); + fragment.show(getChildFragmentManager(), "post_view"); + } + + @Override + public void onFailure(final Throwable t) { + alertDialog.dismiss(); + Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + } + }); }); final View.OnClickListener storyActionListener = v -> { final Object tag = v.getTag(); @@ -684,47 +693,45 @@ public class StoryViewerFragment extends Fragment { String currentStoryMediaId = null; final Type type = options.getType(); StoryViewerOptions fetchOptions = null; - if (currentFeedStoryIndex >= 0) { - switch (type) { - case HIGHLIGHT: { - final HighlightsViewModel highlightsViewModel = (HighlightsViewModel) viewModel; - final List models = highlightsViewModel.getList().getValue(); - if (models == null || models.isEmpty() || currentFeedStoryIndex >= models.size()) { - Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); - return; - } - final HighlightModel model = models.get(currentFeedStoryIndex); - currentStoryMediaId = model.getId(); - fetchOptions = StoryViewerOptions.forHighlight(model.getId()); - currentStoryUsername = model.getTitle(); - break; + switch (type) { + case HIGHLIGHT: { + final HighlightsViewModel highlightsViewModel = (HighlightsViewModel) viewModel; + final List models = highlightsViewModel.getList().getValue(); + if (models == null || models.isEmpty() || currentFeedStoryIndex >= models.size() || currentFeedStoryIndex < 0) { + Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + return; } - case FEED_STORY_POSITION: { - final FeedStoriesViewModel feedStoriesViewModel = (FeedStoriesViewModel) viewModel; - final List models = feedStoriesViewModel.getList().getValue(); - if (models == null) return; - final FeedStoryModel model = models.get(currentFeedStoryIndex); - currentStoryMediaId = model.getStoryMediaId(); - currentStoryUsername = model.getProfileModel().getUsername(); - fetchOptions = StoryViewerOptions.forUser(Long.parseLong(currentStoryMediaId), currentStoryUsername); - if (model.isLive()) { - live = model.getFirstStoryModel(); - } - break; + final HighlightModel model = models.get(currentFeedStoryIndex); + currentStoryMediaId = model.getId(); + fetchOptions = StoryViewerOptions.forHighlight(model.getId()); + currentStoryUsername = model.getTitle(); + break; + } + case FEED_STORY_POSITION: { + final FeedStoriesViewModel feedStoriesViewModel = (FeedStoriesViewModel) viewModel; + final List models = feedStoriesViewModel.getList().getValue(); + if (models == null || currentFeedStoryIndex >= models.size() || currentFeedStoryIndex < 0) return; + final FeedStoryModel model = models.get(currentFeedStoryIndex); + currentStoryMediaId = model.getStoryMediaId(); + currentStoryUsername = model.getProfileModel().getUsername(); + fetchOptions = StoryViewerOptions.forUser(Long.parseLong(currentStoryMediaId), currentStoryUsername); + if (model.isLive()) { + live = model.getFirstStoryModel(); } - case STORY_ARCHIVE: { - final ArchivesViewModel archivesViewModel = (ArchivesViewModel) viewModel; - final List models = archivesViewModel.getList().getValue(); - if (models == null || models.isEmpty() || currentFeedStoryIndex >= models.size()) { - Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); - return; - } - final HighlightModel model = models.get(currentFeedStoryIndex); - currentStoryMediaId = model.getId(); - currentStoryUsername = model.getTitle(); - fetchOptions = StoryViewerOptions.forUser(Long.parseLong(currentStoryMediaId), currentStoryUsername); - break; + break; + } + case STORY_ARCHIVE: { + final ArchivesViewModel archivesViewModel = (ArchivesViewModel) viewModel; + final List models = archivesViewModel.getList().getValue(); + if (models == null || models.isEmpty() || currentFeedStoryIndex >= models.size() || currentFeedStoryIndex < 0) { + Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); + return; } + final HighlightModel model = models.get(currentFeedStoryIndex); + currentStoryMediaId = model.getId(); + currentStoryUsername = model.getTitle(); + fetchOptions = StoryViewerOptions.forUser(Long.parseLong(currentStoryMediaId), currentStoryUsername); + break; } } if (type == Type.USER) { @@ -885,7 +892,11 @@ public class StoryViewerFragment extends Fragment { final ActionBar actionBar = fragmentActivity.getSupportActionBar(); if (actionBar != null) { - actionBar.setSubtitle(Utils.datetimeParser.format(new Date(currentStory.getTimestamp() * 1000L))); + try { + actionBar.setSubtitle(Utils.datetimeParser.format(new Date(currentStory.getTimestamp() * 1000L))); + } catch (Exception e) { + Log.e(TAG, "refreshStory: ", e); + } } if (settingsHelper.getBoolean(MARK_AS_SEEN)) diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index df3f134e..4cd53a0b 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -59,7 +59,6 @@ import awais.instagrabber.adapters.HighlightsAdapter; import awais.instagrabber.asyncs.CreateThreadAction; import awais.instagrabber.asyncs.ProfileFetcher; import awais.instagrabber.asyncs.ProfilePostFetchService; -import awais.instagrabber.asyncs.UsernameFetcher; import awais.instagrabber.customviews.PrimaryActionModeCallback; import awais.instagrabber.customviews.PrimaryActionModeCallback.CallbacksHelper; import awais.instagrabber.databinding.FragmentProfileBinding; @@ -125,11 +124,12 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe private HighlightsViewModel highlightsViewModel; private MenuItem blockMenuItem, restrictMenuItem, chainingMenuItem; private MenuItem muteStoriesMenuItem, mutePostsMenuItem; - private boolean highlightsFetching; + private boolean accountIsUpdated = false; private boolean postsSetupDone = false; private Set selectedFeedModels; private Media downloadFeedModel; private int downloadChildPosition = -1; + private long myId; private PostsLayoutPreferences layoutPreferences = Utils.getPostsLayoutPreferences(Constants.PREF_PROFILE_POSTS_LAYOUT); private final Runnable usernameSettingRunnable = () -> { @@ -303,11 +303,11 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe super.onCreate(savedInstanceState); cookie = Utils.settingsHelper.getString(Constants.COOKIE); isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) > 0; - final long userId = CookieUtils.getUserIdFromCookie(cookie); + myId = CookieUtils.getUserIdFromCookie(cookie); final String deviceUuid = Utils.settingsHelper.getString(Constants.DEVICE_UUID); final String csrfToken = CookieUtils.getCsrfTokenFromCookie(cookie); fragmentActivity = (MainActivity) requireActivity(); - friendshipService = isLoggedIn ? FriendshipService.getInstance(deviceUuid, csrfToken, userId) : null; + friendshipService = isLoggedIn ? FriendshipService.getInstance(deviceUuid, csrfToken, myId) : null; storiesService = isLoggedIn ? StoriesService.getInstance(null, 0L, null) : null; mediaService = isLoggedIn ? MediaService.getInstance(null, null, 0) : null; accountRepository = AccountRepository.getInstance(AccountDataSource.getInstance(getContext())); @@ -363,9 +363,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { inflater.inflate(R.menu.profile_menu, menu); blockMenuItem = menu.findItem(R.id.block); + final boolean isNotMe = profileModel != null && !Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie)); if (blockMenuItem != null) { - if (profileModel != null) { - blockMenuItem.setVisible(!Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie))); + if (isNotMe) { + blockMenuItem.setVisible(true); blockMenuItem.setTitle(profileModel.getFriendshipStatus().isBlocking() ? R.string.unblock : R.string.block); } else { blockMenuItem.setVisible(false); @@ -373,8 +374,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } restrictMenuItem = menu.findItem(R.id.restrict); if (restrictMenuItem != null) { - if (profileModel != null) { - restrictMenuItem.setVisible(!Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie))); + if (isNotMe) { + restrictMenuItem.setVisible(true); restrictMenuItem.setTitle(profileModel.getFriendshipStatus().isRestricted() ? R.string.unrestrict : R.string.restrict); } else { restrictMenuItem.setVisible(false); @@ -382,8 +383,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } muteStoriesMenuItem = menu.findItem(R.id.mute_stories); if (muteStoriesMenuItem != null) { - if (profileModel != null) { - muteStoriesMenuItem.setVisible(!Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie))); + if (isNotMe) { + muteStoriesMenuItem.setVisible(true); muteStoriesMenuItem.setTitle(profileModel.getFriendshipStatus().isMutingReel() ? R.string.mute_stories : R.string.unmute_stories); } else { muteStoriesMenuItem.setVisible(false); @@ -391,8 +392,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } mutePostsMenuItem = menu.findItem(R.id.mute_posts); if (mutePostsMenuItem != null) { - if (profileModel != null) { - mutePostsMenuItem.setVisible(!Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie))); + if (isNotMe) { + mutePostsMenuItem.setVisible(true); mutePostsMenuItem.setTitle(profileModel.getFriendshipStatus().isMuting() ? R.string.mute_posts : R.string.unmute_posts); } else { mutePostsMenuItem.setVisible(false); @@ -400,11 +401,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } chainingMenuItem = menu.findItem(R.id.chaining); if (chainingMenuItem != null) { - if (profileModel != null) { - chainingMenuItem.setVisible(!Objects.equals(profileModel.getPk(), CookieUtils.getUserIdFromCookie(cookie))); - } else { - chainingMenuItem.setVisible(false); - } + chainingMenuItem.setVisible(isNotMe); } } @@ -588,49 +585,20 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe binding.swipeRefreshLayout.setEnabled(true); setupHighlights(); setupCommonListeners(); - fetchUsername(); - } - - private void fetchUsername() { - final long uid = CookieUtils.getUserIdFromCookie(cookie); - if (TextUtils.isEmpty(username) && uid > 0) { - final FetchListener fetchListener = username -> { - if (TextUtils.isEmpty(username)) return; - this.username = username; - setUsernameDelayed(); - fetchProfileDetails(); - }; - accountRepository.getAccount(uid, new RepositoryCallback() { - @Override - public void onSuccess(final Account account) { - boolean found = false; - if (account != null) { - final String username = account.getUsername(); - if (!TextUtils.isEmpty(username)) { - found = true; - fetchListener.onResult("@" + username); - } - } - if (!found) { - // if not in database, fetch info from instagram - new UsernameFetcher(uid, fetchListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - } - - @Override - public void onDataNotAvailable() {} - }); - return; - } fetchProfileDetails(); } private void fetchProfileDetails() { - if (TextUtils.isEmpty(username)) return; - new ProfileFetcher(username.trim().substring(1), isLoggedIn, new FetchListener() { + accountIsUpdated = false; + new ProfileFetcher(TextUtils.isEmpty(username) ? null : username.trim().substring(1), + myId, isLoggedIn, new FetchListener() { @Override public void onResult(final User user) { if (getContext() == null) return; + if (TextUtils.isEmpty(username)) { + username = user.getUsername(); + setUsernameDelayed(); + } profileModel = user; setProfileDetails(); } @@ -665,11 +633,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } profileDetailsBinding.isVerified.setVisibility(profileModel.isVerified() ? View.VISIBLE : View.GONE); final long profileId = profileModel.getPk(); - final long myId = CookieUtils.getUserIdFromCookie(cookie); if (isLoggedIn) { fetchStoryAndHighlights(profileId); } - setupButtons(profileId, myId); + setupButtons(profileId); profileDetailsBinding.favChip.setVisibility(View.VISIBLE); final FavoriteRepository favoriteRepository = FavoriteRepository.getInstance(FavoriteDataSource.getInstance(getContext())); favoriteRepository.getFavorite(profileModel.getUsername(), FavoriteType.USER, new RepositoryCallback() { @@ -895,13 +862,10 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe profileDetailsBinding.mainFollowers.setOnClickListener(followersCount > 0 ? followClickListener : null); profileDetailsBinding.mainFollowing.setOnClickListener(followingCount > 0 ? followClickListener : null); } - binding.swipeRefreshLayout.setRefreshing(true); binding.postsRecyclerView.setVisibility(View.VISIBLE); - fetchPosts(); } else { profileDetailsBinding.mainFollowers.setClickable(false); profileDetailsBinding.mainFollowing.setClickable(false); - binding.swipeRefreshLayout.setRefreshing(false); // error binding.privatePage1.setImageResource(R.drawable.lock); binding.privatePage2.setText(R.string.priv_acc); @@ -910,7 +874,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } } - private void setupButtons(final long profileId, final long myId) { + private void setupButtons(final long profileId) { profileDetailsBinding.btnTagged.setVisibility(isReallyPrivate() ? View.GONE : View.VISIBLE); if (isLoggedIn) { if (Objects.equals(profileId, myId)) { @@ -919,6 +883,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe profileDetailsBinding.btnLiked.setVisibility(View.VISIBLE); profileDetailsBinding.btnDM.setVisibility(View.GONE); profileDetailsBinding.btnSaved.setText(R.string.saved); + if (!accountIsUpdated) updateAccountInfo(); return; } profileDetailsBinding.btnSaved.setVisibility(View.GONE); @@ -973,6 +938,26 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } } + private void updateAccountInfo() { + accountRepository.insertOrUpdateAccount( + profileModel.getPk(), + profileModel.getUsername(), + cookie, + profileModel.getFullName(), + profileModel.getProfilePicUrl(), + new RepositoryCallback() { + @Override + public void onSuccess(final Account result) { + accountIsUpdated = true; + } + + @Override + public void onDataNotAvailable() { + Log.e(TAG, "onDataNotAvailable: insert failed"); + } + }); + } + private void fetchStoryAndHighlights(final long profileId) { storiesService.getUserStory( StoryViewerOptions.forUser(profileId, profileModel.getFullName()), @@ -994,7 +979,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe new ServiceCallback>() { @Override public void onSuccess(final List result) { - highlightsFetching = false; if (result != null) { profileDetailsBinding.highlightsList.setVisibility(View.VISIBLE); highlightsViewModel.getList().postValue(result); @@ -1166,7 +1150,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } private void updateSwipeRefreshState() { - binding.swipeRefreshLayout.setRefreshing(binding.postsRecyclerView.isFetching() || highlightsFetching); + Log.d("austin_debug", "usrs: "+binding.postsRecyclerView.isFetching()); + binding.swipeRefreshLayout.setRefreshing(binding.postsRecyclerView.isFetching()); } private void setupHighlights() { @@ -1185,14 +1170,6 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe highlightsViewModel.getList().observe(getViewLifecycleOwner(), highlightModels -> highlightsAdapter.submitList(highlightModels)); } - private void fetchPosts() { - // stopCurrentExecutor(); - binding.swipeRefreshLayout.setRefreshing(true); - // currentlyExecuting = new PostsFetcher(profileModel.getId(), PostItemType.MAIN, endCursor, postsFetchListener) - // .setUsername(profileModel.getUsername()) - // .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - private void navigateToProfile(final String username) { final NavController navController = NavHostFragment.findNavController(this); final Bundle bundle = new Bundle(); @@ -1211,8 +1188,8 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } private boolean isReallyPrivate() { - final long myId = CookieUtils.getUserIdFromCookie(cookie); + if (profileModel.getPk() == myId) return false; final FriendshipStatus friendshipStatus = profileModel.getFriendshipStatus(); - return !friendshipStatus.isFollowing() && (profileModel.getPk() != myId) && profileModel.isPrivate(); + return !friendshipStatus.isFollowing() && profileModel.isPrivate(); } } diff --git a/app/src/main/java/awais/instagrabber/fragments/settings/AboutFragment.java b/app/src/main/java/awais/instagrabber/fragments/settings/AboutFragment.java index 03331704..98afce8d 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/AboutFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/AboutFragment.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; +import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatTextView; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; @@ -36,15 +37,56 @@ public class AboutFragment extends BasePreferencesFragment { final PreferenceCategory thirdPartyCategory = new PreferenceCategory(context); screen.addPreference(thirdPartyCategory); thirdPartyCategory.setTitle(R.string.about_category_3pt); - //thirdPartyCategory.setSummary(R.string.about_category_3pt_summary); thirdPartyCategory.setIconSpaceReserved(false); // alphabetical order!!! - thirdPartyCategory.addPreference(getACIPreference()); - thirdPartyCategory.addPreference(getAutolinkPreference()); - thirdPartyCategory.addPreference(getExoPlayerPreference()); - thirdPartyCategory.addPreference(getFrescoPreference()); - thirdPartyCategory.addPreference(getMDIPreference()); - thirdPartyCategory.addPreference(getRetrofitPreference()); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "Apache Commons Imaging", + "Copyright 2007-2020 The Apache Software Foundation. Apache 2.0. This product includes software developed at The Apache Software Foundation (http://www.apache.org/).", + "https://commons.apache.org/proper/commons-imaging/" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "AutoLinkTextViewV2", + "Copyright (C) 2019 Arman Chatikyan. Apache 2.0.", + "https://github.com/armcha/AutoLinkTextViewV2" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "ExoPlayer", + "Copyright (C) 2016 The Android Open Source Project. Apache 2.0.", + "https://exoplayer.dev" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "Fresco", + "Copyright (c) Facebook, Inc. and its affiliates. MIT License.", + "https://frescolib.org" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "GPUImage", + "Copyright 2018 CyberAgent, Inc. Apache 2.0.", + "https://github.com/cats-oss/android-gpuimage" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "Material Design Icons", + "Copyright (C) 2014 Austin Andrews & Google LLC. Apache 2.0.", + "https://materialdesignicons.com" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "Retrofit", + "Copyright 2013 Square, Inc. Apache 2.0.", + "https://square.github.io/retrofit/" + )); + thirdPartyCategory.addPreference(get3ptPreference( + context, + "uCrop", + "Copyright 2017 Yalantis. Apache 2.0.", + "https://github.com/Yalantis/uCrop" + )); } private Preference getDocsPreference() { @@ -97,102 +139,6 @@ public class AboutFragment extends BasePreferencesFragment { return preference; } - private Preference getRetrofitPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("Retrofit"); - preference.setSummary("Copyright 2013 Square, Inc. Apache 2.0."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://square.github.io/retrofit/")); - startActivity(intent); - return true; - }); - return preference; - } - - private Preference getFrescoPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("Fresco"); - preference.setSummary("Copyright (c) Facebook, Inc. and its affiliates. MIT License."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://frescolib.org/")); - startActivity(intent); - return true; - }); - return preference; - } - - private Preference getExoPlayerPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("ExoPlayer"); - preference.setSummary("Copyright (C) 2016 The Android Open Source Project. Apache 2.0."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://exoplayer.dev/")); - startActivity(intent); - return true; - }); - return preference; - } - - private Preference getMDIPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("Material Design Icons"); - preference.setSummary("Copyright (C) 2014 Austin Andrews & Google LLC. Apache 2.0."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://materialdesignicons.com/")); - startActivity(intent); - return true; - }); - return preference; - } - - private Preference getAutolinkPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("AutoLinkTextViewV2"); - preference.setSummary("Copyright (C) 2019 Arman Chatikyan. Apache 2.0."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://github.com/armcha/AutoLinkTextViewV2")); - startActivity(intent); - return true; - }); - return preference; - } - - private Preference getACIPreference() { - final Context context = getContext(); - if (context == null) return null; - final Preference preference = new Preference(context); - preference.setTitle("Apache Commons Imaging"); - preference.setSummary("Copyright 2007-2020 The Apache Software Foundation. Apache 2.0."); - preference.setIconSpaceReserved(false); - preference.setOnPreferenceClickListener(p -> { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://commons.apache.org/proper/commons-imaging/")); - startActivity(intent); - return true; - }); - return preference; - } - private Preference getLicensePreference() { final Context context = getContext(); if (context == null) return null; @@ -214,4 +160,21 @@ public class AboutFragment extends BasePreferencesFragment { preference.setIconSpaceReserved(true); return preference; } + + private Preference get3ptPreference(@NonNull final Context context, + final String title, + final String summary, + final String url) { + final Preference preference = new Preference(context); + preference.setTitle(title); + preference.setSummary(summary); + preference.setIconSpaceReserved(false); + preference.setOnPreferenceClickListener(p -> { + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + return true; + }); + return preference; + } } diff --git a/app/src/main/java/awais/instagrabber/fragments/settings/GeneralPreferencesFragment.java b/app/src/main/java/awais/instagrabber/fragments/settings/GeneralPreferencesFragment.java index deb7c277..4606fb48 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/GeneralPreferencesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/GeneralPreferencesFragment.java @@ -28,6 +28,7 @@ public class GeneralPreferencesFragment extends BasePreferencesFragment { screen.addPreference(getDefaultTabPreference(context)); } screen.addPreference(getUpdateCheckPreference(context)); + screen.addPreference(getFlagSecurePreference(context)); } private Preference getDefaultTabPreference(@NonNull final Context context) { @@ -58,4 +59,17 @@ public class GeneralPreferencesFragment extends BasePreferencesFragment { preference.setIconSpaceReserved(false); return preference; } + + private Preference getFlagSecurePreference(@NonNull final Context context) { + return PreferenceHelper.getSwitchPreference( + context, + Constants.FLAG_SECURE, + R.string.flag_secure, + -1, + false, + (preference, newValue) -> { + shouldRecreate(); + return true; + }); + } } diff --git a/app/src/main/java/awais/instagrabber/models/FeedStoryModel.java b/app/src/main/java/awais/instagrabber/models/FeedStoryModel.java index 7aa21239..04595093 100755 --- a/app/src/main/java/awais/instagrabber/models/FeedStoryModel.java +++ b/app/src/main/java/awais/instagrabber/models/FeedStoryModel.java @@ -16,6 +16,7 @@ public final class FeedStoryModel implements Serializable { private final boolean isLive, isBestie; private final long timestamp; private final int mediaCount; + private boolean isShown = true; public FeedStoryModel(final String storyMediaId, final User profileModel, final boolean fullyRead, final long timestamp, final StoryModel firstStoryModel, final int mediaCount, @@ -74,4 +75,12 @@ public final class FeedStoryModel implements Serializable { public boolean isBestie() { return isBestie; } + + public boolean isShown() { + return isShown; + } + + public void setShown(final boolean shown) { + isShown = shown; + } } \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/utils/Constants.java b/app/src/main/java/awais/instagrabber/utils/Constants.java index 45fd9e3f..cb56eba2 100644 --- a/app/src/main/java/awais/instagrabber/utils/Constants.java +++ b/app/src/main/java/awais/instagrabber/utils/Constants.java @@ -30,6 +30,7 @@ public final class Constants { // deprecated: public static final String AMOLED_THEME = "amoled_theme"; public static final String CHECK_ACTIVITY = "check_activity"; public static final String CHECK_UPDATES = "check_updates"; + public static final String FLAG_SECURE = "flag_secure"; // never Export public static final String COOKIE = "cookie"; public static final String SHOW_QUICK_ACCESS_DIALOG = "show_quick_dlg"; diff --git a/app/src/main/java/awais/instagrabber/utils/CookieUtils.java b/app/src/main/java/awais/instagrabber/utils/CookieUtils.java index 59bb805e..76bb55cd 100644 --- a/app/src/main/java/awais/instagrabber/utils/CookieUtils.java +++ b/app/src/main/java/awais/instagrabber/utils/CookieUtils.java @@ -21,7 +21,7 @@ import awais.instagrabber.BuildConfig; import awais.instagrabber.db.datasources.AccountDataSource; import awais.instagrabber.db.repositories.AccountRepository; import awais.instagrabber.db.repositories.RepositoryCallback; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; public final class CookieUtils { private static final String TAG = CookieUtils.class.getSimpleName(); @@ -52,8 +52,8 @@ public final class CookieUtils { cookieStore.add(uri3, httpCookie); } } catch (final URISyntaxException e) { - if (Utils.logCollector != null) - Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "setupCookies"); +// if (Utils.logCollector != null) +// Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "setupCookies"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } diff --git a/app/src/main/java/awais/instagrabber/utils/ExportImportUtils.java b/app/src/main/java/awais/instagrabber/utils/ExportImportUtils.java index e94f71c7..9c24db69 100755 --- a/app/src/main/java/awais/instagrabber/utils/ExportImportUtils.java +++ b/app/src/main/java/awais/instagrabber/utils/ExportImportUtils.java @@ -41,9 +41,9 @@ import awais.instagrabber.db.repositories.RepositoryCallback; import awais.instagrabber.interfaces.FetchListener; import awais.instagrabber.models.enums.FavoriteType; import awais.instagrabber.utils.PasswordUtils.IncorrectPasswordException; -import awaisomereport.LogCollector.LogFile; +//import awaisomereport.LogCollector.LogFile; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; import static awais.instagrabber.utils.Utils.settingsHelper; public final class ExportImportUtils { @@ -80,8 +80,8 @@ public final class ExportImportUtils { throw e; } catch (final Exception e) { if (fetchListener != null) fetchListener.onResult(false); - if (logCollector != null) - logCollector.appendException(e, LogFile.UTILS_IMPORT, "Import::pass"); +// if (logCollector != null) +// logCollector.appendException(e, LogFile.UTILS_IMPORT, "Import::pass"); if (BuildConfig.DEBUG) Log.e(TAG, "Error importing backup", e); } } else if (configType == 'Z') { @@ -99,7 +99,7 @@ public final class ExportImportUtils { throw e; } catch (final Exception e) { if (fetchListener != null) fetchListener.onResult(false); - if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_IMPORT, "Import"); +// if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_IMPORT, "Import"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } @@ -122,7 +122,7 @@ public final class ExportImportUtils { if (fetchListener != null) fetchListener.onResult(true); } catch (final Exception e) { if (fetchListener != null) fetchListener.onResult(false); - if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_IMPORT, "importJson"); +// if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_IMPORT, "importJson"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } @@ -241,8 +241,8 @@ public final class ExportImportUtils { exportBytes = PasswordUtils.enc(exportString, bytes); } catch (final Exception e) { if (fetchListener != null) fetchListener.onResult(false); - if (logCollector != null) - logCollector.appendException(e, LogFile.UTILS_EXPORT, "Export::isPass"); +// if (logCollector != null) +// logCollector.appendException(e, LogFile.UTILS_EXPORT, "Export::isPass"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } else { @@ -255,8 +255,8 @@ public final class ExportImportUtils { if (fetchListener != null) fetchListener.onResult(true); } catch (final Exception e) { if (fetchListener != null) fetchListener.onResult(false); - if (logCollector != null) - logCollector.appendException(e, LogFile.UTILS_EXPORT, "Export::notPass"); +// if (logCollector != null) +// logCollector.appendException(e, LogFile.UTILS_EXPORT, "Export::notPass"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } else if (fetchListener != null) fetchListener.onResult(false); @@ -324,7 +324,7 @@ public final class ExportImportUtils { }, AppExecutors.getInstance().tasksThread()); return; } catch (final Exception e) { - if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_EXPORT, "getExportString"); +// if (logCollector != null) logCollector.appendException(e, LogFile.UTILS_EXPORT, "getExportString"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } callback.onCreated(null); @@ -373,9 +373,9 @@ public final class ExportImportUtils { jsonArray.put(jsonObject); } } catch (Exception e) { - if (logCollector != null) { - logCollector.appendException(e, LogFile.UTILS_EXPORT, "getFavorites"); - } +// if (logCollector != null) { +// logCollector.appendException(e, LogFile.UTILS_EXPORT, "getFavorites"); +// } if (BuildConfig.DEBUG) { Log.e(TAG, "Error exporting favorites", e); } @@ -409,9 +409,9 @@ public final class ExportImportUtils { jsonArray.put(jsonObject); } } catch (Exception e) { - if (logCollector != null) { - logCollector.appendException(e, LogFile.UTILS_EXPORT, "getCookies"); - } +// if (logCollector != null) { +// logCollector.appendException(e, LogFile.UTILS_EXPORT, "getCookies"); +// } if (BuildConfig.DEBUG) { Log.e(TAG, "Error exporting accounts", e); } diff --git a/app/src/main/java/awais/instagrabber/utils/ResponseBodyUtils.java b/app/src/main/java/awais/instagrabber/utils/ResponseBodyUtils.java index 9a22a9c9..7a5b8361 100644 --- a/app/src/main/java/awais/instagrabber/utils/ResponseBodyUtils.java +++ b/app/src/main/java/awais/instagrabber/utils/ResponseBodyUtils.java @@ -13,6 +13,7 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import awais.instagrabber.BuildConfig; import awais.instagrabber.models.StoryModel; @@ -30,7 +31,7 @@ import awais.instagrabber.repositories.responses.Media; import awais.instagrabber.repositories.responses.MediaCandidate; import awais.instagrabber.repositories.responses.User; import awais.instagrabber.repositories.responses.VideoVersion; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; public final class ResponseBodyUtils { private static final String TAG = "ResponseBodyUtils"; @@ -75,10 +76,10 @@ public final class ResponseBodyUtils { if (lastIndexMain >= 0) return sources[lastIndexMain]; else if (lastIndexBase >= 0) return sources[lastIndexBase]; } catch (final Exception e) { - if (Utils.logCollector != null) - Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "getHighQualityPost", - new Pair<>("resourcesNull", resources == null), - new Pair<>("isVideo", isVideo)); +// if (Utils.logCollector != null) +// Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "getHighQualityPost", +// new Pair<>("resourcesNull", resources == null), +// new Pair<>("isVideo", isVideo)); if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); } return null; @@ -93,9 +94,9 @@ public final class ResponseBodyUtils { src = getHighQualityPost(resources.getJSONObject("image_versions2").getJSONArray("candidates"), false, true, false); if (src == null) return resources.getString("display_url"); } catch (final Exception e) { - if (Utils.logCollector != null) - Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "getHighQualityImage", - new Pair<>("resourcesNull", resources == null)); +// if (Utils.logCollector != null) +// Utils.logCollector.appendException(e, LogCollector.LogFile.UTILS, "getHighQualityImage", +// new Pair<>("resourcesNull", resources == null)); if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); } return src; @@ -986,7 +987,7 @@ public final class ResponseBodyUtils { model.setVideoUrl(ResponseBodyUtils.getHighQualityPost(videoResources, true, true, false)); if (data.has("story_feed_media")) { - model.setTappableShortCode(data.getJSONArray("story_feed_media").getJSONObject(0).optString("media_code")); + model.setTappableShortCode(data.getJSONArray("story_feed_media").getJSONObject(0).optString("media_id")); } // TODO: this may not be limited to spotify @@ -1094,29 +1095,24 @@ public final class ResponseBodyUtils { } public static String getThumbUrl(final Media media) { - if (media == null) { - return null; - } - final ImageVersions2 imageVersions2 = media.getImageVersions2(); - return getThumbUrl(imageVersions2); + return getImageCandidate(media, CandidateType.THUMBNAIL); } - public static String getThumbUrl(final ImageVersions2 imageVersions2) { - if (imageVersions2 == null) return null; - final List candidates = imageVersions2.getCandidates(); - if (candidates == null || candidates.isEmpty()) return null; - final MediaCandidate mediaCandidate = candidates.get(candidates.size() - 1); - if (mediaCandidate == null) return null; - return mediaCandidate.getUrl(); + public static String getImageUrl(final Media media) { + return getImageCandidate(media, CandidateType.DOWNLOAD); } - public static String getImageUrl(final Media media) { + private static String getImageCandidate(final Media media, final CandidateType type) { if (media == null) return null; final ImageVersions2 imageVersions2 = media.getImageVersions2(); if (imageVersions2 == null) return null; final List candidates = imageVersions2.getCandidates(); if (candidates == null || candidates.isEmpty()) return null; - final MediaCandidate candidate = candidates.get(0); + final List sortedCandidates = candidates.stream() + .sorted((c1, c2) -> Integer.compare(c2.getWidth(), c1.getWidth())) + .filter(c -> c.getWidth() < type.getValue()) + .collect(Collectors.toList()); + final MediaCandidate candidate = sortedCandidates.get(0); if (candidate == null) return null; return candidate.getUrl(); } @@ -1133,4 +1129,19 @@ public final class ResponseBodyUtils { model.setVideoUrl(data.getString("dash_playback_url")); return model; } + + private enum CandidateType { + THUMBNAIL(1000), + DOWNLOAD(10000); + + private final int value; + + CandidateType(final int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } } diff --git a/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java b/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java index e3426f99..b6238a97 100755 --- a/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java +++ b/app/src/main/java/awais/instagrabber/utils/SettingsHelper.java @@ -30,6 +30,7 @@ import static awais.instagrabber.utils.Constants.DEFAULT_TAB; import static awais.instagrabber.utils.Constants.DEVICE_UUID; import static awais.instagrabber.utils.Constants.DM_MARK_AS_SEEN; import static awais.instagrabber.utils.Constants.DOWNLOAD_USER_FOLDER; +import static awais.instagrabber.utils.Constants.FLAG_SECURE; import static awais.instagrabber.utils.Constants.FOLDER_PATH; import static awais.instagrabber.utils.Constants.FOLDER_SAVE_TO; import static awais.instagrabber.utils.Constants.MARK_AS_SEEN; @@ -139,7 +140,8 @@ public final class SettingsHelper { @StringDef({DOWNLOAD_USER_FOLDER, FOLDER_SAVE_TO, AUTOPLAY_VIDEOS, SHOW_QUICK_ACCESS_DIALOG, MUTED_VIDEOS, SHOW_CAPTIONS, CUSTOM_DATE_TIME_FORMAT_ENABLED, MARK_AS_SEEN, DM_MARK_AS_SEEN, CHECK_ACTIVITY, - CHECK_UPDATES, SWAP_DATE_TIME_FORMAT_ENABLED, PREF_ENABLE_DM_NOTIFICATIONS, PREF_ENABLE_DM_AUTO_REFRESH}) + CHECK_UPDATES, SWAP_DATE_TIME_FORMAT_ENABLED, PREF_ENABLE_DM_NOTIFICATIONS, PREF_ENABLE_DM_AUTO_REFRESH, + FLAG_SECURE}) public @interface BooleanSettings {} @StringDef({PREV_INSTALL_VERSION, BROWSER_UA_CODE, APP_UA_CODE, PREF_ENABLE_DM_AUTO_REFRESH_FREQ_NUMBER}) diff --git a/app/src/main/java/awais/instagrabber/utils/UserAgentUtils.java b/app/src/main/java/awais/instagrabber/utils/UserAgentUtils.java index 2113d4af..f3c0bd1b 100644 --- a/app/src/main/java/awais/instagrabber/utils/UserAgentUtils.java +++ b/app/src/main/java/awais/instagrabber/utils/UserAgentUtils.java @@ -75,7 +75,7 @@ public class UserAgentUtils { @NonNull public static String generateBrowserUA(final int code) { - return browsers[code - 1]; + return browsers[code]; } @NonNull diff --git a/app/src/main/java/awais/instagrabber/utils/Utils.java b/app/src/main/java/awais/instagrabber/utils/Utils.java index ed22c52a..29425a27 100644 --- a/app/src/main/java/awais/instagrabber/utils/Utils.java +++ b/app/src/main/java/awais/instagrabber/utils/Utils.java @@ -56,13 +56,13 @@ import java.util.Map; import awais.instagrabber.R; import awais.instagrabber.models.PostsLayoutPreferences; import awais.instagrabber.models.enums.FavoriteType; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; public final class Utils { private static final String TAG = "Utils"; private static final int VIDEO_CACHE_MAX_BYTES = 10 * 1024 * 1024; - public static LogCollector logCollector; +// public static LogCollector logCollector; public static SettingsHelper settingsHelper; public static boolean sessionVolumeFull = false; public static final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); diff --git a/app/src/main/java/awais/instagrabber/viewmodels/AppStateViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/AppStateViewModel.java index 2e1f01f2..c09e8e74 100644 --- a/app/src/main/java/awais/instagrabber/viewmodels/AppStateViewModel.java +++ b/app/src/main/java/awais/instagrabber/viewmodels/AppStateViewModel.java @@ -7,7 +7,6 @@ import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import awais.instagrabber.asyncs.ProfileFetcher; -import awais.instagrabber.asyncs.UsernameFetcher; import awais.instagrabber.db.datasources.AccountDataSource; import awais.instagrabber.db.entities.Account; import awais.instagrabber.db.repositories.AccountRepository; @@ -28,7 +27,6 @@ public class AppStateViewModel extends AndroidViewModel { private User currentUser; private AccountRepository accountRepository; - private String username; public AppStateViewModel(@NonNull final Application application) { super(application); @@ -37,52 +35,15 @@ public class AppStateViewModel extends AndroidViewModel { isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) > 0; if (!isLoggedIn) return; accountRepository = AccountRepository.getInstance(AccountDataSource.getInstance(application)); - setCurrentUser(); - } - - private void setCurrentUser() { - if (!isLoggedIn) return; - final FetchListener usernameListener = username -> { - if (TextUtils.isEmpty(username)) return; - this.username = username; - fetchProfileDetails(); - }; - fetchUsername(usernameListener); + fetchProfileDetails(); } public User getCurrentUser() { return currentUser; } - private void fetchUsername(final FetchListener usernameListener) { - if (!TextUtils.isEmpty(username)) { - usernameListener.onResult(username); - return; - } - final long uid = CookieUtils.getUserIdFromCookie(cookie); - if (uid <= 0) return; - accountRepository.getAccount(uid, new RepositoryCallback() { - @Override - public void onSuccess(@NonNull final Account account) { - final String username = account.getUsername(); - if (TextUtils.isEmpty(username)) return; - usernameListener.onResult("@" + username); - } - - @Override - public void onDataNotAvailable() { - // if not in database, fetch info - new UsernameFetcher(uid, usernameListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - }); - } - private void fetchProfileDetails() { - if (TextUtils.isEmpty(username)) return; - new ProfileFetcher( - username.trim().substring(1), - true, - user -> this.currentUser = user - ).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + final long uid = CookieUtils.getUserIdFromCookie(cookie); + new ProfileFetcher(null, uid, true, user -> this.currentUser = user).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } diff --git a/app/src/main/java/awais/instagrabber/viewmodels/DirectThreadViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/DirectThreadViewModel.java index 27cf10e4..4c01c658 100644 --- a/app/src/main/java/awais/instagrabber/viewmodels/DirectThreadViewModel.java +++ b/app/src/main/java/awais/instagrabber/viewmodels/DirectThreadViewModel.java @@ -279,6 +279,7 @@ public class DirectThreadViewModel extends AndroidViewModel { } public void markAsSeen() { + if (currentUser == null) return; final DirectThread thread = getThread().getValue(); if (thread == null) return; final List items = thread.getItems(); diff --git a/app/src/main/java/awais/instagrabber/workers/DownloadWorker.java b/app/src/main/java/awais/instagrabber/workers/DownloadWorker.java index b3557e9f..b0dae625 100644 --- a/app/src/main/java/awais/instagrabber/workers/DownloadWorker.java +++ b/app/src/main/java/awais/instagrabber/workers/DownloadWorker.java @@ -52,11 +52,11 @@ import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.DownloadUtils; import awais.instagrabber.utils.TextUtils; import awais.instagrabber.utils.Utils; -import awaisomereport.LogCollector; +//import awaisomereport.LogCollector; import static awais.instagrabber.utils.Constants.DOWNLOAD_CHANNEL_ID; import static awais.instagrabber.utils.Constants.NOTIF_GROUP_NAME; -import static awais.instagrabber.utils.Utils.logCollector; +//import static awais.instagrabber.utils.Utils.logCollector; public class DownloadWorker extends Worker { private static final String TAG = "DownloadWorker"; @@ -260,8 +260,8 @@ public class DownloadWorker extends Worker { try (final InputStream inputStream = contentResolver.openInputStream(uri)) { bitmap = BitmapFactory.decodeStream(inputStream); } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_1"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_1"); if (BuildConfig.DEBUG) Log.e(TAG, "", e); } } else if (mimeType.startsWith("video")) { @@ -277,13 +277,13 @@ public class DownloadWorker extends Worker { try { retriever.close(); } catch (final Exception e) { - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_2"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_2"); } } catch (final Exception e) { if (BuildConfig.DEBUG) Log.e(TAG, "", e); - if (logCollector != null) - logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_3"); +// if (logCollector != null) +// logCollector.appendException(e, LogCollector.LogFile.ASYNC_DOWNLOADER, "onPostExecute::bitmap_3"); } } } diff --git a/app/src/main/java/awaisomereport/CrashReporter.java b/app/src/main/java/awaisomereport/CrashReporter.java index d538bb4c..f5f22143 100755 --- a/app/src/main/java/awaisomereport/CrashReporter.java +++ b/app/src/main/java/awaisomereport/CrashReporter.java @@ -19,8 +19,8 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.util.Date; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; +//import java.util.zip.ZipEntry; +//import java.util.zip.ZipOutputStream; import awais.instagrabber.BuildConfig; import awais.instagrabber.utils.Utils; @@ -29,7 +29,7 @@ public final class CrashReporter implements Thread.UncaughtExceptionHandler { private static CrashReporter reporterInstance; private final Application application; private final String email; - private final File crashLogsZip; +// private final File crashLogsZip; private boolean startAttempted = false; public static CrashReporter get(final Application application) { @@ -40,7 +40,7 @@ public final class CrashReporter implements Thread.UncaughtExceptionHandler { private CrashReporter(@NonNull final Application application) { this.application = application; this.email = "barinsta@austinhuang.me"; - this.crashLogsZip = new File(application.getExternalCacheDir(), "crash_logs.zip"); +// this.crashLogsZip = new File(application.getExternalCacheDir(), "crash_logs.zip"); } public void start() { @@ -99,94 +99,88 @@ public final class CrashReporter implements Thread.UncaughtExceptionHandler { application.startActivity(new Intent(application, ErrorReporterActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - zipLogs(); +// zipLogs(); Process.killProcess(Process.myPid()); System.exit(10); } - public synchronized CrashReporter zipLogs() { - final File logDir = Utils.logCollector != null ? Utils.logCollector.getLogDir() : - new File(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? application.getDataDir() : application.getFilesDir(), "crashlogs"); - - try (final FileOutputStream fos = new FileOutputStream(crashLogsZip); - final ZipOutputStream zos = new ZipOutputStream(fos)) { - - final File[] files = logDir.listFiles(); - - if (files != null) { - zos.setLevel(5); - byte[] buffer; - for (final File file : files) { - if (file != null && file.length() > 0) { - buffer = new byte[1024]; - try (final FileInputStream fis = new FileInputStream(file)) { - zos.putNextEntry(new ZipEntry(file.getName())); - int length; - while ((length = fis.read(buffer)) > 0) zos.write(buffer, 0, length); - zos.closeEntry(); - } - } - } - } - - } catch (final Exception e) { - if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); - } - - return this; - } +// public synchronized CrashReporter zipLogs() { +// final File logDir = Utils.logCollector != null ? Utils.logCollector.getLogDir() : +// new File(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? application.getDataDir() : application.getFilesDir(), "crashlogs"); +// +// try (final FileOutputStream fos = new FileOutputStream(crashLogsZip); +// final ZipOutputStream zos = new ZipOutputStream(fos)) { +// +// final File[] files = logDir.listFiles(); +// +// if (files != null) { +// zos.setLevel(5); +// byte[] buffer; +// for (final File file : files) { +// if (file != null && file.length() > 0) { +// buffer = new byte[1024]; +// try (final FileInputStream fis = new FileInputStream(file)) { +// zos.putNextEntry(new ZipEntry(file.getName())); +// int length; +// while ((length = fis.read(buffer)) > 0) zos.write(buffer, 0, length); +// zos.closeEntry(); +// } +// } +// } +// } +// +// } catch (final Exception e) { +// if (BuildConfig.DEBUG) Log.e("AWAISKING_APP", "", e); +// } +// +// return this; +// } @SuppressWarnings("ResultOfMethodCallIgnored") - public void startCrashEmailIntent(final Context context, final boolean sendZipsOnly) { + public void startCrashEmailIntent(final Context context) { try { final String filePath = context.getFilesDir().getAbsolutePath(); String[] errorFileList; - if (sendZipsOnly) errorFileList = null; - else { - try { - final File dir = new File(filePath); - if (dir.exists() && !dir.isDirectory()) dir.delete(); - dir.mkdir(); - errorFileList = dir.list((d, name) -> name.endsWith(".stacktrace")); - } catch (final Exception e) { - errorFileList = null; - } + try { + final File dir = new File(filePath); + if (dir.exists() && !dir.isDirectory()) dir.delete(); + dir.mkdir(); + errorFileList = dir.list((d, name) -> name.endsWith(".stacktrace")); + } catch (final Exception e) { + errorFileList = null; } - if ((errorFileList != null && errorFileList.length > 0) || sendZipsOnly) { + if (errorFileList != null && errorFileList.length > 0) { final StringBuilder errorStringBuilder; - if (sendZipsOnly) errorStringBuilder = new StringBuilder("(Not a crash)\n\n"); - else { - errorStringBuilder = new StringBuilder("\r\n\r\n"); - final int maxSendMail = 5; - - int curIndex = 0; - for (final String curString : errorFileList) { - final File file = new File(filePath + '/' + curString); - - if (curIndex++ <= maxSendMail) { - errorStringBuilder.append("New Trace collected:\r\n=====================\r\n"); - try (final BufferedReader input = new BufferedReader(new FileReader(file))) { - String line; - while ((line = input.readLine()) != null) - errorStringBuilder.append(line).append("\r\n"); - } - } + errorStringBuilder = new StringBuilder("\r\n\r\n"); + final int maxSendMail = 5; - file.delete(); + int curIndex = 0; + for (final String curString : errorFileList) { + final File file = new File(filePath + '/' + curString); + + if (curIndex++ <= maxSendMail) { + errorStringBuilder.append("New Trace collected:\r\n=====================\r\n"); + try (final BufferedReader input = new BufferedReader(new FileReader(file))) { + String line; + while ((line = input.readLine()) != null) + errorStringBuilder.append(line).append("\r\n"); + } } - errorStringBuilder.append("\r\n\r\n"); + file.delete(); } + errorStringBuilder.append("\r\n\r\n"); + context.startActivity(Intent.createChooser(new Intent(Intent.ACTION_SEND).setType("message/rfc822") .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION) .putExtra(Intent.EXTRA_EMAIL, new String[]{email}) - .putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(application, BuildConfig.APPLICATION_ID + ".provider", crashLogsZip)) +// .putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(application, BuildConfig.APPLICATION_ID + ".provider", crashLogsZip)) .putExtra(Intent.EXTRA_SUBJECT, "Barinsta Crash Report") .putExtra(Intent.EXTRA_TEXT, errorStringBuilder.toString()), "Select an email app to send crash logs")); } diff --git a/app/src/main/java/awaisomereport/ErrorReporterActivity.java b/app/src/main/java/awaisomereport/ErrorReporterActivity.java index 5bd4669c..9fb1ce40 100755 --- a/app/src/main/java/awaisomereport/ErrorReporterActivity.java +++ b/app/src/main/java/awaisomereport/ErrorReporterActivity.java @@ -44,7 +44,7 @@ public final class ErrorReporterActivity extends Activity implements View.OnClic @Override public void onClick(@NonNull final View v) { if (v == btnReport) - CrashReporter.get(getApplication()).startCrashEmailIntent(this, false); + CrashReporter.get(getApplication()).startCrashEmailIntent(this); finish(); System.exit(10); } diff --git a/app/src/main/java/awaisomereport/LogCollector.java b/app/src/main/java/awaisomereport/LogCollector.java index b784de6f..1222701f 100755 --- a/app/src/main/java/awaisomereport/LogCollector.java +++ b/app/src/main/java/awaisomereport/LogCollector.java @@ -1,4 +1,4 @@ -package awaisomereport; +/*package awaisomereport; import android.app.Application; import android.os.Build; @@ -140,4 +140,4 @@ public final class LogCollector { //noinspection ResultOfMethodCallIgnored fileOrDirectory.delete(); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/app/src/main/res/menu/search.xml b/app/src/main/res/menu/search.xml new file mode 100755 index 00000000..040ed720 --- /dev/null +++ b/app/src/main/res/menu/search.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 819f6d28..95557279 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -16,14 +16,10 @@ Cancel·lar No Confirmar - Amunt - No ho tornis a mostrar - Directori actual Preferits Descobrir Comentaris Activitat - Destaca: %s Cerca actualitzacions a l\'inici Descarrega les publicacions a carpetes de nom d\'usuari Marca les històries com a vistes després de visualitzar-es @@ -42,8 +38,6 @@ Tema Només afecta als usuaris amb sessió iniciada: Només afecta als usuaris anònims: - Utilitza Instadp per a les imatges del perfil d\'alta definició - Importar/Exportar Llengua %s\nPublicació @@ -90,11 +84,8 @@ Aquest compte és privat Després de deixar de seguir, no podràs accedir a les publicacions. Estàs segur? Pots iniciar la sessió a través de Més ->; El teu compte és a l\'extrem inferior dret o pots veure comptes públics sense iniciar una sessió! - Pots lliscar cap a l\'esquerra/dreta per explorar/alimentar o cercar quelcom a sota! Aquest compte no té publicacions No existeixen publicacions d\'aquest tipus! - Versió actual: v%s - llegeix més… Inici de sessió Tancar la sessió Navega anònimament per Instagram @@ -133,21 +124,13 @@ Seguint Seguidor Mapa - Exportar - Importar - Exporta els inicis de sessió Comptes Configuració Preferits - Importar la configuració - Importar els inicis de sessió - Importar comptes - Importar favorits S\'ha importat correctament! S\'ha produït un error a l\'hora d\'importar! S\'ha exportat correctament! No s\'ha pogut exportar! - La contrasenya està buida! Actualitzar Obtenir cookies Mode escriptori @@ -162,21 +145,8 @@ Obre el perfil Veure història Mostra la imatge del perfil - - Has compartit un enllaç - Has compartit una imatge - Ha compartit un missatge cronometrat - Ha contestat a una història - Ha reaccionat a una història - Ha mencionat en una història Tipus de missatge no acceptat - Obrir l\'enllaç - Copiar text - Descarregar l\'adjunt - Donar m\'agrada - Treure el \"m\'agrada\" del missatge Anul·lar l\'enviament del missatge - Veure el perfil de l\'autor Veure a GIPHY %s ha compartit una publicació de @%s %s ha compartit una imatge @@ -212,7 +182,6 @@ Missatge... Premeu i mantingueu premut per enregistrar l\'àudio S\'està actualitzant... - Gran èxit! Deixar el xat Vols sortir d\'aquest xat? Expulsar @@ -223,18 +192,14 @@ Baixar directament Descarregar publicacions directament al telèfon! S\'estan recuperant les noves publicacions - Concedeix permisos i torna a provar de baixar! - S\'ha iniciat la descàrrega S\'ha completat la descàrrega Descarregant publicació… Descarregant multimèdia Descarregant la imatge de perfil - Fitxer descarregat a la carpeta Baixades! S\'ha produït un error desconegut!!! S\'ha produït un error en crear la carpeta! S\'ha produït un error en descarregar l\'arxiu Només pots descarregar 100 publicacions alhora. No siguis massa cobdiciós! - Copiar el nom d\'usuari Copiar el comentari Veure m\'agrades del comentari Respondre al comentari @@ -308,7 +273,6 @@ Inspecta, segueix, informa d\'errors, contribueix i diverteix-te (una altra vegada)! Enviar comentaris per correu electrònic Reconeixements de tercers - S\'utilitzen les següents biblioteques de codi obert: Recordatori Utilitza aquesta aplicació de manera responsable. Les imatges baixades només s\'han d\'utilitzar per a propòsits permesos per les lleis aplicables. Blanc diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index c92994ec..56cd43da 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -16,14 +16,10 @@ Zrušit Ne Potvrdit - Nahoru - Příště nezobrazovat - Aktuální složka Oblíbené Objevit Komentáře Aktivita - Zvýraznit: %s Zkontrolovat aktualizace při spuštění Stáhnout příspěvky do složek s uživatelským jménem Označit příběhy po zhlédnutí jako zobrazené @@ -42,8 +38,6 @@ Motiv Týká se pouze přihlášených uživatelů: Týká se pouze anonymních uživatelů: - Použít Instadp pro profilové obrázky s vysokým rozlišením - Importovat/exportovat Jazyk %s\nPříspěvek @@ -98,11 +92,8 @@ Tento účet je soukromý Po zrušení sledování nebudete mít přístup k příspěvkům! Jste si jisti? Můžete se přihlásit přes Více -> Účet v pravém dolním rohu nebo můžete zobrazit veřejné účty bez přihlášení! - Můžete posunout vlevo/vpravo pro objevit/feed nebo něco hledat níže! Tento účet nezveřejnil žádné příspěvky Žádné takové příspěvky! - Aktuální verze: v%s - číst více… Přihlásit se Odhlásit se Procházet Instagram anonymně @@ -141,21 +132,13 @@ Sleduje Sledující Mapa - Exportovat - Importovat - Exportovat přihlášení Účty Nastavení Oblíbené - Importovat nastavení - Importovat přihlášení - Importovat účty - Importovat oblíbené Úspěšně importováno! Import se nezdařil! Úspěšně exportováno! Export se nezdařil! - Heslo nebylo vyplněno! Načíst znovu Získat cookies Režim stolního počítače @@ -170,21 +153,8 @@ Otevřít profil Zobrazit příběh Zobrazit profilovou fotku - Vy - Sdílel(a) odkaz - Sdílel(a) média - Sdílel(a) časovanou zprávu - Odpověděl(a) na příběh - Reagoval(a) na příběh - Zmíněn v příběhu Unsupported message type - Otevřít odkaz - Zkopírovat text - Stáhnout přílohu - Zpráva se mi líbí - Zpráva se mi nelíbí Zrušit odeslání zprávy - Zobrazit profil autora View on GIPHY %s shared a post by @%s %s shared an image @@ -220,7 +190,6 @@ Message... Press and hold to record audio Updating... - Skvělý úspěch! Leave chat Chcete opustit tento chat? Vyhodit @@ -231,18 +200,14 @@ Stáhnout přímo Stahuje příspěvky přímo do telefonu! Načítání příspěvků - Prosím, udělte oprávnění a zkuste znovu stáhnout! - Stahování bylo zahájeno Stahování bylo dokončeno Stahování příspěvku… Stahuji média Stahování profilového obrázku - Soubor stažen ve složce Stažení! Vyskytla se neznámá chyba! Chyba při vytváření složky! Chyba při stahování souboru Můžete stahovat pouze 100 příspěvků najednou. Nebuďte příliš chamtiví! - Kopírovat uživatelské jméno Kopírovat komentář Zobrazit, komu se komentář líbí Odpovědět na komentář @@ -316,7 +281,6 @@ Auditujte, označte hvězdou, nahlaste chyby, přispívejte a mějte zábava (znovu)! Poslat zpětnou vazbu e-mailem Atributy třetích stran - Následující open-source knihovny třetích stran jsou použity: Upozornění Používejte tuto aplikaci odpovědně. Stažené obrázky by měly být použity pouze pro účely povolené platnými zákony. Bílá diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8125b0b0..09593f9b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -16,14 +16,10 @@ Abbrechen Nein Bestätigen - Nach oben - Nicht erneut anzeigen - Aktuelles Verzeichnis Favoriten Entdecken Kommentare Aktivität - Hervorheben: %s Beim Start auf Aktualisierungen prüfen Beiträge in Benutzernamen-Ordner herunterladen Stories nach dem Ansehen als gesehen markieren @@ -42,8 +38,6 @@ Design Betrifft nur angemeldete Benutzer: Betrifft nur anonyme Benutzer: - Instadp für hochauflösende Profilbilder verwenden - Importieren/Exportieren Sprache %s\nBeitrag @@ -90,11 +84,8 @@ Dieser Account ist privat Du wirst nicht mehr auf Beiträge zugreifen können, wenn du entfolgst! Bist du sicher? Du kannst dich unten rechts über Mehr -> anmelden, oder öffentliche Konten ohne Anmeldung ansehen! - Wische nach links/rechts für Erkunden/Feed, oder suche unten etwas! Dieses Konto hat keine Beiträge Keine derartigen Posts! - Aktuelle Version: v%s - mehr erfahren… Anmelden Abmelden Instagram anonym durchsuchen @@ -133,21 +124,13 @@ Abonniert Abonnent Karte - Exportieren - Importieren - Logins exportieren Konten Einstellungen Favoriten - Einstellungen importieren - Logins importieren - Konten importieren - Favoriten importieren Erfolgreich importiert! Importieren fehlgeschlagen! Erfolgreich exportiert! Export fehlgeschlagen! - Kein Passwort gewählt Aktualisieren Cookies abrufen Desktop Modus @@ -162,21 +145,8 @@ Profil öffnen Story ansehen Profilbild ansehen - Du - Einen Link geteilt - Medien geteilt - Zeitliche Nachricht geteilt - Auf Story geantwortet - Hat auf deine Story reagiert - Hat dich in seiner/ihrer Story erwähnt Nicht unterstützter Nachrichtentyp - Link öffnen - Text kopieren - Anhang herunterladen - Nachricht gefällt mir - Nachricht gefällt mir nicht mehr Nachricht zurückrufen - Absender Profil ansehen View on GIPHY %s hat einen Beitrag von @%s geteilt %s hat ein Bild geteilt @@ -212,7 +182,6 @@ Nachricht... Für Audioaufnahme drücken und halten Aktualisieren... - Großer Erfolg! Chat verlassen Chat verlassen? Entfernen @@ -223,18 +192,14 @@ Direkt herunterladen Lade Posts direkt auf das Handy herunter! Beiträgen abrufen - Bitte erteile die Berechtigung und versuche das Herunterladen erneut! - Download gestartet Download abgeschlossen Beitrag wird heruntergeladen… Medien herunterladen Profilbild wird heruntergeladen - Datei im Download-Verzeichnis heruntergeladen! Unbekannter Fehler ist aufgetreten!!! Fehler beim Erstellen des Ordners! Fehler beim Dateidownload Du kannst nur 100 Beiträge gleichzeitig herunterladen. Sei nicht zu gierig! - Benutzername kopieren Kommentar kopieren Kommentar-Liker ansehen Auf Kommentar antworten @@ -308,7 +273,6 @@ Prüfe den Code, melde Bugs, werde teil des Projekts und hab (nochmal) Spaß! Feedback per E-Mail senden Integration von Drittanbietern - Folgende Open-Source-Bibliotheken von Drittanbietern werden verwendet: Erinnerung Bitte verwende diese App verantwortungsvoll. Heruntergeladene Bilder sollten nur für Zwecke verwendet werden, die durch die geltenden Gesetze erlaubt sind. Weiß diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index fb54fc1d..6ae4285c 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -16,14 +16,10 @@ Ακύρωση Όχι Επιβεβαίωση - Πάνω - Να μην εμφανιστεί ξανά - Τρέχων Κατάλογος Αγαπημένα Ανακαλύψτε Σχόλια Δραστηριότητα - Καλύτερες Στιγμές: %s Έλεγχος για ενημερώσεις στο ξεκίνημα Λήψη δημοσίευσης στους φακέλους με ονόματα χρηστών Επισήμανση ιστοριών ως προβληθέντων μετά την προβολή @@ -42,8 +38,6 @@ Θέμα Επηρεάζει μόνο τους συνδεδεμένους χρήστες: Επηρεάζει μόνο ανώνυμους χρήστες: - Χρήση Instadp για εικόνες προφίλ υψηλής ευκρίνειας - Εισαγωγή/Εξαγωγή Γλώσσα %s\nΔημοσίευση @@ -90,11 +84,8 @@ Αυτός ο Λογαριασμός είναι Ιδιωτικός Δεν θα έχετε πρόσβαση σε δημοσιεύσεις μετά από την άρση ακολούθησης! Είστε σίγουροι; Μπορείτε να συνδεθείτε μέσω του Περισσότερα-> Λογαριασμός στην κάτω δεξιά γωνία ή μπορείτε να δείτε δημόσιους λογαριασμούς χωρίς σύνδεση! - Μπορείτε να σύρετε προς τα αριστερά/δεξιά για εξερεύνηση/τροφοδοσία ή να αναζητήσετε κάτι παρακάτω! Αυτός ο Λογαριασμός δεν έχει Δημοσιεύσεις Δεν Υπάρχουν Τέτοιες Δημοσιεύσεις! - Τρέχουσα έκδοση: v%s - διαβάστε περισσότερα… Σύνδεση Αποσύνδεση Περιήγηση στο Instagram ανώνυμα @@ -133,21 +124,13 @@ Ακολουθείτε Ακόλουθος Χάρτης - Εξαγωγή - Εισαγωγή - Εξεγωγή Συνδέσεων Λογαριασμοί Ρυθμίσεις Αγαπημένα - Εισαγωγή ρυθμίσεων - Εισαγωγή Συνδέσεων - Εισαγωγή λογαριασμών - Εισαγωγή Αγαπημένων Η εισαγωγή ήταν επιτυχής! Η εισαγωγή ήταν ανεπιτυχής! Η εξαγωγή ήταν επιτυχής! Η εξαγωγή απέτυχε! - Ο κωδικός πρόσβασης είναι κενός! Επαναφόρτωση Λήψη cookies Λειτουργία Επιφάνειας Εργασίας @@ -162,21 +145,8 @@ Άνοιγμα προφίλ Προβολή ιστορίας Προβολή εικόνας προφίλ - Εσείς - Μοιράστηκε έναν σύνδεσμο - Μοιράστηκε πολυμέσο - Κοινοποίηθηκε ένα χρονικό μήνυμα - Απάντησε σε μια ιστορία - Αντέδρασε σε μια ιστορία - Αναφερθήκατε σε μια ιστορία Μη υποστηριζόμενος τύπος μηνύματος - Άνοιγμα συνδέσμου - Αντιγραφή κειμένου - Λήψη συνημμένου - Μαρκάρισμα μηνύματος ως \'Μου Αρέσει\' - Αναίρεση \'Μου Αρέσει\' από το μήνυμα Κατάργηση αποστολής μηνύματος - Προβολή προφίλ του συγγραφέα View on GIPHY %s κοινοποίησε μια δημοσίευση από @%s %s κοινοποίησε μια εικόνα @@ -212,7 +182,6 @@ Μήνυμα... Πατήστε παρατεταμένα για εγγραφή ήχου Ενημέρωση... - Μεγάλη επιτυχία! Αποχώρηση από την συνομιλία Αποχώρηση από αυτήν τη συνομιλία; Διώξιμο @@ -223,18 +192,14 @@ Απευθείας λήψη Λήψεις δημοσιεύσεων απευθείας στο τηλέφωνο! Ανάκτηση δημοσιεύσης/εων - Παρακαλούμε παραχωρήστε τις απαιτούμενες άδειες και ξαναδοκιμάστε να το κατεβάσετε! - Η λήψη ξεκίνησε Η λήψη ολοκληρώθηκε Γίνεται λήψη της δημοσίευσης… Γίνεται λήψη πολυμέσων Γίνεται λήψη εικόνας προφίλ - Το αρχείο κατέβηκε στον φάκελο Λήψεις! Προέκυψε ένα άγνωστο σφάλμα!!! Σφάλμα κατά την δημιουργία φακέλου! Σφάλμα λήψης αρχείου Μπορείτε να κατεβάσετε μόνο 100 δημοσιεύσεις κάθε φορά. Μην είστε τόσο άπληστοι! - Αντιγραφή ονόματος χρήστη Αντιγραφή σχολίου Προβολή αυτών που μάρκαραν το σχόλιο ως \'Μου Αρέσει\' Απάντηση στο σχόλιο @@ -308,7 +273,6 @@ Ελέγχου, μαρκάρισμα με αστέρια, αναφορά σφαλμάτων, συνεισφορές, και διασκέδαση (ξανά)! Αποστολή σχολίων μέσω ηλ. ταχυδρομείου Αποδόσεις Τρίτων - Χρησιμοποιούνται οι ακόλουθες τρίτες βιβλιοθήκες ανοιχτού κώδικα: Υπενθύμιση Παρακαλούμε χρησιμοποιήστε αυτήν την εφαρμογή υπεύθυνα. Οι ληφθείσες εικόνες πρέπει να χρησιμοποιούνται μόνο για σκοπούς που επιτρέπονται από τους ισχύοντες νόμους. Άσπρο diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 169fdad5..1bc5ee91 100755 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -16,14 +16,10 @@ Cancelar No Confirmar - Subir - No mostrar de nuevo - Directorio actual Favoritos Explorar Comentarios Actividad - Resaltar: %s Buscar actualizaciones al inicio Usar subcarpetas con el nombre de usuario Marcar historias como vistas después de verlas @@ -42,8 +38,6 @@ Tema Sólo afecta a cuentas que han iniciado sesión: Sólo afecta a usuarios anónimos: - Usar Instadp para imágenes de perfil de alta definición - Importar/Exportar Idioma %s\nPublicación @@ -90,11 +84,8 @@ Esta cuenta es privada ¡No podrás acceder a sus publicaciones después de dejar de seguirle! ¿Estás seguro? ¡Puedes iniciar sesión a través de Más -> Cuenta en la esquina inferior derecha o puedes ver cuentas públicas sin iniciar sesión! - ¡Puedes deslizar hacia la izquierda/derecha para explorar/muro, o buscar algo abajo! Esta cuenta no tiene publicaciones ¡No existen tales publicaciones! - Versión actual: v%s - leer más… Iniciar sesión Cerrar sesión Navegar Instagram anónimamente @@ -133,21 +124,13 @@ Siguiendo Seguidor Mapa - Exportar - Importar - Exportar inicios de sesión Cuentas Ajustes Favoritos - Importar configuración - Importar inicios de sesión - Importar cuentas - Importar favoritos ¡Importado con éxito! ¡Falló la importación! ¡Exportado con éxito! ¡Falló la exportación! - ¡La contraseña está vacía! Actualizar Obtener cookies Modo escritorio @@ -162,21 +145,8 @@ Abrir perfil Ver historia Ver foto de perfil - - Compartió un enlace - Compartió un archivo multimedia - Compartió un mensaje temporizado - Respondió a una historia - Reaccionó a una historia - Fue mencionado en una historia Tipo de mensaje no soportado - Abrir enlace - Copiar texto - Descargar archivo adjunto - Dar \"me gusta\" al mensaje - Quitar \"me gusta\" al mensaje Cancelar envío de mensaje - Ver perfil del autor Ver en GIPHY %s ha compartido una publicación de @%s %s compartió una imagen @@ -212,7 +182,6 @@ Mensaje... Pulsa y mantén presionado para grabar audio Actualizando... - ¡Gran éxito! Abandonar chat ¿Salir de este chat? Expulsar @@ -223,18 +192,14 @@ Descargar directamente ¡Descarga los mensajes directamente al teléfono! Obteniendo publicación(es) - ¡Por favor, conceda los permisos e intente descargar de nuevo! - Descarga iniciada Descarga completada Descargando publicación… Descargando multimedia Descargando foto de perfil - ¡Archivo descargado en la carpeta de descargas! ¡¡¡Ha ocurrido un error desconocido!!! ¡Error al crear carpeta! Error al descargar archivo Sólo puedes descargar 100 publicaciones a la vez. ¡No seas abaricioso! - Copiar nombre de usuario Copiar comentario Ver me gustas del comentario Responder a comentario @@ -308,7 +273,6 @@ ¡Audite, añada a favoritos, reporte errores, contribuya y diviértase (de nuevo)! Enviar opinión por correo electrónico Créditos de terceros - Se usan las siguientes librerías de código abierto de terceros: Recordatorio Por favor, utilice esta aplicación de forma responsable. Las imágenes descargadas sólo deben utilizarse para propósitos permitidos por las leyes aplicables. Blanco diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index ae76f971..570d4ec3 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -16,14 +16,10 @@ Utzi Ez Baieztatu - Gora - Ez erakutsi berriro - Uneko direktorioa Gogokoak Aurkitu Iruzkinak Jarduera - Nabarmendua: %s Bilatu eguneratzeak abioan Deskargatu bidalketak erabiltzaile-izena duten karpetetara Markatu istorioak ikusita gisa ikusi ondoren @@ -42,8 +38,6 @@ Gaia Saioa hasi duten erabiltzaileei soilik eragiten die: Erabiltzaile anonimoei soilik eragiten die: - Erabili Instadp bereizmen handiko profil-irudietarako - Inportatu/Esportatu Hizkuntza %s\nPost @@ -90,11 +84,8 @@ Kontu hau pribatua da Ezingo dituzu bidalketak ikusi jarraitzeari utzi ondoren. Ziur zaude? You can log in via More -> Account on the bottom-right corner or you can view public accounts without login! - You can swipe left/right for explore/feed, or search something below! Kontu honek bidalketarik ez du Bidalketarik ez! - Uneko bertsioa: v%s - irakurri gehiago… Hasi saioa Amaitu saioa Nabigatu Instagramen anonimoki @@ -133,21 +124,13 @@ Jarraituak Jarraitzaile Mapa - Esportatu - Inportatu - Esportatu saio-hasierak Kontuak Ezarpenak Gogokoak - Inportatu ezarpenak - Inportatu saio-hasierak - Inportatu kontuak - Inportatu gogokoak Ongi inportatu da! Inportatzeak huts egin du! Ongi esportatu da! Esportatzeak huts egin du! - Pasahitza hutsik dago! Freskatu Eskuratu cookieak Mahaigaineko modua @@ -162,21 +145,8 @@ Ireki profila Ikusi istorioa Ikusi profil-irudia - Zu - Partekatutako esteka - Partekatutako multimedia - Denboraz neurtutako mezua partekatu du - Erantzundako istorioa - Istorio batera erreakzionatu du - Istorio batean aipatu zaitu Unsupported message type - Ireki esteka - Kopiatu testua - Deskargatu eranskina - Atsegin mezua - Atsegina kendu mezuari Ezabatu mezua - Ikusi MZren autorearen profila View on GIPHY %s shared a post by @%s %s shared an image @@ -212,7 +182,6 @@ Message... Press and hold to record audio Updating... - Behar bezala gauzatu da Leave chat Utzi txat hau? Bota @@ -223,18 +192,14 @@ Deskargatu zuzenean Bidalketak telefonora zuzenean deskargatzen ditu Fetching post(s) - Baimenak eman eta saiatu berriro deskargatzen - Deskarga hasita Deskarga burutu da Bidalketa deskargatzen… Multimedia deskargatzen Profil-irudia deskargatzen - Fitxategia deskargak karpetan deskargatu da Errore ezezaguna gertatu da Errorea karpeta sortzean! Errorea fitxategia deskargatzean 100 bidalketa deskargatu ditzakezu une berean. Ez izan gutiziatsu! - Kopiatu erabiltzaile-izena Kopiatu iruzkina Ikusi iruzkinen atsegiteak Erantzun iruzkinari @@ -308,7 +273,6 @@ Kodea ikusi, parte hartu eta gozatu! Bidali atzeraelikadura eposta bidez Hirugarrenen atribuzioak - The following third-party open-source libraries are used: Oroigarria Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws. Zuria diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 85a4e3fa..451ba8b7 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -16,14 +16,10 @@ لغو نه پذیرش - بالا - دوباره نمایش نده - دایرکتوری کنونی علاقه مندی ها کاوش دیدگاه‌ها فعالیت - درخشندگی: %s بررسی بروزرسانی هنگام آغاز برنامه بارگیری پست ها در پوشه های به نام کاربر نشان کرد استوری ها به عنوان دیده شده بعد از دیدن @@ -42,8 +38,6 @@ پوسته فقط بر کاربران وارد شده اثر دارد: فقط بر کاربران ناشناس اثر دارد: - استفاده از Instadp برای بالا بردن وضوح عکس‌های نمایه - وارد کردن/خروجی گرفتن زبان %s\nPost @@ -91,11 +85,8 @@ شما امکان دسترسی به پست ها را بعد از آنفالو کردن ندارید! مطمن هستید؟ می توانید توسط (بیشتر) وارد شوید -> حساب در گوشه پایین سمت راست یا می توانید حساب های عمومی را بدون ورود به سیستم ببینید! - شما میتوانید بکشید به سمت چپ/راست برای کاوش/پست، یا جستوجوی چیزهای زیر! این اکانت پستی ندارد چنین پست هایی نیست! - ورژن کنونی: v%s - دیدن بیشتر… ورود خروج گشت و گذار ناشناس در اینستاگرام @@ -134,21 +125,13 @@ پیگیری پیگیر نقشه - صادر کردن - وارد کردن - پشتیبان گیری لاگین ها هساب‌ها ساماندهی علاقه مندی ها - وارد کردن تنظیمات - وارد کردن لاگین ها - وارد کردن حساب ها - وارد کردن علاقه مندی ها با موفقیت وارد شد! وارد کردن موفقیت آمیز نبود! با موفقیت پشتیبان گیری شد! پشتبان گیری با موفقیت نبود! - رمز عبور خالی است! تازه سازی گرفتن کوکی ها حالت دسکتاپ @@ -163,21 +146,8 @@ باز کردن پروفایل View story دیدن عکس پروفایل - شما - یک لینک به اشتراک گذاشته شد - یک رسانه به اشتراک گذاشته شد - یک پیام زمان بندی شده به اشتراک گذاشته شد - به یک استوری پاسخ داده شد - به یک استوری واکنش نشان داده - نام برده شده در یک استوری Unsupported message type - باز کردن پیوند - روبرداری نوشته - دریافت پیوست - پسندیدن پیام - نپسندیدن پیام بازگرداندن پیام - دیدن پروفایل نویسنده View on GIPHY %s shared a post by @%s %s shared an image @@ -213,7 +183,6 @@ Message... Press and hold to record audio Updating... - موفقیت بزرگ! Leave chat این گفتگو را ترک میکنید؟ اخراج @@ -224,18 +193,14 @@ دانلود مستقیم دانلود مستقیم پست ها در موبایل! آوردن پست (ها) - لطفا دسترسی بدهید و تلاش کنید دوباره دانلود کنید! - دانلود شروع شده دانلود کامل شده دریافت پیک… دانلود رسانه ها دانلود عکس پروفایل - فایل دانلود شده در پوشه دانلود! خطای ناشناخته رخ داده است!!! خطا در ایجاد پوشه! خطا در دانلود فایل شما فقط 100 پست در یک زمان میتوانید دانلود کنید. خیلی حریص نباشید! - کپی نام کاربری کپی دیدگاه View comment likers پاسخ به دیدگاه @@ -309,7 +274,6 @@ حسابرسی ، ستاره گذاری ، گزارش اشکالات ، مشارکت و سرگرمی (دوباره)! ارسال بازخورد با ایمیل اسناد شخص ثالث - از کتابخانه های منبع باز شخص ثالث زیر استفاده می شود: یادآور لطفا با مسئولیت پذیری از این برنامه استفاده کنید. از تصاویر بارگیری شده فقط باید برای مقاصدی استفاده شود که طبق قوانین قابل اجرا است. سفید diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 27bc47c9..09d7db8d 100755 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -16,14 +16,10 @@ Annuler Non Confirmer - Monter - Ne plus afficher - Répertoire actuel Favoris Découvrir Commentaires Activité - Temps forts: %s Rechercher les mises à jours au démarrage Télécharger les messages dans les dossiers des noms d\'utilisateurs Marquer les stories comme vues après consultation @@ -42,8 +38,6 @@ Thème N\'affecte que les utilisateurs connectés : N\'affecte que les utilisateurs anonymes: - Utiliser Instadp pour les photos de profil haute définition - Importer/Exporter Langues %s\nPublication @@ -90,11 +84,8 @@ Compte privé Vous ne pourrez plus accéder aux messages après avoir été désabonné! Êtes-vous sûr(e) ? Vous pouvez vous connecter via Plus -> de Compte en bas à droite ou vous pouvez consulter les comptes publics sans vous connecter ! - Vous pouvez glisser vers la gauche/droite pour changer de catégorie, ou rechercher quelque chose ci-dessous! Ce compte ne contient pas de posts Aucun post de ce genre ! - Version actuelle : v%s - lire la suite… Se connecter Se déconnecter Parcourir Instagram de façon anonyme @@ -133,21 +124,13 @@ Abonnements Abonné Carte - Exporter - Importer - Exporter les connexions Comptes Paramètres Favoris - Importer les paramètres - Importer les connexions - Importer des comptes - Importer les favoris Importé avec succès! Erreur d\'importation! Exporté avec succès! Erreur d\'exportation! - Mot de passe manquant ! Actualiser Récupérer les cookies Mode desktop @@ -162,21 +145,8 @@ Ouvrir le profil Voir la story Voir la photo de profil - Vous - A partagé un lien - A partagé un média - A partagé un message temporaire - A répondu à une story - A réagi à une story - Mentionné dans une story Type de message non pris en charge - Ouvrir le lien - Copier le texte - Télécharger la pièce jointe - Aimer le message - Retirer le j\'aime du message Annuler l\'envoi du message - Voir le profil de l\'auteur Voir sur GIPHY %s a partagé un post de @%s %s a partagé une image @@ -212,7 +182,6 @@ Message... Appuyer de manière prolongée pour enregistrer un audio Mise à jour en cours... - Succès ! Quitter la conversation Quitter cette conversation ? Éjecter @@ -223,18 +192,14 @@ Télécharger directement Téléchargez les posts directement sur le téléphone ! Téléchargement de(s) post(s) - Veuillez accorder les autorisations et réessayez ! - Téléchargement commencé Téléchargement terminé Entrain de télécharger la publications… Téléchargement du média en cours Téléchargement de la photo de profil - Fichier téléchargé dans le dossier Téléchargements ! Une erreur inconnue s\'est produite!!! Erreur de création de dossier ! Erreur de téléchargement du fichier Vous ne pouvez télécharger que 100 publications à la fois. Ne soyez pas trop gourmands ! - Copier le nom d\'utilisateur Copier le commentaire Voir les \"j\'aime\" du commentaire Répondre au commentaire @@ -308,7 +273,6 @@ Audit, mettez une étoile, rapportez des bugs, contribuez et amusez-vous (encore)! Envoyer vos retours par e-mail Attributions tierces - Les bibliothèques tierces open-source suivantes sont utilisées : Rappel Veuillez utiliser cette application de manière responsable. Les images téléchargées ne devraient être utilisées que pour les fins autorisées par les lois en rigueur. Blanc diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index d540304b..86201c55 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -16,14 +16,10 @@ रद्द करें नहीं पुष्टि करें - ऊपर - दोबारा न दिखाएं - बर्तमान फोल्डर पसंदीदा खोजिए टिप्पणियाँ कार्यकलाप - विशेषताएँ: %s खुलने पर अपडेट के लिए जाँच करें पोस्ट को ब्यबहारकारी के नाम पर किये फोल्डरस में रखें स्टोरि को दिखने के बाद \"दिखा गया\" दिखादें @@ -42,8 +38,6 @@ थीम सिर्फ लग इन किए हुए ब्यबहारकारी के लिये गुमनामी लोगों के लिये - अधिक स्पष्ट रूपरेखा के लिये instadp कि ब्यबहार करें। - आयात/निर्यात भाषा %s\nPost @@ -91,11 +85,8 @@ अनफलो चे बाद आप पोस्ट तक पहुंच नहिं पाओगे! आप निश्चित हैं? आप लग इन और तरिकें के साथ कर सकते हो -> दक्षिण के निचे कोने में एकाउॅट पर या आप सार्बजनीन एकाउॅट को बिना लग इन के देख सकते हो! - तुम बाम/दक्षिण को स्बाइप करने से अन्वेषण/फिड देख सकते हो, या निचे से कुछ खोज सकते हो! इसी एकाउॅट में कोई पोस्ट नहीं है। एसे कोई पोस्ट नहीं है! - वर्तमान संस्करण: v%s - और पढ़ें... लॉग इन करें लॉग आउट करें इनस्टाग्राम में अज्ञात हो कर के देखें @@ -134,21 +125,13 @@ Following Follower नक्शा - निर्यात करें - आयात करें - लोगिन्स निर्यात करें खाते सेटिंग्स पसंदीदा - सेटिंग्स आयात करें - लॉगिन आयात करें - एकाउॅटस आयात करें - पसंदिदा आयात करें सफलतापूर्वक इम्पोर्ट किया गया! आयात करने में विफल रहा! सफलतापूर्वक निर्यात किया! निर्यात करने में विफल! - पासवर्ड खाली है! ताज़ा करें: कुकिज पायें डेस्कटप मोड करें @@ -163,21 +146,8 @@ प्रोफाइल खुलें View story प्रोफ़ाइल चित्र देखें - आप - लिंक साझा किया - मिडिया साझा किया - समयित सन्देश साझा किया - स्टोरि पे प्रतिक्रिया किया - स्टोरि पे प्रतिक्रिया किया - स्टोरि पे आपको उल्लेख किया Unsupported message type - लिंक खोलो - लेख कॉपी करें - अनुलग्नक डाउनलोड करें - सन्देश को पसन्द करें - सन्देश को पसन्द न करें सन्देश को प्रेरण न करें - लेखक प्रोफाइल देखें View on GIPHY %s shared a post by @%s %s shared an image @@ -213,7 +183,6 @@ Message... Press and hold to record audio Updating... - बड़ी सफलता! Leave chat इस बार्तालाप को छोड दें? बाहर निकालें @@ -224,18 +193,14 @@ सीधे डाउनलोड करें पोस्ट को सिधे अपने फोन पर डाउनलोड करें पोस्ट(स्) ला रहे हैं - अनुमति दें और फिर से प्रयास करें! - डाउनलोड शुरू... डाउनलोड समाप्त हुआ डाउनलोड जारी है… मिडीया डाउनलोड हो रहा है प्रोफाइल चित्र डाउनलोड करें - फाइल डाउनलोड फोल्डर में डाउनलोड हो गया! अज्ञात त्रुटि आई !!! फोलडर बनाने में त्रुटि! फ़ाइल डाउनलोड करने में त्रुटि आप सिर्फ १०० पोस्टस एक बार में डाउनलोड कर सकते हैं. ज्यादा लोभी बनना हानिकारक हैं! - युज़रनेम कॉपी करें टिप्पणी कॉपी करें View comment likers टिप्पणी का जवाब दें @@ -309,7 +274,6 @@ Audit, star, report bugs, contribute, and have fun (again)! Send feedback by email Third-Party Attributions - The following third-party open-source libraries are used: रिमाइन्डर Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws. सफेद diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 70076332..c34cac16 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -16,14 +16,10 @@ Batalkan Tidak Konfirmasi - Naik - Jangan Tampilkan Lagi - Direktori sekarang Favorit Temukan Komentar Aktivitas - Sorotan: %s Cek pembaruan saat memulai Unduh kiriman ke folder nama pengguna Tandai cerita dibaca setelah melihat @@ -42,8 +38,6 @@ Tema Hanya memengaruhi pengguna yang sudah masuk: Hanya memengaruhi pengguna anonim: - Gunakan Instadp untuk foto profil kualitas tinggi - Ekspor/impor Pengaturan Bahasa %s\nKiriman @@ -86,11 +80,8 @@ Akun Ini Bersifat Pribadi Anda tidak akan dapat mengakses kiriman setelah berhenti mengikuti! Anda yakin? Anda bisa masuk melalui Lebih-> Akun di pojok kanan bawah. Atau anda dapat melihat akun publik tanpa masuk! - Anda dapat mengusap ke kiri/kanan untuk jelajah/beranda, atau cari sesuatu di bawah! Akun ini tidak memiliki kiriman Kiriman tidak ditemukan! - Versi saat ini: v%s - selengkapnya… Masuk Keluar Jelajahi Instagram secara anonim @@ -129,21 +120,13 @@ Mengikuti Pengikut Peta - Ekspor - Impor - Ekspor Info Masuk Akun Pengaturan Kesukaan - Impor Pengaturan - Impor Info Masuk - Impor Akun - Impor kesukaan Berhasil diimpor! Gagal mengimpor! Berhasil diekspor! Gagal mengekspor! - Kata sandi kosong! Muat ulang Dapatkan cookies Desktop Mode\nuntuk 2FA @@ -158,21 +141,8 @@ Buka profil Lihat cerita Lihat foto profil - Anda - Membagikan alamat web - Membagikan media - Membagikan pesan berwaktu - Membalas ke sebuah cerita - Menanggapi sebuah cerita - Disebut dalam sebuah cerita Jenis pesan tidak didukung - Buka tautan - Salin teks - Unduh lampiran - Sukai pesan - Batal sukai pesan Batalkan pengiriman pesan - Lihat profil pengirim View on GIPHY %s berbagi kiriman @%s %s membagikan sebuah gambar @@ -208,7 +178,6 @@ Pesan... Tekan dan tahan untuk merekam Memperbarui... - Berhasil! Tinggalkan obrolan Tinggalkan obrolan ini? Keluarkan @@ -219,18 +188,14 @@ Langsung unduh Langsung unduh kiriman ke ponsel! Mendapatkan kiriman… - Mohon beri izin dan coba unduh lagi! - Unduhan dimulai Unduhan selesai Mengunduh kiriman… Mengunduh media Mengunduh foto profil - Berkas diunduh ke folder unduhan! Galat tidak diketahui! Galat membuat folder! Galat mengunduh berkas Anda hanya dapat mengunduh 100 kiriman saat bersamaan. Jangan serakah-serakah! - Salin nama pengguna Salin komentar Lihat penyuka komentar Balas komentar @@ -304,7 +269,6 @@ Audit, bintangi, laporan masalah, kontribusi, dan bersenang-senanglah (lagi)! Kirim umpan balik melalui surel Atribusi Pihak Ketiga - Berikut adalah pustaka pihak ketiga bersumber terbuka yang digunakan: Pengingat Gunakan aplikasi ini dengan bertanggung jawab. Gambar yang diunduh seharusnya digunakan sesuai dengan batasan-batasan yang ditetapkan oleh Undang-Undang. Putih diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d82b0a24..62250a37 100755 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -16,14 +16,10 @@ Annulla No Conferma - Su - Non Mostrare Più - Cartella corrente Preferiti Scopri Commenti Attività - In Evidenza: %s Verifica per aggiornamenti all\'avvio Scarica i post nelle cartelle del nome utente Segna le storie come viste dopo la visualizzazione @@ -42,8 +38,6 @@ Tema Influenza solo gli utenti connessi: Influenza solo gli utenti anonimi: - Usa Instadp per immagini del profilo ad alta definizione - Importa/Esporta Lingua %s\nPubblicazione @@ -90,11 +84,8 @@ Questo Profilo è Privato Non potrai accederei ai post dopo aver smesso di seguire! Sei sicuro? Puoi accedere tramite Altro -> Profilo nell\'angolo in basso a destra o puoi visualizzare i profili pubblici senza accedere! - Puoi scorrere a sinistra/destra per esplorare/alimentare, o cercare qualcosa sotto! Questo Profilo Non ha Post Nessun Post Simile! - Versione corrente: v%s - leggi altro… Accedi Disconettiti Naviga in Instagram anonimamente @@ -133,21 +124,13 @@ Seguendo Seguace Mappa - Esporta - Importa - Esporta Accessi Profili Impostazioni Preferiti - Importa impostazioni - Importa Accessi - Importa profili - Importa preferiti Importato correttamente! Impossibile importare! Esportato correttamente! Impossibile esportare! - La password è vuota! Ricarica Ottieni cookie Modalità Desktop @@ -162,21 +145,8 @@ Apri profilo Visualizza storia Vedi immagine del profilo - Tu - Ha condiviso un link - Ha condiviso un media - Ha condiviso un messaggio a tempo - Ha risposto ad una storia - Ha reagito ad una storia - Menzionato in una storia Tipo di messaggio non supportato - Apri collegamento - Copia testo - Scarica allegato - Mi Piace il messaggio - Il messaggio Non mi Piace Annulla invio messaggio - Visualizza profilo dell\'autore Visualizza su GIPHY %s ha condiviso un post di @%s %s ha condiviso un\'immagine @@ -212,7 +182,6 @@ Messaggio... Tieni premuto per registrare l\'audio In aggiornamento... - Ottimo successo! Lascia chat Lasciare questa chat? Espelli @@ -223,18 +192,14 @@ Scarica direttamente Scarica i post direttamente sul telefono! Recuperando i post - Sei pregato di garantire i permessi e riprovare a scaricare! - Download iniziato Download completato Scaricando il post… Download del media Scaricando l\'immagine del profilo - File scaricato nella cartella dei Download! Si è verificato un errore sconosciuto!!! Errore creando la cartella! Errore scaricando il file Puoi scaricare solo 100 post per volta. Non essere troppo avido! - Copia nome utente Copia commento Visualizza i mi piace del commento Rispondi al commento @@ -308,7 +273,6 @@ Ispeziona, valuta, segnala bug, contribuisci, e divertiti (ancora)! Invia feedback via email Attribuzioni di Terze Parti - Sono utilizzate le seguenti librerie open-source di terze parti: Promemoria Sei pregato di usare responsabilmente quest\'app. Le immagini scaricate dovrebbero essere usate solo per scopi consentiti dalle leggi applicabili. Bianco diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3f92ce74..41440092 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -16,14 +16,10 @@ キャンセル いいえ 確認 - Up - 次回から表示しない - カレントディレクトリ お気に入り 発見 コメント アクティビティ - ハイライト: %s 起動時にアップデートを確認 ユーザ名のフォルダに投稿をダウンロード ストーリーズを表示後に既読にする @@ -42,8 +38,6 @@ テーマ ログインユーザーにのみ影響します: 匿名ユーザーにのみ影響します: - プロフ画像にInstadpを使用 - インポート/エクスポート 言語 %s\n件 @@ -86,11 +80,8 @@ このアカウントは非公開です フォローを解除すると、投稿にアクセスできなくなります。よろしいですか? 右下にある 詳細 -> アカウント でログインすることができます。または、ログインせずに公開アカウントを表示することができます! - 左/右にスワイプして、発見/フィードを表示したり、下から検索したりできます。 このアカウントには投稿がありません 投稿はありません! - 現在のバージョン: v%s - 続きを読む… ログイン ログアウト Instagramを匿名で閲覧する @@ -129,21 +120,13 @@ フォロー中 フォロワー マップ - エクスポート - インポート - ログイン情報をエクスポート アカウント 設定 お気に入り - 設定をインポート - ログイン情報をインポート - アカウントをインポート - お気に入りをインポート インポートに成功しました! インポートに失敗しました! エクスポートに成功しました! エクスポートに失敗しました! - パスワードが未入力です! 更新 Cookie を取得する デスクトップモード @@ -158,21 +141,8 @@ プロフィールを開く ストーリーズを表示 プロフィール画像を表示 - あなた - リンクを共有 - メディアを共有 - Shared a timed message - Replied to a story - Reacted on a story - Mentioned in a story Unsupported message type - リンクを開く - テキストをコピー - 添付ファイルをダウンロード - メッセージにいいね! - いいね!を取り消す メッセージの送信を取り消す - 投稿者プロフィールを表示 View on GIPHY %s shared a post by @%s %s shared an image @@ -208,7 +178,6 @@ Message... Press and hold to record audio Updating... - 成功! Leave chat チャットを終了しますか? キックする @@ -219,18 +188,14 @@ 直接ダウンロードする 投稿を直接ダウンロード! 投稿を取得中 - 権限を許可して、もう一度ダウンロードしてください! - ダウンロード開始 ダウンロードが完了しました 投稿をダウンロード中… メディアをダウンロード中 プロフィール画像をダウンロード中 - ダウンロードフォルダにファイルがダウンロードされました! 不明なエラーが発生しました! フォルダの作成中にエラーが発生しました! ダウンロード中にエラーが発生しました 一度に100個までの投稿しかダウンロードできません。取り過ぎ注意! - ユーザー名をコピー コメントをコピー コメントにいいね!したユーザーを表示 コメントに返信 @@ -304,7 +269,6 @@ 監査して、スターを付けて、バグ報告して、貢献して、楽しんでください(二回目)! メールでフィードバックを送信 サードパーティ製アプリ - 以下のサードパーティー製のオープンソースライブラリが使用されています: 注意: このアプリは自己責任で使用してください。ダウンロードした画像は、適用される法律で許可されている目的の範囲内でのみ使用することができます。 ホワイト diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 9d5b06ae..185e4ddc 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -16,14 +16,10 @@ Cancel No Confirm - Up - Don\'t Show Again - Current directory Favorites Discover Comments Activity - Highlight: %s Check for updates at startup Download posts to username folders Mark stories as seen after viewing @@ -42,8 +38,6 @@ Theme Only affects logged-in users: Only affects anonymous users: - Use Instadp for high definition profile pictures - Import/Export Language %s\nPost @@ -90,11 +84,8 @@ This Account is Private You won\'t be able to access posts after unfollowing! Are you sure? You can log in via More -> Account on the bottom-right corner or you can view public accounts without login! - You can swipe left/right for explore/feed, or search something below! This Account has No Posts No Such Posts! - Current version: v%s - read more… Login Logout Browse Instagram anonymously @@ -133,21 +124,13 @@ Following Follower Map - Export - Import - Export Logins Accounts Settings Favorites - Import settings - Import Logins - Import accounts - Import favorites Successfully imported! Failed to import! Successfully exported! Failed to export! - Password is empty! Refresh Get cookies Desktop Mode @@ -162,21 +145,8 @@ Open profile View story View profile picture - You - Shared a link - Shared a media - Shared a timed message - Replied to a story - Reacted on a story - Mentioned in a story Unsupported message type - Open link - Copy text - Download attachment - Like message - Unlike message Unsend message - View author profile View on GIPHY %s shared a post by @%s %s shared an image @@ -212,7 +182,6 @@ Message... Press and hold to record audio Updating... - Great success! Leave chat Leave this chat? Kick @@ -223,18 +192,14 @@ Download directly Downloads posts directly to the phone! Fetching post(s) - Please grant permissions and try downloading again! - Download started Download completed Downloading post… Downloading media Downloading profile picture - File downloaded in Downloads folder! Unknown error occurred!!! Error creating folder! Error downloading file You can only download 100 posts at a time. Don\'t be too greedy! - Copy username Copy comment View comment likers Reply to comment @@ -308,7 +273,6 @@ Audit, star, report bugs, contribute, and have fun (again)! Send feedback by email Third-Party Attributions - The following third-party open-source libraries are used: Reminder Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws. White diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 7c5ecdb6..c1d8631a 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -16,14 +16,10 @@ Откажи Не Потврди - Горе - Не прикажувај повторно - Сегашен директориум Омилени Откриј Коментари Активности - Важни Приказни: %s Провери за ажурирање Превземи објави во папката со кориснички имиња Означи ги приказните како видени @@ -42,8 +38,6 @@ Тема Влијае само на корисниците кои се најавени: Влијае на анонимните корисници: - Користи Instadp за профили со висока резолуција - Импорт/Експорт Јазик %s\nPost @@ -90,11 +84,8 @@ Корисникот има приватен профил Наме да можете да гледате објави и приказни од овој корисник ако го Одследите! Дали сте сигурни? Можете да се најавите преку Повеќе -> Корисничата сметка која се наоѓа долу десно или само можете да гледате Отворени профили без да се логирате! - Можете да лизгате со прстот лево/десно за да се движите помеѓу опции, или пребарајте некој корисник долу! Овој корисник нема објави Не постојат такви објави! - Сегашна верзија: v%s - прочитај повеќе… Најави се Одјави се Пребарувај инстаграм анонимно @@ -133,21 +124,13 @@ Следиш Следач Карта - Експорт - Импорт - Експортни Најава Корисничка сметка Подесувања Омилени - Импортирај Опции - Импортирај Најава - Импортирај кориснички сметки - Импортирај Омилени Успешно импортирање! Неуспешно Импортирање! Успешно експортиање! Неуспешно експортиање! - Полето за лозинка е празно! Обнови Превземи колачиња Десктоп изглед @@ -162,21 +145,8 @@ Отвори Профил Погледни приказна Прегладај профилната слика - Ти - Сподели линк - Сподели медиум - Сподели порака со тајмер - Одговори на приказната - Израгира на приказната - Те спомна на приказната Unsupported message type - Отвори линк - Копирај текст - Превземи содржина - Лајни порака - Одлајкни порака Избриши порака - Види профил на авторот View on GIPHY %s shared a post by @%s %s shared an image @@ -212,7 +182,6 @@ Message... Press and hold to record audio Updating... - Одличен успех! Leave chat Дали сакате да го напуштите чатот? Кикни @@ -223,18 +192,14 @@ Превземи директно Превземи објави во твојот телефон! Се превземаат објава(ви) - Ве молиме дозволете ги барањата и пробајте повторно да превземите! - Превзмањето започна Преземањето е завршено Превземање на Објава… Се превзема медиум Се превзема профилната слика - Фајлот беше превземен во папката Downloads! Непозната Фатална Грешка!!! Фатална грешка при креирање папка! Фатална грешка при превзамање фајл Можете само 100 постови наеднаш да превземите. Не бидете алчни! - Копирај корисничко име Копирај Коментар Прегледај лајкови на коментар Одговори на коментар @@ -308,7 +273,6 @@ Ревидирајте, додадете ѕвезда, пријавете грешки и багови, контрибуирајте и имајте забава! Пратете пофалби/поплаки преку email Интеграција на Third-Party - Следниве third-party библиотеки кои се со отворен код се користени: Потсетник Ве молиме користете ја апликацијата со одговорност. Превземените содржини како слики, видеа и аудио, треба да бидат користени со применливите закони на Инстаграм и авторите на постот/приказната. Бела diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 704158bb..e3542615 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -16,14 +16,10 @@ Annuleren Nee Bevestigen - Boven - Niet meer tonen - Huidige map Favorieten Ontdekken Opmerkingen Activiteit - Hoogtepunt: %s Controleer op updates bij het opstarten Download berichten naar gebruikersnaam mappen Markeer verhalen als gelezen na bekijken @@ -42,8 +38,6 @@ Thema Heeft alleen invloed op ingelogde gebruikers: Heeft alleen invloed op anonieme gebruikers: - Instadp gebruiken voor hoge definitie profielfoto\'s - Importeren/Exporteren Taal %s\nPost @@ -90,11 +84,8 @@ Dit Account is Privé Je zal geen toegang meer hebben tot berichten na het ontvolgen! Weet je het zeker? Je kunt inloggen via Meer -> Rechtsonder in je account, of je kunt openbare accounts bekijken zonder in te loggen! - Je kunt naar links/rechts vegen voor ontdekken/feed of hieronder iets zoeken! Dit Account heeft Geen Berichten Geen dergelijke berichten! - Huidige versie: v%s - lees meer… Aanmelden Uitloggen Anoniem Instagram browsen @@ -133,21 +124,13 @@ Following Follower Kaart - Exporteer - Importeer - Exporteer Logins Accounts Instellingen Favorieten - Importeer instellingen - Importeer Logins - Importeer accounts - Importeer favorieten Succesvol geïmporteerd! Importeren mislukt! Succesvol geëxporteerd! Exporteren mislukt! - Wachtwoord is leeg! Ververs Cookies ophalen Desktop Modus @@ -162,21 +145,8 @@ Open profiel View story Bekijk profielfoto - Jij - Heeft een link gedeeld - Heeft media gedeeld - Heeft een tijdelijk bericht gedeeld - Heeft gereageerd op een verhaal - Heeft gereageerd op een verhaal - Heeft genoemd in een verhaal Unsupported message type - Koppeling openen - Kopieer tekst - Bijlage downloaden - Like bericht - Unlike bericht Maak bericht ongedaan - Bekijk profiel van auteur DM View on GIPHY %s shared a post by @%s %s shared an image @@ -212,7 +182,6 @@ Message... Press and hold to record audio Updating... - Geweldig succes! Leave chat Deze chat verlaten? Kick @@ -223,18 +192,14 @@ Rechtstreeks downloaden Download rechtstreeks naar het apparaat! Post(s) ophalen - Geef toestemming en probeer opnieuw te downloaden! - Download is gestart Download voltooid Bericht downloaden… Media downloaden Profielfoto downloaden - Bestand gedownload in Downloads map! Er is een onbekende fout opgetreden!!! Fout bij aanmaken map! Fout bij downloaden bestand Je kunt slechts 100 berichten per keer downloaden. Wees niet te hebberig! - Kopieer gebruikersnaam Kopieer reactie View comment likers Reageer op opmerking @@ -308,7 +273,6 @@ Audit, ster, meld bugs, bijdragen en veel plezier (nog een keer)! Stuur feedback per e-mail Attributen van derden - De volgende open-source-bibliotheken van derden worden gebruikt: Herinnering Gebruik deze app verantwoordelijk. Gedownloade afbeeldingen mogen alleen worden gebruikt voor doeleinden die zijn toegestaan door toepasselijke wetten. Wit diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index b899809b..843021c6 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -16,14 +16,10 @@ ରଦ୍ଦ କର ନାଁ ନିଶ୍ଚିତ କରନ୍ତୁ - ଉପର - ପୁନର୍ବାର ଦେଖାନ୍ତୁ ନାହିଁ - ବର୍ତମାନ ଫୋଲ୍ଡର ପସନ୍ଦିତ ଖୋଜିବା ଟିପ୍ପଣୀ କାର୍ଯ୍ୟକଳାପ - ବିଶେଷତା: %s ଖୋଲିବା ସମୟରେ ଅପଡେଟ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ ଡାଉନଲୋଡ ପୋଷ୍ଟକୁ ବ୍ୟବହାରକାରୀଙ୍କ ନାମରେ ହୋଇଥିବା ସ୍ଥାନ ରେ ରଖ କାହାଣୀଗୁଡିକ ଦେଖିବା ପରେ \'ଦେଖାଗଲା\' ଚିହ୍ନିତ କରନ୍ତୁ | @@ -42,8 +38,6 @@ ଥିମ କେବଳ ଲଗ ଇନ ହୋଇଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ: କେବଳ ଲଗ ଇନ ହୋଇନଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ: - ଅଧିକ ସ୍ପଷ୍ଟ ପ୍ରୋଫାଇଲ ଚିତ୍ର ପାଇଁ instadp ର ବ୍ୟବହାର କରନ୍ତୁ। - ଇମ୍ପୋର୍ଟ/ଏକ୍ସପୋର୍ଟ ଭାଷା %s\nPost @@ -90,11 +84,8 @@ ଏହି ଏକାଉଣ୍ଟ ଗୁପ୍ତ ଅଟେ ଆପଣ ଅନୁସରଣ ନ କଲେ ପୋଷ୍ଟଗୁଡିକୁ ପ୍ରବେଶ କରିବାକୁ ସମର୍ଥ ହେବେ ନାହିଁ! ଆପଣ ନିଶ୍ଚିତ କି? ଆପଣ ନିମ୍ନ - ଡାହାଣ କୋଣରେ ଅଧିକ -> ଆକାଉଣ୍ଟ୍ ମାଧ୍ୟମରେ ଲଗ୍ ଇନ୍ କରିପାରିବେ କିମ୍ବା ଆପଣ ଲଗ୍ଇନ୍ ବିନା ସର୍ବସାଧାରଣ ଆକାଉଣ୍ଟ୍ ଦେଖିପାରିବେ |! - ଅନୁସନ୍ଧାନ / ଫିଡ୍ ପାଇଁ ଆପଣ ବାମ / ଡାହାଣକୁ ସ୍ୱାଇପ୍ କରିପାରିବେ, କିମ୍ବା ନିମ୍ନରେ କିଛି ଖୋଜି କରିପାରିବେ! ଏହି ଆକାଉଣ୍ଟରେ କୌଣସି ପୋଷ୍ଟ ନାହିଁ | ଏପରି କୌଣସି ପୋଷ୍ଟ ନାହିଁ! - ବର୍ତ୍ତମାନର ସଂସ୍କରଣ: v%s - ଅଧିକ ପଢନ୍ତୁ… ଲଗ ଇନ୍ ଲଗ ଆଉଟ୍ ବିନା ଏକାଉଣ୍ଟରେ ଇନଷ୍ଟାଗ୍ରାମ ବ୍ରାଉଜ୍ କରନ୍ତୁ | @@ -133,21 +124,13 @@ Following Follower Map - Export - Import - Export Logins Accounts Settings Favorites - Import settings - Import Logins - Import accounts - Import favorites Successfully imported! Failed to import! Successfully exported! Failed to export! - Password is empty! Refresh Get cookies Desktop Mode @@ -162,21 +145,8 @@ Open profile View story View profile picture - You - Shared a link - Shared a media - Shared a timed message - Replied to a story - Reacted on a story - Mentioned in a story Unsupported message type - Open link - Copy text - Download attachment - Like message - Unlike message Unsend message - View author profile View on GIPHY %s shared a post by @%s %s shared an image @@ -212,7 +182,6 @@ Message... Press and hold to record audio Updating... - Great success! Leave chat Leave this chat? Kick @@ -223,18 +192,14 @@ Download directly Downloads posts directly to the phone! Fetching post(s) - Please grant permissions and try downloading again! - Download started Download completed Downloading post… Downloading media Downloading profile picture - File downloaded in Downloads folder! Unknown error occurred!!! Error creating folder! Error downloading file You can only download 100 posts at a time. Don\'t be too greedy! - Copy username Copy comment View comment likers Reply to comment @@ -308,7 +273,6 @@ Audit, star, report bugs, contribute, and have fun (again)! Send feedback by email Third-Party Attributions - The following third-party open-source libraries are used: Reminder Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws. White diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bc60b662..f1dd058f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -16,14 +16,10 @@ Anuluj Nie Potwierdź - W górę - Nie pokazuj ponownie - Bieżący katalog Ulubione Odkrywaj Komentarze Aktywność - Wyróżnione: %s Sprawdź aktualizacje przy starcie Pobierz posty do folderów o nazwie użytkownika Oznacz relacje jako widoczne po wyświetleniu @@ -42,8 +38,6 @@ Motyw Dotyczy tylko zalogowanych użytkowników: Dotyczy tylko anonimowych użytkowników: - Użyj Instadp dla zdjęć profilowych o wysokiej rozdzielczości - Importuj/Eksportuj Język %s\npost @@ -98,11 +92,8 @@ To konto jest prywatne Nie będziesz mieć dostępu do postów po anulowaniu obserwowania! Jesteś pewny? Możesz zalogować się za pomocą \"Więcej\" - > \"Konto\" w prawym dolnym rogu lub możesz zobaczyć konta publiczne bez logowania! - Możesz przesunąć w lewo/w prawo, aby przeglądać lub wyszukać coś poniżej! To konto nie zawiera postów Nie ma więcej postów! - Aktualna wersja: v%s - czytaj więcej… Zaloguj Wyloguj Przeglądaj Instagram anonimowo @@ -141,21 +132,13 @@ Obserwowane Obserwujący Mapa - Eksportuj - Importuj - Eksportuj logowania Konta Ustawienia Ulubione - Importuj ustawienia - Importuj dane logowania - Importuj konta - Importuj ulubione Zaimportowano pomyślnie! Importowanie nie powiodło się! Wyeksportowano pomyślnie! Eksportowanie nie powiodło się! - Nie podano hasła! Odśwież Pobierz ciasteczka Tryb PC @@ -170,21 +153,8 @@ Otwórz profil Zobacz relację Wyświetl zdjęcie profilowe - Ty - Udostępnij link - Udostępniono media - Udostępniono wiadomość czasową - Odpowiedziano na relację - Zareagowano na relację - Wspomniano w relacji Nieobsługiwany typ wiadomości - Otwórz link - Kopiuj tekst - Pobierz załącznik - Polub wiadomość - Cofnij polubienie wiadomości Cofnij wysłanie wiadomości - Wyświetl profil autora View on GIPHY %s udostępnił post @%s %s udostępnił obraz @@ -220,7 +190,6 @@ Wiadomość... Naciśnij i przytrzymaj, aby nagrać dźwięk Aktualizowanie... - Sukces! Opuść czat Opuścić ten czat? Wyrzuć @@ -231,18 +200,14 @@ Pobierz bezpośrednio Pobiera posty bezpośrednio na telefon! Pobieranie post(ów) - Przyznaj uprawnienia i spróbuj pobrać ponownie! - Rozpoczęto pobieranie Pobieranie zakończone Pobieranie wpisu… Pobieranie multimediów Pobieranie zdjęcia profilowego - Plik został pobrany! Wystąpił nieznany błąd!!! Błąd podczas tworzenia folderu! Błąd podczas pobierania pliku Możesz pobrać tylko 100 postów jednocześnie. Nie bądź zbyt chciwy! - Skopiuj nazwę użytkownika Skopiuj komentarz Wyświetl polubienia komentarzy Odpowiedz na komentarz @@ -316,7 +281,6 @@ Audytuj, oznaczaj gwiazdkami, zgłaszaj błędy, współtwórz i baw się (ponownie)! Wyślij opinię za pomocą e-mail Atrybuty zewnętrzne - Używane są następujące biblioteki open source: Przypomnienie Korzystaj z tej aplikacji odpowiedzialnie. Pobrane obrazy powinny być używane tylko do celów dozwolonych przez obowiązujące przepisy. Biały diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 1cb29b3c..1f819c27 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -16,14 +16,10 @@ Cancelar Não Confirmar - Subir - Não Mostrar de Novo - Pasta atual Favoritos Descobrir Comentários Atividade - Destaque: %s Verificar se há atualizações ao iniciar Baixar publicações para pastas com o nome de usuário Marcar stories como vistos após a visualização @@ -42,8 +38,6 @@ Tema Afeta apenas usuários logados: Afeta apenas usuários anônimos: - Usar Instadp para fotos de perfil de alta definição - Importar/Exportar Idioma %s\nPublicação @@ -90,11 +84,8 @@ Esta conta é privada Você não será capaz de acessar as publicações após deixar de seguir! Tem certeza? Você pode fazer login em Mais -> Conta no canto inferior direito ou você pode ver as contas públicas sem fazer login! - Você pode deslizar para a esquerda/direita para explorar/feed ou buscar algo abaixo! Esta conta não tem publicações Não há publicações! - Versão atual: v%s - ler mais… Logar Deslogar Explorar o Instagram anonimamente @@ -133,21 +124,13 @@ Seguindo Seguidor Mapa - Exportar - Importar - Exportar logins Contas Configurações Favoritos - Importar configurações - Importar logins - Importar contas - Importar favoritos Importado com sucesso! Falha ao importar! Exportado com sucesso! Falha ao exportar! - Senha em branco! Atualizar Obter cookies Modo Desktop @@ -162,21 +145,8 @@ Abrir perfil Ver story Ver foto de perfil - Você - Compartilhou um link - Compartilhou uma mídia - Compartilhou uma mensagem cronometrada - Respondeu um story - Reagiu a um story - Mencionado em um story Tipo de mensagem não suportado - Abrir link - Copiar texto - Baixar anexo - Curtir mensagem - Descurtir mensagem Cancelar envio - Ver perfil do autor Ver no GIPHY %s compartilhou uma publicação de @%s %s compartilhou uma imagem @@ -212,7 +182,6 @@ Mensagem... Aperte e segure para gravar um áudio Atualizando... - Grande sucesso! Sair da conversa Sair deste chat? Expulsar @@ -223,18 +192,14 @@ Baixar diretamente Baixar as publicações diretamente no telefone! Buscando publicação(ões) - Por favor, conceda as permissões e tente baixar novamente! - Download iniciado Download concluído Baixando publicação… Baixando mídia Baixando foto do perfil - Arquivo baixado na pasta Downloads! Ocorreu um erro desconhecido!!! Erro ao criar pasta! Erro ao baixar arquivo Você só pode baixar 100 publicações por vez. Não seja tão ganancioso! - Copiar nome de usuário Copiar comentário Ver quem curtiu o comentário Responder comentário @@ -308,7 +273,6 @@ Verifique, favorite, reporte bugs, contribua e divirta-se (de novo)! Enviar feedback por email Atribuições de terceiros - São usadas as seguintes bibliotecas de código aberto de terceiros: Lembrete Por favor, use este aplicativo de forma responsável. As imagens baixadas só devem ser usadas para fins permitidos pelas leis aplicáveis. Branco diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ab9d6843..90a02afa 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -16,14 +16,10 @@ Отмена Нет Подтвердить - Вверх - Не показывать снова - Текущий каталог Избранное Подборка Комментарии Активность - События: %s Проверять наличие обновлений при запуске Скачать публикации в папки с именем пользователя Отметить истории как увиденные после просмотра @@ -42,8 +38,6 @@ Тема Затрагивает только авторизованных пользователей: Затрагивает только анонимных пользователей: - Использовать Instadp для фотографий профиля с высокой четкостью - Импорт/Экспорт Язык %s\nПубликация @@ -98,11 +92,8 @@ Это частная учётная запись Вы не сможете получить доступ к публикациям после отписки! Вы уверены? Вы можете войти через Ещё -> Учётная запись в правом нижнем углу или можете просматривать публичные учётные записи без авторизации! - Вы можете провести пальцем влево/вправо для навигации/ленты новостей, или поиска чего-нибудь ниже! У этой учётной записи нет публикаций Нет таких публикаций! - Текущая версия: v%s - подробнее… Вход Выход Просмотр Instagram анонимно @@ -141,21 +132,13 @@ Последователи Подписчик Карта - Экспорт - Импорт - Экспорт авторизаций Учётные записи Настройки Избранное - Импорт настроек - Импорт авторизаций - Импорт учётных записей - Импорт избранного Успешно импортировано! Не удалось импортировать! Успешно экспортировано! Не удалось экспортировать! - Пароль пустой! Обновить Получить файлы cookie Режим настольного ПК @@ -170,21 +153,8 @@ Открыть профиль Просмотр истории Просмотр изображения профиля - Вы - Поделился(-лась) ссылкой - Поделился медиафайлом - Поделился временным сообщением - Ответил на историю - Отреагировал на историю - Упомянут в истории Неподдерживаемый тип сообщения - Открыть ссылку - Копировать текст - Скачать вложение - Полюбить сообщение - Перестать любить сообщение Отменить отправку сообщения - Просмотреть профиль автора Посмотреть на GIPHY %s поделился(-лась) постом @%s %s поделился(-лась) изображением @@ -220,7 +190,6 @@ Сообщение... Нажмите и удерживайте, чтобы записать звук Обновление... - Отлично! Покинуть чат Покинуть эту беседу? Выгнать @@ -231,18 +200,14 @@ Скачать напрямую Скачивает публикации прямо на телефон! Получение публикации(ий) - Пожалуйста, предоставьте разрешения и попробуйте скачать ещё раз! - Загрузка началась Скачивание завершено Скачивание публикации… Загрузка медиафайлов Загрузка изображения профиля - Файл скачан в папку загрузок! Произошла неизвестная ошибка!!! Ошибка при создании папки! Ошибка при скачивании файла Вы можете скачать только 100 сообщений за раз. Не будьте слишком жадным! - Копировать имя пользователя Копировать комментарий Просмотр симпатий комментария Ответить на комментарий @@ -316,7 +281,6 @@ Проводите ревизию, сохранения, сообщайте от ошибках, вносите свой вклад и веселитесь (снова)! Отправить отзыв по электронной почте Атрибуты сторонних производителей - Используются следующие сторонние библиотеки с открытым исходным кодом: Напоминание Пожалуйста, используйте это приложение ответственно. Скачанные изображения должны использоваться только в тех целях, которые разрешены действующим законодательством. Белая diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 0ade2ccd..eab6b11a 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -16,14 +16,10 @@ Zrušiť Nie Potvrdiť - Hore - Nabudúce nezobrazovať - Aktuálny adresár Obľúbené Prezerať Komentáre Aktivita - Najlepšia: %s Kontrolovať aktualizácie pri štarte Ukľadať do priečinkov podľa mena Označiť príbehy po videní ako videné @@ -42,8 +38,6 @@ Téma Platí iba pre prihlásených užívateľov: Platí iba pre neprihlásených užívateľov: - Použiť Instadp na profilové fotografie vo vysokom rozlíšení - Import/Export Jazyk %s\nPríspevok @@ -98,11 +92,8 @@ Tento účet je súkromný Nebudeš môcť pristúpiť k príspevkom po zrušení sledovania. Si si istý? Môžete sa prihlásiť pomocou Viac -> Účet na dolnom pravom rohu alebo pokračovať v sledovaní verejných profilov bez prihlásenia! - Na prehliadanie príspevkov môžeš potiahnuť do strán alebo môžeš vyhľadať niečo nižšie! Tento účet nemá žiadne príspevky Žiadne príspevky! - Aktuálna verzia: v%s - čítať viac… Prihlásiť sa Odhlásiť sa Prehliadať Instagram anonymne @@ -141,21 +132,13 @@ Sledované Sledovateľ Mapa - Exportovať - Importovať - Exportovať prihlásenia Účty Nastavenia Obľúbené - Importovať nastavenia - Importovať prihlásenia - Importovať účty - Importovať obľúbené Úspešne importované! Import zlyhal! Úspešne exportované! Export zlyhal! - Heslo je prázdne! Obnoviť Získať cookies Režim desktop @@ -170,21 +153,8 @@ Otvoriť profil Zobraziť príbeh Zobraziť profilovú fotografiu - Vy - Zdieľal/a odkaz - Zdieľal/a médiá - Zdieľal/a časovanú správu - Odpovedal/a na príbeh - Reagoval/a na príbeh - Spomenutý v príbehu Unsupported message type - Otvoriť odkaz - Kopírovať text - Stiahnuť prílohu - Označiť správu \"páči sa mi\" - Zručiť označenie \"Páči sa mi\" Zrušiť odoslanie správy - Zobraziť profil autora View on GIPHY %s shared a post by @%s %s shared an image @@ -220,7 +190,6 @@ Message... Press and hold to record audio Updating... - Veľký úspech! Opustiť chat Opustiť tento chat? Vykopnúť @@ -231,18 +200,14 @@ Stiahnuť priamo Stiahnuť príspevky priamo do telefónu! Získavam príspevky - Prosím udeľte oprávnenia a skúste stiahnuť znova! - Sťahovanie začalo Sťahovanie bolo dokončené Sťahujem príspevok… Sťahujem médiá Sťahujem profilovú fotku - Súbor stiahnutý do priečinka \"Downloads\"! Vyskytla sa neznáma chyba Chyba pri vytváraní priečinka! Chyba pri sťahovaní súboru Môžeš stiahnuť len 100 príspevkov v jeden čas. Nebuď chamtivý/á! - Kopírovať používateľské meno Kopírovať komentár Ľudia čo označili \"páči sa mi\" Odpovedať na komentár @@ -316,7 +281,6 @@ Pomôž, nahlasuj chyby a zabav sa (znova)! Odoslať spätnú väzbu na email Zdroje tretích strán - Nasledovné knižnice tretích strán sú použité: Pripomienka Prosím používajte aplikáciu zodpovedne. Sťahované obrázky môžu byť použité len v prípadoch v ktorých to dovoľuje zákon. Biela diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f2ae1769..62a8d873 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -16,14 +16,10 @@ İptal Hayır Onayla - Yukarı - Bir Daha Gösterme - Geçerli dizin Favoriler Keşfet Yorumlar Hareketler - Öne çıkarılanlar: %s Güncellemeleri başlangıçta kontrol et İndirmeleri kullanıcı adından oluşan bir alt klasörün içine yap Hikayeleri gördükten sonra görüldü olarak işaretle @@ -42,8 +38,6 @@ Tema Sadece giriş yapılmış hesapları etkiler: Sadece anonim hesapları etkiler: - Yüksek kalite profil fotoğrafları için Instadp kullan - İçe Aktar/Dışa Aktar Dil %s\nGönderi @@ -90,11 +84,8 @@ Bu Hesap Gizlidir Takipten çıkarsan gönderilere erişemeyeceksin! Emin misin? Hesabınıza giriş yapmak için sağ alttan Daha Fazla -> Hesap yolunu takip edebilir ya da giriş yapmadan herkese açık profilleri dolaşabilirsin! - Keşfet ve ana sayfa arasında geçiş yapmak için sola/sağa kaydırabilirsin, ya da aşağıdan bir şey aratabilirsin! Bu Hesabın Gönderisi Yok Öyle Bir Gönderi Yok! - Kullanılan Sürüm: v%s - daha fazlası… Giriş Yap Çıkış Yap Instagram\'ı anonim olarak dolaş @@ -133,21 +124,13 @@ Takip Edilen Takipçi Harita - Dışa aktar - İçe aktar - Hesapları Dışa Aktar Hesaplar Ayarlar Favoriler - Ayarları içeri aktar - Hesapları İçe Aktar - Hesapları içeri aktar - Favorileri içeri aktar Başarıyla içeri aktarıldı! İçe aktarılamadı! Başarıyla dışa aktarıldı! Dışa aktarılamadı! - Şifre boş! Yenile Çerezleri al Masaüstü Modu @@ -162,21 +145,8 @@ Profili aç Hikayeyi gör Profil fotoğrafını gör - Sen - Bir bağlantı paylaştı - Bir medya paylaştı - Zamanlanmış mesaj paylaştı - Bir hikayeye cevap verdi - Bir hikayeye ifade bıraktı - Bir hikayede bahsetti Desteklenmeyen mesaj tipi - Bağlantıyı aç - Metni kopyala - Eki indir - Mesajı beğen - Mesaj beğenini geri al Gönderilen mesajı geri al - Yazarın profilini göster GIPHY\'de görüntüle %s, @%s tarafından bir gönderi paylaştı %s bir resim paylaştı @@ -212,7 +182,6 @@ Mesaj... Ses kaydetmek için dokun ve basılı tut Güncelleniyor... - Büyük başarı! Sohbetten ayrıl Bu sohbetten ayrıl? Dışarıya At @@ -223,18 +192,14 @@ Direkt indir Gönderileri direkt telefona indir! Gönderi(ler) getiriliyor - Lütfen gerekli izinleri verin ve indirmeyi tekrar deneyin! - İndirme başlatıldı İndirme tamamlandı Gönderi indiriliyor… Medya indiriliyor Profil fotoğrafı indiriliyor - Dosya İndirilenler klasörüye kaydedildi! Bilinmeyen bir hata oluştu!!! Klasör oluşturma hatası! Dosya indirme hatası Tek seferde en fazla 100 gönderi indirebilirsin, açgözlü olma! - Kullanıcı adını kopyala Yorumu kopyala Yorumu beğenenleri gör Yoruma cevap ver @@ -308,7 +273,6 @@ Denetle, yıldızla, hataları bildir, katkıda bulun ve keyfini çıkart (tekrar)! Eposta yoluyla geribildirim gönder Üçüncü-Parti Atıfları - Aşağıdaki üçüncü-parti açık-kaynak kütüphaneler kullanılıyor: Hatırlatıcı Lütfen bu uygulamayı bilinçli bir şekilde kullan. İndirilen gönderiler, kanunlar çerçevesinde kullanılmalıdır. Beyaz diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index b5e8adb1..fcea4f24 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -16,14 +16,10 @@ Huỷ Không Xác nhận - Lên - Không hiện lại - Thư mục hiện tại Yêu thích Khám phá Bình luận Hoạt động - Highlight: %s Kiểm tra cập nhật khi khởi động Tải bài viết xuống theo thư mục tên người dùng trong Downloads Đánh dấu story là đã xem sau khi xem @@ -42,8 +38,6 @@ Giao diện Chỉ ảnh hưởng người dùng đã đăng nhập: Chỉ ảnh hưởng người dùng ẩn danh: - Dùng Instadp cho những ảnh đại diện có độ phân giải cao - Nhập/Xuất Ngôn ngữ %s\nBài đăng @@ -86,11 +80,8 @@ Tài khoản này là riêng tư Bạn sẽ không thể truy cập vào bài đăng sau khi bỏ theo dõi? Bạn chắc chứ? Bạn có thể đăng nhập bằng Thêm -> Tài khoản ở góc phải dưới hoặc bạn có thể xem tài khoản công khai mà không cần đăng nhập! - Bạn có thể vuốt qua trái/phải để xem khám phá/trang tin, hoặc tìm kiếm gì đó ở bên dưới! Tài khoản này không có bài viết nào Không có bài đăng đó! - Phiên bản hiện tại: v%s - đọc thêm… Đăng nhập Đăng xuất Lướt Instagram ẩn danh @@ -129,21 +120,13 @@ Following Follower Bản đồ - Xuất - Nhập - Xuất đăng nhập Tài khoản Cài đặt Yêu thích - Nhập cài đặt - Nhập đăng nhập - Nhập tài khoản - Nhập danh sách Yêu thích Đã nhập thành công! Nhập dữ liệu thất bại! Đã xuất thành công! Xuất dữ liệu thất bại! - Bạn chưa điền mật khẩu! Làm mới Lấy cookies Chế độ máy tính @@ -158,21 +141,8 @@ Mở hồ sơ View story Xem Ảnh Đại Diện - Bạn - Đã chia sẻ liên kết - Đã chia sẻ phương tiện - Đã chia sẻ một tin nhắn hẹn giờ - Đã trả lời một story - Đã react một story - Đã được nhắn đến trong story Unsupported message type - Mở liên kết - Sao chép văn bản - Tải về Tệp tin Đính kèm - Thích tin nhắn - Bỏ thích tin nhắn Gỡ tin nhắn - Xem hồ sơ tác giả View on GIPHY %s shared a post by @%s %s shared an image @@ -208,7 +178,6 @@ Message... Press and hold to record audio Updating... - Thành công! Leave chat Rời khỏi nhóm này? Đá @@ -219,18 +188,14 @@ Tải xuống trực tiếp Tải bài viết xuống trực tiếp về điện thoại! Đang nạp bài viết - Xin hãy chấp nhận quyền và thử tải lại! - Đã bắt đầu tải xuống Tải xuống hoàn tất Đang tải xuống bài viết… Đang tải xuống phương tiện Đang tải xuống ảnh đại diện - Tệp đã được tải xuống trong thư mục Downloads! Đã xảy ra lỗi không xác định!!! Lỗi khi tạo thư mục! Lỗi khi tải xuống tệp Bạn chỉ có thể tải xuống 100 bài cùng một lúc. Đừng tham lam quá! - Sao chép tên người dùng Sao chép bình luận View comment likers Trả lời bình luận @@ -304,7 +269,6 @@ Kiểm tra, sao, báo cáo lỗi, đóng góp, và cùng chung vui (một lần nữa)! Gửi phản hồi bằng email Phân bổ của bên thứ ba - Những thư viện bên thứ ba sau đã được sử dụng: Nhắc nhở Xin hãy dùng ứng dụng này một cách có trách nhiệm. Tải xuống hình ảnh chỉ nên được dùng cho mục đích được chấp thuận bởi luật pháp. Trắng diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e093f3dc..8b78ce74 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -16,14 +16,10 @@ 取消 确定 - 往上 - 不再显示 - 当前目录 最爱 发现 留言 动态 - 精彩:%s 启动时检查更新 下载帖子到用户名文件夹 查看快拍后将其标记为已读 @@ -42,8 +38,6 @@ 主题 仅影响登录用户: 仅影响匿名用户: - 使用 Instadp 获取高清头像 - 导入/导出 语言 %s\n帖子 @@ -86,11 +80,8 @@ 私密账户 取消关注后,您将无法访问帖子!您确定吗? 你可以通过右下角的 更多-> 账户 来登录,或者您无须登录即可查看公开账户! - 您可以向左/向右滑动查看探索/订阅,或在下方进行搜索! 暂未发帖 无此类帖! - 目前版本: v%s - 阅读更多… 登录 退出 隐身浏览Instagram @@ -129,21 +120,13 @@ 已关注 粉丝 地图 - 导出 - 导入 - 导出登录 帐户 设置 收藏 - 导入设置 - 导入登录 - 导入账户 - 导入收藏 成功导入! 导入失败! 成功导出! 导出失败! - 密码为空! 刷新 获取 cookies 桌面版 @@ -158,21 +141,8 @@ 打开主页 查看快拍 查看头像 - - 分享了 - 分享了媒体 - 分享了定时消息 - 回复了快拍 - 对快拍留下了心情 - 在快拍中提到了某人 不支持此类消息 - 打开链接 - 复制文本 - 下载附件 - 点赞消息 - 取消点赞 撤回消息 - 查看作者资料 在 GIPHY 上查看 %s 分享了 @%s 的帖子 %s 分享了一张图片 @@ -208,7 +178,6 @@ 撰写消息... 长按即可录制语音消息 刷新中... - 非常成功! 离开聊天 离开此聊天吗? 移除成员 @@ -219,18 +188,14 @@ 直接下载 直接下载至手机! 读取帖子 - 请给予权限再尝试下载! - 下载开始 下载完成 帖子下载中… 媒体下载中 大头贴下载中 - 帖子以下载至下载文件夹! 出现不详错误!!! 创建文件夹时出错! 下载文件时出错 您一次只能下载100个帖子。切勿贪得无厌! - 复制用户名 复制评论 查看评论赞 回复评论 @@ -304,7 +269,6 @@ 围观、加星、报错、贡献,(再次)祝愉快! 通过电子邮件发送反馈 第三方库 - 本应用使用了以下第三方开源库: 提醒 请合理利用此工具,并请合法使用下载内容。 白色 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index dfc8fa4a..2070321a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -16,14 +16,10 @@ 取消 確認 - 往上 - 不要再顯示 - 當前目錄 收藏 探索 評論 動態 - 標記: %s 啟動時檢查更新 將貼文下載到用戶名資料夾 檢視完限時動態後標記為已讀 @@ -42,8 +38,6 @@ 主題 僅影響已登入用戶: 僅影響匿名用戶: - 透過 Instadp 檢視高清大頭貼照 - 匯入/匯出 語言 %s\n貼文 @@ -86,11 +80,8 @@ 此帳戶為私人帳戶 取消關注後,您將無法閱讀人家的貼文!你確定嗎? 您可以透過右下角的 「更多」 -> 「新增帳號」 來登入您的帳號,或者以匿名的身分查看公共帳戶! - 您可以向左/向右滑動以瀏覽/動態,或透過下面搜尋! 此帳戶尚未張貼任何文章 找不到此貼文! - 目前版本:v%s - 更多… 登入 登出 匿名瀏覽 Instagram @@ -129,21 +120,13 @@ 追蹤中 追蹤者 地圖 - 匯出 - 匯入 - 匯出登入資訊 帳號 設定 收藏 - 匯入設定 - 匯入登入資訊 - 匯入帳戶 - 匯入收藏 已成功匯入! 匯入失敗! 已成功匯出! 匯出失敗! - 密碼為空! 重新整理 取得 Cookies 桌面模式 @@ -158,21 +141,8 @@ 開啟個人檔案 查看限時動態 查看大頭貼照 - - 分享了一個鏈接 - 分享了一份媒體 - 分享了一份定時留言 - 已回覆你的限時動態 - 對你的限時動態傳達了心情 - 在限時動態中提及你 Unsupported message type - 開啟連結 - 複製文字 - 下載附件 - 對此訊息說讚 - 收回訊息的讚 收回訊息 - 檢視作者個人檔案 View on GIPHY %s shared a post by @%s %s shared an image @@ -208,7 +178,6 @@ Message... Press and hold to record audio Updating... - 大功告成! Leave chat 離開此聊天室? 踢除 @@ -219,18 +188,14 @@ 直接下載 將貼文直接下載到手機中! 獲取文章中 - 請授予權限,然後試著重新下載! - 已開始下載 下載完成 下載貼文中… 下載媒體中 下載個人圖片中 - 檔案已下載到下載資料夾中! 發生未知錯誤! 建立資料夾時出錯! 下載檔案時出錯 您一次只能下載100個文章。不要太貪心! - 接受請求 複製評論 View comment likers 回覆評論 @@ -304,7 +269,6 @@ 審核、Star、回報錯誤、做出貢獻並從中再次享受樂趣! 透過電子郵件發送意見 第三方程式庫 - 我們使用了下列第三方開放原始碼程式庫: 提醒 請勿濫用此應用程式。下載的圖片只能用於法律允許的目的。 白色 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8296c069..cdc20d30 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,15 +19,12 @@ Cancel No Confirm - Up - Don\'t Show Again - Current directory Favorites Discover Comments Activity - Highlight: %s Check for updates at startup + Block screenshots & app preview Download posts to username folders Mark stories as seen after viewing Story author will know you viewed it @@ -45,8 +42,6 @@ Theme Only affects logged-in users: Only affects anonymous users: - Use Instadp for high definition profile pictures - Import/Export Language %s\nPost @@ -93,11 +88,8 @@ This Account is Private You won\'t be able to access posts after unfollowing! Are you sure? You can log in via More -> Account on the bottom-right corner or you can view public accounts without login! - You can swipe left/right for explore/feed, or search something below! This Account has No Posts No Such Posts! - Current version: v%s - read more… Login Logout Browse Instagram anonymously @@ -136,21 +128,13 @@ Following Follower Map - Export - Import - Export Logins Accounts Settings Favorites - Import settings - Import Logins - Import accounts - Import favorites Successfully imported! Failed to import! Successfully exported! Failed to export! - Password is empty! Refresh Get cookies Desktop Mode @@ -165,21 +149,8 @@ Open profile View story View profile picture - You - Shared a link - Shared a media - Shared a timed message - Replied to a story - Reacted on a story - Mentioned in a story Unsupported message type - Open link - Copy text - Download attachment - Like message - Unlike message Unsend message - View author profile View on GIPHY %s shared a post by @%s %s shared an image @@ -215,7 +186,6 @@ Message... Press and hold to record audio Updating... - Great success! Leave chat Leave this chat? Kick @@ -226,18 +196,14 @@ Download directly Downloads posts directly to the phone! Fetching post(s) - Please grant permissions and try downloading again! - Download started Download completed Downloading post… Downloading media Downloading profile picture - File downloaded in Downloads folder! Unknown error occurred!!! Error creating folder! Error downloading file You can only download 100 posts at a time. Don\'t be too greedy! - Copy username Copy comment View comment likers Reply to comment @@ -314,7 +280,6 @@ Send feedback by email barinsta@austinhuang.me Third-Party Attributions - The following third-party open-source libraries are used: Reminder Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws. White