mirror of https://github.com/FongMi/TV.git
commit
df3ef46b12
@ -0,0 +1,514 @@ |
||||
{ |
||||
"formatVersion": 1, |
||||
"database": { |
||||
"version": 31, |
||||
"identityHash": "9677fed91d21861b5880fb1e1abfde48", |
||||
"entities": [ |
||||
{ |
||||
"tableName": "Keep", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `siteName` TEXT, `vodName` TEXT, `vodPic` TEXT, `createTime` INTEGER NOT NULL, `type` INTEGER NOT NULL, `cid` INTEGER NOT NULL, PRIMARY KEY(`key`))", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "key", |
||||
"columnName": "key", |
||||
"affinity": "TEXT", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "siteName", |
||||
"columnName": "siteName", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodName", |
||||
"columnName": "vodName", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodPic", |
||||
"columnName": "vodPic", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "createTime", |
||||
"columnName": "createTime", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "type", |
||||
"columnName": "type", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "cid", |
||||
"columnName": "cid", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": false, |
||||
"columnNames": [ |
||||
"key" |
||||
] |
||||
}, |
||||
"indices": [], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Site", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `searchable` INTEGER, `changeable` INTEGER, PRIMARY KEY(`key`))", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "key", |
||||
"columnName": "key", |
||||
"affinity": "TEXT", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "searchable", |
||||
"columnName": "searchable", |
||||
"affinity": "INTEGER", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "changeable", |
||||
"columnName": "changeable", |
||||
"affinity": "INTEGER", |
||||
"notNull": false |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": false, |
||||
"columnNames": [ |
||||
"key" |
||||
] |
||||
}, |
||||
"indices": [], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Live", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`name` TEXT NOT NULL, `boot` INTEGER NOT NULL, `pass` INTEGER NOT NULL, PRIMARY KEY(`name`))", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "name", |
||||
"columnName": "name", |
||||
"affinity": "TEXT", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "boot", |
||||
"columnName": "boot", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "pass", |
||||
"columnName": "pass", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": false, |
||||
"columnNames": [ |
||||
"name" |
||||
] |
||||
}, |
||||
"indices": [], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Track", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `type` INTEGER NOT NULL, `group` INTEGER NOT NULL, `track` INTEGER NOT NULL, `player` INTEGER NOT NULL, `key` TEXT, `name` TEXT, `selected` INTEGER NOT NULL, `adaptive` INTEGER NOT NULL)", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "id", |
||||
"columnName": "id", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "type", |
||||
"columnName": "type", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "group", |
||||
"columnName": "group", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "track", |
||||
"columnName": "track", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "player", |
||||
"columnName": "player", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "key", |
||||
"columnName": "key", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "name", |
||||
"columnName": "name", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "selected", |
||||
"columnName": "selected", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "adaptive", |
||||
"columnName": "adaptive", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": true, |
||||
"columnNames": [ |
||||
"id" |
||||
] |
||||
}, |
||||
"indices": [ |
||||
{ |
||||
"name": "index_Track_key_player_type", |
||||
"unique": true, |
||||
"columnNames": [ |
||||
"key", |
||||
"player", |
||||
"type" |
||||
], |
||||
"orders": [], |
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Track_key_player_type` ON `${TABLE_NAME}` (`key`, `player`, `type`)" |
||||
} |
||||
], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Config", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `type` INTEGER NOT NULL, `time` INTEGER NOT NULL, `url` TEXT, `json` TEXT, `name` TEXT, `logo` TEXT, `home` TEXT, `parse` TEXT)", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "id", |
||||
"columnName": "id", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "type", |
||||
"columnName": "type", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "time", |
||||
"columnName": "time", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "url", |
||||
"columnName": "url", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "json", |
||||
"columnName": "json", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "name", |
||||
"columnName": "name", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "logo", |
||||
"columnName": "logo", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "home", |
||||
"columnName": "home", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "parse", |
||||
"columnName": "parse", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": true, |
||||
"columnNames": [ |
||||
"id" |
||||
] |
||||
}, |
||||
"indices": [ |
||||
{ |
||||
"name": "index_Config_url_type", |
||||
"unique": true, |
||||
"columnNames": [ |
||||
"url", |
||||
"type" |
||||
], |
||||
"orders": [], |
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Config_url_type` ON `${TABLE_NAME}` (`url`, `type`)" |
||||
} |
||||
], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Device", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `uuid` TEXT, `name` TEXT, `ip` TEXT, `type` INTEGER NOT NULL)", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "id", |
||||
"columnName": "id", |
||||
"affinity": "INTEGER", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "uuid", |
||||
"columnName": "uuid", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "name", |
||||
"columnName": "name", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "ip", |
||||
"columnName": "ip", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "type", |
||||
"columnName": "type", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": true, |
||||
"columnNames": [ |
||||
"id" |
||||
] |
||||
}, |
||||
"indices": [ |
||||
{ |
||||
"name": "index_Device_uuid_name", |
||||
"unique": true, |
||||
"columnNames": [ |
||||
"uuid", |
||||
"name" |
||||
], |
||||
"orders": [], |
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Device_uuid_name` ON `${TABLE_NAME}` (`uuid`, `name`)" |
||||
} |
||||
], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "History", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`key` TEXT NOT NULL, `vodPic` TEXT, `vodName` TEXT, `vodFlag` TEXT, `vodRemarks` TEXT, `episodeUrl` TEXT, `revSort` INTEGER NOT NULL, `revPlay` INTEGER NOT NULL, `createTime` INTEGER NOT NULL, `opening` INTEGER NOT NULL, `ending` INTEGER NOT NULL, `position` INTEGER NOT NULL, `duration` INTEGER NOT NULL, `speed` REAL NOT NULL, `player` INTEGER NOT NULL, `scale` INTEGER NOT NULL, `cid` INTEGER NOT NULL, PRIMARY KEY(`key`))", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "key", |
||||
"columnName": "key", |
||||
"affinity": "TEXT", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "vodPic", |
||||
"columnName": "vodPic", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodName", |
||||
"columnName": "vodName", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodFlag", |
||||
"columnName": "vodFlag", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodRemarks", |
||||
"columnName": "vodRemarks", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "episodeUrl", |
||||
"columnName": "episodeUrl", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "revSort", |
||||
"columnName": "revSort", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "revPlay", |
||||
"columnName": "revPlay", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "createTime", |
||||
"columnName": "createTime", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "opening", |
||||
"columnName": "opening", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "ending", |
||||
"columnName": "ending", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "position", |
||||
"columnName": "position", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "duration", |
||||
"columnName": "duration", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "speed", |
||||
"columnName": "speed", |
||||
"affinity": "REAL", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "player", |
||||
"columnName": "player", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "scale", |
||||
"columnName": "scale", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "cid", |
||||
"columnName": "cid", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": false, |
||||
"columnNames": [ |
||||
"key" |
||||
] |
||||
}, |
||||
"indices": [], |
||||
"foreignKeys": [] |
||||
}, |
||||
{ |
||||
"tableName": "Download", |
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `vodPic` TEXT, `vodName` TEXT, `url` TEXT, `header` TEXT, `createTime` INTEGER NOT NULL, PRIMARY KEY(`id`))", |
||||
"fields": [ |
||||
{ |
||||
"fieldPath": "id", |
||||
"columnName": "id", |
||||
"affinity": "TEXT", |
||||
"notNull": true |
||||
}, |
||||
{ |
||||
"fieldPath": "vodPic", |
||||
"columnName": "vodPic", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "vodName", |
||||
"columnName": "vodName", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "url", |
||||
"columnName": "url", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "header", |
||||
"columnName": "header", |
||||
"affinity": "TEXT", |
||||
"notNull": false |
||||
}, |
||||
{ |
||||
"fieldPath": "createTime", |
||||
"columnName": "createTime", |
||||
"affinity": "INTEGER", |
||||
"notNull": true |
||||
} |
||||
], |
||||
"primaryKey": { |
||||
"autoGenerate": false, |
||||
"columnNames": [ |
||||
"id" |
||||
] |
||||
}, |
||||
"indices": [], |
||||
"foreignKeys": [] |
||||
} |
||||
], |
||||
"views": [], |
||||
"setupQueries": [ |
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", |
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '9677fed91d21861b5880fb1e1abfde48')" |
||||
] |
||||
} |
||||
} |
||||
@ -0,0 +1,134 @@ |
||||
package com.fongmi.android.tv.bean; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.room.Entity; |
||||
import androidx.room.PrimaryKey; |
||||
|
||||
import com.fongmi.android.tv.App; |
||||
import com.fongmi.android.tv.db.AppDatabase; |
||||
import com.github.catvod.utils.Util; |
||||
import com.google.gson.annotations.SerializedName; |
||||
import com.google.gson.reflect.TypeToken; |
||||
|
||||
import java.lang.reflect.Type; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
|
||||
@Entity |
||||
public class Download { |
||||
|
||||
@NonNull |
||||
@PrimaryKey |
||||
@SerializedName("id") |
||||
private String id; |
||||
@SerializedName("vodPic") |
||||
private String vodPic; |
||||
@SerializedName("vodName") |
||||
private String vodName; |
||||
@SerializedName("url") |
||||
private String url; |
||||
@SerializedName("header") |
||||
private String header; |
||||
@SerializedName("createTime") |
||||
private long createTime; |
||||
|
||||
public static Download objectFrom(String str) { |
||||
return App.gson().fromJson(str, Download.class); |
||||
} |
||||
|
||||
public static List<Download> arrayFrom(String str) { |
||||
Type listType = new TypeToken<List<Download>>() {}.getType(); |
||||
List<Download> items = App.gson().fromJson(str, listType); |
||||
return items == null ? Collections.emptyList() : items; |
||||
} |
||||
|
||||
public Download(String vodName, String vodPic, String url, String header) { |
||||
this.id = Util.md5(url); |
||||
this.vodName = vodName; |
||||
this.vodPic = vodPic; |
||||
this.url = url; |
||||
this.header = header; |
||||
setCreateTime(System.currentTimeMillis()); |
||||
} |
||||
|
||||
@NonNull |
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(@NonNull String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getVodPic() { |
||||
return vodPic; |
||||
} |
||||
|
||||
public void setVodPic(String vodPic) { |
||||
this.vodPic = vodPic; |
||||
} |
||||
|
||||
public String getVodName() { |
||||
return vodName; |
||||
} |
||||
|
||||
public void setVodName(String vodName) { |
||||
this.vodName = vodName; |
||||
} |
||||
|
||||
public String getUrl() { |
||||
return url; |
||||
} |
||||
|
||||
public void setUrl(String url) { |
||||
this.url = url; |
||||
} |
||||
|
||||
public String getHeader() { |
||||
return header; |
||||
} |
||||
|
||||
public void setHeader(String header) { |
||||
this.header = header; |
||||
} |
||||
|
||||
public long getCreateTime() { |
||||
return createTime; |
||||
} |
||||
|
||||
public void setCreateTime(long createTime) { |
||||
this.createTime = createTime; |
||||
} |
||||
|
||||
public static List<Download> get() { |
||||
return AppDatabase.get().getDownloadDao().find(); |
||||
} |
||||
|
||||
public static void delete(String url) { |
||||
AppDatabase.get().getDownloadDao().delete(Util.md5(url)); |
||||
} |
||||
|
||||
public static void delete(Download download) { |
||||
AppDatabase.get().getDownloadDao().delete(download.getId()); |
||||
} |
||||
|
||||
public static void clear() { |
||||
AppDatabase.get().getDownloadDao().delete(); |
||||
} |
||||
|
||||
public Download delete() { |
||||
AppDatabase.get().getDownloadDao().delete(getId()); |
||||
return this; |
||||
} |
||||
|
||||
public Download save() { |
||||
AppDatabase.get().getDownloadDao().insertOrUpdate(this); |
||||
return this; |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public String toString() { |
||||
return App.gson().toJson(this); |
||||
} |
||||
} |
||||
@ -0,0 +1,23 @@ |
||||
package com.fongmi.android.tv.db.dao; |
||||
|
||||
import androidx.room.Dao; |
||||
import androidx.room.Query; |
||||
|
||||
import com.fongmi.android.tv.bean.Download; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Dao |
||||
public abstract class DownloadDao extends BaseDao<Download> { |
||||
|
||||
@Query("SELECT * FROM Download ORDER BY createTime DESC") |
||||
public abstract List<Download> find(); |
||||
@Query("SELECT * FROM Download WHERE id = :id ORDER BY createTime DESC") |
||||
public abstract Download find(String id); |
||||
|
||||
@Query("DELETE FROM Download WHERE id = :id") |
||||
public abstract void delete(String id); |
||||
|
||||
@Query("DELETE FROM Download") |
||||
public abstract void delete(); |
||||
} |
||||
@ -1,32 +0,0 @@ |
||||
package com.fongmi.android.tv.player; |
||||
|
||||
import android.app.Activity; |
||||
import com.fongmi.android.tv.bean.Result; |
||||
|
||||
public class Download{ |
||||
|
||||
|
||||
|
||||
private static class Loader { |
||||
static volatile Download INSTANCE = new Download(); |
||||
} |
||||
|
||||
public static Download get() { |
||||
return Loader.INSTANCE; |
||||
} |
||||
|
||||
public void title(String title) { |
||||
|
||||
} |
||||
|
||||
public Download result(Result result) { |
||||
return this; |
||||
} |
||||
|
||||
public void start(Activity activity) { |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,54 @@ |
||||
package com.fongmi.android.tv.utils; |
||||
|
||||
import android.app.Activity; |
||||
import com.fongmi.android.tv.bean.Result; |
||||
|
||||
import java.util.Map; |
||||
|
||||
public class Downloader { |
||||
|
||||
private Result result; |
||||
private Activity activity; |
||||
private String title; |
||||
private String image; |
||||
|
||||
private static class Loader { |
||||
static volatile Downloader INSTANCE = new Downloader(); |
||||
} |
||||
|
||||
public static Downloader get() { |
||||
return Loader.INSTANCE; |
||||
} |
||||
|
||||
public Downloader title(String title) { |
||||
this.title = title; |
||||
return this; |
||||
} |
||||
public Downloader image(String image) { |
||||
this.image = image; |
||||
return this; |
||||
} |
||||
|
||||
public Downloader result(Result result) { |
||||
this.result = result; |
||||
return this; |
||||
} |
||||
|
||||
public void start(Activity activity) { |
||||
this.activity = activity; |
||||
if (result.hasMsg()) { |
||||
Notify.show(result.getMsg()); |
||||
} else { |
||||
download(); |
||||
} |
||||
} |
||||
|
||||
private void download() { |
||||
download(result.getHeaders(), result.getRealUrl()); |
||||
} |
||||
|
||||
private void download(Map<String, String> headers, String url) { |
||||
IDMUtil.downloadFile(activity, UrlUtil.fixDownloadUrl(url), title, headers, false, false); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue