9f96b7434c
- Add SetStagedFileOps to Extension: sets fileOps without enabling DirectFileMode, so WASM clients use staged retrieval (WaitingFiles, OpenFile, DeleteFile) instead of direct-write mode. - Add directFileOps bool field: SetFileOps (Android SAF) sets it true; SetStagedFileOps (WASM JS) leaves it false. onChangeProfile now uses `fops != nil && e.directFileOps` to determine DirectFileMode. - Add jsCallVoid to jsFileOps: void ops (openWriter, write, closeWriter, remove) now use cb(err?: string) instead of cb(null, err: string). - Fix waitingFiles() returning JSON null when no files are waiting: normalise nil slice to empty slice before marshalling. - Update wireTaildropFileOps to call SetStagedFileOps. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
17 lines
450 B
Go
17 lines
450 B
Go
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
//go:build js
|
|
|
|
package taildrop
|
|
|
|
import "errors"
|
|
|
|
func init() {
|
|
// On WASM there is no real filesystem. newFileOps is only reached when
|
|
// SetFileOps was not called; return a clear error rather than panicking.
|
|
newFileOps = func(dir string) (FileOps, error) {
|
|
return nil, errors.New("taildrop: no filesystem on WASM; provide fileOps in the IPN config")
|
|
}
|
|
}
|