迁移仓库

This commit is contained in:
2026-02-24 09:55:08 +08:00
parent 2d5c056b82
commit df6210aaf7
30 changed files with 1121 additions and 81 deletions

View File

@@ -0,0 +1,83 @@
//
// GDWebAssetStorageService.m
// DESThreeTest
//
// Created by Qwerdf on 2025/10/24.
// Copyright © 2025 zhang alan. All rights reserved.
//
#import "GDWebAssetStorageService.h"
@implementation GDWebAssetStorageService
#pragma mark -
- (instancetype)initWithSchemeTask:(id<WKURLSchemeTask>)task {
if (self = [super init]) {
_schemeTask = task;
}
return self;
}
#pragma mark - GDWebCustomURLSchemeProtocol
+ (BOOL)canService:(id<WKURLSchemeTask>)task {
// "asset://"
NSString *scheme = task.request.URL.scheme.lowercaseString;
return [scheme isEqualToString:@"asset"];
}
- (void)startLoading:(void (^)(void))completion {
self.completion = completion;
NSURLRequest *request = self.schemeTask.request;
NSURL *url = request.URL;
// 1. asset://images/logo.png -> images/logo.png
NSString *path = [url.path stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]];
NSString *localPath = [[NSBundle mainBundle] pathForResource:path ofType:nil];
if (!localPath) {
// Documents
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:path];
localPath = docPath;
}
// 2.
if ([[NSFileManager defaultManager] fileExistsAtPath:localPath]) {
NSData *data = [NSData dataWithContentsOfFile:localPath];
NSString *mimeType = [self mimeTypeForPath:localPath];
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:url
MIMEType:mimeType
expectedContentLength:data.length
textEncodingName:@"UTF-8"];
//
[self.schemeTask didReceiveResponse:response];
[self.schemeTask didReceiveData:data];
[self.schemeTask didFinish];
} else {
// 404
NSError *error = [NSError errorWithDomain:NSURLErrorDomain
code:NSURLErrorFileDoesNotExist
userInfo:@{NSLocalizedDescriptionKey: @"本地资源不存在"}];
[self.schemeTask didFailWithError:error];
}
//
if (completion) completion();
}
- (void)stopLoading {
//
self.schemeTask = nil;
if (self.completion) self.completion();
}
#pragma mark - MIME
- (NSString *)mimeTypeForPath:(NSString *)path {
NSString *extension = [path pathExtension].lowercaseString;
if ([extension isEqualToString:@"html"]) return @"text/html";
if ([extension isEqualToString:@"js"]) return @"application/javascript";
if ([extension isEqualToString:@"css"]) return @"text/css";
if ([extension isEqualToString:@"png"]) return @"image/png";
if ([extension isEqualToString:@"jpg"] || [extension isEqualToString:@"jpeg"]) return @"image/jpeg";
return @"application/octet-stream";
}
@end