mirror of
https://github.com/bilde2910/Hauk.git
synced 2026-01-23 02:24:09 +00:00
Compare commits
54 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b3d8dcbec | ||
|
|
0bbea4fe64 | ||
|
|
63f901b17a | ||
|
|
7dea87aef9 | ||
|
|
50f93c1246 | ||
|
|
2a7e9ac0b0 | ||
|
|
26d8a2e13a | ||
|
|
62cac722d3 | ||
|
|
5376f938d4 | ||
|
|
52d48fa319 | ||
|
|
1b6f6217f3 | ||
|
|
f5fb57c56e | ||
|
|
085ca4ee97 | ||
|
|
56e216375c | ||
|
|
ec223ba4e6 | ||
|
|
a0287e2c13 | ||
|
|
02ccb4fcd2 | ||
|
|
55d2f8b8fd | ||
|
|
26bd32504d | ||
|
|
08a5050b7c | ||
|
|
9d637c5b58 | ||
|
|
b95f517ada | ||
|
|
ce6b064f48 | ||
|
|
eb04608ca5 | ||
|
|
5f671667cf | ||
|
|
1e5217b1d7 | ||
|
|
bc2e9fdcce | ||
|
|
8ada63b85e | ||
|
|
899e525844 | ||
|
|
1a241900bb | ||
|
|
f6220ac07c | ||
|
|
a56ddc274e | ||
|
|
aba2be5445 | ||
|
|
cbc1278587 | ||
|
|
3dd594df55 | ||
|
|
0b6defc382 | ||
|
|
3d2c4321b7 | ||
|
|
6d7dcc3bfe | ||
|
|
9dcf6a536f | ||
|
|
f3b94ce567 | ||
|
|
148d64b0bc | ||
|
|
b443bb9689 | ||
|
|
bbca5862f3 | ||
|
|
5556018609 | ||
|
|
3ab6f72879 | ||
|
|
ccf8503562 | ||
|
|
396302a197 | ||
|
|
076dc9ac84 | ||
|
|
a7e241ade1 | ||
|
|
3235f789f7 | ||
|
|
a9379ff24b | ||
|
|
6bea156d39 | ||
|
|
f44a7eb36c | ||
|
|
b1761913a2 |
54 changed files with 553 additions and 103 deletions
53
.github/workflows/docker-image.yml
vendored
Normal file
53
.github/workflows/docker-image.yml
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
name: Build Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
# branches:
|
||||
# - 'master'
|
||||
tags:
|
||||
- 'v*'
|
||||
pull_request:
|
||||
branches:
|
||||
- 'master'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- # Check out repository
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- # Set up QEMU for multiarch support
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- # Set up Docker BuildX for Docker image building
|
||||
name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- # Set proper tags
|
||||
name: Docker metadata
|
||||
id: docker_meta # you'll use this in the next step
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: bilde2910/hauk
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=semver,pattern=v{{version}}
|
||||
type=semver,pattern=stable-{{major}}.x
|
||||
- # Log in to Docker Hub
|
||||
name: Login to Docker Hub
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- # Build and push
|
||||
name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.docker_meta.outputs.tags }}
|
||||
labels: ${{ steps.docker_meta.outputs.labels }}
|
||||
|
|
@ -4,7 +4,7 @@ COPY frontend/ /var/www/html/
|
|||
COPY docker/start.sh .
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y memcached libmemcached-dev zlib1g-dev libldap2-dev && \
|
||||
apt-get install -y memcached libmemcached-dev zlib1g-dev libldap2-dev libssl-dev && \
|
||||
pecl install memcached && \
|
||||
docker-php-ext-enable memcached && \
|
||||
docker-php-ext-configure ldap --with-libdir=lib/*-linux-gnu*/ && \
|
||||
|
|
|
|||
22
README.md
22
README.md
|
|
@ -36,7 +36,8 @@ phone, and you're good to go!
|
|||
to install Hauk in, for example `/var/www/html`. Follow the instructions
|
||||
given by the install script. Make sure to set a secure hashed password and
|
||||
edit your site's domain in the configuration file after installation.
|
||||
3. Start the web server and make sure Memcached or Redis is running.
|
||||
3. Start the web server and make sure Memcached or Redis is running and
|
||||
[properly configured and firewalled](https://github.com/bilde2910/Hauk/wiki/FAQ#how-do-i-securely-configure-memcachedredis).
|
||||
4. Install the companion Android app (from your favourite store linked above)
|
||||
on your phone and enter your server's settings.
|
||||
|
||||
|
|
@ -50,7 +51,8 @@ files manually.
|
|||
in your web root, for example `/var/www/html`.
|
||||
3. Modify `include/config.php` to your liking. Make sure to set a secure hashed
|
||||
password and edit your site's domain in this file.
|
||||
4. Start the web server and make sure Memcached or Redis is running.
|
||||
4. Start the web server and make sure Memcached or Redis is running and
|
||||
[properly configured and firewalled](https://github.com/bilde2910/Hauk/wiki/FAQ#how-do-i-securely-configure-memcachedredis).
|
||||
5. Install the companion Android app (from your favourite store linked above)
|
||||
on your phone and enter your server's settings.
|
||||
|
||||
|
|
@ -126,6 +128,22 @@ server {
|
|||
}
|
||||
```
|
||||
|
||||
## Upgrading to newer versions
|
||||
|
||||
Hauk is versioned according to [Semantic Versioning 2.0.0](https://semver.org/). Any update that is **not a major update** is guaranteed to be without breaking changes, and you can keep the same configuration file for the updated release.
|
||||
|
||||
- Major updates add breaking changes that either require manual intervention, or breaks backward compatibility. Update instructions for major versions will be listed in the release notes, as well as either this README or in the wiki. To date there have been no major updates.
|
||||
- Minor updates add functionality, but does not break backward compatibility. You can still use an older client on a newer server, or a newer client on an older server, though some functionality may be missing. This will be dynamically detected by the client and server, which could e.g. lead to some UI elements being disabled in the app, or a notification made if a user tries to use new functionality that the other endpoint does not support.
|
||||
- Patch updates are primarily bugfixes.
|
||||
|
||||
Aside from certain major changes, you can keep your configuration file. New options may have been added to the config, but these will have sane defaults applied automatically. If you wish to change any new options, you can either reconfigure Hauk from the new config.php template, or copy and paste the relevant options from the new template to your existing file and change the appropriate values.
|
||||
|
||||
Installations done using either the installer (`install.sh`) or via manual file copy can be upgraded simply by pulling the latest version of this repository and running the installer again, or overwriting the installation with the new files.
|
||||
|
||||
Installations done via distribution-specific packages will be updated to the latest version by your package manager.
|
||||
|
||||
Docker installations will be updated whenever you pull the image. If you're using Docker, you can reserve yourself from receiving major updates (which may contain breaking changes) by using the `stable-*` tag instead of `latest`. If you use a specific versioned tag, your installation will be locked at that specific version and you will not receive feature updates or bugfixes unless you manually change the tag and pull.
|
||||
|
||||
## Demo server
|
||||
|
||||
If you'd like to see what Hauk can do, download the app and insert connection details for the demo server:
|
||||
|
|
|
|||
6
android/.idea/gradle.xml
generated
6
android/.idea/gradle.xml
generated
|
|
@ -4,17 +4,17 @@
|
|||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="delegatedBuild" value="false" />
|
||||
<option name="testRunner" value="PLATFORM" />
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="/usr/share/java/gradle" />
|
||||
<option name="gradleJvm" value="jbr-17" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveModulePerSourceSet" value="false" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
|
|
|||
25
android/.idea/jarRepositories.xml
generated
Normal file
25
android/.idea/jarRepositories.xml
generated
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="BintrayJCenter" />
|
||||
<option name="name" value="BintrayJCenter" />
|
||||
<option name="url" value="https://jcenter.bintray.com/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="Google" />
|
||||
<option name="name" value="Google" />
|
||||
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
||||
10
android/.idea/misc.xml
generated
10
android/.idea/misc.xml
generated
|
|
@ -5,7 +5,7 @@
|
|||
<option name="myDefaultNotNull" value="android.annotation.NonNull" />
|
||||
<option name="myNullables">
|
||||
<value>
|
||||
<list size="12">
|
||||
<list size="14">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
|
||||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
|
||||
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
|
||||
|
|
@ -18,12 +18,14 @@
|
|||
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
|
||||
<item index="10" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
|
||||
<item index="11" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
|
||||
<item index="12" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
|
||||
<item index="13" class="java.lang.String" itemvalue="org.jspecify.nullness.Nullable" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myNotNulls">
|
||||
<value>
|
||||
<list size="11">
|
||||
<list size="13">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
|
||||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
|
||||
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
|
||||
|
|
@ -35,11 +37,13 @@
|
|||
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
|
||||
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
|
||||
<item index="10" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
|
||||
<item index="11" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
|
||||
<item index="12" class="java.lang.String" itemvalue="org.jspecify.nullness.NonNull" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
|
|
|||
12
android/.idea/runConfigurations.xml
generated
12
android/.idea/runConfigurations.xml
generated
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -1,14 +1,13 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion "29.0.2"
|
||||
compileSdkVersion 33
|
||||
defaultConfig {
|
||||
applicationId "info.varden.hauk"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 29
|
||||
versionCode 13
|
||||
versionName "1.6.1"
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 33
|
||||
versionCode 14
|
||||
versionName "1.6.2"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
buildTypes {
|
||||
|
|
@ -17,14 +16,15 @@ android {
|
|||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
namespace 'info.varden.hauk'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.preference:preference:1.1.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.2.0'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.preference:preference:1.2.1'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test:runner:1.5.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
package="info.varden.hauk">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
|
|
@ -30,7 +31,9 @@
|
|||
android:name=".ui.MainActivity"
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/HomeTheme">
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:theme="@style/HomeTheme"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public enum Constants {
|
|||
public static final Preference<Boolean> PREF_ALLOW_ADOPTION = new Preference.Boolean("allowAdoption", true);
|
||||
public static final Preference<NightModeStyle> PREF_NIGHT_MODE = new Preference.Enum<>("nightMode", NightModeStyle.FOLLOW_SYSTEM);
|
||||
public static final Preference<Boolean> PREF_CONFIRM_STOP = new Preference.Boolean("confirmStop", true);
|
||||
public static final Preference<Boolean> PREF_HIDE_LOGO = new Preference.Boolean("hideLogo", false);
|
||||
|
||||
@Deprecated // Use PREF_SERVER_ENCRYPTED instead
|
||||
public static final Preference<String> PREF_SERVER = new Preference.String("server", "");
|
||||
|
|
|
|||
|
|
@ -56,6 +56,6 @@ final class Receiver<T> {
|
|||
// the intent.
|
||||
intent.putExtra(Constants.EXTRA_BROADCAST_RECEIVER_REGISTRY_INDEX, ReceiverDataRegistry.register(this.data));
|
||||
|
||||
return PendingIntent.getBroadcast(this.ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
return PendingIntent.getBroadcast(this.ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,6 @@ final class ReopenIntent {
|
|||
PendingIntent toPending() {
|
||||
Intent intent = new Intent(this.ctx, this.activity);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
return PendingIntent.getActivity(this.ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
return PendingIntent.getActivity(this.ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -163,6 +163,15 @@ public final class MainActivity extends AppCompatActivity {
|
|||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
// Set app logo visibility.
|
||||
PreferenceManager prefs = new PreferenceManager(this);
|
||||
findViewById(R.id.imgLogo).setVisibility(prefs.get(Constants.PREF_HIDE_LOGO) ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* On-tap handler for the "start sharing" and "stop sharing" button.
|
||||
*/
|
||||
|
|
@ -332,6 +341,8 @@ public final class MainActivity extends AppCompatActivity {
|
|||
|
||||
// Set night mode preference.
|
||||
AppCompatDelegate.setDefaultNightMode(prefs.get(Constants.PREF_NIGHT_MODE).resolve());
|
||||
// Set app logo visibility.
|
||||
findViewById(R.id.imgLogo).setVisibility(prefs.get(Constants.PREF_HIDE_LOGO) ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
10
android/app/src/main/res/drawable/ic_image.xml
Normal file
10
android/app/src/main/res/drawable/ic_image.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="?attr/colorControlNormal"
|
||||
android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
|
||||
</vector>
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
<!-- Logo displayed at the top of the activity. -->
|
||||
<ImageView
|
||||
android:id="@+id/imgLogo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="143dp"
|
||||
android:contentDescription="@string/img_alt_logo"
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:maxWidth="110dp"
|
||||
android:text="@string/label_allow_adopt" />
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
|||
|
|
@ -35,4 +35,34 @@
|
|||
<string name="btn_link">Crear un nuevo link de seguimiento</string>
|
||||
<string name="btn_stop">Parar de compartir [%s]</string>
|
||||
<string name="btn_start">Empezar a compartir</string>
|
||||
<string name="err_invalid_duration">La duración configurada no es válida. Elija una duración diferente.</string>
|
||||
<string name="err_server_not_configured">Aún no has configurado un backend. Ingresa los detalles de tu servidor backend en la configuración y vuelva a intentarlo.</string>
|
||||
<string name="err_location_disabled">Los servicios de ubicación están desactivados. Habilite los servicios de ubicación de alta precisión para compartir su ubicación.</string>
|
||||
<string name="err_missing_perms">Se requiere permisos de ubicación para usar esta aplicación.</string>
|
||||
<string name="err_malformed_url">La URL del servidor no es válida.</string>
|
||||
<string name="err_client">Ajustes erroneos</string>
|
||||
<string name="progress_new_link_body">Creando nuevo enlace compartido…</string>
|
||||
<string name="progress_new_link_title">Creando enlace</string>
|
||||
<string name="progress_adopt_body">Aprobando %s…</string>
|
||||
<string name="progress_adopt_title">Aprobando</string>
|
||||
<string name="progress_resolving_proxy">Resolviendo nombre del proxy…</string>
|
||||
<string name="progress_connect_body">Conectado con Hauk…</string>
|
||||
<string name="progress_connect_title">Conectando</string>
|
||||
<string name="notify_body">Hauk está compartiendo tu localización con %s</string>
|
||||
<string name="action_stop">Dejar de compartir</string>
|
||||
<string name="action_copied">Enlace copiado de Hauk</string>
|
||||
<string name="action_copy">Copiar enlace</string>
|
||||
<string name="btn_remember">No mostrar de nuevo</string>
|
||||
<string name="btn_dismiss">Descartar</string>
|
||||
<string name="btn_show_settings">Abrir ajustes</string>
|
||||
<string name="btn_create">Crear</string>
|
||||
<string name="btn_no">No</string>
|
||||
<string name="btn_yes">Sí</string>
|
||||
<string name="btn_ok">OK</string>
|
||||
<string name="label_share_url">Compartir ID/URL:</string>
|
||||
<string name="link_type_group_host">Compartir grupo (host)</string>
|
||||
<string name="btn_adopt">Unir a un enlace existente</string>
|
||||
<string name="label_status_disconnected">No se puede acceder al servidor</string>
|
||||
<string name="label_status_ok">Ubicación compartida activada!</string>
|
||||
<string name="label_status_none">Ubicación compartida desactivada</string>
|
||||
</resources>
|
||||
|
|
@ -160,4 +160,7 @@
|
|||
<string name="pref_noGnssFallback_title">Fall tilbake til nettverksposisjon hvis GNSS er utilgjengelig i (sekunder)</string>
|
||||
<string name="label_heading_no_links">Ingen aktive delinger</string>
|
||||
<string name="label_status_lost_gnss">Venter på posisjon…</string>
|
||||
<string name="pref_hideLogo_off">Vis Hauk-logoen på appens startside</string>
|
||||
<string name="pref_hideLogo_on">Skjul Hauk-logoen fra appens startside</string>
|
||||
<string name="prefs_hideLogo_title">Skjul logoen på forsiden</string>
|
||||
</resources>
|
||||
|
|
@ -34,8 +34,8 @@
|
|||
<string name="label_status_ok">Locatie delen actief!</string>
|
||||
<string name="label_pin_head">UW GROEP PIN:</string>
|
||||
<string name="explain_adopt_title">Deling adoptatie</string>
|
||||
<string name="adopt_title">Een bestaande deling adopteren</string>
|
||||
<string name="adopt_body">U kunt een bestaande individuele locatiedeling toevoegen aan deze groepsdeling. Voer daarvoor alstublieft de URL of deel ID van de locatie in die u wilt adopteren (bijvoorbeeld %s\?XXXX-XXXX) en wijs een bijnaam toe aan deze locatiedeling.</string>
|
||||
<string name="adopt_title">Een sessie van een andere gebruiker adopteren</string>
|
||||
<string name="adopt_body">U kunt een bestaande individuele locatiedeling toevoegen aan deze groepsdeling. Voer daarvoor alstublieft de URL of deel ID van de persoon in die u wilt adopteren (bijvoorbeeld %s\?XXXX-XXXX) en wijs een bijnaam toe aan deze persoon.</string>
|
||||
<string name="create_link_title">Creëer nieuwe deel link</string>
|
||||
<string name="create_link_body">U kunt meerdere links creëren waarmee uw locatie bekeken kan worden. Elke link kan individueel uitgezet worden, om op elk moment precieze controle te hebben over wie uw locatie kan zien.
|
||||
\n
|
||||
|
|
@ -70,12 +70,12 @@
|
|||
<string name="req_perms_title">Toestemming vereist</string>
|
||||
<string name="link_added_title">Link gecreëerd</string>
|
||||
<string name="req_perms_message">Deze app vereist toegang tot uw locatie om te functioneren, maar deze toestemming is nog niet verleend. Sta alstublieft het volgende toestemmingsverzoek toe, en klik daarna op de startknop om het opnieuw te proberen.</string>
|
||||
<string name="explain_adopt_body">Hauk staat u toe om locatiedelingssessies aan te maken voor uzelf alsook voor een groep. Als iemand een groepsdeling aanmaakt, krijgen zij een groepscode die anderen kunnen gebruiken om aan de groepssessie deel te nemen.
|
||||
\n
|
||||
\nMaar de persoon die de groep aanmaakt, krijgt ook een optie om een al bestaande deling toe te voegen aan de groep. Dit proces heet \"adoptie\".
|
||||
\n
|
||||
\nU kunt zelf bepalen of anderen uw locatiedeling mogen toevoegen aan een groep of niet middels deze checkbox.
|
||||
\n
|
||||
<string name="explain_adopt_body">Hauk staat u toe om locatiedelingssessies aan te maken voor uzelf alsook voor een groep. Als iemand een groepsdeling aanmaakt, krijgen zij een groepscode die anderen kunnen gebruiken om aan de groepssessie deel te nemen.
|
||||
\n
|
||||
\nMaar de persoon die de groep aanmaakt, krijgt ook een optie om anderen die reeds hun locatie delen toe te voegen aan de groep. Dit proces heet \"adoptie\".
|
||||
\n
|
||||
\nU kunt zelf bepalen of anderen uw locatiedeling mogen toevoegen aan een groep of niet middels deze checkbox.
|
||||
\n
|
||||
\nAls u deze optie aanzet en uw locatie deelt met vrienden of iemand die zijn locatie ook wilt delen, dan kunnen zij een groep aanmaken en uw locatie toevoegen aan de groep. Dan kunnen jullie elkaar op dezelfde gedeelde kaart zien. Dit is bijvoorbeeld handig als u aan het rijden bent, omdat u dan niet zelf uw telefoon hoeft te gebruiken om aan een groep deel te nemen.</string>
|
||||
<string name="battery_savings_title">Agressieve batterijbesparingen</string>
|
||||
<string name="manufacturer_huawei">Hauwei</string>
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
\nWilt u deze sessie hervatten\?</string>
|
||||
<string name="chk_allow_adopt">Toestaan dat anderen mij aan een groep mogen toevoegen</string>
|
||||
<string name="err_malformed_url">De ingevoerde server URL is ongeldig.</string>
|
||||
<string name="link_added_body">Een nieuwe link is succesvol aangemaakt voor uw locatiedeling! klik op de deel knop om de publiek bekijkbare URL voor uw deling te kopiëren.</string>
|
||||
<string name="link_added_body">Een nieuwe link is succesvol aangemaakt voor uw locatiedeling! Klik op de deel knop om de publiek bekijkbare URL voor uw nieuwe deling te kopiëren.</string>
|
||||
<string name="label_heading_links">Momenteel actieve links</string>
|
||||
<string name="sel_mode_opt_join_group">Neem deel aan een groepsdeling</string>
|
||||
<string name="label_status_wait">Wachten op initiële GNSS fix…</string>
|
||||
|
|
@ -148,4 +148,16 @@
|
|||
<string name="dialog_confirm_stop_body">weet je zeker dat je wilt stoppen met het delen van je locatie\?</string>
|
||||
<string name="dialog_confirm_stop_title">Stoppen met delen\?</string>
|
||||
<string name="label_status_lost_gnss">Zoeken naar locatie…</string>
|
||||
<string name="pref_confirmStop_off">Vraag niet om een bevestiging bij het stoppen van de locatiedeling</string>
|
||||
<string name="pref_confirmStop_on">Vraag voor bevestinging wanneer een locatiedeling in de app wordt gestopt</string>
|
||||
<string name="pref_confirmStop_title">Bevestig voor het stoppen van de locatiedelin</string>
|
||||
<string name="about_report_issue_title">Rapporteer een probleem</string>
|
||||
<string name="about_source_code_title">Broncode</string>
|
||||
<string name="about_version_title">App versie</string>
|
||||
<string name="prefs_header_about">Over Hauk</string>
|
||||
<string name="pref_noGnssFallback_title">Terugvallen op locatiebepaling via netwerk wanneer GNSS niet beschikbaar is (seconden)</string>
|
||||
<string name="pref_minUpdateDistance_title">Minimale afstand tussen updates (in meters)</string>
|
||||
<string name="err_no_nickname">Je moet eerst een nickname instellen voordat je lid kan worden van een groep. Stel een nickname is en probeer het opnieuw.</string>
|
||||
<string name="err_invalid_duration">De opgegeven duratie is ongeldig. Geef een nieuwe duratie op.</string>
|
||||
<string name="btn_remember">Niet opnieuw tonen</string>
|
||||
</resources>
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
<string name="about_version_title">Appversjon</string>
|
||||
<string name="prefs_header_about">Om Hauk</string>
|
||||
<string name="pref_confirmStop_off">Ikkje be om stadfesting når du stoppar delingar i appen</string>
|
||||
<string name="pref_confirmStop_on">Be om stadfesting når du stoppar delingar i *appen</string>
|
||||
<string name="pref_confirmStop_on">Be om stadfesting når du stoppar delingar i appen</string>
|
||||
<string name="pref_confirmStop_title">Stadfest før delingar blir avslutta</string>
|
||||
<string name="pref_minUpdateDistance_title">Minste avstand mellom oppdateringar (meter)</string>
|
||||
<string name="err_no_nickname">Du må stilla inn eit kallenamn før du kan bli med i delingsgruppar. Ver vennleg og vel eit kallenamn og prøv igjen.</string>
|
||||
|
|
@ -160,4 +160,7 @@
|
|||
<string name="pref_noGnssFallback_title">Fall tilbake til nettverksposisjon viss GNSS er utilgjengeleg i (sekund)</string>
|
||||
<string name="label_heading_no_links">Ingen aktive delinger</string>
|
||||
<string name="label_status_lost_gnss">Ventar på posisjon…</string>
|
||||
<string name="pref_hideLogo_off">Vis Hauk-logoen på appens startside</string>
|
||||
<string name="pref_hideLogo_on">Skjul Hauk-logoen frå appens startside</string>
|
||||
<string name="prefs_hideLogo_title">Skjul logoen på framsida</string>
|
||||
</resources>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
<string name="label_pin_help">Podaj ten PIN osobom, które mają dołączyć do grupy</string>
|
||||
<string name="label_pin_head">PIN TWOJEJ GRUPY:</string>
|
||||
<string name="label_status_ok">Udostępnianie lokalizacji jest włączone!</string>
|
||||
<string name="label_status_ok">Udostępnianie lokalizacji jest aktywne!</string>
|
||||
<string name="label_status_coarse">Oczekiwanie na dokładną lokalizację…</string>
|
||||
<string name="label_status_wait">Oczekiwanie na sygnał GPS…</string>
|
||||
<string name="label_status_none">Udostępnianie lokalizacji jest wyłączone</string>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<string name="sel_unit_opt_minutes">minut</string>
|
||||
<string name="sel_mode_opt_join_group">Dołącz do grupy</string>
|
||||
<string name="sel_mode_opt_create_group">Stwórz grupę</string>
|
||||
<string name="sel_mode_opt_alone">Jedynie moja lokalizacja</string>
|
||||
<string name="sel_mode_opt_alone">Tylko moja lokalizacja</string>
|
||||
<string name="link_type_group_member">Udostępnianie grupowe (członek)</string>
|
||||
<string name="link_type_group_host">Udostępnianie grupowe (gospodarz)</string>
|
||||
<string name="link_type_solo">Tylko twoja lokalizacja</string>
|
||||
|
|
@ -24,13 +24,13 @@
|
|||
<string name="label_pin">PIN grupy:</string>
|
||||
<string name="label_nickname">Pseudonim:</string>
|
||||
<string name="label_explain_adopt">(Co to znaczy\?)</string>
|
||||
<string name="chk_allow_adopt">Pozwalam innym na dołączenie mnie do swojej grupy</string>
|
||||
<string name="chk_allow_adopt">Pozwól innym na dołączenie siebie do swojej grupy</string>
|
||||
<string name="label_mode">Tryb udostępniania:</string>
|
||||
<string name="pref_interval_title">Okres aktualizacji pozycji (s):</string>
|
||||
<string name="pref_interval_title">Interwał między aktualizacjami pozycji (s)</string>
|
||||
<string name="label_duration">Czas udostępniania:</string>
|
||||
<string name="pref_cryptPassword_title">Hasło</string>
|
||||
<string name="pref_cryptServer_title">URL serwera</string>
|
||||
<string name="label_heading">Otwarte oprogramowanie do udostępniania lokalizacji</string>
|
||||
<string name="label_heading">Otwartoźródłowe oprogramowanie do udostępniania lokalizacji</string>
|
||||
<string name="link_added_title">Link został utworzony</string>
|
||||
<string name="req_perms_title">Potrzebne pozwolenie</string>
|
||||
<string name="req_perms_message">Ta aplikacja potrzebuje dostępu do twojej lokalizacji, a nie zostało ono udzielone. Udziel pozwolenia i spróbuj ponownie rozpocząć udostępnianie.</string>
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
<string name="err_connect">Błąd połączenia</string>
|
||||
<string name="err_server">Błąd serwera</string>
|
||||
<string name="err_missing_perms">Pozwolenie na lokalizację jest wymagane do korzystania z tej aplikacji.</string>
|
||||
<string name="err_outdated">Serwer nie ma zainstalowanych aktualizacji</string>
|
||||
<string name="err_outdated">Wersja Hauk na serwerze jest przestarzała</string>
|
||||
<string name="ok_title">Połączono</string>
|
||||
<string name="adopted_body">Dodano %s do twojej grupy!</string>
|
||||
<string name="resume_title">Wznów sesję</string>
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
<string name="label_share_url">ID/URL sesji:</string>
|
||||
<string name="btn_share_short">Udostępnij</string>
|
||||
<string name="btn_adopt">Dołącz osobę do grupy</string>
|
||||
<string name="battery_savings_title">Oszczędzanie baterii</string>
|
||||
<string name="battery_savings_title">Agresywne oszczędzanie baterii</string>
|
||||
<string name="manufacturer_huawei">Huawei</string>
|
||||
<string name="manufacturer_oneplus">OnePlus</string>
|
||||
<string name="manufacturer_xiaomi">Xiaomi</string>
|
||||
|
|
@ -69,7 +69,8 @@
|
|||
<string name="progress_connect_body">Łączenie z Hauk…</string>
|
||||
<string name="progress_adopt_title">Dołączanie do grupy</string>
|
||||
<string name="adopt_title">Dołączanie osoby do grupy</string>
|
||||
<string name="create_link_body">Jeśli udostępniasz swoją lokalizację więcej niż jednej osobie na raz, to warto utworzyć kilka linków, każdy dla jednej osoby. Tym sposobem można wyłączać pojedyncze linki, aby wyłączyć udostępnianie konkretnym osobom.</string>
|
||||
<string name="create_link_body">Jeśli udostępniasz swoją lokalizację więcej niż jednej osobie na raz, to warto utworzyć kilka linków, każdy dla jednej osoby.
|
||||
\nTym sposobem można wyłączać pojedyncze linki, aby wyłączyć udostępnianie konkretnym osobom.</string>
|
||||
<string name="progress_adopt_body">Dołączanie %s do grupy…</string>
|
||||
<string name="err_malformed_url">Wprowadzony URL serwera jest nieprawidłowy.</string>
|
||||
<string name="err_location_disabled">Usługi lokalizacyjne są obecnie wyłączone. Włącz lokalizację w swoim urządzeniu aby korzystać z aplikacji.</string>
|
||||
|
|
@ -77,5 +78,87 @@
|
|||
<string name="err_response_code">Serwer zwrócił odpowiedź o kodzie HTTP %s!</string>
|
||||
<string name="err_ver_group">Podany serwer nie wspiera udostępniania grupowego. Ta funkcja jest dostępna od wersji %s, a obecna wersja serwera to %s. Sposób udostępniania zostanie zmieniony na udostępnianie indywidualne.</string>
|
||||
<string name="ok_message">Udostępnianie aktualizacji jest aktywne! Skorzystaj z przycisku \"Udostępnij\", aby udostępnić komuś swoją lokalizację.</string>
|
||||
<string name="adopted_title">Udostępnianie podjęty</string>
|
||||
<string name="adopted_title">Dołączono do grupy</string>
|
||||
<string name="action_settings">Ustawienia</string>
|
||||
<string name="authorize_header">Prośba autoryzacji rozgłoszenia</string>
|
||||
<string name="explain_adopt_body">Hauk pozwala na tworzenie jednoosobowych sesji udostępniania, jak i sesji dla więcej niż jednej osoby jednocześnie. Jeśli ktoś utworzy grupowe udostępnianie, dostaje kod który pozwala na dołączenie innych osób do grupy.
|
||||
\n
|
||||
\nOsoba która tworzy grupę ma także opcję dodania wszystkich aktualnie udostępniających lokalizację do swojej grupy. Proces ten nazywany jest adopcją lub dołączaniem do grupy.
|
||||
\n
|
||||
\nMożesz decydować czy chcesz pozwolić na dołączanie siebie do swoich grup zaznaczając to pole.
|
||||
\n
|
||||
\nJeśli włączysz tą opcję, udostępnisz swoją lokalizację grupie przyjaciół i ktoś będzie chciał również udostępnić swoją lokalizację, może stworzyć grupę i dodać cię do swojej mapy - oboje będziecie widoczni na jednej mapie. Funkcja ta jest użyteczna jeśli przykładowo prowadzisz samochów i nie możesz używać swojego telefonu. Dołączanie do grupy (adopcja) nie wymaga żadnej interakcji z twojej strony.</string>
|
||||
<string name="authorize_question">Czy chcesz zezwolić w przyszłości na tworzenie sesji z rozgłoszeń o tym identyfikatorze\?</string>
|
||||
<string name="authorize_body">Hauk otrzymał i zablokował próbę utworzenia nowej sesji udostępniania ze źródła które identyfikuje się jako</string>
|
||||
<string name="err_proxy_host_resolution">Adres IP skonfigurowanego proxy ($s) nie może zostać rozwiązany!</string>
|
||||
<string name="progress_resolving_proxy">Rozwiązywanie adresu proxy…</string>
|
||||
<string name="explain_adopt_title">Dołączanie do grupy</string>
|
||||
<string name="about_report_issue_title">Zgłoś problem</string>
|
||||
<string name="about_source_code_title">Kod źródłowy</string>
|
||||
<string name="about_version_title">Wersja aplikacji</string>
|
||||
<string name="prefs_header_about">O Hauk</string>
|
||||
<string name="pref_hideLogo_off">Pokaż logo Hauk na górze głównego ekranu</string>
|
||||
<string name="pref_hideLogo_on">Ukryj logo Hauk z głównego ekranu</string>
|
||||
<string name="prefs_hideLogo_title">Ukryj logo na głównym ekranie</string>
|
||||
<string name="pref_confirmStop_off">Nie pytaj przed zatrzymaniem sesji udostępniania</string>
|
||||
<string name="pref_confirmStop_on">Potwierdź przed zatrzymaniem sesji udostępniania</string>
|
||||
<string name="pref_confirmStop_title">Potwierdź przed zatrzymaniem udostępniania</string>
|
||||
<string name="night_mode_never">Nigdy</string>
|
||||
<string name="night_mode_always">Zawsze</string>
|
||||
<string name="night_mode_battery">Gdy włączone jest osczędzanie baterii</string>
|
||||
<string name="night_mode_system">Zgodnie z ustawieniami systemowymi</string>
|
||||
<string name="prefs_nightMode_title">Tryb nocny</string>
|
||||
<string name="prefs_header_appearance">Wygląd</string>
|
||||
<string name="tls_validation_none_for_onion">Wyłącz walidację \"Trust anchor\" oraz nazwy hosta dla hostów TOR .onion (niezalecane)</string>
|
||||
<string name="tls_validation_no_anchor_onion">Wyłącz walidację \"Trust anchor\" dla hostów TOR .onion (niezalecane)</string>
|
||||
<string name="tls_validation_all">Zawsze weryfikuj certyfikaty (zalecane)</string>
|
||||
<string name="pref_tlsCertValidation_title">Weryfikacja certyfikatu HTTPS</string>
|
||||
<string name="pref_noGnssFallback_title">Użyj lokalizacji sieciowej gdy GPS jest niedostępny przez (s)</string>
|
||||
<string name="pref_connectTimeout_title">Limit czasu połączenia (s)</string>
|
||||
<string name="pref_proxyPort_title">Port proxy</string>
|
||||
<string name="pref_proxyHost_title">Adres proxy</string>
|
||||
<string name="proxy_mode_socks">SOCKS 4/5</string>
|
||||
<string name="proxy_mode_http">HTTP</string>
|
||||
<string name="proxy_mode_none">Nie używaj proxy</string>
|
||||
<string name="proxy_mode_default">System (domyślne)</string>
|
||||
<string name="pref_proxyType_title">Proxy</string>
|
||||
<string name="pref_e2ePassword_title">Hasło szyfrowania</string>
|
||||
<string name="pref_enableE2E_off">Wyłącz szyfrowanie</string>
|
||||
<string name="pref_enableE2E_on">Włącz szyfrowanie</string>
|
||||
<string name="pref_enableE2E_title">Chroń udostępnianie hasłem</string>
|
||||
<string name="pref_requestLink_hint"><losowo generowane></string>
|
||||
<string name="pref_requestLink_title">Preferowane ID</string>
|
||||
<string name="pref_minUpdateDistance_title">Minimalna przebyta odległość pomiędzy aktualizacjami (m)</string>
|
||||
<string name="pref_cryptUsername_hint"><opcjonalny></string>
|
||||
<string name="pref_cryptUsername_title">Nazwa użytkownika</string>
|
||||
<string name="password_mask">Dotknij aby edytować</string>
|
||||
<string name="prefs_header_connection">Połączenie</string>
|
||||
<string name="title_activity_settings">Ustawienia</string>
|
||||
<string name="share_subject">Śledź moją aktualną lokalizację na Hauk!</string>
|
||||
<string name="share_via">Udostępnij link Hauk przez</string>
|
||||
<string name="battery_savings_body">"Wygląda na to, że uzywasz urządzenia %s. Te urządzenia mają włączone oszczędzanie baterii, które mogą uniemożliwić Hauk wysyłanie aktualizacji lokalizacji w tle.
|
||||
\n
|
||||
\nZalecane jest, żeby wyłączyć oszczędzanie baterii dla aplikacji Hauk, aby aplikacja nagle nie przestała działać.
|
||||
\n
|
||||
\nTa wiadomość nie będzie wyświetlana ponownie."</string>
|
||||
<string name="link_added_body">Nowy link został pomyślnie utworzony. Kliknij przycisk udostępniania aby go skopiować.</string>
|
||||
<string name="resume_body">Masz niezakończoną sesję:
|
||||
\nAktywnych linków: %d
|
||||
\nCzas wygaśnięcia: %s
|
||||
\n
|
||||
\nChciałbyś wznowić tą sesję\?</string>
|
||||
<string name="err_ver_e2e">"Podany serwer nie wspiera szyfrowania. Ta funkcja jest dostępna od wersji %s, a obecna wersja serwera to %s. Szyfrowanie zostanie wyłączone."</string>
|
||||
<string name="err_proxy_failure">Wystąpił błąd podczas rozwiązywania nazwy hosta proxy: %s</string>
|
||||
<string name="err_no_nickname">Musisz ustawić pseudonim zanim dołączysz do grupy. Ustaw pseudonim i spróbuj ponownie.</string>
|
||||
<string name="err_invalid_duration">Wprowadzony czas udostępniania jest nieprawidłowe. Proszę wprowadzić poprawny czas.</string>
|
||||
<string name="err_server_not_configured">Nie skonfigurowano danych serwera. Proszę wprowadzić dane serwera w ustawieniach i spróbować ponownie.</string>
|
||||
<string name="btn_remember">Nie pokazuj ponownie</string>
|
||||
<string name="adopt_body">Możesz dołączyć istniejącą sesję udostępniania lokalizacji do tej grupy. Proszę wkleić adres lub ID udostępnianej osoby którą chciałbyś dołączyć (np. %s\?XXXX-XXXX) i przypisz pseudonim do tej osoby.</string>
|
||||
<string name="label_heading_no_links">Brak aktywnych linków</string>
|
||||
<string name="dialog_confirm_stop_share">Czy jesteś pewien, że chcesz usunąć ten link\?</string>
|
||||
<string name="dialog_confirm_stop_title">Zatrzymać udostępnianie\?</string>
|
||||
<string name="dialog_confirm_stop_body">Czy jesteś pewien, że chcesz zatrzymać udostępnianie\?</string>
|
||||
<string name="label_status_disconnected">Błąd serwera</string>
|
||||
<string name="label_status_lost_gnss">Szukanie lokalizacji…</string>
|
||||
<string name="label_allow_adopt">Zezwól na adopcję:</string>
|
||||
</resources>
|
||||
|
|
@ -160,4 +160,7 @@
|
|||
<string name="pref_noGnssFallback_title">Folosește localizarea de rețea dacă cea GNSS este indisponibilă timp de (secunde)</string>
|
||||
<string name="label_heading_no_links">Nici o adresă activă</string>
|
||||
<string name="label_status_lost_gnss">Se caută locația…</string>
|
||||
<string name="pref_hideLogo_off">Logoul Hauk va fi afișat în partea de sus a ecranului principal</string>
|
||||
<string name="pref_hideLogo_on">Logoul Hauk va fi ascuns de pe ecranul principal</string>
|
||||
<string name="prefs_hideLogo_title">Ascunde logoul</string>
|
||||
</resources>
|
||||
|
|
@ -48,4 +48,5 @@
|
|||
<string name="label_mode">Paylaşım modu:</string>
|
||||
<string name="label_duration">Paylaşım süresi:</string>
|
||||
<string name="label_heading">Açık kaynak konum paylaşımı</string>
|
||||
<string name="label_heading_links">Aktif linkler</string>
|
||||
</resources>
|
||||
|
|
@ -165,6 +165,9 @@
|
|||
<string name="pref_confirmStop_title">Confirm before stopping shares</string>
|
||||
<string name="pref_confirmStop_on">Prompt for confirmation when stopping shares in the app</string>
|
||||
<string name="pref_confirmStop_off">Do not prompt for confirmation when stopping shares in the app</string>
|
||||
<string name="prefs_hideLogo_title">Hide logo on main screen</string>
|
||||
<string name="pref_hideLogo_on">Hide the Hauk logo from the app\'s main screen</string>
|
||||
<string name="pref_hideLogo_off">Show the Hauk logo at the top of the app\'s main screen</string>
|
||||
|
||||
<!-- About section -->
|
||||
<string name="prefs_header_about">About Hauk</string>
|
||||
|
|
|
|||
|
|
@ -122,6 +122,13 @@
|
|||
app:summaryOff="@string/pref_confirmStop_off"
|
||||
app:summaryOn="@string/pref_confirmStop_on" />
|
||||
|
||||
<SwitchPreference
|
||||
app:key="hideLogo"
|
||||
app:icon="@drawable/ic_image"
|
||||
app:title="@string/prefs_hideLogo_title"
|
||||
app:summaryOff="@string/pref_hideLogo_off"
|
||||
app:summaryOn="@string/pref_hideLogo_on" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory app:title="@string/prefs_header_about">
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ buildscript {
|
|||
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.6.1'
|
||||
classpath 'com.android.tools.build:gradle:8.1.0'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
|
|
|||
|
|
@ -17,4 +17,7 @@ org.gradle.jvmargs=-Xmx1536m
|
|||
android.useAndroidX=true
|
||||
# Automatically convert third-party libraries to use AndroidX
|
||||
android.enableJetifier=true
|
||||
android.defaults.buildfeatures.buildconfig=true
|
||||
android.nonTransitiveRClass=false
|
||||
android.nonFinalResIds=false
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#Wed Mar 04 12:19:53 CET 2020
|
||||
#Thu Jul 30 19:59:09 CEST 2020
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ if (!$share->exists()) {
|
|||
} else {
|
||||
header("Content-Type: text/json");
|
||||
|
||||
$sinceTime=$_GET["since"] ?? null;
|
||||
|
||||
// Solo and group shares have different internal structures. Figure out the
|
||||
// correct type so that it can be output.
|
||||
switch ($share->getType()) {
|
||||
|
|
@ -34,7 +36,7 @@ if (!$share->exists()) {
|
|||
"expire" => $share->getExpirationTime(),
|
||||
"serverTime" => microtime(true),
|
||||
"interval" => $session->getInterval(),
|
||||
"points" => $session->getPoints(),
|
||||
"points" => $session->getPoints($sinceTime),
|
||||
"encrypted" => $session->isEncrypted(),
|
||||
"salt" => $session->getEncryptionSalt()
|
||||
));
|
||||
|
|
@ -46,7 +48,7 @@ if (!$share->exists()) {
|
|||
"expire" => $share->getExpirationTime(),
|
||||
"serverTime" => microtime(true),
|
||||
"interval" => $share->getAutoInterval(),
|
||||
"points" => $share->getAllPoints()
|
||||
"points" => $share->getAllPoints($sinceTime)
|
||||
));
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ header("X-Hauk-Version: ".BACKEND_VERSION);
|
|||
|
||||
requirePOST(
|
||||
"sid", // Existing session ID.
|
||||
"ado", // Whether or not to allow adoption.
|
||||
"ado" // Whether or not to allow adoption.
|
||||
);
|
||||
|
||||
$memcache = memConnect();
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
// An include file containing constants and common functions for the Hauk
|
||||
// backend. It loads the configuration file and declares it as a constant.
|
||||
|
||||
const BACKEND_VERSION = "1.6.1";
|
||||
const BACKEND_VERSION = "1.6.2";
|
||||
const LANGUAGES = ["ca", "de", "en", "eu", "fr", "it", "nb_NO", "nl", "nn", "ro", "ru", "tr", "uk"];
|
||||
|
||||
// Create mode for create.php. Corresponds with the constants from the Android
|
||||
|
|
@ -136,7 +136,7 @@ const DEFAULTS = array(
|
|||
"reserved_links" => [],
|
||||
"reserve_whitelist" => false,
|
||||
"link_style" => LINK_4_PLUS_4_UPPER_CASE,
|
||||
"map_tile_uri" => 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
"map_tile_uri" => 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
"map_attribution" => 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
|
||||
"default_zoom" => 14,
|
||||
"max_zoom" => 19,
|
||||
|
|
@ -158,6 +158,7 @@ const DEFAULTS = array(
|
|||
// one found from this list.
|
||||
const CONFIG_PATHS = array(
|
||||
"/etc/hauk/config.php",
|
||||
"/usr/local/etc/hauk/config.php",
|
||||
__DIR__."/config.php"
|
||||
);
|
||||
|
||||
|
|
@ -564,12 +565,12 @@ class GroupShare extends Share {
|
|||
}
|
||||
|
||||
// Returns a map of nicknames and the users' corresponding coordinates.
|
||||
public function getAllPoints() {
|
||||
public function getAllPoints($sinceTime) {
|
||||
$points = array();
|
||||
$hosts = $this->getHosts();
|
||||
foreach ($hosts as $nick => $host) {
|
||||
if ($host->exists()) {
|
||||
$points[$nick] = $host->getPoints();
|
||||
$points[$nick] = $host->getPoints($sinceTime);
|
||||
}
|
||||
}
|
||||
return $points;
|
||||
|
|
@ -757,8 +758,22 @@ class Client {
|
|||
}
|
||||
|
||||
// Returns a list of all point arrays for this session.
|
||||
public function getPoints() {
|
||||
public function getPoints($sinceTime) {
|
||||
if (is_null($sinceTime)) {
|
||||
// return all memcached points
|
||||
return $this->sessionData["points"];
|
||||
} else {
|
||||
$newPoints = [];
|
||||
// FIXME: use map instead of indices
|
||||
$timeIndex = $this->isEncrypted() ? 3 : 2;
|
||||
// only return points which are more recent than $oldestPointTime
|
||||
foreach ($this->sessionData["points"] as $point) {
|
||||
if (floatval($point[$timeIndex]) > $sinceTime) {
|
||||
array_push($newPoints, $point);
|
||||
}
|
||||
}
|
||||
return $newPoints;
|
||||
}
|
||||
}
|
||||
|
||||
// Generates a random session ID for new sessions.
|
||||
|
|
@ -792,18 +807,18 @@ function authenticated() {
|
|||
global $LANG;
|
||||
if (!isset($_POST["usr"])) die($LANG["username_required"]);
|
||||
requirePOST("pwd", "usr");
|
||||
if (file_exists(getConfig("htpasswd_path"))) {
|
||||
$file = fopen(getConfig("htpasswd_path"), "r");
|
||||
$authed = false;
|
||||
while (($line = fgets($file)) !== false && !$authed) {
|
||||
$creds = explode(":", trim($line));
|
||||
if ($creds[0] == $_POST["usr"]) {
|
||||
$authed = password_verify($_POST["pwd"], $creds[1]);
|
||||
}
|
||||
// Jump out if we cannot find the htpasswd file.
|
||||
if (!file_exists(getConfig("htpasswd_path"))) die($LANG["cannot_find_password_file"]);
|
||||
$file = fopen(getConfig("htpasswd_path"), "r");
|
||||
$authed = false;
|
||||
while (($line = fgets($file)) !== false && !$authed) {
|
||||
$creds = explode(":", trim($line));
|
||||
if ($creds[0] == $_POST["usr"]) {
|
||||
$authed = password_verify($_POST["pwd"], $creds[1]);
|
||||
}
|
||||
fclose($file);
|
||||
return $authed;
|
||||
}
|
||||
fclose($file);
|
||||
return $authed;
|
||||
|
||||
case LDAP:
|
||||
// LDAP-based authentication.
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ $LANG['invalid_storage'] = 'Heu establert un storage_backend d\'emmagatzematge n
|
|||
$LANG['no_redis_ext'] = 'No hi ha habilitada cap extensió redis compatible (redis) a la vostra configuració PHP!';
|
||||
$LANG['no_memcached_ext'] = 'No hi ha habilitada cap extensió confidencial (memcache o memcached) a la configuració de PHP!';
|
||||
$LANG['config_missing'] = 'No es pot trobar config.php!';
|
||||
$LANG['cannot_find_password_file'] = 'No es troba el fitxer de contrasenya!';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['ldap_search_failed'] = 'Benutzer konnte am LDAP Server nicht gefunden wer
|
|||
$LANG['ldap_connection_failed'] = 'Fehler beim Verbinden zum LDAP Server!';
|
||||
$LANG['ldap_config_error'] = 'LDAP-Verbindungsparameter konnten nicht eingestellt werden!';
|
||||
$LANG['ldap_extension_missing'] = 'Die LDAP Erweiterung ist in der PHP config nicht aktiviert!';
|
||||
$LANG['cannot_find_password_file'] = 'Kennwortdatei kann nicht gefunden werden!';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['ldap_connection_failed'] = 'Failed to connect to the LDAP server!';
|
|||
$LANG['ldap_search_failed'] = 'Failed to look up user on the LDAP server!';
|
||||
$LANG['ldap_user_unauthorized'] = 'User not found, not authorized, or incorrect password!';
|
||||
$LANG['ldap_search_ambiguous'] = 'Matched multiple users - the LDAP filter is too broad!';
|
||||
$LANG['cannot_find_password_file'] = 'Cannot find password file!';
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ $LANG['share_mode_unsupported'] = 'Euskarririk gabeko parekatze modua!';
|
|||
$LANG['group_pin_invalid'] = 'Baliogabeko talde PIN-a!';
|
||||
$LANG['session_invalid'] = 'Saio baliogabea!';
|
||||
$LANG['location_invalid'] = 'Kokaleku baliogabea!';
|
||||
$LANG['cannot_find_password_file'] = 'Ezin da pasahitz fitxategia aurkitu!';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['ldap_extension_missing'] = 'L\'extension LDAP n\'est pas activée dans vo
|
|||
$LANG['e2e_adoption_not_allowed'] = 'Ce partage est protégé par un mot de passe et ne peut pas être adopté !';
|
||||
$LANG['group_e2e_unsupported'] = 'Les partages de groupe ne peuvent pas être protégés par un mot de passe !';
|
||||
$LANG['username_required'] = 'Nom d\'utilisateur requis !';
|
||||
$LANG['cannot_find_password_file'] = 'Impossible de trouver le fichier de mot de passe !';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['invalid_storage'] = 'storage_backend non è impostata correttamente in Ha
|
|||
$LANG['no_redis_ext'] = 'Nessuna estensione compatibile con redi (redi) è attiva nella tua configurazione PHP!';
|
||||
$LANG['no_memcached_ext'] = 'Nessuna estensione compatibile con memcached (memecache o memecached) è attiva nella tua configurazione PHP!';
|
||||
$LANG['config_missing'] = 'Impossibile trovare config.php!';
|
||||
$LANG['cannot_find_password_file'] = 'Impossibile trovare il file della password!';
|
||||
|
|
|
|||
1
backend-php/include/lang/ko/texts.php
Normal file
1
backend-php/include/lang/ko/texts.php
Normal file
|
|
@ -0,0 +1 @@
|
|||
<?php
|
||||
|
|
@ -18,3 +18,10 @@ $LANG['share_adoption_not_allowed'] = 'De eigenaar van de ingevoerde deling staa
|
|||
$LANG['e2e_adoption_not_allowed'] = 'Deze deling is met wachtwoord beveiligd en kan niet geadopteerd worden!';
|
||||
$LANG['group_e2e_unsupported'] = 'Groepsdelingen kunnen niet met een wachtwoord beveiligd worden!';
|
||||
$LANG['username_required'] = 'Gebruikersnaam vereist!';
|
||||
$LANG['ldap_search_ambiguous'] = 'Meerdere gebruikers gevonden - het LDAP filter is te breed!';
|
||||
$LANG['ldap_user_unauthorized'] = 'Gebruiker niet gevonden, niet geauthoriseerd of wachtwoord onjuist!';
|
||||
$LANG['ldap_search_failed'] = 'Fout tijdens het opzoeken van de gebruiker op de LDAP server!';
|
||||
$LANG['ldap_connection_failed'] = 'Kan geen verbinding maken met de LDAP server!';
|
||||
$LANG['ldap_config_error'] = 'Niet gelukt om LDAP connectieparameters in te stellen!';
|
||||
$LANG['ldap_extension_missing'] = 'De LDAP extensie is niet actief in uw PHP configuratie!';
|
||||
$LANG['cannot_find_password_file'] = 'Kan geen wachtwoordbestand vinden!';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['ldap_search_failed'] = 'Kunne ikkje slå opp brukaren på LDAP-serveren!'
|
|||
$LANG['ldap_connection_failed'] = 'Kunne ikkje kopla til LDAP-serveren!';
|
||||
$LANG['ldap_config_error'] = 'Kunne ikkje setja LDAP-tilkoplingsparametrar!';
|
||||
$LANG['ldap_extension_missing'] = 'ldap-utvidinga er ikkje aktivert i PHP-konfigurasjonen din!';
|
||||
$LANG['cannot_find_password_file'] = 'Kan ikke finne passordfil!';
|
||||
27
backend-php/include/lang/pl/texts.php
Normal file
27
backend-php/include/lang/pl/texts.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
$LANG['no_redis_ext'] = 'Nie znaleziono rozszerzenia redis (redis) w PHP!';
|
||||
$LANG['no_memcached_ext'] = 'Nie odnaleziono kompatybilnego rozszerzenia memcached (memcache lub memcached) w PHP!';
|
||||
$LANG['ldap_search_ambiguous'] = 'Znaleziono kilku użytkowników - zmień filtr LDAP!';
|
||||
$LANG['ldap_user_unauthorized'] = 'Nie znaleziono użytkownika, nie autoryzowano lub hasło jest niepoprawne!';
|
||||
$LANG['ldap_search_failed'] = 'Błąd wyszukiwania na serwerze LDAP!';
|
||||
$LANG['ldap_connection_failed'] = 'Błąd podczas łączenia z serwerem LDAP!';
|
||||
$LANG['ldap_config_error'] = 'Błąd podczas ustawiania parametrów połączenia LDAP!';
|
||||
$LANG['ldap_extension_missing'] = 'Rozszerzenie ldap nie jest dostępne w PHP!';
|
||||
$LANG['e2e_adoption_not_allowed'] = 'Ta sesja jest chroniona hasłem i nie może zostać dołączona!';
|
||||
$LANG['group_e2e_unsupported'] = 'Sesje grupowe nie mogą być zabezpieczone hasłem!';
|
||||
$LANG['location_invalid'] = 'Niepoprawna lokalizacja!';
|
||||
$LANG['session_invalid'] = 'Niepoprawna sesja!';
|
||||
$LANG['group_pin_invalid'] = 'Niepoprawny PIN grupy!';
|
||||
$LANG['share_mode_unsupported'] = 'Niewspierany tryb udostępniania!';
|
||||
$LANG['interval_too_short'] = 'Interwał między aktualizacjami jest za krótki!';
|
||||
$LANG['interval_too_long'] = 'Interwał między aktualizacjami jest za długi!';
|
||||
$LANG['share_too_long'] = 'Czas trwania sesji jest za długi!';
|
||||
$LANG['username_required'] = 'Wymagana nazwa użytkownika!';
|
||||
$LANG['incorrect_password'] = 'Niepoprawne hasło!';
|
||||
$LANG['share_adoption_not_allowed'] = 'Host danej sesji nie zezwala na dołączanie!';
|
||||
$LANG['group_share_not_adoptable'] = 'Nie możesz dołączać sesji grupowych!';
|
||||
$LANG['share_not_found'] = 'Ta sesja nie istnieje!';
|
||||
$LANG['session_expired'] = 'Sesja wygasła!';
|
||||
$LANG['invalid_storage'] = 'Ustawiłeś niepoprawny storage_backend w Hauk!';
|
||||
$LANG['config_missing'] = 'Nie można odnaleźć pliku config.php!';
|
||||
$LANG['cannot_find_password_file'] = 'Nie można znaleźć pliku hasła!';
|
||||
|
|
@ -24,3 +24,4 @@ $LANG['ldap_search_failed'] = 'Nu s-a putut găsi utilizatorul pe serverul LDAP!
|
|||
$LANG['ldap_connection_failed'] = 'Nu s-a putut face conexiunea cu serverul LDAP!';
|
||||
$LANG['ldap_config_error'] = 'Nu s-au putut seta parametrii conexiunii LDAP!';
|
||||
$LANG['ldap_extension_missing'] = 'Extensia ldap nu este activată în configurația PHP!';
|
||||
$LANG['cannot_find_password_file'] = 'Nu pot găsi fișierul de parolă!';
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ $LANG['invalid_storage'] = 'У вас неверный storage_backend для Ha
|
|||
$LANG['no_redis_ext'] = 'Нет включенных совместимых расширений redis в вашей конфигурации PHP!';
|
||||
$LANG['no_memcached_ext'] = 'Нет включенных совместимых расширений в вашей конфигурации PHP (memcache or memcached)!';
|
||||
$LANG['config_missing'] = 'Не могу найти config.php!';
|
||||
$LANG['cannot_find_password_file'] = 'Не удается найти файл пароля';
|
||||
|
|
|
|||
|
|
@ -24,3 +24,4 @@ $LANG['username_required'] = 'Kullanıcı adı gerekli!';
|
|||
$LANG['incorrect_password'] = 'Hatalı parola!';
|
||||
$LANG['session_expired'] = 'Oturum süresi doldu!';
|
||||
$LANG['config_missing'] = 'config.php bulunamıyor!';
|
||||
$LANG['cannot_find_password_file'] = 'Şifre dosyasını bulamıyor';
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ $LANG['group_pin_invalid'] = 'Невірний груповий PIN!';
|
|||
$LANG['session_invalid'] = 'Недійсний сеанс!';
|
||||
$LANG['location_invalid'] = 'Недійсне місцезнаходження!';
|
||||
$LANG['config_missing'] = 'Не можу знайти config.php!';
|
||||
$LANG['cannot_find_password_file'] = 'Не вдається знайти файл пароля';
|
||||
|
|
|
|||
|
|
@ -8,8 +8,13 @@ class MemWrapper {
|
|||
|
||||
function __construct() {
|
||||
$this->redis = new Redis();
|
||||
$this->redis->connect(getConfig("redis_host"), getConfig("redis_port"))
|
||||
or die ("Server could not connect to Redis!\n");
|
||||
if(substr(getConfig("redis_host"), 0, 1) === "/") {
|
||||
$this->redis->connect(getConfig("redis_host"))
|
||||
or die ("Server could not connect to Redis socket!\n");
|
||||
} else {
|
||||
$this->redis->connect(getConfig("redis_host"), getConfig("redis_port"))
|
||||
or die ("Server could not connect to Redis!\n");
|
||||
}
|
||||
if (getConfig("redis_use_auth")) {
|
||||
$this->redis->auth(getConfig("redis_auth"))
|
||||
or die("Incorrect Redis authentication!");
|
||||
|
|
|
|||
3
fastlane/metadata/android/en-US/changelogs/14.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/14.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
This updated adds support for Android versions up to Android 13. Due to compatibility issues, support for Android 6 has also been dropped in this release for now.
|
||||
|
||||
For the full changelog, please see https://github.com/bilde2910/Hauk/releases.
|
||||
36
frontend/assets/lang/ko.json
Normal file
36
frontend/assets/lang/ko.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"btn_dismiss": "닫기",
|
||||
"google_play_badge_text": "Google Play 에서 다운로드",
|
||||
"google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/ko_badge_web_generic.png",
|
||||
"f_droid_badge_text": "F-Droid 에서 다운로드",
|
||||
"f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-ko.png",
|
||||
"btn_show_all": "모두 보기",
|
||||
"btn_close": "닫기",
|
||||
"btn_decrypt": "잠금 해제",
|
||||
"btn_cancel": "취소",
|
||||
"last_update_days": "{{time}}일 전",
|
||||
"last_update_hours": "{{time}}시간 전",
|
||||
"last_update_minutes": "{{time}}분 전",
|
||||
"last_update_seconds": "{{time}}초 전",
|
||||
"control_show_self": "내 위치 표시하기",
|
||||
"status_offline": "오프라인",
|
||||
"status_expired": "만료됨",
|
||||
"dialog_user_navigate": "이 위치로 안내",
|
||||
"dialog_user_follow": "지도에서 보기",
|
||||
"dialog_active_head": "활성 사용자들",
|
||||
"dialog_connection_body": "Hauk 서버로의 접속이 끊겼습니다. Hauk은 백그라운드에서 재접속을 시도하겠습니다. 네트워크 접속 여부를 확인해주세요.",
|
||||
"dialog_connection_head": "접속 오류",
|
||||
"dialog_expired_body": "이 위치 공유가 만료되었습니다.",
|
||||
"dialog_expired_head": "링크가 만료됨",
|
||||
"point_app_to": "위치를 공유하기 위해 Hauk 앱을 이 서버로 설정하여 주십시오:",
|
||||
"gnss_signal_body": "발신자가 GPS 신호를 기다리고 있습니다",
|
||||
"gnss_signal_head": "잠시만 기다려주세요",
|
||||
"e2e_unsupported": "이 링크는 비밀번호로 보호되어 있습니다. 사용하고 계시는 브라우저는 잠금을 해제하기 위한 기능을 지원하지 않습니다. 다른 브라우저로 다시 시도해주세요.",
|
||||
"e2e_unavailable_secure": "이 링크는 비밀번호로 보호되어 있습니다. HTTPS를 사용하고 있지 않기 때문에 보호를 해제할 수 없습니다. HTTPS를 사용중인지 확인하시고 다시 시도해주세요.",
|
||||
"e2e_incorrect": "입력한 비밀번호가 올바르지 않습니다. 다시 시도해주세요.",
|
||||
"e2e_password_prompt": "이 링크는 비밀번호로 보호되어 있습니다. 링크에 접근하기 위해 비밀번호를 입력해주세요.",
|
||||
"e2e_placeholder": "비밀번호를 입력하세요",
|
||||
"e2e_title": "비밀번호로 보호됨",
|
||||
"expired_body": "요청하신 위치정보를 서버에서 찾을 수 없습니다. 기존에 작동하던 링크라면, 위치 공유가 만료되었을 수 있습니다.",
|
||||
"expired_head": "위치 정보가 만료됨"
|
||||
}
|
||||
|
|
@ -24,5 +24,13 @@
|
|||
"e2e_incorrect": "Het ingevoerde wachtwoord is incorrect. Probeer het alstublieft nog eens.",
|
||||
"e2e_password_prompt": "Deze deling is met wachtwoord beveiligd. Vul het wachtwoord in om toegang te krijgen tot de deling.",
|
||||
"e2e_placeholder": "Voer wachtwoord in",
|
||||
"e2e_title": "Beveiligd met wachtwoord"
|
||||
"e2e_title": "Beveiligd met wachtwoord",
|
||||
"google_play_badge_text": "Download op Google Play",
|
||||
"f_droid_badge_text": "Download op F-Droid",
|
||||
"btn_show_all": "Toon alle",
|
||||
"btn_close": "Sluiten",
|
||||
"control_show_self": "Toon mijn locatie",
|
||||
"dialog_user_navigate": "Navigeer naar",
|
||||
"dialog_user_follow": "Toon op kaart",
|
||||
"dialog_active_head": "Actieve gebruikers"
|
||||
}
|
||||
|
|
|
|||
36
frontend/assets/lang/pl.json
Normal file
36
frontend/assets/lang/pl.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"google_play_badge_text": "Pobierz z Google Play",
|
||||
"google_play_badge_url": "https://play.google.com/intl/en_us/badges/static/images/badges/pl_badge_web_generic.png",
|
||||
"f_droid_badge_text": "Pobierz z F-Droid",
|
||||
"f_droid_badge_url": "https://fdroid.gitlab.io/artwork/badge/get-it-on-pl.png",
|
||||
"btn_show_all": "Pokaż wszystko",
|
||||
"btn_close": "Zamknij",
|
||||
"btn_decrypt": "Odblokuj",
|
||||
"btn_cancel": "Anuluj",
|
||||
"btn_dismiss": "Odrzuć",
|
||||
"last_update_days": "{{time}} dni temu",
|
||||
"last_update_hours": "{{time}}h temu",
|
||||
"last_update_minutes": "{{time}}m temu",
|
||||
"last_update_seconds": "{{time}s temu",
|
||||
"control_show_self": "Pokaż moją lokalizację",
|
||||
"status_offline": "Offline",
|
||||
"status_expired": "Wygasło",
|
||||
"dialog_user_navigate": "Nawiguj do",
|
||||
"dialog_user_follow": "Pokaż na mapie",
|
||||
"dialog_active_head": "Aktywni użytkownicy",
|
||||
"dialog_connection_body": "Połączenie z serwerem Hauk zostało utracone. Hauk spróbuje odzyskać połączenie. Proszę sprawdzić swoje połączenie sieciowe.",
|
||||
"dialog_connection_head": "Błąd połączenia",
|
||||
"dialog_expired_body": "Ta sesja udostępniania wygasła.",
|
||||
"dialog_expired_head": "Sesja wygasła",
|
||||
"point_app_to": "Wprowadź w aplikacji Hauk ten adres serwera:",
|
||||
"gnss_signal_body": "Nadawca oczekuje na sygnał GPS",
|
||||
"gnss_signal_head": "Proszę czekać",
|
||||
"e2e_unsupported": "Ta sesja jest chroniona hasłem. Twoja przeglądarka nie obsługuje funkcji potrzebnych do otwierania takich sesji. Spróbuj użyć innej przeglądarki.",
|
||||
"e2e_unavailable_secure": "Ta sesja jest chroniona hasłem. Nie można jej odblokować, gdyż nie używasz protokołu HTTPS. Upewnij się, że używasz protokołu HTTPS i spróbuj ponownie.",
|
||||
"e2e_incorrect": "Niepoprawne hasło. Spróbuj ponownie.",
|
||||
"e2e_password_prompt": "Ta sesja jest chroniona hasłem. Wprowadź hasło.",
|
||||
"e2e_placeholder": "Wprowadź hasło",
|
||||
"e2e_title": "Chronione hasłem",
|
||||
"expired_body": "Lokalizacja którą próbujesz zobaczyć nie została odnaleziona na serwerze. Jeśli ten link wcześniej działał, oznacza to, że sesja udostępniania mogła wygasnąć.",
|
||||
"expired_head": "Lokalizacja wygasła"
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src * data:; connect-src 'self'; font-src 'none'; object-src 'none'; media-src 'none'; frame-src 'none'; form-action 'none'; worker-src 'none'; manifest-src 'none';">
|
||||
|
||||
<!-- Load Leaflet for the map. -->
|
||||
<link rel="stylesheet" href="./lib/leaflet/1.6.0/leaflet.css" />
|
||||
|
|
@ -57,13 +58,13 @@
|
|||
|
||||
<div class="cover hidden" id="searching">
|
||||
<img src="./assets/location-pending.svg" class="pending">
|
||||
<p class="header" style="margin-top:0;" data-i18n="gnss_signal_head"></p>
|
||||
<p class="header" data-i18n="gnss_signal_head"></p>
|
||||
<p class="body" data-i18n="gnss_signal_body"></p>
|
||||
</div>
|
||||
|
||||
<div class="cover hidden" id="index">
|
||||
<img src="./assets/logo.svg" class="logo">
|
||||
<p class="body" style="margin-top:7vmin;" data-i18n="point_app_to"></p>
|
||||
<p class="body point-app-to" data-i18n="point_app_to"></p>
|
||||
<p class="body" id="url">https://localhost/</p>
|
||||
<p class="body"><a href="https://f-droid.org/packages/info.varden.hauk">
|
||||
<img data-i18n="f_droid_badge_text"
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ function getJSON(url, callback, invalid) {
|
|||
if (this.readyState == 4) {
|
||||
var offlineE = document.getElementById("offline");
|
||||
var notchE = document.getElementById("notch");
|
||||
if (this.status === 200 || this.status === 404) {
|
||||
if (this.status === 200) {
|
||||
// Request successful. Reset offline state and parse the JSON.
|
||||
knownOffline = false;
|
||||
if (offlineE !== null) {
|
||||
|
|
@ -274,6 +274,8 @@ function getJSON(url, callback, invalid) {
|
|||
console.log(ex);
|
||||
invalid();
|
||||
}
|
||||
} else if (this.status === 404) {
|
||||
invalid();
|
||||
} else {
|
||||
// Requested failed; offline.
|
||||
if (!knownOffline) {
|
||||
|
|
@ -435,7 +437,8 @@ function setNewInterval(expire, interval, serverTime) {
|
|||
showMessage(LANG["dialog_expired_head"], LANG["dialog_expired_body"]);
|
||||
}
|
||||
|
||||
getJSON("./api/fetch.php?id=" + id, function(data) {
|
||||
// Start incremental fetch
|
||||
getJSON("./api/fetch.php?id=" + id + "&since=" + getOldestPointTime(), function(data) {
|
||||
// Recreate the interval timers if the interval or expiration
|
||||
// change.
|
||||
if (data.expire != expire || data.interval != interval) {
|
||||
|
|
@ -454,6 +457,21 @@ function setNewInterval(expire, interval, serverTime) {
|
|||
}, interval * 1000);
|
||||
}
|
||||
|
||||
// Scans across all most recent points and returns the time of the oldest one
|
||||
function getOldestPointTime() {
|
||||
var oldestTime = Number.MAX_VALUE;
|
||||
var foundTime = false;
|
||||
for (var share in shares) {
|
||||
var points = shares[share].points
|
||||
if (points && points.length > 0 ) {
|
||||
var mostRecentTime = points[ points.length-1 ].time
|
||||
oldestTime = mostRecentTime < oldestTime ? mostRecentTime : oldestTime;
|
||||
foundTime = true;
|
||||
}
|
||||
}
|
||||
return foundTime ? oldestTime : 0;
|
||||
}
|
||||
|
||||
var noGPS = document.getElementById("searching");
|
||||
|
||||
// Whether or not an initial location has been received.
|
||||
|
|
@ -680,7 +698,6 @@ function processUpdate(data, init) {
|
|||
|
||||
// Get the last location received.
|
||||
var lastPoint = shares[user].points.length > 0 ? shares[user].points[shares[user].points.length - 1] : null;
|
||||
if (lastPoint !== null) shares[user].listEntry.style.display = "block";
|
||||
|
||||
for (var i = 0; i < users[user].length; i++) {
|
||||
var lat = users[user][i][0];
|
||||
|
|
@ -742,6 +759,8 @@ function processUpdate(data, init) {
|
|||
}
|
||||
}
|
||||
|
||||
if (lastPoint !== null) shares[user].listEntry.style.display = "block";
|
||||
|
||||
var eVelocity = document.getElementById("velocity-" + shares[user].id)
|
||||
var vel = 0;
|
||||
if (lastPoint !== null && lastPoint.spd !== null && eVelocity !== null) {
|
||||
|
|
@ -853,19 +872,13 @@ function processUpdate(data, init) {
|
|||
}
|
||||
eLastSeen.textContent = unit.split("{{time}}").join(time);
|
||||
}
|
||||
shares[user].circle.setStyle({
|
||||
fillColor: STATE_DEAD_COLOR,
|
||||
color: STATE_DEAD_COLOR
|
||||
})
|
||||
setAccuracyCircleColor(shares[user].circle, STATE_DEAD_COLOR);
|
||||
} else {
|
||||
eArrow.className = eArrow.className.split("dead").join(shares[user].state);
|
||||
if (eLabel !== null) eLabel.className = shares[user].state;
|
||||
var iconColor = STATE_LIVE_COLOR;
|
||||
if (shares[user].state == "rough") iconColor = STATE_ROUGH_COLOR;
|
||||
shares[user].circle.setStyle({
|
||||
fillColor: iconColor,
|
||||
color: iconColor
|
||||
});
|
||||
setAccuracyCircleColor(shares[user].circle, iconColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -887,6 +900,15 @@ function processUpdate(data, init) {
|
|||
}
|
||||
}
|
||||
|
||||
function setAccuracyCircleColor(circle, color) {
|
||||
if (circle) {
|
||||
circle.setStyle({
|
||||
fillColor: color,
|
||||
color: color
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Calculates the distance between two points on a sphere using the Haversine
|
||||
// algorithm.
|
||||
function distance(from, to) {
|
||||
|
|
|
|||
|
|
@ -61,6 +61,16 @@ body {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Searching for GNSS signal header (SVG image above, no need for margin). */
|
||||
#searching > p.header {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* Default page header. (Logo above, need custom margin.) */
|
||||
.point-app-to {
|
||||
margin-top: 7vmin;
|
||||
}
|
||||
|
||||
/* Popup information. */
|
||||
.cover > p.body {
|
||||
font-size: 4vmin;
|
||||
|
|
|
|||
25
install.sh
25
install.sh
|
|
@ -14,11 +14,21 @@ hauk_help() {
|
|||
echo "Installs Hauk to the specified web root directory, e.g. /var/www/html"
|
||||
echo ""
|
||||
echo -e "\033[1mOptions:\033[0m"
|
||||
echo -e "\033[91m-c\t\033[0mInstall config file to /etc/hauk"
|
||||
echo -e "\033[91m-c\t\033[0mInstall config file to $config"
|
||||
echo -e "\033[91m-f\t\033[0mOverwrite without asking"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Centralized configuration
|
||||
if [ "$(uname -s)" = "FreeBSD" ]; then
|
||||
confdir=/usr/local/etc/hauk
|
||||
config=/usr/local/etc/hauk/config.php
|
||||
else
|
||||
confdir=/etc/hauk
|
||||
config=/etc/hauk/config.php
|
||||
fi
|
||||
useconf=0
|
||||
|
||||
# Print help if no arguments given
|
||||
if [ "$#" -eq 0 ]; then
|
||||
hauk_help
|
||||
|
|
@ -32,11 +42,6 @@ if [ "$webroot" = "-f" ] || [ "$webroot" = "-c" ]; then
|
|||
hauk_help
|
||||
fi
|
||||
|
||||
# Centralized configuration
|
||||
confdir=/etc/hauk
|
||||
config=/etc/hauk/config.php
|
||||
useconf=0
|
||||
|
||||
hauk_config() {
|
||||
if [ -f "$config" ]; then
|
||||
if [ "$1" != "-f" ] && [ "$2" != "-f" ]; then
|
||||
|
|
@ -46,7 +51,7 @@ hauk_config() {
|
|||
rm "$config" >/dev/null 2>&1
|
||||
if [ -f "$config" ]; then
|
||||
echo "You do not have permissions to install the configuration file in"
|
||||
echo "/etc/hauk. Please run this script as root."
|
||||
echo "${confdir}. Please run this script as root."
|
||||
exit 5
|
||||
fi
|
||||
;;
|
||||
|
|
@ -55,7 +60,7 @@ hauk_config() {
|
|||
rm "$config" >/dev/null 2>&1
|
||||
if [ -f "$config" ]; then
|
||||
echo "You do not have permissions to install the configuration file in"
|
||||
echo "/etc/hauk. Please run this script as root."
|
||||
echo "${confdir}. Please run this script as root."
|
||||
exit 5
|
||||
fi
|
||||
fi
|
||||
|
|
@ -133,9 +138,7 @@ cp -R backend-php/* "$webroot"
|
|||
cp -R frontend/* "$webroot"
|
||||
|
||||
# Determine the path in which config is saved
|
||||
if [ "$useconf" -eq 1 ]; then
|
||||
confpath=/etc/hauk/config.php
|
||||
else
|
||||
if [ "$useconf" -eq 0 ]; then
|
||||
confpath="$webroot/include/config.php"
|
||||
cp backend-php/include/config-sample.php "$confpath" >/dev/null 2>&1
|
||||
fi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue