mirror of
				https://github.com/recloudstream/cloudstream.git
				synced 2024-08-15 01:53:11 +00:00 
			
		
		
		
	bump
This commit is contained in:
		
							parent
							
								
									fa1e2f7eeb
								
							
						
					
					
						commit
						2acae76c5e
					
				
					 6 changed files with 96 additions and 80 deletions
				
			
		|  | @ -31,8 +31,8 @@ android { | |||
|         applicationId "com.lagradost.cloudstream3" | ||||
|         minSdkVersion 21 | ||||
|         targetSdkVersion 30 | ||||
|         versionCode 23 | ||||
|         versionName "1.8.8" | ||||
|         versionCode 24 | ||||
|         versionName "1.9.8" | ||||
| 
 | ||||
|         resValue "string", "app_version", | ||||
|                 "${defaultConfig.versionName}${versionNameSuffix ?: ""}" | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ import com.jaredrummler.android.colorpicker.ColorPickerDialogListener | |||
| import com.lagradost.cloudstream3.APIHolder.apis | ||||
| import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings | ||||
| import com.lagradost.cloudstream3.APIHolder.restrictedApis | ||||
| import com.lagradost.cloudstream3.mvvm.logError | ||||
| import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver | ||||
| import com.lagradost.cloudstream3.ui.APIRepository | ||||
| import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO | ||||
|  | @ -146,16 +147,20 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { | |||
| 
 | ||||
|     private fun enterPIPMode() { | ||||
|         if (!shouldShowPIPMode(canEnterPipMode) || !canShowPipMode) return | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             try { | ||||
|                 enterPictureInPictureMode(PictureInPictureParams.Builder().build()) | ||||
|             } catch (e: Exception) { | ||||
|                 enterPictureInPictureMode() | ||||
|             } | ||||
|         } else { | ||||
|             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | ||||
|                 enterPictureInPictureMode() | ||||
|         try { | ||||
|             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|                 try { | ||||
|                     enterPictureInPictureMode(PictureInPictureParams.Builder().build()) | ||||
|                 } catch (e: Exception) { | ||||
|                     enterPictureInPictureMode() | ||||
|                 } | ||||
|             } else { | ||||
|                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | ||||
|                     enterPictureInPictureMode() | ||||
|                 } | ||||
|             } | ||||
|         } catch (e : Exception) { | ||||
|             logError(e) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -45,27 +45,25 @@ class DownloadChildFragment : Fragment() { | |||
|     } | ||||
| 
 | ||||
|     private fun updateList(folder: String) = main { | ||||
|         val data = withContext(Dispatchers.IO) { context?.getKeys(folder) } | ||||
|         if (data == null) { | ||||
|             activity?.onBackPressed() // TODO FIX | ||||
|             return@main | ||||
|         } | ||||
|         val eps = withContext(Dispatchers.IO) { | ||||
|             data.mapNotNull { key -> | ||||
|                 context?.getKey<VideoDownloadHelper.DownloadEpisodeCached>(key) | ||||
|             }.mapNotNull { | ||||
|                 val info = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(requireContext(), it.id) | ||||
|                     ?: return@mapNotNull null | ||||
|                 VisualDownloadChildCached(info.fileLength, info.totalBytes, it) | ||||
|         context?.let { ctx -> | ||||
|             val data = withContext(Dispatchers.IO) { ctx.getKeys(folder) } | ||||
|             val eps = withContext(Dispatchers.IO) { | ||||
|                 data.mapNotNull { key -> | ||||
|                     context?.getKey<VideoDownloadHelper.DownloadEpisodeCached>(key) | ||||
|                 }.mapNotNull { | ||||
|                     val info = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(ctx, it.id) | ||||
|                         ?: return@mapNotNull null | ||||
|                     VisualDownloadChildCached(info.fileLength, info.totalBytes, it) | ||||
|                 } | ||||
|             } | ||||
|             if (eps.isEmpty()) { | ||||
|                 activity?.onBackPressed() | ||||
|                 return@main | ||||
|             } | ||||
|         } | ||||
|         if (eps.isEmpty()) { | ||||
|             activity?.onBackPressed() | ||||
|             return@main | ||||
|         } | ||||
| 
 | ||||
|         (download_child_list?.adapter as DownloadChildAdapter? ?: return@main).cardList = eps | ||||
|         download_child_list?.adapter?.notifyDataSetChanged() | ||||
|             (download_child_list?.adapter as DownloadChildAdapter? ?: return@main).cardList = eps | ||||
|             download_child_list?.adapter?.notifyDataSetChanged() | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     var downloadDeleteEventListener: ((Int) -> Unit)? = null | ||||
|  |  | |||
|  | @ -112,7 +112,9 @@ class DownloadFragment : Fragment() { | |||
|                     if (downloadClickEvent.data !is VideoDownloadHelper.DownloadEpisodeCached) return@DownloadHeaderAdapter | ||||
|                     handleDownloadClick(activity, downloadClickEvent.data.name, downloadClickEvent) | ||||
|                     if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { | ||||
|                         downloadsViewModel.updateList(requireContext()) | ||||
|                         context?.let { ctx -> | ||||
|                             downloadsViewModel.updateList(ctx) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             ) | ||||
|  | @ -121,8 +123,10 @@ class DownloadFragment : Fragment() { | |||
|             val list = (download_list?.adapter as DownloadHeaderAdapter?)?.cardList | ||||
|             if (list != null) { | ||||
|                 if (list.any { it.data.id == id }) { | ||||
|                     setList(ArrayList()) | ||||
|                     downloadsViewModel.updateList(requireContext()) | ||||
|                     context?.let { ctx -> | ||||
|                         setList(ArrayList()) | ||||
|                         downloadsViewModel.updateList(ctx) | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  |  | |||
|  | @ -558,55 +558,59 @@ class ResultFragment : Fragment() { | |||
|                 } | ||||
| 
 | ||||
|                 ACTION_SHOW_OPTIONS -> { | ||||
|                     val builder = AlertDialog.Builder(requireContext(), R.style.AlertDialogCustom) | ||||
|                     var dialog: AlertDialog? = null | ||||
|                     builder.setTitle(showTitle) | ||||
|                     val options = requireContext().resources.getStringArray(R.array.episode_long_click_options) | ||||
|                     val optionsValues = | ||||
|                         requireContext().resources.getIntArray(R.array.episode_long_click_options_values) | ||||
|                     context?.let { ctx -> | ||||
|                         val builder = AlertDialog.Builder(ctx, R.style.AlertDialogCustom) | ||||
|                         var dialog: AlertDialog? = null | ||||
|                         builder.setTitle(showTitle) | ||||
|                         val options = requireContext().resources.getStringArray(R.array.episode_long_click_options) | ||||
|                         val optionsValues = | ||||
|                             requireContext().resources.getIntArray(R.array.episode_long_click_options_values) | ||||
| 
 | ||||
|                     val verifiedOptions = ArrayList<String>() | ||||
|                     val verifiedOptionsValues = ArrayList<Int>() | ||||
|                         val verifiedOptions = ArrayList<String>() | ||||
|                         val verifiedOptionsValues = ArrayList<Int>() | ||||
| 
 | ||||
|                     val hasDownloadSupport = api.hasDownloadSupport | ||||
|                         val hasDownloadSupport = api.hasDownloadSupport | ||||
| 
 | ||||
|                     for (i in options.indices) { | ||||
|                         val opv = optionsValues[i] | ||||
|                         val op = options[i] | ||||
|                         for (i in options.indices) { | ||||
|                             val opv = optionsValues[i] | ||||
|                             val op = options[i] | ||||
| 
 | ||||
|                         val isConnected = requireContext().isConnectedToChromecast() | ||||
|                         val add = when (opv) { | ||||
|                             ACTION_CHROME_CAST_EPISODE -> isConnected | ||||
|                             ACTION_CHROME_CAST_MIRROR -> isConnected | ||||
|                             ACTION_DOWNLOAD_EPISODE -> hasDownloadSupport | ||||
|                             ACTION_DOWNLOAD_MIRROR -> hasDownloadSupport | ||||
|                             ACTION_PLAY_EPISODE_IN_VLC_PLAYER -> context?.isAppInstalled(VLC_PACKAGE) ?: false | ||||
|                             else -> true | ||||
|                             val isConnected = ctx.isConnectedToChromecast() | ||||
|                             val add = when (opv) { | ||||
|                                 ACTION_CHROME_CAST_EPISODE -> isConnected | ||||
|                                 ACTION_CHROME_CAST_MIRROR -> isConnected | ||||
|                                 ACTION_DOWNLOAD_EPISODE -> hasDownloadSupport | ||||
|                                 ACTION_DOWNLOAD_MIRROR -> hasDownloadSupport | ||||
|                                 ACTION_PLAY_EPISODE_IN_VLC_PLAYER -> context?.isAppInstalled(VLC_PACKAGE) ?: false | ||||
|                                 else -> true | ||||
|                             } | ||||
|                             if (add) { | ||||
|                                 verifiedOptions.add(op) | ||||
|                                 verifiedOptionsValues.add(opv) | ||||
|                             } | ||||
|                         } | ||||
|                         if (add) { | ||||
|                             verifiedOptions.add(op) | ||||
|                             verifiedOptionsValues.add(opv) | ||||
| 
 | ||||
|                         builder.setItems( | ||||
|                             verifiedOptions.toTypedArray() | ||||
|                         ) { _, which -> | ||||
|                             handleAction(EpisodeClickEvent(verifiedOptionsValues[which], episodeClick.data)) | ||||
|                             dialog?.dismiss() | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
|                     builder.setItems( | ||||
|                         verifiedOptions.toTypedArray() | ||||
|                     ) { _, which -> | ||||
|                         handleAction(EpisodeClickEvent(verifiedOptionsValues[which], episodeClick.data)) | ||||
|                         dialog?.dismiss() | ||||
|                         dialog = builder.create() | ||||
|                         dialog.show() | ||||
|                     } | ||||
| 
 | ||||
|                     dialog = builder.create() | ||||
|                     dialog.show() | ||||
|                 } | ||||
|                 ACTION_COPY_LINK -> { | ||||
|                     acquireSingeExtractorLink(getString(R.string.episode_action_copy_link)) { link -> | ||||
|                         val serviceClipboard = | ||||
|                             (requireContext().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?) | ||||
|                                 ?: return@acquireSingeExtractorLink | ||||
|                         val clip = ClipData.newPlainText(link.name, link.url) | ||||
|                         serviceClipboard.setPrimaryClip(clip) | ||||
|                         showToast(activity, R.string.copy_link_toast, Toast.LENGTH_SHORT) | ||||
|                     activity?.let { act -> | ||||
|                         acquireSingeExtractorLink(act.getString(R.string.episode_action_copy_link)) { link -> | ||||
|                             val serviceClipboard = | ||||
|                                 (act.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?) | ||||
|                                     ?: return@acquireSingeExtractorLink | ||||
|                             val clip = ClipData.newPlainText(link.name, link.url) | ||||
|                             serviceClipboard.setPrimaryClip(clip) | ||||
|                             showToast(act, R.string.copy_link_toast, Toast.LENGTH_SHORT) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|  | @ -638,7 +642,7 @@ class ResultFragment : Fragment() { | |||
|                         val data = currentLinks ?: return@main | ||||
|                         val subs = currentSubs | ||||
| 
 | ||||
|                         val outputDir = requireContext().cacheDir | ||||
|                         val outputDir = act.cacheDir | ||||
|                         val outputFile = withContext(Dispatchers.IO) { | ||||
|                             File.createTempFile("mirrorlist", ".m3u8", outputDir) | ||||
|                         } | ||||
|  | @ -682,7 +686,7 @@ class ResultFragment : Fragment() { | |||
|                         vlcIntent.putExtra("position", position) | ||||
| 
 | ||||
|                         vlcIntent.component = VLC_COMPONENT | ||||
|                         requireContext().setKey(VLC_LAST_ID_KEY, episodeClick.data.id) | ||||
|                         act.setKey(VLC_LAST_ID_KEY, episodeClick.data.id) | ||||
|                         act.startActivityForResult(vlcIntent, VLC_REQUEST_CODE) | ||||
|                     } | ||||
|                 } | ||||
|  | @ -939,7 +943,8 @@ class ResultFragment : Fragment() { | |||
|                             } | ||||
|                             result_descript.setOnClickListener { | ||||
|                                 val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext()) | ||||
|                                 builder.setMessage(d.plot).setTitle( if (d.type == TvType.Torrent) R.string.torrent_plot else R.string.result_plot) | ||||
|                                 builder.setMessage(d.plot) | ||||
|                                     .setTitle(if (d.type == TvType.Torrent) R.string.torrent_plot else R.string.result_plot) | ||||
|                                     .show() | ||||
|                             } | ||||
|                             result_descript.text = syno | ||||
|  | @ -982,7 +987,6 @@ class ResultFragment : Fragment() { | |||
|                                 return@setOnLongClickListener true | ||||
|                             } | ||||
|                              | ||||
| 
 | ||||
| //                            result_options.setOnClickListener { | ||||
| //                                val card = currentEpisodes?.first() ?: return@setOnClickListener | ||||
| //                                handleAction(EpisodeClickEvent(ACTION_SHOW_OPTIONS, card)) | ||||
|  | @ -1072,7 +1076,7 @@ class ResultFragment : Fragment() { | |||
|         val tempUrl = url | ||||
|         if (tempUrl != null) { | ||||
|             result_reload_connectionerror.setOnClickListener { | ||||
|                 viewModel.load(requireContext(), tempUrl, apiName) | ||||
|                 viewModel.load(it.context, tempUrl, apiName) | ||||
|             } | ||||
| 
 | ||||
|             result_reload_connection_open_in_browser.setOnClickListener { | ||||
|  | @ -1085,8 +1089,11 @@ class ResultFragment : Fragment() { | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (viewModel.resultResponse.value == null) | ||||
|                 viewModel.load(requireContext(), tempUrl, apiName) | ||||
|             if (viewModel.resultResponse.value == null) { | ||||
|                 context?.let { ctx -> | ||||
|                     viewModel.load(ctx, tempUrl, apiName) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -226,6 +226,8 @@ object VideoDownloadManager { | |||
|         progress: Long, | ||||
|         total: Long, | ||||
|     ) { | ||||
|         if(total <= 0) return // crash, invalid data | ||||
| 
 | ||||
|         main { // DON'T WANT TO SLOW IT DOWN | ||||
|             val builder = NotificationCompat.Builder(context, DOWNLOAD_CHANNEL_ID) | ||||
|                 .setAutoCancel(true) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue