mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Introduce RssFeedViewModel
Furnishing the RssFeed function as a single activity with fragments for Manage and Import.
This commit is contained in:
@@ -322,25 +322,6 @@
|
|||||||
android:value="org.briarproject.briar.android.blog.BlogActivity" />
|
android:value="org.briarproject.briar.android.blog.BlogActivity" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name="org.briarproject.briar.android.blog.RssFeedImportActivity"
|
|
||||||
android:label="@string/blogs_rss_feeds_import"
|
|
||||||
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity"
|
|
||||||
android:windowSoftInputMode="adjustResize|stateAlwaysVisible">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
|
||||||
android:value="org.briarproject.briar.android.navdrawer.NavDrawerActivity" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name="org.briarproject.briar.android.blog.RssFeedManageActivity"
|
|
||||||
android:label="@string/blogs_rss_feeds_manage"
|
|
||||||
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
|
||||||
android:value="org.briarproject.briar.android.navdrawer.NavDrawerActivity" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity"
|
android:name="org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity"
|
||||||
android:label="@string/add_contact_title"
|
android:label="@string/add_contact_title"
|
||||||
@@ -447,6 +428,15 @@
|
|||||||
android:theme="@style/BriarTheme"
|
android:theme="@style/BriarTheme"
|
||||||
android:windowSoftInputMode="adjustResize|stateHidden" />
|
android:windowSoftInputMode="adjustResize|stateHidden" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name="org.briarproject.briar.android.blog.RssFeedActivity"
|
||||||
|
android:label="@string/blogs_rss_feeds"
|
||||||
|
android:parentActivityName="org.briarproject.briar.android.navdrawer.NavDrawerActivity">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
android:value="org.briarproject.briar.android.navdrawer.NavDrawerActivity" />
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".android.contact.add.remote.PendingContactListActivity"
|
android:name=".android.contact.add.remote.PendingContactListActivity"
|
||||||
android:label="@string/pending_contact_requests"
|
android:label="@string/pending_contact_requests"
|
||||||
|
|||||||
@@ -13,8 +13,11 @@ import org.briarproject.briar.android.blog.BlogPostFragment;
|
|||||||
import org.briarproject.briar.android.blog.FeedFragment;
|
import org.briarproject.briar.android.blog.FeedFragment;
|
||||||
import org.briarproject.briar.android.blog.ReblogActivity;
|
import org.briarproject.briar.android.blog.ReblogActivity;
|
||||||
import org.briarproject.briar.android.blog.ReblogFragment;
|
import org.briarproject.briar.android.blog.ReblogFragment;
|
||||||
import org.briarproject.briar.android.blog.RssFeedImportActivity;
|
import org.briarproject.briar.android.blog.RssFeedActivity;
|
||||||
import org.briarproject.briar.android.blog.RssFeedManageActivity;
|
import org.briarproject.briar.android.blog.RssFeedDeleteFeedDialogFragment;
|
||||||
|
import org.briarproject.briar.android.blog.RssFeedImportFailedDialogFragment;
|
||||||
|
import org.briarproject.briar.android.blog.RssFeedImportFragment;
|
||||||
|
import org.briarproject.briar.android.blog.RssFeedManageFragment;
|
||||||
import org.briarproject.briar.android.blog.WriteBlogPostActivity;
|
import org.briarproject.briar.android.blog.WriteBlogPostActivity;
|
||||||
import org.briarproject.briar.android.contact.ContactListFragment;
|
import org.briarproject.briar.android.contact.ContactListFragment;
|
||||||
import org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity;
|
import org.briarproject.briar.android.contact.add.nearby.AddNearbyContactActivity;
|
||||||
@@ -161,9 +164,7 @@ public interface ActivityComponent {
|
|||||||
|
|
||||||
void inject(IntroductionActivity activity);
|
void inject(IntroductionActivity activity);
|
||||||
|
|
||||||
void inject(RssFeedImportActivity activity);
|
void inject(RssFeedActivity activity);
|
||||||
|
|
||||||
void inject(RssFeedManageActivity activity);
|
|
||||||
|
|
||||||
void inject(StartupFailureActivity activity);
|
void inject(StartupFailureActivity activity);
|
||||||
|
|
||||||
@@ -233,4 +234,12 @@ public interface ActivityComponent {
|
|||||||
|
|
||||||
void inject(
|
void inject(
|
||||||
BluetoothConnecterDialogFragment bluetoothConnecterDialogFragment);
|
BluetoothConnecterDialogFragment bluetoothConnecterDialogFragment);
|
||||||
|
|
||||||
|
void inject(RssFeedImportFragment fragment);
|
||||||
|
|
||||||
|
void inject(RssFeedManageFragment fragment);
|
||||||
|
|
||||||
|
void inject(RssFeedImportFailedDialogFragment fragment);
|
||||||
|
|
||||||
|
void inject(RssFeedDeleteFeedDialogFragment fragment);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,8 @@ public interface BlogModule {
|
|||||||
@ViewModelKey(BlogViewModel.class)
|
@ViewModelKey(BlogViewModel.class)
|
||||||
ViewModel bindBlogViewModel(BlogViewModel blogViewModel);
|
ViewModel bindBlogViewModel(BlogViewModel blogViewModel);
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@ViewModelKey(RssFeedViewModel.class)
|
||||||
|
ViewModel bindRssFeedViewModel(RssFeedViewModel rssFeedViewModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,15 +131,8 @@ public class FeedFragment extends BaseFragment
|
|||||||
i.putExtra(GROUP_ID, personalBlog.getId().getBytes());
|
i.putExtra(GROUP_ID, personalBlog.getId().getBytes());
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_rss_feeds_import) {
|
} else if (itemId == R.id.action_rss_feeds) {
|
||||||
Intent i = new Intent(getActivity(), RssFeedImportActivity.class);
|
Intent i = new Intent(getActivity(), RssFeedActivity.class);
|
||||||
startActivity(i);
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_rss_feeds_manage) {
|
|
||||||
Blog personalBlog = viewModel.getPersonalBlog().getValue();
|
|
||||||
if (personalBlog == null) return false;
|
|
||||||
Intent i = new Intent(getActivity(), RssFeedManageActivity.class);
|
|
||||||
i.putExtra(GROUP_ID, personalBlog.getId().getBytes());
|
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
|
import org.briarproject.briar.android.activity.BriarActivity;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.EXISTS;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.FAILED;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.IMPORTED;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class RssFeedActivity extends BriarActivity
|
||||||
|
implements BaseFragmentListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
private RssFeedViewModel viewModel;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectActivity(ActivityComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
|
||||||
|
viewModel = new ViewModelProvider(this, viewModelFactory)
|
||||||
|
.get(RssFeedViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
setContentView(R.layout.activity_fragment_container);
|
||||||
|
|
||||||
|
if (savedInstanceState == null) {
|
||||||
|
showInitialFragment(RssFeedManageFragment.newInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel.getImportResult().observeEvent(this, this::onImportResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onImportResult(RssFeedViewModel.ImportResult result) {
|
||||||
|
if (result == IMPORTED) {
|
||||||
|
FragmentManager fm = getSupportFragmentManager();
|
||||||
|
if (fm.findFragmentByTag(RssFeedImportFragment.TAG) != null) {
|
||||||
|
onBackPressed();
|
||||||
|
}
|
||||||
|
} else if (result == FAILED) {
|
||||||
|
RssFeedImportFailedDialogFragment dialog =
|
||||||
|
RssFeedImportFailedDialogFragment.newInstance();
|
||||||
|
dialog.show(getSupportFragmentManager(),
|
||||||
|
RssFeedImportFailedDialogFragment.TAG);
|
||||||
|
} else if (result == EXISTS) {
|
||||||
|
Toast.makeText(this, R.string.blogs_rss_feeds_import_exists,
|
||||||
|
Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,91 +7,54 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.util.BriarAdapter;
|
|
||||||
import org.briarproject.briar.android.util.UiUtils;
|
|
||||||
import org.briarproject.briar.api.feed.Feed;
|
import org.briarproject.briar.api.feed.Feed;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.DiffUtil;
|
||||||
|
import androidx.recyclerview.widget.ListAdapter;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import static android.view.View.GONE;
|
import static android.view.View.GONE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
|
import static org.briarproject.briar.android.util.UiUtils.formatDate;
|
||||||
|
|
||||||
class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
|
@NotNullByDefault
|
||||||
|
class RssFeedAdapter extends ListAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
|
||||||
|
|
||||||
private final RssFeedListener listener;
|
private final RssFeedListener listener;
|
||||||
|
|
||||||
RssFeedAdapter(Context ctx, RssFeedListener listener) {
|
RssFeedAdapter(RssFeedListener listener) {
|
||||||
super(ctx, Feed.class);
|
super(new DiffUtil.ItemCallback<Feed>() {
|
||||||
|
@Override
|
||||||
|
public boolean areItemsTheSame(Feed a, Feed b) {
|
||||||
|
return a.getUrl().equals(b.getUrl()) &&
|
||||||
|
a.getBlogId().equals(b.getBlogId()) &&
|
||||||
|
a.getAdded() == b.getAdded();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean areContentsTheSame(Feed a, Feed b) {
|
||||||
|
return a.getUpdated() == b.getUpdated();
|
||||||
|
}
|
||||||
|
});
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
View v = LayoutInflater.from(ctx).inflate(
|
View v = LayoutInflater.from(parent.getContext()).inflate(
|
||||||
R.layout.list_item_rss_feed, parent, false);
|
R.layout.list_item_rss_feed, parent, false);
|
||||||
return new FeedViewHolder(v);
|
return new FeedViewHolder(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(FeedViewHolder ui, int position) {
|
public void onBindViewHolder(FeedViewHolder ui, int position) {
|
||||||
Feed item = getItemAt(position);
|
ui.bindItem(getItem(position));
|
||||||
if (item == null) return;
|
|
||||||
|
|
||||||
// Feed Title
|
|
||||||
ui.title.setText(item.getTitle());
|
|
||||||
|
|
||||||
// Delete Button
|
|
||||||
ui.delete.setOnClickListener(v -> listener.onDeleteClick(item));
|
|
||||||
|
|
||||||
// Author
|
|
||||||
if (item.getRssAuthor() != null) {
|
|
||||||
ui.author.setText(item.getRssAuthor());
|
|
||||||
ui.author.setVisibility(VISIBLE);
|
|
||||||
ui.authorLabel.setVisibility(VISIBLE);
|
|
||||||
} else {
|
|
||||||
ui.author.setVisibility(GONE);
|
|
||||||
ui.authorLabel.setVisibility(GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Imported and Last Updated
|
|
||||||
ui.imported.setText(UiUtils.formatDate(ctx, item.getAdded()));
|
|
||||||
ui.updated.setText(UiUtils.formatDate(ctx, item.getUpdated()));
|
|
||||||
|
|
||||||
// Description
|
|
||||||
if (item.getDescription() != null) {
|
|
||||||
ui.description.setText(item.getDescription());
|
|
||||||
ui.description.setVisibility(VISIBLE);
|
|
||||||
} else {
|
|
||||||
ui.description.setVisibility(GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open feed's blog when clicked
|
|
||||||
ui.layout.setOnClickListener(v -> listener.onFeedClick(item));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
class FeedViewHolder extends RecyclerView.ViewHolder {
|
||||||
public int compare(Feed a, Feed b) {
|
private final Context ctx;
|
||||||
if (a == b) return 0;
|
|
||||||
long aTime = a.getAdded(), bTime = b.getAdded();
|
|
||||||
if (aTime > bTime) return -1;
|
|
||||||
if (aTime < bTime) return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean areContentsTheSame(Feed a, Feed b) {
|
|
||||||
return a.getUpdated() == b.getUpdated();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean areItemsTheSame(Feed a, Feed b) {
|
|
||||||
return a.getUrl().equals(b.getUrl()) &&
|
|
||||||
a.getBlogId().equals(b.getBlogId()) &&
|
|
||||||
a.getAdded() == b.getAdded();
|
|
||||||
}
|
|
||||||
|
|
||||||
static class FeedViewHolder extends RecyclerView.ViewHolder {
|
|
||||||
private final View layout;
|
private final View layout;
|
||||||
private final TextView title;
|
private final TextView title;
|
||||||
private final ImageButton delete;
|
private final ImageButton delete;
|
||||||
@@ -104,6 +67,7 @@ class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
|
|||||||
private FeedViewHolder(View v) {
|
private FeedViewHolder(View v) {
|
||||||
super(v);
|
super(v);
|
||||||
|
|
||||||
|
ctx = v.getContext();
|
||||||
layout = v;
|
layout = v;
|
||||||
title = v.findViewById(R.id.titleView);
|
title = v.findViewById(R.id.titleView);
|
||||||
delete = v.findViewById(R.id.deleteButton);
|
delete = v.findViewById(R.id.deleteButton);
|
||||||
@@ -113,10 +77,44 @@ class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
|
|||||||
authorLabel = v.findViewById(R.id.author);
|
authorLabel = v.findViewById(R.id.author);
|
||||||
description = v.findViewById(R.id.descriptionView);
|
description = v.findViewById(R.id.descriptionView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void bindItem(Feed item) {
|
||||||
|
// Feed Title
|
||||||
|
title.setText(item.getTitle());
|
||||||
|
|
||||||
|
// Delete Button
|
||||||
|
delete.setOnClickListener(v -> listener.onDeleteClick(item));
|
||||||
|
|
||||||
|
// Author
|
||||||
|
if (item.getRssAuthor() != null) {
|
||||||
|
author.setText(item.getRssAuthor());
|
||||||
|
author.setVisibility(VISIBLE);
|
||||||
|
authorLabel.setVisibility(VISIBLE);
|
||||||
|
} else {
|
||||||
|
author.setVisibility(GONE);
|
||||||
|
authorLabel.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imported and Last Updated
|
||||||
|
imported.setText(formatDate(ctx, item.getAdded()));
|
||||||
|
updated.setText(formatDate(ctx, item.getUpdated()));
|
||||||
|
|
||||||
|
// Description
|
||||||
|
if (item.getDescription() != null) {
|
||||||
|
description.setText(item.getDescription());
|
||||||
|
description.setVisibility(VISIBLE);
|
||||||
|
} else {
|
||||||
|
description.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open feed's blog when clicked
|
||||||
|
layout.setOnClickListener(v -> listener.onFeedClick(item));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface RssFeedListener {
|
interface RssFeedListener {
|
||||||
void onFeedClick(Feed feed);
|
void onFeedClick(Feed feed);
|
||||||
|
|
||||||
void onDeleteClick(Feed feed);
|
void onDeleteClick(Feed feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.BaseActivity;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
|
import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class RssFeedDeleteFeedDialogFragment extends DialogFragment {
|
||||||
|
final static String TAG = RssFeedDeleteFeedDialogFragment.class.getName();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
private RssFeedViewModel viewModel;
|
||||||
|
|
||||||
|
static RssFeedDeleteFeedDialogFragment newInstance(GroupId groupId) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putByteArray(GROUP_ID, groupId.getBytes());
|
||||||
|
RssFeedDeleteFeedDialogFragment f =
|
||||||
|
new RssFeedDeleteFeedDialogFragment();
|
||||||
|
f.setArguments(args);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context ctx) {
|
||||||
|
super.onAttach(ctx);
|
||||||
|
((BaseActivity) requireActivity()).getActivityComponent().inject(this);
|
||||||
|
|
||||||
|
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||||
|
.get(RssFeedViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||||
|
GroupId groupId = new GroupId(
|
||||||
|
requireNonNull(requireArguments().getByteArray(GROUP_ID)));
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity(),
|
||||||
|
R.style.BriarDialogTheme);
|
||||||
|
builder.setTitle(getString(R.string.blogs_rss_remove_feed));
|
||||||
|
builder.setMessage(
|
||||||
|
getString(R.string.blogs_rss_remove_feed_dialog_message));
|
||||||
|
builder.setPositiveButton(R.string.cancel, null);
|
||||||
|
builder.setNegativeButton(R.string.blogs_rss_remove_feed_ok,
|
||||||
|
(dialog, which) -> viewModel.removeFeed(groupId));
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
package org.briarproject.briar.android.blog;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.text.Editable;
|
|
||||||
import android.text.TextWatcher;
|
|
||||||
import android.util.Patterns;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ProgressBar;
|
|
||||||
|
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
|
||||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
|
||||||
import org.briarproject.briar.R;
|
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
|
||||||
import org.briarproject.briar.android.activity.BriarActivity;
|
|
||||||
import org.briarproject.briar.api.feed.FeedManager;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
|
|
||||||
import static android.view.View.GONE;
|
|
||||||
import static android.view.View.VISIBLE;
|
|
||||||
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
|
|
||||||
import static java.util.logging.Level.WARNING;
|
|
||||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
|
||||||
import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard;
|
|
||||||
|
|
||||||
public class RssFeedImportActivity extends BriarActivity {
|
|
||||||
|
|
||||||
private static final Logger LOG =
|
|
||||||
Logger.getLogger(RssFeedImportActivity.class.getName());
|
|
||||||
|
|
||||||
private EditText urlInput;
|
|
||||||
private Button importButton;
|
|
||||||
private ProgressBar progressBar;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@IoExecutor
|
|
||||||
Executor ioExecutor;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
volatile FeedManager feedManager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setContentView(R.layout.activity_rss_feed_import);
|
|
||||||
|
|
||||||
urlInput = findViewById(R.id.urlInput);
|
|
||||||
urlInput.addTextChangedListener(new TextWatcher() {
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count,
|
|
||||||
int after) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start, int before,
|
|
||||||
int count) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
enableOrDisableImportButton();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
urlInput.setOnEditorActionListener((v, actionId, event) -> {
|
|
||||||
if (actionId == IME_ACTION_DONE && importButton.isEnabled() &&
|
|
||||||
importButton.getVisibility() == VISIBLE) {
|
|
||||||
publish();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
importButton = findViewById(R.id.importButton);
|
|
||||||
importButton.setOnClickListener(v -> publish());
|
|
||||||
|
|
||||||
progressBar = findViewById(R.id.progressBar);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectActivity(ActivityComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableOrDisableImportButton() {
|
|
||||||
String url = urlInput.getText().toString();
|
|
||||||
importButton.setEnabled(validateAndNormaliseUrl(url) != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private String validateAndNormaliseUrl(String url) {
|
|
||||||
if (!Patterns.WEB_URL.matcher(url).matches()) return null;
|
|
||||||
try {
|
|
||||||
return new URL(url).toString();
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void publish() {
|
|
||||||
// hide import button, show progress bar
|
|
||||||
importButton.setVisibility(GONE);
|
|
||||||
progressBar.setVisibility(VISIBLE);
|
|
||||||
hideSoftKeyboard(urlInput);
|
|
||||||
|
|
||||||
String url = validateAndNormaliseUrl(urlInput.getText().toString());
|
|
||||||
if (url == null) throw new AssertionError();
|
|
||||||
importFeed(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void importFeed(String url) {
|
|
||||||
ioExecutor.execute(() -> {
|
|
||||||
try {
|
|
||||||
feedManager.addFeed(url);
|
|
||||||
feedImported();
|
|
||||||
} catch (DbException | IOException e) {
|
|
||||||
logException(LOG, WARNING, e);
|
|
||||||
importFailed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void feedImported() {
|
|
||||||
runOnUiThreadUnlessDestroyed(this::supportFinishAfterTransition);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void importFailed() {
|
|
||||||
runOnUiThreadUnlessDestroyed(() -> {
|
|
||||||
// hide progress bar, show publish button
|
|
||||||
progressBar.setVisibility(GONE);
|
|
||||||
importButton.setVisibility(VISIBLE);
|
|
||||||
|
|
||||||
// show error dialog
|
|
||||||
AlertDialog.Builder builder =
|
|
||||||
new AlertDialog.Builder(RssFeedImportActivity.this,
|
|
||||||
R.style.BriarDialogTheme);
|
|
||||||
builder.setMessage(R.string.blogs_rss_feeds_import_error);
|
|
||||||
builder.setNegativeButton(R.string.cancel, null);
|
|
||||||
builder.setPositiveButton(R.string.try_again_button,
|
|
||||||
(dialog, which) -> publish());
|
|
||||||
AlertDialog dialog = builder.create();
|
|
||||||
dialog.show();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.BaseActivity;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class RssFeedImportFailedDialogFragment extends DialogFragment {
|
||||||
|
final static String TAG = RssFeedImportFailedDialogFragment.class.getName();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
private RssFeedViewModel viewModel;
|
||||||
|
|
||||||
|
static RssFeedImportFailedDialogFragment newInstance() {
|
||||||
|
return new RssFeedImportFailedDialogFragment();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context ctx) {
|
||||||
|
super.onAttach(ctx);
|
||||||
|
((BaseActivity) requireActivity()).getActivityComponent().inject(this);
|
||||||
|
|
||||||
|
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||||
|
.get(RssFeedViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||||
|
AlertDialog.Builder builder =
|
||||||
|
new AlertDialog.Builder(requireActivity(),
|
||||||
|
R.style.BriarDialogTheme);
|
||||||
|
builder.setMessage(R.string.blogs_rss_feeds_import_error);
|
||||||
|
builder.setNegativeButton(R.string.cancel, null);
|
||||||
|
builder.setPositiveButton(R.string.try_again_button,
|
||||||
|
(dialog, which) -> viewModel.retryImportFeed());
|
||||||
|
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import static android.view.View.GONE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
|
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
|
||||||
|
import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class RssFeedImportFragment extends BaseFragment {
|
||||||
|
public static final String TAG = RssFeedImportFragment.class.getName();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
private RssFeedViewModel viewModel;
|
||||||
|
|
||||||
|
private EditText urlInput;
|
||||||
|
private Button importButton;
|
||||||
|
private ProgressBar progressBar;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectFragment(ActivityComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
|
||||||
|
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||||
|
.get(RssFeedViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater,
|
||||||
|
@Nullable ViewGroup container,
|
||||||
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
requireActivity().setTitle(getString(R.string.blogs_rss_feeds_import));
|
||||||
|
View v = inflater.inflate(R.layout.fragment_rss_feed_import,
|
||||||
|
container, false);
|
||||||
|
|
||||||
|
urlInput = v.findViewById(R.id.urlInput);
|
||||||
|
urlInput.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start, int count,
|
||||||
|
int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start, int before,
|
||||||
|
int count) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
enableOrDisableImportButton();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
urlInput.setOnEditorActionListener((view, actionId, event) -> {
|
||||||
|
if (actionId == IME_ACTION_DONE && importButton.isEnabled() &&
|
||||||
|
importButton.getVisibility() == VISIBLE) {
|
||||||
|
publish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
importButton = v.findViewById(R.id.importButton);
|
||||||
|
importButton.setOnClickListener(view -> publish());
|
||||||
|
|
||||||
|
progressBar = v.findViewById(R.id.progressBar);
|
||||||
|
|
||||||
|
viewModel.getIsImporting().observe(getViewLifecycleOwner(),
|
||||||
|
this::onIsImporting);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUniqueTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableOrDisableImportButton() {
|
||||||
|
String url = urlInput.getText().toString();
|
||||||
|
importButton.setEnabled(viewModel.validateAndNormaliseUrl(url) != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void publish() {
|
||||||
|
String url = viewModel
|
||||||
|
.validateAndNormaliseUrl(urlInput.getText().toString());
|
||||||
|
if (url == null) throw new AssertionError();
|
||||||
|
viewModel.importFeed(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onIsImporting(Boolean importing) {
|
||||||
|
if (importing) {
|
||||||
|
// show progress bar, hide import button
|
||||||
|
importButton.setVisibility(GONE);
|
||||||
|
progressBar.setVisibility(VISIBLE);
|
||||||
|
hideSoftKeyboard(urlInput);
|
||||||
|
} else {
|
||||||
|
// show publish button, hide progress bar
|
||||||
|
importButton.setVisibility(VISIBLE);
|
||||||
|
progressBar.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
package org.briarproject.briar.android.blog;
|
|
||||||
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
|
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
|
||||||
|
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
|
||||||
import org.briarproject.briar.R;
|
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
|
||||||
import org.briarproject.briar.android.activity.BriarActivity;
|
|
||||||
import org.briarproject.briar.android.blog.RssFeedAdapter.RssFeedListener;
|
|
||||||
import org.briarproject.briar.android.view.BriarRecyclerView;
|
|
||||||
import org.briarproject.briar.api.feed.Feed;
|
|
||||||
import org.briarproject.briar.api.feed.FeedManager;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
||||||
|
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
|
||||||
import static com.google.android.material.snackbar.Snackbar.LENGTH_LONG;
|
|
||||||
import static java.util.logging.Level.WARNING;
|
|
||||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
|
||||||
|
|
||||||
public class RssFeedManageActivity extends BriarActivity
|
|
||||||
implements RssFeedListener {
|
|
||||||
|
|
||||||
private static final Logger LOG =
|
|
||||||
Logger.getLogger(RssFeedManageActivity.class.getName());
|
|
||||||
|
|
||||||
private BriarRecyclerView list;
|
|
||||||
private RssFeedAdapter adapter;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
@SuppressWarnings("WeakerAccess")
|
|
||||||
volatile FeedManager feedManager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setContentView(R.layout.activity_rss_feed_manage);
|
|
||||||
|
|
||||||
adapter = new RssFeedAdapter(this, this);
|
|
||||||
|
|
||||||
list = findViewById(R.id.feedList);
|
|
||||||
list.setLayoutManager(new LinearLayoutManager(this));
|
|
||||||
list.setAdapter(adapter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
loadFeeds();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
adapter.clear();
|
|
||||||
list.showProgressBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
MenuInflater inflater = getMenuInflater();
|
|
||||||
inflater.inflate(R.menu.rss_feed_manage_actions, menu);
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
if (item.getItemId() == android.R.id.home) {
|
|
||||||
onBackPressed();
|
|
||||||
return true;
|
|
||||||
} else if (item.getItemId() == R.id.action_rss_feeds_import) {
|
|
||||||
Intent i = new Intent(this, RssFeedImportActivity.class);
|
|
||||||
startActivity(i);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void injectActivity(ActivityComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFeedClick(Feed feed) {
|
|
||||||
Intent i = new Intent(this, BlogActivity.class);
|
|
||||||
i.putExtra(GROUP_ID, feed.getBlogId().getBytes());
|
|
||||||
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
startActivity(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDeleteClick(Feed feed) {
|
|
||||||
DialogInterface.OnClickListener okListener =
|
|
||||||
(dialog, which) -> deleteFeed(feed);
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this,
|
|
||||||
R.style.BriarDialogTheme);
|
|
||||||
builder.setTitle(getString(R.string.blogs_rss_remove_feed));
|
|
||||||
builder.setMessage(
|
|
||||||
getString(R.string.blogs_rss_remove_feed_dialog_message));
|
|
||||||
builder.setPositiveButton(R.string.cancel, null);
|
|
||||||
builder.setNegativeButton(R.string.blogs_rss_remove_feed_ok,
|
|
||||||
okListener);
|
|
||||||
builder.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadFeeds() {
|
|
||||||
int revision = adapter.getRevision();
|
|
||||||
runOnDbThread(() -> {
|
|
||||||
try {
|
|
||||||
displayFeeds(revision, feedManager.getFeeds());
|
|
||||||
} catch (DbException e) {
|
|
||||||
logException(LOG, WARNING, e);
|
|
||||||
onLoadError();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void displayFeeds(int revision, List<Feed> feeds) {
|
|
||||||
runOnUiThreadUnlessDestroyed(() -> {
|
|
||||||
if (revision == adapter.getRevision()) {
|
|
||||||
adapter.incrementRevision();
|
|
||||||
if (feeds.isEmpty()) list.showData();
|
|
||||||
else adapter.addAll(feeds);
|
|
||||||
} else {
|
|
||||||
LOG.info("Concurrent update, reloading");
|
|
||||||
loadFeeds();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void deleteFeed(Feed feed) {
|
|
||||||
runOnDbThread(() -> {
|
|
||||||
try {
|
|
||||||
feedManager.removeFeed(feed);
|
|
||||||
onFeedDeleted(feed);
|
|
||||||
} catch (DbException e) {
|
|
||||||
logException(LOG, WARNING, e);
|
|
||||||
onDeleteError();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onLoadError() {
|
|
||||||
runOnUiThreadUnlessDestroyed(() -> {
|
|
||||||
list.setEmptyText(R.string.blogs_rss_feeds_manage_error);
|
|
||||||
list.showData();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onFeedDeleted(Feed feed) {
|
|
||||||
runOnUiThreadUnlessDestroyed(() -> {
|
|
||||||
adapter.incrementRevision();
|
|
||||||
adapter.remove(feed);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onDeleteError() {
|
|
||||||
runOnUiThreadUnlessDestroyed(() -> Snackbar.make(list,
|
|
||||||
R.string.blogs_rss_feeds_manage_delete_error,
|
|
||||||
LENGTH_LONG).show());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
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 org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
|
import org.briarproject.briar.android.view.BriarRecyclerView;
|
||||||
|
import org.briarproject.briar.api.feed.Feed;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
||||||
|
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
|
||||||
|
import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedAdapter.RssFeedListener;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class RssFeedManageFragment extends BaseFragment
|
||||||
|
implements RssFeedListener {
|
||||||
|
public static final String TAG = RssFeedManageFragment.class.getName();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
private RssFeedViewModel viewModel;
|
||||||
|
|
||||||
|
private BriarRecyclerView list;
|
||||||
|
private final RssFeedAdapter adapter = new RssFeedAdapter(this);
|
||||||
|
|
||||||
|
public static RssFeedManageFragment newInstance() {
|
||||||
|
return new RssFeedManageFragment();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectFragment(ActivityComponent component) {
|
||||||
|
component.inject(this);
|
||||||
|
|
||||||
|
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||||
|
.get(RssFeedViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater,
|
||||||
|
@Nullable ViewGroup container,
|
||||||
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
requireActivity().setTitle(R.string.blogs_rss_feeds);
|
||||||
|
View v = inflater.inflate(R.layout.fragment_rss_feed_manage,
|
||||||
|
container, false);
|
||||||
|
|
||||||
|
list = v.findViewById(R.id.feedList);
|
||||||
|
list.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||||
|
list.setAdapter(adapter);
|
||||||
|
|
||||||
|
viewModel.getFeeds().observe(getViewLifecycleOwner(), result -> result
|
||||||
|
.onError(e -> {
|
||||||
|
list.setEmptyText(R.string.blogs_rss_feeds_manage_error);
|
||||||
|
list.showData();
|
||||||
|
})
|
||||||
|
.onSuccess(feeds -> {
|
||||||
|
adapter.submitList(feeds);
|
||||||
|
if (requireNonNull(feeds).size() == 0) {
|
||||||
|
list.showData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUniqueTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.rss_feed_manage_actions, menu);
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
requireActivity().onBackPressed();
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.action_rss_feeds_import) {
|
||||||
|
showNextFragment(new RssFeedImportFragment());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFeedClick(Feed feed) {
|
||||||
|
Intent i = new Intent(getActivity(), BlogActivity.class);
|
||||||
|
i.putExtra(GROUP_ID, feed.getBlogId().getBytes());
|
||||||
|
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
startActivity(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDeleteClick(Feed feed) {
|
||||||
|
RssFeedDeleteFeedDialogFragment dialog =
|
||||||
|
RssFeedDeleteFeedDialogFragment.newInstance(feed.getBlogId());
|
||||||
|
dialog.show(getParentFragmentManager(),
|
||||||
|
RssFeedDeleteFeedDialogFragment.TAG);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
package org.briarproject.briar.android.blog;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.util.Patterns;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
|
import org.briarproject.bramble.api.db.TransactionManager;
|
||||||
|
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||||
|
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
|
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||||
|
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
||||||
|
import org.briarproject.briar.android.viewmodel.LiveEvent;
|
||||||
|
import org.briarproject.briar.android.viewmodel.LiveResult;
|
||||||
|
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||||
|
import org.briarproject.briar.api.feed.Feed;
|
||||||
|
import org.briarproject.briar.api.feed.FeedManager;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static java.util.logging.Logger.getLogger;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.now;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.EXISTS;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.FAILED;
|
||||||
|
import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.IMPORTED;
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
|
class RssFeedViewModel extends DbViewModel {
|
||||||
|
enum ImportResult {IMPORTED, FAILED, EXISTS}
|
||||||
|
|
||||||
|
private static final Logger LOG =
|
||||||
|
getLogger(RssFeedViewModel.class.getName());
|
||||||
|
|
||||||
|
private final FeedManager feedManager;
|
||||||
|
private final Executor ioExecutor;
|
||||||
|
private final Executor dbExecutor;
|
||||||
|
|
||||||
|
private final MutableLiveData<LiveResult<List<Feed>>> feeds =
|
||||||
|
new MutableLiveData<>();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private volatile String urlFailedImport = null;
|
||||||
|
private final MutableLiveData<Boolean> isImporting =
|
||||||
|
new MutableLiveData<>(false);
|
||||||
|
private final MutableLiveEvent<ImportResult> importResult =
|
||||||
|
new MutableLiveEvent<>();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
RssFeedViewModel(Application app,
|
||||||
|
FeedManager feedManager,
|
||||||
|
@IoExecutor Executor ioExecutor,
|
||||||
|
@DatabaseExecutor Executor dbExecutor,
|
||||||
|
LifecycleManager lifecycleManager,
|
||||||
|
TransactionManager db,
|
||||||
|
AndroidExecutor androidExecutor) {
|
||||||
|
super(app, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||||
|
this.feedManager = feedManager;
|
||||||
|
this.ioExecutor = ioExecutor;
|
||||||
|
this.dbExecutor = dbExecutor;
|
||||||
|
|
||||||
|
loadFeeds();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
String validateAndNormaliseUrl(String url) {
|
||||||
|
if (!Patterns.WEB_URL.matcher(url).matches()) return null;
|
||||||
|
try {
|
||||||
|
return new URL(url).toString();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LiveData<LiveResult<List<Feed>>> getFeeds() {
|
||||||
|
return feeds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadFeeds() {
|
||||||
|
loadFromDb(this::loadFeeds, feeds::setValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DatabaseExecutor
|
||||||
|
private List<Feed> loadFeeds(Transaction txn) throws DbException {
|
||||||
|
long start = now();
|
||||||
|
List<Feed> feeds = feedManager.getFeeds(txn);
|
||||||
|
Collections.sort(feeds);
|
||||||
|
logDuration(LOG, "Loading feeds", start);
|
||||||
|
return feeds;
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeFeed(GroupId groupId) {
|
||||||
|
dbExecutor.execute(() -> {
|
||||||
|
List<Feed> updated = removeListItems(getList(feeds), feed -> {
|
||||||
|
if (feed.getBlogId().equals(groupId)) {
|
||||||
|
try {
|
||||||
|
feedManager.removeFeed(feed);
|
||||||
|
return true;
|
||||||
|
} catch (DbException e) {
|
||||||
|
handleException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
if (updated != null) {
|
||||||
|
feeds.postValue(new LiveResult<>(updated));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
LiveEvent<ImportResult> getImportResult() {
|
||||||
|
return importResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
LiveData<Boolean> getIsImporting() {
|
||||||
|
return isImporting;
|
||||||
|
}
|
||||||
|
|
||||||
|
void importFeed(String url) {
|
||||||
|
isImporting.setValue(true);
|
||||||
|
urlFailedImport = null;
|
||||||
|
ioExecutor.execute(() -> {
|
||||||
|
try {
|
||||||
|
if (exists(url)) {
|
||||||
|
importResult.postEvent(EXISTS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Feed feed = feedManager.addFeed(url);
|
||||||
|
List<Feed> updated = addListItem(getList(feeds), feed);
|
||||||
|
if (updated != null) {
|
||||||
|
Collections.sort(updated);
|
||||||
|
feeds.postValue(new LiveResult<>(updated));
|
||||||
|
}
|
||||||
|
importResult.postEvent(IMPORTED);
|
||||||
|
} catch (DbException | IOException e) {
|
||||||
|
logException(LOG, WARNING, e);
|
||||||
|
urlFailedImport = url;
|
||||||
|
importResult.postEvent(FAILED);
|
||||||
|
} finally {
|
||||||
|
isImporting.postValue(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void retryImportFeed() {
|
||||||
|
if (urlFailedImport == null) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
importFeed(urlFailedImport);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean exists(String url) {
|
||||||
|
List<Feed> list = getList(feeds);
|
||||||
|
if (list != null) {
|
||||||
|
for (Feed feed : list) {
|
||||||
|
if (url.equals(feed.getUrl())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/margin_medium"
|
android:padding="@dimen/margin_medium">
|
||||||
tools:context=".android.blog.RssFeedImportActivity">
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<org.briarproject.briar.android.view.BriarRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/feedList"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:emptyText="@string/blogs_rss_feeds_manage_empty_state"
|
||||||
|
app:scrollToEnd="false"
|
||||||
|
tools:listitem="@layout/list_item_rss_feed" />
|
||||||
@@ -10,13 +10,8 @@
|
|||||||
app:showAsAction="always"/>
|
app:showAsAction="always"/>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_rss_feeds_import"
|
android:id="@+id/action_rss_feeds"
|
||||||
android:title="@string/blogs_rss_feeds_import"
|
android:title="@string/blogs_rss_feeds"
|
||||||
app:showAsAction="never"/>
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_rss_feeds_manage"
|
|
||||||
android:title="@string/blogs_rss_feeds_manage"
|
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
@@ -461,14 +461,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">إستيراد</string>
|
<string name="blogs_rss_feeds_import_button">إستيراد</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">ادخال رابط تحديثات RSS</string>
|
<string name="blogs_rss_feeds_import_hint">ادخال رابط تحديثات RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">معذرة! حدث خطأ في استيراد التحديثات.</string>
|
<string name="blogs_rss_feeds_import_error">معذرة! حدث خطأ في استيراد التحديثات.</string>
|
||||||
<string name="blogs_rss_feeds_manage">إدارة تحديثات RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">تم استيراد:</string>
|
<string name="blogs_rss_feeds_manage_imported">تم استيراد:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">المؤلف/ة:</string>
|
<string name="blogs_rss_feeds_manage_author">المؤلف/ة:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">آخر تحديث:</string>
|
<string name="blogs_rss_feeds_manage_updated">آخر تحديث:</string>
|
||||||
<string name="blogs_rss_remove_feed">ازالة الخلاصة</string>
|
<string name="blogs_rss_remove_feed">ازالة الخلاصة</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">هل أنت متأكد/ة من رغبتك في حذف هذه الخلاصة؟\n\nالمنشورات ستحذف من جهازك وليس من أجهزة الآخرين.\n\nأي جهة اتصال قمت/ي بمشاركة هذه الخلاصة معها قد لا تتمكن من استلام التحديثات.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">هل أنت متأكد/ة من رغبتك في حذف هذه الخلاصة؟\n\nالمنشورات ستحذف من جهازك وليس من أجهزة الآخرين.\n\nأي جهة اتصال قمت/ي بمشاركة هذه الخلاصة معها قد لا تتمكن من استلام التحديثات.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">حذف</string>
|
<string name="blogs_rss_remove_feed_ok">حذف</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">لا يمكن حذف الخلاصة!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">لا خلاصات RSS للعرض\n\nالرجاء لمس علامة + لإستيراد خلاصة.</string>
|
<string name="blogs_rss_feeds_manage_empty_state">لا خلاصات RSS للعرض\n\nالرجاء لمس علامة + لإستيراد خلاصة.</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">حدث خطأ في جلب خلاصاتك. الرجاء المحاولة لاحقًا.</string>
|
<string name="blogs_rss_feeds_manage_error">حدث خطأ في جلب خلاصاتك. الرجاء المحاولة لاحقًا.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -348,13 +348,11 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">İdxal</string>
|
<string name="blogs_rss_feeds_import_button">İdxal</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">RSS kanalın linkini daxil edin</string>
|
<string name="blogs_rss_feeds_import_hint">RSS kanalın linkini daxil edin</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Üzr istəyirik! Feed-inizdə idxal bir xəta baş verdi.</string>
|
<string name="blogs_rss_feeds_import_error">Üzr istəyirik! Feed-inizdə idxal bir xəta baş verdi.</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSS Feeds idarəetmə</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">İdxal olundu:</string>
|
<string name="blogs_rss_feeds_manage_imported">İdxal olundu:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Müəllif:</string>
|
<string name="blogs_rss_feeds_manage_author">Müəllif:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Son yeniləmə:</string>
|
<string name="blogs_rss_feeds_manage_updated">Son yeniləmə:</string>
|
||||||
<string name="blogs_rss_remove_feed">Feed\'i sil</string>
|
<string name="blogs_rss_remove_feed">Feed\'i sil</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Sil</string>
|
<string name="blogs_rss_remove_feed_ok">Sil</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Feed silinmədi</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Xeyr RSS əks etdirmir\n\nİdxal etmək üçün + düyməsinə toxunun</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Xeyr RSS əks etdirmir\n\nİdxal etmək üçün + düyməsinə toxunun</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Kanal yükləmədə bir problem var. Zəhmət olmasa bir az sonra yenə cəhd edin.</string>
|
<string name="blogs_rss_feeds_manage_error">Kanal yükləmədə bir problem var. Zəhmət olmasa bir az sonra yenə cəhd edin.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -238,13 +238,11 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Внасяне</string>
|
<string name="blogs_rss_feeds_import_button">Внасяне</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Въведете URL адреса на RSS емисията</string>
|
<string name="blogs_rss_feeds_import_hint">Въведете URL адреса на RSS емисията</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Възникна грешка при внасянето на емисия.</string>
|
<string name="blogs_rss_feeds_import_error">Възникна грешка при внасянето на емисия.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Управление на RSS емисии</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Внесена:</string>
|
<string name="blogs_rss_feeds_manage_imported">Внесена:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Последно актуализиране:</string>
|
<string name="blogs_rss_feeds_manage_updated">Последно актуализиране:</string>
|
||||||
<string name="blogs_rss_remove_feed">Премахване на емисия</string>
|
<string name="blogs_rss_remove_feed">Премахване на емисия</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Премахване</string>
|
<string name="blogs_rss_remove_feed_ok">Премахване</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Емисията не можа да бъде изтрита!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_error">Възникна проблем при зареждането на емисиите ви. Моля, опитайте пак по-късно.</string>
|
<string name="blogs_rss_feeds_manage_error">Възникна проблем при зареждането на емисиите ви. Моля, опитайте пак по-късно.</string>
|
||||||
<!--Settings Display-->
|
<!--Settings Display-->
|
||||||
<!--Settings Network-->
|
<!--Settings Network-->
|
||||||
|
|||||||
@@ -332,14 +332,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Uvezi</string>
|
<string name="blogs_rss_feeds_import_button">Uvezi</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Unesi URL od RSS kanala</string>
|
<string name="blogs_rss_feeds_import_hint">Unesi URL od RSS kanala</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Žao nam je! Došlo je do greške pri unosu vašeg kanala.</string>
|
<string name="blogs_rss_feeds_import_error">Žao nam je! Došlo je do greške pri unosu vašeg kanala.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Upravljanje RSS kanalima</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Uvezeno:</string>
|
<string name="blogs_rss_feeds_manage_imported">Uvezeno:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Zadnje ažuriranje:</string>
|
<string name="blogs_rss_feeds_manage_updated">Zadnje ažuriranje:</string>
|
||||||
<string name="blogs_rss_remove_feed">Uklonite kanal</string>
|
<string name="blogs_rss_remove_feed">Uklonite kanal</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Jeste li sigurni da želite da uklonite kanal?\n\nPostovi će biti uklonjeni sa vašeg uređaja ali ne is uređaja drugih ljudi.\n\nKontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Jeste li sigurni da želite da uklonite kanal?\n\nPostovi će biti uklonjeni sa vašeg uređaja ali ne is uređaja drugih ljudi.\n\nKontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Ukloni</string>
|
<string name="blogs_rss_remove_feed_ok">Ukloni</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Kanal nije bilo moguće ukloniti!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nema RSS kanala za prikazivanje\n\nDotaknite + ikonu da uvezete kanal</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nema RSS kanala za prikazivanje\n\nDotaknite + ikonu da uvezete kanal</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Došlo je do problema pri učitavanju vaših kanala. Probajte opet kasnije.</string>
|
<string name="blogs_rss_feeds_manage_error">Došlo je do problema pri učitavanju vaših kanala. Probajte opet kasnije.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -421,14 +421,12 @@ Així que l\'actualitzi li veureu una icona diferent .</string>
|
|||||||
<string name="blogs_rss_feeds_import_button">Subscriu-me</string>
|
<string name="blogs_rss_feeds_import_button">Subscriu-me</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Escriviu l\'URL del canal de notícies RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Escriviu l\'URL del canal de notícies RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Ens sap greu! S\'ha produït un error en subscriure-us al vostre canal de notícies.</string>
|
<string name="blogs_rss_feeds_import_error">Ens sap greu! S\'ha produït un error en subscriure-us al vostre canal de notícies.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Gestiona els canals de notícies RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importat:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importat:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Darrera actualització:</string>
|
<string name="blogs_rss_feeds_manage_updated">Darrera actualització:</string>
|
||||||
<string name="blogs_rss_remove_feed">Suprimeix la subscripció al canal de notícies</string>
|
<string name="blogs_rss_remove_feed">Suprimeix la subscripció al canal de notícies</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Segur que voleu suprimir la subscripció a aquest canal de notícies?\n\nLes notícies d\'aquest canal s\'eliminaran del vostre dispositiu però no del d\'altres persones.\n\nEls contactes amb els que hàgeu compartit aquest canal poden deixar de rebre les actualitzacions.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Segur que voleu suprimir la subscripció a aquest canal de notícies?\n\nLes notícies d\'aquest canal s\'eliminaran del vostre dispositiu però no del d\'altres persones.\n\nEls contactes amb els que hàgeu compartit aquest canal poden deixar de rebre les actualitzacions.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Suprimeix la subscripció</string>
|
<string name="blogs_rss_remove_feed_ok">Suprimeix la subscripció</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">La subscripció al canal de notícies no s\'ha pogut suprimir.</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">No hi ha cap notícia per mostrar\n\nFeu un toc sobre la icona + per subscriure-us a un canal de notícies</string>
|
<string name="blogs_rss_feeds_manage_empty_state">No hi ha cap notícia per mostrar\n\nFeu un toc sobre la icona + per subscriure-us a un canal de notícies</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">S\'ha produït un problema en actualitzar els vostres canals de notícies. Torneu-ho a provar més endavant.</string>
|
<string name="blogs_rss_feeds_manage_error">S\'ha produït un problema en actualitzar els vostres canals de notícies. Torneu-ho a provar més endavant.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -302,13 +302,11 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Import</string>
|
<string name="blogs_rss_feeds_import_button">Import</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Zadejte URL adresu RSS kanálu</string>
|
<string name="blogs_rss_feeds_import_hint">Zadejte URL adresu RSS kanálu</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Omlouváme se! Vyskytla se chyba při importu vašeho kanálu.</string>
|
<string name="blogs_rss_feeds_import_error">Omlouváme se! Vyskytla se chyba při importu vašeho kanálu.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Správa RSS kanálů</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importováno:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importováno:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Naposledy aktualizováno:</string>
|
<string name="blogs_rss_feeds_manage_updated">Naposledy aktualizováno:</string>
|
||||||
<string name="blogs_rss_remove_feed">Odstranit kanál</string>
|
<string name="blogs_rss_remove_feed">Odstranit kanál</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Odstranit</string>
|
<string name="blogs_rss_remove_feed_ok">Odstranit</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Kanál nemohl být odstraněn !</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Žádné RSS kanály k zobrazení\n\nKlikněte na ikonu + pro nahrání příspěvků</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Žádné RSS kanály k zobrazení\n\nKlikněte na ikonu + pro nahrání příspěvků</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Vyskytl se problém s načtením vašeho kanálu příspěvků. Zkuste to prosím později.</string>
|
<string name="blogs_rss_feeds_manage_error">Vyskytl se problém s načtením vašeho kanálu příspěvků. Zkuste to prosím později.</string>
|
||||||
<!--Settings Display-->
|
<!--Settings Display-->
|
||||||
|
|||||||
@@ -457,14 +457,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importieren</string>
|
<string name="blogs_rss_feeds_import_button">Importieren</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">URL des RSS-Feeds eingeben</string>
|
<string name="blogs_rss_feeds_import_hint">URL des RSS-Feeds eingeben</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Es tut uns Leid! Es gab einen Fehler beim Importieren deines Feeds.</string>
|
<string name="blogs_rss_feeds_import_error">Es tut uns Leid! Es gab einen Fehler beim Importieren deines Feeds.</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSS-Feeds verwalten</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importiert:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importiert:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Letzte Aktualisierung:</string>
|
<string name="blogs_rss_feeds_manage_updated">Letzte Aktualisierung:</string>
|
||||||
<string name="blogs_rss_remove_feed">Feed entfernen</string>
|
<string name="blogs_rss_remove_feed">Feed entfernen</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Bist du sicher, dass du diesen Feed löschen willst?\n\nBeiträge werden von deinem Gerät entfernt, aber nicht von den Geräten anderer Personen.\n\nAlle Kontakte, für die du diesen Feed freigegeben hast, können keine Updates mehr erhalten.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Bist du sicher, dass du diesen Feed löschen willst?\n\nBeiträge werden von deinem Gerät entfernt, aber nicht von den Geräten anderer Personen.\n\nAlle Kontakte, für die du diesen Feed freigegeben hast, können keine Updates mehr erhalten.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Aufheben</string>
|
<string name="blogs_rss_remove_feed_ok">Aufheben</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Der Feed konnte nicht gelöscht werden!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Keine RSS-Feeds vorhanden\n\nTippe auf das + Symbol, um einen Feed zu importieren</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Keine RSS-Feeds vorhanden\n\nTippe auf das + Symbol, um einen Feed zu importieren</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Es gab ein Problem beim Laden deiner Feeds. Bitte versuche es später erneut.</string>
|
<string name="blogs_rss_feeds_manage_error">Es gab ein Problem beim Laden deiner Feeds. Bitte versuche es später erneut.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -457,14 +457,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importar</string>
|
<string name="blogs_rss_feeds_import_button">Importar</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Introduce la URL del canal RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Introduce la URL del canal RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">¡Lo sentimos! Hubo un error importando tu canal.</string>
|
<string name="blogs_rss_feeds_import_error">¡Lo sentimos! Hubo un error importando tu canal.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Administrar canales RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Última actualización:</string>
|
<string name="blogs_rss_feeds_manage_updated">Última actualización:</string>
|
||||||
<string name="blogs_rss_remove_feed">Eliminar canal RSS</string>
|
<string name="blogs_rss_remove_feed">Eliminar canal RSS</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">¿Estás seguro de que quieres quitar este canal RSS?\n\nLos mensajes se eliminarán de tu dispositivo, pero no de los dispositivos de otras personas.\n\nEs posible que los contactos con los que hayas compartido este canal dejen de recibir actualizaciones.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">¿Estás seguro de que quieres quitar este canal RSS?\n\nLos mensajes se eliminarán de tu dispositivo, pero no de los dispositivos de otras personas.\n\nEs posible que los contactos con los que hayas compartido este canal dejen de recibir actualizaciones.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Eliminar</string>
|
<string name="blogs_rss_remove_feed_ok">Eliminar</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">¡El canal no pudo ser eliminado!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">No hay canales RSS que mostrar\n\nGolpea el icono + para importar uno</string>
|
<string name="blogs_rss_feeds_manage_empty_state">No hay canales RSS que mostrar\n\nGolpea el icono + para importar uno</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Hubo un problema cargando tus canales RSS. Por favor, prueba más tarde.</string>
|
<string name="blogs_rss_feeds_manage_error">Hubo un problema cargando tus canales RSS. Por favor, prueba más tarde.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -395,14 +395,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Inportatu</string>
|
<string name="blogs_rss_feeds_import_button">Inportatu</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Sartu RSS jarioaren URLa</string>
|
<string name="blogs_rss_feeds_import_hint">Sartu RSS jarioaren URLa</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Sentitzen dugu! Zure jarioa inportatzean errore bat gertatu da.</string>
|
<string name="blogs_rss_feeds_import_error">Sentitzen dugu! Zure jarioa inportatzean errore bat gertatu da.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Kudeatu RSS jarioak</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Inportatuta:</string>
|
<string name="blogs_rss_feeds_manage_imported">Inportatuta:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Egilea:</string>
|
<string name="blogs_rss_feeds_manage_author">Egilea:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Azken eguneratzea:</string>
|
<string name="blogs_rss_feeds_manage_updated">Azken eguneratzea:</string>
|
||||||
<string name="blogs_rss_remove_feed">Kendu jarioa</string>
|
<string name="blogs_rss_remove_feed">Kendu jarioa</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Ziur zaude jario hau kendu nahi duzula?\n\nSarrerak zure gailutik kenduko dira baina ez besteen gailuetatik.\n\nJario hau beste inorekin partekatu baduzu agian eguneratzeak jasotzeari utziko diote.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Ziur zaude jario hau kendu nahi duzula?\n\nSarrerak zure gailutik kenduko dira baina ez besteen gailuetatik.\n\nJario hau beste inorekin partekatu baduzu agian eguneratzeak jasotzeari utziko diote.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Kendu</string>
|
<string name="blogs_rss_remove_feed_ok">Kendu</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Ezin izan da jarioa ezabatu!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Ez dago erakusteko RSS jariorik\n\nSakatu + ikonoa jario bat inportatzeko</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Ez dago erakusteko RSS jariorik\n\nSakatu + ikonoa jario bat inportatzeko</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Arazo bat egon da zure jarioak kargatzean. Saiatu berriro geroago.</string>
|
<string name="blogs_rss_feeds_manage_error">Arazo bat egon da zure jarioak kargatzean. Saiatu berriro geroago.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -488,7 +488,6 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">وارد کردن</string>
|
<string name="blogs_rss_feeds_import_button">وارد کردن</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">آدرس خوراک RSS را وارد کنید</string>
|
<string name="blogs_rss_feeds_import_hint">آدرس خوراک RSS را وارد کنید</string>
|
||||||
<string name="blogs_rss_feeds_import_error">متاسفیم! وارد کردن خوراک شما با خطا مواجه شده است.</string>
|
<string name="blogs_rss_feeds_import_error">متاسفیم! وارد کردن خوراک شما با خطا مواجه شده است.</string>
|
||||||
<string name="blogs_rss_feeds_manage">مدیریت خوراک های RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">وارد شده:</string>
|
<string name="blogs_rss_feeds_manage_imported">وارد شده:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">نویسنده:</string>
|
<string name="blogs_rss_feeds_manage_author">نویسنده:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">آخرین به روز رسانی:</string>
|
<string name="blogs_rss_feeds_manage_updated">آخرین به روز رسانی:</string>
|
||||||
@@ -499,7 +498,6 @@
|
|||||||
|
|
||||||
هر مخاطبی که با آن این خوراک را به اشتراک گذاشته اید ممکن است دیگر آپدیت دریافت نکند.</string>
|
هر مخاطبی که با آن این خوراک را به اشتراک گذاشته اید ممکن است دیگر آپدیت دریافت نکند.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">حذف</string>
|
<string name="blogs_rss_remove_feed_ok">حذف</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">خوراک نمی تواند پاک شود!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">هیچ خوراک RSS برای نمایش وجود ندارد
|
<string name="blogs_rss_feeds_manage_empty_state">هیچ خوراک RSS برای نمایش وجود ندارد
|
||||||
|
|
||||||
برای وارد کردن خوراک روی آیکون + ضربه بزنید</string>
|
برای وارد کردن خوراک روی آیکون + ضربه بزنید</string>
|
||||||
|
|||||||
@@ -314,14 +314,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Tuo</string>
|
<string name="blogs_rss_feeds_import_button">Tuo</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Syötä RSS syötteen URL osoite</string>
|
<string name="blogs_rss_feeds_import_hint">Syötä RSS syötteen URL osoite</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Pahoittelemme! Syötteen noutamisessa tapahtui virhe.</string>
|
<string name="blogs_rss_feeds_import_error">Pahoittelemme! Syötteen noutamisessa tapahtui virhe.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Muokkaa RSS syötteitä</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Tuotu:</string>
|
<string name="blogs_rss_feeds_manage_imported">Tuotu:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Tekijä:</string>
|
<string name="blogs_rss_feeds_manage_author">Tekijä:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Viimeksi päivitetty:</string>
|
<string name="blogs_rss_feeds_manage_updated">Viimeksi päivitetty:</string>
|
||||||
<string name="blogs_rss_remove_feed">Poista syöte</string>
|
<string name="blogs_rss_remove_feed">Poista syöte</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Oletko varma, että haluat poistaa tämän syötteen?\n\nKirjoitukset poistuvat sinun laitteelta, mutta ei muiden laitteilta.\n\nKäyttäjät joiden kanssa olet jakanut tämän syötteen eivät välttämättä saa uusia päivityksiä.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Oletko varma, että haluat poistaa tämän syötteen?\n\nKirjoitukset poistuvat sinun laitteelta, mutta ei muiden laitteilta.\n\nKäyttäjät joiden kanssa olet jakanut tämän syötteen eivät välttämättä saa uusia päivityksiä.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Poista</string>
|
<string name="blogs_rss_remove_feed_ok">Poista</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Syötteen poistaminen epäonnistui!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Ei RSS syötteitä\n\nNapauta + nappia lisätäksesi syötteen</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Ei RSS syötteitä\n\nNapauta + nappia lisätäksesi syötteen</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Syötteiden lataamisessa tapahtui virhe. Yritä myöhemmin uudelleen.</string>
|
<string name="blogs_rss_feeds_manage_error">Syötteiden lataamisessa tapahtui virhe. Yritä myöhemmin uudelleen.</string>
|
||||||
<!--Settings Display-->
|
<!--Settings Display-->
|
||||||
|
|||||||
@@ -453,14 +453,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importer</string>
|
<string name="blogs_rss_feeds_import_button">Importer</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Saisir l’URL du fil RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Saisir l’URL du fil RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Nous sommes désolés ! Une erreur est survenue lors de l’importation de votre fil.</string>
|
<string name="blogs_rss_feeds_import_error">Nous sommes désolés ! Une erreur est survenue lors de l’importation de votre fil.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Gérer les fils RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importés :</string>
|
<string name="blogs_rss_feeds_manage_imported">Importés :</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Auteur :</string>
|
<string name="blogs_rss_feeds_manage_author">Auteur :</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Dernière mise à jour :</string>
|
<string name="blogs_rss_feeds_manage_updated">Dernière mise à jour :</string>
|
||||||
<string name="blogs_rss_remove_feed">Supprimer le fil</string>
|
<string name="blogs_rss_remove_feed">Supprimer le fil</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Voulez-vous vraiment supprimer ce fil ?\nLes billets seront supprimés de votre appareil mais pas des appareils d’autrui.\n\nLes contacts avec qui vous avez partagé ce fil pourraient ne plus en recevoir les mises à jour.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Voulez-vous vraiment supprimer ce fil ?\nLes billets seront supprimés de votre appareil mais pas des appareils d’autrui.\n\nLes contacts avec qui vous avez partagé ce fil pourraient ne plus en recevoir les mises à jour.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Supprimer</string>
|
<string name="blogs_rss_remove_feed_ok">Supprimer</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Impossible de supprimer le fil !</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Aucun fil RSS à afficher\n\nTouchez l’icône + pour importer un fil</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Aucun fil RSS à afficher\n\nTouchez l’icône + pour importer un fil</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Un problème est survenu lors du chargement de vos fils. Veuillez réessayer plus tard.</string>
|
<string name="blogs_rss_feeds_manage_error">Un problème est survenu lors du chargement de vos fils. Veuillez réessayer plus tard.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -454,14 +454,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importar</string>
|
<string name="blogs_rss_feeds_import_button">Importar</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Escribe o URL da fonte RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Escribe o URL da fonte RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Lamentámolo! Algo fallou ao importar a fonte.</string>
|
<string name="blogs_rss_feeds_import_error">Lamentámolo! Algo fallou ao importar a fonte.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Xestionar Fontes RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor/a:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor/a:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Última actualización:</string>
|
<string name="blogs_rss_feeds_manage_updated">Última actualización:</string>
|
||||||
<string name="blogs_rss_remove_feed">Eliminar fonte</string>
|
<string name="blogs_rss_remove_feed">Eliminar fonte</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Tes a certeza de querer eliminar esta fonte?\n\nAs entradas eliminaranse do teu dispositivo pero non dos dispositivos doutras persoas\n\nTodas as persoas coas que compartiches esta fonte poderían deixar de recibir actualizacións.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Tes a certeza de querer eliminar esta fonte?\n\nAs entradas eliminaranse do teu dispositivo pero non dos dispositivos doutras persoas\n\nTodas as persoas coas que compartiches esta fonte poderían deixar de recibir actualizacións.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Eliminar</string>
|
<string name="blogs_rss_remove_feed_ok">Eliminar</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Non se puido eliminar a fonte!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Sen fontes RSS que mostrar\n\nToque na icona + para importar unha fonte</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Sen fontes RSS que mostrar\n\nToque na icona + para importar unha fonte</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Aconteceu un problema ao cargar as túas fontes. Por favor, inténtao máis tarde.</string>
|
<string name="blogs_rss_feeds_manage_error">Aconteceu un problema ao cargar as túas fontes. Por favor, inténtao máis tarde.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -444,14 +444,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">ייבא</string>
|
<string name="blogs_rss_feeds_import_button">ייבא</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">הכנס את כתובת האתר של הזנת ה־RSS</string>
|
<string name="blogs_rss_feeds_import_hint">הכנס את כתובת האתר של הזנת ה־RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">אנחנו מצטערים! הייתה שגיאה ביבוא ההזנה שלך.</string>
|
<string name="blogs_rss_feeds_import_error">אנחנו מצטערים! הייתה שגיאה ביבוא ההזנה שלך.</string>
|
||||||
<string name="blogs_rss_feeds_manage">נהל הזנות RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">מיובא:</string>
|
<string name="blogs_rss_feeds_manage_imported">מיובא:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">מחבר:</string>
|
<string name="blogs_rss_feeds_manage_author">מחבר:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">עודכן לאחרונה:</string>
|
<string name="blogs_rss_feeds_manage_updated">עודכן לאחרונה:</string>
|
||||||
<string name="blogs_rss_remove_feed">הסר הזנה</string>
|
<string name="blogs_rss_remove_feed">הסר הזנה</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">האם אכן ברצונך להסיר הזנה זו?\n\nרשומות יוסרו ממכשירך אבל לא ממכשירים של אנשים אחרים.\n\nאנשי קשר כלשהם ששיתפת איתם הזנה זו עלולים להפסיק לקבל עדכונים.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">האם אכן ברצונך להסיר הזנה זו?\n\nרשומות יוסרו ממכשירך אבל לא ממכשירים של אנשים אחרים.\n\nאנשי קשר כלשהם ששיתפת איתם הזנה זו עלולים להפסיק לקבל עדכונים.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">הסר</string>
|
<string name="blogs_rss_remove_feed_ok">הסר</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">ההזנה לא יכלה להימחק!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">אין הזנות RSS להראות\n\nהקש על הצלמית + כדי לייבא הזנה</string>
|
<string name="blogs_rss_feeds_manage_empty_state">אין הזנות RSS להראות\n\nהקש על הצלמית + כדי לייבא הזנה</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">הייתה בעיה בטעינת ההזנות שלך. אנא נסה שוב מאוחר יותר.</string>
|
<string name="blogs_rss_feeds_manage_error">הייתה בעיה בטעינת ההזנות שלך. אנא נסה שוב מאוחר יותר.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -378,14 +378,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">आयात</string>
|
<string name="blogs_rss_feeds_import_button">आयात</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">आरएसएस फ़ीड का यूआरएल दर्ज करें</string>
|
<string name="blogs_rss_feeds_import_hint">आरएसएस फ़ीड का यूआरएल दर्ज करें</string>
|
||||||
<string name="blogs_rss_feeds_import_error">हमें खेद है! आपकी फ़ीड आयात करने में एक त्रुटि हुई</string>
|
<string name="blogs_rss_feeds_import_error">हमें खेद है! आपकी फ़ीड आयात करने में एक त्रुटि हुई</string>
|
||||||
<string name="blogs_rss_feeds_manage">आरएसएस फ़ीड प्रबंधित करें</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">आयातित:</string>
|
<string name="blogs_rss_feeds_manage_imported">आयातित:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">लेखक:</string>
|
<string name="blogs_rss_feeds_manage_author">लेखक:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">आखरी अपडेट:</string>
|
<string name="blogs_rss_feeds_manage_updated">आखरी अपडेट:</string>
|
||||||
<string name="blogs_rss_remove_feed">फ़ीड निकालें</string>
|
<string name="blogs_rss_remove_feed">फ़ीड निकालें</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">क्या आप वाकई इस फीड को हटाना चाहते हैं? \ N \ n पोस्ट आपके डिवाइस से हटा दिए जाएंगे, लेकिन अन्य लोगों के डिवाइस से नहीं। \ N \ n आपके द्वारा इस फ़ीड को साझा करने वाले किसी भी संपर्क को अपडेट प्राप्त करना बंद हो सकता है।</string>
|
<string name="blogs_rss_remove_feed_dialog_message">क्या आप वाकई इस फीड को हटाना चाहते हैं? \ N \ n पोस्ट आपके डिवाइस से हटा दिए जाएंगे, लेकिन अन्य लोगों के डिवाइस से नहीं। \ N \ n आपके द्वारा इस फ़ीड को साझा करने वाले किसी भी संपर्क को अपडेट प्राप्त करना बंद हो सकता है।</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">हटाना</string>
|
<string name="blogs_rss_remove_feed_ok">हटाना</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">फीड हटाया नहीं जा सका!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">कोई आरएसएस फ़ीड दिखाने के लिए फ़ीड नहीं करता \ n \ n फ़ीड आयात करने के लिए + आइकन टैप करें</string>
|
<string name="blogs_rss_feeds_manage_empty_state">कोई आरएसएस फ़ीड दिखाने के लिए फ़ीड नहीं करता \ n \ n फ़ीड आयात करने के लिए + आइकन टैप करें</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">आपकी फ़ीड लोड करने में एक समस्या थी बाद में पुन: प्रयास करें।</string>
|
<string name="blogs_rss_feeds_manage_error">आपकी फ़ीड लोड करने में एक समस्या थी बाद में पुन: प्रयास करें।</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -461,7 +461,6 @@ Kapcsolatai, akivel megosztotta ezt a blogot, lehet nem kapnak többé frissít
|
|||||||
<string name="blogs_rss_feeds_import_button">Importálás</string>
|
<string name="blogs_rss_feeds_import_button">Importálás</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Adja meg az RSS feed URL címét</string>
|
<string name="blogs_rss_feeds_import_hint">Adja meg az RSS feed URL címét</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Elnézését kérjük! Probléma akadt a feed-je importálásával.</string>
|
<string name="blogs_rss_feeds_import_error">Elnézését kérjük! Probléma akadt a feed-je importálásával.</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSS feed-ek kezelés</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importálva:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importálva:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Szerző:</string>
|
<string name="blogs_rss_feeds_manage_author">Szerző:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Utolsó frissítés:</string>
|
<string name="blogs_rss_feeds_manage_updated">Utolsó frissítés:</string>
|
||||||
@@ -469,7 +468,6 @@ Kapcsolatai, akivel megosztotta ezt a blogot, lehet nem kapnak többé frissít
|
|||||||
<string name="blogs_rss_remove_feed_dialog_message">Biztosan eltávolítja ezt a feed-et?
|
<string name="blogs_rss_remove_feed_dialog_message">Biztosan eltávolítja ezt a feed-et?
|
||||||
\n\nA bejegyzések törlődni fognak az Ön eszközéről, de nem a többi ember eszközéről.\n\nKapcsolatai, akivel megosztotta ezt a feed-et, lehet nem kapnak többé frissítést.</string>
|
\n\nA bejegyzések törlődni fognak az Ön eszközéről, de nem a többi ember eszközéről.\n\nKapcsolatai, akivel megosztotta ezt a feed-et, lehet nem kapnak többé frissítést.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Eltávolít</string>
|
<string name="blogs_rss_remove_feed_ok">Eltávolít</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">A feed nem törölhető!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nincs megjelenítendő</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nincs megjelenítendő</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Hiba történt a feed-jei betöltésével. Kérjük próbálja újra később.</string>
|
<string name="blogs_rss_feeds_manage_error">Hiba történt a feed-jei betöltésével. Kérjük próbálja újra később.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -454,14 +454,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Flytja inn</string>
|
<string name="blogs_rss_feeds_import_button">Flytja inn</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Settu inn slóðina á RSS-streymið</string>
|
<string name="blogs_rss_feeds_import_hint">Settu inn slóðina á RSS-streymið</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Því miður! Það kom upp villa við að flytja inn streymið.</string>
|
<string name="blogs_rss_feeds_import_error">Því miður! Það kom upp villa við að flytja inn streymið.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Sýsla með RSS-streymi</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Flutt inn:</string>
|
<string name="blogs_rss_feeds_manage_imported">Flutt inn:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Höfundur:</string>
|
<string name="blogs_rss_feeds_manage_author">Höfundur:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Síðast uppfært:</string>
|
<string name="blogs_rss_feeds_manage_updated">Síðast uppfært:</string>
|
||||||
<string name="blogs_rss_remove_feed">Fjarlægja streymi</string>
|
<string name="blogs_rss_remove_feed">Fjarlægja streymi</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Ertu viss um að þú viljir fjarlægja þetta streymi?\n\nFærslur verða fjarlægðar af tækinu þínu en ekki tækjum annars fólks.\n\nAllir tengiliðir sem þú hefur deilt þessu streymi með gætu hætt að fá uppfærslur.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Ertu viss um að þú viljir fjarlægja þetta streymi?\n\nFærslur verða fjarlægðar af tækinu þínu en ekki tækjum annars fólks.\n\nAllir tengiliðir sem þú hefur deilt þessu streymi með gætu hætt að fá uppfærslur.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Fjarlægja</string>
|
<string name="blogs_rss_remove_feed_ok">Fjarlægja</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Ekki var hægt að eyða streyminu!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Engin RSS-streymi til að birta\n\nÝttu á + táknið til að flytja inn streymi</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Engin RSS-streymi til að birta\n\nÝttu á + táknið til að flytja inn streymi</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Vandamál hefur komið upp með að hlaða inn streymunum þínum. Reyndu aftur síðar.</string>
|
<string name="blogs_rss_feeds_manage_error">Vandamál hefur komið upp með að hlaða inn streymunum þínum. Reyndu aftur síðar.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -420,14 +420,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importa</string>
|
<string name="blogs_rss_feeds_import_button">Importa</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Inserire l\'URL dell\'RSS feed</string>
|
<string name="blogs_rss_feeds_import_hint">Inserire l\'URL dell\'RSS feed</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Ci dispiace! C\'è stato un errore nell\'importazione del tuo feed.</string>
|
<string name="blogs_rss_feeds_import_error">Ci dispiace! C\'è stato un errore nell\'importazione del tuo feed.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Gestisci gli RSS Feed</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importato:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importato:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autore:</string>
|
<string name="blogs_rss_feeds_manage_author">Autore:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Ultimo Aggiornamento:</string>
|
<string name="blogs_rss_feeds_manage_updated">Ultimo Aggiornamento:</string>
|
||||||
<string name="blogs_rss_remove_feed">Rimuovi feed</string>
|
<string name="blogs_rss_remove_feed">Rimuovi feed</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Sei sicuro di voler rimuovere questo feed?\n\nI post saranno rimossi dal tuo dispositivo ma non dai dispositivi delle altre persone.\n\nTutti i contatti con cui hai condiviso questo feed potrebbero smettere di ricevere aggiornamenti.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Sei sicuro di voler rimuovere questo feed?\n\nI post saranno rimossi dal tuo dispositivo ma non dai dispositivi delle altre persone.\n\nTutti i contatti con cui hai condiviso questo feed potrebbero smettere di ricevere aggiornamenti.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Rimuovi</string>
|
<string name="blogs_rss_remove_feed_ok">Rimuovi</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Non è stato possibile cancellare il feed!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nessun feed RSS da mostrare\n\nClicca l\'icona + per importare un feed</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nessun feed RSS da mostrare\n\nClicca l\'icona + per importare un feed</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">C\'è stato un problema nel caricare i tuoi feeds. Per favore riprova fra poco.</string>
|
<string name="blogs_rss_feeds_manage_error">C\'è stato un problema nel caricare i tuoi feeds. Per favore riprova fra poco.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -369,14 +369,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">インポート</string>
|
<string name="blogs_rss_feeds_import_button">インポート</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">RSSフィードのURLを入力してください</string>
|
<string name="blogs_rss_feeds_import_hint">RSSフィードのURLを入力してください</string>
|
||||||
<string name="blogs_rss_feeds_import_error">申し訳ありません! フィードのインポート中にエラーが発生しました。</string>
|
<string name="blogs_rss_feeds_import_error">申し訳ありません! フィードのインポート中にエラーが発生しました。</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSSフィードを管理</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">インポート済み:</string>
|
<string name="blogs_rss_feeds_manage_imported">インポート済み:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">著者:</string>
|
<string name="blogs_rss_feeds_manage_author">著者:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">最終更新:</string>
|
<string name="blogs_rss_feeds_manage_updated">最終更新:</string>
|
||||||
<string name="blogs_rss_remove_feed">フィードを削除</string>
|
<string name="blogs_rss_remove_feed">フィードを削除</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">このフィードを削除してもよろしいですか?\n\n投稿はデバイスから削除されますが、他の人のデバイスからは削除されません。\n\nこのフィードを共有した人は更新の受信を停止されます。</string>
|
<string name="blogs_rss_remove_feed_dialog_message">このフィードを削除してもよろしいですか?\n\n投稿はデバイスから削除されますが、他の人のデバイスからは削除されません。\n\nこのフィードを共有した人は更新の受信を停止されます。</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">解除</string>
|
<string name="blogs_rss_remove_feed_ok">解除</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">フィードを削除できませんでした!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">表示するRSSフィードはありません\n\n「+」アイコンをタップしてフィードをインポートします</string>
|
<string name="blogs_rss_feeds_manage_empty_state">表示するRSSフィードはありません\n\n「+」アイコンをタップしてフィードをインポートします</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">フィードの読み込み中に問題が発生しました。 後でもう一度やり直してください。</string>
|
<string name="blogs_rss_feeds_manage_error">フィードの読み込み中に問題が発生しました。 後でもう一度やり直してください。</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -410,14 +410,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">가져오기</string>
|
<string name="blogs_rss_feeds_import_button">가져오기</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">RSS 피드 URL을 입력하세요</string>
|
<string name="blogs_rss_feeds_import_hint">RSS 피드 URL을 입력하세요</string>
|
||||||
<string name="blogs_rss_feeds_import_error">죄송합니다! 피드를 불러오는 과정에서 문제가 있었습니다.</string>
|
<string name="blogs_rss_feeds_import_error">죄송합니다! 피드를 불러오는 과정에서 문제가 있었습니다.</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSS 피드 관리하기</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">다음을 불러왔습니다:</string>
|
<string name="blogs_rss_feeds_manage_imported">다음을 불러왔습니다:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">작성자:</string>
|
<string name="blogs_rss_feeds_manage_author">작성자:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">최종 업데이트:</string>
|
<string name="blogs_rss_feeds_manage_updated">최종 업데이트:</string>
|
||||||
<string name="blogs_rss_remove_feed">피드 제거하기</string>
|
<string name="blogs_rss_remove_feed">피드 제거하기</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">정말로 이 피드를 제거하시겠어요?\n\n기기에서 게시물은 제거되지만 다른 사람의 기기에서는 제거되지 않습니다.\n\n이 피드를 공유하던 지인이 업데이트를 받지 못하게 될 수 있습니다. </string>
|
<string name="blogs_rss_remove_feed_dialog_message">정말로 이 피드를 제거하시겠어요?\n\n기기에서 게시물은 제거되지만 다른 사람의 기기에서는 제거되지 않습니다.\n\n이 피드를 공유하던 지인이 업데이트를 받지 못하게 될 수 있습니다. </string>
|
||||||
<string name="blogs_rss_remove_feed_ok">제거하기</string>
|
<string name="blogs_rss_remove_feed_ok">제거하기</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">피드를 삭제할 수 없었습니다!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">보여드릴 RSS 피드가 없습니다\n\n+ 상징을 눌러 피드를 불러오세요</string>
|
<string name="blogs_rss_feeds_manage_empty_state">보여드릴 RSS 피드가 없습니다\n\n+ 상징을 눌러 피드를 불러오세요</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">피드를 불러오는 과정에서 문제가 있었습니다. 나중에 다시 시도해 주세요.</string>
|
<string name="blogs_rss_feeds_manage_error">피드를 불러오는 과정에서 문제가 있었습니다. 나중에 다시 시도해 주세요.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -481,14 +481,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importuoti</string>
|
<string name="blogs_rss_feeds_import_button">Importuoti</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Įveskite RSS kanalo URL</string>
|
<string name="blogs_rss_feeds_import_hint">Įveskite RSS kanalo URL</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Atleiskite! Importuojant jūsų kanalą, įvyko klaida.</string>
|
<string name="blogs_rss_feeds_import_error">Atleiskite! Importuojant jūsų kanalą, įvyko klaida.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Tvarkyti RSS kanalus</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importuota:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importuota:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autorius:</string>
|
<string name="blogs_rss_feeds_manage_author">Autorius:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Paskutinį kartą atnaujinta:</string>
|
<string name="blogs_rss_feeds_manage_updated">Paskutinį kartą atnaujinta:</string>
|
||||||
<string name="blogs_rss_remove_feed">Šalinti kanalą</string>
|
<string name="blogs_rss_remove_feed">Šalinti kanalą</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Ar tikrai norite pašalinti šį kanalą?\n\nĮrašai bus pašalinti iš jūsų įrenginio, tačiau liks kitų žmonių įrenginiuose.\n\nBet kokie adresatai, su kuriais bendrinote šį kanalą, gali nustoti gauti atnaujinimus.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Ar tikrai norite pašalinti šį kanalą?\n\nĮrašai bus pašalinti iš jūsų įrenginio, tačiau liks kitų žmonių įrenginiuose.\n\nBet kokie adresatai, su kuriais bendrinote šį kanalą, gali nustoti gauti atnaujinimus.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Šalinti</string>
|
<string name="blogs_rss_remove_feed_ok">Šalinti</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Nepavyko ištrinti kanalo!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nėra rodytinų RSS kanalų\n\nNorėdami importuoti kanalą, bakstelėkite + piktogramą</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nėra rodytinų RSS kanalų\n\nNorėdami importuoti kanalą, bakstelėkite + piktogramą</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Įkeliant jūsų kanalus, atsirado problemų. Vėliau bandykite dar kartą.</string>
|
<string name="blogs_rss_feeds_manage_error">Įkeliant jūsų kanalus, atsirado problemų. Vėliau bandykite dar kartą.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -419,14 +419,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Увези</string>
|
<string name="blogs_rss_feeds_import_button">Увези</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Внеси URL на RSS тековник</string>
|
<string name="blogs_rss_feeds_import_hint">Внеси URL на RSS тековник</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Жал ни е! Настана гршка при увезувањето на вашиот тековник.</string>
|
<string name="blogs_rss_feeds_import_error">Жал ни е! Настана гршка при увезувањето на вашиот тековник.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Уредување на RSS тековници</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Увезени:</string>
|
<string name="blogs_rss_feeds_manage_imported">Увезени:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Последен пат ажуриран:</string>
|
<string name="blogs_rss_feeds_manage_updated">Последен пат ажуриран:</string>
|
||||||
<string name="blogs_rss_remove_feed">Отстрани тековник</string>
|
<string name="blogs_rss_remove_feed">Отстрани тековник</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Дали сте сигурни дека сакате да го отстраните овој тековник?\n\nОбјавите ќе бидат отстранети од вашиот уред но не и од уредите на другите луѓе.\n\nБило кои од контактите со кои сте го споделиле овој тековник може да престанат да добиваат ажурирања.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Дали сте сигурни дека сакате да го отстраните овој тековник?\n\nОбјавите ќе бидат отстранети од вашиот уред но не и од уредите на другите луѓе.\n\nБило кои од контактите со кои сте го споделиле овој тековник може да престанат да добиваат ажурирања.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Отстрани</string>
|
<string name="blogs_rss_remove_feed_ok">Отстрани</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Тековникот не може да биде избришан!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Нема RSS тековници за прикажување\n\nДопрете ја + иконата за да увезете тековник</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Нема RSS тековници за прикажување\n\nДопрете ја + иконата за да увезете тековник</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Настана проблем при вчитувањето на вашите тековници. Ве молиме обидете се повторно подоцна.</string>
|
<string name="blogs_rss_feeds_manage_error">Настана проблем при вчитувањето на вашите тековници. Ве молиме обидете се повторно подоцна.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -259,13 +259,11 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importer</string>
|
<string name="blogs_rss_feeds_import_button">Importer</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Skriv inn nettadresse for RSS-strøm</string>
|
<string name="blogs_rss_feeds_import_hint">Skriv inn nettadresse for RSS-strøm</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Vi beklager! Feil under importering av strøm.</string>
|
<string name="blogs_rss_feeds_import_error">Vi beklager! Feil under importering av strøm.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Behandle RSS-strømmer</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importert:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importert:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Forfatter:</string>
|
<string name="blogs_rss_feeds_manage_author">Forfatter:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Sist oppdatert:</string>
|
<string name="blogs_rss_feeds_manage_updated">Sist oppdatert:</string>
|
||||||
<string name="blogs_rss_remove_feed">Fjern strøm</string>
|
<string name="blogs_rss_remove_feed">Fjern strøm</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Fjern</string>
|
<string name="blogs_rss_remove_feed_ok">Fjern</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Strømmen kunne ikke fjernes!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_error">Feil ved lasting av dine strømmer. Prøv igjen senere.</string>
|
<string name="blogs_rss_feeds_manage_error">Feil ved lasting av dine strømmer. Prøv igjen senere.</string>
|
||||||
<!--Settings Display-->
|
<!--Settings Display-->
|
||||||
<string name="display_settings_title">Vis</string>
|
<string name="display_settings_title">Vis</string>
|
||||||
|
|||||||
@@ -420,14 +420,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importeer</string>
|
<string name="blogs_rss_feeds_import_button">Importeer</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Voer de URL van de RSS-feed in</string>
|
<string name="blogs_rss_feeds_import_hint">Voer de URL van de RSS-feed in</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Excuses! Er trad een fout op bij het importeren van je feed.</string>
|
<string name="blogs_rss_feeds_import_error">Excuses! Er trad een fout op bij het importeren van je feed.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Beheer RSS-feeds</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Geïmporteerd:</string>
|
<string name="blogs_rss_feeds_manage_imported">Geïmporteerd:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Auteur:</string>
|
<string name="blogs_rss_feeds_manage_author">Auteur:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Laatst bijgewerkt:</string>
|
<string name="blogs_rss_feeds_manage_updated">Laatst bijgewerkt:</string>
|
||||||
<string name="blogs_rss_remove_feed">Verwijder feed</string>
|
<string name="blogs_rss_remove_feed">Verwijder feed</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Weet je zeker dat je deze feed wil verwijderen?\n\nPosts zullen van je apparaat worden verwijderd maar niet van apparaten van andere mensen.\n\nContacten met wie je deze feed hebt gedeeld zullen geen updates meer ontvangen.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Weet je zeker dat je deze feed wil verwijderen?\n\nPosts zullen van je apparaat worden verwijderd maar niet van apparaten van andere mensen.\n\nContacten met wie je deze feed hebt gedeeld zullen geen updates meer ontvangen.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Verwijderen</string>
|
<string name="blogs_rss_remove_feed_ok">Verwijderen</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">De feed kon niet worden verwijderd.</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Geen RSS-feeds om te tonen\n\nTik op het +-icoon om een feed te importeren</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Geen RSS-feeds om te tonen\n\nTik op het +-icoon om een feed te importeren</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Er was een probleem met het laden van je feeds. Probeer het alsjeblieft later nog een keer.</string>
|
<string name="blogs_rss_feeds_manage_error">Er was een probleem met het laden van je feeds. Probeer het alsjeblieft later nog een keer.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -392,7 +392,6 @@ Volètz suprimir vòstre compte e ne crear un nòu ?\n
|
|||||||
<string name="blogs_rss_feeds_import_button">Importar</string>
|
<string name="blogs_rss_feeds_import_button">Importar</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Marcar l’URL del flux RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Marcar l’URL del flux RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Una error s’es produisida en importar lo flux</string>
|
<string name="blogs_rss_feeds_import_error">Una error s’es produisida en importar lo flux</string>
|
||||||
<string name="blogs_rss_feeds_manage">Gerir lo flux RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importat :</string>
|
<string name="blogs_rss_feeds_manage_imported">Importat :</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor :</string>
|
<string name="blogs_rss_feeds_manage_author">Autor :</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Darrièra mesa a jorn :</string>
|
<string name="blogs_rss_feeds_manage_updated">Darrièra mesa a jorn :</string>
|
||||||
@@ -402,7 +401,6 @@ levadas de vòstre aparelh mas pas dels aparelhs del monde.\n\nTotes los
|
|||||||
contactes qu’avètz partejat aqueste flux quitaràn benlèu de recebre las mesas
|
contactes qu’avètz partejat aqueste flux quitaràn benlèu de recebre las mesas
|
||||||
a jorn.</string>
|
a jorn.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Suprimir</string>
|
<string name="blogs_rss_remove_feed_ok">Suprimir</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Impossible de suprimir lo flux !</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Cap de flux RSS de far veire.\n\nTocatz l’icòna + per n’importar un</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Cap de flux RSS de far veire.\n\nTocatz l’icòna + per n’importar un</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Error en cargar vòstres fluxes. Ensajatz mai tard.</string>
|
<string name="blogs_rss_feeds_manage_error">Error en cargar vòstres fluxes. Ensajatz mai tard.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -400,14 +400,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Zaimportuj</string>
|
<string name="blogs_rss_feeds_import_button">Zaimportuj</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Wprowadź adres URL do kanału RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Wprowadź adres URL do kanału RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Przepraszamy! Wystąpił błąd podczas importowania twojego kanału RSS</string>
|
<string name="blogs_rss_feeds_import_error">Przepraszamy! Wystąpił błąd podczas importowania twojego kanału RSS</string>
|
||||||
<string name="blogs_rss_feeds_manage">Zarządzaj kanałami RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Zaimportowane:</string>
|
<string name="blogs_rss_feeds_manage_imported">Zaimportowane:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Ostatnio Zaktualizowane:</string>
|
<string name="blogs_rss_feeds_manage_updated">Ostatnio Zaktualizowane:</string>
|
||||||
<string name="blogs_rss_remove_feed">Usuń kanał RSS</string>
|
<string name="blogs_rss_remove_feed">Usuń kanał RSS</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Jesteś pewny, że chcesz usunąć ten kanał RSS?\n\nPosty będą usunięte z Twojego urządzenia, ale nie z urządzeń innych ludzi.\n\nWszystkie kontakty którym udostępniłeś ten kanał mogą przestać otrzymywać jego uaktualnienia</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Jesteś pewny, że chcesz usunąć ten kanał RSS?\n\nPosty będą usunięte z Twojego urządzenia, ale nie z urządzeń innych ludzi.\n\nWszystkie kontakty którym udostępniłeś ten kanał mogą przestać otrzymywać jego uaktualnienia</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Usuń</string>
|
<string name="blogs_rss_remove_feed_ok">Usuń</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Kanał nie mógł zostać usunięty!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Brak RSS do wyświetlenia\n\nDotknij ikonki + aby zaimportować kanał.</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Brak RSS do wyświetlenia\n\nDotknij ikonki + aby zaimportować kanał.</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Wystąpił problem podczas ładowania twoich kanałów RSS. Proszę spróbować ponownie później.</string>
|
<string name="blogs_rss_feeds_manage_error">Wystąpił problem podczas ładowania twoich kanałów RSS. Proszę spróbować ponownie później.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -420,14 +420,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importar</string>
|
<string name="blogs_rss_feeds_import_button">Importar</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Entre a URL do feed RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Entre a URL do feed RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Nós lamentamos! Houve um erro ao importar seu Feed.</string>
|
<string name="blogs_rss_feeds_import_error">Nós lamentamos! Houve um erro ao importar seu Feed.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Gerenciar Feeds RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importado:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Última Atualização:</string>
|
<string name="blogs_rss_feeds_manage_updated">Última Atualização:</string>
|
||||||
<string name="blogs_rss_remove_feed">Remover Feed</string>
|
<string name="blogs_rss_remove_feed">Remover Feed</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Você tem certeza que deseja remover este feed?\n\nOs posts serão removidos do seus dispositivo mas não dos dispositivos de outras pessoas.\n\nContatos com quem você tenha compartilhado este feed vão parar de receber atualizações dele.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Você tem certeza que deseja remover este feed?\n\nOs posts serão removidos do seus dispositivo mas não dos dispositivos de outras pessoas.\n\nContatos com quem você tenha compartilhado este feed vão parar de receber atualizações dele.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Remover</string>
|
<string name="blogs_rss_remove_feed_ok">Remover</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">O Feed não pode ser deletado!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nenhum feed RSS para ser exibido\n\nPressione o ícone + para importar um feed</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nenhum feed RSS para ser exibido\n\nPressione o ícone + para importar um feed</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Houve um problema ao carregar seus Feeds. Por favor tente novamente.</string>
|
<string name="blogs_rss_feeds_manage_error">Houve um problema ao carregar seus Feeds. Por favor tente novamente.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -445,14 +445,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importă</string>
|
<string name="blogs_rss_feeds_import_button">Importă</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Introduceți URL-ul fluxului RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Introduceți URL-ul fluxului RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Ne pare rău! A apărut o eroare la importul fluxului dumneavoastră.</string>
|
<string name="blogs_rss_feeds_import_error">Ne pare rău! A apărut o eroare la importul fluxului dumneavoastră.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Administrare fluxuri RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importat:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importat:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Actualizat ultima dată:</string>
|
<string name="blogs_rss_feeds_manage_updated">Actualizat ultima dată:</string>
|
||||||
<string name="blogs_rss_remove_feed">Șterge flux</string>
|
<string name="blogs_rss_remove_feed">Șterge flux</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Sunteți siguri că doriți să eliminați acest flux?\n\nMesajele vor fi eliminate de pe dispozitiv, dar nu și de pe dispozitivele altor persoane.\n\nOrice persoană de contact către care ați distribuit acest flux s-ar putea sa nu mai primească actualizări.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Sunteți siguri că doriți să eliminați acest flux?\n\nMesajele vor fi eliminate de pe dispozitiv, dar nu și de pe dispozitivele altor persoane.\n\nOrice persoană de contact către care ați distribuit acest flux s-ar putea sa nu mai primească actualizări.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Eliminare</string>
|
<string name="blogs_rss_remove_feed_ok">Eliminare</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Fluxul nu a putut fi șters!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nici un flux RSS de arătat\n\nAtingeți iconița + pentru a adăuga un flux</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Nici un flux RSS de arătat\n\nAtingeți iconița + pentru a adăuga un flux</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">A apărut o eroare la încărcarea fluxurilor dumneavoastră. Vă rugăm să încercați din nou mai târziu.</string>
|
<string name="blogs_rss_feeds_manage_error">A apărut o eroare la încărcarea fluxurilor dumneavoastră. Vă rugăm să încercați din nou mai târziu.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -476,14 +476,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Импорт</string>
|
<string name="blogs_rss_feeds_import_button">Импорт</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Введите URL-адрес RSS-ленты</string>
|
<string name="blogs_rss_feeds_import_hint">Введите URL-адрес RSS-ленты</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Мы сожалеем! Произошла ошибка при импорте ленты.</string>
|
<string name="blogs_rss_feeds_import_error">Мы сожалеем! Произошла ошибка при импорте ленты.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Управление RSS-лентами</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Импортирован:</string>
|
<string name="blogs_rss_feeds_manage_imported">Импортирован:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Последнее обновление:</string>
|
<string name="blogs_rss_feeds_manage_updated">Последнее обновление:</string>
|
||||||
<string name="blogs_rss_remove_feed">Удалить RSS-ленту</string>
|
<string name="blogs_rss_remove_feed">Удалить RSS-ленту</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Вы уверены, что хотите удалить эту ленту?\n\nПосты будут удалены только с вашего устройства.\n\nВсе контакты, с которыми вы поделились этой лентой, могут перестать получать обновления.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Вы уверены, что хотите удалить эту ленту?\n\nПосты будут удалены только с вашего устройства.\n\nВсе контакты, с которыми вы поделились этой лентой, могут перестать получать обновления.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Удалить</string>
|
<string name="blogs_rss_remove_feed_ok">Удалить</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Не удалось удалить ленту!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Нет RSS-лент для отображения\n\nКоснитесь значка + для импорта ленты</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Нет RSS-лент для отображения\n\nКоснитесь значка + для импорта ленты</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Ошибка при загрузке вашей ленты. Повторите попытку позже.</string>
|
<string name="blogs_rss_feeds_manage_error">Ошибка при загрузке вашей ленты. Повторите попытку позже.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -457,14 +457,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importo</string>
|
<string name="blogs_rss_feeds_import_button">Importo</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Jepni URL-në e prurjes RSS</string>
|
<string name="blogs_rss_feeds_import_hint">Jepni URL-në e prurjes RSS</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Na ndjeni! Pati një gabim me importimin e prurjes tuaj.</string>
|
<string name="blogs_rss_feeds_import_error">Na ndjeni! Pati një gabim me importimin e prurjes tuaj.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Administroni Prurje RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Të importuara:</string>
|
<string name="blogs_rss_feeds_manage_imported">Të importuara:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Përditësuar Së Fundi:</string>
|
<string name="blogs_rss_feeds_manage_updated">Përditësuar Së Fundi:</string>
|
||||||
<string name="blogs_rss_remove_feed">Hiqe Prurjen</string>
|
<string name="blogs_rss_remove_feed">Hiqe Prurjen</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Jeni i sigurt se doni të hiqet kjo prurje?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e personave të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë prurje mund të reshtin së marri përditësime.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Jeni i sigurt se doni të hiqet kjo prurje?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e personave të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë prurje mund të reshtin së marri përditësime.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Hiqe</string>
|
<string name="blogs_rss_remove_feed_ok">Hiqe</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">S\’u fshi dot prurja!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">S’ka prurje RSS për shfaqje\n\nPrekni ikonën + që të importohet një prurje</string>
|
<string name="blogs_rss_feeds_manage_empty_state">S’ka prurje RSS për shfaqje\n\nPrekni ikonën + që të importohet një prurje</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Pati një problem me ngarkimin e prurjeve tuaja. Ju lutemi, riprovoni më vonë.</string>
|
<string name="blogs_rss_feeds_manage_error">Pati një problem me ngarkimin e prurjeve tuaja. Ju lutemi, riprovoni më vonë.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -340,7 +340,6 @@ Kontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti
|
|||||||
<string name="blogs_rss_feeds_import_button">Uvezi</string>
|
<string name="blogs_rss_feeds_import_button">Uvezi</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Unesi URL od RSS kanala</string>
|
<string name="blogs_rss_feeds_import_hint">Unesi URL od RSS kanala</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Žao nam je! Došlo je do greške pri unosu vašeg kanala.</string>
|
<string name="blogs_rss_feeds_import_error">Žao nam je! Došlo je do greške pri unosu vašeg kanala.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Rukujte RSS kanalima</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Uvezeno:</string>
|
<string name="blogs_rss_feeds_manage_imported">Uvezeno:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Zadnje ažuriranje:</string>
|
<string name="blogs_rss_feeds_manage_updated">Zadnje ažuriranje:</string>
|
||||||
@@ -351,7 +350,6 @@ Postovi će biti uklonjeni sa vašeg uređaja ali ne is uređaja drugih ljudi.
|
|||||||
|
|
||||||
Kontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.</string>
|
Kontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Ukloni</string>
|
<string name="blogs_rss_remove_feed_ok">Ukloni</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Kanal nije bilo moguće ukloniti!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Nema RSS kanala za prikazivanje
|
<string name="blogs_rss_feeds_manage_empty_state">Nema RSS kanala za prikazivanje
|
||||||
|
|
||||||
Dotaknite + ikonu da uvezete kanal</string>
|
Dotaknite + ikonu da uvezete kanal</string>
|
||||||
|
|||||||
@@ -420,14 +420,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Importera</string>
|
<string name="blogs_rss_feeds_import_button">Importera</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Skriv URL till RSS-flödet</string>
|
<string name="blogs_rss_feeds_import_hint">Skriv URL till RSS-flödet</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Tyvärr! Något gick fel när flödet skulle importeras.</string>
|
<string name="blogs_rss_feeds_import_error">Tyvärr! Något gick fel när flödet skulle importeras.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Hantera RSS-flöden</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Importerade:</string>
|
<string name="blogs_rss_feeds_manage_imported">Importerade:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Författare:</string>
|
<string name="blogs_rss_feeds_manage_author">Författare:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Senast uppdaterad:</string>
|
<string name="blogs_rss_feeds_manage_updated">Senast uppdaterad:</string>
|
||||||
<string name="blogs_rss_remove_feed">Ta bort flöde</string>
|
<string name="blogs_rss_remove_feed">Ta bort flöde</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Är du säker på att du vill ta bort det här flödet?\n\nInlägg kommer att tas bort från din enhet, men inte från andras.\n\nKontakter som du har delat det här flödet med kommer kanske inte längre få uppdateringar från det.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Är du säker på att du vill ta bort det här flödet?\n\nInlägg kommer att tas bort från din enhet, men inte från andras.\n\nKontakter som du har delat det här flödet med kommer kanske inte längre få uppdateringar från det.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">&Ta bort</string>
|
<string name="blogs_rss_remove_feed_ok">&Ta bort</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Flödet kunde ej tas bort!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Inga RSS-flöden\n\nTryck plus-ikonen (+) för att importera ett flöde</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Inga RSS-flöden\n\nTryck plus-ikonen (+) för att importera ett flöde</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Något gick fel när dina flöden skulle laddas. Försök ingen senare.</string>
|
<string name="blogs_rss_feeds_manage_error">Något gick fel när dina flöden skulle laddas. Försök ingen senare.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -400,7 +400,6 @@ Umepoteza nenosiri.</string>
|
|||||||
<string name="blogs_rss_feeds_import_button">Ingiza</string>
|
<string name="blogs_rss_feeds_import_button">Ingiza</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Ingiza URL za RSS taarifa</string>
|
<string name="blogs_rss_feeds_import_hint">Ingiza URL za RSS taarifa</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Samahani! Kulikuwa na hitilafu wakati wakuingiza taarifa </string>
|
<string name="blogs_rss_feeds_import_error">Samahani! Kulikuwa na hitilafu wakati wakuingiza taarifa </string>
|
||||||
<string name="blogs_rss_feeds_manage">Simamia taarifa za RSS</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Zilizoingizwa</string>
|
<string name="blogs_rss_feeds_manage_imported">Zilizoingizwa</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Mwandishi:</string>
|
<string name="blogs_rss_feeds_manage_author">Mwandishi:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">huwisho la mwisho
|
<string name="blogs_rss_feeds_manage_updated">huwisho la mwisho
|
||||||
@@ -408,7 +407,6 @@ Umepoteza nenosiri.</string>
|
|||||||
<string name="blogs_rss_remove_feed">Ondoa taarifa</string>
|
<string name="blogs_rss_remove_feed">Ondoa taarifa</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Unauhakika unataka kutoa hii taarifa?\n\nChapisho lako litaondolewa kwenye kifaa chako ila sio kwenye vifaa vya watu wengine.\n\nMawasiliano yoyote utliokwisha kuyaunganisha wanaweza wasiendelea kupata taarifa. </string>
|
<string name="blogs_rss_remove_feed_dialog_message">Unauhakika unataka kutoa hii taarifa?\n\nChapisho lako litaondolewa kwenye kifaa chako ila sio kwenye vifaa vya watu wengine.\n\nMawasiliano yoyote utliokwisha kuyaunganisha wanaweza wasiendelea kupata taarifa. </string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Ondoa</string>
|
<string name="blogs_rss_remove_feed_ok">Ondoa</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Taharifa haziwezekani kuzifuta! </string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Hakuna RSS taharifa zaku onyesha\n\nBonyeza + ikoni kuleta taharifa </string>
|
<string name="blogs_rss_feeds_manage_empty_state">Hakuna RSS taharifa zaku onyesha\n\nBonyeza + ikoni kuleta taharifa </string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Kulikuwa na tatizo la kufungua taharifa . Tafathali jaribu baadae kidogo.</string>
|
<string name="blogs_rss_feeds_manage_error">Kulikuwa na tatizo la kufungua taharifa . Tafathali jaribu baadae kidogo.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -454,14 +454,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">İçe Aktar</string>
|
<string name="blogs_rss_feeds_import_button">İçe Aktar</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">RSS beslemesi URL\'sini girin</string>
|
<string name="blogs_rss_feeds_import_hint">RSS beslemesi URL\'sini girin</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Üzgünüz! RSS beslemeniz içe aktarılırken bir hata oluştu.</string>
|
<string name="blogs_rss_feeds_import_error">Üzgünüz! RSS beslemeniz içe aktarılırken bir hata oluştu.</string>
|
||||||
<string name="blogs_rss_feeds_manage">RSS Beslemelerini Yönet</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">İçe Aktarıldı:</string>
|
<string name="blogs_rss_feeds_manage_imported">İçe Aktarıldı:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Yazar:</string>
|
<string name="blogs_rss_feeds_manage_author">Yazar:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Son Güncelleme:</string>
|
<string name="blogs_rss_feeds_manage_updated">Son Güncelleme:</string>
|
||||||
<string name="blogs_rss_remove_feed">Beslemeyi Kaldır</string>
|
<string name="blogs_rss_remove_feed">Beslemeyi Kaldır</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Bu beslemeyi kaldırmak istediğinizden emin misiniz?\n\nGönderiler sizin aygıtınızdan değil, diğer insanların aygıtlarından kaldırılacaktır.\n\nBu beslemeyi paylaştığınız kişiler güncellemeleri alması durabilir.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Bu beslemeyi kaldırmak istediğinizden emin misiniz?\n\nGönderiler sizin aygıtınızdan değil, diğer insanların aygıtlarından kaldırılacaktır.\n\nBu beslemeyi paylaştığınız kişiler güncellemeleri alması durabilir.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Kaldır</string>
|
<string name="blogs_rss_remove_feed_ok">Kaldır</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Besleme silinemedi!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Gösterilecek RSS beslemesi yok\n\nBir beslemeyi içe aktarmak için + simgesine dokunun</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Gösterilecek RSS beslemesi yok\n\nBir beslemeyi içe aktarmak için + simgesine dokunun</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Beslemeleriniz yüklenirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.</string>
|
<string name="blogs_rss_feeds_manage_error">Beslemeleriniz yüklenirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -400,14 +400,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Імпортувати</string>
|
<string name="blogs_rss_feeds_import_button">Імпортувати</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Введіть URL-посилання RSS-стрічки</string>
|
<string name="blogs_rss_feeds_import_hint">Введіть URL-посилання RSS-стрічки</string>
|
||||||
<string name="blogs_rss_feeds_import_error">Нам шкода! Виникла помилка під час імпорту вашої стрічки.</string>
|
<string name="blogs_rss_feeds_import_error">Нам шкода! Виникла помилка під час імпорту вашої стрічки.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Kерувати RSS-стрічками</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">Імпортовано:</string>
|
<string name="blogs_rss_feeds_manage_imported">Імпортовано:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
<string name="blogs_rss_feeds_manage_author">Автор:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Востаннє оновлювалося:</string>
|
<string name="blogs_rss_feeds_manage_updated">Востаннє оновлювалося:</string>
|
||||||
<string name="blogs_rss_remove_feed">Видалити стрічку</string>
|
<string name="blogs_rss_remove_feed">Видалити стрічку</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Ви впевнені, що хочете видалити цю стрічку?\n\nДописи буде видалено з вашого пристрою, але не з пристроїв інших осіб.\n\nБудь-хто з контактів, з якими ви поділилися цією стрічкою, можуть припинити отримувати оноволення.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Ви впевнені, що хочете видалити цю стрічку?\n\nДописи буде видалено з вашого пристрою, але не з пристроїв інших осіб.\n\nБудь-хто з контактів, з якими ви поділилися цією стрічкою, можуть припинити отримувати оноволення.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Вилучити</string>
|
<string name="blogs_rss_remove_feed_ok">Вилучити</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">Ця стрічка не може бути видалена!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">Немає RSS-стрічок до відображення\n\nНатисніть на символ \"+\", щоб імпортувати стрічку</string>
|
<string name="blogs_rss_feeds_manage_empty_state">Немає RSS-стрічок до відображення\n\nНатисніть на символ \"+\", щоб імпортувати стрічку</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">Під час завантаження ваших стрічок виникла проблема. Будь ласка, спробуйте пізніше.</string>
|
<string name="blogs_rss_feeds_manage_error">Під час завантаження ваших стрічок виникла проблема. Будь ласка, спробуйте пізніше.</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -444,14 +444,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">导入</string>
|
<string name="blogs_rss_feeds_import_button">导入</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">输入 RSS 订阅源链接</string>
|
<string name="blogs_rss_feeds_import_hint">输入 RSS 订阅源链接</string>
|
||||||
<string name="blogs_rss_feeds_import_error">抱歉!导入订阅源时发生错误。</string>
|
<string name="blogs_rss_feeds_import_error">抱歉!导入订阅源时发生错误。</string>
|
||||||
<string name="blogs_rss_feeds_manage">管理 RSS 订阅源</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">已导入:</string>
|
<string name="blogs_rss_feeds_manage_imported">已导入:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">作者:</string>
|
<string name="blogs_rss_feeds_manage_author">作者:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">最后更新于:</string>
|
<string name="blogs_rss_feeds_manage_updated">最后更新于:</string>
|
||||||
<string name="blogs_rss_remove_feed">删除订阅源</string>
|
<string name="blogs_rss_remove_feed">删除订阅源</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">确认要删除该订阅源吗?\n\n博文将从您的设备上移除,但仍将存在于其他人的设备。\n\n那些经过您的分享而订阅该源的联系人可能不会再收到更新。</string>
|
<string name="blogs_rss_remove_feed_dialog_message">确认要删除该订阅源吗?\n\n博文将从您的设备上移除,但仍将存在于其他人的设备。\n\n那些经过您的分享而订阅该源的联系人可能不会再收到更新。</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">删除</string>
|
<string name="blogs_rss_remove_feed_ok">删除</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">该订阅源无法被删除!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">尚无订阅源可供显示\n\n轻按 + 号导入一个订阅源</string>
|
<string name="blogs_rss_feeds_manage_empty_state">尚无订阅源可供显示\n\n轻按 + 号导入一个订阅源</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">加载订阅源时出错。请稍候再试。</string>
|
<string name="blogs_rss_feeds_manage_error">加载订阅源时出错。请稍候再试。</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -362,14 +362,12 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">導入</string>
|
<string name="blogs_rss_feeds_import_button">導入</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">輸入 RSS 訂閱源鏈接</string>
|
<string name="blogs_rss_feeds_import_hint">輸入 RSS 訂閱源鏈接</string>
|
||||||
<string name="blogs_rss_feeds_import_error">抱歉!導入訂閱源時發生錯誤。</string>
|
<string name="blogs_rss_feeds_import_error">抱歉!導入訂閱源時發生錯誤。</string>
|
||||||
<string name="blogs_rss_feeds_manage">管理 RSS 訂閱源</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_imported">已導入:</string>
|
<string name="blogs_rss_feeds_manage_imported">已導入:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">作者:</string>
|
<string name="blogs_rss_feeds_manage_author">作者:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">最後更新於:</string>
|
<string name="blogs_rss_feeds_manage_updated">最後更新於:</string>
|
||||||
<string name="blogs_rss_remove_feed">刪除訂閱源</string>
|
<string name="blogs_rss_remove_feed">刪除訂閱源</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">確認要刪除該訂閱源嗎?\n\n博文將從您的裝置上移除,但仍將存在於其他人的裝置。\n\n那些經過您的分享而訂閱該源的聯絡人可能不會再收到更新。</string>
|
<string name="blogs_rss_remove_feed_dialog_message">確認要刪除該訂閱源嗎?\n\n博文將從您的裝置上移除,但仍將存在於其他人的裝置。\n\n那些經過您的分享而訂閱該源的聯絡人可能不會再收到更新。</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">刪除</string>
|
<string name="blogs_rss_remove_feed_ok">刪除</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">無法刪除這訂閱源!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">尚無訂閱源可供顯示\n\n輕按 + 號導入訂閱源</string>
|
<string name="blogs_rss_feeds_manage_empty_state">尚無訂閱源可供顯示\n\n輕按 + 號導入訂閱源</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">加載訂閱源時出錯。請稍候再試。</string>
|
<string name="blogs_rss_feeds_manage_error">加載訂閱源時出錯。請稍候再試。</string>
|
||||||
<!--Settings Profile Picture-->
|
<!--Settings Profile Picture-->
|
||||||
|
|||||||
@@ -486,14 +486,14 @@
|
|||||||
<string name="blogs_rss_feeds_import_button">Import</string>
|
<string name="blogs_rss_feeds_import_button">Import</string>
|
||||||
<string name="blogs_rss_feeds_import_hint">Enter the URL of the RSS feed</string>
|
<string name="blogs_rss_feeds_import_hint">Enter the URL of the RSS feed</string>
|
||||||
<string name="blogs_rss_feeds_import_error">We are sorry! There was an error importing your feed.</string>
|
<string name="blogs_rss_feeds_import_error">We are sorry! There was an error importing your feed.</string>
|
||||||
<string name="blogs_rss_feeds_manage">Manage RSS Feeds</string>
|
<string name="blogs_rss_feeds_import_exists">That feed is already imported.</string>
|
||||||
|
<string name="blogs_rss_feeds">RSS Feeds</string>
|
||||||
<string name="blogs_rss_feeds_manage_imported">Imported:</string>
|
<string name="blogs_rss_feeds_manage_imported">Imported:</string>
|
||||||
<string name="blogs_rss_feeds_manage_author">Author:</string>
|
<string name="blogs_rss_feeds_manage_author">Author:</string>
|
||||||
<string name="blogs_rss_feeds_manage_updated">Last Updated:</string>
|
<string name="blogs_rss_feeds_manage_updated">Last Updated:</string>
|
||||||
<string name="blogs_rss_remove_feed">Remove Feed</string>
|
<string name="blogs_rss_remove_feed">Remove Feed</string>
|
||||||
<string name="blogs_rss_remove_feed_dialog_message">Are you sure that you want to remove this feed?\n\nPosts will be removed from your device but not from other people\'s devices.\n\nAny contacts you\'ve shared this feed with might stop receiving updates.</string>
|
<string name="blogs_rss_remove_feed_dialog_message">Are you sure that you want to remove this feed?\n\nPosts will be removed from your device but not from other people\'s devices.\n\nAny contacts you\'ve shared this feed with might stop receiving updates.</string>
|
||||||
<string name="blogs_rss_remove_feed_ok">Remove</string>
|
<string name="blogs_rss_remove_feed_ok">Remove</string>
|
||||||
<string name="blogs_rss_feeds_manage_delete_error">The feed could not be deleted!</string>
|
|
||||||
<string name="blogs_rss_feeds_manage_empty_state">No RSS feeds to show\n\nTap the + icon to import a feed</string>
|
<string name="blogs_rss_feeds_manage_empty_state">No RSS feeds to show\n\nTap the + icon to import a feed</string>
|
||||||
<string name="blogs_rss_feeds_manage_error">There was a problem loading your feeds. Please try again later.</string>
|
<string name="blogs_rss_feeds_manage_error">There was a problem loading your feeds. Please try again later.</string>
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import javax.annotation.concurrent.Immutable;
|
|||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
public class Feed {
|
public class Feed implements Comparable<Feed> {
|
||||||
|
|
||||||
private final String url;
|
private final String url;
|
||||||
private final Blog blog;
|
private final Blog blog;
|
||||||
@@ -94,4 +94,13 @@ public class Feed {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Feed o) {
|
||||||
|
if (this == o) return 0;
|
||||||
|
long aTime = getAdded(), bTime = o.getAdded();
|
||||||
|
if (aTime > bTime) return -1;
|
||||||
|
if (aTime < bTime) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.briar.api.feed;
|
package org.briarproject.briar.api.feed;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.sync.ClientId;
|
import org.briarproject.bramble.api.sync.ClientId;
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ public interface FeedManager {
|
|||||||
/**
|
/**
|
||||||
* Adds an RSS feed as a new dedicated blog.
|
* Adds an RSS feed as a new dedicated blog.
|
||||||
*/
|
*/
|
||||||
void addFeed(String url) throws DbException, IOException;
|
Feed addFeed(String url) throws DbException, IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an RSS feed.
|
* Removes an RSS feed.
|
||||||
@@ -35,4 +36,8 @@ public interface FeedManager {
|
|||||||
*/
|
*/
|
||||||
List<Feed> getFeeds() throws DbException;
|
List<Feed> getFeeds() throws DbException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of all added RSS feeds
|
||||||
|
*/
|
||||||
|
List<Feed> getFeeds(Transaction txn) throws DbException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addFeed(String url) throws DbException, IOException {
|
public Feed addFeed(String url) throws DbException, IOException {
|
||||||
// fetch syndication feed to get its metadata
|
// fetch syndication feed to get its metadata
|
||||||
SyndFeed f = fetchSyndFeed(url);
|
SyndFeed f = fetchSyndFeed(url);
|
||||||
|
|
||||||
@@ -198,6 +198,8 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
|
|||||||
} finally {
|
} finally {
|
||||||
db.endTransaction(txn);
|
db.endTransaction(txn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return updatedFeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -232,18 +234,11 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Feed> getFeeds() throws DbException {
|
public List<Feed> getFeeds() throws DbException {
|
||||||
List<Feed> feeds;
|
return db.transactionWithResult(true, this::getFeeds);
|
||||||
Transaction txn = db.startTransaction(true);
|
|
||||||
try {
|
|
||||||
feeds = getFeeds(txn);
|
|
||||||
db.commitTransaction(txn);
|
|
||||||
} finally {
|
|
||||||
db.endTransaction(txn);
|
|
||||||
}
|
|
||||||
return feeds;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Feed> getFeeds(Transaction txn) throws DbException {
|
@Override
|
||||||
|
public List<Feed> getFeeds(Transaction txn) throws DbException {
|
||||||
List<Feed> feeds = new ArrayList<>();
|
List<Feed> feeds = new ArrayList<>();
|
||||||
Group g = getLocalGroup();
|
Group g = getLocalGroup();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.briarproject.bramble.api.sync.Message;
|
|||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
import org.briarproject.bramble.api.system.TaskScheduler;
|
import org.briarproject.bramble.api.system.TaskScheduler;
|
||||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||||
|
import org.briarproject.bramble.test.DbExpectations;
|
||||||
import org.briarproject.bramble.test.ImmediateExecutor;
|
import org.briarproject.bramble.test.ImmediateExecutor;
|
||||||
import org.briarproject.briar.api.blog.Blog;
|
import org.briarproject.briar.api.blog.Blog;
|
||||||
import org.briarproject.briar.api.blog.BlogManager;
|
import org.briarproject.briar.api.blog.BlogManager;
|
||||||
@@ -145,17 +146,14 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
|
|||||||
BdfDictionary feedsDict =
|
BdfDictionary feedsDict =
|
||||||
BdfDictionary.of(new BdfEntry(KEY_FEEDS, feedList));
|
BdfDictionary.of(new BdfEntry(KEY_FEEDS, feedList));
|
||||||
expectGetLocalGroup();
|
expectGetLocalGroup();
|
||||||
context.checking(new Expectations() {{
|
context.checking(new DbExpectations() {{
|
||||||
oneOf(db).startTransaction(true);
|
oneOf(db).transactionWithResult(with(true), withDbCallable(txn));
|
||||||
will(returnValue(txn));
|
|
||||||
oneOf(clientHelper).getGroupMetadataAsDictionary(txn, localGroupId);
|
oneOf(clientHelper).getGroupMetadataAsDictionary(txn, localGroupId);
|
||||||
will(returnValue(feedsDict));
|
will(returnValue(feedsDict));
|
||||||
if (feedList.size() == 1) {
|
if (feedList.size() == 1) {
|
||||||
oneOf(feedFactory).createFeed(feedDict);
|
oneOf(feedFactory).createFeed(feedDict);
|
||||||
will(returnValue(feed));
|
will(returnValue(feed));
|
||||||
}
|
}
|
||||||
oneOf(db).commitTransaction(txn);
|
|
||||||
oneOf(db).endTransaction(txn);
|
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user