diff --git a/Sources/CSFloatKit/Model/CSM/CSMScreenshot.swift b/Sources/CSFloatKit/Model/CSM/CSMScreenshot.swift index 49da2cd..a7653dc 100644 --- a/Sources/CSFloatKit/Model/CSM/CSMScreenshot.swift +++ b/Sources/CSFloatKit/Model/CSM/CSMScreenshot.swift @@ -47,3 +47,22 @@ import Foundation self.init(status: status, cached: cached, imageURL: imageURL, previewURL: previewURL, error: error) } } + +extension CSMScreenshot { + var preview3D: String? { + let regex = "(?:https:\\/\\/s1.cs.money\\/)([A-Za-z0-9_\\-]{7})" + guard let imageURL = self.imageURL else { + return nil + } + let idNsRange = NSRange(location: 0, length: imageURL.utf16.count) + do { + let expression = try NSRegularExpression(pattern: regex) + let firstMatch = expression.firstMatch(in: imageURL, options: [], range: idNsRange) + guard let nsRange = firstMatch?.range(at: 1), + let range = Range(nsRange, in: imageURL) else { return nil } + return "https://3d.cs.money/item/\(imageURL[range])" + } catch { + return nil + } + } +} diff --git a/Tests/CSFloatKitTests/CSFloatKitTests.swift b/Tests/CSFloatKitTests/CSFloatKitTests.swift index 5686081..a1d0257 100644 --- a/Tests/CSFloatKitTests/CSFloatKitTests.swift +++ b/Tests/CSFloatKitTests/CSFloatKitTests.swift @@ -57,4 +57,26 @@ final class CSFloatKitTests: XCTestCase { XCTAssertNotNil(screenshot) } } + + func testPreview3D() { + let exp = expectation(description: "CSM Screenshot") + var previewURL: String? + guard let config = CSMConfiguration(inspectLink: "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561199043158336A20517916623D14133434752320963923") else { + XCTFail("Invalid inspect link for CSM Service") + return + } + let request = CSMRequester(configuration: config, completion: { (fetchedScreenshot, error) in + XCTAssertEqual(error, .noError) + XCTAssertNotNil(fetchedScreenshot) + guard let actualScreenshot = fetchedScreenshot else { return } + previewURL = actualScreenshot.preview3D + XCTAssertEqual(previewURL, "https://3d.cs.money/item/TWXUyFZ") + exp.fulfill() + }) + request.start() + + waitForExpectations(timeout: 10) { (error) in + XCTAssertNotNil(previewURL) + } + } }