提交 f9df85a0 编写于 作者: DCloud-yyl's avatar DCloud-yyl

同步代码@HBuilderX4.23

上级 c485ce15
......@@ -269,7 +269,7 @@ export type ReadDirOptions = {
export type AccessOptions = {
/**
* 要删除的目录路径 (本地路径)
* 要判断是否存在的文件/目录路径 (本地路径)
*/
path : string.URIString,
......@@ -1104,7 +1104,7 @@ export interface FileSystemManager {
access(options : AccessOptions) : void;
/**
* FileSystemManager.access 的同步版本
* @param path 要删除的目录路径 (本地路径)
* @param path 要判断是否存在的文件/目录路径 (本地路径)
* @uniPlatform {
* "app": {
* "android": {
......
......@@ -63,7 +63,7 @@ function getBaseInfo(filterArray : Array<string>) : GetDeviceInfoResult {
result.deviceId = DeviceUtil.getDeviceID(activity);
}
if (filterArray.indexOf("devicePixelRatio") != -1) {
result.devicePixelRatio = DeviceUtil.getScaledDensity(activity) + "";
result.devicePixelRatio = DeviceUtil.getScaledDensity(activity);
}
if (filterArray.indexOf("system") != -1) {
result.system = "Android " + Build.VERSION.RELEASE;
......
......@@ -28,15 +28,6 @@ export class DeviceUtil {
return orientation;
}
public static getScreenScale(): string {
return UIScreen.main.scale.description;
}
public static getIdfa(): string {
return UTSiOS.getGgbs()
}
public static hasRootPrivilege(): boolean {
return UTSiOS.isRoot()
}
......
......@@ -64,7 +64,7 @@ function getBaseInfo(filterArray : Array<string>) : GetDeviceInfoResult {
result.deviceOrientation = DeviceUtil.getOrientation();
}
if (filterArray.indexOf("devicePixelRatio") != -1) {
result.devicePixelRatio = DeviceUtil.getScreenScale();
result.devicePixelRatio = Number.from(UIScreen.main.scale);
}
if (filterArray.indexOf("system") != -1) {
result.system = String(format = "iOS %@", osVersion);
......
......@@ -151,7 +151,7 @@ export type GetDeviceInfoOptions = {
* }
* }
*/
deviceType?: string,
deviceType?: 'phone' | 'pad' | 'tv' | 'watch' | 'pc' | 'undefined' | 'car' | 'vr' | 'appliance',
/**
* 设备方向 竖屏 portrait、横屏 landscape
*
......@@ -199,7 +199,7 @@ export type GetDeviceInfoOptions = {
* }
* }
*/
devicePixelRatio?: string,
devicePixelRatio?: number,
/**
* 操作系统及版本
*
......@@ -247,7 +247,7 @@ export type GetDeviceInfoOptions = {
* }
* }
*/
platform?: string,
platform?: 'ios' | 'android' | 'mac' | 'windows' | 'linux',
/**
* 是否root。iOS 为是否越狱
*
......
import { RequestOptions, RequestTask, UploadTask, UploadFileOptions, OnProgressUpdateResult, UploadFileProgressUpdateCallback, OnProgressDownloadResult, DownloadTask, DownloadFileOptions, DownloadFileProgressUpdateCallback } from '../interface.uts';
import { UTSiOS } from "DCloudUTSFoundation";
import { URLSessionDataDelegate, URL, CharacterSet, URLSession, URLSessionConfiguration, OperationQueue, URLSessionTask, URLResponse, URLSessionDataTask, URLAuthenticationChallengeSender, URLAuthenticationChallenge, URLCredential, URLSessionTaskMetrics, Data, HTTPURLResponse, NSError, URLRequest, ComparisonResult } from 'Foundation';
import { URLSessionDataDelegate, URL, CharacterSet, URLSession, URLSessionConfiguration, OperationQueue, URLSessionTask, URLResponse, URLSessionDataTask, URLAuthenticationChallengeSender, URLAuthenticationChallenge, URLCredential, URLSessionTaskMetrics, Data, HTTPURLResponse, NSError, URLRequest, ComparisonResult } from 'Foundation';
import { UploadController } from './upload/UploadController.uts';
import { DownloadController } from './download/DownloadController.uts';
import { DownloadController } from './download/DownloadController.uts';
class NetworkRequestListener {
public onStart() : void { }
......@@ -14,21 +14,21 @@ class NetworkRequestListener {
public onFinished(response : HTTPURLResponse) : void { }
public onFail(error : NSError) : void { }
}
interface NetworkUploadFileListener {
progressListeners: Array<UploadFileProgressUpdateCallback>;
onProgress(progressUpdate: OnProgressUpdateResult): void;
onDataReceived(data : Data) : void;
onFinished(response : HTTPURLResponse) : void;
onFail(error : NSError) : void;
}
interface NetworkDownloadFileListener {
}
interface NetworkUploadFileListener {
progressListeners : Array<UploadFileProgressUpdateCallback>;
onProgress(progressUpdate : OnProgressUpdateResult) : void;
onDataReceived(data : Data) : void;
onFinished(response : HTTPURLResponse) : void;
onFail(error : NSError) : void;
}
interface NetworkDownloadFileListener {
options : DownloadFileOptions | null;
progressListeners: Array<DownloadFileProgressUpdateCallback>;
onProgress(progressUpdate: OnProgressDownloadResult): void;
onFinished(response : HTTPURLResponse, filePath: string) : void;
progressListeners : Array<DownloadFileProgressUpdateCallback>;
onProgress(progressUpdate : OnProgressDownloadResult) : void;
onFinished(response : HTTPURLResponse, filePath : string) : void;
onFail(error : NSError) : void;
}
......@@ -80,19 +80,19 @@ class NetworkManager implements URLSessionDataDelegate {
}
let requestTask = new NetworkRequestTaskImpl(task);
return requestTask;
}
public uploadFile(options: UploadFileOptions, listener: NetworkUploadFileListener): UploadTask {
return UploadController.getInstance().uploadFile(options, listener);
}
public downloadFile(options: DownloadFileOptions, listener: NetworkDownloadFileListener): DownloadTask {
return DownloadController.getInstance().downloadFile(options, listener);
}
public uploadFile(options : UploadFileOptions, listener : NetworkUploadFileListener) : UploadTask {
return UploadController.getInstance().uploadFile(options, listener);
}
public downloadFile(options : DownloadFileOptions, listener : NetworkDownloadFileListener) : DownloadTask {
return DownloadController.getInstance().downloadFile(options, listener);
}
public createRequest<T>(param : RequestOptions<T>) : URLRequest | null {
const encodeUrl = this.percentEscapedString(param.url)
public createRequest<T>(param : RequestOptions<T>) : URLRequest | null {
const encodeUrl = this.percentEscapedString(param.url)
let url = new URL(string = encodeUrl);
if (url == null) {
return null
......@@ -121,17 +121,19 @@ class NetworkManager implements URLSessionDataDelegate {
let hasContentType = false;
if (headers != null) {
for (entry in headers!) {
let key = entry.key;
let key = entry.key;
let value = entry.value;
if (key.caseInsensitiveCompare("Content-Type") == ComparisonResult.orderedSame) {
hasContentType = true;
}
let valueStr = "";
if (value instanceof UTSJSONObject) {
valueStr = JSON.stringify(value) ?? ""
}else{
valueStr = `${value}`
}
let valueStr = "";
if (value instanceof UTSJSONObject) {
valueStr = JSON.stringify(value) ?? ""
} else if (value instanceof Map<string, any>) {
valueStr = JSON.stringify(new UTSJSONObject(value)) ?? ""
} else {
valueStr = `${value}`
}
request.setValue(valueStr, forHTTPHeaderField = key);
}
}
......@@ -140,7 +142,7 @@ class NetworkManager implements URLSessionDataDelegate {
if ("GET" != method) {
request.setValue("application/json", forHTTPHeaderField = "Content-Type");
}
}
}
if ("GET" == method) {
const data = param.data;
if (data != null) {
......@@ -149,10 +151,12 @@ class NetworkManager implements URLSessionDataDelegate {
json = JSON.parseObject(data as string);
} else if (data instanceof UTSJSONObject) {
json = data as UTSJSONObject;
}
} else if (data instanceof Map<string, any>) {
json = new UTSJSONObject(data!)
}
if (json != null) {
let urlWithQuery = this.stringifyQuery(encodeUrl, json!)
let url = new URL(string = urlWithQuery);
let urlWithQuery = this.stringifyQuery(encodeUrl, json!)
let url = new URL(string = urlWithQuery);
request.url = url;
}
}
......@@ -160,6 +164,23 @@ class NetworkManager implements URLSessionDataDelegate {
let bodyData : Data | null = null;
if (typeof (param.data) == 'string') {
bodyData = (param.data as string).data(using = String.Encoding.utf8);
} else if (param.data instanceof Map<string, any>) {
let body : string | null = "";
const contentType = request.value(forHTTPHeaderField = "Content-Type")
const data = new UTSJSONObject(param.data!);
if (contentType != null) {
if (contentType!.indexOf("application/x-www-form-urlencoded") == 0) {
const map : Map<string, any | null> = data.toMap();
const bodyArray = new Array<string>();
map.forEach((value, key) => {
bodyArray.push(key + "=" + `${value ?? "null"}`);
})
body = bodyArray.join("&");
} else {
body = JSON.stringify(data);
}
bodyData = body?.data(using = String.Encoding.utf8);
}
} else if (param.data instanceof UTSJSONObject) {
let body : string | null = "";
const contentType = request.value(forHTTPHeaderField = "Content-Type")
......@@ -183,8 +204,8 @@ class NetworkManager implements URLSessionDataDelegate {
}
request.httpBody = bodyData;
}
}
return request;
}
......@@ -207,42 +228,44 @@ class NetworkManager implements URLSessionDataDelegate {
newUrl = str[0] // http:xxx/xxx
const pairs = query.split('&')
const queryMap = new Map<string, string>();
pairs.forEach((item: string, index: number) => {
pairs.forEach((item : string, index : number) => {
const temp = item.split('=')
if (temp.length > 1) {
queryMap[temp[0]] = temp[1]
}
});
const dataMap : Map<string, any | null> = data.toMap();
dataMap.forEach((value, key) => {
if(value == null){
value = "";
}
let encodeKey = encodeURIComponent(key)!
if (value instanceof UTSJSONObject || value instanceof Array<any|null>){
queryMap[encodeKey] = encodeURIComponent(JSON.stringify(value)!)!
}else{
queryMap[encodeKey] = encodeURIComponent(`${value!}`)!;
dataMap.forEach((value, key) => {
if (value == null) {
value = "";
}
let encodeKey = encodeURIComponent(key)!
if (value instanceof UTSJSONObject || value instanceof Array<any | null>) {
queryMap[encodeKey] = encodeURIComponent(JSON.stringify(value)!)!
} else if (value instanceof Map<string, any>) {
queryMap[encodeKey] = encodeURIComponent(JSON.stringify(new UTSJSONObject(value))!)!
} else {
queryMap[encodeKey] = encodeURIComponent(`${value!}`)!;
}
})
let queryStr = "";
queryMap.forEach((value, key) => {
queryStr += key + "=" + value + "&"
});
});
queryStr = queryStr.slice(0, -1);
if (queryStr.length > 0) {
newUrl += "?" + queryStr;
}
if (hash.length > 0) {
newUrl += "#" + hash;
}
}
return newUrl;
}
private percentEscapedString(str: string): string {
//如果url已经有部分经过encode,那么需要先decode再encode。
return str.removingPercentEncoding?.addingPercentEncoding(withAllowedCharacters= CharacterSet.urlQueryAllowed) ?? str
}
private percentEscapedString(str : string) : string {
//如果url已经有部分经过encode,那么需要先decode再encode。
return str.removingPercentEncoding?.addingPercentEncoding(withAllowedCharacters = CharacterSet.urlQueryAllowed) ?? str
}
......@@ -287,7 +310,7 @@ class NetworkManager implements URLSessionDataDelegate {
export {
NetworkManager,
NetworkRequestListener,
NetworkUploadFileListener,
NetworkRequestListener,
NetworkUploadFileListener,
NetworkDownloadFileListener
}
\ No newline at end of file
......@@ -91,6 +91,8 @@ export class DownloadController implements URLSessionDownloadDelegate {
let valueStr = "";
if (value instanceof UTSJSONObject) {
valueStr = JSON.stringify(value) ?? ""
}else if(value instanceof Map<string, any>){
valueStr = JSON.stringify(new UTSJSONObject(value)) ?? ""
}else{
valueStr = `${value}`
}
......
......@@ -97,6 +97,8 @@ class UploadController implements URLSessionDataDelegate {
let valueStr = "";
if (value instanceof UTSJSONObject) {
valueStr = JSON.stringify(value) ?? ""
}else if(value instanceof Map<string, any>){
valueStr = JSON.stringify(new UTSJSONObject(value)) ?? ""
}else{
valueStr = `${value}`
}
......@@ -119,6 +121,11 @@ class UploadController implements URLSessionDataDelegate {
if (valueStr != null) {
this.fillTextPart(body, boundary, key, valueStr as string)
}
}else if(value instanceof Map<string, any>){
let valueStr = JSON.stringify(new UTSJSONObject(value))
if (valueStr != null) {
this.fillTextPart(body, boundary, key, valueStr as string)
}
}else{
this.fillTextPart(body, boundary, key, `${value}`)
}
......
......@@ -107,7 +107,11 @@ export const setTabBarStyle = defineAsyncApi<
['backgroundImage', options.backgroundImage],
['backgroundRepeat', options.backgroundRepeat],
])
if (isString(options.borderStyle)) {
if (isString(options.borderColor)) {
style.set(
'borderStyle', options.borderColor as string,
)
} else if (isString(options.borderStyle)) {
style.set(
'borderStyle',
getTabBarBorderStyle(options.borderStyle as string),
......
......@@ -235,10 +235,33 @@ export type SetTabBarStyleOptions = {
* - no-repeat: 背景图片在垂直方向和水平方向都拉伸
*/
backgroundRepeat?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'
/**
* tabbar上边框的颜色(优先级高于 borderStyle)
* @tutorial https://doc.dcloud.net.cn/uni-app-x/api/set-tabbar.html#settabbarstyle
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "x",
* "unixVer": "x"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "x",
* "unixVer": "4.23"
* }
* },
* "web": {
* "uniVer": "x",
* "unixVer": "4.23"
* }
* }
*/
borderColor?: string | string.ColorString
/**
* tabbar上边框的颜色
*/
borderStyle?: string
borderStyle?: 'black' | 'white'
/**
* tabbar 中间按钮 仅在 list 项为偶数时有效
* @internal
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册