mirror of
				https://github.com/recloudstream/cloudstream.git
				synced 2024-08-15 01:53:11 +00:00 
			
		
		
		
	[Feature] Filter search results by film quality
This commit is contained in:
		
							parent
							
								
									b5337a1cfb
								
							
						
					
					
						commit
						dce6f06368
					
				
					 6 changed files with 70 additions and 19 deletions
				
			
		|  | @ -253,6 +253,26 @@ object APIHolder { | |||
|             allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun Context.filterSearchResultByFilmQuality(data: List<SearchResponse>): List<SearchResponse> { | ||||
|         // Filter results omitting entries with certain quality | ||||
|         if (data.isEmpty()) { | ||||
|             return data | ||||
|         } | ||||
|         val filteredSearchQuality = PreferenceManager.getDefaultSharedPreferences(this) | ||||
|             ?.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf()) | ||||
|             ?.mapNotNull { entry -> | ||||
|                 entry.toIntOrNull() ?: return@mapNotNull null | ||||
|             } ?: listOf() | ||||
|         if (filteredSearchQuality.isNotEmpty()) { | ||||
|             return data.filter { item -> | ||||
|                 val searchQualVal = item.quality?.ordinal ?: -1 | ||||
|                 //Log.i("filterSearch", "QuickSearch item => ${item.toJson()}") | ||||
|                 !filteredSearchQuality.contains(searchQualVal) | ||||
|             } | ||||
|         } | ||||
|         return data | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -586,24 +606,24 @@ data class HomePageList( | |||
|     val isHorizontalImages: Boolean = false | ||||
| ) | ||||
| 
 | ||||
| enum class SearchQuality { | ||||
| enum class SearchQuality(value: Int?) { | ||||
|     //https://en.wikipedia.org/wiki/Pirated_movie_release_types | ||||
|     Cam, | ||||
|     CamRip, | ||||
|     HdCam, | ||||
|     Telesync, // TS | ||||
|     WorkPrint, | ||||
|     Telecine, // TC | ||||
|     HQ, | ||||
|     HD, | ||||
|     HDR, // high dynamic range | ||||
|     BlueRay, | ||||
|     DVD, | ||||
|     SD, | ||||
|     FourK, | ||||
|     UHD, | ||||
|     SDR, // standard dynamic range | ||||
|     WebRip | ||||
|     Cam(1), | ||||
|     CamRip(2), | ||||
|     HdCam(3), | ||||
|     Telesync(4), // TS | ||||
|     WorkPrint(5), | ||||
|     Telecine(6), // TC | ||||
|     HQ(7), | ||||
|     HD(8), | ||||
|     HDR(9), // high dynamic range | ||||
|     BlueRay(10), | ||||
|     DVD(11), | ||||
|     SD(12), | ||||
|     FourK(13), | ||||
|     UHD(14), | ||||
|     SDR(15), // standard dynamic range | ||||
|     WebRip(16) | ||||
| } | ||||
| 
 | ||||
| /**Add anything to here if you find a site that uses some specific naming convention*/ | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ import androidx.fragment.app.Fragment | |||
| import androidx.lifecycle.ViewModelProvider | ||||
| import androidx.recyclerview.widget.GridLayoutManager | ||||
| import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia | ||||
| import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull | ||||
| import com.lagradost.cloudstream3.HomePageList | ||||
| import com.lagradost.cloudstream3.R | ||||
|  | @ -214,7 +215,7 @@ class QuickSearchFragment : Fragment() { | |||
|                 is Resource.Success -> { | ||||
|                     it.value.let { data -> | ||||
|                         (quick_search_autofit_results?.adapter as? SearchAdapter?)?.updateList( | ||||
|                             data | ||||
|                             context?.filterSearchResultByFilmQuality(data) ?: data | ||||
|                         ) | ||||
|                     } | ||||
|                     searchExitIcon?.alpha = 1f | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog | |||
| import com.google.android.material.button.MaterialButton | ||||
| import com.lagradost.cloudstream3.* | ||||
| import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia | ||||
| import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiFromName | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiSettings | ||||
|  | @ -429,9 +430,11 @@ class SearchFragment : Fragment() { | |||
|                 listLock.lock() | ||||
|                 (search_master_recycler?.adapter as ParentItemAdapter?)?.apply { | ||||
|                     val newItems = list.map { ongoing -> | ||||
|                         val dataList = if (ongoing.data is Resource.Success) ongoing.data.value else ArrayList() | ||||
|                         val dataListFiltered = context?.filterSearchResultByFilmQuality(dataList) ?: dataList | ||||
|                         val ongoingList = HomePageList( | ||||
|                             ongoing.apiName, | ||||
|                             if (ongoing.data is Resource.Success) ongoing.data.value else ArrayList() | ||||
|                             dataListFiltered | ||||
|                         ) | ||||
|                         ongoingList | ||||
|                     } | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import android.view.View | |||
| import androidx.preference.PreferenceFragmentCompat | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.lagradost.cloudstream3.R | ||||
| import com.lagradost.cloudstream3.SearchQuality | ||||
| import com.lagradost.cloudstream3.mvvm.logError | ||||
| import com.lagradost.cloudstream3.ui.search.SearchResultBuilder | ||||
| import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref | ||||
|  | @ -125,5 +126,25 @@ class SettingsUI : PreferenceFragmentCompat() { | |||
|             return@setOnPreferenceClickListener true | ||||
|         } | ||||
| 
 | ||||
|         getPref(R.string.pref_filter_search_quality_key)?.setOnPreferenceClickListener { | ||||
|             val names = enumValues<SearchQuality>().sorted().map { it.name } | ||||
|             val currentList = settingsManager.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf())?.map { | ||||
|                 it.toInt() | ||||
|             } ?: listOf() | ||||
| 
 | ||||
|             activity?.showMultiDialog( | ||||
|                 names, | ||||
|                 currentList, | ||||
|                 getString(R.string.pref_filter_search_quality), | ||||
|                 {}) { selectedList -> | ||||
|                 settingsManager.edit().putStringSet( | ||||
|                     this.getString(R.string.pref_filter_search_quality_key), | ||||
|                     selectedList.map { it.toString() }.toMutableSet() | ||||
|                 ).apply() | ||||
|             } | ||||
| 
 | ||||
|             return@setOnPreferenceClickListener true | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | @ -54,6 +54,7 @@ | |||
|     <string name="override_site_key" translatable="false">override_site_key</string> | ||||
|     <string name="redo_setup_key" translatable="false">redo_setup_key</string> | ||||
|     <string name="filter_sub_lang_key" translatable="false">filter_sub_lang_key</string> | ||||
|     <string name="pref_filter_search_quality_key" translatable="false">pref_filter_search_quality_key</string> | ||||
| 
 | ||||
|     <!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG --> | ||||
|     <string name="extra_info_format" formatted="true" translatable="false">%d %s | %sMB</string> | ||||
|  | @ -261,6 +262,7 @@ | |||
|     <string name="show_fillers_settings">Show filler episode for anime</string> | ||||
|     <string name="show_trailers_settings">Show trailers</string> | ||||
|     <string name="kitsu_settings">Show posters from kitsu</string> | ||||
|     <string name="pref_filter_search_quality">Hide selected video quality on Search results</string> | ||||
| 
 | ||||
|     <string name="automatic_plugin_updates">Automatic plugin updates</string> | ||||
|     <string name="updates_settings">Show app updates</string> | ||||
|  |  | |||
|  | @ -50,4 +50,8 @@ | |||
|             android:title="@string/random_button_settings" | ||||
|             android:summary="@string/random_button_settings_desc" | ||||
|             app:defaultValue="false" /> | ||||
|     <Preference | ||||
|         android:icon="@drawable/ic_baseline_filter_list_24" | ||||
|         android:key="@string/pref_filter_search_quality_key" | ||||
|         android:title="@string/pref_filter_search_quality" /> | ||||
| </PreferenceScreen> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue