Compare commits
	
		
			9 Commits
		
	
	
		
			v0.0.20.1
			...
			221f276c4b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 221f276c4b | |||
| 24cec21465 | |||
| 9f71ec6194 | |||
| bb36afc390 | |||
| b53bf0ff64 | |||
| 3ebc6f2436 | |||
| 2eef6778a6 | |||
| 81fabec810 | |||
| dc6e7924b5 | 
@@ -15,5 +15,6 @@ jobs:
 | 
			
		||||
          submodules: true
 | 
			
		||||
      - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
 | 
			
		||||
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
			
		||||
      - run: sudo apt update && sudo apt install -y mingw-w64
 | 
			
		||||
      - run: make all -j`nproc`
 | 
			
		||||
      - run: echo "🍏 This job's status is ${{ job.status }}."
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
MAKEFLAGS += --warn-undefined-variables
 | 
			
		||||
MAKEFLAGS += --no-builtin-rules
 | 
			
		||||
 | 
			
		||||
VERSION_CODE := 22
 | 
			
		||||
VERSION_CODE := 23
 | 
			
		||||
VERSION_NUMBER := 0.0.21-wip
 | 
			
		||||
VERSION_NAME := Psst.  Look behind you.
 | 
			
		||||
 | 
			
		||||
@@ -63,7 +63,11 @@ ANDROID_MIN_SDK_VERSION := 24
 | 
			
		||||
ANDROID_TARGET_SDK_VERSION := 34
 | 
			
		||||
ANDROID_BUILD_TOOLS := $(ANDROID_SDK)/build-tools/34.0.0
 | 
			
		||||
ANDROID_PLATFORM := $(ANDROID_SDK)/platforms/android-$(ANDROID_TARGET_SDK_VERSION)
 | 
			
		||||
ifneq "$(wildcard $(ANDROID_SDK)/ndk/27.0.12077973/.)" ""
 | 
			
		||||
ANDROID_NDK ?= $(ANDROID_SDK)/ndk/27.0.12077973
 | 
			
		||||
else
 | 
			
		||||
ANDROID_NDK ?= $(ANDROID_SDK)/ndk/26.2.11394342
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ANDROID_ARMV7A_TARGETS := \
 | 
			
		||||
	out/androiddebug-armv7a/tildefriends \
 | 
			
		||||
@@ -914,7 +918,7 @@ fetchdeps:
 | 
			
		||||
 | 
			
		||||
ANDROID_DEPS := deps/openssl/android/arm64-v8a/usr/local/lib/libssl.a
 | 
			
		||||
$(ANDROID_DEPS):
 | 
			
		||||
	+@tools/ssl-android
 | 
			
		||||
	+@ANDROID_NDK_ROOT=$(ANDROID_NDK) tools/ssl-android
 | 
			
		||||
$(filter $(BUILD_DIR)/android%,$(APP_OBJS)): | $(ANDROID_DEPS)
 | 
			
		||||
 | 
			
		||||
