dropbox: add option to override root namespace

This lets you, for example, use shared folders without mounting them
into your home namespace first, as long as you know their namespace ID.

(The --dropbox-shared-folders flag could thus be changed to not need to
mount the shared folder first, but I'm not doing that here as it's a
behavior change, who knows, maybe somebody relies on it.)
This commit is contained in:
Bill Fraser 2024-05-03 10:55:50 -07:00 committed by Nick Craig-Wood
parent aed77a8fb2
commit 7c0645dda9

View File

@ -216,7 +216,10 @@ are supported.
Note that we don't unmount the shared folder afterwards so the Note that we don't unmount the shared folder afterwards so the
--dropbox-shared-folders can be omitted after the first use of a particular --dropbox-shared-folders can be omitted after the first use of a particular
shared folder.`, shared folder.
See also --dropbox-root-namespace for an alternative way to work with shared
folders.`,
Default: false, Default: false,
Advanced: true, Advanced: true,
}, { }, {
@ -237,6 +240,11 @@ shared folder.`,
encoder.EncodeDel | encoder.EncodeDel |
encoder.EncodeRightSpace | encoder.EncodeRightSpace |
encoder.EncodeInvalidUtf8, encoder.EncodeInvalidUtf8,
}, {
Name: "root_namespace",
Help: "Specify a different Dropbox namespace ID to use as the root for all paths.",
Default: "",
Advanced: true,
}}...), defaultBatcherOptions.FsOptions("For full info see [the main docs](https://rclone.org/dropbox/#batch-mode)\n\n")...), }}...), defaultBatcherOptions.FsOptions("For full info see [the main docs](https://rclone.org/dropbox/#batch-mode)\n\n")...),
}) })
} }
@ -253,6 +261,7 @@ type Options struct {
AsyncBatch bool `config:"async_batch"` AsyncBatch bool `config:"async_batch"`
PacerMinSleep fs.Duration `config:"pacer_min_sleep"` PacerMinSleep fs.Duration `config:"pacer_min_sleep"`
Enc encoder.MultiEncoder `config:"encoding"` Enc encoder.MultiEncoder `config:"encoding"`
RootNsid string `config:"root_namespace"`
} }
// Fs represents a remote dropbox server // Fs represents a remote dropbox server
@ -502,8 +511,11 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
f.features.Fill(ctx, f) f.features.Fill(ctx, f)
// If root starts with / then use the actual root if f.opt.RootNsid != "" {
if strings.HasPrefix(root, "/") { f.ns = f.opt.RootNsid
fs.Debugf(f, "Overriding root namespace to %q", f.ns)
} else if strings.HasPrefix(root, "/") {
// If root starts with / then use the actual root
var acc *users.FullAccount var acc *users.FullAccount
err = f.pacer.Call(func() (bool, error) { err = f.pacer.Call(func() (bool, error) {
acc, err = f.users.GetCurrentAccount() acc, err = f.users.GetCurrentAccount()