mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Merge branch 'dev' of github.com:TeamNewPipe/NewPipe into alang-selector
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,5 @@ | |||||||
|  | ### Please do **not** open pull requests for *new features* now, as we are planning to rewrite large chunks of the code. Only bugfix PRs will be accepted. More details will be announced soon! | ||||||
|  |  | ||||||
| NewPipe contribution guidelines | NewPipe contribution guidelines | ||||||
| =============================== | =============================== | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,5 @@ | |||||||
|  | ### Please do **not** open pull requests for *new features* now, as we are planning to rewrite large chunks of the code. Only bugfix PRs will be accepted. More details will be announced soon! | ||||||
|  |  | ||||||
| <p align="center"><a href="https://newpipe.net"><img src="assets/new_pipe_icon_5.png" width="150"></a></p>  | <p align="center"><a href="https://newpipe.net"><img src="assets/new_pipe_icon_5.png" width="150"></a></p>  | ||||||
| <h2 align="center"><b>NewPipe</b></h2> | <h2 align="center"><b>NewPipe</b></h2> | ||||||
| <h4 align="center">A libre lightweight streaming front-end for Android.</h4> | <h4 align="center">A libre lightweight streaming front-end for Android.</h4> | ||||||
|   | |||||||
| @@ -2007,7 +2007,10 @@ public final class VideoDetailFragment | |||||||
|             restoreDefaultBrightness(); |             restoreDefaultBrightness(); | ||||||
|         } else { |         } else { | ||||||
|             // Do not restore if user has disabled brightness gesture |             // Do not restore if user has disabled brightness gesture | ||||||
|             if (!PlayerHelper.isBrightnessGestureEnabled(activity)) { |             if (!PlayerHelper.getActionForRightGestureSide(activity) | ||||||
|  |                     .equals(getString(R.string.brightness_control_key)) | ||||||
|  |                     && !PlayerHelper.getActionForLeftGestureSide(activity) | ||||||
|  |                     .equals(getString(R.string.brightness_control_key))) { | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             // Restore already saved brightness level |             // Restore already saved brightness level | ||||||
|   | |||||||
| @@ -193,18 +193,20 @@ class MainPlayerGestureListener( | |||||||
|         isMoving = true |         isMoving = true | ||||||
|  |  | ||||||
|         // -- Brightness and Volume control -- |         // -- Brightness and Volume control -- | ||||||
|         val isBrightnessGestureEnabled = PlayerHelper.isBrightnessGestureEnabled(player.context) |         if (getDisplayHalfPortion(initialEvent) == DisplayPortion.RIGHT_HALF) { | ||||||
|         val isVolumeGestureEnabled = PlayerHelper.isVolumeGestureEnabled(player.context) |             when (PlayerHelper.getActionForRightGestureSide(player.context)) { | ||||||
|         if (isBrightnessGestureEnabled && isVolumeGestureEnabled) { |                 player.context.getString(R.string.volume_control_key) -> | ||||||
|             if (getDisplayHalfPortion(initialEvent) === DisplayPortion.LEFT_HALF) { |                     onScrollVolume(distanceY) | ||||||
|                 onScrollBrightness(distanceY) |                 player.context.getString(R.string.brightness_control_key) -> | ||||||
|             } else /* DisplayPortion.RIGHT_HALF */ { |                     onScrollBrightness(distanceY) | ||||||
|                 onScrollVolume(distanceY) |             } | ||||||
|  |         } else { | ||||||
|  |             when (PlayerHelper.getActionForLeftGestureSide(player.context)) { | ||||||
|  |                 player.context.getString(R.string.volume_control_key) -> | ||||||
|  |                     onScrollVolume(distanceY) | ||||||
|  |                 player.context.getString(R.string.brightness_control_key) -> | ||||||
|  |                     onScrollBrightness(distanceY) | ||||||
|             } |             } | ||||||
|         } else if (isBrightnessGestureEnabled) { |  | ||||||
|             onScrollBrightness(distanceY) |  | ||||||
|         } else if (isVolumeGestureEnabled) { |  | ||||||
|             onScrollVolume(distanceY) |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return true |         return true | ||||||
|   | |||||||
| @@ -228,14 +228,16 @@ public final class PlayerHelper { | |||||||
|                 .getBoolean(context.getString(R.string.resume_on_audio_focus_gain_key), false); |                 .getBoolean(context.getString(R.string.resume_on_audio_focus_gain_key), false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static boolean isVolumeGestureEnabled(@NonNull final Context context) { |     public static String getActionForRightGestureSide(@NonNull final Context context) { | ||||||
|         return getPreferences(context) |         return getPreferences(context) | ||||||
|                 .getBoolean(context.getString(R.string.volume_gesture_control_key), true); |                 .getString(context.getString(R.string.right_gesture_control_key), | ||||||
|  |                         context.getString(R.string.default_right_gesture_control_value)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static boolean isBrightnessGestureEnabled(@NonNull final Context context) { |     public static String getActionForLeftGestureSide(@NonNull final Context context) { | ||||||
|         return getPreferences(context) |         return getPreferences(context) | ||||||
|                 .getBoolean(context.getString(R.string.brightness_gesture_control_key), true); |                 .getString(context.getString(R.string.left_gesture_control_key), | ||||||
|  |                         context.getString(R.string.default_left_gesture_control_value)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static boolean isStartMainPlayerFullscreenEnabled(@NonNull final Context context) { |     public static boolean isStartMainPlayerFullscreenEnabled(@NonNull final Context context) { | ||||||
|   | |||||||
| @@ -108,6 +108,25 @@ public final class SettingMigrations { | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     public static final Migration MIGRATION_4_5 = new Migration(4, 5) { | ||||||
|  |         @Override | ||||||
|  |         protected void migrate(final Context context) { | ||||||
|  |             final boolean brightness = sp.getBoolean("brightness_gesture_control", true); | ||||||
|  |             final boolean volume = sp.getBoolean("volume_gesture_control", true); | ||||||
|  |  | ||||||
|  |             final SharedPreferences.Editor editor = sp.edit(); | ||||||
|  |  | ||||||
|  |             editor.putString(context.getString(R.string.right_gesture_control_key), | ||||||
|  |                     context.getString(volume | ||||||
|  |                             ? R.string.volume_control_key : R.string.none_control_key)); | ||||||
|  |             editor.putString(context.getString(R.string.left_gesture_control_key), | ||||||
|  |                     context.getString(brightness | ||||||
|  |                             ? R.string.brightness_control_key : R.string.none_control_key)); | ||||||
|  |  | ||||||
|  |             editor.apply(); | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * List of all implemented migrations. |      * List of all implemented migrations. | ||||||
|      * <p> |      * <p> | ||||||
| @@ -119,12 +138,13 @@ public final class SettingMigrations { | |||||||
|             MIGRATION_1_2, |             MIGRATION_1_2, | ||||||
|             MIGRATION_2_3, |             MIGRATION_2_3, | ||||||
|             MIGRATION_3_4, |             MIGRATION_3_4, | ||||||
|  |             MIGRATION_4_5, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Version number for preferences. Must be incremented every time a migration is necessary. |      * Version number for preferences. Must be incremented every time a migration is necessary. | ||||||
|      */ |      */ | ||||||
|     public static final int VERSION = 4; |     public static final int VERSION = 5; | ||||||
|  |  | ||||||
|  |  | ||||||
|     public static void initMigrations(final Context context, final boolean isFirstRun) { |     public static void initMigrations(final Context context, final boolean isFirstRun) { | ||||||
|   | |||||||
| @@ -16,8 +16,6 @@ | |||||||
|     <string name="use_external_video_player_key">use_external_video_player</string> |     <string name="use_external_video_player_key">use_external_video_player</string> | ||||||
|     <string name="use_external_audio_player_key">use_external_audio_player</string> |     <string name="use_external_audio_player_key">use_external_audio_player</string> | ||||||
|  |  | ||||||
|     <string name="volume_gesture_control_key">volume_gesture_control</string> |  | ||||||
|     <string name="brightness_gesture_control_key">brightness_gesture_control</string> |  | ||||||
|     <string name="resume_on_audio_focus_gain_key">resume_on_audio_focus_gain</string> |     <string name="resume_on_audio_focus_gain_key">resume_on_audio_focus_gain</string> | ||||||
|     <string name="popup_remember_size_pos_key">popup_remember_size_pos_key</string> |     <string name="popup_remember_size_pos_key">popup_remember_size_pos_key</string> | ||||||
|     <string name="use_inexact_seek_key">use_inexact_seek_key</string> |     <string name="use_inexact_seek_key">use_inexact_seek_key</string> | ||||||
| @@ -192,6 +190,35 @@ | |||||||
|         <item>@string/audio_webm_key</item> |         <item>@string/audio_webm_key</item> | ||||||
|     </string-array> |     </string-array> | ||||||
|  |  | ||||||
|  |     <string name="left_gesture_control_key">left_gesture_control</string> | ||||||
|  |     <string name="default_left_gesture_control_value">@string/brightness_control_key</string> | ||||||
|  |     <string name="brightness_control_key">brightness_control</string> | ||||||
|  |     <string name="volume_control_key">volume_control</string> | ||||||
|  |     <string name="none_control_key">none_control</string> | ||||||
|  |     <string-array name="left_gesture_control_description"> | ||||||
|  |         <item>@string/brightness</item> | ||||||
|  |         <item>@string/volume</item> | ||||||
|  |         <item>@string/none</item> | ||||||
|  |     </string-array> | ||||||
|  |     <string-array name="left_gesture_control_values"> | ||||||
|  |         <item>@string/brightness_control_key</item> | ||||||
|  |         <item>@string/volume_control_key</item> | ||||||
|  |         <item>@string/none_control_key</item> | ||||||
|  |     </string-array> | ||||||
|  |  | ||||||
|  |     <string name="right_gesture_control_key">right_gesture_control</string> | ||||||
|  |     <string name="default_right_gesture_control_value">@string/volume_control_key</string> | ||||||
|  |     <string-array name="right_gesture_control_description"> | ||||||
|  |         <item>@string/volume</item> | ||||||
|  |         <item>@string/brightness</item> | ||||||
|  |         <item>@string/none</item> | ||||||
|  |     </string-array> | ||||||
|  |     <string-array name="right_gesture_control_values"> | ||||||
|  |         <item>@string/volume_control_key</item> | ||||||
|  |         <item>@string/brightness_control_key</item> | ||||||
|  |         <item>@string/none_control_key</item> | ||||||
|  |     </string-array> | ||||||
|  |  | ||||||
|     <string name="prefer_original_audio_key">prefer_original_audio</string> |     <string name="prefer_original_audio_key">prefer_original_audio</string> | ||||||
|     <string name="prefer_descriptive_audio_key">prefer_descriptive_audio</string> |     <string name="prefer_descriptive_audio_key">prefer_descriptive_audio</string> | ||||||
|     <string name="last_resize_mode">last_resize_mode</string> |     <string name="last_resize_mode">last_resize_mode</string> | ||||||
|   | |||||||
| @@ -105,10 +105,13 @@ | |||||||
|     <string name="auto_queue_title">Auto-enqueue next stream</string> |     <string name="auto_queue_title">Auto-enqueue next stream</string> | ||||||
|     <string name="auto_queue_summary">Continue ending (non-repeating) playback queue by appending a related stream</string> |     <string name="auto_queue_summary">Continue ending (non-repeating) playback queue by appending a related stream</string> | ||||||
|     <string name="auto_queue_toggle">Auto-enqueuing</string> |     <string name="auto_queue_toggle">Auto-enqueuing</string> | ||||||
|     <string name="volume_gesture_control_title">Volume gesture control</string> |     <string name="left_gesture_control_summary">Choose gesture for left half of player screen</string> | ||||||
|     <string name="volume_gesture_control_summary">Use gestures to control player volume</string> |     <string name="left_gesture_control_title">Left gesture action</string> | ||||||
|     <string name="brightness_gesture_control_title">Brightness gesture control</string> |     <string name="right_gesture_control_summary">Choose gesture for right half of player screen</string> | ||||||
|     <string name="brightness_gesture_control_summary">Use gestures to control player brightness</string> |     <string name="right_gesture_control_title">Right gesture action</string> | ||||||
|  |     <string name="brightness">Brightness</string> | ||||||
|  |     <string name="volume">Volume</string> | ||||||
|  |     <string name="none">None</string> | ||||||
|     <string name="show_search_suggestions_title">Search suggestions</string> |     <string name="show_search_suggestions_title">Search suggestions</string> | ||||||
|     <string name="show_search_suggestions_summary">Choose the suggestions to show when searching</string> |     <string name="show_search_suggestions_summary">Choose the suggestions to show when searching</string> | ||||||
|     <string name="local_search_suggestions">Local search suggestions</string> |     <string name="local_search_suggestions">Local search suggestions</string> | ||||||
|   | |||||||
| @@ -190,19 +190,23 @@ | |||||||
|             app:singleLineTitle="false" |             app:singleLineTitle="false" | ||||||
|             app:iconSpaceReserved="false" /> |             app:iconSpaceReserved="false" /> | ||||||
|  |  | ||||||
|         <SwitchPreferenceCompat |         <ListPreference | ||||||
|             android:defaultValue="true" |             android:defaultValue="@string/default_left_gesture_control_value" | ||||||
|             android:key="@string/volume_gesture_control_key" |             android:entries="@array/left_gesture_control_description" | ||||||
|             android:summary="@string/volume_gesture_control_summary" |             android:entryValues="@array/left_gesture_control_values" | ||||||
|             android:title="@string/volume_gesture_control_title" |             android:key="@string/left_gesture_control_key" | ||||||
|  |             android:summary="@string/left_gesture_control_summary" | ||||||
|  |             android:title="@string/left_gesture_control_title" | ||||||
|             app:singleLineTitle="false" |             app:singleLineTitle="false" | ||||||
|             app:iconSpaceReserved="false" /> |             app:iconSpaceReserved="false" /> | ||||||
|  |  | ||||||
|         <SwitchPreferenceCompat |         <ListPreference | ||||||
|             android:defaultValue="true" |             android:defaultValue="@string/default_right_gesture_control_value" | ||||||
|             android:key="@string/brightness_gesture_control_key" |             android:entries="@array/right_gesture_control_description" | ||||||
|             android:summary="@string/brightness_gesture_control_summary" |             android:entryValues="@array/right_gesture_control_values" | ||||||
|             android:title="@string/brightness_gesture_control_title" |             android:key="@string/right_gesture_control_key" | ||||||
|  |             android:summary="@string/right_gesture_control_summary" | ||||||
|  |             android:title="@string/right_gesture_control_title" | ||||||
|             app:singleLineTitle="false" |             app:singleLineTitle="false" | ||||||
|             app:iconSpaceReserved="false" /> |             app:iconSpaceReserved="false" /> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ Vylepšeno | |||||||
| Opraveno | Opraveno | ||||||
| • Oprava otevírání URL prohlížeče, stahování a externích přehrávačů v Android 11+ | • Oprava otevírání URL prohlížeče, stahování a externích přehrávačů v Android 11+ | ||||||
| • Oprava interakce s celou obrazovkou v MIUI | • Oprava interakce s celou obrazovkou v MIUI | ||||||
| • Úpravy nastavení ExoPlayer pro opravu přehrávání na některých zařízeních |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ Improved | |||||||
| Fixed | Fixed | ||||||
| • Fix opening browser URLs, downloads and external players on Android 11+ | • Fix opening browser URLs, downloads and external players on Android 11+ | ||||||
| • Fix interacting with fullscreen requiring two taps on MIUI | • Fix interacting with fullscreen requiring two taps on MIUI | ||||||
| • Allow tweaking ExoPlayer settings to fix playback on some devices |  | ||||||
| @@ -10,4 +10,3 @@ Mejorado | |||||||
| Solucionado | Solucionado | ||||||
| • Abrir URL del navegador, descargas y reproductores externos en Android 11+ | • Abrir URL del navegador, descargas y reproductores externos en Android 11+ | ||||||
| • Interación en pantalla completa, requería dos toques en MIUI | • Interación en pantalla completa, requería dos toques en MIUI | ||||||
| • Cambiar la configuración de ExoPlayer para la reproducción en algunos dispositivos |  | ||||||
|   | |||||||
| @@ -1,13 +0,0 @@ | |||||||
| New |  | ||||||
| • Add warning when adding playlist duplicates and add button to remove them |  | ||||||
| • Allow ignoring hardware buttons |  | ||||||
| • Allow hiding partially watched videos in feed |  | ||||||
|  |  | ||||||
| Improved |  | ||||||
| • Use more grid columns on big screens |  | ||||||
| • Make progress indicators consistent with settings |  | ||||||
|  |  | ||||||
| Fixed |  | ||||||
| • Fix opening browser URLs, downloads and external players on Android 11+ |  | ||||||
| • Fix interacting with fullscreen requiring two taps on MIUI |  | ||||||
| • Allow tweaking ExoPlayer settings to fix playback on some devices |  | ||||||
| @@ -10,4 +10,3 @@ Migliorato | |||||||
| Corretto | Corretto | ||||||
| • Fix apertura URL, download e player esterni su Android 11+ | • Fix apertura URL, download e player esterni su Android 11+ | ||||||
| • Fix interazione con schermo intero che richiedeva due otcchi su MIUI | • Fix interazione con schermo intero che richiedeva due otcchi su MIUI | ||||||
| • Regola le impostazioni di ExoPlayer per correggere la riproduzione su alcuni dispositivi |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ | |||||||
| ਠੀਕ ਕੀਤੇ | ਠੀਕ ਕੀਤੇ | ||||||
| • Android 11 'ਤੇ ਖੋਲ੍ਹਣ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ URL, ਡਾਊਨਲੋਡ ਅਤੇ ਬਾਹਰੀ ਪਲੇਅਰ ਨੂੰ ਠੀਕ ਕਰੋ | • Android 11 'ਤੇ ਖੋਲ੍ਹਣ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ URL, ਡਾਊਨਲੋਡ ਅਤੇ ਬਾਹਰੀ ਪਲੇਅਰ ਨੂੰ ਠੀਕ ਕਰੋ | ||||||
| • MIUI 'ਤੇ ਦੋ ਟੈਪਾਂ ਦੀ ਲੋੜ ਵਾਲੀ ਪੂਰੀ ਸਕ੍ਰੀਨ ਨਾਲ ਇੰਟਰੈਕਟਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ | • MIUI 'ਤੇ ਦੋ ਟੈਪਾਂ ਦੀ ਲੋੜ ਵਾਲੀ ਪੂਰੀ ਸਕ੍ਰੀਨ ਨਾਲ ਇੰਟਰੈਕਟਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ | ||||||
| • ਕੁਝ ਡਿਵਾਈਸਾਂ 'ਤੇ ਪਲੇਬੈਕ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ExoPlayer ਸੈਟਿੰਗਾਂ ਨੂੰ ਟਵੀਕ ਕਰਨ ਦਿਓ |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ Ulepszone | |||||||
| Naprawione | Naprawione | ||||||
| • Otwier. URL-i przeglądarki, pobranych i zew. odtwarzaczy na Androidzie 11+ | • Otwier. URL-i przeglądarki, pobranych i zew. odtwarzaczy na Androidzie 11+ | ||||||
| • Interakcja z trybem pełnoekr. wymagającym dwóch naciśnięć na MIUI | • Interakcja z trybem pełnoekr. wymagającym dwóch naciśnięć na MIUI | ||||||
| • Dostosow. ustawień ExoPlayera, aby naprawić odtwarzanie na niektórych urządz. |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ Melhorado | |||||||
| Fixa | Fixa | ||||||
| - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ | - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ | ||||||
| - Fixação interagindo com tela cheia requer duas torneiras no MIUI | - Fixação interagindo com tela cheia requer duas torneiras no MIUI | ||||||
| - Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ Melhorado | |||||||
| Fixa | Fixa | ||||||
| - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ | - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ | ||||||
| - Fixação interagindo com tela cheia requer duas torneiras no MIUI | - Fixação interagindo com tela cheia requer duas torneiras no MIUI | ||||||
| - Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ | |||||||
| Исправления | Исправления | ||||||
| • Исправлено открытие URL-адресов браузера, загрузок и внешних проигрывателей на Android 11+ | • Исправлено открытие URL-адресов браузера, загрузок и внешних проигрывателей на Android 11+ | ||||||
| • Исправлено взаимодействие с полноэкранным режимом, требующее двух нажатий в MIUI | • Исправлено взаимодействие с полноэкранным режимом, требующее двух нажатий в MIUI | ||||||
| • Разрешить изменять настройки ExoPlayer, чтобы исправить воспроизведение на некоторых устройствах |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ | |||||||
| Виправлено | Виправлено | ||||||
| • Відкриття URL-адрес браузера, завантажень і зовнішніх програвачів на Android 11+ | • Відкриття URL-адрес браузера, завантажень і зовнішніх програвачів на Android 11+ | ||||||
| • Роботу повноекранного режиму, який вимагав двох дотиків у MIUI | • Роботу повноекранного режиму, який вимагав двох дотиків у MIUI | ||||||
| • Дозвіл змінювати налаштування ExoPlayer, щоб виправити відтворення на деяких пристроях |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ | |||||||
| 修正 | 修正 | ||||||
| • 修正 Android 11+ 上開啟瀏覽器 URL、下載與外部播放器 | • 修正 Android 11+ 上開啟瀏覽器 URL、下載與外部播放器 | ||||||
| • 修正 MIUI 上全螢幕操作需要輕觸兩下 | • 修正 MIUI 上全螢幕操作需要輕觸兩下 | ||||||
| • 允許微調 ExoPlayer 設定以修正部分裝置上的播放問題 |  | ||||||
|   | |||||||
| @@ -10,4 +10,3 @@ | |||||||
| 執漏 | 執漏 | ||||||
| • 修正 Android 11+ 開啟瀏覽器 URL、下載同外面播放器 | • 修正 Android 11+ 開啟瀏覽器 URL、下載同外面播放器 | ||||||
| • 修正 MIUI 全螢幕時要撳兩下至搞得掂 | • 修正 MIUI 全螢幕時要撳兩下至搞得掂 | ||||||
| • 有得調校 ExoPlayer 設定解決某啲機播唔到片嘅問題 |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ThetaDev
					ThetaDev