ifeq ($(HAVE_WIN),1)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
	"type": "tildefriends-app",
 | 
			
		||||
	"emoji": "🐌",
 | 
			
		||||
	"previous": "&TqpkOAi38Oi6gW6guh95KIvWY2M/vjBE8NLLNHK+M00=.sha256"
 | 
			
		||||
	"previous": "&2xK//SIpjFb0+uT5I7MSAGJ3d1FKuI/rlzhcCQd3NME=.sha256"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -538,7 +538,7 @@ class TfComposeElement extends LitElement {
 | 
			
		||||
							id="edit"
 | 
			
		||||
							@input=${this.input}
 | 
			
		||||
							@paste=${this.paste}
 | 
			
		||||
							contenteditable
 | 
			
		||||
							contenteditable="plaintext-only"
 | 
			
		||||
							.innerText=${live(draft.text ?? '')}
 | 
			
		||||
						></span>
 | 
			
		||||
					</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -211,10 +211,6 @@ async function socket(request, response, client) {
 | 
			
		||||
				if (process && process.timeout > 0) {
 | 
			
		||||
					setTimeout(ping, process.timeout);
 | 
			
		||||
				}
 | 
			
		||||
			} else if (message.action == 'enableStats') {
 | 
			
		||||
				if (process) {
 | 
			
		||||
					core.enableStats(process, message.enabled);
 | 
			
		||||
				}
 | 
			
		||||
			} else if (message.action == 'resetPermission') {
 | 
			
		||||
				if (process) {
 | 
			
		||||
					process.resetPermission(message.permission);
 | 
			
		||||
 
 | 
			
		||||
@@ -1274,7 +1274,6 @@ function _receive_websocket_message(message) {
 | 
			
		||||
		document.getElementById('viewPane').style.display = message.edit_only
 | 
			
		||||
			? 'none'
 | 
			
		||||
			: 'flex';
 | 
			
		||||
		send({action: 'enableStats', enabled: true});
 | 
			
		||||
	} else if (message && message.action == 'ping') {
 | 
			
		||||
		send({action: 'pong'});
 | 
			
		||||
	} else if (message && message.action == 'stats') {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								core/core.js
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								core/core.js
									
									
									
									
									
								
							@@ -8,10 +8,6 @@ let gStatsTimer = false;
 | 
			
		||||
const k_content_security_policy =
 | 
			
		||||
	'sandbox allow-downloads allow-top-navigation-by-user-activation';
 | 
			
		||||
 | 
			
		||||
let k_static_files = [
 | 
			
		||||
	{uri: '/', path: 'index.html', type: 'text/html; charset=UTF-8'},
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const k_global_settings = {
 | 
			
		||||
	index: {
 | 
			
		||||
		type: 'string',
 | 
			
		||||
@@ -290,7 +286,6 @@ async function getProcessBlob(blobId, key, options) {
 | 
			
		||||
			process.lastActive = Date.now();
 | 
			
		||||
			process.lastPing = null;
 | 
			
		||||
			process.timeout = options.timeout;
 | 
			
		||||
			process.stats = false;
 | 
			
		||||
			process.ready = new Promise(function (resolve, reject) {
 | 
			
		||||
				resolveReady = resolve;
 | 
			
		||||
				rejectReady = reject;
 | 
			
		||||
@@ -782,6 +777,10 @@ async function getProcessBlob(blobId, key, options) {
 | 
			
		||||
			}
 | 
			
		||||
			await process.task.execute({name: appSourceName, source: appSource});
 | 
			
		||||
			resolveReady(process);
 | 
			
		||||
			if (!gStatsTimer) {
 | 
			
		||||
				gStatsTimer = true;
 | 
			
		||||
				sendStats();
 | 
			
		||||
			}
 | 
			
		||||
		} catch (error) {
 | 
			
		||||
			if (process.app) {
 | 
			
		||||
				if (process?.task?.onError) {
 | 
			
		||||
@@ -918,34 +917,6 @@ async function useAppHandler(
 | 
			
		||||
 * @returns
 | 
			
		||||
 */
 | 
			
		||||
async function blobHandler(request, response, blobId, uri) {
 | 
			
		||||
	// TODO(tasiaiso): break this down ?
 | 
			
		||||
	for (let i in k_static_files) {
 | 
			
		||||
		if (uri === k_static_files[i].uri && k_static_files[i].path) {
 | 
			
		||||
			let stat = await File.stat('core/' + k_static_files[i].path);
 | 
			
		||||
			let id = `${stat.mtime}_${stat.size}`;
 | 
			
		||||
 | 
			
		||||
			if (request.headers['if-none-match'] === '"' + id + '"') {
 | 
			
		||||
				response.writeHead(304, {'Content-Length': '0'});
 | 
			
		||||
				response.end();
 | 
			
		||||
			} else {
 | 
			
		||||
				let data = await File.readFile('core/' + k_static_files[i].path);
 | 
			
		||||
				response.writeHead(
 | 
			
		||||
					200,
 | 
			
		||||
					Object.assign(
 | 
			
		||||
						{
 | 
			
		||||
							'Content-Type': k_static_files[i].type,
 | 
			
		||||
							'Content-Length': data.byteLength,
 | 
			
		||||
							etag: '"' + id + '"',
 | 
			
		||||
						},
 | 
			
		||||
						k_static_files[i].headers || {}
 | 
			
		||||
					)
 | 
			
		||||
				);
 | 
			
		||||
				response.end(data);
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!uri) {
 | 
			
		||||
		response.writeHead(303, {
 | 
			
		||||
			Location:
 | 
			
		||||
@@ -1232,7 +1203,7 @@ async function loadSettings() {
 | 
			
		||||
 */
 | 
			
		||||
function sendStats() {
 | 
			
		||||
	let apps = Object.values(gProcesses)
 | 
			
		||||
		.filter((process) => process.app && process.stats)
 | 
			
		||||
		.filter((process) => process.app)
 | 
			
		||||
		.map((process) => process.app);
 | 
			
		||||
	if (apps.length) {
 | 
			
		||||
		let stats = getStats();
 | 
			
		||||
@@ -1245,19 +1216,6 @@ function sendStats() {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * TODOC
 | 
			
		||||
 * @param {*} process
 | 
			
		||||
 * @param {*} enabled
 | 
			
		||||
 */
 | 
			
		||||
function enableStats(process, enabled) {
 | 
			
		||||
	process.stats = enabled;
 | 
			
		||||
	if (!gStatsTimer) {
 | 
			
		||||
		gStatsTimer = true;
 | 
			
		||||
		sendStats();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * TODOC
 | 
			
		||||
 */
 | 
			
		||||
@@ -1374,7 +1332,6 @@ function storePermission(user, packageOwner, packageName, permission, allow) {
 | 
			
		||||
export {
 | 
			
		||||
	gGlobalSettings as globalSettings,
 | 
			
		||||
	setGlobalSettings,
 | 
			
		||||
	enableStats,
 | 
			
		||||
	invoke,
 | 
			
		||||
	getSessionProcessBlob,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,10 @@
 | 
			
		||||
			<div class="w3-container">
 | 
			
		||||
				<div class="w3-panel w3-red w3-padding w3-card-4">
 | 
			
		||||
					<h1>TildeFriends requires JavaScript.</h1>
 | 
			
		||||
					<p>It looks like JavaScript is disabled or unsupported.  This isn't going to work.</p>
 | 
			
		||||
					<p>
 | 
			
		||||
						It looks like JavaScript is disabled or unsupported. This isn't
 | 
			
		||||
						going to work.
 | 
			
		||||
					</p>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</noscript>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										181
									
								
								deps/codemirror_src/package-lock.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										181
									
								
								deps/codemirror_src/package-lock.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -19,9 +19,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@codemirror/autocomplete": {
 | 
			
		||||
      "version": "6.16.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.16.2.tgz",
 | 
			
		||||
      "integrity": "sha512-MjfDrHy0gHKlPWsvSsikhO1+BOh+eBHNgfH1OXs1+DAf30IonQldgMM3kxLDTG9ktE7kDLaA1j/l7KMPA4KNfw==",
 | 
			
		||||
      "version": "6.17.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.17.0.tgz",
 | 
			
		||||
      "integrity": "sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@codemirror/language": "^6.0.0",
 | 
			
		||||
        "@codemirror/state": "^6.0.0",
 | 
			
		||||
@@ -111,9 +111,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@codemirror/lint": {
 | 
			
		||||
      "version": "6.8.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA==",
 | 
			
		||||
      "version": "6.8.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz",
 | 
			
		||||
      "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@codemirror/state": "^6.0.0",
 | 
			
		||||
        "@codemirror/view": "^6.0.0",
 | 
			
		||||
@@ -147,9 +147,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@codemirror/view": {
 | 
			
		||||
      "version": "6.28.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.1.tgz",
 | 
			
		||||
      "integrity": "sha512-BUWr+zCJpMkA/u69HlJmR+YkV4yPpM81HeMkOMZuwFa8iM5uJdEPKAs1icIRZKkKmy0Ub1x9/G3PQLTXdpBxrQ==",
 | 
			
		||||
      "version": "6.28.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.6.tgz",
 | 
			
		||||
      "integrity": "sha512-bhwB1AZ6zU4M3dNKm8Aa2BXwj5mWDqE9IWpqxYKJoLCnx+AcwcMuLO01tLWgc1mx4vT1IVYVqx86YoqUsATrqQ==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@codemirror/state": "^6.4.0",
 | 
			
		||||
        "style-mod": "^4.1.0",
 | 
			
		||||
@@ -199,9 +199,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/sourcemap-codec": {
 | 
			
		||||
      "version": "1.4.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
 | 
			
		||||
      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
 | 
			
		||||
      "version": "1.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@jridgewell/trace-mapping": {
 | 
			
		||||
@@ -343,9 +343,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-android-arm-eabi": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -355,9 +355,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-android-arm64": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -367,9 +367,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-darwin-arm64": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -379,9 +379,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-darwin-x64": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -391,9 +391,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -403,9 +403,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -415,9 +415,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-arm64-gnu": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -427,9 +427,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-arm64-musl": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -439,9 +439,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ppc64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -451,9 +451,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "riscv64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -463,9 +463,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-s390x-gnu": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "s390x"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -475,9 +475,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-x64-gnu": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -487,9 +487,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-linux-x64-musl": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -499,9 +499,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-win32-arm64-msvc": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -511,9 +511,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-win32-ia32-msvc": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ia32"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -523,9 +523,9 @@
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/rollup-win32-x64-msvc": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -545,9 +545,9 @@
 | 
			
		||||
      "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/acorn": {
 | 
			
		||||
      "version": "8.12.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
 | 
			
		||||
      "version": "8.12.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
 | 
			
		||||
      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "acorn": "bin/acorn"
 | 
			
		||||
@@ -658,11 +658,14 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-core-module": {
 | 
			
		||||
      "version": "2.13.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
 | 
			
		||||
      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
 | 
			
		||||
      "version": "2.15.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "hasown": "^2.0.0"
 | 
			
		||||
        "hasown": "^2.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
@@ -715,9 +718,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/rollup": {
 | 
			
		||||
      "version": "4.18.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
 | 
			
		||||
      "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
 | 
			
		||||
      "version": "4.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/estree": "1.0.5"
 | 
			
		||||
      },
 | 
			
		||||
@@ -729,22 +732,22 @@
 | 
			
		||||
        "npm": ">=8.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@rollup/rollup-android-arm-eabi": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-android-arm64": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-darwin-arm64": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-darwin-x64": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm64-gnu": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm64-musl": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-s390x-gnu": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-x64-gnu": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-linux-x64-musl": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-win32-arm64-msvc": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-win32-ia32-msvc": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-win32-x64-msvc": "4.18.0",
 | 
			
		||||
        "@rollup/rollup-android-arm-eabi": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-android-arm64": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-darwin-arm64": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-darwin-x64": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm-gnueabihf": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm-musleabihf": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm64-gnu": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-arm64-musl": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-riscv64-gnu": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-s390x-gnu": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-x64-gnu": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-linux-x64-musl": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-win32-arm64-msvc": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-win32-ia32-msvc": "4.19.0",
 | 
			
		||||
        "@rollup/rollup-win32-x64-msvc": "4.19.0",
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
@@ -819,9 +822,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/terser": {
 | 
			
		||||
      "version": "5.31.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz",
 | 
			
		||||
      "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==",
 | 
			
		||||
      "version": "5.31.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz",
 | 
			
		||||
      "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@jridgewell/source-map": "^0.3.3",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libbacktrace
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								deps/libbacktrace
									
									
									
									
										vendored
									
									
								
							 Submodule deps/libbacktrace updated: 11427f31a6...7e2b7da3d6
									
								
							@@ -1,9 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
	package="com.unprompted.tildefriends"
 | 
			
		||||
	android:versionCode="22"
 | 
			
		||||
	android:versionName="0.0.21-wip">
 | 
			
		||||
	<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="34"/>
 | 
			
		||||
	<uses-permission android:name="android.permission.INTERNET"/>
 | 
			
		||||
	<application
 | 
			
		||||
		android:label="Tilde Friends"
 | 
			
		||||
 
 | 
			
		||||
@@ -905,14 +905,23 @@ static void _httpd_endpoint_static(tf_http_request_t* request)
 | 
			
		||||
	const char* file_path = NULL;
 | 
			
		||||
	for (int i = 0; i < tf_countof(k_map) && !after; i++)
 | 
			
		||||
	{
 | 
			
		||||
		after = _after(request->path, k_map[i][0]);
 | 
			
		||||
		file_path = k_map[i][1];
 | 
			
		||||
		is_core = is_core || (after && i == 0);
 | 
			
		||||
		const char* next_after = _after(request->path, k_map[i][0]);
 | 
			
		||||
		if (next_after)
 | 
			
		||||
		{
 | 
			
		||||
			after = next_after;
 | 
			
		||||
			file_path = k_map[i][1];
 | 
			
		||||
			is_core = after && i == 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (strcmp(request->path, "/speedscope/") == 0)
 | 
			
		||||
	if ((!after || !*after) && request->path[strlen(request->path) - 1] == '/')
 | 
			
		||||
	{
 | 
			
		||||
		after = "index.html";
 | 
			
		||||
		if (!file_path)
 | 
			
		||||
		{
 | 
			
		||||
			file_path = "core/";
 | 
			
		||||
			is_core = true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!after || strstr(after, ".."))
 | 
			
		||||
@@ -1668,6 +1677,7 @@ void tf_httpd_register(JSContext* context)
 | 
			
		||||
	tf_http_add_handler(http, "/speedscope/*", _httpd_endpoint_static, NULL, task);
 | 
			
		||||
	tf_http_add_handler(http, "/static/*", _httpd_endpoint_static, NULL, task);
 | 
			
		||||
	tf_http_add_handler(http, "/.well-known/*", _httpd_endpoint_static, NULL, task);
 | 
			
		||||
	tf_http_add_handler(http, "/~*/*/", _httpd_endpoint_static, NULL, task);
 | 
			
		||||
 | 
			
		||||
	tf_http_add_handler(http, "/robots.txt", _httpd_endpoint_robots_txt, NULL, NULL);
 | 
			
		||||
	tf_http_add_handler(http, "/debug", _httpd_endpoint_debug, NULL, task);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/main.c
									
									
									
									
									
								
							@@ -794,6 +794,7 @@ static jint _tf_server_main(JNIEnv* env, jobject this_object, jstring files_dir,
 | 
			
		||||
	(*env)->ReleaseStringUTFChars(env, apk_path, apk);
 | 
			
		||||
	(*env)->ReleaseStringUTFChars(env, out_port_file_path, out_port_file);
 | 
			
		||||
 | 
			
		||||
	tf_mem_shutdown();
 | 
			
		||||
	tf_printf("tf_server_main finished with %d.", result);
 | 
			
		||||
 | 
			
		||||
	s_jni_env = NULL;
 | 
			
		||||
@@ -818,6 +819,7 @@ static jint _tf_sandbox_main(JNIEnv* env, jobject this_object, int pipe_fd)
 | 
			
		||||
 | 
			
		||||
	int result = _tf_command_sandbox(NULL, _countof(args), (char**)args);
 | 
			
		||||
 | 
			
		||||
	tf_mem_shutdown();
 | 
			
		||||
	tf_printf("tf_sandbox_main finished with %d.", result);
 | 
			
		||||
 | 
			
		||||
	s_jni_env = NULL;
 | 
			
		||||
@@ -859,21 +861,8 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)
 | 
			
		||||
 | 
			
		||||
int main(int argc, char* argv[])
 | 
			
		||||
{
 | 
			
		||||
	_startup(argc, argv);
 | 
			
		||||
	int result = -1;
 | 
			
		||||
	if (argc > 1)
 | 
			
		||||
	{
 | 
			
		||||
		if (strcmp(argv[1], "run") == 0)
 | 
			
		||||
		{
 | 
			
		||||
			result = _tf_command_run(argv[0], argc - 1, argv + 1);
 | 
			
		||||
		}
 | 
			
		||||
		else if (strcmp(argv[1], "sandbox") == 0)
 | 
			
		||||
		{
 | 
			
		||||
			result = _tf_command_sandbox(argv[0], argc - 1, argv + 1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	tf_mem_shutdown();
 | 
			
		||||
	return result;
 | 
			
		||||
	tf_printf("Welcome to Tilde Friends.  This is not the way to run on Android.\n");
 | 
			
		||||
	return EXIT_FAILURE;
 | 
			
		||||
}
 | 
			
		||||
#elif TARGET_OS_IPHONE
 | 
			
		||||
void tf_run_thread_start(const char* zip_path)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user