parent
126b88d67f
commit
0d814d6494
@ -0,0 +1,34 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core |
||||
|
||||
import androidx.lifecycle.DefaultLifecycleObserver |
||||
import androidx.lifecycle.Lifecycle.Event |
||||
import androidx.lifecycle.LifecycleEventObserver |
||||
import androidx.lifecycle.LifecycleOwner |
||||
import com.arialyy.aria.core.common.receiver.LifLifecycleReceiver |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 10:48 AM 2023/1/20 |
||||
**/ |
||||
object Dua { |
||||
|
||||
fun with(lifecycle: LifecycleOwner): LifLifecycleReceiver { |
||||
return LifLifecycleReceiver(lifecycle) |
||||
} |
||||
} |
@ -0,0 +1,58 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.common.receiver |
||||
|
||||
import androidx.lifecycle.DefaultLifecycleObserver |
||||
import androidx.lifecycle.LifecycleOwner |
||||
import com.arialyy.aria.core.inf.IComponentLoader |
||||
import com.arialyy.aria.core.inf.IDuaReceiver |
||||
import com.arialyy.aria.core.scheduler.TaskSchedulers |
||||
import java.lang.reflect.Proxy |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 11:42 AM 2023/1/20 |
||||
**/ |
||||
class LifLifecycleReceiver(val lifecycle: LifecycleOwner) : IDuaReceiver { |
||||
|
||||
/** |
||||
* You need to associate the appropriate component dependencies |
||||
* @param clazz eg: HttpLoader, FtpLoader |
||||
*/ |
||||
fun <T : IComponentLoader> setLoader(clazz: Class<T>): T { |
||||
return Proxy.newProxyInstance( |
||||
javaClass.classLoader, arrayOf(IComponentLoader::class.java) |
||||
) { proxy, method, args -> |
||||
val result = method.invoke(proxy, args) |
||||
if (method.name in IComponentLoader.proxyMethods) { |
||||
lifecycle.lifecycle.addObserver(object : DefaultLifecycleObserver { |
||||
override fun onCreate(owner: LifecycleOwner) { |
||||
super.onCreate(owner) |
||||
TaskSchedulers.getInstance() |
||||
.register(lifecycle, (proxy as IComponentLoader).getTaskEnum()) |
||||
} |
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) { |
||||
super.onDestroy(owner) |
||||
TaskSchedulers.getInstance().unRegister(lifecycle) |
||||
} |
||||
}) |
||||
} |
||||
return@newProxyInstance result |
||||
} as T |
||||
} |
||||
} |
@ -0,0 +1,24 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.inf |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 11:34 AM 2023/1/20 |
||||
**/ |
||||
interface IDuaReceiver { |
||||
} |
@ -0,0 +1,91 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.manager |
||||
|
||||
import androidx.lifecycle.DefaultLifecycleObserver |
||||
import androidx.lifecycle.Lifecycle |
||||
import androidx.lifecycle.LifecycleOwner |
||||
import com.arialyy.annotations.TaskEnum |
||||
import com.arialyy.aria.core.common.ProxyHelper |
||||
import com.arialyy.aria.core.download.DownloadGroupTaskListener |
||||
import com.arialyy.aria.core.download.DownloadTaskListener |
||||
import com.arialyy.aria.core.scheduler.M3U8PeerTaskListener |
||||
import com.arialyy.aria.core.scheduler.SubTaskListener |
||||
import com.arialyy.aria.core.scheduler.TaskInternalListenerInterface |
||||
import com.arialyy.aria.core.scheduler.TaskSchedulers |
||||
import com.arialyy.aria.util.ALog |
||||
import timber.log.Timber |
||||
import java.util.Timer |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 10:55 AM 2023/1/20 |
||||
**/ |
||||
object LifecycleManager { |
||||
|
||||
private fun register(obj: Any) { |
||||
if (obj is TaskInternalListenerInterface) { |
||||
ProxyHelper.getInstance().checkProxyType(obj.javaClass) |
||||
if (obj is DownloadTaskListener) { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD) |
||||
} |
||||
if (obj is DownloadGroupTaskListener) { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD_GROUP) |
||||
} |
||||
if (obj is M3U8PeerTaskListener) { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.M3U8_PEER) |
||||
} |
||||
if (obj is SubTaskListener<*, *>) { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD_GROUP_SUB) |
||||
} |
||||
return |
||||
} |
||||
val set: Set<Int> = ProxyHelper.getInstance().checkProxyType(obj.javaClass) |
||||
if (set.isNotEmpty()) { |
||||
for (type in set) { |
||||
when (type) { |
||||
ProxyHelper.PROXY_TYPE_DOWNLOAD -> { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD) |
||||
} |
||||
ProxyHelper.PROXY_TYPE_DOWNLOAD_GROUP -> { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD_GROUP) |
||||
} |
||||
ProxyHelper.PROXY_TYPE_M3U8_PEER -> { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.M3U8_PEER) |
||||
} |
||||
ProxyHelper.PROXY_TYPE_DOWNLOAD_GROUP_SUB -> { |
||||
TaskSchedulers.getInstance().register(obj, TaskEnum.DOWNLOAD_GROUP_SUB) |
||||
} |
||||
} |
||||
} |
||||
return |
||||
} |
||||
Timber.e("没有Aria的注解方法,详情见:https://aria.laoyuyu.me/aria_doc/other/annotaion_invalid.html") |
||||
} |
||||
|
||||
fun addObserver(lifecycle: Lifecycle) { |
||||
lifecycle.addObserver(DuaObserver(lifecycle)) |
||||
} |
||||
|
||||
private class DuaObserver(val obj: Lifecycle) : DefaultLifecycleObserver { |
||||
override fun onCreate(owner: LifecycleOwner) { |
||||
super.onCreate(owner) |
||||
register(obj) |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,45 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.http |
||||
|
||||
import com.arialyy.annotations.TaskEnum |
||||
import com.arialyy.aria.core.inf.IBaseLoader |
||||
import com.arialyy.aria.core.inf.IComponentLoader |
||||
import com.arialyy.aria.core.inf.IDownloader |
||||
import com.arialyy.aria.http.download.HttpDownloader |
||||
import kotlin.LazyThreadSafetyMode.SYNCHRONIZED |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 14:07 AM 2023/1/20 |
||||
**/ |
||||
class HttpComponentLoader : IComponentLoader { |
||||
|
||||
private val downloader by lazy(SYNCHRONIZED) { |
||||
HttpDownloader() |
||||
} |
||||
private lateinit var loader: IBaseLoader |
||||
|
||||
override fun <T : IDownloader> download(): T { |
||||
loader = downloader |
||||
return downloader as T |
||||
} |
||||
|
||||
override fun getTaskEnum(): TaskEnum { |
||||
return loader.getTaskEnum() |
||||
} |
||||
} |
@ -0,0 +1,27 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.http |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 14:27 AM 2023/1/20 |
||||
**/ |
||||
class HttpOption { |
||||
|
||||
fun se |
||||
|
||||
} |
@ -0,0 +1,53 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.http.download |
||||
|
||||
import com.arialyy.annotations.TaskEnum |
||||
import com.arialyy.annotations.TaskEnum.DOWNLOAD |
||||
import com.arialyy.aria.core.inf.IDownloader |
||||
import com.arialyy.aria.http.HttpOption |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 14:11 AM 2023/1/20 |
||||
**/ |
||||
internal class HttpDownloader : IDownloader { |
||||
private lateinit var uri: String |
||||
private lateinit var savePath: String |
||||
private var httpOption = HttpOption() |
||||
|
||||
override fun getTaskEnum(): TaskEnum { |
||||
return DOWNLOAD |
||||
} |
||||
|
||||
fun setSourceUri(uri: String): HttpDownloader { |
||||
this.uri = uri |
||||
return this |
||||
} |
||||
|
||||
fun setSavePath(savePath: String): HttpDownloader { |
||||
this.savePath = savePath |
||||
return this |
||||
} |
||||
|
||||
fun setHttpOption(httpOption: HttpOption): HttpDownloader { |
||||
this.httpOption = httpOption |
||||
return this |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,27 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.inf |
||||
|
||||
import com.arialyy.annotations.TaskEnum |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 14:16 AM 2023/1/20 |
||||
**/ |
||||
interface IBaseLoader { |
||||
fun getTaskEnum(): TaskEnum |
||||
} |
@ -0,0 +1,36 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.inf |
||||
|
||||
import com.arialyy.annotations.TaskEnum |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 10:44 AM 2023/1/20 |
||||
**/ |
||||
interface IComponentLoader { |
||||
|
||||
companion object { |
||||
val proxyMethods = arrayOf("download", "upload") |
||||
} |
||||
|
||||
// fun upload() |
||||
|
||||
fun <T : IDownloader> download(): T |
||||
|
||||
fun getTaskEnum(): TaskEnum |
||||
} |
@ -0,0 +1,25 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package com.arialyy.aria.core.inf |
||||
|
||||
/** |
||||
* @Author laoyuyu |
||||
* @Description |
||||
* @Date 14:04 AM 2023/1/20 |
||||
**/ |
||||
interface IDownloader : IBaseLoader { |
||||
|
||||
} |
Loading…
Reference in new issue