Fix issue #21 - Prompt instances for avoiding default down ones
This commit is contained in:
parent
5696809c1d
commit
fda17ee8fe
|
@ -0,0 +1 @@
|
|||
{"1":"Music","2":"Films","3":"Vehicles","4":"Art","5":"Sports","6":"Travels","7":"Gaming","8":"People","9":"Comedy","10":"Entertainment","11":"News & Politics","12":"How To","13":"Education","14":"Activism","15":"Science & Technology","16":"Animals","17":"Kids","18":"Food"}
|
|
@ -0,0 +1 @@
|
|||
{"aa":"Afar","ab":"Abkhazian","af":"Afrikaans","ak":"Akan","am":"Amharic","ar":"Arabic","an":"Aragonese","ase":"American Sign Language","as":"Assamese","av":"Avaric","avk":"Kotava","ay":"Aymara","az":"Azerbaijani","ba":"Bashkir","bm":"Bambara","be":"Belarusian","bn":"Bengali","bfi":"British Sign Language","bi":"Bislama","bo":"Tibetan","bs":"Bosnian","br":"Breton","bg":"Bulgarian","bzs":"Brazilian Sign Language","ca":"Catalan","cs":"Czech","ch":"Chamorro","ce":"Chechen","cv":"Chuvash","kw":"Cornish","co":"Corsican","cr":"Cree","cse":"Czech Sign Language","csl":"Chinese Sign Language","cy":"Welsh","da":"Danish","de":"German","dv":"Dhivehi","dsl":"Danish Sign Language","dz":"Dzongkha","el":"Greek","en":"English","eo":"Esperanto","et":"Estonian","eu":"Basque","ee":"Ewe","fo":"Faroese","fa":"Persian","fj":"Fijian","fi":"Finnish","fr":"French","fy":"Western Frisian","fsl":"French Sign Language","ff":"Fulah","gd":"Scottish Gaelic","ga":"Irish","gl":"Galician","gv":"Manx","gn":"Guarani","gsg":"German Sign Language","gu":"Gujarati","ht":"Haitian","ha":"Hausa","sh":"Serbo-Croatian","he":"Hebrew","hz":"Herero","hi":"Hindi","ho":"Hiri Motu","hr":"Croatian","hu":"Hungarian","hy":"Armenian","ig":"Igbo","ii":"Sichuan Yi","iu":"Inuktitut","id":"Indonesian","ik":"Inupiaq","is":"Icelandic","it":"Italian","jv":"Javanese","jbo":"Lojban","ja":"Japanese","jsl":"Japanese Sign Language","kab":"Kabyle","kl":"Kalaallisut","kn":"Kannada","ks":"Kashmiri","ka":"Georgian","kr":"Kanuri","kk":"Kazakh","km":"Khmer","ki":"Kikuyu","rw":"Kinyarwanda","ky":"Kirghiz","kv":"Komi","kg":"Kongo","ko":"Korean","kj":"Kuanyama","ku":"Kurdish","lo":"Lao","la":"Latin","lv":"Latvian","li":"Limburgan","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","lu":"Luba-Katanga","lg":"Ganda","mh":"Marshallese","ml":"Malayalam","mr":"Marathi","mk":"Macedonian","mg":"Malagasy","mt":"Maltese","mn":"Mongolian","mi":"Maori","ms":"Malay (macrolanguage)","my":"Burmese","na":"Nauru","nv":"Navajo","nr":"South Ndebele","nd":"North Ndebele","ng":"Ndonga","ne":"Nepali (macrolanguage)","nl":"Dutch","nn":"Norwegian Nynorsk","nb":"Norwegian Bokmål","no":"Norwegian","ny":"Nyanja","oc":"Occitan","oj":"Ojibwa","or":"Oriya (macrolanguage)","om":"Oromo","os":"Ossetian","pa":"Panjabi","pks":"Pakistan Sign Language","pl":"Polish","pt":"Portuguese","ps":"Pushto","qu":"Quechua","rm":"Romansh","ro":"Romanian","rsl":"Russian Sign Language","rn":"Rundi","ru":"Russian","sg":"Sango","sdl":"Saudi Arabian Sign Language","sfs":"South African Sign Language","si":"Sinhala","sk":"Slovak","sl":"Slovenian","se":"Northern Sami","sm":"Samoan","sn":"Shona","sd":"Sindhi","so":"Somali","st":"Southern Sotho","es":"Spanish","sq":"Albanian","sc":"Sardinian","sr":"Serbian","ss":"Swati","su":"Sundanese","sw":"Swahili (macrolanguage)","sv":"Swedish","swl":"Swedish Sign Language","ty":"Tahitian","ta":"Tamil","tt":"Tatar","te":"Telugu","tg":"Tajik","tl":"Tagalog","th":"Thai","ti":"Tigrinya","tlh":"Klingon","to":"Tonga (Tonga Islands)","tn":"Tswana","ts":"Tsonga","tk":"Turkmen","tr":"Turkish","tw":"Twi","ug":"Uighur","uk":"Ukrainian","ur":"Urdu","uz":"Uzbek","ve":"Venda","vi":"Vietnamese","wa":"Walloon","wo":"Wolof","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","za":"Zhuang","zh":"Chinese","zu":"Zulu","zxx":"No linguistic content","zh-Hans":"Simplified Chinese","zh-Hant":"Traditional Chinese"}
|
|
@ -24,9 +24,6 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -45,6 +42,7 @@ import app.fedilab.fedilabtube.R;
|
|||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.data.InstanceData;
|
||||
import app.fedilab.fedilabtube.client.entities.InstanceParams;
|
||||
import app.fedilab.fedilabtube.databinding.ActivityInstancePickerBinding;
|
||||
import app.fedilab.fedilabtube.drawer.InstanceAdapter;
|
||||
import app.fedilab.fedilabtube.helper.HelperInstance;
|
||||
import app.fedilab.fedilabtube.helper.RoundedBackgroundSpan;
|
||||
|
@ -63,10 +61,8 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
String[] itemsKeyLanguage;
|
||||
String[] itemsLabelLanguage;
|
||||
InstanceParams instanceParams;
|
||||
private RelativeLayout mainLoader, textviewNoAction;
|
||||
private TextView categories_view, languages_view;
|
||||
private InstancesVM viewModel;
|
||||
|
||||
private ActivityInstancePickerBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -75,33 +71,27 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
binding = ActivityInstancePickerBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
setContentView(R.layout.activity_instance_picker);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
|
||||
mainLoader = findViewById(R.id.loader);
|
||||
textviewNoAction = findViewById(R.id.no_action);
|
||||
mainLoader.setVisibility(View.VISIBLE);
|
||||
Button pickup_categories = findViewById(R.id.pickup_categories);
|
||||
Button pickup_languages = findViewById(R.id.pickup_languages);
|
||||
categories_view = findViewById(R.id.categories_view);
|
||||
languages_view = findViewById(R.id.languages_view);
|
||||
Spinner sensitive = findViewById(R.id.sensitive);
|
||||
|
||||
String[] channelSensitive = new String[]{"do_not_list", "blur", "display", "no_opinion"};
|
||||
String[] channelSensitivesLabel = new String[]{getString(R.string.do_not_list), getString(R.string.blur), getString(R.string.display), getString(R.string.no_opinion)};
|
||||
ArrayAdapter<String> adapterChannel = new ArrayAdapter<>(InstancePickerActivity.this,
|
||||
android.R.layout.simple_spinner_dropdown_item, channelSensitivesLabel);
|
||||
sensitive.setAdapter(adapterChannel);
|
||||
binding.sensitive.setAdapter(adapterChannel);
|
||||
|
||||
|
||||
viewModel = new ViewModelProvider(InstancePickerActivity.this).get(InstancesVM.class);
|
||||
|
||||
sensitive.setSelection(1, false);
|
||||
sensitive.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
binding.sensitive.setSelection(1, false);
|
||||
binding.sensitive.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
instanceParams.setNsfwPolicy(channelSensitive[position]);
|
||||
mainLoader.setVisibility(View.VISIBLE);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, apiResponse -> manageVIewInstance(apiResponse));
|
||||
}
|
||||
|
||||
|
@ -117,7 +107,7 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
itemsLabelLanguage = new String[languages.size()];
|
||||
itemsKeyLanguage = new String[languages.size()];
|
||||
|
||||
pickup_languages.setOnClickListener(v -> {
|
||||
binding.pickupLanguages.setOnClickListener(v -> {
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this);
|
||||
|
||||
int i = 0;
|
||||
|
@ -160,13 +150,13 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
j++;
|
||||
}
|
||||
instanceParams.setLanguagesOr(langs);
|
||||
languages_view.setText(stringBuilder, TextView.BufferType.SPANNABLE);
|
||||
if (languages_view.getText().toString().trim().length() > 0) {
|
||||
languages_view.setVisibility(View.VISIBLE);
|
||||
binding.languagesView.setText(stringBuilder, TextView.BufferType.SPANNABLE);
|
||||
if (binding.languagesView.getText().toString().trim().length() > 0) {
|
||||
binding.languagesView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
languages_view.setVisibility(View.GONE);
|
||||
binding.languagesView.setVisibility(View.GONE);
|
||||
}
|
||||
mainLoader.setVisibility(View.VISIBLE);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, this::manageVIewInstance);
|
||||
});
|
||||
dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> dialog.dismiss());
|
||||
|
@ -184,7 +174,7 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
itemsKeyCategory = new int[categories.size()];
|
||||
|
||||
|
||||
pickup_categories.setOnClickListener(v -> {
|
||||
binding.pickupCategories.setOnClickListener(v -> {
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(InstancePickerActivity.this);
|
||||
int i = 0;
|
||||
if (categories.size() > 0) {
|
||||
|
@ -225,13 +215,13 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
j++;
|
||||
}
|
||||
instanceParams.setCategoriesOr(cats);
|
||||
categories_view.setText(stringBuilder, TextView.BufferType.SPANNABLE);
|
||||
if (categories_view.getText().toString().trim().length() > 0) {
|
||||
categories_view.setVisibility(View.VISIBLE);
|
||||
binding.categoriesView.setText(stringBuilder, TextView.BufferType.SPANNABLE);
|
||||
if (binding.categoriesView.getText().toString().trim().length() > 0) {
|
||||
binding.categoriesView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
categories_view.setVisibility(View.GONE);
|
||||
binding.categoriesView.setVisibility(View.GONE);
|
||||
}
|
||||
mainLoader.setVisibility(View.VISIBLE);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
viewModel.getInstances(instanceParams).observe(InstancePickerActivity.this, this::manageVIewInstance);
|
||||
});
|
||||
dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> dialog.dismiss());
|
||||
|
@ -243,7 +233,7 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
}
|
||||
|
||||
|
||||
mainLoader.setVisibility(View.VISIBLE);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
|
||||
setTitle(R.string.instances_picker);
|
||||
|
||||
|
@ -264,7 +254,7 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
|
||||
|
||||
public void manageVIewInstance(APIResponse apiResponse) {
|
||||
mainLoader.setVisibility(View.GONE);
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
if (apiResponse.getError() != null) {
|
||||
Toasty.error(InstancePickerActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
|
@ -272,10 +262,10 @@ public class InstancePickerActivity extends BaseActivity {
|
|||
List<InstanceData.Instance> instances = apiResponse.getInstances();
|
||||
RecyclerView lv_instances = findViewById(R.id.lv_instances);
|
||||
if ((instances == null || instances.size() == 0)) {
|
||||
textviewNoAction.setVisibility(View.VISIBLE);
|
||||
binding.noAction.setVisibility(View.VISIBLE);
|
||||
lv_instances.setVisibility(View.GONE);
|
||||
} else {
|
||||
textviewNoAction.setVisibility(View.GONE);
|
||||
binding.noAction.setVisibility(View.GONE);
|
||||
lv_instances.setVisibility(View.VISIBLE);
|
||||
InstanceAdapter instanceAdapter = new InstanceAdapter(instances);
|
||||
lv_instances.setAdapter(instanceAdapter);
|
||||
|
|
|
@ -346,6 +346,11 @@ public class MainActivity extends BaseMainActivity {
|
|||
if (search_cast == 1) {
|
||||
super.discoverCast();
|
||||
}
|
||||
//Instance
|
||||
if(HelperInstance.getLiveInstance(MainActivity.this) == null) {
|
||||
Intent intent = new Intent(MainActivity.this, InstancePickerActivity.class);
|
||||
startActivityForResult(intent, PICK_INSTANCE);
|
||||
}
|
||||
}
|
||||
|
||||
public DisplayVideosFragment getSubscriptionFragment() {
|
||||
|
|
|
@ -38,6 +38,8 @@ import java.io.UnsupportedEncodingException;
|
|||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
@ -843,16 +845,48 @@ public class RetrofitPeertubeAPI {
|
|||
if (response.isSuccessful()) {
|
||||
peertubeInformation.setCategories(response.body());
|
||||
} else {
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
String categoriesStr = Helper.readFileFromAssets(_context, "categories.json");
|
||||
try {
|
||||
JSONObject obj = new JSONObject(categoriesStr);
|
||||
Iterator<String> iter = obj.keys();
|
||||
LinkedHashMap<Integer, String> data = new LinkedHashMap<>();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
try {
|
||||
String value = (String) obj.get(key);
|
||||
data.put(Integer.valueOf(key), value);
|
||||
} catch (JSONException ignored) {}
|
||||
}
|
||||
peertubeInformation.setCategories(data);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
String categoriesStr = Helper.readFileFromAssets(_context, "categories.json");
|
||||
try {
|
||||
JSONObject obj = new JSONObject(categoriesStr);
|
||||
Iterator<String> iter = obj.keys();
|
||||
LinkedHashMap<Integer, String> data = new LinkedHashMap<>();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
try {
|
||||
String value = (String) obj.get(key);
|
||||
data.put(Integer.valueOf(key), value);
|
||||
} catch (JSONException ignored) {}
|
||||
}
|
||||
peertubeInformation.setCategories(data);
|
||||
} catch (JSONException e2) {
|
||||
e2.printStackTrace();
|
||||
}
|
||||
}
|
||||
Call<Map<String, String>> languages = peertubeService.getLanguages();
|
||||
try {
|
||||
|
@ -860,16 +894,46 @@ public class RetrofitPeertubeAPI {
|
|||
if (response.isSuccessful()) {
|
||||
peertubeInformation.setLanguages(response.body());
|
||||
} else {
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
String languageSrt = Helper.readFileFromAssets(_context, "languages.json");
|
||||
try {
|
||||
JSONObject obj = new JSONObject(languageSrt);
|
||||
Iterator<String> iter = obj.keys();
|
||||
LinkedHashMap<String, String> data = new LinkedHashMap<>();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
try {
|
||||
String value = (String) obj.get(key);
|
||||
data.put(key, value);
|
||||
} catch (JSONException ignored) {}
|
||||
}
|
||||
peertubeInformation.setLanguages(data);
|
||||
} catch (JSONException e) {
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
String languageSrt = Helper.readFileFromAssets(_context, "languages.json");
|
||||
try {
|
||||
JSONObject obj = new JSONObject(languageSrt);
|
||||
Iterator<String> iter = obj.keys();
|
||||
LinkedHashMap<String, String> data = new LinkedHashMap<>();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
try {
|
||||
String value = (String) obj.get(key);
|
||||
data.put(key, value);
|
||||
} catch (JSONException ignored) {}
|
||||
}
|
||||
peertubeInformation.setLanguages(data);
|
||||
} catch (JSONException e2) {
|
||||
}
|
||||
}
|
||||
Call<Map<Integer, String>> privacies = peertubeService.getPrivacies();
|
||||
try {
|
||||
|
|
|
@ -57,7 +57,12 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
|||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.InetAddress;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.DateFormat;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
@ -807,4 +812,20 @@ public class Helper {
|
|||
}
|
||||
|
||||
|
||||
public static String readFileFromAssets(Context context, String filename) {
|
||||
String json;
|
||||
try {
|
||||
InputStream is = context.getAssets().open(filename);
|
||||
int size = is.available();
|
||||
byte[] buffer = new byte[size];
|
||||
is.read(buffer);
|
||||
is.close();
|
||||
json = new String(buffer, StandardCharsets.UTF_8);
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -36,53 +36,10 @@ public class HelperInstance {
|
|||
public static String getLiveInstance(Context context) {
|
||||
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
if (BuildConfig.FLAVOR.compareTo("fdroid_full") == 0 || BuildConfig.FLAVOR.compareTo("google_full") == 0) {
|
||||
return sharedpreferences.getString(Helper.PREF_INSTANCE, getDefaultInstance());
|
||||
return sharedpreferences.getString(Helper.PREF_INSTANCE, null);
|
||||
} else {
|
||||
return sharedpreferences.getString(Helper.PREF_INSTANCE, "tube-institutionnel.apps.education.fr");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a default instance host name depending of the device locale
|
||||
*
|
||||
* @return peertube host String
|
||||
*/
|
||||
private static String getDefaultInstance() {
|
||||
String lang = Locale.getDefault().getLanguage();
|
||||
if (lang.contains("-")) {
|
||||
if (!lang.split("-")[0].trim().toLowerCase().startsWith("zh")) {
|
||||
lang = lang.split("-")[0];
|
||||
if (lang.split("-")[1].toLowerCase().contains("be")) {
|
||||
lang = "be";
|
||||
} else if (lang.split("-")[1].toLowerCase().contains("gb")) {
|
||||
lang = "gb";
|
||||
}
|
||||
} else {
|
||||
lang = lang.split("-")[0] + "-" + lang.split("-")[1].toUpperCase();
|
||||
}
|
||||
}
|
||||
switch (lang) {
|
||||
case "it":
|
||||
return "peertube.uno";
|
||||
case "be":
|
||||
return "peertube.be";
|
||||
case "fr":
|
||||
return "video.liberta.vip";
|
||||
case "de":
|
||||
return "peertube.social";
|
||||
case "ru":
|
||||
return "peertube.su";
|
||||
case "gb":
|
||||
return "peertube.co.uk";
|
||||
case "da":
|
||||
case "sv":
|
||||
case "nb":
|
||||
case "fi":
|
||||
case "is":
|
||||
return "peertube.dk";
|
||||
default:
|
||||
return "peertube.social";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver
|
|||
@Override
|
||||
public void run() {
|
||||
EmojiHelper.fillMapEmoji(getApplicationContext());
|
||||
if (peertubeInformation == null || peertubeInformation.getCategories().size() == 0) {
|
||||
if (peertubeInformation == null || peertubeInformation.getCategories() == null || peertubeInformation.getCategories().size() == 0) {
|
||||
peertubeInformation = new PeertubeInformation();
|
||||
peertubeInformation.setCategories(new LinkedHashMap<>());
|
||||
peertubeInformation.setLanguages(new LinkedHashMap<>());
|
||||
|
|
Loading…
Reference in New Issue