Compare commits

..

81 Commits

Author SHA1 Message Date
Syncthing Release Automation
97625ccc26 gui, man, authors: Update docs, translations, and contributors 2023-07-31 03:45:37 +00:00
Jakob Borg
4fe746d9aa build: Run govulncheck (fixes #8983) 2023-07-30 14:38:36 +02:00
Jakob Borg
4f8cdd41ee build: Run build & tests on main branch nightly 2023-07-30 14:24:17 +02:00
Jakob Borg
406e3646e5 build: Send test logs to Grafana Loki for statistics 2023-07-30 13:40:26 +02:00
Jakob Borg
9d21b91124 all: Refactor the protocol/model interface a bit (ref #8981) (#9007) 2023-07-29 10:24:44 +02:00
Chih-Hsuan Yen
b806026990 lib/connections: Fix building with -tags noquic (#9009) 2023-07-28 10:08:50 +00:00
tomasz1986
341b79814e gui: Fix tooltips on buttons inside button groups (ref #7984) (#9008)
As per Bootstrap recommendation, buttons with tooltips inside button
groups require to have container: 'body' set. This prevents tooltips
from causing the buttons to jump on hover and also allows the tooltips
to be wider instead of wrapping on every space.

Ref: https://getbootstrap.com/docs/3.3/components/#btn-groups

Signed-off-by: Tomasz Wilczyński <twilczynski@naver.com>
2023-07-27 14:38:48 +02:00
Jakob Borg
319916124b cmd/strelaysrv: Handle accept error with debug set (fixes #9001) (#9004) 2023-07-26 23:55:48 +01:00
Emil Lundberg
b08b99e284 lib/api: Fix data race in TestCSRFRequired (#9006) 2023-07-26 21:33:45 +00:00
Jakob Borg
f565df628c gui: Show full error for failed items (#9005)
Also closes #8992.
2023-07-26 23:20:17 +02:00
Jakob Borg
855c6dc67b lib/api: Allow Bearer authentication style with API key (#9002)
Currently, historically, we look for the `X-API-Key` header to
authenticate with an API key. There's nothing wrong with this, but in
some scenarios it's easier to produce an `Authorization` header with a
`Bearer $token` content, which is nowadays more common. This change adds
support for both, so that we will accept an API key either in our custom
header or as a bearer token.
2023-07-26 13:13:06 +02:00
tomasz1986
dc5e10fa2c gui: Remove Twitter link from footer (#9000) 2023-07-25 00:53:57 +02:00
Syncthing Release Automation
b857e57a35 gui, man, authors: Update docs, translations, and contributors 2023-07-24 03:45:42 +00:00
tomasz1986
f42f041f53 lib/ur: Don't report uptime if start time is in the past (fixes #7698) (#8996)
Currently, because of devices with unset RTC clock, the 100% percentile
for Uptime on [1] is calculated since the Unix epoch which is useless as
far as usage statistics are concerned. Thus, if the Syncthing start time
is set to a past date, assume that the clock is wrong and do not even
try to report the uptime.

[1] https://data.syncthing.net

Signed-off-by: Tomasz Wilczyński <twilczynski@naver.com>
Co-authored-by: Jakob Borg <jakob@kastelo.net>
2023-07-22 21:25:03 +00:00
Christian Kujau
6b6b2c6194 lib/model: use WARN for "Unexpected folder" messages (#8998) 2023-07-22 21:17:32 +00:00
tomasz1986
d70eb569f2 lib/osutil: Skip setLowPriority in Windows if already lower (fixes #6597) (#8993) 2023-07-21 04:38:15 +00:00
deepsource-autofix[bot]
21c074cc2c all: replace empty slice literal with var (#8990)
refactor: replace empty slice literal with `var`

An empty slice can be represented by `nil` or an empty slice literal. They are
functionally equivalent — their `len` and `cap` are both zero — but the `nil`
slice is the preferred style. For more information about empty slices,
see [Declaring Empty Slices](https://github.com/golang/go/wiki/CodeReviewComments#declaring-empty-slices).

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
2023-07-18 14:44:37 +00:00
deepsource-autofix[bot]
f23c41221b all: fix unused method receiver (#8988)
refactor: fix unused method receiver

Methods with unused receivers can be a symptom of unfinished refactoring or a bug. To keep 
the same method signature, omit the receiver name or '_' as it is unused.

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
2023-07-18 14:34:50 +00:00
deepsource-autofix[bot]
24e230d455 all: unused parameter should be replaced by underscore (#8989)
refactor: unused parameter should be replaced by underscore

Unused parameters in functions or methods should be replaced with `_`
(underscore) or removed.

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
2023-07-18 14:33:13 +00:00
Syncthing Release Automation
31daa20367 gui, man, authors: Update docs, translations, and contributors 2023-07-17 03:46:46 +00:00
Jakob Borg
e4d0f9dd6c cmd/syncthing: Mention STVERSIONEXTRA in --help output (ref #8980) 2023-07-16 17:48:24 +02:00
Jakob Borg
df2ac7aaeb gui, lib/api: Add possibility to feed through extra version information (#8980)
This adds an environment variable STVERSIONEXTRA that, when set, gets
added to the version information in the API and GUI.

The purpose of all this is to be able to communicate something about the
bundling or packaging, through the log & GUI and the end user, to the
potential person supporting it -- i.e., us. :) A wrapper can set this
variable to indicate that Syncthing is being run via `SyncTrayzor`,
`Syncthing-macOS`, etc., and thus indicate to the end user that the GUI
they are looking at is perhaps not the only source of truth and
management for this instance.
2023-07-16 17:43:10 +02:00
Jakob Borg
b96b23957b cmd/ursrv: Update map tile URL 2023-07-16 17:36:05 +02:00
bt90
265ce139c5 cmd/strelaypoolsrv: Update map tile URL (#8985) 2023-07-16 17:20:40 +02:00
Jakob Borg
48c95eb41d cmd/stcrashreceiver: Correct parsing of current version string 2023-07-12 09:27:34 +02:00
Jakob Borg
937895be69 build: Update dependencies 2023-07-11 09:14:21 +02:00
Jakob Borg
a3886f778d cmd/ursrv: Remove old, unused user movement code 2023-07-10 09:21:40 +02:00
Jakob Borg
6aecc2622c cmd/ursrv: Merge ursrv and uraggregate as subcommands 2023-07-10 09:00:57 +02:00
Jakob Borg
c55b205a0b cmd/ursrv: Remove useless static TLS cert handling 2023-07-10 08:39:30 +02:00
Jakob Borg
2fcf7006e6 cmd/ursrv: Embed static assets 2023-07-10 08:33:09 +02:00
Jakob Borg
bf61e485a6 cmd/ursrv: Refactor to use CLI options, fewer global vars 2023-07-10 08:27:16 +02:00
Jakob Borg
b2886f11b1 gui: Show xattr filter editor when send xattrs checked (fixes #8958) (#8959) 2023-07-10 08:01:08 +02:00
Syncthing Release Automation
11ece5d89e gui, man, authors: Update docs, translations, and contributors 2023-07-10 03:46:49 +00:00
Jakob Borg
cf68dfac43 build: Build Docker image for plain 32 bit arm (fixes #8973) 2023-07-08 10:55:09 +02:00
Jakob Borg
c44de2cd58 lib/fs: Clarify errors for Windows filenames (fixes #8968) (#8969)
With this change, error messages include the offending characters or
name parts. Examples:

    nul.txt: name is invalid, contains Windows reserved name: "nul"
    foo>bar.txt: name is invalid, contains Windows reserved character: ">"
    foo \bar.txt: name is invalid, must not end in space or period on Windows
2023-07-07 11:00:40 +00:00
Jakob Borg
6ff5ed6d23 gui: Avoid spurious comma in shared-with device list (fixes #8967) (#8970) 2023-07-07 07:25:24 +02:00
Jakob Borg
25ec2b63ab cmd/ursrv: Summarize tiny fraction items into Other 2023-07-05 08:22:10 +02:00
Jakob Borg
c5ab71d7a5 cmd/ursrv: Update distributions list 2023-07-05 08:08:29 +02:00
Jakob Borg
1fc4c9d9c5 build: Only push releases to cloud storage, and also use latest 2023-07-04 10:27:26 +02:00
Jakob Borg
bebf2c259c readme: Remove outdated build badges/links 2023-07-03 13:03:09 +02:00
Jakob Borg
b7d526903e build: Push to correct Docker images 2023-07-03 12:08:53 +02:00
Jakob Borg
92917c9f62 Merge branch 'release'
* release:
  build: Build and publish Docker images for relay and discovery server (fixes #8691, fixes #8960)
2023-07-03 11:52:11 +02:00
Jakob Borg
fdde05cf12 build: Build and publish Docker images for relay and discovery server (fixes #8691, fixes #8960)
This adds builds for the discovery and relay servers in the same manner
as Syncthing, so that Docker images are kept up to date with releases.

Inspired by and closes #8834.

Co-authored-by: Migelo <miha@filetki.si>
2023-07-03 11:51:12 +02:00
Syncthing Release Automation
a7d7325e9b gui, man, authors: Update docs, translations, and contributors 2023-07-03 03:45:49 +00:00
Jakob Borg
465823237f build: Build and publish Docker images for relay and discovery server (fixes #8691, fixes #8960)
This adds builds for the discovery and relay servers in the same manner
as Syncthing, so that Docker images are kept up to date with releases.

Inspired by and closes #8834.

Co-authored-by: Migelo <miha@filetki.si>
2023-07-01 08:48:12 +02:00
Jakob Borg
5a1f996e56 build: Build infrastructure images 2023-07-01 08:23:55 +02:00
Jakob Borg
229b6a292c cmd/stcrashreceiver: Add /ping endpoint 2023-07-01 07:53:50 +02:00
Jakob Borg
c84e47a7b2 build: Update dependencies 2023-06-28 14:00:30 +02:00
otbutz
daf7baaeff etc: Update sysctl configs (#8955) 2023-06-28 07:05:12 +02:00
Jakob Borg
a4a1231e92 gui: Remove tilde auto-expansions (fixes #8890) (#8954)
This removes the tilde expansion we had in the GUI. I'm not sure why we
had it, but there are valid reasons to have a folder path with tilde in
it in the config, and it was previously impossible to enter one of
those.
2023-06-28 07:03:53 +02:00
Jakob Borg
b99dee3ac3 cmd/syncthing: Add environment variables for --home, --conf, and --data (fixes #8957) (#8952)
This allows environment overrides for our directories. This is
advantageous because, apart from the obvious, it means we can set it in
the Docker file and not add command line options there. Having the
command line option as we did meant that it was impossible to use the
Docker image for other commands than `serve` (because that is implied
when we see other options on the command line).
2023-06-28 07:03:36 +02:00
Syncthing Release Automation
89fc69249b gui, man, authors: Update docs, translations, and contributors 2023-06-26 03:47:58 +00:00
Jakob Borg
d421d66a3f build: Docker images should have auto upgrade disabled... 2023-06-22 14:38:34 +02:00
guangwu
27aba3567b all: Minor staticcheck fixes (#8939) 2023-06-19 06:50:53 +00:00
Syncthing Release Automation
5532532db9 gui, man, authors: Update docs, translations, and contributors 2023-06-19 03:46:01 +00:00
Felix
c369f8abb2 gui: Have static link to favicon, for bookmarks etc (fixes #7638) (#8850) 2023-06-14 09:59:56 +02:00
Jakob Borg
9e52f6cf2f build: Update some dependencies 2023-06-14 09:43:45 +02:00
Jakob Borg
d22a38d947 build: Make sure we get the latest matching Go version
Also, disable caching in setup-go when we do manual cache setup with a
better cache key. It became default-true in the latest action version.
2023-06-14 09:37:59 +02:00
Jakob Borg
439fa6c848 build: Multi arch Docker images with GitHub actions (ref #8834)
This builds and publishes our Docker images from GitHub.
2023-06-14 09:28:04 +02:00
Jakob Borg
6b475bdb78 lib/config, gui: Disallow some options in combination with "untrusted" (fixes #8920) (#8921)
This prevents combining untrusted with introducer and auto-accept, and
also verifies that folders shared with untrusted devices have passwords
at config loading time.

Co-authored-by: Simon Frei <freisim93@gmail.com>
2023-06-14 09:24:31 +02:00
Syncthing Release Automation
7d56fba321 gui, man, authors: Update docs, translations, and contributors 2023-06-12 03:45:39 +00:00
Simon Frei
bf6ffbbd67 Don't add empty device to config on init (#8933)
We usually want to ensure that our own device is present. However if the
given device ID is the empty ID, we shouldn't do that. This is a
legimate (though way too non-obvious) use-case when opening the config
without knowing/caring about the device ID.
2023-06-10 20:33:39 +00:00
Jakob Borg
a972811f54 build: Push release files to cloud storage 2023-06-06 17:53:05 +02:00
Jakob Borg
88da67d7c3 build: Generate .asc files for release packages (fixes #8897) 2023-06-06 13:58:44 +02:00
Jakob Borg
1f07e05470 build: Properly build all Debian archs (fixes #8898) 2023-06-06 12:52:30 +02:00
Jakob Borg
5cab08a36a Merge branch 'release'
* release:
  gui: Avoid code generating HTML (#8923)
  gui: Remove HTML support in tooltips
2023-06-06 09:09:30 +02:00
Jakob Borg
4e2bb58e2d gui: Avoid code generating HTML (#8923) 2023-06-05 13:16:02 +02:00
Jakob Borg
ae176ea9cd build: Tests should run with Go 1.20 on Windows (#8924)
Tests should run with Go 1.20 on Windows
2023-06-05 10:19:47 +02:00
Syncthing Release Automation
2b17db8aa3 gui, man, authors: Update docs, translations, and contributors 2023-06-05 03:45:37 +00:00
Jakob Borg
81a4b22d43 lib/model: Improve test for unignored parent directories (#8926) 2023-06-04 15:32:03 +02:00
Jakob Borg
f7da96fb82 build: Update dependencies (#8925)
The easy ones, there is also a quic-go update but it requires API
refactoring.
2023-06-04 15:31:20 +02:00
Jakob Borg
f5e5af391a gui: Remove HTML support in tooltips 2023-06-03 09:58:08 +02:00
Jakob Borg
5a3ac86c3f cmd/syncthing: Use correct binary when restarting monitor (#8919) 2023-06-02 07:54:31 +02:00
dependabot[bot]
3d78ff9f68 build(deps): bump github.com/minio/sha256-simd from 1.0.0 to 1.0.1 (#8916)
Bumps [github.com/minio/sha256-simd](https://github.com/minio/sha256-simd) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/minio/sha256-simd/releases)
- [Commits](https://github.com/minio/sha256-simd/compare/v1.0.0...v1.0.1)

---
updated-dependencies:
- dependency-name: github.com/minio/sha256-simd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-01 12:16:46 +02:00
Jakob Borg
f3127a66ee build: Increase concurrency, add "basic checks" gatekeeper 2023-06-01 12:15:31 +02:00
Syncthing Release Automation
90b4711ad2 gui, man, authors: Update docs, translations, and contributors 2023-05-29 03:45:27 +00:00
Syncthing Release Automation
716b42103a gui, man, authors: Update docs, translations, and contributors 2023-05-22 03:45:33 +00:00
Anthony Goeckner
405cdedcd3 lib/model: Set platform data for new folders w/ ignorePerms (ref #8883) (#8907)
* Platform data (ownership, xattrs, etc.) is now set correctly for newly-received folders, even if the received folder has the NoPermissions flag.

* Call setPlatformData on receivers that have ignorePerms set to true.
2023-05-17 09:06:50 +02:00
Syncthing Release Automation
0b3a101ccd gui, man, authors: Update docs, translations, and contributors 2023-05-15 03:45:55 +00:00
Eng Zer Jun
089320aadc lib: replace Readdir(-1) with os.ReadDir (#8901) 2023-05-11 15:35:52 +00:00
Will Rouesnel
b2fb2ef276 lib/api: Allow BindDN to exclude any username formatting (fixes #8899) (#8900)
This allows a syncthing instance to be locked to exactly 1 user without
needing search capability on the LDAP instance.
2023-05-10 07:52:02 +02:00
164 changed files with 3020 additions and 2309 deletions

View File

@@ -0,0 +1,54 @@
name: Build Infrastructure Images
on:
push:
branches:
- infrastructure
env:
GO_VERSION: "^1.20.5"
CGO_ENABLED: "0"
BUILD_USER: docker
BUILD_HOST: github.syncthing.net
jobs:
docker-syncthing:
name: Build and push Docker images
runs-on: ubuntu-latest
environment: docker
strategy:
matrix:
pkg:
- stcrashreceiver
- strelaypoolsrv
- stupgrades
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build binaries
run: |
for arch in arm64 amd64; do
go run build.go -goos linux -goarch "$arch" build ${{ matrix.pkg }}
mv ${{ matrix.pkg }} ${{ matrix.pkg }}-linux-"$arch"
done
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile.${{ matrix.pkg }}
platforms: linux/amd64,linux/arm64
push: true
tags: syncthing/${{ matrix.pkg }}:latest,syncthing/${{ matrix.pkg }}:${{ github.sha }}

View File

@@ -3,9 +3,14 @@ name: Build Syncthing
on:
pull_request:
push:
schedule:
# Run nightly build at 05:00 UTC
- cron: '00 05 * * *'
env:
# The go version to use for builds.
# The go version to use for builds. We set check-latest to true when
# installing, so we get the latest patch version that matches the
# expression.
GO_VERSION: "^1.20.3"
# Optimize compatibility on the slow archictures.
@@ -61,18 +66,25 @@ jobs:
with:
go-version: ${{ matrix.go }}
cache: true
check-latest: true
- name: Build
run: |
go run build.go
- name: Test
# Our Windows tests currently don't work on Go 1.20
# https://github.com/syncthing/syncthing/issues/8779
# https://github.com/syncthing/syncthing/issues/8778
if: "!(matrix.go == '1.20' && matrix.runner == 'windows-latest')"
- name: Install go-test-json-to-loki
run: |
go run build.go test
go install calmh.dev/go-test-json-to-loki@latest
- name: Test
run: |
go run build.go test | go-test-json-to-loki
env:
GOFLAGS: "-json"
LOKI_URL: ${{ secrets.LOKI_URL }}
LOKI_USER: ${{ secrets.LOKI_USER }}
LOKI_PASSWORD: ${{ secrets.LOKI_PASSWORD }}
LOKI_LABELS: "go=${{ matrix.go }},runner=${{ matrix.runner }},repo=${{ github.repository }},ref=${{ github.ref }}"
#
# Meta checks for formatting, copyright, etc
@@ -87,11 +99,36 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- name: Check correctness
run: |
go test -v ./meta
#
# The basic checks job is a virtual one that depends on the matrix tests,
# the correctness checks, and various builds that we always do. This makes
# it easy to have the PR process have a single test as a gatekeeper for
# merging, instead of having to add all the matrix tests and update them
# each time the version changes. (The top level test is not available for
# choosing there, only the matrix "children".)
#
basics:
name: Basic checks passed
runs-on: ubuntu-latest
needs:
- build-test
- correctness
- package-linux
- package-cross
- package-source
- package-debian
- govulncheck
steps:
- uses: actions/checkout@v3
#
# Windows
#
@@ -100,8 +137,6 @@ jobs:
name: Package for Windows
if: github.event_name == 'push' && (github.ref == 'refs/heads/release' || startsWith(github.ref, 'refs/heads/release-'))
environment: signing
needs:
- build-test
runs-on: windows-latest
steps:
- name: Set git to use LF
@@ -120,6 +155,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: actions/cache@v3
with:
@@ -157,8 +194,6 @@ jobs:
package-linux:
name: Package for Linux
needs:
- build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -168,6 +203,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: actions/cache@v3
with:
@@ -199,8 +236,6 @@ jobs:
name: Package for macOS
if: github.event_name == 'push' && (github.ref == 'refs/heads/release' || startsWith(github.ref, 'refs/heads/release-'))
environment: signing
needs:
- build-test
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
@@ -210,6 +245,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: actions/cache@v3
with:
@@ -291,6 +328,7 @@ jobs:
environment: signing
needs:
- package-macos
- basics
runs-on: macos-latest
steps:
- name: Download artifacts
@@ -320,8 +358,6 @@ jobs:
package-cross:
name: Package cross compiled
needs:
- build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -331,6 +367,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: actions/cache@v3
with:
@@ -375,8 +413,6 @@ jobs:
package-source:
name: Package source code
needs:
- build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -386,6 +422,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- name: Package source
run: |
@@ -410,7 +448,7 @@ jobs:
path: syncthing-source-*.tar.gz
#
# Sign binaries for auto upgrade
# Sign binaries for auto upgrade, generate ASC signature files
#
sign-for-upgrade:
@@ -418,10 +456,12 @@ jobs:
if: github.event_name == 'push' && (github.ref == 'refs/heads/release' || startsWith(github.ref, 'refs/heads/release-'))
environment: signing
needs:
- basics
- package-windows
- package-linux
- package-macos
- package-cross
- package-source
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -450,9 +490,29 @@ jobs:
mv packages-*/* packages
pushd packages
"$GITHUB_WORKSPACE/tools/sign-only"
rm -f "$PRIVATE_KEY"
env:
STSIGTOOL_PRIVATE_KEY: ${{ secrets.STSIGTOOL_PRIVATE_KEY }}
- name: Create and sign .asc files
run: |
sudo apt update
sudo apt -y install gnupg
export SIGNING_KEY="$RUNNER_TEMP/gpg-secret.asc"
echo "$GNUPG_SIGNING_KEY_BASE64" | base64 -d > "$SIGNING_KEY"
gpg --import < "$SIGNING_KEY"
pushd packages
files=(*.tar.gz *.zip)
sha1sum "${files[@]}" | gpg --clearsign > sha1sum.txt.asc
sha256sum "${files[@]}" | gpg --clearsign > sha256sum.txt.asc
gpg --sign --armour --detach syncthing-source-*.tar.gz
popd
rm -f "$SIGNING_KEY" .gnupg
env:
GNUPG_SIGNING_KEY_BASE64: ${{ secrets.GNUPG_SIGNING_KEY_BASE64 }}
- name: Archive artifacts
uses: actions/upload-artifact@v3
with:
@@ -465,8 +525,6 @@ jobs:
package-debian:
name: Package for Debian
needs:
- build-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@@ -476,6 +534,8 @@ jobs:
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: ruby/setup-ruby@v1
with:
@@ -494,8 +554,8 @@ jobs:
- name: Package for Debian
run: |
for goarch in amd64 arm64 arm ; do
go run build.go -goos linux -goarch "$goarch" deb
for arch in amd64 i386 armhf armel arm64 ; do
go run build.go -no-upgrade -installsuffix=no-upgrade -goarch "$arch" deb
done
env:
BUILD_USER: debian
@@ -549,3 +609,179 @@ jobs:
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync packages spaces:syncthing/nightly
#
# Push release artifacts to Spaces
#
publish-release-files:
name: Publish release files
if: github.event_name == 'push' && github.ref == 'refs/heads/release'
environment: signing
needs:
- sign-for-upgrade
- package-debian
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Download signed packages
uses: actions/download-artifact@v3
with:
name: packages-signed
path: packages
- name: Download debian packages
uses: actions/download-artifact@v3
with:
name: debian-packages
path: packages
- name: Set version
run: |
version=$(go run build.go version)
echo "VERSION=$version" >> $GITHUB_ENV
- name: Push to Spaces (${{ env.VERSION }})
uses: docker://docker.io/rclone/rclone:latest
env:
RCLONE_CONFIG_SPACES_TYPE: s3
RCLONE_CONFIG_SPACES_PROVIDER: DigitalOcean
RCLONE_CONFIG_SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_KEY }}
RCLONE_CONFIG_SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET }}
RCLONE_CONFIG_SPACES_ENDPOINT: ams3.digitaloceanspaces.com
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync packages spaces:syncthing/release/${{ env.VERSION }}
- name: Push to Spaces (latest)
uses: docker://docker.io/rclone/rclone:latest
env:
RCLONE_CONFIG_SPACES_TYPE: s3
RCLONE_CONFIG_SPACES_PROVIDER: DigitalOcean
RCLONE_CONFIG_SPACES_ACCESS_KEY_ID: ${{ secrets.SPACES_KEY }}
RCLONE_CONFIG_SPACES_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET }}
RCLONE_CONFIG_SPACES_ENDPOINT: ams3.digitaloceanspaces.com
RCLONE_CONFIG_SPACES_ACL: public-read
with:
args: sync spaces:syncthing/release/${{ env.VERSION }} spaces:syncthing/release/latest
#
# Build and push to Docker Hub
#
docker-syncthing:
name: Build and push Docker images
runs-on: ubuntu-latest
if: github.event_name == 'push' && (github.ref == 'refs/heads/release' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-'))
environment: docker
strategy:
matrix:
pkg:
- syncthing
- strelaysrv
- stdiscosrv
include:
- pkg: syncthing
dockerfile: Dockerfile
image: syncthing/syncthing
- pkg: strelaysrv
dockerfile: Dockerfile.strelaysrv
image: syncthing/relaysrv
- pkg: stdiscosrv
dockerfile: Dockerfile.stdiscosrv
image: syncthing/discosrv
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ env.GO_VERSION }}-docker-${{ matrix.pkg }}-${{ hashFiles('**/go.sum') }}
- name: Build binaries
run: |
for arch in amd64 arm64 arm; do
go run build.go -goos linux -goarch "$arch" -no-upgrade build ${{ matrix.pkg }}
mv ${{ matrix.pkg }} ${{ matrix.pkg }}-linux-"$arch"
done
env:
CGO_ENABLED: "0"
BUILD_USER: docker
- name: Check if we will be able to push images
run: |
if [[ "${{ secrets.DOCKERHUB_TOKEN }}" != "" ]]; then
echo "DOCKER_PUSH=true" >> $GITHUB_ENV;
fi
- name: Login to Docker Hub
uses: docker/login-action@v2
if: env.DOCKER_PUSH == 'true'
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Set version tags
run: |
version=$(go run build.go version)
version=${version#v}
if [[ $version == @([0-9]|[0-9][0-9]).@([0-9]|[0-9][0-9]).@([0-9]|[0-9][0-9]) ]] ; then
echo Release version, pushing to :latest and version tags
major=${version%.*.*}
minor=${version%.*}
tags=${{ matrix.image }}:$version,${{ matrix.image }}:$major,${{ matrix.image }}:$minor,${{ matrix.image }}:latest
elif [[ $version == *-rc.@([0-9]|[0-9][0-9]) ]] ; then
echo Release candidate, pushing to :rc
tags=${{ matrix.image }}:rc
else
echo Development version, pushing to :edge
tags=${{ matrix.image }}:edge
fi
echo "DOCKER_TAGS=$tags" >> $GITHUB_ENV
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
file: ${{ matrix.dockerfile }}
platforms: linux/amd64,linux/arm64,linux/arm/7
push: ${{ env.DOCKER_PUSH == 'true' }}
tags: ${{ env.DOCKER_TAGS }}
#
# Check for known vulnerabilities in Go dependencies
#
govulncheck:
runs-on: ubuntu-latest
name: Run govulncheck
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
cache: false
check-latest: true
- name: run govulncheck
run: |
go run build.go assets
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...

View File

@@ -23,6 +23,7 @@ Alessandro G. (alessandro.g89) <alessandro.g89@gmail.com>
Alex Lindeman <139387+aelindeman@users.noreply.github.com>
Alex Xu <alex.hello71@gmail.com>
Alexander Graf (alex2108) <register-github@alex-graf.de>
Alexander Seiler <seileralex@gmail.com>
Alexandre Alves <alexandrealvesdb.contact@gmail.com>
Alexandre Viau (aviau) <alexandre@alexandreviau.net> <aviau@debian.org>
Aman Gupta <aman@tmm1.net>
@@ -70,11 +71,12 @@ Carsten Hagemann (carstenhag) <moter8@gmail.com> <carsten@chagemann.de>
Cathryne Linenweaver (Cathryne) <cathryne.linenweaver@gmail.com> <Cathryne@users.noreply.github.com> <katrinleinweber@MAC.local>
Cedric Staniewski (xduugu) <cedric@gmx.ca>
chenrui <rui@meetup.com>
Chih-Hsuan Yen <yan12125@gmail.com>
Chih-Hsuan Yen <yan12125@gmail.com> <1937689+yan12125@users.noreply.github.com>
Choongkyu <choongkyu.kim+gh@gmail.com> <vapidlyrapid+gh@gmail.com>
Chris Howie (cdhowie) <me@chrishowie.com>
Chris Joel (cdata) <chris@scriptolo.gy>
Chris Tonkinson <chris@masterbran.ch>
Christian Kujau <ckujau@users.noreply.github.com>
Christian Prescott <me@christianprescott.com>
chucic <chucic@seznam.cz>
Colin Kennedy (moshen) <moshen.colin@gmail.com>
@@ -104,6 +106,7 @@ Dominik Heidler (asdil12) <dominik@heidler.eu>
Elias Jarlebring (jarlebring) <jarlebring@gmail.com>
Elliot Huffman <thelich2@gmail.com>
Emil Hessman (ceh) <emil@hessman.se>
Emil Lundberg <emil@emlun.se>
Eng Zer Jun <engzerjun@gmail.com>
entity0xfe <109791748+entity0xfe@users.noreply.github.com> <entity0xfe@my.domain>
Eric Lesiuta <elesiuta@gmail.com>
@@ -112,6 +115,7 @@ Erik Meitner (WSGCSysadmin) <e.meitner@willystreet.coop>
Evan Spensley <94762716+0evan@users.noreply.github.com>
Evgeny Kuznetsov <evgeny@kuznetsov.md>
Federico Castagnini (facastagnini) <federico.castagnini@gmail.com>
Felix <53702818+f-eliks@users.noreply.github.com>
Felix Ableitner (Nutomic) <me@nutomic.com>
Felix Lampe <mail@flampe.de>
Felix Unterpaintner (bigbear2nd) <bigbear2nd@gmail.com>
@@ -125,6 +129,7 @@ Gleb Sinyavskiy <zhulik.gleb@gmail.com>
Graham Miln (grahammiln) <graham.miln@dssw.co.uk> <graham.miln@miln.eu>
greatroar <61184462+greatroar@users.noreply.github.com>
Greg <gco@jazzhaiku.com>
guangwu <guoguangwu@magic-shield.com>
Han Boetes <han@boetes.org>
HansK-p <42314815+HansK-p@users.noreply.github.com>
Harrison Jones (harrisonhjones) <harrisonhjones@users.noreply.github.com>
@@ -217,6 +222,7 @@ Michael Ploujnikov (plouj) <ploujj@gmail.com>
Michael Rienstra <mrienstra@gmail.com>
Michael Tilli (pyfisch) <pyfisch@gmail.com>
MichaIng <micha@dietpi.com>
Migelo <miha@filetki.si>
Mike Boone <mike@boonedocks.net>
MikeLund <MikeLund@users.noreply.github.com>
MikolajTwarog <43782609+MikolajTwarog@users.noreply.github.com>
@@ -304,6 +310,7 @@ Vil Brekin (Vilbrekin) <vilbrekin@gmail.com>
villekalliomaki <53118179+villekalliomaki@users.noreply.github.com>
Vladimir Rusinov <vrusinov@google.com> <vladimir.rusinov@gmail.com>
wangguoliang <liangcszzu@163.com>
Will Rouesnel <wrouesnel@wrouesnel.com>
William A. Kennington III (wkennington) <william@wkennington.com>
wouter bolsterlee <wouter@bolsterl.ee>
Wulf Weich (wweich) <wweich@users.noreply.github.com> <wweich@gmx.de> <wulf@weich-kr.de>

View File

@@ -1,15 +1,33 @@
ARG GOVERSION=latest
#
# Maybe build Syncthing. This is a bit ugly as we can't make an entire
# section of the Dockerfile conditional, so we end up always pulling the
# golang image as builder. Then we check if the executable we need already
# exists (pre-built) otherwise we build it.
#
FROM golang:$GOVERSION AS builder
ARG BUILD_USER
ARG BUILD_HOST
ARG TARGETARCH
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f syncthing && go run build.go -no-upgrade build syncthing
RUN if [ ! -f syncthing-linux-$TARGETARCH ] ; then \
go run build.go -no-upgrade build syncthing ; \
mv syncthing syncthing-linux-$TARGETARCH ; \
fi
#
# The rest of the Dockerfile uses the binary from the builder, prebuilt or
# not.
#
FROM alpine
ARG TARGETARCH
EXPOSE 8384 22000/tcp 22000/udp 21027/udp
@@ -17,7 +35,7 @@ VOLUME ["/var/syncthing"]
RUN apk add --no-cache ca-certificates curl libcap su-exec tzdata
COPY --from=builder /src/syncthing /bin/syncthing
COPY --from=builder /src/syncthing-linux-$TARGETARCH /bin/syncthing
COPY --from=builder /src/script/docker-entrypoint.sh /bin/entrypoint.sh
ENV PUID=1000 PGID=1000 HOME=/var/syncthing
@@ -26,5 +44,6 @@ HEALTHCHECK --interval=1m --timeout=10s \
CMD curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
ENV STGUIADDRESS=0.0.0.0:8384
ENV STHOMEDIR=/var/syncthing/config
RUN chmod 755 /bin/entrypoint.sh
ENTRYPOINT ["/bin/entrypoint.sh", "/bin/syncthing", "-home", "/var/syncthing/config"]
ENTRYPOINT ["/bin/entrypoint.sh", "/bin/syncthing"]

View File

@@ -1,19 +0,0 @@
FROM alpine
ARG TARGETARCH
EXPOSE 8384 22000/tcp 22000/udp 21027/udp
VOLUME ["/var/syncthing"]
RUN apk add --no-cache ca-certificates curl libcap su-exec tzdata
COPY ./syncthing-linux-$TARGETARCH /bin/syncthing
COPY ./script/docker-entrypoint.sh /bin/entrypoint.sh
ENV PUID=1000 PGID=1000 HOME=/var/syncthing
HEALTHCHECK --interval=1m --timeout=10s \
CMD curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
ENV STGUIADDRESS=0.0.0.0:8384
ENTRYPOINT ["/bin/entrypoint.sh", "/bin/syncthing", "-home", "/var/syncthing/config"]

View File

@@ -1,18 +1,8 @@
ARG GOVERSION=latest
FROM golang:$GOVERSION AS builder
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f stcrashreceiver && go run build.go build stcrashreceiver
FROM alpine
ARG TARGETARCH
EXPOSE 8080
COPY --from=builder /src/stcrashreceiver /bin/stcrashreceiver
COPY stcrashreceiver-linux-${TARGETARCH} /bin/stcrashreceiver
ENTRYPOINT [ "/bin/stcrashreceiver" ]

View File

@@ -1,15 +1,20 @@
ARG GOVERSION=latest
FROM golang:$GOVERSION AS builder
ARG BUILD_USER
ARG BUILD_HOST
ARG TARGETARCH
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f stdiscosrv && go run build.go -no-upgrade build stdiscosrv
RUN if [ ! -f stdiscosrv-linux-$TARGETARCH ] ; then \
go run build.go -no-upgrade build stdiscosrv ; \
mv stdiscosrv stdiscosrv-linux-$TARGETARCH ; \
fi
FROM alpine
ARG TARGETARCH
EXPOSE 19200 8443
@@ -17,7 +22,7 @@ VOLUME ["/var/stdiscosrv"]
RUN apk add --no-cache ca-certificates su-exec
COPY --from=builder /src/stdiscosrv /bin/stdiscosrv
COPY --from=builder /src/stdiscosrv-linux-$TARGETARCH /bin/stdiscosrv
COPY --from=builder /src/script/docker-entrypoint.sh /bin/entrypoint.sh
ENV PUID=1000 PGID=1000 HOME=/var/stdiscosrv

View File

@@ -1,15 +1,5 @@
ARG GOVERSION=latest
FROM golang:$GOVERSION AS builder
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f strelaysrv && go run build.go -no-upgrade build strelaypoolsrv
FROM alpine
ARG TARGETARCH
EXPOSE 8080
@@ -19,8 +9,8 @@ ENV PUID=1000 PGID=1000 MAXMIND_KEY=
RUN mkdir /var/strelaypoolsrv && chown 1000 /var/strelaypoolsrv
USER 1000
COPY --from=builder /src/strelaypoolsrv /bin/strelaypoolsrv
COPY --from=builder /src/script/strelaypoolsrv-entrypoint.sh /bin/entrypoint.sh
COPY strelaypoolsrv-linux-${TARGETARCH} /bin/strelaypoolsrv
COPY script/strelaypoolsrv-entrypoint.sh /bin/entrypoint.sh
WORKDIR /var/strelaypoolsrv
ENTRYPOINT ["/bin/entrypoint.sh", "/bin/strelaypoolsrv", "-listen", ":8080"]

View File

@@ -1,15 +1,20 @@
ARG GOVERSION=latest
FROM golang:$GOVERSION AS builder
ARG BUILD_USER
ARG BUILD_HOST
ARG TARGETARCH
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f strelaysrv && go run build.go -no-upgrade build strelaysrv
RUN if [ ! -f strelaysrv-linux-$TARGETARCH ] ; then \
go run build.go -no-upgrade build strelaysrv ; \
mv strelaysrv strelaysrv-linux-$TARGETARCH ; \
fi
FROM alpine
ARG TARGETARCH
EXPOSE 22067 22070
@@ -17,7 +22,7 @@ VOLUME ["/var/strelaysrv"]
RUN apk add --no-cache ca-certificates su-exec
COPY --from=builder /src/strelaysrv /bin/strelaysrv
COPY --from=builder /src/strelaysrv-linux-$TARGETARCH /bin/strelaysrv
COPY --from=builder /src/script/docker-entrypoint.sh /bin/entrypoint.sh
ENV PUID=1000 PGID=1000 HOME=/var/strelaysrv

View File

@@ -1,18 +1,8 @@
ARG GOVERSION=latest
FROM golang:$GOVERSION AS builder
WORKDIR /src
COPY . .
ENV CGO_ENABLED=0
ENV BUILD_HOST=syncthing.net
ENV BUILD_USER=docker
RUN rm -f stupgrades && go run build.go build stupgrades
FROM alpine
ARG TARGETARCH
EXPOSE 8080
COPY --from=builder /src/stupgrades /bin/stupgrades
COPY stupgrades-linux-${TARGETARCH} /bin/stupgrades
ENTRYPOINT [ "/bin/stupgrades" ]

View File

@@ -2,9 +2,6 @@
---
[![Latest Linux & Cross Build](https://img.shields.io/teamcity/https/build.syncthing.net/s/Syncthing_BuildLinuxCross.svg?style=flat-square&label=linux+%26+cross+build)](https://build.syncthing.net/viewType.html?buildTypeId=Syncthing_BuildLinuxCross&guest=1)
[![Latest Windows Build](https://img.shields.io/teamcity/https/build.syncthing.net/s/Syncthing_BuildWindows.svg?style=flat-square&label=windows+build)](https://build.syncthing.net/viewType.html?buildTypeId=Syncthing_BuildWindows&guest=1)
[![Latest Mac Build](https://img.shields.io/teamcity/https/build.syncthing.net/s/Syncthing_BuildMac.svg?style=flat-square&label=mac+build)](https://build.syncthing.net/viewType.html?buildTypeId=Syncthing_BuildMac&guest=1)
[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88)
[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](https://goreportcard.com/report/github.com/syncthing/syncthing)

View File

@@ -214,11 +214,17 @@ var targets = map[string]target{
binaryName: "stupgrades",
},
"stcrashreceiver": {
name: "stupgrastcrashreceiverdes",
name: "stcrashreceiver",
description: "Syncthing Crash Server",
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/stcrashreceiver"},
binaryName: "stcrashreceiver",
},
"ursrv": {
name: "ursrv",
description: "Syncthing Usage Reporting Server",
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/ursrv"},
binaryName: "ursrv",
},
}
func initTargets() {

View File

@@ -69,6 +69,9 @@ func main() {
}
mux.Handle("/", cr)
mux.HandleFunc("/ping", func(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("OK"))
})
if params.DSN != "" {
mux.HandleFunc("/newcrash/failure", handleFailureFn(params.DSN, filepath.Join(params.Dir, "failure_reports")))

View File

@@ -215,7 +215,13 @@ func crashReportFingerprint(message string) []string {
}
// syncthing v1.1.4-rc.1+30-g6aaae618-dirty-crashrep "Erbium Earthworm" (go1.12.5 darwin-amd64) jb@kvin.kastelo.net 2019-05-23 16:08:14 UTC [foo, bar]
var longVersionRE = regexp.MustCompile(`syncthing\s+(v[^\s]+)\s+"([^"]+)"\s\(([^\s]+)\s+([^-]+)-([^)]+)\)\s+([^\s]+)[^\[]*(?:\[(.+)\])?$`)
// or, somewhere along the way the "+" in the version tag disappeared:
// syncthing v1.23.7-dev.26.gdf7b56ae.dirty-stversionextra "Fermium Flea" (go1.20.5 darwin-arm64) jb@ok.kastelo.net 2023-07-12 06:55:26 UTC [Some Wrapper, purego, stnoupgrade]
var (
longVersionRE = regexp.MustCompile(`syncthing\s+(v[^\s]+)\s+"([^"]+)"\s\(([^\s]+)\s+([^-]+)-([^)]+)\)\s+([^\s]+)[^\[]*(?:\[(.+)\])?$`)
gitExtraRE = regexp.MustCompile(`\.\d+\.g[0-9a-f]+`) // ".1.g6aaae618"
gitExtraSepRE = regexp.MustCompile(`[.-]`) // dot or dash
)
type version struct {
version string // "v1.1.4-rc.1+30-g6aaae618-dirty-crashrep"
@@ -257,10 +263,21 @@ func parseVersion(line string) (version, error) {
builder: m[6],
}
parts := strings.Split(v.version, "+")
// Split the version tag into tag and commit. This is old style
// v1.2.3-something.4+11-g12345678 or newer with just dots
// v1.2.3-something.4.11.g12345678 or v1.2.3-dev.11.g12345678.
parts := []string{v.version}
if strings.Contains(v.version, "+") {
parts = strings.Split(v.version, "+")
} else {
idxs := gitExtraRE.FindStringIndex(v.version)
if len(idxs) > 0 {
parts = []string{v.version[:idxs[0]], v.version[idxs[0]+1:]}
}
}
v.tag = parts[0]
if len(parts) > 1 {
fields := strings.Split(parts[1], "-")
fields := gitExtraSepRE.Split(parts[1], -1)
if len(fields) >= 2 && strings.HasPrefix(fields[1], "g") {
v.commit = fields[1][1:]
}

View File

@@ -44,6 +44,20 @@ func TestParseVersion(t *testing.T) {
extra: []string{"foo", "bar"},
},
},
{
longVersion: `syncthing v1.23.7-dev.26.gdf7b56ae-stversionextra "Fermium Flea" (go1.20.5 darwin-arm64) jb@ok.kastelo.net 2023-07-12 06:55:26 UTC [Some Wrapper, purego, stnoupgrade]`,
parsed: version{
version: "v1.23.7-dev.26.gdf7b56ae-stversionextra",
tag: "v1.23.7-dev",
commit: "df7b56ae",
codename: "Fermium Flea",
runtime: "go1.20.5",
goos: "darwin",
goarch: "arm64",
builder: "jb@ok.kastelo.net",
extra: []string{"Some Wrapper", "purego", "stnoupgrade"},
},
},
}
for _, tc := range cases {

View File

@@ -237,7 +237,7 @@
uptimeSeconds: 0,
};
$scope.map = L.map('map').setView([40.90296, 1.90925], 2);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png',
{
attribution: 'Leaflet',
maxZoom: 17

View File

@@ -36,8 +36,14 @@ func listener(_, addr string, config *tls.Config, token string) {
for {
conn, isTLS, err := listener.AcceptNoWrapTLS()
if err != nil {
// Conn may be nil if accept failed, or non-nil if the initial
// read to figure out if it's TLS or not failed. In the latter
// case, close the connection before moving on.
if conn != nil {
conn.Close()
}
if debug {
log.Println("Listener failed to accept connection from", conn.RemoteAddr(), ". Possibly a TCP Ping.")
log.Println("Listener failed to accept:", err)
}
continue
}

View File

@@ -57,7 +57,7 @@ type githubReleases struct {
url string
}
func (p *githubReleases) ServeHTTP(w http.ResponseWriter, req *http.Request) {
func (p *githubReleases) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
log.Println("Fetching", p.url)
rels := upgrade.FetchLatestReleases(p.url, "")
if rels == nil {

View File

@@ -9,8 +9,8 @@ package cmdutil
// CommonOptions are reused among several subcommands
type CommonOptions struct {
buildCommonOptions
ConfDir string `name:"config" placeholder:"PATH" help:"Set configuration directory (config and keys)"`
HomeDir string `name:"home" placeholder:"PATH" help:"Set configuration and data directory"`
ConfDir string `name:"config" placeholder:"PATH" env:"STCONFDIR" help:"Set configuration directory (config and keys)"`
HomeDir string `name:"home" placeholder:"PATH" env:"STHOMEDIR" help:"Set configuration and data directory"`
NoDefaultFolder bool `env:"STNODEFAULTFOLDER" help:"Don't create the \"default\" folder on first startup"`
SkipPortProbing bool `help:"Don't try to find free ports for GUI and listen addresses on first startup"`
}

View File

@@ -99,6 +99,11 @@ above.
"minio" for the github.com/minio/sha256-simd implementation,
and blank (the default) for auto detection.
STVERSIONEXTRA Add extra information to the version string in logs and the
version line in the GUI. Can be set to the name of a wrapper
or tool controlling syncthing to communicate this to the end
user.
GOMAXPROCS Set the maximum number of CPU cores to use. Defaults to all
available CPU cores.
@@ -144,9 +149,9 @@ type serveOptions struct {
Audit bool `help:"Write events to audit file"`
AuditFile string `name:"auditfile" placeholder:"PATH" help:"Specify audit file (use \"-\" for stdout, \"--\" for stderr)"`
BrowserOnly bool `help:"Open GUI in browser"`
DataDir string `name:"data" placeholder:"PATH" help:"Set data directory (database and logs)"`
DataDir string `name:"data" placeholder:"PATH" env:"STDATADIR" help:"Set data directory (database and logs)"`
DeviceID bool `help:"Show the device ID"`
GenerateDir string `name:"generate" placeholder:"PATH" help:"Generate key and config in specified dir, then exit"` //DEPRECATED: replaced by subcommand!
GenerateDir string `name:"generate" placeholder:"PATH" help:"Generate key and config in specified dir, then exit"` // DEPRECATED: replaced by subcommand!
GUIAddress string `name:"gui-address" placeholder:"URL" help:"Override GUI address (e.g. \"http://192.0.2.42:8443\")"`
GUIAPIKey string `name:"gui-apikey" placeholder:"API-KEY" help:"Override GUI API key"`
LogFile string `name:"logfile" default:"${logFile}" placeholder:"PATH" help:"Log file name (see below)"`
@@ -354,7 +359,7 @@ func (options serveOptions) Run() error {
}
// Ensure that our home directory exists.
if err := syncthing.EnsureDir(locations.GetBaseDir(locations.ConfigBaseDir), 0700); err != nil {
if err := syncthing.EnsureDir(locations.GetBaseDir(locations.ConfigBaseDir), 0o700); err != nil {
l.Warnln("Failure on home directory:", err)
os.Exit(svcutil.ExitError.AsInt())
}
@@ -722,7 +727,6 @@ func setupSignalHandling(app *syncthing.App) {
func loadOrDefaultConfig() (config.Wrapper, error) {
cfgFile := locations.Get(locations.ConfigFile)
cfg, _, err := config.Load(cfgFile, protocol.EmptyDeviceID, events.NoopLogger)
if err != nil {
newCfg := config.New(protocol.EmptyDeviceID)
return config.Wrap(cfgFile, newCfg, protocol.EmptyDeviceID, events.NoopLogger), nil
@@ -750,7 +754,7 @@ func auditWriter(auditFile string) io.Writer {
} else {
auditFlags = os.O_WRONLY | os.O_CREATE | os.O_APPEND
}
fd, err = os.OpenFile(auditFile, auditFlags, 0600)
fd, err = os.OpenFile(auditFile, auditFlags, 0o600)
if err != nil {
l.Warnln("Audit:", err)
os.Exit(svcutil.ExitError.AsInt())

View File

@@ -346,7 +346,7 @@ func restartMonitor(binary string, args []string) error {
}
func restartMonitorUnix(binary string, args []string) error {
return syscall.Exec(args[0], args, os.Environ())
return syscall.Exec(binary, args, os.Environ())
}
func restartMonitorWindows(binary string, args []string) error {
@@ -521,7 +521,7 @@ func (f *autoclosedFile) ensureOpenLocked() error {
// We open the file for write only, and create it if it doesn't exist.
flags := os.O_WRONLY | os.O_CREATE | os.O_APPEND
fd, err := os.OpenFile(f.name, flags, 0644)
fd, err := os.OpenFile(f.name, flags, 0o644)
if err != nil {
return err
}

View File

@@ -4,10 +4,11 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package main
package aggregate
import (
"database/sql"
"fmt"
"log"
"os"
"time"
@@ -15,26 +16,21 @@ import (
_ "github.com/lib/pq"
)
var dbConn = getEnvDefault("UR_DB_URL", "postgres://user:password@localhost/ur?sslmode=disable")
func getEnvDefault(key, def string) string {
if val := os.Getenv(key); val != "" {
return val
}
return def
type CLI struct {
DBConn string `env:"UR_DB_URL" default:"postgres://user:password@localhost/ur?sslmode=disable"`
}
func main() {
func (cli *CLI) Run() error {
log.SetFlags(log.Ltime | log.Ldate)
log.SetOutput(os.Stdout)
db, err := sql.Open("postgres", dbConn)
db, err := sql.Open("postgres", cli.DBConn)
if err != nil {
log.Fatalln("database:", err)
return fmt.Errorf("database: %w", err)
}
err = setupDB(db)
if err != nil {
log.Fatalln("database:", err)
return fmt.Errorf("database: %w", err)
}
for {
@@ -87,16 +83,6 @@ func setupDB(db *sql.DB) error {
return err
}
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS UserMovement (
Day TIMESTAMP NOT NULL,
Added INTEGER NOT NULL,
Bounced INTEGER NOT NULL,
Removed INTEGER NOT NULL
)`)
if err != nil {
return err
}
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS Performance (
Day TIMESTAMP NOT NULL,
TotFiles INTEGER NOT NULL,
@@ -136,11 +122,6 @@ func setupDB(db *sql.DB) error {
_, _ = db.Exec(`CREATE INDEX VersionDayIndex ON VersionSummary (Day)`)
}
row = db.QueryRow(`SELECT 'MovementDayIndex'::regclass`)
if err := row.Scan(&t); err != nil {
_, _ = db.Exec(`CREATE INDEX MovementDayIndex ON UserMovement (Day)`)
}
row = db.QueryRow(`SELECT 'PerformanceDayIndex'::regclass`)
if err := row.Scan(&t); err != nil {
_, _ = db.Exec(`CREATE INDEX PerformanceDayIndex ON Performance (Day)`)
@@ -185,87 +166,6 @@ func aggregateVersionSummary(db *sql.DB, since time.Time) (int64, error) {
return res.RowsAffected()
}
func aggregateUserMovement(db *sql.DB) (int64, error) {
rows, err := db.Query(`SELECT
DATE_TRUNC('day', Received) AS Day,
Report->>'uniqueID'
FROM ReportsJson
WHERE
Report->>'uniqueID' IS NOT NULL
AND Received < DATE_TRUNC('day', NOW())
AND Report->>'version' like 'v_.%'
ORDER BY Day
`)
if err != nil {
return 0, err
}
defer rows.Close()
firstSeen := make(map[string]time.Time)
lastSeen := make(map[string]time.Time)
var minTs time.Time
minTs = minTs.In(time.UTC)
for rows.Next() {
var ts time.Time
var id string
if err := rows.Scan(&ts, &id); err != nil {
return 0, err
}
if minTs.IsZero() {
minTs = ts
}
if _, ok := firstSeen[id]; !ok {
firstSeen[id] = ts
}
lastSeen[id] = ts
}
type sumRow struct {
day time.Time
added int
removed int
bounced int
}
var sumRows []sumRow
for t := minTs; t.Before(time.Now().Truncate(24 * time.Hour)); t = t.AddDate(0, 0, 1) {
var added, removed, bounced int
old := t.Before(time.Now().AddDate(0, 0, -30))
for id, first := range firstSeen {
last := lastSeen[id]
if first.Equal(t) && last.Equal(t) && old {
bounced++
continue
}
if first.Equal(t) {
added++
}
if last == t && old {
removed++
}
}
sumRows = append(sumRows, sumRow{t, added, removed, bounced})
}
tx, err := db.Begin()
if err != nil {
return 0, err
}
if _, err := tx.Exec("DELETE FROM UserMovement"); err != nil {
tx.Rollback()
return 0, err
}
for _, r := range sumRows {
if _, err := tx.Exec("INSERT INTO UserMovement (Day, Added, Removed, Bounced) VALUES ($1, $2, $3, $4)", r.day, r.added, r.removed, r.bounced); err != nil {
tx.Rollback()
return 0, err
}
}
return int64(len(sumRows)), tx.Commit()
}
func aggregatePerformance(db *sql.DB, since time.Time) (int64, error) {
res, err := db.Exec(`INSERT INTO Performance (
SELECT

View File

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package main
package serve
import (
"regexp"
@@ -145,7 +145,7 @@ func statsForFloats(data []float64) [4]float64 {
return res
}
func group(by func(string) string, as []analytic, perGroup int) []analytic {
func group(by func(string) string, as []analytic, perGroup int, otherPct float64) []analytic {
var res []analytic
next:
@@ -170,6 +170,25 @@ next:
}
sort.Sort(analyticList(res))
if otherPct > 0 {
// Groups with less than otherPCt go into "Other"
other := analytic{
Key: "Other",
}
for i := 0; i < len(res); i++ {
if res[i].Percentage < otherPct || res[i].Key == "Other" {
other.Count += res[i].Count
other.Percentage += res[i].Percentage
res = append(res[:i], res[i+1:]...)
i--
}
}
if other.Count > 0 {
res = append(res, other)
}
}
return res
}

View File

@@ -4,7 +4,7 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package main
package serve
import "testing"

View File

@@ -4,7 +4,7 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package main
package serve
import (
"bytes"

1114
cmd/ursrv/serve/serve.go Normal file
View File

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -197,7 +197,7 @@ found in the LICENSE file.
};
var baseLayer = L.tileLayer(
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
'https://tile.openstreetmap.org/{z}/{x}/{y}.png',{
attribution: '...',
maxZoom: 18
}
@@ -454,13 +454,13 @@ found in the LICENSE file.
<table class="table table-striped">
<thead>
<tr>
<th>Builder</th>
<th>Distribution Channel</th>
<th class="text-right">Devices</th>
<th class="text-right">Share</th>
</tr>
</thead>
<tbody>
{{range .builders}}
{{range .distributions}}
<tr>
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
@@ -475,13 +475,13 @@ found in the LICENSE file.
<table class="table table-striped">
<thead>
<tr>
<th>Distribution Channel</th>
<th>Builder</th>
<th class="text-right">Devices</th>
<th class="text-right">Share</th>
</tr>
</thead>
<tbody>
{{range .distributions}}
{{range .builders}}
<tr>
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>

View File

@@ -1,3 +1,4 @@
# Increase maximum receive socket buffer size to 2MiB for QUIC connections
# see https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size
net.core.rmem_max = 2097152
# Increase maximum socket buffer sizes to 2.5MiB for QUIC connections
# see https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
net.core.rmem_max = 2621440
net.core.wmem_max = 2621440

54
go.mod
View File

@@ -5,7 +5,7 @@ go 1.19
require (
github.com/AudriusButkevicius/pfilter v0.0.11
github.com/AudriusButkevicius/recli v0.0.7-0.20220911121932-d000ce8fbf0f
github.com/alecthomas/kong v0.7.1
github.com/alecthomas/kong v0.8.0
github.com/calmh/incontainer v0.0.0-20221224152218-b3e71b103d7a
github.com/calmh/xdr v1.1.0
github.com/ccding/go-stun v0.1.4
@@ -17,45 +17,45 @@ require (
github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568
github.com/getsentry/raven-go v0.2.0
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
github.com/go-ldap/ldap/v3 v3.4.4
github.com/go-ldap/ldap/v3 v3.4.5
github.com/gobwas/glob v0.2.3
github.com/gogo/protobuf v1.3.2
github.com/golang/snappy v0.0.4 // indirect
github.com/greatroar/blobloom v0.7.2
github.com/hashicorp/golang-lru/v2 v2.0.2
github.com/hashicorp/golang-lru/v2 v2.0.4
github.com/jackpal/gateway v1.0.10
github.com/jackpal/go-nat-pmp v1.0.2
github.com/julienschmidt/httprouter v1.3.0
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/lib/pq v1.10.7
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/lib/pq v1.10.9
github.com/maruel/panicparse/v2 v2.3.1
github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0
github.com/minio/sha256-simd v1.0.0
github.com/minio/sha256-simd v1.0.1
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75
github.com/oschwald/geoip2-golang v1.8.0
github.com/pierrec/lz4/v4 v4.1.17
github.com/oschwald/geoip2-golang v1.9.0
github.com/pierrec/lz4/v4 v4.1.18
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.14.0
github.com/prometheus/common v0.42.0 // indirect
github.com/prometheus/procfs v0.9.0 // indirect
github.com/prometheus/client_golang v1.16.0
github.com/prometheus/common v0.44.0 // indirect
github.com/prometheus/procfs v0.11.0 // indirect
github.com/quic-go/quic-go v0.34.0
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
github.com/sasha-s/go-deadlock v0.3.1
github.com/shirou/gopsutil/v3 v3.23.3
github.com/shirou/gopsutil/v3 v3.23.6
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d
github.com/thejerf/suture/v4 v4.0.2
github.com/urfave/cli v1.22.12
github.com/urfave/cli v1.22.14
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0
golang.org/x/crypto v0.8.0
golang.org/x/mod v0.10.0 // indirect
golang.org/x/net v0.9.0
golang.org/x/sys v0.7.0
golang.org/x/text v0.9.0
golang.org/x/crypto v0.11.0
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.12.0
golang.org/x/sys v0.10.0
golang.org/x/text v0.11.0
golang.org/x/time v0.3.0
golang.org/x/tools v0.8.0
google.golang.org/protobuf v1.30.0
golang.org/x/tools v0.11.0
google.golang.org/protobuf v1.31.0
)
require (
@@ -65,18 +65,18 @@ require (
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/pprof v0.0.0-20230406165453-00490a63f317 // indirect
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/onsi/ginkgo/v2 v2.9.2 // indirect
github.com/oschwald/maxminddb-golang v1.10.0 // indirect
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect
github.com/onsi/ginkgo/v2 v2.11.0 // indirect
github.com/oschwald/maxminddb-golang v1.11.0 // indirect
github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/client_model v0.4.0 // indirect
github.com/quic-go/qtls-go1-19 v0.3.2 // indirect
github.com/quic-go/qtls-go1-20 v0.2.2 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
)
// https://github.com/gobwas/glob/pull/55

153
go.sum
View File

@@ -2,14 +2,15 @@ github.com/AudriusButkevicius/pfilter v0.0.11 h1:6emuvqNeH1gGlqkML35pEizyPcaxdAN
github.com/AudriusButkevicius/pfilter v0.0.11/go.mod h1:4eF1UYuEhoycTlr9IOP1sb0lL9u4nfAIouRqt2xJbzM=
github.com/AudriusButkevicius/recli v0.0.7-0.20220911121932-d000ce8fbf0f h1:GmH5lT+moM7PbAJFBq57nH9WJ+wRnBXr/tyaYWbSAx8=
github.com/AudriusButkevicius/recli v0.0.7-0.20220911121932-d000ce8fbf0f/go.mod h1:Nhfib1j/VFnLrXL9cHgA+/n2O6P5THuWelOnbfPNd78=
github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8=
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0=
github.com/alecthomas/kong v0.7.1 h1:azoTh0IOfwlAX3qN9sHWTxACE2oV8Bg2gAwBsMwDQY4=
github.com/alecthomas/kong v0.7.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
github.com/alecthomas/kong v0.8.0 h1:ryDCzutfIqJPnNn0omnrgHLbAggDQM2VWHikE1xqK7s=
github.com/alecthomas/kong v0.8.0/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 h1:Kk6a4nehpJ3UuJRqlA3JxYxBZEqCeOmATOvrbT4p9RA=
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/calmh/glob v0.0.0-20220615080505-1d823af5017b h1:Fjm4GuJ+TGMgqfGHN42IQArJb77CfD/mAwLbDUoJe6g=
@@ -46,9 +47,9 @@ github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JY
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A=
github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-ldap/ldap/v3 v3.4.4 h1:qPjipEpt+qDa6SI/h1fzuGWoRUY+qqQ9sOZq67/PYUs=
github.com/go-ldap/ldap/v3 v3.4.4/go.mod h1:fe1MsuN5eJJ1FeLT/LEBVdWfNWKh459R7aXgXtJC+aI=
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
github.com/go-ldap/ldap/v3 v3.4.5 h1:ekEKmaDrpvR2yf5Nc/DClsGG9lAmdDixe44mLzlW5r8=
github.com/go-ldap/ldap/v3 v3.4.5/go.mod h1:bMGIq3AGbytbaMwf8wdv5Phdxz0FWHTIYMSzyrYgnQs=
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
@@ -59,7 +60,6 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
@@ -81,12 +81,12 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20230406165453-00490a63f317 h1:hFhpt7CTmR3DX+b4R19ydQFtofxT0Sv3QsKNMVQYTMQ=
github.com/google/pprof v0.0.0-20230406165453-00490a63f317/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk=
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA=
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
github.com/greatroar/blobloom v0.7.2 h1:F30MGLHOcb4zr0pwCPTcKdlTM70rEgkf+LzdUPc5ss8=
github.com/greatroar/blobloom v0.7.2/go.mod h1:mjMJ1hh1wjGVfr93QIHJ6FfDNVrA0IELv8OvMHJxHKs=
github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5twqnfBdU=
github.com/hashicorp/golang-lru/v2 v2.0.2/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hashicorp/golang-lru/v2 v2.0.4 h1:7GHuZcgid37q8o5i3QI9KMT4nCWQQ3Kx3Ov6bb9MfK0=
github.com/hashicorp/golang-lru/v2 v2.0.4/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -100,11 +100,10 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/maruel/panicparse/v2 v2.3.1 h1:NtJavmbMn0DyzmmSStE8yUsmPZrZmudPH7kplxBinOA=
github.com/maruel/panicparse/v2 v2.3.1/go.mod h1:s3UmQB9Fm/n7n/prcD2xBGDkwXD6y2LeZnhbEXvs9Dg=
@@ -115,8 +114,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfr
github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0 h1:rBhB9Rls+yb8kA4x5a/cWxOufWfXt24E+kq4YlbGj3g=
github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0/go.mod h1:fJ0UAZc1fx3xZhU4eSHQDJ1ApFmTVhp5VTpV9tm2ogg=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75 h1:cUVxyR+UfmdEAZGJ8IiKld1O0dbGotEnkMolG5hfMSY=
github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75/go.mod h1:pBbZyGwC5i16IBkjVKoy/sznA8jPD/K9iedwe1ESE6w=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
@@ -128,22 +127,22 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
github.com/oschwald/geoip2-golang v1.8.0 h1:KfjYB8ojCEn/QLqsDU0AzrJ3R5Qa9vFlx3z6SLNcKTs=
github.com/oschwald/geoip2-golang v1.8.0/go.mod h1:R7bRvYjOeaoenAp9sKRS8GX5bJWcZ0laWO5+DauEktw=
github.com/oschwald/maxminddb-golang v1.10.0 h1:Xp1u0ZhqkSuopaKmk1WwHtjF0H9Hd9181uj2MQ5Vndg=
github.com/oschwald/maxminddb-golang v1.10.0/go.mod h1:Y2ELenReaLAZ0b400URyGwvYxHV1dLIxBuyOsyYjHK0=
github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc=
github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc=
github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y=
github.com/oschwald/maxminddb-golang v1.11.0 h1:aSXMqYR/EPNjGE8epgqwDay+P30hCBZIveY0WZbAWh0=
github.com/oschwald/maxminddb-golang v1.11.0/go.mod h1:YmVI+H0zh3ySFR3w+oz8PCfglAFj3PuCmui13+P9zDg=
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU=
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc=
github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE=
github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -152,14 +151,14 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig=
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM=
github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc=
github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
github.com/prometheus/procfs v0.11.0 h1:5EAgkfkMl659uZPbe9AS2N68a7Cc1TJbPEuGzFuRbyk=
github.com/prometheus/procfs v0.11.0/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U=
github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI=
github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E=
@@ -173,10 +172,10 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0=
github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8=
github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08=
github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -185,9 +184,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2 h1:F4snRP//nIuTTW9LYEzVH4HVwDG9T3M4t8y/2nqMbiY=
github.com/syncthing/notify v0.0.0-20210616190510-c6b7342338d2/go.mod h1:J0q59IWjLtpRIJulohwqEZvjzwOfTEPp8SVhDJl+y0Y=
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs=
@@ -197,48 +195,57 @@ github.com/thejerf/suture/v4 v4.0.2/go.mod h1:g0e8vwskm9tI0jRjxrnA6lSr0q6OfPdWJV
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8=
github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8=
github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk=
github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA=
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0 h1:okhMind4q9H1OxF44gNegWkiP4H/gsTFLalHFa4OOUI=
github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0/go.mod h1:TTbGUfE+cXXceWtbTHq6lqcTvYPBKLNejBEbnUsQJtU=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA=
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -263,19 +270,25 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -284,8 +297,10 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8=
golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -299,8 +314,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=

View File

@@ -549,6 +549,18 @@ ul.three-columns li, ul.two-columns li {
opacity: 1;
}
.checkbox[disabled] {
background-color: #eeeeee;
opacity: 1;
margin-left: -5px;
padding-left: 5px;
}
.checkbox[disabled] *, .checkbox[disabled] .help-block {
color: #999999;
cursor: not-allowed;
}
/* Make a "well" look more like a readonly text input when grouped with a button */
.input-group .well-sm {
padding-top: 6px;
@@ -562,13 +574,6 @@ html[lang|="ko"] i {
font-style: normal;
}
/* Prevent buttons from jumping up and down
when a tooltip is shown for one of them. */
.btn-group-vertical > .tooltip + .btn,
.btn-group-vertical > .tooltip + .btn-group {
margin-top: -1px;
}
.select-on-click {
-webkit-user-select: all;
user-select: all;

View File

@@ -52,6 +52,7 @@
"Cancel": "إلغاء",
"Changelog": "سجل التغيير",
"Clean out after": "نظف بعد",
"Cleaning Versions": "إصدارات نظيفة",
"Cleanup Interval": "الفاصل الزمني للتنظيف",
"Click to see full identification string and QR code.": "انقر لرؤية سلسلة التعريف الكاملة ورمز الاستجابة السريعة QR.",
"Close": "أغلق",
@@ -65,6 +66,7 @@
"Connection Error": "خطأ في الإتصال",
"Connection Type": "نوع الاتصال",
"Connections": "اتصالات",
"Connections via relays might be rate limited by the relay": "قد يكون معدل التوصيلات عبر المرحلات محدودًا بواسطة المرحل",
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "مراقبة الملفات بشكل مستمر متوفر في Syncthing. يتم فحص الملفات التي تم تغييرها في المسار فقط. هذا يساعد على تجنب فحص كامل المسار لأداء اسرع. ",
"Copied from elsewhere": "منسوخ من مكان أخر",
"Copied from original": "منسوخ من الأصل",
@@ -83,12 +85,18 @@
"Default Ignore Patterns": "أنماط التجاهل الافتراضية",
"Defaults": "الافتراضات",
"Delete": "حذف",
"Delete Unexpected Items": "حذف العناصر غير المتوقعة",
"Deleted {%file%}": "حُذِفت {{file}}",
"Deselect All": "الغاء تحديد الكل",
"Deselect devices to stop sharing this folder with.": "قم بإلغاء تحديد الأجهزة لإيقاف مشاركة هذا المجلد معها.",
"Deselect folders to stop sharing with this device.": "قم بإلغاء تحديد المجلدات لإيقاف المشاركة مع هذا الجهاز.",
"Device": "جهاز",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "الجهاز \"{{الاسم}}\" ({{الجهاز}} في {{العنوان}}) يرغب في الاتصال، إضافة جهاز جديد؟",
"Device Certificate": "شهادة الجهاز",
"Device ID": "هوية الجهاز",
"Device Identification": "هوية الجهاز",
"Device Name": "أسم الجهاز",
"Device is untrusted, enter encryption password": "الجهاز غير موثوق به، أدخل كلمة مرور التشفير",
"Device rate limits": "حدود معدل نقل البيانات",
"Device that last modified the item": "اخر جهاز جهاز عدل على العنصر",
"Devices": "الأجهزة",
@@ -97,11 +105,17 @@
"Disabled periodic scanning and disabled watching for changes": "تعطيل المسح الدوري ومشاهدة التغييرات",
"Disabled periodic scanning and enabled watching for changes": "تعطيل المسح الدوري وتفعيل مشاهدة التغييرات",
"Disabled periodic scanning and failed setting up watching for changes, retrying every 1m:": "تعطيل المسح الدوري وفشل إعداد مشاهدة التغييرات، إعادة المحاولة كل 1 دقيقة:",
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "تعطيل مقارنة أذونات الملفات ومزامنتها. مفيد على الأنظمة ذات الأذونات غير الموجودة أو المخصصة (مثل FAT و exFAT و Synology و Android).",
"Discard": "تجاهل",
"Disconnected": "غير متصل",
"Disconnected (Inactive)": "غير متصل (غير نشط)",
"Disconnected (Unused)": "غير متصل (غير مستخدم)",
"Discovered": "مكتشفة",
"Discovery": "اكتشاف",
"Discovery Failures": "فشل الاكتشاف",
"Discovery Status": "حالة الاكتشاف",
"Dismiss": "رفض",
"Do not add it to the ignore list, so this notification may recur.": "لا تقم بإضافته إلى قائمة التجاهل، لذلك قد يتكرر هذا الإشعار.",
"Do not restore": "الغاء الاستعادة",
"Do not restore all": "الغاء استعادة الكل",
"Do you want to enable watching for changes for all your folders?": "هل تريد تفعيل مراقبة التغيرات على كل المجلدات؟",
@@ -111,6 +125,7 @@
"Downloading": "جاري التحميل",
"Edit": "تعديل",
"Edit Device": "تعديل الجهاز",
"Edit Device Defaults": "تحرير الإعدادات الافتراضية للجهاز",
"Edit Folder": "تعديل المجلد",
"Editing {%path%}.": "تعديل {{path}}.",
"Enable Crash Reporting": "تفعيل التبليغ عن الاخطاء",
@@ -301,7 +316,6 @@
"This is a major version upgrade.": "ترقية أساسية ",
"Time": "الوقت",
"Time the item was last modified": "توقيت اخر تعديل للعنصر",
"Twitter": "Twitter",
"Type": "نوع",
"Unavailable": "غير متوفر",
"Unavailable/Disabled by administrator or maintainer": "غير متوفر/معطل من قبل المسؤول أو الصيانة",

View File

@@ -105,7 +105,6 @@
"The maximum time to keep a version (in days, set to 0 to keep versions forever).": "The maximum time to keep a version (in days, set to 0 to keep versions forever).",
"The number of old versions to keep, per file.": "Колькі старых вэрсій трымаць, для кожнага файлу.",
"The number of versions must be a number and cannot be blank.": "The number of versions must be a number and cannot be blank.",
"Twitter": "Twitter",
"Unknown": "Невядома",
"Up to Date": "Найноўшае",
"Upgrade To {%version%}": "Upgrade To {{version}}",

View File

@@ -2,7 +2,7 @@
"A device with that ID is already added.": "Устройство с този идентификатор вече е добавено.",
"A negative number of days doesn't make sense.": "Отрицателният брой дни е безсмислен.",
"A new major version may not be compatible with previous versions.": "Ново значимо издание, което може да е несъвместимо с предните издания.",
"API Key": "Ключ за ППИ",
"API Key": "API Ключ",
"About": "Относно",
"Action": "Действие",
"Actions": "Действия",
@@ -94,7 +94,7 @@
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "Устройство \"{{name}}\" ({{device}}) с адрес {{address}} желае да се свърже. Да бъде ли добавено?",
"Device Certificate": "Сертификат на устройството",
"Device ID": "Идентификатор на устройство",
"Device Identification": "Идентификатор на устройство",
"Device Identification": "Идентификация на устройство",
"Device Name": "Име на устройството",
"Device is untrusted, enter encryption password": "Устройството е недоверено, въведете парола за шифроване",
"Device rate limits": "Ограничаване на скоростта",
@@ -448,7 +448,6 @@
"Today": "Днес",
"Trash Can": "Кошче за отпадъци",
"Trash Can File Versioning": "Версии от вида „кошче за отпадъци“",
"Twitter": "Twitter",
"Type": "Вид",
"UNIX Permissions": "Права на UNIX",
"Unavailable": "Няма налични",
@@ -473,7 +472,7 @@
"Use HTTPS for GUI": "Графичният интерфейс работи под HTTPS",
"Use notifications from the filesystem to detect changed items.": "Използва съобщения от файловата система, за да открива променени елементи.",
"User Home": "Папка на потребителя",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Няма зададени потребителско име и парола за достъп до графичния интерфейс. Помислете за създаването им.",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Потребителският интерфейс не е защитен с потребителско име и парола. Настройте защита.",
"Using a QUIC connection over LAN": "Използване на връзка чрез QUIC в LAN",
"Using a QUIC connection over WAN": "Използване на връзка чрез QUIC в WAN",
"Using a direct TCP connection over LAN": "Използване на директна свързаност с TCP през местна мрежа",

View File

@@ -448,7 +448,6 @@
"Today": "Avui",
"Trash Can": "Paperera",
"Trash Can File Versioning": "Paperera de versionat de fitxers",
"Twitter": "Twitter",
"Type": "Tipus",
"UNIX Permissions": "Permisos UNIX",
"Unavailable": "No disponible",

View File

@@ -448,7 +448,6 @@
"Today": "Avui",
"Trash Can": "Paperera",
"Trash Can File Versioning": "Versionat d'arxius de la paperera",
"Twitter": "Twitter",
"Type": "Tipus",
"UNIX Permissions": "Permisos UNIX",
"Unavailable": "No disponible",

View File

@@ -415,7 +415,6 @@
"Today": "Dnes",
"Trash Can": "Koš",
"Trash Can File Versioning": "Ponechávat jednu předchozí verzi (jako Koš) ",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX oprávnění",
"Unavailable": "Nedostupné",

View File

@@ -448,7 +448,6 @@
"Today": "I dag",
"Trash Can": "Affaldskurv",
"Trash Can File Versioning": "Versionering med papirkurv",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX rettigheder",
"Unavailable": "Ikke tilgængelig",
@@ -474,6 +473,8 @@
"Use notifications from the filesystem to detect changed items.": "Benyt notifikationer fra filsystemet til at finde filændringer.",
"User Home": "Brugerhjem",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Brugernavn/adgangskode er ikke indstillet til GUI-godkendelse. Overvej at konfigurere det.",
"Using a QUIC connection over LAN": "Brug af en QUIC-forbindelse over LAN",
"Using a QUIC connection over WAN": "Brug af en QUIC-forbindelse over WAN",
"Using a direct TCP connection over LAN": "Brug af en direkte TCP-forbindelse via LAN",
"Using a direct TCP connection over WAN": "Brug af en direkte TCP-forbindelse over WAN",
"Version": "Version",

View File

@@ -448,7 +448,6 @@
"Today": "Heute",
"Trash Can": "Papierkorb",
"Trash Can File Versioning": "Papierkorb Dateiversionierung",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX-Berechtigungen",
"Unavailable": "Nicht verfügbar",

View File

@@ -314,7 +314,6 @@
"Time": "Χρόνος",
"Time the item was last modified": "Ώρα τελευταίας τροποποίησης του στοιχείου",
"Trash Can File Versioning": "Τήρηση εκδόσεων κάδου ανακύκλωσης",
"Twitter": "Twitter",
"Type": "Τύπος",
"UNIX Permissions": "Άδειες αρχείων UNIX",
"Unavailable": "Μη διαθέσιμο",

View File

@@ -448,7 +448,6 @@
"Today": "Today",
"Trash Can": "Trash Can",
"Trash Can File Versioning": "Bin File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",

View File

@@ -448,7 +448,6 @@
"Today": "Today",
"Trash Can": "Rubbish Bin",
"Trash Can File Versioning": "Rubbish Bin File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",

View File

@@ -448,7 +448,6 @@
"Today": "Today",
"Trash Can": "Trash Can",
"Trash Can File Versioning": "Trash Can File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",

View File

@@ -317,7 +317,6 @@
"Time": "Tempo",
"Time the item was last modified": "Tempo de lasta modifo de la ero",
"Trash Can File Versioning": "Rubuja Dosiera Versionado",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permesoj UNIX",
"Unavailable": "Ne disponebla",

View File

@@ -448,7 +448,6 @@
"Today": "Hoy",
"Trash Can": "Papelera",
"Trash Can File Versioning": "Versionado de archivos de la papelera",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permisos de UNIX",
"Unavailable": "No disponible",

View File

@@ -113,7 +113,6 @@
"The folder path cannot be blank.": "Kausta asukoht ei tohi olla tühi!",
"The following items could not be synchronized.": "Järgnevaid üksusi ei õnnestunud sünkroniseerida.",
"The maximum age must be a number and cannot be blank.": "Maksimaalne vanus peab olema arv ning ei tohi olla tühi.",
"Twitter": "Twitter",
"Unknown": "Teadmata",
"Upload Rate": "Üleslaadimise Kiirus",
"Use HTTPS for GUI": "Kasuta HTTPS'i GUI jaoks",

View File

@@ -384,7 +384,6 @@
"Time": "Ordua",
"Time the item was last modified": "Itema azkenekoz aldatu zen ordua",
"Trash Can File Versioning": "Zakarrontzia",
"Twitter": "Twitter",
"Type": "Mota",
"UNIX Permissions": "UNIX baimenak",
"Unavailable": "Ez dago erabilgarri",

View File

@@ -310,7 +310,6 @@
"Time": "Aika",
"Time the item was last modified": "Aika jolloin kohdetta viimeksi muokattiin",
"Trash Can File Versioning": "Roskakorin tiedostoversiointi",
"Twitter": "Twitter",
"Type": "Tyyppi",
"Unavailable": "Ei saatavilla",
"Unavailable/Disabled by administrator or maintainer": "Ei saatavilla / ylläpitäjän estämä.",

View File

@@ -210,7 +210,6 @@
"This setting controls the free space required on the home (i.e., index database) disk.": "Ce réglage contrôle l'espace disque requis dans le disque qui abrite votre répertoire utilisateur (pour la base de données d'indexation).",
"Time": "Heure",
"Trash Can File Versioning": "Style poubelle",
"Twitter": "Twitter",
"Unknown": "Inconnu",
"Unshared": "Non partagé",
"Up to Date": "À jour",

View File

@@ -6,7 +6,7 @@
"About": "À propos",
"Action": "Action",
"Actions": "Actions",
"Active filter rules": "Règles de filtrage actives",
"Active filter rules": "Filtres enregistrés",
"Add": "Ajouter",
"Add Device": "Ajouter l'appareil",
"Add Folder": "Ajouter un partage",
@@ -133,10 +133,10 @@
"Enable NAT traversal": "Activer la translation d'adresses (NAT)",
"Enable Relaying": "Relayage possible",
"Enabled": "Activée",
"Enables sending extended attributes to other devices, and applying incoming extended attributes. May require running with elevated privileges.": "Active la synchronisation des attributs étendus. Cette option peut nécessiter d'exécuter Syncthing avec l'élévation de privilèges.",
"Enables sending extended attributes to other devices, but not applying incoming extended attributes. This can have a significant performance impact. Always enabled when \"Sync Extended Attributes\" is enabled.": "Active l'envoi des attributs étendus mais ignore leur réception. Cette option peut provoquer une dégradation importante des performances. L'envoi est toujours activé quand on choisi l'option \"Synchroniser les attributs étendus\".",
"Enables sending ownership information to other devices, and applying incoming ownership information. Typically requires running with elevated privileges.": "Active la synchronisation de l'attribut \"Propriétaire\". Cette option nécessite habituellement d'exécuter Syncthing avec des privilèges élevés.",
"Enables sending ownership information to other devices, but not applying incoming ownership information. This can have a significant performance impact. Always enabled when \"Sync Ownership\" is enabled.": "Active l'envoi de l'attribut \"Propriétaire\" mais ignore sa réception. Cette option peut provoquer une dégradation importante des performances. L'envoi est toujours activé quand on choisi l'option \"Synchroniser le propriétaire\".",
"Enables sending extended attributes to other devices, and applying incoming extended attributes. May require running with elevated privileges.": "Active la synchronisation des attributs étendus. Cette option peut nécessiter d'exécuter Syncthing avec élévation de privilèges.",
"Enables sending extended attributes to other devices, but not applying incoming extended attributes. This can have a significant performance impact. Always enabled when \"Sync Extended Attributes\" is enabled.": "Active l'envoi des attributs étendus mais ignore leur réception. Cette option peut provoquer une dégradation notable des performances. L'envoi est toujours activé si on choisit l'option \"Synchroniser les attributs étendus\".",
"Enables sending ownership information to other devices, and applying incoming ownership information. Typically requires running with elevated privileges.": "Active la synchronisation bidirectionnelle de l'attribut \"Propriétaire\". Cette option nécessite habituellement d'exécuter Syncthing avec élévation de privilèges.",
"Enables sending ownership information to other devices, but not applying incoming ownership information. This can have a significant performance impact. Always enabled when \"Sync Ownership\" is enabled.": "Active l'envoi de l'attribut local \"Propriétaire\" mais ignore sa réception de la part des autres appareils. Cette option peut provoquer une dégradation notable des performances. L'envoi est toujours activé si on choisit l'option \"Synchroniser l'appartenance\".",
"Enter a non-negative number (e.g., \"2.35\") and select a unit. Percentages are as part of the total disk size.": "Nombre positif (p.ex, \"2.35\") et unité. Pourcentage de l'espace disque total.",
"Enter a non-privileged port number (1024 - 65535).": "Entrez un numéro de port non-privilégié (1024 - 65535).",
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "Entrer les adresses (\"tcp://ip:port\" ou \"tcp://hôte:port\") séparées par une virgule, ou \"dynamic\" afin d'activer la recherche automatique de l'adresse.",
@@ -144,7 +144,7 @@
"Enter up to three octal digits.": "Entrez jusqu'à 3 chiffres octaux.",
"Error": "Erreur",
"Extended Attributes": "Attributs étendus",
"Extended Attributes Filter": "Filtre d'attributs étendus",
"Extended Attributes Filter": "Filtres d'attributs étendus",
"External": "Gestion externe",
"External File Versioning": "Gestion externe des versions de fichiers",
"Failed Items": "Éléments en échec",
@@ -186,7 +186,7 @@
"Global Discovery Servers": "Serveurs de découverte globale",
"Global State": "État global",
"Help": "Aide (en anglais)",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "Astuce : quand la règle par défaut est le rejet, seules les règles de rejet sont prises en compte. Envisagez d'ajouter \"Accepter tout\" comme dernière règle.",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "Remarque : vous n'avez indiqué que des filtres de refus alors que le comportement par défaut est déjà le refus. Envisagez d'ajouter * (Partager tout les autres attributs non spécifiés) comme dernier filtre (coché) pour inverser le comportement par défaut.",
"Home page": "Page d'accueil",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Cependant, vos réglages indiquent que vous pourriez souhaiter ne pas l'activer. Nous avons désactivé pour vous l'envoi automatique des rapports.",
"Identification": "Identifiant abrégé",
@@ -253,7 +253,7 @@
"No": "Non",
"No File Versioning": "Sans",
"No files will be deleted as a result of this operation.": "Aucun fichier ne sera supprimé à la suite de cette opération.",
"No rules set": "Aucune règle définie",
"No rules set": "Aucun filtre défini (partager tous les attributs)",
"No upgrades": "Pas de mises à jour",
"Not shared": "Non partagé",
"Notice": "Notification",
@@ -336,7 +336,7 @@
"Send & Receive": "Envoi & réception",
"Send Extended Attributes": "Envoyer les attributs étendus",
"Send Only": "Envoi (lecture seule)",
"Send Ownership": "Envoyer le propriétaire",
"Send Ownership": "Envoyer l'appartenance",
"Set Ignores on Added Folder": "Définir des exclusions pour le nouveau partage",
"Settings": "Configuration",
"Share": "Partager",
@@ -378,7 +378,7 @@
"Support": "Forum",
"Support Bundle": "Kit d'assistance",
"Sync Extended Attributes": "Synchroniser les attributs étendus",
"Sync Ownership": "Synchroniser le propriétaire",
"Sync Ownership": "Synchroniser l'appartenance",
"Sync Protocol Listen Addresses": "Adresses d'écoute du protocole de synchronisation",
"Sync Status": "État de la synchronisation",
"Syncing": "Synchronisation en cours",
@@ -444,11 +444,10 @@
"Time": "Heure",
"Time the item was last modified": "Dernière modification de l'élément",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "Pour connecter votre appareil avec celui nommé \"{{devicename}}\", ajoutez ce nouvel appareil distant portant cet identifiant de votre côté :",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "Activez les règles souhaitées en cochant la case. Laissez décoché pour ignorer la règle.",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "Partagez l'attribut spécifié en cochant la case. Laissez décoché pour refuser (comportement par défaut dès la première règle pour les attributs non spécifiés).",
"Today": "Aujourd'hui",
"Trash Can": "Corbeille",
"Trash Can File Versioning": "Style poubelle",
"Twitter": "Piaf",
"Type": "Type",
"UNIX Permissions": "Permissions UNIX",
"Unavailable": "Indisponible",
@@ -519,7 +518,7 @@
"full documentation": "Documentation complète ici (en anglais)",
"items": "élément(s)",
"modified": "modifié",
"permit": "accepter",
"permit": "partager tous les attributs",
"seconds": "secondes",
"theme-name-black": "Noir",
"theme-name-dark": "Sombre",

View File

@@ -368,7 +368,6 @@
"Time": "Tiid",
"Time the item was last modified": "Tiidstip dat it ûnderdiel foar it lest oanpast waard.",
"Trash Can File Versioning": "Jiskefet-triemferzjebehear",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX-Rjochten",
"Unavailable": "Net beskikber",

View File

@@ -22,6 +22,5 @@
"Alphabetic": "Alfabética",
"An external command handles the versioning. It has to remove the file from the shared folder. If the path to the application contains spaces, it should be quoted.": "Un comando externo xestiona as versións. Ten que eliminar o ficheiro do cartafol compartido. Si a ruta ao aplicativo contén espazos, deberían ir acotados.",
"Anonymous Usage Reporting": "Informe anónimo de uso",
"LDAP": "LDAP",
"Twitter": "Twitter"
"LDAP": "LDAP"
}

View File

@@ -98,7 +98,6 @@
"Source Code": "קוד מקור",
"Support": "תמיכה",
"Syncing": "כעת בסנכרון",
"Twitter": "Twitter",
"Upgrade": "שדרוג",
"Upgrade To {%version%}": "שדרוג לגרסה {{version}}",
"Upgrading": "כעת בשדרוג",

View File

@@ -1,4 +1,22 @@
{
"LDAP": "LDAP",
"Twitter": "Twitter"
"API Key": "API ključ",
"About": "Informacije",
"Action": "Radnja",
"Actions": "Radnje",
"Active filter rules": "Aktivna pravila filtera",
"Add": "Dodaj",
"Add Device": "Dodaj uređaj",
"Add Folder": "Dodaj mapu",
"Add Remote Device": "Dodaj udaljeni uređaj",
"Add new folder?": "Dodati novu mapu?",
"Address": "Adresa",
"Addresses": "Adrese",
"Advanced": "Napredno",
"Advanced Configuration": "Napredna konfiguracija",
"All Data": "Svi podaci",
"All Time": "Svo vrijeme",
"Allowed Networks": "Dozvoljene mreže",
"Alphabetic": "Abecednim redom",
"Apply": "Primijeni",
"LDAP": "LDAP"
}

View File

@@ -439,7 +439,6 @@
"Today": "Ma",
"Trash Can": "Szemetes",
"Trash Can File Versioning": "Szemetes fájlverzió-követés",
"Twitter": "Twitter",
"Type": "Típus",
"UNIX Permissions": "UNIX jogosultságok",
"Unavailable": "Nem elérhető",

View File

@@ -6,11 +6,13 @@
"About": "Tentang",
"Action": "Aksi",
"Actions": "Aksi",
"Active filter rules": "Aturan filter aktif",
"Add": "Tambah",
"Add Device": "Tambah Perangkat",
"Add Folder": "Tambah Folder",
"Add Remote Device": "Tambah Perangkat Jarak Jauh",
"Add devices from the introducer to our device list, for mutually shared folders.": "Tambahkan perangkat dari pengenal ke daftar perangkat kita, untuk folder yang saling terbagi.",
"Add filter entry": "Tambahkan entri filter",
"Add ignore patterns": "Tambahkan pola pengabaian",
"Add new folder?": "Tambah folder baru?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Selain itu, interval pindai ulang secara penuh akan ditambah (kali 60, yaitu bawaan baru selama 1 jam). Anda juga dapat mengkonfigurasi secara manual untuk setiap folder setelah memilih Tidak.",
@@ -45,6 +47,7 @@
"Automatically create or share folders that this device advertises at the default path.": "Otomatis membuat atau membagi folder yang perangkat ini iklankan di lokasi bawaan.",
"Available debug logging facilities:": "Fasilitas log debug yang ada:",
"Be careful!": "Harap hati-hati!",
"Body:": "Badan:",
"Cancel": "Batal",
"Changelog": "Log Perubahan",
"Clean out after": "Bersihkan setelah",
@@ -392,7 +395,6 @@
"Time the item was last modified": "Waktu file terakhir dimodifikasi",
"Today": "Hari Ini",
"Trash Can File Versioning": "Pemversian Berkas Tempat Sampah",
"Twitter": "Twitter",
"Type": "Tipe",
"UNIX Permissions": "Izin UNIX",
"Unavailable": "Tidak Tersedia",

View File

@@ -448,7 +448,6 @@
"Today": "Oggi",
"Trash Can": "Cestino",
"Trash Can File Versioning": "Controllo Versione con Cestino",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permessi UNIX",
"Unavailable": "Non disponibile",

View File

@@ -379,7 +379,6 @@
"Time the item was last modified": "項目を最後に変更した日時",
"Today": "今日",
"Trash Can File Versioning": "ゴミ箱によるバージョン管理",
"Twitter": "Twitter",
"Type": "タイプ",
"UNIX Permissions": "UNIX パーミッション",
"Unavailable": "利用不可",

View File

@@ -448,7 +448,6 @@
"Today": "오늘",
"Trash Can": "휴지통",
"Trash Can File Versioning": "휴지통을 통한 파일 버전 관리",
"Twitter": "트위터",
"Type": "유형",
"UNIX Permissions": "UNIX 권한",
"Unavailable": "변경 불가",

View File

@@ -376,7 +376,6 @@
"Today": "Šiandien",
"Trash Can": "Šiukšlinė",
"Trash Can File Versioning": "Šiukšliadėžės versijų valdymas",
"Twitter": "„Twitter“",
"Type": "Tipas",
"UNIX Permissions": "UNIX leidimai",
"Unavailable": "Neprieinama",

View File

@@ -294,7 +294,6 @@
"Time": "Klokkeslett",
"Time the item was last modified": "Tidspunktet elementet sist ble endret",
"Trash Can File Versioning": "Papirkurv versjonskontroll",
"Twitter": "Twitter",
"Unavailable": "Utilgjengelig",
"Unavailable/Disabled by administrator or maintainer": "Utilgjengelig/avskrudd av administrator eller vedlikeholder",
"Undecided (will prompt)": "Ikke bestemt (vil spørre)",

View File

@@ -24,6 +24,5 @@
"Copied from elsewhere": "अन्यत्रबाट प्रतिलिपित्",
"Copied from original": "मूलबाट प्रतिलिपित्",
"Danger!": "खतरा!",
"LDAP": "LDAP",
"Twitter": "Twitter"
"LDAP": "LDAP"
}

View File

@@ -448,7 +448,6 @@
"Today": "Vandaag",
"Trash Can": "Prullenbak",
"Trash Can File Versioning": "Prullenbak-versiebeheer",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX-machtigingen",
"Unavailable": "Niet beschikbaar",

View File

@@ -231,7 +231,6 @@
"This can easily give hackers access to read and change any files on your computer.": "Dette kan lett gje datasnokar tilgang til å lesa og endra vilkårlege filer på denne maskina.",
"This is a major version upgrade.": "Dette er ei hovudoppgradering",
"Trash Can File Versioning": "Papirkorg-filutgåvehandtering",
"Twitter": "Twitter",
"Unknown": "Ukjent",
"Unshared": "Ikkje delt",
"Up to Date": "Oppdatert",

View File

@@ -448,7 +448,6 @@
"Today": "Dzisiaj",
"Trash Can": "Kosz",
"Trash Can File Versioning": "Wersjonowanie plików w koszu",
"Twitter": "Twitter",
"Type": "Rodzaj",
"UNIX Permissions": "UNIX-owe uprawnienia",
"Unavailable": "Niedostępne",

View File

@@ -448,7 +448,6 @@
"Today": "Hoje",
"Trash Can": "Cesto de Lixo",
"Trash Can File Versioning": "Lixeira",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permissões UNIX",
"Unavailable": "Não disponível",

View File

@@ -4,13 +4,15 @@
"A new major version may not be compatible with previous versions.": "Uma nova versão principal pode não ser compatível com versões anteriores.",
"API Key": "Chave da API",
"About": "Acerca da aplicação",
"Action": "Acção",
"Actions": "Acções",
"Action": "Operação",
"Actions": "Operações",
"Active filter rules": "Regras de filtros em uso",
"Add": "Adicionar",
"Add Device": "Adicionar dispositivo",
"Add Folder": "Adicionar pasta",
"Add Remote Device": "Adicionar dispositivo remoto",
"Add devices from the introducer to our device list, for mutually shared folders.": "Adicione dispositivos do apresentador à nossa lista de dispositivos para ter pastas mutuamente partilhadas.",
"Add filter entry": "Adicionar filtro",
"Add ignore patterns": "Adicionar padrões de exclusão",
"Add new folder?": "Adicionar nova pasta?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "Para além disso o intervalo entre verificações completas irá ser aumentado (vezes 60, ou seja, um novo valor predefinido de 1h). Também o pode configurar manualmente para cada pasta, posteriormente, depois de seleccionar Não.",
@@ -53,7 +55,7 @@
"Cleaning Versions": "Limpando versões",
"Cleanup Interval": "Intervalo entre limpezas",
"Click to see full identification string and QR code.": "Clique para ver a identificação completa e o código QR.",
"Close": "Fechar",
"Close": "Dispensar",
"Command": "Comando",
"Comment, when used at the start of a line": "Comentário, quando usado no início de uma linha",
"Compression": "Compressão",
@@ -76,6 +78,7 @@
"Danger!": "Perigo!",
"Database Location": "Localização da base de dados",
"Debugging Facilities": "Recursos de depuração",
"Default": "Predefinido",
"Default Configuration": "Configuração predefinida",
"Default Device": "Dispositivo predefinido",
"Default Folder": "Pasta predefinida",
@@ -111,7 +114,7 @@
"Discovery": "Descoberta",
"Discovery Failures": "Falhas da descoberta",
"Discovery Status": "Estado da descoberta",
"Dismiss": "Fechar",
"Dismiss": "Dispensar",
"Do not add it to the ignore list, so this notification may recur.": "Não adicionar à lista dos ignorados, para que esta notificação volte a aparecer.",
"Do not restore": "Não restaurar",
"Do not restore all": "Não restaurar nenhum",
@@ -141,6 +144,7 @@
"Enter up to three octal digits.": "Insira de um a três dígitos em octal.",
"Error": "Erro",
"Extended Attributes": "Atributos estendidos",
"Extended Attributes Filter": "Filtro de atributos extendidos",
"External": "Externa",
"External File Versioning": "Externa",
"Failed Items": "Itens que falharam",
@@ -182,6 +186,7 @@
"Global Discovery Servers": "Servidores de descoberta global",
"Global State": "Estado global",
"Help": "Ajuda",
"Hint: only deny-rules detected while the default is deny. Consider adding \"permit any\" as last rule.": "Dica: quando a predefinição é \"negar\", apenas as regras de negação são encontradas. Considere adicionar \"permitir tudo\" como última regra.",
"Home page": "Página do projecto",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "Contudo, a sua configuração actual indica que pode não a querer activada. Nós desactivámos automaticamente o relatório de estouro para si.",
"Identification": "Identificação",
@@ -228,8 +233,10 @@
"Log tailing paused. Scroll to the bottom to continue.": "O acompanhamento do final do registo está em pausa. Desloque para o final para continuar.",
"Logs": "Registos",
"Major Upgrade": "Actualização importante",
"Mass actions": "Acções em massa",
"Mass actions": "Operações em massa",
"Maximum Age": "Idade máxima",
"Maximum single entry size": "Tamanho máximo das entradas únicas",
"Maximum total size": "Tamanho máximo total",
"Metadata Only": "Metadados apenas",
"Minimum Free Disk Space": "Espaço livre mínimo no disco",
"Mod. Device": "Dispositivo mod.",
@@ -246,6 +253,7 @@
"No": "Não",
"No File Versioning": "Nenhuma",
"No files will be deleted as a result of this operation.": "Nenhum ficheiro será eliminado como resultado desta operação.",
"No rules set": "Não foram definidas regras",
"No upgrades": "Sem actualizações",
"Not shared": "Não partilhada",
"Notice": "Avisos",
@@ -396,7 +404,7 @@
"The cleanup interval cannot be blank.": "O intervalo entre limpezas não pode estar vazio.",
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "A configuração foi gravada mas não activada. O Syncthing tem que reiniciar para activar a nova configuração.",
"The device ID cannot be blank.": "O ID do dispositivo não pode estar vazio.",
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "O ID do dispositivo a colocar aqui pode ser obtido no menu \"Acções > Mostrar ID\" do outro dispositivo. Espaços e hífenes são opcionais (ignorados).",
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "O ID do dispositivo a colocar aqui pode ser obtido no menu \"Operações > Mostrar ID\" do outro dispositivo. Espaços e hífenes são opcionais (ignorados).",
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "O relatório de utilização cifrado é enviado diariamente. É utilizado para rastrear plataformas comuns, tamanhos de pastas e versões da aplicação. Se o tipo de dados do relatório for alterado, será notificado novamente através desta janela.",
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "O ID do dispositivo fornecido não parece ser válido. Deveria ter 52 ou 56 caracteres constituídos por letras e números, com espaços e hífenes opcionais.",
"The folder ID cannot be blank.": "O ID da pasta não pode estar vazio.",
@@ -436,10 +444,10 @@
"Time": "Quando",
"Time the item was last modified": "Quando o item foi modificado pela última vez",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "Para se ligar ao dispositivo Syncthing com o nome \"{{devicename}}\", adicione um novo dispositivo remoto do seu lado com este ID:",
"To permit a rule, have the checkbox checked. To deny a rule, leave it unchecked.": "Para permitir uma regra, marque a caixa. Para negar uma regra, deixe-a desmarcada.",
"Today": "Hoje",
"Trash Can": "Lixo",
"Trash Can File Versioning": "Reciclagem",
"Twitter": "Twitter",
"Type": "Tipo",
"UNIX Permissions": "Permissões UNIX",
"Unavailable": "Indisponível",
@@ -465,6 +473,8 @@
"Use notifications from the filesystem to detect changed items.": "Usar notificações do sistema de ficheiros para detectar itens alterados.",
"User Home": "Pasta do utilizador",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "O nome de utilizador e a respectiva senha para a autenticação na interface gráfica não foram definidos. Considere efectuar essa configuração.",
"Using a QUIC connection over LAN": "Usando uma ligação QUIC sobre LAN",
"Using a QUIC connection over WAN": "Usando uma ligação QUIC sobre WAN",
"Using a direct TCP connection over LAN": "Usando uma ligação TCP directa sobre LAN",
"Using a direct TCP connection over WAN": "Usando uma ligação TCP directa sobre WAN",
"Version": "Versão",
@@ -499,10 +509,16 @@
"Your SMS app should open to let you choose the recipient and send it from your own number.": "A sua aplicação de SMS deverá abrir para deixar escolher o destinatário e enviar a partir do seu próprio número.",
"Your email app should open to let you choose the recipient and send it from your own address.": "A sua aplicação de email deverá abrir para deixar escolher o destinatário e enviar a partir do seu próprio endereço.",
"days": "dias",
"deleted": "eliminada",
"deny": "negar",
"directories": "pastas",
"file": "ficheiro",
"files": "ficheiros",
"folder": "pasta",
"full documentation": "documentação completa",
"items": "itens",
"modified": "modificada",
"permit": "permitir",
"seconds": "segundos",
"theme-name-black": "Preto",
"theme-name-dark": "Escuro",

View File

@@ -360,7 +360,6 @@
"Time": "Time",
"Time the item was last modified": "Time the item was last modified",
"Trash Can File Versioning": "Trash Can File Versioning",
"Twitter": "Twitter",
"Type": "Type",
"UNIX Permissions": "UNIX Permissions",
"Unavailable": "Unavailable",

View File

@@ -432,7 +432,6 @@
"Today": "Сегодня",
"Trash Can": "Корзина",
"Trash Can File Versioning": "Использовать версионность для файлов в Корзине",
"Twitter": "Twitter",
"Type": "Тип",
"UNIX Permissions": "Разрешения UNIX",
"Unavailable": "Недоступно",

View File

@@ -1,27 +1,29 @@
{
"A device with that ID is already added.": "මෙම හැඳු. ලබා ගැනීමට දැනටමත් එකතු කර ඇත.",
"A negative number of days doesn't make sense.": "සෘණ දින ගණන තේරුමක් නැත.",
"A new major version may not be compatible with previous versions.": "නව ප්‍රධාන අනුවාදයක් පෙර අනුවාද සමඟ නොගැළපේ.",
"A device with that ID is already added.": "මෙම හැඳු. සහිත උපාංගයක් ඇත.",
"A negative number of days doesn't make sense.": "සෘණාත්මක දින ගණනක් ඵලක් නැත.",
"A new major version may not be compatible with previous versions.": "නව ප්‍රධාන අනුවාදයක් කලින් අනුවාද සමඟ බොහෝ විට නොගැළපේ.",
"API Key": "යෙ.ක්‍ර.මු. යතුර",
"About": "පිළිබඳව",
"Action": "ක්‍රියා",
"Actions": "ක්‍රියා",
"Action": "ක්‍රියාමාර්ගය",
"Actions": "ක්‍රියාමාර්ග",
"Active filter rules": "සක්‍රිය පෙරීමේ නීති",
"Add": "එකතු",
"Add Device": "එකතුවක් එකතු කරන්න",
"Add Folder": "බහාලුමක් එකතු කරන්න",
"Add Remote Device": "දුරස්ථ එකක් එකතු කරන්න",
"Add Device": "උපාංගයක් යොදන්න",
"Add Folder": "බහාලුමක් යොදන්න",
"Add Remote Device": "දුරස්ථ උපාංගයක් යොදන්න",
"Add devices from the introducer to our device list, for mutually shared folders.": "අන්‍යෝන්‍ය වශයෙන් බෙදා ගත් ෆෝල්ඩර සඳහා, අපගේ උපාංග ලැයිස්තුවට හඳුන්වා දෙන්නා වෙතින් උපාංග එක් කරන්න.",
"Add filter entry": "පෙරීමේ නිවේශිතයක් යොදන්න",
"Add ignore patterns": "නොසලකා හැරීමේ රටා එක් කරන්න",
"Add new folder?": "නව බහාලුමක් එකතු කරනවාද?",
"Add new folder?": "නව බහාලුම යොදනවාද?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "අතිරේකව සම්පූර්ණ නැවත පරිලෝකනය කිරීමේ පරතරය වැඩි වනු ඇත (වාර 60, එනම් 1h හි නව පෙරනිමිය). අංක තේරීමෙන් පසුව ඔබට සෑම ෆෝල්ඩරයක් සඳහාම එය අතින් වින්‍යාසගත කළ හැක.",
"Address": "ලිපිනය",
"Addresses": "ලිපින",
"Advanced": "තව දුරටත්",
"Advanced": "වැඩිදුර",
"Advanced Configuration": "වැඩිදුර වින්‍යාසය",
"All Data": "සියළුම දත්ත",
"All Time": "ැම වෙලාවෙම",
"All Time": "ැමවිට",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "මෙම උපාංගය සමඟ බෙදාගත් සියලුම ෆෝල්ඩර මුරපදයකින් ආරක්‍ෂා කළ යුතු අතර, ලබා දී ඇති මුරපදය නොමැතිව යවන ලද සියලුම දත්ත කියවිය නොහැක.",
"Allow Anonymous Usage Reporting?": "නිර්නාමිකව භාවිතය වාර්තා කිරීමට ඉඩ දෙනවාද?",
"Allow Anonymous Usage Reporting?": "භාවිතය නිර්නාමිකව වාර්තා කිරීමට ඉඩ දෙනවාද?",
"Allowed Networks": "ඉඩදුන් ජාල",
"Alphabetic": "අකාරාදී",
"Altered by ignoring deletes.": "මකාදැමීම් නොසලකා හැරීමෙන් වෙනස් කර ඇත.",
@@ -29,24 +31,26 @@
"Anonymous Usage Reporting": "නිර්නාමිකව භාවිතය වාර්තා කිරීම",
"Anonymous usage report format has changed. Would you like to move to the new format?": "නිර්නාමික භාවිත වාර්තා ආකෘතිය වෙනස් වී ඇත. ඔබ නව ආකෘතියට යාමට කැමතිද?",
"Apply": "යොදන්න",
"Are you sure you want to override all remote changes?": "ඔබට සියලු දුරස්ථ වෙනස්කම් අභිබවා යාමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to permanently delete all these files?": "ඔබට මෙම සියුම ගොනු ස්ථිරවම මැකීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to remove device {%name%}?": "ඔබට උපාංගය {{name}}ඉවත් කිරීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to override all remote changes?": "ඔබට සියළුම දුරස්ථ වෙනස්කම් අභිබවා යාමට වුවමනාද?",
"Are you sure you want to permanently delete all these files?": "ඔබට මෙම සියුම ගොනු සදහටම මැකීමට වුවමනාද?",
"Are you sure you want to remove device {%name%}?": "ඔබට {{name}} උපාංගය ඉවත් කිරීමට වුවමනාද?",
"Are you sure you want to remove folder {%label%}?": "ඔබට ෆෝල්ඩරය {{label}}ඉවත් කිරීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to restore {%count%} files?": "ඔබට ගොනු {{count}} ක් ප්‍රතිසාධනය කිරීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to restore {%count%} files?": "ඔබට ගොනු {{count}} ක් ප්‍රත්‍යර්පණය කිරීමට වුවමනාද?",
"Are you sure you want to revert all local changes?": "ඔබට සියලු දේශීය වෙනස්කම් ප්‍රතිවර්තනය කිරීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to upgrade?": "ඔබට උත්ශ්‍රේණි කිරීමට අවශ්‍ය බව විශ්වාසද?",
"Are you sure you want to upgrade?": "ඔබට උත්ශ්‍රේණි කිරීමට වුවමනාද?",
"Authors": "කතුවරුන්",
"Auto Accept": "ස්වයං පිළිගැනීම",
"Automatic Crash Reporting": "ස්වයංක්‍රීය බිඳවැටීම් වාර්තා කිරීම",
"Automatic Crash Reporting": "ස්වයංක්‍රීය බිඳවැටීම් වාර්තාකරණය",
"Automatic upgrade now offers the choice between stable releases and release candidates.": "ස්වයංක්‍රීය උත්ශ්‍රේණිගත කිරීම දැන් ස්ථායී නිකුතු සහ නිදහස් අපේක්ෂකයින් අතර තේරීම ඉදිරිපත් කරයි.",
"Automatic upgrades": "ස්වයංක්‍රීය වැඩිදියුණු කිරීම්",
"Automatic upgrades": "ස්වයංක්‍රීය උත්ශ්‍රේණි",
"Automatic upgrades are always enabled for candidate releases.": "අපේක්ෂක නිකුතු සඳහා ස්වයංක්‍රීය උත්ශ්‍රේණි කිරීම් සැමවිටම සක්‍රීය වේ.",
"Automatically create or share folders that this device advertises at the default path.": "මෙම උපාංගය පෙරනිමි මාර්ගයේ ප්‍රචාරණය කරන ෆෝල්ඩර ස්වයංක්‍රීයව සාදන්න හෝ බෙදාගන්න.",
"Available debug logging facilities:": "පවතින දෝශ නිරාකරණය කිරීමේ පහසුකම්:",
"Be careful!": "පරෙස්සම් වෙන්න!",
"Body:": "අන්තර්ගතය:",
"Bugs": "දෝෂ",
"Cancel": "සිදු කරන්න",
"Changelog": "චේන්ජ්ලොග්",
"Cancel": "අවලංගු",
"Changelog": "වෙනස්කම්",
"Clean out after": "පසු පිරිසිදු කරන්න",
"Cleaning Versions": "පිරිසිදු කිරීමේ අනුවාද",
"Cleanup Interval": "පිරිසිදු කිරීමේ පරතරය",
@@ -55,6 +59,8 @@
"Command": "විධානය",
"Comment, when used at the start of a line": "පේළියක ආරම්භයේ භාවිතා කරන විට අදහස් දක්වන්න",
"Compression": "සම්පීඩනය",
"Configuration Directory": "වින්‍යාස නාමාවලිය",
"Configuration File": "වින්‍යාස ගොනුව",
"Configured": "වින්‍යාසගතයි",
"Connected (Unused)": "සම්බන්ධයි (භාවිතයේ නැත)",
"Connection Error": "සම්බන්ධතාවයේ දෝෂයකි",
@@ -63,28 +69,34 @@
"Continuously watching for changes is now available within Syncthing. This will detect changes on disk and issue a scan on only the modified paths. The benefits are that changes are propagated quicker and that less full scans are required.": "වෙනස්කම් සඳහා අඛණ්ඩව නැරඹීම දැන් සමමුහුර්තකරණය තුළ පවතී. මෙය තැටියේ වෙනස්කම් හඳුනාගෙන වෙනස් කරන ලද මාර්ගවල පමණක් ස්කෑන් කිරීමක් නිකුත් කරයි. ප්‍රතිලාභ නම් වෙනස්කම් ඉක්මනින් ප්‍රචාරණය වීම සහ අඩු සම්පූර්ණ ස්කෑන් අවශ්‍ය වීමයි.",
"Copied from elsewhere": "වෙනත් තැනකින් පිටපත් කර ඇත",
"Copied from original": "මුල් පිටපතෙන් පිටපත් කර ඇත",
"Copied!": "පිටපත් විය!",
"Copy": "පිටපතක්",
"Copy failed! Try to select and copy manually.": "පිටපත් වීමට අසමත් විය! අතින් තෝරා පිටපත් කිරීමට බලන්න.",
"Currently Shared With Devices": "දැනට උපාංග සමඟ බෙදාගෙන ඇත",
"Custom Range": "අභිරුචි පරාසය",
"Danger!": "අනතුර!",
"Debugging Facilities": "නිදොස් කිරීමේ පහසුකම්",
"Database Location": "දත්ත සමුදායේ ස්ථානය",
"Debugging Facilities": "නිදොස්කරණ පහසුකම්",
"Default": "පෙරනිමි",
"Default Configuration": "පෙරනිමි වින්‍යාසය",
"Default Device": "පෙරනිමි විශේෂ",
"Default Device": "පෙරනිමි උපාංගය",
"Default Folder": "පෙරනිමි බහාලුම",
"Default Ignore Patterns": "පෙරනිමි නොසලකා හැරීම් රටා",
"Defaults": "පෙරනිමි",
"Delete": "මකන්න",
"Delete Unexpected Items": "අනපේක්ෂිත අයිතම මකන්න",
"Delete Unexpected Items": "අනපේක්ෂිත අථක මකන්න",
"Deleted {%file%}": "මකා දැමූ {{file}}",
"Deselect All": "සියල්ල තේරීම ඉවත් කරන්න",
"Deselect All": "සියල්ල නොතෝරන්න",
"Deselect devices to stop sharing this folder with.": "මෙම ෆෝල්ඩරය බෙදා ගැනීම නැවැත්වීමට උපාංග තේරීම ඉවත් කරන්න.",
"Deselect folders to stop sharing with this device.": "මෙම උපාංගය සමඟ බෙදා ගැනීම නැවැත්වීමට ෆෝල්ඩර තේරීම ඉවත් කරන්න.",
"Device": "වැනි",
"Device": "උපාංගය",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "උපාංගය \"{{name}}\" ({{device}} ට {{address}}) සම්බන්ධ වීමට අවශ්‍යයි. නව උපාංගයක් එක් කරන්නද?",
"Device ID": "කැමතිේ හැඳුනුම",
"Device Identification": "කැමතිේ හැඳුනුම",
"Device Name": "ඇතුලත්වේ නම",
"Device Certificate": "උපාංගයේ සහතිකය",
"Device ID": "උපාංගයේ හැඳු.",
"Device Identification": "උපාංගයේ හැඳුනුම",
"Device Name": "උපාංගයේ නම",
"Device is untrusted, enter encryption password": "ඔබ අවසරයි, සංකේත මුරපදය ඇතුලත් කරන්න",
"Device rate limits": "කැමතිේ අනුපාත සීමා",
"Device rate limits": "උපාංගයේ අනුපාත සීමා",
"Device that last modified the item": "අයිතමය අවසන් වරට වෙනස් කළ උපාංගය",
"Devices": "උපාංග",
"Disable Crash Reporting": "බිඳ වැටීම් වාර්තා කිරීම අබල කරන්න",
@@ -95,26 +107,27 @@
"Disables comparing and syncing file permissions. Useful on systems with nonexistent or custom permissions (e.g. FAT, exFAT, Synology, Android).": "ගොනු අවසර සංසන්දනය කිරීම සහ සමමුහුර්ත කිරීම අබල කරයි. නොපවතින හෝ අභිරුචි අවසර සහිත පද්ධති මත ප්‍රයෝජනවත් වේ (උදා: FAT, exFAT, Synology, Android).",
"Discard": "ඉවතලන්න",
"Disconnected": "විසන්ධියි",
"Disconnected (Inactive)": "විසන්ධියි (අක්‍රිය)",
"Disconnected (Unused)": "විසන්ධියි (භාවිතයේ නැත)",
"Discovered": "සොයා ගන්නා ලදී",
"Discovery": "සොයාගැනීම",
"Discovery Failures": "සොයාගැනීමේ අසාර්ථකත්වය",
"Discovery Status": "සොයාගැනීමේ තත්ත්වය",
"Dismiss": "අස් කරන්න",
"Discovery Status": "සොයාගැනීමේ තත්වය",
"Dismiss": "අහකට",
"Do not add it to the ignore list, so this notification may recur.": "එය නොසලකා හැරීමේ ලැයිස්තුවට එක් නොකරන්න, එබැවින් මෙම දැනුම්දීම නැවත සිදු විය හැක.",
"Do not restore": "ප්‍රත්‍යර්පණය නොකරන්න",
"Do not restore all": "සියල්ල ප්‍රත්‍යර්පණය නොකරන්න",
"Do you want to enable watching for changes for all your folders?": "ඔබට ඔබගේ සියලුම ෆෝල්ඩර සඳහා වෙනස්කම් නැරඹීම සබල කිරීමට අවශ්‍යද?",
"Documentation": "ප්‍රලේඛනය",
"Download Rate": "බාගත කිරීමේ අනුපාතය",
"Download Rate": "බාගැනීමේ අනුපාතය",
"Downloaded": "බාගත වී ඇත",
"Downloading": "බාගතකිරීමේ",
"Downloading": "බාගැනෙමින්",
"Edit": "සංස්කරණය",
"Edit Device": "දක්වා සංස්කරණය",
"Edit Device Defaults": "උපාංග පෙරනිමි සංස්කරණය කරන්න",
"Edit Device": "උපාංගය සංස්කරණය",
"Edit Device Defaults": "පෙරනිමි සංස්කරණය කරන්න",
"Edit Folder": "බහාලුම සංස්කරණය",
"Edit Folder Defaults": "ෆෝල්ඩර පෙරනිමි සංස්කරණය කරන්න",
"Editing {%path%}.": "සංස්කරණය {{path}}.",
"Editing {%path%}.": "{{path}} සංශෝධනය.",
"Enable Crash Reporting": "බිඳවැටීම් වාර්තා කිරීම සබල කරන්න",
"Enable NAT traversal": "NAT සංක්‍රමණය සබල කරන්න",
"Enable Relaying": "Relaying සබල කරන්න",
@@ -124,13 +137,13 @@
"Enter comma separated (\"tcp://ip:port\", \"tcp://host:port\") addresses or \"dynamic\" to perform automatic discovery of the address.": "ලිපිනය ස්වයංක්‍රීයව සොයා ගැනීම සඳහා කොමාවෙන් වෙන් කළ (\"tcp://ip:port\", \"tcp://host:port\") ලිපින හෝ \"ගතික\" ඇතුළත් කරන්න.",
"Enter ignore patterns, one per line.": "එක් පේළියකට එකක් නොසලකා හැරීමේ රටා ඇතුළු කරන්න.",
"Enter up to three octal digits.": "අෂ්ටක ඉලක්කම් තුනක් දක්වා ඇතුළු කරන්න.",
"Error": "දෝෂය",
"Error": "දෝෂයකි",
"External": "බාහිර",
"External File Versioning": "බාහිර ගොනු අනුවාදය",
"External File Versioning": "බාහිර ගොනු අනුවාදය",
"Failed Items": "අසාර්ථක අයිතම",
"Failed to load file versions.": "ගොනු අනුවාද පූරණය කිරීමට අසමත් විය.",
"Failed to load ignore patterns.": "නොසලකා හැරීමේ රටා පූරණය කිරීමට අසමත් විය.",
"Failed to setup, retrying": "පිහිටුවීමට අසමත් විය, නැවත උත්සාහ කරමින්",
"Failed to setup, retrying": "පිහිටුවීමට අසමත් විය, උත්සාහ කරමින්",
"Failure to connect to IPv6 servers is expected if there is no IPv6 connectivity.": "IPv6 සම්බන්ධතාවක් නොමැති නම් IPv6 සේවාදායක වෙත සම්බන්ධ වීමට අසමත් වීම අපේක්ෂා කෙරේ.",
"File Pull Order": "ගොනු ඇදීමේ නියෝගය",
"File Versioning": "ගොනු අනුවාදය",
@@ -139,33 +152,36 @@
"Files are protected from changes made on other devices, but changes made on this device will be sent to the rest of the cluster.": "වෙනත් උපාංගවල සිදු කරන ලද වෙනස්කම් වලින් ගොනු ආරක්ෂා කර ඇත, නමුත් මෙම උපාංගයේ සිදු කරන ලද වෙනස්කම් ඉතිරි පොකුරු වෙත යවනු ලැබේ.",
"Files are synchronized from the cluster, but any changes made locally will not be sent to other devices.": "ගොනු පොකුරෙන් සමමුහුර්ත කර ඇත, නමුත් දේශීයව කරන ලද ඕනෑම වෙනස් කිරීමක් වෙනත් උපාංග වෙත නොයවනු ලැබේ.",
"Filesystem Watcher Errors": "ගොනු පද්ධති නිරීක්ෂක දෝෂ",
"Filter by date": "දිනය අනුව පෙරීම",
"Filter by date": "දිනය අනුව පෙරීම",
"Filter by name": "නමට අනුව පෙරීම",
"Folder": "බහාලුම",
"Folder ID": "බහලුමේ නම",
"Folder Label": "ෆෝල්ඩර ලේබලය",
"Folder Path": "බහලුමේ මාර්ගය",
"Folder Type": "බහලුමේ වර්ගය",
"Folder ID": "බහලුමේ හැඳු.",
"Folder Label": "බහාලුමේ නම්පත",
"Folder Path": "බහලුමේ මාර්ගය",
"Folder Type": "බහලුමේ වර්ගය",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "ෆෝල්ඩර වර්ගය \"{{receiveEncrypted}}\" සැකසිය හැක්කේ නව ෆෝල්ඩරයක් එක් කරන විට පමණි.",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "ෆෝල්ඩරය එකතු කිරීමෙන් පසු \"{{receiveEncrypted}}\" ෆෝල්ඩර වර්ගය වෙනස් කළ නොහැක. ඔබට ෆෝල්ඩරය ඉවත් කිරීම, තැටියේ ඇති දත්ත මකා දැමීම හෝ විකේතනය කිරීම සහ ෆෝල්ඩරය නැවත එක් කිරීම අවශ්ය වේ.",
"Folders": "බහාලුම්",
"For the following folders an error occurred while starting to watch for changes. It will be retried every minute, so the errors might go away soon. If they persist, try to fix the underlying issue and ask for help if you can't.": "පහත ෆෝල්ඩර සඳහා වෙනස්කම් නැරඹීමට පටන් ගැනීමේදී දෝෂයක් ඇති විය. එය සෑම මිනිත්තුවකම නැවත උත්සාහ කරනු ඇත, එබැවින් දෝෂ ඉක්මනින් පහව යනු ඇත. ඒවා දිගටම පවතින්නේ නම්, යටින් පවතින ගැටලුව විසඳීමට උත්සාහ කර ඔබට නොහැකි නම් උදව් ඉල්ලන්න.",
"Full Rescan Interval (s)": "සම්පූර්ණ නැවත ස්කෑන් පරතරය (ය)",
"Forever": "සදහටම",
"Full Rescan Interval (s)": "පූර්ණ සුපිරික්සීමේ පරතරය (ත.)",
"GUI": "GUI",
"GUI / API HTTPS Certificate": "GUI / යෙ.ක්‍ර.මු. HTTPS සහතිකය",
"GUI Authentication Password": "GUI සත්‍යාපන මුරපදය",
"GUI Authentication User": "GUI සත්‍යාපන පරිශීලක",
"GUI Authentication: Set User and Password": "GUI සත්‍යාපනය: පරිශීලක හ මුරපදය සකසන්න",
"GUI Authentication User": "GUI සත්‍යාපන පරිශ්‍රීලක",
"GUI Authentication: Set User and Password": "GUI සත්‍යාපනය: පරිශ්‍රීලක හ මුරපදය සකසන්න",
"GUI Listen Address": "GUI සවන්දීමේ ලිපිනය",
"GUI Override Directory": "GUI අභිබවන නාමාවලිය",
"GUI Theme": "GUI තේමාව",
"General": "ජනරාල්",
"General": "සාමාන්‍ය",
"Generate": "උත්පාදනය",
"Global Discovery": "ගෝලීය සොයාගැනීම",
"Global Discovery Servers": "ගෝලීය සොයාගැනීම සේවාදායකයන්",
"Global State": "ගෝලීය රාජ්යය",
"Global Discovery Servers": "ගෝලීය සොයාගැනීම සේවාදායක",
"Global State": "ගෝලීය තත්‍වය",
"Help": "උපකාර",
"Home page": "මුල් පිටුව",
"However, your current settings indicate you might not want it enabled. We have disabled automatic crash reporting for you.": "කෙසේ වෙතත්, ඔබගේ වත්මන් සැකසුම් පෙන්නුම් කරන්නේ ඔබට එය සක්‍රිය කිරීමට අවශ්‍ය නොවිය හැකි බවයි. අපි ඔබ වෙනුවෙන් ස්වයංක්‍රීය බිඳ වැටීම් වාර්තා කිරීම අබල කර ඇත.",
"Identification": "හඳුනා ගැනීම",
"Identification": "හඳුනම",
"If untrusted, enter encryption password": "විශ්වාස කළ නොහැකි නම්, සංකේතාංකන මුරපදය ඇතුළත් කරන්න",
"If you want to prevent other users on this computer from accessing Syncthing and through it your files, consider setting up authentication.": "ඔබට මෙම පරිගණකයේ අනෙකුත් පරිශීලකයින් සමමුහුර්තකරණයට සහ ඒ හරහා ඔබගේ ගොනු වලට ප්‍රවේශ වීම වැලැක්වීමට අවශ්‍ය නම්, සත්‍යාපනය සැකසීම සලකා බලන්න.",
"Ignore": "නොසලකන්න",
@@ -173,73 +189,83 @@
"Ignore Permissions": "අවසර නොසලකන්න",
"Ignore patterns can only be added after the folder is created. If checked, an input field to enter ignore patterns will be presented after saving.": "නොසලකා හැරීමේ රටා එකතු කළ හැක්කේ ෆෝල්ඩරය නිර්මාණය කිරීමෙන් පසුව පමණි. පරීක්ෂා කළහොත්, නොසලකා හැරීමේ රටා ඇතුළු කිරීමට ආදාන ක්ෂේත්‍රයක් සුරැකීමෙන් පසුව ඉදිරිපත් කෙරේ.",
"Ignored Devices": "නොසැලකූ උපාංග",
"Ignored Folders": "නොසලක බහාලුම්",
"Ignored Folders": "නොසලක බහාලුම්",
"Ignored at": "දී නොසලකා හරින ලදී",
"Incoming Rate Limit (KiB/s)": "එන අනුපාත සීමාව (KiB/s)",
"Incorrect configuration may damage your folder contents and render Syncthing inoperable.": "වැරදි වින්‍යාසය ඔබගේ ෆෝල්ඩර අන්තර්ගතයට හානි කළ හැකි අතර සමමුහුර්ත කිරීම අක්‍රිය කරයි.",
"Introduced By": "විසින් හඳුන්වා දෙන ලදී",
"Introducer": "හඳුන්වා දෙන්නා",
"Inversion of the given condition (i.e. do not exclude)": "ලබා දී ඇති කොන්දේසියේ ප්‍රතිලෝම (එනම් බැහැර නොකරන්න)",
"Keep Versions": "අනුවාද තබා ගන්න",
"Keep Versions": "අනුවාද තබාගන්න",
"LDAP": "LDAP",
"Largest First": "විශාලතම පළමු",
"Last 30 Days": "පසුගිය දින 30",
"Last 7 Days": "පසුගිය දින 7",
"Largest First": "පළමුව විශාලතම",
"Last 30 Days": "පසුගිය දවස් 30",
"Last 7 Days": "පසුගිය දවස් 7",
"Last Month": "පසුගිය මාසය",
"Last Scan": "අවසාන සුපිරි ක්ෂය",
"Last Scan": "අවසාන සුපිරික්සීම",
"Last seen": "අවසන දුටුවේ",
"Latest Change": "නවතම වෙනස",
"Learn more": "තව දැනගන්න",
"Learn more at {%url%}": "{{url}} හරහා තව දැනගන්න",
"Limit": "සීමාව",
"Listener Failures": "සවන්දෙන්නන්ගේ අසාර්ථකත්වය",
"Listener Status": "සවන්දෙන්නන්ගේ තත්ත්වය",
"Listeners": "අසන්නන්",
"Loading data...": "දත්ත පූරණය කරමින්...",
"Loading...": "පූරණය ස්ථානයේ...",
"Loading data...": "දත්ත පූරණය වෙමින්...",
"Loading...": "පූරණය වෙමින්...",
"Local Additions": "දේශීය එකතු කිරීම්",
"Local Discovery": "දේශීය සොයාගැනීම",
"Local State": "ප්රාදේශීය රාජ්යය",
"Local State (Total)": "ප්‍රාදේශීය රාජ්‍ය (මුළු)",
"Local Discovery": "ස්ථානීය සොයාගැනීම",
"Local State": "ස්ථානීය තත්‍වය",
"Local State (Total)": "ස්ථානීය තත්‍ය (මුළු)",
"Locally Changed Items": "දේශීයව වෙනස් කරන ලද අයිතම",
"Log": "ලඝු",
"Log": "සටහන",
"Log File": "සටහන් ගොනුව",
"Log tailing paused. Scroll to the bottom to continue.": "ලොග් වලිගය විරාම කරන ලදී. ඉදිරියට යාමට පහළට අනුචලනය කරන්න.",
"Logs": "සටහන්",
"Major Upgrade": "ප්රධාන උත්ශ්රේණි කිරීම",
"Major Upgrade": "ප්රධාන උත්ශ්රේණි කිරීම",
"Mass actions": "මහා ක්‍රියා",
"Maximum Age": "උපරිම වයස",
"Maximum single entry size": "තනි නිවේශිතයක උපරිම ප්‍රමාණය",
"Maximum total size": "උපරිම මුළු ප්‍රමාණය",
"Metadata Only": "පාරදත්ත පමණි",
"Minimum Free Disk Space": "අවම නිදහස් තැටි ඉඩ",
"Minimum Free Disk Space": "අවම තැටියේ ඉඩ",
"Mod. Device": "mod. උපාංගය",
"Mod. Time": "mod. කාලය",
"Move to top of queue": "පෝලිමේ ඉහළට යන්න",
"More than a month ago": "මාසයකට පෙර",
"More than a week ago": "සතියකට පෙර",
"More than a year ago": "වසරකට පෙර",
"Move to top of queue": "පෝලිමේ මුලට ගෙනයන්න",
"Multi level wildcard (matches multiple directory levels)": "බහු මට්ටමේ වයිල්ඩ්කාඩ් (බහු ඩිරෙක්ටරි මට්ටම් වලට ගැලපේ)",
"Never": "කවදාවත්",
"New Device": "නව එකක්",
"New Device": "නව උපාංගය",
"New Folder": "නව බහාලුම",
"Newest First": "අලුත්ම මුලින්ම",
"Newest First": "නව දෑ පළමුව",
"No": "නැහැ",
"No File Versioning": "ගොනු අනුවාදනයක් නැත",
"No files will be deleted as a result of this operation.": "මෙම මෙහෙයුමේ ප්‍රතිඵලයක් ලෙස කිසිදු ගොනුවක් මකා නොදමනු ඇත.",
"No upgrades": "වැඩිදියුණු කිරීම් නොමැත",
"No rules set": "නීති සකසා නැත",
"No upgrades": "උත්ශ්‍රේණි නැත",
"Not shared": "බෙදාගෙන නැත",
"Notice": "දැන්වීම",
"OK": "හරි",
"Off": "අක්රියයි",
"Oldest First": "පරණිතම පළමු",
"Off": "අක්රියයි",
"Oldest First": "පරණ දෑ පළමු",
"Optional descriptive label for the folder. Can be different on each device.": "ෆෝල්ඩරය සඳහා විකල්ප විස්තර ලේබලය. එක් එක් උපාංගය මත වෙනස් විය හැක.",
"Options": "විකල්ප",
"Out of Sync": "සමමුහර්ත නොවේ",
"Out of Sync Items": "අයිතම සමමුහර්ත නොව",
"Out of Sync": "සමමුහර්ත නොවේ",
"Out of Sync Items": "සමමුහර්ත නොවන අථක",
"Outgoing Rate Limit (KiB/s)": "පිටතට යන ගාස්තු සීමාව (KiB/s)",
"Override": "අභිබවා යන්න",
"Override Changes": "වෙනස්කම් අභිබවා යන්න",
"Override": "අභිබවන්න",
"Override Changes": "වෙනස්කම් අභිබවන්න",
"Ownership": "අයිතිය",
"Path": "මාර්ගය",
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "දේශීය පරිගණකයේ ෆෝල්ඩරය වෙත මාර්ගය. එය නොමැති නම් නිර්මාණය වනු ඇත. tilde අක්ෂරය (~) සඳහා කෙටි මගක් ලෙස භාවිතා කළ හැක",
"Path where versions should be stored (leave empty for the default .stversions directory in the shared folder).": "අනුවාද ගබඩා කළ යුතු මාර්ගය (බෙදාගත් ෆෝල්ඩරයේ පෙරනිමි .stversions නාමාවලිය සඳහා හිස්ව තබන්න).",
"Pause": "නවත්වන්න",
"Pause All": "සියල්ල නවත්වන්න",
"Paused": "විරාම කළා",
"Paused (Unused)": "විරාම කරන ලද (භාවිතා නොකළ)",
"Paths": "මාර්ග",
"Pause": "විරාමයක්",
"Pause All": "සියල්ලට විරාමයක්",
"Paused": "විරාමයකි",
"Paused (Unused)": "විරාමයකි (භාවිතා නොකළ)",
"Pending changes": "පොරොත්තු වෙනස්කම්",
"Periodic scanning at given interval and disabled watching for changes": "ලබා දී ඇති කාල සීමාව තුළ වරින් වර ස්කෑන් කිරීම සහ වෙනස්කම් සඳහා අබල කර බැලීම",
"Periodic scanning at given interval and enabled watching for changes": "ලබා දී ඇති කාල සීමාව තුළ වරින් වර ස්කෑන් කිරීම සහ වෙනස්කම් සඳහා නැරඹීම සබල කර ඇත",
@@ -250,15 +276,18 @@
"Please wait": "රැඳෙන්න",
"Prefix indicating that the file can be deleted if preventing directory removal": "නාමාවලිය ඉවත් කිරීම වළක්වන්නේ නම් ගොනුව මකා දැමිය හැකි බව පෙන්නුම් කරන උපසර්ගය",
"Prefix indicating that the pattern should be matched without case sensitivity": "සංවේදිතාවකින් තොරව රටාව ගැලපිය යුතු බව පෙන්නුම් කරන උපසර්ගය",
"Preparing to Sync": "සමමුහූර්තයට සූදානම් ස්ථානයේ",
"Preparing to Sync": "සමමුහූර්තයට සූදානම් වෙමින්",
"Preview": "පෙරදසුන",
"Preview Usage Report": "භාවිතාවේ වාර්තාව පෙරදසුන",
"Preview Usage Report": "භාවිත වාර්තාව පෙරදසුන",
"QR code": "QR කේතය",
"QUIC LAN": "QUIC LAN",
"QUIC WAN": "QUIC WAN",
"Quick guide to supported patterns": "සහාය දක්වන රටා සඳහා ඉක්මන් මාර්ගෝපදේශය",
"Random": "අහඹු",
"Receive Encrypted": "සංකේතවත් ලබන්න",
"Receive Encrypted": "සංකේතිිතව ලබන්න",
"Receive Only": "ලැබීම පමණි",
"Received data is already encrypted": "ලැබුණු දත්ත දැනටමත් සංකේතිතයි",
"Recent Changes": "වෙනස්කම්",
"Recent Changes": "මෑත වෙනස්කම්",
"Reduced by ignore patterns": "නොසලකා හැරීමේ රටා මගින් අඩු කර ඇත",
"Release Notes": "නිකුතු සටහන්",
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "නිදහස් අපේක්ෂකයින්ගේ නවතම විශේෂාංග සහ නිවැරදි කිරීම් අඩංගු වේ. ඒවා සාම්ප්‍රදායික ද්වි-සති සමමුහුර්ත නිකුතු වලට සමාන වේ.",
@@ -266,42 +295,45 @@
"Remote GUI": "දුරස්ථ GUI",
"Remove": "ඉවත් කරන්න",
"Remove Device": "උපාංගය ඉවත් කරන්න",
"Remove Folder": "ෆෝල්ඩරය ඉවත් කරන්න",
"Remove Folder": "බහාලුම ඉවත් කරන්න",
"Required identifier for the folder. Must be the same on all cluster devices.": "ෆෝල්ඩරය සඳහා අවශ්‍ය හඳුනාගැනීම. සියලුම පොකුරු උපාංග මත සමාන විය යුතුය.",
"Rescan": "නැවත ස්කෑන් කරන්න",
"Rescan All": "සියල්ල නැවත ස්කෑන් කරන්න",
"Rescan": "යළි සුපිරික්සන්න",
"Rescan All": "සියල්ල යළි සුපිරික්සන්න",
"Rescans": "නැවත ස්කෑන් කරයි",
"Restart": "යළි අරඹන්න",
"Restart Needed": "නැවත ආරම්භ කිරීම අවශ්‍යයි",
"Restarting": "නැවත ආරම්භ කිරීම",
"Restore": "ප්‍රතිෂ්ඨාපනය කරන්න",
"Restore Versions": "අනුවාද ප්‍රතිසාධනය කරන්න",
"Resume": "අරඹන්න",
"Resume All": "සියල්ල නැවත ආරම්භ කරන්න",
"Reused": "නැවත භාවිතා කරන ලදී",
"Restarting": "යළි ඇරඹෙමින්",
"Restore": "ප්‍රත්‍යර්පණය",
"Restore Versions": "අනුවාද ප්‍රත්‍යර්පණය",
"Resume": "නැවතත්",
"Resume All": "සියල්ල නැවතත්",
"Reused": "යළි භාවිත",
"Revert": "ආපසු හරවන්න",
"Revert Local Changes": "දේශීය වෙනස්කම් ප්‍රතිවර්තනය කරන්න",
"Save": "සුරකින්න",
"Scan Time Remaining": "ඉතිරි කාලය පරිලෝකනය කරන්න",
"Scanning": "ස්කෑන් කිරීම",
"Scanning": "සුපිරික්සමින්",
"See external versioning help for supported templated command line parameters.": "සහාය දක්වන සැකිලි විධාන රේඛා පරාමිති සඳහා බාහිර අනුවාද උදවු බලන්න.",
"Select All": "සියල්ල තෝරන්න",
"Select a version": "අනුවාදයක් තෝරන්න",
"Select additional devices to share this folder with.": "මෙම ෆෝල්ඩරය බෙදා ගැනීමට අමතර උපාංග තෝරන්න.",
"Select additional folders to share with this device.": "මෙම උපාංගය සමඟ බෙදා ගැනීමට අමතර ෆෝල්ඩර තෝරන්න.",
"Select additional devices to share this folder with.": "මෙම බහාලුම බෙදා ගැනීමට අතිරේක උපාංග තෝරන්න.",
"Select additional folders to share with this device.": "මෙම උපාංගය සමඟ බෙදා ගැනීමට අතිරේක බහාලුම් තෝරන්න.",
"Select latest version": "නවතම අනුවාදය තෝරන්න",
"Select oldest version": "පරණිතම අනුවාදය තෝරන්න",
"Select oldest version": "පරණම අනුවාදය තෝරන්න",
"Send & Receive": "යැවීම සහ ලැබීම",
"Send Only": "යවන්න පමණි",
"Send Only": "යැවීම පමණි",
"Send Ownership": "අයිතිය යවන්න",
"Set Ignores on Added Folder": "එකතු කළ ෆෝල්ඩරයේ නොසලකා හැරීම් සකසන්න",
"Settings": "සැකසුම්",
"Share": "බෙදාගන්න",
"Share Folder": "ෆෝල්ඩරය බෙදා ගන්න",
"Share this folder?": "මෙම ෆෝල්ඩරය බෙදා ගන්නද?",
"Shared Folders": "හවුල් ෆෝල්ඩර",
"Share Folder": "බහාලුම බෙදාගන්න",
"Share by Email": "වි-තැපෑලෙන් බෙදාගන්න",
"Share by SMS": "කෙටි පණිවුඩ මගින් බෙදාගන්න",
"Share this folder?": "මෙම බහාලුම බෙදා ගන්නද?",
"Shared Folders": "බෙදාගත් බහාලුම්",
"Shared With": "සමඟ බෙදාගෙන ඇත",
"Sharing": "බෙදාගැනීම",
"Show ID": "හැඳුනුම්පත පෙන්වන්න",
"Show ID": "හැඳු. පෙන්වන්න",
"Show QR": "QR පෙන්වන්න",
"Show detailed discovery status": "සවිස්තරාත්මක සොයාගැනීම් තත්ත්වය පෙන්වන්න",
"Show detailed listener status": "සවිස්තරාත්මක සවන්දෙන්නන්ගේ තත්ත්වය පෙන්වන්න",
@@ -313,56 +345,63 @@
"Simple": "සරල",
"Simple File Versioning": "සරල ගොනු අනුවාදය",
"Single level wildcard (matches within a directory only)": "තනි මට්ටමේ වයිල්ඩ්කාඩ් (ඩිරෙක්ටරියක් තුළ පමණක් ගැලපේ)",
"Size": "ප්රමාණය",
"Size": "ප්රමාණය",
"Smallest First": "කුඩාම පළමු",
"Some discovery methods could not be established for finding other devices or announcing this device:": "වෙනත් උපාංග සොයා ගැනීම හෝ මෙම උපාංගය නිවේදනය කිරීම සඳහා සමහර සොයාගැනීම් ක්‍රම ස්ථාපිත කළ නොහැක:",
"Some items could not be restored:": "සමහර අයිතම ප්‍රතිසාධනය කළ නොහැකි විය:",
"Some listening addresses could not be enabled to accept connections:": "සමහර සවන්දීමේ ලිපින සම්බන්ධතා පිළිගැනීමට සබල කළ නොහැක:",
"Source Code": "ප්රභව කේතය",
"Source Code": "ප්රභව කේතය",
"Stable releases and release candidates": "ස්ථාවර නිකුත් කිරීම් සහ අපේක්ෂකයින් මුදා හැරීම",
"Stable releases are delayed by about two weeks. During this time they go through testing as release candidates.": "ස්ථාවර නිකුත් කිරීම් සති දෙකක් පමණ ප්‍රමාද වේ. මෙම කාලය තුළ ඔවුන් නිදහස් අපේක්ෂකයන් ලෙස පරීක්ෂණ සිදු කරයි.",
"Stable releases only": "ස්ථාවර නිකුතු පමණි",
"Stable releases only": "ස්ථායී නිකුතු පමණි",
"Staggered": "එක තැන පල් වෙනවා",
"Staggered File Versioning": "එකතැන පල්වෙන ගොනු අනුවාදය",
"Start Browser": "බ්‍රව්සරය ආරම්භ කරන්න",
"Statistics": "සංඛ්යාලේඛන",
"Start Browser": "අතිරික්සුව අරඹන්න",
"Statistics": "සංඛ්යාලේඛන",
"Stopped": "නැවැත්තුවා",
"Stores and syncs only encrypted data. Folders on all connected devices need to be set up with the same password or be of type \"{%receiveEncrypted%}\" too.": "සංකේතනය කළ දත්ත පමණක් ගබඩා කර සමමුහුර්ත කරයි. සියලුම සම්බන්ධිත උපාංගවල ඇති ෆෝල්ඩර එකම මුරපදයකින් හෝ \"{{receiveEncrypted}}\" වර්ගයට අයත් විය යුතුය.",
"Subject:": "මාතෘකාව:",
"Support": "සහාය",
"Support Bundle": "ආධාරක බණ්ඩලය",
"Sync Ownership": "සමමුහූර්ත අයිතිය",
"Sync Protocol Listen Addresses": "ප්‍රොටෝකෝලය සවන්දීමේ ලිපින සමමුහුර්ත කරන්න",
"Syncing": "සමමුහර්ත කිරීම",
"Sync Status": "සමමුහර්ත තත්‍වය",
"Syncing": "සමමුහූර්තය",
"Syncthing device ID for \"{%devicename%}\"": "\"{{devicename}}\" සඳහා සයින්තින් උපාංගයේ හැඳු.",
"Syncthing has been shut down.": "සමමුහුර්ත කිරීම වසා ඇත.",
"Syncthing includes the following software or portions thereof:": "සමමුහුර්තකරණයට පහත මෘදුකාංග හෝ එහි කොටස් ඇතුළත් වේ:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "සමමුහුර්ත කිරීම MPL v2.0 ලෙස බලපත්‍ර ලබා ඇති නිදහස් සහ විවෘත මූලාශ්‍ර මෘදුකාංගයකි.",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "සමමුහුර්ත කිරීම යනු වෙනත් උපාංගවලින් සම්බන්ධතා උත්සාහයන් සඳහා පහත ජාල ලිපිනවලට සවන් දීමයි:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "සමමුහුර්ත කිරීම යනු ඕනෑම ලිපිනයක වෙනත් උපාංගවලින් සම්බන්ධතා උත්සාහයන් සඳහා සවන් දීම නොවේ. මෙම උපාංගයෙන් පිටතට යන සම්බන්ධතා පමණක් ක්‍රියා කළ හැක.",
"Syncthing is restarting.": "සමමුහුර්ත කිරීම නැවත ආරම්භ වේ.",
"Syncthing is upgrading.": "සමමුහුර්ත කිරීම උත්ශ්‍රේණි කෙරේ.",
"Syncthing is restarting.": "සයින්තින් යළි ඇරඹෙමින්.",
"Syncthing is upgrading.": "සයින්තින් උත්ශ්‍රේණි වෙමින්.",
"Syncthing now supports automatically reporting crashes to the developers. This feature is enabled by default.": "සමමුහුර්තකරණය දැන් සංවර්ධකයින්ට බිඳවැටීම් ස්වයංක්‍රීයව වාර්තා කිරීමට සහය දක්වයි. මෙම විශේෂාංගය පෙරනිමියෙන් සක්රිය කර ඇත.",
"Syncthing seems to be down, or there is a problem with your Internet connection. Retrying…": "සමමුහුර්ත කිරීම අක්‍රිය වී ඇති බවක් පෙනේ, නැතහොත් ඔබගේ අන්තර්ජාල සම්බන්ධතාවයේ ගැටලුවක් තිබේ. නැවත උත්සාහ කරමින්…",
"Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.": "සමමුහුර්ත කිරීම ඔබගේ ඉල්ලීම සැකසීමේ ගැටලුවක් අත්විඳින බව පෙනේ. ගැටලුව දිගටම පවතින්නේ නම් කරුණාකර පිටුව නැවුම් කරන්න හෝ සමමුහුර්ත කිරීම නැවත ආරම්භ කරන්න.",
"TCP LAN": "TCP LAN",
"TCP WAN": "TCP WAN",
"Take me back": "මාව ආපසු ගන්න",
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place.": "GUI ලිපිනය ආරම්භක විකල්ප මගින් අභිබවා යයි. ප්‍රතික්‍ෂේප කිරීම ක්‍රියාත්මක වන විට මෙහි වෙනස්කම් බල නොපායි.",
"The Syncthing Authors": "සමමුහුර්ත කතුවරුන්",
"The Syncthing Authors": "සයින්තින් කතුවරුන්",
"The Syncthing admin interface is configured to allow remote access without a password.": "මුරපදයක් නොමැතිව දුරස්ථ ප්‍රවේශය සඳහා සමමුහුර්ත කිරීමේ පරිපාලක අතුරුමුහුණත වින්‍යාස කර ඇත.",
"The aggregated statistics are publicly available at the URL below.": "එකතු කළ සංඛ්‍යාලේඛන පහත URL හි ප්‍රසිද්ධියේ ලබා ගත හැකිය.",
"The cleanup interval cannot be blank.": "පිරිසිදු කිරීමේ පරතරය හිස් විය නොහැක.",
"The configuration has been saved but not activated. Syncthing must restart to activate the new configuration.": "වින්‍යාසය සුරකින ලද නමුත් සක්‍රිය කර නැත. නව වින්‍යාසය සක්‍රිය කිරීමට සමමුහුර්ත කිරීම නැවත ආරම්භ කළ යුතුය.",
"The device ID cannot be blank.": "උපාංග හැඳුනුම්පත හිස් විය නොහැක.",
"The device ID cannot be blank.": "උපාංගයේ හැඳු. හිස් නොවිය යුතුය.",
"The device ID to enter here can be found in the \"Actions > Show ID\" dialog on the other device. Spaces and dashes are optional (ignored).": "මෙහි ඇතුළු කිරීමට උපාංග හැඳුනුම්පත අනෙක් උපාංගයේ \"ක්‍රියා > පෙන්වන්න ID\" සංවාදයෙන් සොයා ගත හැක. අවකාශ සහ ඉරි විකල්ප වේ (නොසලකා හැර ඇත).",
"The encrypted usage report is sent daily. It is used to track common platforms, folder sizes and app versions. If the reported data set is changed you will be prompted with this dialog again.": "සංකේතාත්මක භාවිත වාර්තාව දිනපතා යවනු ලැබේ. එය පොදු වේදිකා, ෆෝල්ඩර ප්‍රමාණ සහ යෙදුම් අනුවාද නිරීක්ෂණය කිරීමට භාවිතා කරයි. වාර්තා කළ දත්ත කට්ටලය වෙනස් කළහොත් මෙම සංවාදය සමඟ නැවත ඔබෙන් විමසනු ඇත.",
"The entered device ID does not look valid. It should be a 52 or 56 character string consisting of letters and numbers, with spaces and dashes being optional.": "ඇතුළු කළ උපාංග හැඳුනුම්පත වලංගු නොවන බව පෙනේ. එය අකුරු සහ ඉලක්කම් වලින් සමන්විත අක්ෂර 52 හෝ 56 තන්තුවක් විය යුතුය, හිස්තැන් සහ ඉර විකල්ප විය යුතුය.",
"The folder ID cannot be blank.": "ෆෝල්ඩර ID හිස් විය නොහැක.",
"The folder ID must be unique.": "ෆෝල්ඩර හැඳුනුම්පත අද්විතීය විය යුතුය.",
"The folder ID cannot be blank.": "බහාලුමේ හැඳු. හිස් නොවිය යුතුය.",
"The folder ID must be unique.": "බහාලුමේ හැඳු. අනන්‍ය විය යුතුය.",
"The folder content on other devices will be overwritten to become identical with this device. Files not present here will be deleted on other devices.": "වෙනත් උපාංගවල ඇති ෆෝල්ඩර අන්තර්ගතය මෙම උපාංගය සමඟ අනන්‍ය වීමට උඩින් ලියනු ලැබේ. මෙහි නොමැති ගොනු වෙනත් උපාංග මත මකනු ඇත.",
"The folder content on this device will be overwritten to become identical with other devices. Files newly added here will be deleted.": "මෙම උපාංගයේ ඇති ෆෝල්ඩර අන්තර්ගතය වෙනත් උපාංග සමඟ අනන්‍ය වීමට උඩින් ලියනු ලැබේ. මෙහි අලුතින් එක් කළ ගොනු මකා දැමෙනු ඇත.",
"The folder path cannot be blank.": "ෆෝල්ඩර මාර්ගය හිස් විය නොහැක.",
"The folder path cannot be blank.": "බහාලුමේ මාර්ගය හිස් නොවිය යුතුය.",
"The following intervals are used: for the first hour a version is kept every 30 seconds, for the first day a version is kept every hour, for the first 30 days a version is kept every day, until the maximum age a version is kept every week.": "පහත කාල පරතරයන් භාවිතා කරනු ලැබේ: පළමු පැය සඳහා සෑම තත්පර 30 කට වරක් අනුවාදයක් තබා ඇත, පළමු දිනය සඳහා සෑම පැයකටම අනුවාදයක් තබා ඇත, පළමු දින 30 සඳහා සෑම දිනකම අනුවාදයක් තබා ඇත, උපරිම වයස දක්වා අනුවාදයක් සෑම දිනකම තබා ඇත. සතිය.",
"The following items could not be synchronized.": "පහත අයිතම සමමුහර්ත ක නොහැක.",
"The following items were changed locally.": "පහත අයිතම දේශීයව වෙනස් කරන ලදී.",
"The following items could not be synchronized.": "පහත අථක සමමුහර්ත කිරීමට නොහැකිය.",
"The following items were changed locally.": "පහත අථක ස්ථානීයව වෙනස් කර ඇත.",
"The following methods are used to discover other devices on the network and announce this device to be found by others:": "ජාලයේ වෙනත් උපාංග සොයා ගැනීමට සහ මෙම උපාංගය අන් අය විසින් සොයා ගන්නා ලෙස නිවේදනය කිරීමට පහත ක්‍රම භාවිතා කරයි:",
"The following unexpected items were found.": "පහත අනපේක්ෂිත අයිතම හමු විය.",
"The following text will automatically be inserted into a new message.": "පහත පෙළ නව පණිවිඩයකට ස්වයංක්‍රීයව ඇතුළු කෙරේ.",
"The following unexpected items were found.": "පහත අනපේක්‍ෂිත අථක හමු විය.",
"The interval must be a positive number of seconds.": "පරතරය ධනාත්මක තත්පර ගණනක් විය යුතුය.",
"The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning.": "අනුවාද නාමාවලිය තුළ පිරිසිදු කිරීම ධාවනය කිරීම සඳහා තත්පර කිහිපයකින් පරතරය. ආවර්තිතා පිරිසිදු කිරීම අක්රිය කිරීමට ශුන්ය.",
"The maximum age must be a number and cannot be blank.": "උපරිම වයස අංකයක් විය යුතු අතර හිස් විය නොහැක.",
@@ -371,14 +410,14 @@
"The number of days to keep files in the trash can. Zero means forever.": "ලිපිගොනු කුණු කූඩයේ තබා ගත යුතු දින ගණන. ශුන්‍යය යනු සදහටම යන්නයි.",
"The number of old versions to keep, per file.": "ගොනුවකට තබා ගත යුතු පැරණි අනුවාද ගණන.",
"The number of versions must be a number and cannot be blank.": "අනුවාද ගණන අංකයක් විය යුතු අතර හිස් විය නොහැක.",
"The path cannot be blank.": "මාර්ගය හිස් විය නොහැක.",
"The path cannot be blank.": "මාර්ගය හිස් නොවිය යුතුය.",
"The rate limit must be a non-negative number (0: no limit)": "අනුපාත සීමාව සෘණ නොවන අංකයක් විය යුතුය (0: සීමාවක් නැත)",
"The remote device has not accepted sharing this folder.": "දුරස්ථ උපාංගය මෙම ෆෝල්ඩරය බෙදා ගැනීම පිළිගෙන නොමැත.",
"The remote device has paused this folder.": "දුරස්ථ උපාංගය මෙම ෆෝල්ඩරය විරාම කර ඇත.",
"The rescan interval must be a non-negative number of seconds.": "නැවත පරිලෝකනය කිරීමේ විරාමය සෘණාත්මක නොවන තත්පර ගණනක් විය යුතුය.",
"There are no devices to share this folder with.": "මෙම ෆෝල්ඩරය බෙදා ගැනීමට උපාංග නොමැත.",
"There are no file versions to restore.": "ප්‍රතිසාධනය කිරීමට ගොනු අනුවාද නොමැත.",
"There are no folders to share with this device.": "මෙම උපාංගය සමඟ බෙදා ගැනීමට ෆෝල්ඩර නොමැත.",
"There are no folders to share with this device.": "මෙම උපාංගය සමඟ බෙදා ගැනීමට බහාලුම් නැත.",
"They are retried automatically and will be synced when the error is resolved.": "ඒවා ස්වයංක්‍රීයව නැවත උත්සාහ කරන අතර දෝෂය නිරාකරණය වූ විට සමමුහුර්ත වේ.",
"This Device": "මෙම උපාංගය",
"This Month": "මේ මාසයේ",
@@ -388,41 +427,45 @@
"This setting controls the free space required on the home (i.e., index database) disk.": "මෙම සිටුවම නිවසේ (එනම්, දර්ශක දත්ත ගබඩාව) තැටියේ අවශ්‍ය නිදහස් ඉඩ පාලනය කරයි.",
"Time": "කාලය",
"Time the item was last modified": "අයිතමය අවසන් වරට වෙනස් කළ වේලාව",
"To connect with the Syncthing device named \"{%devicename%}\", add a new remote device on your end with this ID:": "\"{{devicename}}\" සයින්තින් උපාංගය සමඟ සම්බන්ධ වීමට, මෙම හැඳු. සහිත නව දුරස්ථ උපාංගයක් ඔබගේ පසට එක් කරන්න:",
"Today": "අද",
"Trash Can": "කසල බඳුන",
"Trash Can File Versioning": "කුණු කූඩය ගොනු අනුවාදය",
"Twitter": "ට්විටර්",
"Type": "ටයිප් කරන්න",
"Type": "වර්ගය",
"UNIX Permissions": "UNIX අවසර",
"Unavailable": "ලබා ගත නොහැක",
"Unavailable": "නොතිබේ",
"Unavailable/Disabled by administrator or maintainer": "පරිපාලක හෝ නඩත්තු කරන්නා විසින් ලබා ගත නොහැක/අබල කර ඇත",
"Undecided (will prompt)": "තීරණය නොකළ (ඉක්මවනු ඇත)",
"Unexpected Items": "අනපේක්ෂිත අයිතම",
"Unexpected items have been found in this folder.": "මෙම ෆෝල්ඩරයේ අනපේක්ෂිත අයිතම හමු වී ඇත.",
"Unexpected Items": "අනපේක්ෂිත අථක",
"Unexpected items have been found in this folder.": "මෙම බහාලුමෙන් අනපේක්ෂිත දෑ හමු වී ඇත.",
"Unignore": "නොසලකා හැරීම ඉවත් කරන්න",
"Unknown": "නොදන්නා",
"Unshared": "බෙදා නොගත්",
"Unshared Devices": "බෙදා නොගත් උපාංග",
"Unshared Folders": "බෙදා නොගත් ෆෝල්ඩර",
"Unshared Folders": "බෙදා නොගත් බහාලුම්",
"Untrusted": "අවිශ්වාසයි",
"Up to Date": "යාවත්කාලීන",
"Up to Date": "යාවත්කාලීනයි",
"Updated {%file%}": "යාවත්කාලීන {{file}}",
"Upgrade": "උත්ශ්‍රේණි කරන්න",
"Upgrade To {%version%}": "{{version}}දක්වා උත්ශ්‍රේණි කරන්න",
"Upgrading": "උත්ශ්‍රේණි කිරීම",
"Upgrading": "උත්ශ්‍රේණි වෙමින්",
"Upload Rate": "උඩුගත කිරීමේ අනුපාතය",
"Uptime": "අතිකාල",
"Usage reporting is always enabled for candidate releases.": "අපේක්ෂක නිකුතු සඳහා භාවිත වාර්තා කිරීම සැමවිටම සක්‍රීය කර ඇත.",
"Use HTTPS for GUI": "GUI සඳහා HTTPS භාවිතා කරන්න",
"Use notifications from the filesystem to detect changed items.": "වෙනස් කළ අයිතම හඳුනා ගැනීමට ගොනු පද්ධතියෙන් දැනුම්දීම් භාවිතා කරන්න.",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "GUI සත්‍යාපනය සඳහා පරිශීලක නාමය/මුරපදය සකසා නොමැත. කරුණාකර එය පිහිටුවීම සලකා බලන්න.",
"Version": "පිටපත",
"Using a QUIC connection over LAN": "LAN හරහා QUIC සම්බන්ධතාවයක් භාවිතය",
"Using a QUIC connection over WAN": "WAN හරහා QUIC සම්බන්ධතාවයක් භාවිතය",
"Using a direct TCP connection over LAN": "LAN හරහා සෘජු TCP සම්බන්ධතාවයක් භාවිතය",
"Using a direct TCP connection over WAN": "WAN හරහා සෘජු TCP සම්බන්ධතාවයක් භාවිතය",
"Version": "අනුවාදය",
"Versions": "අනුවාද",
"Versions Path": "අනුවාද මාර්ගය",
"Versions are automatically deleted if they are older than the maximum age or exceed the number of files allowed in an interval.": "අනුවාද උපරිම වයසට වඩා පැරණි නම් හෝ පරතරයකදී අවසර දී ඇති ගොනු ගණන ඉක්මවන්නේ නම් ඒවා ස්වයංක්‍රීයව මකා දැමෙනු ඇත.",
"Waiting to Clean": "පිරිසිදු කිරීමට බලා සිටීම",
"Waiting to Scan": "ස්කෑන් කිරීමට රැඳී සිටිමින්",
"Waiting to Sync": "සමමුහර්ත කිරීමට රැඳී සිටිමින්",
"Waiting to Scan": "සුපිරික්සීමට රැඳමින්",
"Waiting to Sync": "සමමුහර්තයට රැඳෙමින්",
"Warning": "අවවාදයයි",
"Warning, this path is a parent directory of an existing folder \"{%otherFolder%}\".": "අවවාදයයි, මෙම මාර්ගය පවතින \"{{otherFolder}}\" ෆෝල්ඩරයක මව් නාමාවලියකි.",
"Warning, this path is a parent directory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "අවවාදයයි, මෙම මාර්ගය පවතින ෆෝල්ඩරයක මව් නාමාවලියකි \"{{otherFolderLabel}}\" ({{otherFolder}}).",
@@ -430,30 +473,39 @@
"Warning, this path is a subdirectory of an existing folder \"{%otherFolderLabel%}\" ({%otherFolder%}).": "අවවාදයයි, මෙම මාර්ගය පවතින \"{{otherFolderLabel}}\" ({{otherFolder}}) ෆෝල්ඩරයක උප බහලුමකි.",
"Warning: If you are using an external watcher like {%syncthingInotify%}, you should make sure it is deactivated.": "අවවාදයයි: ඔබ {{syncthingInotify}}වැනි බාහිර නිරීක්ෂකයක් භාවිතා කරන්නේ නම්, එය අක්‍රිය කර ඇති බවට ඔබ සහතික විය යුතුය.",
"Watch for Changes": "වෙනස්කම් සඳහා නරඹන්න",
"Watching for Changes": "වෙනස්කම් සඳහා බලා සිටීම",
"Watching for Changes": "වෙනස්කම් නරඹමින්",
"Watching for changes discovers most changes without periodic scanning.": "වෙනස්කම් නිරීක්ෂණය කිරීම කාලානුරූප ස්කෑන් කිරීමකින් තොරව බොහෝ වෙනස්කම් සොයා ගනී.",
"When adding a new device, keep in mind that this device must be added on the other side too.": "නව උපාංගයක් එකතු කරන විට, මෙම උපාංගය අනෙක් පැත්තෙන් ද එකතු කළ යුතු බව මතක තබා ගන්න.",
"When adding a new folder, keep in mind that the Folder ID is used to tie folders together between devices. They are case sensitive and must match exactly between all devices.": "නව ෆෝල්ඩරයක් එකතු කරන විට, උපාංග අතර ෆෝල්ඩර එකට ගැටගැසීමට ෆෝල්ඩර හැඳුනුම්පත භාවිතා කරන බව මතක තබා ගන්න. ඒවා සිද්ධි සංවේදී වන අතර සියලුම උපාංග අතර හරියටම ගැළපිය යුතුය.",
"Yes": "ඔව්",
"Yesterday": "ඊයේ",
"You can also select one of these nearby devices:": "ඔබට මෙම ආසන්න උපාංගවලින් එකක් ද තෝරාගත හැක:",
"You can change your choice at any time in the Settings dialog.": "ඔබට සැකසීම් සංවාදයේ ඕනෑම වේලාවක ඔබේ තේරීම වෙනස් කළ හැක.",
"You can read more about the two release channels at the link below.": "පහත සබැඳියෙන් ඔබට නිකුතු නාලිකා දෙක ගැන වැඩිදුර කියවිය හැකිය.",
"You have no ignored devices.": "ඔබට නොසලකා හරින ලද උපාංග නොමැත.",
"You have no ignored folders.": "ඔබට නොසලකා හරින ලද ෆෝල්ඩර නොමැත.",
"You have unsaved changes. Do you really want to discard them?": "ඔබට නොසුරකින ලද වෙනස්කම් ඇත. ඔබට ඇත්තටම ඒවා ඉවත දැමීමට අවශ්‍යද?",
"You must keep at least one version.": "ඔබ අවම වශයෙන් එක් අනුවාදයක් තබා ගත යුතුය.",
"You can also copy and paste the text into a new message manually.": "ඔබට අතින් නව පණිවිඩයකට පෙළ පිටපත් කර ඇලවීමට හැකිය.",
"You can also select one of these nearby devices:": "මෙම ආසන්න උපාංග වලින් එකක් ද තේරීමට හැකිය:",
"You can change your choice at any time in the Settings dialog.": "සැකසුම් තුළ ඕනෑම විටෙක ඔබගේ තේරීම වෙනස් කිරීමට හැකිය.",
"You can read more about the two release channels at the link below.": "පහත සබැඳියෙන් නිකුතු නාලිකා දෙක ගැන තවත් කියවීමට හැකිය.",
"You have no ignored devices.": "නොසලකා හරින ලද උපාංග නැත.",
"You have no ignored folders.": "නොසලකන බහාලුම් නැත.",
"You have unsaved changes. Do you really want to discard them?": "ඔබ සතුව නොසුරැකි වෙනස්කම් ඇත. ඒවා ඉවතලීමට වුවමනාද?",
"You must keep at least one version.": "අවම වශයෙන් එක් අනුවාදයක් තබා ගත යුතුය.",
"You should never add or change anything locally in a \"{%receiveEncrypted%}\" folder.": "ඔබ කිසිවිටෙක \"{{receiveEncrypted}}\" ෆෝල්ඩරයකට දේශීයව කිසිවක් එකතු කිරීම හෝ වෙනස් කිරීම නොකළ යුතුය.",
"days": "දින",
"Your SMS app should open to let you choose the recipient and send it from your own number.": "ලබන්නා තේරීමට සහ එය ඔබගේම අංකයෙන් යැවීමට කෙටි පණිවිඩ යෙදුම විවෘත විය යුතුය.",
"Your email app should open to let you choose the recipient and send it from your own address.": "ලබන්නා තේරීමට සහ එය ඔබගේම ලිපිනයෙන් යැවීමට වි-තැපැල් යෙදුම විවෘත විය යුතුය.",
"days": "දවස්",
"deleted": "මකා ඇත",
"deny": "ප්‍රතිෂේධනය",
"directories": "නාමාවලි",
"file": "ගොනුව",
"files": "ගොනු",
"full documentation": "සම්පූර්ණ ලියකියවිලි",
"items": "අයිතම",
"folder": "බහාලුම",
"full documentation": "පූර්ණ ප්‍රලේඛනය",
"items": "අථක",
"modified": "සංශෝධිතයි",
"permit": "අවසරය",
"seconds": "තත්පර",
"theme-name-black": "කු",
"theme-name-black": "කු",
"theme-name-dark": "අඳුරු",
"theme-name-default": "පෙරනිමි",
"theme-name-light": "ආලෝකය",
"theme-name-default": "පෙරනිමි",
"theme-name-light": "දීප්ත",
"{%device%} wants to share folder \"{%folder%}\".": "{{device}} ට \"{{folder}}\" ෆෝල්ඩරය බෙදා ගැනීමට අවශ්‍යයි.",
"{%device%} wants to share folder \"{%folderlabel%}\" ({%folder%}).": "{{device}} ට \"{{folderlabel}}\" ({{folder}}) ෆෝල්ඩරය බෙදා ගැනීමට අවශ්‍යයි.",
"{%reintroducer%} might reintroduce this device.": "{{reintroducer}} මෙම උපාංගය නැවත හඳුන්වා දිය හැක."

View File

@@ -448,7 +448,6 @@
"Today": "Dnes",
"Trash Can": "Kôš",
"Trash Can File Versioning": "Verzie súborov v koši",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX povolenia",
"Unavailable": "Nedostupné",
@@ -474,6 +473,8 @@
"Use notifications from the filesystem to detect changed items.": "Na zistenie zmenených položiek použite upozornenia zo súborového systému.",
"User Home": "Domovský adresár",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "Používateľské meno/heslo nebolo nastavené pre overenie GUI. Zvážte jeho nastavenie.",
"Using a QUIC connection over LAN": "Používam pripojenie QUIC over LAN",
"Using a QUIC connection over WAN": "Používam pripojenie QUIC over WAN",
"Using a direct TCP connection over LAN": "Použitie priameho pripojenia TCP cez LAN",
"Using a direct TCP connection over WAN": "Použitie priameho pripojenia TCP cez WAN",
"Version": "Verzia",

View File

@@ -395,7 +395,6 @@
"Today": "Danes",
"Trash Can": "Koš",
"Trash Can File Versioning": "Beleženje različic datotek s Smetnjakom",
"Twitter": "Twitter",
"Type": "Vrsta",
"UNIX Permissions": "UNIX dovoljenja",
"Unavailable": "Ni na voljo",

View File

@@ -64,7 +64,6 @@
"Scanning": "Duke skanuar",
"Select a version": "Zgjidh një version",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing është program falas dhe Open Source liçensuar si MPL v2.0.",
"Twitter": "Twitter",
"Type": "Lloji",
"Yes": "Po",
"days": "ditë",

View File

@@ -448,7 +448,6 @@
"Today": "Idag",
"Trash Can": "Papperskorgen",
"Trash Can File Versioning": "Papperskorgs filversionshantering",
"Twitter": "Twitter",
"Type": "Typ",
"UNIX Permissions": "UNIX-behörigheter",
"Unavailable": "Otillgänglig",

View File

@@ -256,7 +256,7 @@
"No rules set": "Kural ayarlanmadı",
"No upgrades": "Yükseltmeler yok",
"Not shared": "Paylaşılmamış",
"Notice": "Uyarı",
"Notice": "Bildirim",
"OK": "TAMAM",
"Off": "Kapalı",
"Oldest First": "Önce En Eski Olan",
@@ -448,7 +448,6 @@
"Today": "Bugün",
"Trash Can": "Çöp Kutusu",
"Trash Can File Versioning": "Çöp Kutusu Dosyası Sürümlendirme",
"Twitter": "Twitter",
"Type": "Tür",
"UNIX Permissions": "Unix İzinleri",
"Unavailable": "Kullanılamaz",

View File

@@ -439,7 +439,6 @@
"Today": "Сьогодні",
"Trash Can": "Смітник",
"Trash Can File Versioning": "Версіювання файлів у кошику",
"Twitter": "Twitter",
"Type": "Тип",
"UNIX Permissions": "UNIX дозволи",
"Unavailable": "Недоступно",

View File

@@ -205,7 +205,6 @@
"This can easily give hackers access to read and change any files on your computer.": "Th.tác này có thể khiến tin tặc dễ dàng tr.cập để đọc và th.đổi bất kỳ t.tin nào trên máy của bạn.",
"This is a major version upgrade.": "Đây là bản nâng cấp quan trọng.",
"Trash Can File Versioning": "Kiểu thùng rác",
"Twitter": "Twitter",
"Unknown": "Không biết",
"Unshared": "Chưa chia sẻ",
"Up to Date": "Đã đồng bộ",

View File

@@ -15,7 +15,7 @@
"Add filter entry": "添加过滤器条目",
"Add ignore patterns": "增加忽略模式",
"Add new folder?": "添加新文件夹?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "另外,完整重新扫描的间隔将增大(时间 60以新的默认 1 小时为例)。你也可以在选择“否”后手动配置每个文件夹的时间。",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "另外,完整重新扫描的间隔将增大(乘以 60例如默认值将变为 1 小时)。你也可以在选择“否”后手动配置每个文件夹的时间。",
"Address": "地址",
"Addresses": "地址列表",
"Advanced": "高级",
@@ -88,7 +88,7 @@
"Delete Unexpected Items": "删除特殊项目",
"Deleted {%file%}": "{{file}} 已删除",
"Deselect All": "取消全选",
"Deselect devices to stop sharing this folder with.": "反选设备以停止共享此文件夹。",
"Deselect devices to stop sharing this folder with.": "取消选择设备以停止共享此文件夹。",
"Deselect folders to stop sharing with this device.": "取消选择文件夹以停止与此设备共享。",
"Device": "设备",
"Device \"{%name%}\" ({%device%} at {%address%}) wants to connect. Add new device?": "设备 \"{{name}}\"(位于 {{address}} 的 {{device}})请求连接。是否添加新设备?",
@@ -113,12 +113,12 @@
"Discovered": "已发现",
"Discovery": "设备发现",
"Discovery Failures": "设备发现错误",
"Discovery Status": "探测状态",
"Discovery Status": "设备发现状态",
"Dismiss": "忽略一次",
"Do not add it to the ignore list, so this notification may recur.": "不要将其加入忽视列表,因此这条通知可能会再度出现。",
"Do not restore": "不要恢复",
"Do not restore all": "不要全部恢复",
"Do you want to enable watching for changes for all your folders?": "您想要启用监视您所有文件夹的更改吗?",
"Do you want to enable watching for changes for all your folders?": "您想要启用监视您所有文件夹的更改吗?",
"Documentation": "文档",
"Download Rate": "下载速度",
"Downloaded": "已下载",
@@ -238,7 +238,7 @@
"Maximum single entry size": "最大单一条目大小",
"Maximum total size": "最大总大小",
"Metadata Only": "仅元数据",
"Minimum Free Disk Space": "最低可用磁盘空间",
"Minimum Free Disk Space": "最低空闲磁盘空间",
"Mod. Device": "修改设备",
"Mod. Time": "修改时间",
"More than a month ago": "一个月前",
@@ -279,7 +279,7 @@
"Pending changes": "待定的更改",
"Periodic scanning at given interval and disabled watching for changes": "正以给定的间隔定期扫描并已禁用更改监视",
"Periodic scanning at given interval and enabled watching for changes": "正以给定的间隔定期扫描并已启用更改监视",
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "正以给定的间隔定期扫描但设置更改监视失败,正在以每 1m 一次重试:",
"Periodic scanning at given interval and failed setting up watching for changes, retrying every 1m:": "正以给定的间隔定期扫描但设置更改监视失败,正在以每分钟一次重试:",
"Permanently add it to the ignore list, suppressing further notifications.": "将其永久添加到忽略列表中,禁止进一步通知。",
"Please consult the release notes before performing a major upgrade.": "请在进行重大更新前查看发布说明。",
"Please set a GUI Authentication User and Password in the Settings dialog.": "请在设置对话框中设置 GUI 验证用户及其密码。",
@@ -387,7 +387,7 @@
"Syncthing includes the following software or portions thereof:": "Syncthing 使用了下列软件或其中的一部分:",
"Syncthing is Free and Open Source Software licensed as MPL v2.0.": "Syncthing 是个以 MPL v2.0 授权的免费开源软件。",
"Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.": "Syncthing 是一个持续的文件同步程序。它在两台或更多的计算机之间实时同步文件,安全地保护它们不被窥视。你的数据是私有的,你有权选择它被储存在哪里,是否与一些第三方共享,以及如何在互联网上传输它。",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "同步正在监听以下网络地址,以获取来自其他设备的连接尝试:",
"Syncthing is listening on the following network addresses for connection attempts from other devices:": "Syncthing正在监听以下网络地址,以获取来自其他设备的连接尝试:",
"Syncthing is not listening for connection attempts from other devices on any address. Only outgoing connections from this device may work.": "Syncthing 不会在任何地址上侦听来自其他设备的连接尝试。只有来自该设备的传出连接可能有效。",
"Syncthing is restarting.": "Syncthing 正在重启。",
"Syncthing is upgrading.": "Syncthing 正在升级。",
@@ -448,7 +448,6 @@
"Today": "今天",
"Trash Can": "回收站",
"Trash Can File Versioning": "回收站式版本控制",
"Twitter": "推特",
"Type": "类型",
"UNIX Permissions": "UNIX权限",
"Unavailable": "无效",

View File

@@ -434,7 +434,6 @@
"Today": "今天",
"Trash Can": "回收站",
"Trash Can File Versioning": "回收站式版本控制",
"Twitter": "Twitter",
"Type": "類型",
"UNIX Permissions": "UNIX權限",
"Unavailable": "無效",

View File

@@ -11,6 +11,7 @@
"Add Folder": "添加資料夾",
"Add Remote Device": "新增遠端裝置",
"Add devices from the introducer to our device list, for mutually shared folders.": "對於共享的資料夾,匯入引入者的裝置清單。",
"Add ignore patterns": "新增忽略模式",
"Add new folder?": "新增資料夾?",
"Additionally the full rescan interval will be increased (times 60, i.e. new default of 1h). You can also configure it manually for every folder later after choosing No.": "另外,完整地重新掃瞄的間隔將增大(時間 60例如新的預設值為 1 小時)。您也可以在選擇「否」後,手動配置每個資料夾的時間間隔。",
"Address": "位址",
@@ -18,6 +19,7 @@
"Advanced": "進階",
"Advanced Configuration": "進階配置",
"All Data": "全部資料",
"All Time": "所有時間",
"All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.": "所有與此裝置分享的資料夾必須使用密碼保護起來,如此一來,沒有提供密碼將無法閱覽資料。",
"Allow Anonymous Usage Reporting?": "允許回報匿名數據?",
"Allowed Networks": "允許的網路",
@@ -252,6 +254,9 @@
"Preparing to Sync": "正在準備同步",
"Preview": "預覽",
"Preview Usage Report": "預覽數據報告",
"QUIC LAN": "QUIC 區域網路",
"QUIC WAN": "QUIC 廣域網路",
"QUIC connections are in most cases considered suboptimal": "QUIC 連線在大多數情況下被認為是次優的",
"Quick guide to supported patterns": "可支援樣式的快速指南",
"Random": "隨機",
"Receive Encrypted": "接收已加密",
@@ -259,6 +264,8 @@
"Received data is already encrypted": "接收到的數據已經加密",
"Recent Changes": "最近變動",
"Reduced by ignore patterns": "已由忽略樣式縮減",
"Relay LAN": "區域網路中繼",
"Relay WAN": "廣域網路中繼",
"Release Notes": "版本資訊",
"Release candidates contain the latest features and fixes. They are similar to the traditional bi-weekly Syncthing releases.": "候選發行版包含最新的功能及修補。與傳統 Syncthing 雙週發行版相似。",
"Remote Devices": "遠端裝置",
@@ -374,6 +381,7 @@
"The path cannot be blank.": "路徑不能空白。",
"The rate limit must be a non-negative number (0: no limit)": "限制速率必須為非負的數字 (0: 不設限制)",
"The remote device has not accepted sharing this folder.": "遠端裝置尚未接受分享這個資料夾。",
"The remote device has paused this folder.": "遠端裝置已暫停同步此資料夾。",
"The rescan interval must be a non-negative number of seconds.": "重新掃描間隔必須為一個非負數的秒數。",
"There are no devices to share this folder with.": "沒有裝置可以共享此資料夾。",
"There are no folders to share with this device.": "沒有資料夾分享給此裝置。",
@@ -385,7 +393,6 @@
"Time": "時間",
"Time the item was last modified": "前次修改時間",
"Trash Can File Versioning": "垃圾筒式檔案版本控制",
"Twitter": "Twitter",
"Type": "類型",
"UNIX Permissions": "UNIX 權限",
"Unavailable": "無法使用",
@@ -410,6 +417,8 @@
"Use HTTPS for GUI": "為 GUI 使用 HTTPS",
"Use notifications from the filesystem to detect changed items.": "使用來自檔案系統的通知以檢測變動的項目。",
"Username/Password has not been set for the GUI authentication. Please consider setting it up.": "尚未設定GUI 驗證的使用者名稱/密碼。請考慮進行設定。",
"Using a QUIC connection over LAN": "通過區域網路使用 QUIC 連線",
"Using a QUIC connection over WAN": "通過廣域網路使用 QUIC 連線",
"Using a direct TCP connection over LAN": "通過區域網路使用直接 TCP 連線",
"Using a direct TCP connection over WAN": "通過廣域網路使用直接 TCP 連線",
"Version": "版本",

View File

@@ -1 +1 @@
var langPrettyprint = {"bg":"Bulgarian","ca":"Catalan","ca@valencia":"Valencian","cs":"Czech","da":"Danish","de":"German","en":"English","en-GB":"English (United Kingdom)","es":"Spanish","eu":"Basque","fr":"French","fy":"Frisian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean","lt":"Lithuanian","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian","ru":"Russian","si":"Sinhala","sk":"Slovak","sl":"Slovenian","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (Simplified)","zh-HK":"Chinese (Traditional, Hong Kong)","zh-TW":"Chinese (Traditional)"}
var langPrettyprint = {"bg":"Bulgarian","ca":"Catalan","ca@valencia":"Valencian","cs":"Czech","da":"Danish","de":"German","en":"English","en-GB":"English (United Kingdom)","es":"Spanish","eu":"Basque","fr":"French","fy":"Frisian","hu":"Hungarian","id":"Indonesian","it":"Italian","ja":"Japanese","ko-KR":"Korean","lt":"Lithuanian","nl":"Dutch","pl":"Polish","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","ro-RO":"Romanian","ru":"Russian","sk":"Slovak","sl":"Slovenian","sv":"Swedish","tr":"Turkish","uk":"Ukrainian","zh-CN":"Chinese (Simplified)","zh-HK":"Chinese (Traditional, Hong Kong)","zh-TW":"Chinese (Traditional)"}

View File

@@ -1 +1 @@
var validLangs = ["bg","ca","ca@valencia","cs","da","de","en","en-GB","es","eu","fr","fy","hu","id","it","ja","ko-KR","lt","nl","pl","pt-BR","pt-PT","ro-RO","ru","si","sk","sl","sv","tr","uk","zh-CN","zh-HK","zh-TW"]
var validLangs = ["bg","ca","ca@valencia","cs","da","de","en","en-GB","es","eu","fr","fy","hu","id","it","ja","ko-KR","lt","nl","pl","pt-BR","pt-PT","ro-RO","ru","sk","sl","sv","tr","uk","zh-CN","zh-HK","zh-TW"]

View File

@@ -12,7 +12,8 @@
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="shortcut icon" href="assets/img/favicon-{{syncthingStatus()}}.png"/>
<link rel="shortcut icon" href="assets/img/favicon-default.png" type="image/x-icon"/>
<link rel="shortcut icon" href="assets/img/favicon-{{syncthingStatus()}}.png" type="image/x-icon"/>
<link rel="mask-icon" href="assets/img/safari-pinned-tab.svg" color="#0882c8"/>
<title ng-bind="thisDeviceName() + ' | Syncthing'"></title>
@@ -554,8 +555,8 @@
<tr>
<th><span class="fas fa-fw fa-share-alt"></span>&nbsp;<span translate>Shared With</span></th>
<td class="text-right no-overflow-ellipse word-break-all">
<span ng-repeat="device in folder.devices">
<span ng-if="device.deviceID != myID" ng-switch="completion[device.deviceID][folder.id].remoteState">
<span ng-repeat="device in otherDevices(folder.devices)">
<span ng-switch="completion[device.deviceID][folder.id].remoteState">
<span ng-switch-when="notSharing" data-original-title="{{'The remote device has not accepted sharing this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>1</sup><span ng-if="!$last">,</span></span>
<span ng-switch-when="paused" data-original-title="{{'The remote device has paused this folder.' | translate}}" tooltip>{{deviceName(devices[device.deviceID])}}<sup>2</sup><span ng-if="!$last">,</span></span>
<span ng-switch-default>{{deviceName(devices[device.deviceID])}}<span ng-if="!$last">,</span></span>
@@ -962,7 +963,6 @@
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing/releases" target="_blank"><span class="far fa-file-alt"></span>&nbsp;<span translate>Changelog</span></a></li>
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing/issues" target="_blank"><span class="fas fa-bug"></span>&nbsp;<span translate>Bugs</span></a></li>
<li><a class="navbar-link" href="https://github.com/syncthing/syncthing" target="_blank"><span class="fas fa-wrench"></span>&nbsp;<span translate>Source Code</span></a></li>
<li><a class="navbar-link" href="https://twitter.com/syncthing" target="_blank"><span class="fab fa-twitter"></span>&nbsp;<span translate>Twitter</span></a></li>
</ul>
</div>
</nav>
@@ -1021,7 +1021,6 @@
<script type="text/javascript" src="syncthing/core/eventService.js"></script>
<script type="text/javascript" src="syncthing/core/identiconDirective.js"></script>
<script type="text/javascript" src="syncthing/core/languageSelectDirective.js"></script>
<script type="text/javascript" src="syncthing/core/lastErrorComponentFilter.js"></script>
<script type="text/javascript" src="syncthing/core/localeService.js"></script>
<script type="text/javascript" src="syncthing/core/modalDirective.js"></script>
<script type="text/javascript" src="syncthing/core/metricFilter.js"></script>

View File

@@ -26,7 +26,7 @@
<h4 class="text-center" translate>The Syncthing Authors</h4>
<div class="row">
<div class="col-md-12" id="contributor-list">
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Tomasz Wilczyński, Wulf Weich, greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Aleksey Vasenev, Alessandro G., Alex Lindeman, Alex Xu, Alexandre Alves, Aman Gupta, Andreas Sommer, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Devon G. Redekopp, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eng Zer Jun, Eric Lesiuta, Eric P, Erik Meitner, Evan Spensley, Federico Castagnini, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jauder Ho, Jaya Chithra, Jaya Kumar, Jeffery To, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, K.B.Dharun Krishna, Kalle Laine, Karol Różycki, Kebin Liu, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, LSmithx2, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, Vladimir Rusinov, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, cui fliter, derekriemer, desbma, entity0xfe, georgespatton, ghjklw, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, luzpaz, marco-m, mclang, mv1005, otbutz, overkill, perewa, red_led, rubenbe, sec65, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙, 落心
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Tomasz Wilczyński, Wulf Weich, greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Aleksey Vasenev, Alessandro G., Alex Lindeman, Alex Xu, Alexander Seiler, Alexandre Alves, Aman Gupta, Andreas Sommer, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Kujau, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Darshil Chanpura, David Rimmer, Denis A., Dennis Wilson, Devon G. Redekopp, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Emil Lundberg, Eng Zer Jun, Eric Lesiuta, Eric P, Erik Meitner, Evan Spensley, Federico Castagnini, Felix, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Han Boetes, HansK-p, Harrison Jones, Heiko Zuerker, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jauder Ho, Jaya Chithra, Jaya Kumar, Jeffery To, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Jörg Thalheim, Jędrzej Kula, K.B.Dharun Krishna, Kalle Laine, Karol Różycki, Kebin Liu, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, LSmithx2, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Migelo, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ross Smith II, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Shaarad Dalvi, Simon Mwepu, Sly_tom_cat, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Taylor Khan, Thomas Hipp, Tim Abell, Tim Howes, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, Vladimir Rusinov, Will Rouesnel, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, bt90, chenrui, chucic, cui fliter, derekriemer, desbma, entity0xfe, georgespatton, ghjklw, guangwu, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, luzpaz, marco-m, mclang, mv1005, otbutz, overkill, perewa, red_led, rubenbe, sec65, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙, 落心
</div>
</div>
</div>

View File

@@ -1,12 +0,0 @@
angular.module('syncthing.core')
.filter('lastErrorComponent', function () {
return function (input) {
if (input === undefined)
return "";
var parts = input.split(/:\s*/);
if (!parts || parts.length < 1) {
return input;
}
return parts[parts.length - 1];
};
});

View File

@@ -740,20 +740,12 @@ angular.module('syncthing.core')
}
function pathJoin(base, name) {
base = expandTilde(base);
if (base[base.length - 1] !== $scope.system.pathSeparator) {
return base + $scope.system.pathSeparator + name;
}
return base + name;
}
function expandTilde(path) {
if (path && path.trim().charAt(0) === '~') {
return $scope.system.tilde + path.trim().substring(1);
}
return path;
}
function shouldSetDefaultFolderPath() {
return $scope.config.defaults.folder.path && $scope.folderEditor.folderPath.$pristine && $scope.editingFolderNew();
}
@@ -1709,6 +1701,13 @@ angular.module('syncthing.core')
return $scope.currentDevice._editing == 'new';
}
$scope.editDeviceUntrustedChanged = function () {
if (currentDevice.untrusted) {
currentDevice.introducer = false;
currentDevice.autoAcceptFolders = false;
}
}
$scope.editDeviceExisting = function (deviceCfg) {
$scope.currentDevice = $.extend({}, deviceCfg);
$scope.currentDevice._editing = "existing";
@@ -1893,8 +1892,11 @@ angular.module('syncthing.core')
}
};
$scope.otherDevices = function () {
return $scope.deviceList().filter(function (n) {
$scope.otherDevices = function (devices) {
if (devices === undefined) {
devices = $scope.deviceList();
}
return devices.filter(function (n) {
return n.deviceID !== $scope.myID;
});
};
@@ -1981,7 +1983,7 @@ angular.module('syncthing.core')
if (!newvalue) {
return;
}
$scope.currentFolder.path = expandTilde(newvalue);
$scope.currentFolder.path = newvalue;
$http.get(urlbase + '/system/browse', {
params: { current: newvalue }
}).success(function (data) {
@@ -3049,7 +3051,11 @@ angular.module('syncthing.core')
arch += " Container";
}
return $scope.version.version + ', ' + os + ' (' + arch + ')';
var verStr = $scope.version.version;
if ($scope.version.extra) {
verStr += ' (' + $scope.version.extra + ')';
}
return verStr + ', ' + os + ' (' + arch + ')';
};
$scope.versionBase = function () {

View File

@@ -14,16 +14,16 @@
<input ng-if="editingDeviceNew()" name="deviceID" id="deviceID" class="form-control text-monospace" type="text" ng-model="currentDevice.deviceID" required="" valid-deviceid list="discovery-list" aria-required="true" />
<div ng-if="!editingDeviceNew()" class="well well-sm form-control text-monospace" style="height: auto;" select-on-click>{{currentDevice.deviceID}}</div>
<div id="shareDeviceIdButtons" class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="copyToClipboard($event, currentDevice.deviceID)" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Copy' | translate }}">
<button data-container="body" type="button" class="btn btn-default" ng-click="copyToClipboard($event, currentDevice.deviceID)" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Copy' | translate }}">
<span class="fa fa-lg fa-clone"></span>
</button>
<button type="button" class="btn btn-default" ng-click="shareDeviceIdDialog('email')" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Share by Email' | translate }}">
<button data-container="body" type="button" class="btn btn-default" ng-click="shareDeviceIdDialog('email')" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Share by Email' | translate }}">
<span class="fa fa-lg fa-envelope-o"></span>
</button>
<button type="button" class="btn btn-default" ng-click="shareDeviceIdDialog('sms')" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Share by SMS' | translate }}">
<button data-container="body" type="button" class="btn btn-default" ng-click="shareDeviceIdDialog('sms')" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Share by SMS' | translate }}">
<span class="fa fa-lg fa-comments-o"></span>
</button>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#idqr" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Show QR' | translate }}">
<button data-container="body" type="button" class="btn btn-default" data-toggle="modal" data-target="#idqr" ng-disabled="editingDeviceNew() && !deviceEditor.deviceID.$valid" tooltip data-original-title="{{ 'Show QR' | translate }}">
<span class="fa fa-lg fa-qrcode"></span>
</button>
</div>
@@ -62,9 +62,9 @@
<div class="row">
<div class="col-md-6">
<div class="form-group">
<div class="checkbox">
<div ng-disabled="currentDevice.untrusted" class="checkbox" ng-attr-tooltip="{{currentDevice.untrusted ? null : undefined}}" ng-attr-data-original-title="{{currentDevice.untrusted ? ('Always disabled for untrusted devices' | translate) : undefined}}">
<label>
<input type="checkbox" ng-model="currentDevice.introducer">
<input ng-disabled="currentDevice.untrusted" type="checkbox" ng-model="currentDevice.introducer">
<span translate>Introducer</span>
<p translate class="help-block">Add devices from the introducer to our device list, for mutually shared folders.</p>
</label>
@@ -73,9 +73,9 @@
</div>
<div class="col-md-6">
<div class="form-group">
<div class="checkbox">
<div ng-disabled="currentDevice.untrusted" class="checkbox" ng-attr-tooltip="{{currentDevice.untrusted ? null : undefined}}" ng-attr-data-original-title="{{currentDevice.untrusted ? ('Always disabled for untrusted devices' | translate) : undefined}}">
<label>
<input type="checkbox" ng-model="currentDevice.autoAcceptFolders">
<input ng-disabled="currentDevice.untrusted" type="checkbox" ng-model="currentDevice.autoAcceptFolders">
<span translate>Auto Accept</span>
<p translate class="help-block">Automatically create or share folders that this device advertises at the default path.</p>
</label>
@@ -164,7 +164,7 @@
</div>
<div class="row">
<div class="form-group col-md-6">
<input type="checkbox" id="untrusted" ng-model="currentDevice.untrusted" />
<input type="checkbox" id="untrusted" ng-model="currentDevice.untrusted" ng-change="editDeviceUntrustedChanged()"/>
<label for="untrusted" translate>Untrusted</label>
<p translate class="help-block">All folders shared with this device must be protected by a password, such that all sent data is unreadable without the given password.</p>
</div>

View File

@@ -324,7 +324,7 @@
</div>
</div>
<div class="row" ng-if="currentFolder.syncXattrs">
<div class="row" ng-if="currentFolder.syncXattrs || currentFolder.sendXattrs">
<div class="col-md-12">
<p>
<label translate>Extended Attributes Filter</label>

View File

@@ -7,7 +7,7 @@
<table class="table table-striped table-dynamic">
<tr dir-paginate="e in failed.errors | itemsPerPage: failed.perpage" current-page="failed.page" total-items="model[failed.folder].pullErrors" pagination-id="failed">
<td>{{e.path}}</td>
<td><abbr tooltip data-original-title="{{e.error}}">{{e.error | lastErrorComponent}}</abbr></td>
<td>{{e.error}}</td>
</tr>
</table>
<dir-pagination-controls on-page-change="refreshFailed(newPageNumber, failed.perpage)" pagination-id="failed"></dir-pagination-controls>

View File

@@ -713,6 +713,7 @@ func (*service) getSystemVersion(w http.ResponseWriter, _ *http.Request) {
"version": build.Version,
"codename": build.Codename,
"longVersion": build.LongVersion,
"extra": build.Extra,
"os": runtime.GOOS,
"arch": runtime.GOARCH,
"isBeta": build.IsBeta,
@@ -1865,13 +1866,7 @@ func (v jsonVersionVector) MarshalJSON() ([]byte, error) {
}
func dirNames(dir string) []string {
fd, err := os.Open(dir)
if err != nil {
return nil
}
defer fd.Close()
fis, err := fd.Readdir(-1)
fis, err := os.ReadDir(dir)
if err != nil {
return nil
}

View File

@@ -39,7 +39,7 @@ func emitLoginAttempt(success bool, username, address string, evLogger events.Lo
func basicAuthAndSessionMiddleware(cookieName string, guiCfg config.GUIConfiguration, ldapCfg config.LDAPConfiguration, next http.Handler, evLogger events.Logger) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if guiCfg.IsValidAPIKey(r.Header.Get("X-API-Key")) {
if hasValidAPIKeyHeader(r, guiCfg) {
next.ServeHTTP(w, r)
return
}
@@ -161,7 +161,7 @@ func authLDAP(username string, password string, cfg config.LDAPConfiguration) bo
defer connection.Close()
err = connection.Bind(fmt.Sprintf(cfg.BindDN, username), password)
err = connection.Bind(ldapTemplateBindDN(cfg.BindDN, username), password)
if err != nil {
l.Warnln("LDAP Bind:", err)
return false
@@ -199,6 +199,15 @@ func authLDAP(username string, password string, cfg config.LDAPConfiguration) bo
return true
}
func ldapTemplateBindDN(bindDN string, username string) string {
// Check if formatting directives are included in the ldapTemplateBindDN - if so add username.
// (%%s is a literal %s - unlikely for LDAP, but easy to handle here).
if strings.Count(bindDN, "%s") != strings.Count(bindDN, "%%s") {
bindDN = fmt.Sprintf(bindDN, username)
}
return bindDN
}
// Convert an ISO-8859-1 encoded byte string to UTF-8. Works by the
// principle that ISO-8859-1 bytes are equivalent to unicode code points,
// that a rune slice is a list of code points, and that stringifying a slice

Some files were not shown because too many files have changed in this diff Show More