package com.shsening.autouploadvideos import CookieHelper import CookieHelper2 import SessionProfile import SessionProfileManager import android.graphics.Bitmap import android.net.Uri import android.os.Bundle import android.os.Handler import android.os.Looper import android.util.Log import android.view.View import android.webkit.CookieManager import android.webkit.ValueCallback import android.webkit.WebChromeClient import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Button import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider import com.shsening.autouploadvideos.AppConfig.Companion.SESSION_PROFILE_PALTFORM_LISTS import com.shsening.autouploadvideos.action.ActionDouyin import com.shsening.autouploadvideos.action.ActionKuaishou import com.shsening.autouploadvideos.action.ActionRedbook import com.shsening.autouploadvideos.action.ActionShipinhao import com.shsening.autouploadvideos.utils.DownloadHelper import com.shsening.autouploadvideos.utils.Utils import java.io.File import java.util.LinkedList import java.util.Queue class UploadSessionActivity : AppCompatActivity() { private var RedbooklUrl: String? = "https://creator.xiaohongshu.com/publish/publish?from=menu" private var DingyuehaolUrl: String? = null private lateinit var sessionProfileManager: SessionProfileManager lateinit var sessionProfileWebView:SessionProfileWebView private lateinit var uploadSessionText :TextView private lateinit var downloadHelper:DownloadHelper private val uploadTaskQueue: Queue = LinkedList() // 存储上传任务队列 private lateinit var sessionProfiles: java.util.ArrayList private var last_uploaded_task_id:String = "" private val threadHandler = Handler(Looper.getMainLooper()) private lateinit var activityReference: UploadSessionActivity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.upload_session) activityReference = this // 初始化 SessionProfileManager sessionProfileManager = SessionProfileManager(this) //downloadReceiver = DownloadReceiver(this,) uploadSessionText = findViewById(R.id.uploadSessionText) sessionProfileWebView = findViewById(R.id.uploadSessionWebView) // 获取传递的 SessionProfile 数组 sessionProfiles = intent.getParcelableArrayListExtra("sessionProfiles") ?: arrayListOf() if (sessionProfiles != null) { for (profile in sessionProfiles) { processProfile(profile) } } else { Toast.makeText(this, "未接收到任何 Profile 数据", Toast.LENGTH_SHORT).show() } downloadHelper = DownloadHelper(this) //sessionProfileWebView.setInitialScale(75) // 初始缩放比例 sessionProfileWebView.webViewClient = object : WebViewClient() { override fun onPageStarted( view: WebView?, url: String?, favicon: Bitmap? ) { super.onPageStarted(view, url, favicon) } override fun onPageFinished(view: WebView?, url: String?) { println("这是其他页面"+url) super.onPageFinished(view, url) view?.requestFocus() // 确保 WebView 获取焦点 //inject action val currentTask = uploadTaskQueue.peek() when (currentTask?.platform?.name) { "抖音" -> { val action = ActionDouyin(activityReference, threadHandler, currentTask) action.checkIfContentLoaded() } "快手" -> { val action = ActionKuaishou(activityReference, threadHandler, currentTask) action.checkIfContentLoaded() } "小红书" -> { val action = ActionRedbook(activityReference, threadHandler, currentTask) action.checkIfContentLoaded() } "视频号" -> { val action = ActionShipinhao(activityReference, threadHandler, currentTask) action.checkIfContentLoaded() } } url?.let{ Log.e("shsening", url) try { val cookies = CookieManager.getInstance().getCookie(url) if (cookies != null) { CookieHelper.saveSessionProfileUrlCookies( activityReference, currentTask.sessionProfileId!!, url ) } else { Log.w("shsening", "No cookies found for URL: $url") } } catch (e: java.lang.Exception) { Log.e("CookieHelper", "Failed to get cookies: ", e) } } } } sessionProfileWebView.webChromeClient = object : WebChromeClient() { override fun onShowFileChooser( webView: WebView, filePathCallback: ValueCallback>, fileChooserParams: FileChooserParams ): Boolean { try { var mFilePathCallback: ValueCallback>? = filePathCallback // 选择特定的文件 val currentTask = uploadTaskQueue.peek() val download_dir = File(getExternalFilesDir(null), currentTask.sessionProfileId) val file = File(download_dir, currentTask.filename + ".mp4") val uri: Uri = FileProvider.getUriForFile(activityReference, AppConfig.FILE_PROVIDER, file) mFilePathCallback?.onReceiveValue(arrayOf(uri)) return true }catch(e:Exception) { return false } } override fun onShowCustomView(view: View?, callback: CustomViewCallback?) { super.onShowCustomView(view, callback) view?.requestFocus() } } sessionProfileWebView.isFocusableInTouchMode = true findViewById