Feature send pdf done and verification added to mobile pdf preview
@@ -51,5 +51,6 @@ src/assets/www/pdfjs/web/compressed.tracemonkey-pldi-09.pdf.pdf
|
|||||||
node_modules_
|
node_modules_
|
||||||
node_modules__
|
node_modules__
|
||||||
plugins_
|
plugins_
|
||||||
|
android
|
||||||
ios
|
ios
|
||||||
src/plugin/beast-orm
|
src/plugin/beast-orm
|
||||||
|
|||||||
@@ -1,96 +0,0 @@
|
|||||||
# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
|
|
||||||
|
|
||||||
# Built application files
|
|
||||||
*.apk
|
|
||||||
*.aar
|
|
||||||
*.ap_
|
|
||||||
*.aab
|
|
||||||
|
|
||||||
# Files for the ART/Dalvik VM
|
|
||||||
*.dex
|
|
||||||
|
|
||||||
# Java class files
|
|
||||||
*.class
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
bin/
|
|
||||||
gen/
|
|
||||||
out/
|
|
||||||
# Uncomment the following line in case you need and you don't have the release build type files in your app
|
|
||||||
# release/
|
|
||||||
|
|
||||||
# Gradle files
|
|
||||||
.gradle/
|
|
||||||
build/
|
|
||||||
|
|
||||||
# Local configuration file (sdk path, etc)
|
|
||||||
local.properties
|
|
||||||
|
|
||||||
# Proguard folder generated by Eclipse
|
|
||||||
proguard/
|
|
||||||
|
|
||||||
# Log Files
|
|
||||||
*.log
|
|
||||||
|
|
||||||
# Android Studio Navigation editor temp files
|
|
||||||
.navigation/
|
|
||||||
|
|
||||||
# Android Studio captures folder
|
|
||||||
captures/
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
*.iml
|
|
||||||
.idea/workspace.xml
|
|
||||||
.idea/tasks.xml
|
|
||||||
.idea/gradle.xml
|
|
||||||
.idea/assetWizardSettings.xml
|
|
||||||
.idea/dictionaries
|
|
||||||
.idea/libraries
|
|
||||||
# Android Studio 3 in .gitignore file.
|
|
||||||
.idea/caches
|
|
||||||
.idea/modules.xml
|
|
||||||
# Comment next line if keeping position of elements in Navigation Editor is relevant for you
|
|
||||||
.idea/navEditor.xml
|
|
||||||
|
|
||||||
# Keystore files
|
|
||||||
# Uncomment the following lines if you do not want to check your keystore files in.
|
|
||||||
#*.jks
|
|
||||||
#*.keystore
|
|
||||||
|
|
||||||
# External native build folder generated in Android Studio 2.2 and later
|
|
||||||
.externalNativeBuild
|
|
||||||
.cxx/
|
|
||||||
|
|
||||||
# Google Services (e.g. APIs or Firebase)
|
|
||||||
# google-services.json
|
|
||||||
|
|
||||||
# Freeline
|
|
||||||
freeline.py
|
|
||||||
freeline/
|
|
||||||
freeline_project_description.json
|
|
||||||
|
|
||||||
# fastlane
|
|
||||||
fastlane/report.xml
|
|
||||||
fastlane/Preview.html
|
|
||||||
fastlane/screenshots
|
|
||||||
fastlane/test_output
|
|
||||||
fastlane/readme.md
|
|
||||||
|
|
||||||
# Version control
|
|
||||||
vcs.xml
|
|
||||||
|
|
||||||
# lint
|
|
||||||
lint/intermediates/
|
|
||||||
lint/generated/
|
|
||||||
lint/outputs/
|
|
||||||
lint/tmp/
|
|
||||||
# lint/reports/
|
|
||||||
|
|
||||||
# Android Profiling
|
|
||||||
*.hprof
|
|
||||||
|
|
||||||
# Cordova plugins for Capacitor
|
|
||||||
capacitor-cordova-android-plugins
|
|
||||||
|
|
||||||
# Copied web assets
|
|
||||||
app/src/main/assets/public
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
/build/*
|
|
||||||
!/build/.npmkeep
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
apply plugin: 'com.android.application'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "com.capacitorjs.app.testapp"
|
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
||||||
aaptOptions {
|
|
||||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
|
||||||
// Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
|
|
||||||
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
flatDir{
|
|
||||||
dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
|
||||||
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
||||||
implementation project(':capacitor-android')
|
|
||||||
testImplementation "junit:junit:$junitVersion"
|
|
||||||
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
||||||
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
||||||
implementation project(':capacitor-cordova-android-plugins')
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: 'capacitor.build.gradle'
|
|
||||||
|
|
||||||
try {
|
|
||||||
def servicesJSON = file('google-services.json')
|
|
||||||
if (servicesJSON.text) {
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
}
|
|
||||||
} catch(Exception e) {
|
|
||||||
logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
|
|
||||||
dependencies {
|
|
||||||
implementation project(':byteowls-capacitor-filesharer')
|
|
||||||
implementation project(':capacitor-community-camera-preview')
|
|
||||||
implementation project(':capacitor-app')
|
|
||||||
implementation project(':capacitor-browser')
|
|
||||||
implementation project(':capacitor-camera')
|
|
||||||
implementation project(':capacitor-device')
|
|
||||||
implementation project(':capacitor-filesystem')
|
|
||||||
implementation project(':capacitor-haptics')
|
|
||||||
implementation project(':capacitor-keyboard')
|
|
||||||
implementation project(':capacitor-local-notifications')
|
|
||||||
implementation project(':capacitor-network')
|
|
||||||
implementation project(':capacitor-push-notifications')
|
|
||||||
implementation project(':capacitor-share')
|
|
||||||
implementation project(':capacitor-storage')
|
|
||||||
implementation project(':capacitor-voice-recorder')
|
|
||||||
implementation project(':capacitor2-file-picker')
|
|
||||||
implementation "com.soundcloud.android:android-crop:1.0.0@aar"
|
|
||||||
implementation "com.squareup.okhttp:okhttp-urlconnection:2+"
|
|
||||||
}
|
|
||||||
apply from: "../../node_modules/com-sarriaroman-photoviewer/src/android/photoviewer.gradle"
|
|
||||||
apply from: "../../node_modules/cordova-android-support-gradle-release/cordova-android-support-gradle-release.gradle"
|
|
||||||
apply from: "../../node_modules/cordova-plugin-fingerprint-aio/src/android/build.gradle"
|
|
||||||
|
|
||||||
if (hasProperty('postBuildExtras')) {
|
|
||||||
postBuildExtras()
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# Add project specific ProGuard rules here.
|
|
||||||
# You can control the set of applied configuration files using the
|
|
||||||
# proguardFiles setting in build.gradle.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Uncomment this to preserve the line number information for
|
|
||||||
# debugging stack traces.
|
|
||||||
#-keepattributes SourceFile,LineNumberTable
|
|
||||||
|
|
||||||
# If you keep the line number information, uncomment this to
|
|
||||||
# hide the original source file name.
|
|
||||||
#-renamesourcefileattribute SourceFile
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package com.getcapacitor.myapp;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instrumented test, which will execute on an Android device.
|
|
||||||
*
|
|
||||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
||||||
*/
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class ExampleInstrumentedTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void useAppContext() throws Exception {
|
|
||||||
// Context of the app under test.
|
|
||||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
|
||||||
|
|
||||||
assertEquals("com.getcapacitor.app", appContext.getPackageName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<manifest package="com.gpr.gabinetedigital" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name=".App" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
|
|
||||||
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/title_activity_main" android:launchMode="singleTask" android:name="com.gpr.gabinetedigital.MainActivity" android:theme="@style/AppTheme.NoActionBarLaunch">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<provider android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider">
|
|
||||||
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
|
|
||||||
</provider>
|
|
||||||
</application>
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
</manifest>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<manifest package="com.capacitorjs.app.testapp" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
|
|
||||||
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/title_activity_main" android:launchMode="singleTask" android:name="com.capacitorjs.app.testapp.MainActivity" android:theme="@style/AppTheme.NoActionBarLaunch">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<provider android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider">
|
|
||||||
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
|
|
||||||
</provider>
|
|
||||||
</application>
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
</manifest>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"appId": "com.capacitorjs.app.testapp",
|
|
||||||
"appName": "capacitor-testapp",
|
|
||||||
"webDir": "www",
|
|
||||||
"plugins": {
|
|
||||||
"SplashScreen": {
|
|
||||||
"launchAutoHide": false
|
|
||||||
},
|
|
||||||
"LocalNotifications": {
|
|
||||||
"smallIcon": "ic_stat_icon_config_sample",
|
|
||||||
"iconColor": "#CE0B7C"
|
|
||||||
},
|
|
||||||
"PushNotifications": {
|
|
||||||
"presentationOptions": [
|
|
||||||
"alert",
|
|
||||||
"sound"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"pkg": "@byteowls/capacitor-filesharer",
|
|
||||||
"classpath": "com.byteowls.capacitor.filesharer.FileSharerPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor-community/camera-preview",
|
|
||||||
"classpath": "com.ahm.capacitor.camera.preview.CameraPreview"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/app",
|
|
||||||
"classpath": "com.capacitorjs.plugins.app.AppPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/browser",
|
|
||||||
"classpath": "com.capacitorjs.plugins.browser.BrowserPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/camera",
|
|
||||||
"classpath": "com.capacitorjs.plugins.camera.CameraPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/device",
|
|
||||||
"classpath": "com.capacitorjs.plugins.device.DevicePlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/filesystem",
|
|
||||||
"classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/haptics",
|
|
||||||
"classpath": "com.capacitorjs.plugins.haptics.HapticsPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/keyboard",
|
|
||||||
"classpath": "com.capacitorjs.plugins.keyboard.KeyboardPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/local-notifications",
|
|
||||||
"classpath": "com.capacitorjs.plugins.localnotifications.LocalNotificationsPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/network",
|
|
||||||
"classpath": "com.capacitorjs.plugins.network.NetworkPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/push-notifications",
|
|
||||||
"classpath": "com.capacitorjs.plugins.pushnotifications.PushNotificationsPlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/share",
|
|
||||||
"classpath": "com.capacitorjs.plugins.share.SharePlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "@capacitor/storage",
|
|
||||||
"classpath": "com.capacitorjs.plugins.storage.StoragePlugin"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "capacitor-voice-recorder",
|
|
||||||
"classpath": "com.tchvu3.capacitorvoicerecorder.VoiceRecorder"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pkg": "capacitor2-file-picker",
|
|
||||||
"classpath": "com.devmantosh.filepicker.FilePicker"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.capacitorjs.app.testapp;
|
|
||||||
|
|
||||||
import com.getcapacitor.BridgeActivity;
|
|
||||||
|
|
||||||
public class MainActivity extends BridgeActivity {}
|
|
||||||
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB |
@@ -1,34 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path
|
|
||||||
android:fillType="evenOdd"
|
|
||||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1">
|
|
||||||
<aapt:attr name="android:fillColor">
|
|
||||||
<gradient
|
|
||||||
android:endX="78.5885"
|
|
||||||
android:endY="90.9159"
|
|
||||||
android:startX="48.7653"
|
|
||||||
android:startY="61.0927"
|
|
||||||
android:type="linear">
|
|
||||||
<item
|
|
||||||
android:color="#44000000"
|
|
||||||
android:offset="0.0" />
|
|
||||||
<item
|
|
||||||
android:color="#00000000"
|
|
||||||
android:offset="1.0" />
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
<path
|
|
||||||
android:fillColor="#FFFFFF"
|
|
||||||
android:fillType="nonZero"
|
|
||||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
|
|
||||||
android:strokeColor="#00000000"
|
|
||||||
android:strokeWidth="1" />
|
|
||||||
</vector>
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportHeight="108"
|
|
||||||
android:viewportWidth="108">
|
|
||||||
<path
|
|
||||||
android:fillColor="#26A69A"
|
|
||||||
android:pathData="M0,0h108v108h-108z" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M9,0L9,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,0L19,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,0L29,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,0L39,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,0L49,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,0L59,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,0L69,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,0L79,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M89,0L89,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M99,0L99,108"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,9L108,9"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,19L108,19"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,29L108,29"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,39L108,39"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,49L108,49"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,59L108,59"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,69L108,69"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,79L108,79"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,89L108,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M0,99L108,99"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,29L89,29"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,39L89,39"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,49L89,49"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,59L89,59"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,69L89,69"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M19,79L89,79"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M29,19L29,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M39,19L39,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M49,19L49,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M59,19L59,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M69,19L69,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
<path
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:pathData="M79,19L79,89"
|
|
||||||
android:strokeColor="#33FFFFFF"
|
|
||||||
android:strokeWidth="0.8" />
|
|
||||||
</vector>
|
|
||||||
|
Before Width: | Height: | Size: 3.9 KiB |
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
|
|
||||||
<WebView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 16 KiB |
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<color name="ic_launcher_background">#FFFFFF</color>
|
|
||||||
</resources>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">capacitor-testapp</string>
|
|
||||||
<string name="title_activity_main">capacitor-testapp</string>
|
|
||||||
<string name="package_name">com.capacitorjs.app.testapp</string>
|
|
||||||
<string name="custom_url_scheme">com.capacitorjs.app.testapp</string>
|
|
||||||
</resources>
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<!-- Base application theme. -->
|
|
||||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
|
||||||
<!-- Customize your theme here. -->
|
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
|
|
||||||
<item name="windowActionBar">false</item>
|
|
||||||
<item name="windowNoTitle">true</item>
|
|
||||||
<item name="android:background">@null</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
<style name="AppTheme.NoActionBarLaunch" parent="AppTheme.NoActionBar">
|
|
||||||
<item name="android:background">@drawable/splash</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<widget version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
|
||||||
<access origin="*" />
|
|
||||||
|
|
||||||
<feature name="CropPlugin">
|
|
||||||
<param name="android-package" value="com.jeduan.crop.CropPlugin"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="sqlDB">
|
|
||||||
<param name="android-package" value="me.rahul.plugins.sqlDB.sqlDB"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="File">
|
|
||||||
<param name="android-package" value="org.apache.cordova.file.FileUtils"/>
|
|
||||||
<param name="onload" value="true"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="FilePath">
|
|
||||||
<param name="android-package" value="com.hiddentao.cordova.filepath.FilePath"/>
|
|
||||||
<param name="onload" value="true"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="MultipleDocumentsPicker">
|
|
||||||
<param name="android-package" value="com.akeo.cordova.plugin.MultipleDocumentsPicker"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="OkHttpPlugin">
|
|
||||||
<param name="android-package" value="com.google.cordova.OkHttpPlugin"/>
|
|
||||||
<param name="onload" value="true"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="CDVOrientation">
|
|
||||||
<param name="android-package" value="cordova.plugins.screenorientation.CDVOrientation"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="SQLitePlugin">
|
|
||||||
<param name="android-package" value="io.sqlc.SQLitePlugin"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="PhotoViewer">
|
|
||||||
<param name="android-package" value="com.sarriaroman.PhotoViewer.PhotoViewer"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Device">
|
|
||||||
<param name="android-package" value="org.apache.cordova.device.Device"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Notification">
|
|
||||||
<param name="android-package" value="org.apache.cordova.dialogs.Notification"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Fingerprint">
|
|
||||||
<param name="android-package" value="de.niklasmerz.cordova.biometric.Fingerprint"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Globalization">
|
|
||||||
<param name="android-package" value="org.apache.cordova.globalization.Globalization"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="InAppBrowser">
|
|
||||||
<param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Media">
|
|
||||||
<param name="android-package" value="org.apache.cordova.media.AudioHandler"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Capture">
|
|
||||||
<param name="android-package" value="org.apache.cordova.mediacapture.Capture"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="NetworkStatus">
|
|
||||||
<param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="StatusBar">
|
|
||||||
<param name="android-package" value="org.apache.cordova.statusbar.StatusBar"/>
|
|
||||||
<param name="onload" value="true"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="Whitelist">
|
|
||||||
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin"/>
|
|
||||||
<param name="onload" value="true"/>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
|
|
||||||
</widget>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<external-path name="my_images" path="." />
|
|
||||||
<cache-path name="my_cache_images" path="." />
|
|
||||||
</paths>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package com.getcapacitor.myapp;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Example local unit test, which will execute on the development machine (host).
|
|
||||||
*
|
|
||||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
||||||
*/
|
|
||||||
public class ExampleUnitTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void addition_isCorrect() throws Exception {
|
|
||||||
assertEquals(4, 2 + 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
|
||||||
|
|
||||||
buildscript {
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:4.2.1'
|
|
||||||
classpath 'com.google.gms:google-services:4.3.5'
|
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
|
||||||
// in the individual module build.gradle files
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "variables.gradle"
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
task clean(type: Delete) {
|
|
||||||
delete rootProject.buildDir
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
|
|
||||||
include ':capacitor-android'
|
|
||||||
project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')
|
|
||||||
|
|
||||||
include ':byteowls-capacitor-filesharer'
|
|
||||||
project(':byteowls-capacitor-filesharer').projectDir = new File('../node_modules/@byteowls/capacitor-filesharer/android')
|
|
||||||
|
|
||||||
include ':capacitor-community-camera-preview'
|
|
||||||
project(':capacitor-community-camera-preview').projectDir = new File('../node_modules/@capacitor-community/camera-preview/android')
|
|
||||||
|
|
||||||
include ':capacitor-app'
|
|
||||||
project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android')
|
|
||||||
|
|
||||||
include ':capacitor-browser'
|
|
||||||
project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android')
|
|
||||||
|
|
||||||
include ':capacitor-camera'
|
|
||||||
project(':capacitor-camera').projectDir = new File('../node_modules/@capacitor/camera/android')
|
|
||||||
|
|
||||||
include ':capacitor-device'
|
|
||||||
project(':capacitor-device').projectDir = new File('../node_modules/@capacitor/device/android')
|
|
||||||
|
|
||||||
include ':capacitor-filesystem'
|
|
||||||
project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android')
|
|
||||||
|
|
||||||
include ':capacitor-haptics'
|
|
||||||
project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android')
|
|
||||||
|
|
||||||
include ':capacitor-keyboard'
|
|
||||||
project(':capacitor-keyboard').projectDir = new File('../node_modules/@capacitor/keyboard/android')
|
|
||||||
|
|
||||||
include ':capacitor-local-notifications'
|
|
||||||
project(':capacitor-local-notifications').projectDir = new File('../node_modules/@capacitor/local-notifications/android')
|
|
||||||
|
|
||||||
include ':capacitor-network'
|
|
||||||
project(':capacitor-network').projectDir = new File('../node_modules/@capacitor/network/android')
|
|
||||||
|
|
||||||
include ':capacitor-push-notifications'
|
|
||||||
project(':capacitor-push-notifications').projectDir = new File('../node_modules/@capacitor/push-notifications/android')
|
|
||||||
|
|
||||||
include ':capacitor-share'
|
|
||||||
project(':capacitor-share').projectDir = new File('../node_modules/@capacitor/share/android')
|
|
||||||
|
|
||||||
include ':capacitor-storage'
|
|
||||||
project(':capacitor-storage').projectDir = new File('../node_modules/@capacitor/storage/android')
|
|
||||||
|
|
||||||
include ':capacitor-voice-recorder'
|
|
||||||
project(':capacitor-voice-recorder').projectDir = new File('../node_modules/capacitor-voice-recorder/android')
|
|
||||||
|
|
||||||
include ':capacitor2-file-picker'
|
|
||||||
project(':capacitor2-file-picker').projectDir = new File('../node_modules/capacitor2-file-picker/android')
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Project-wide Gradle settings.
|
|
||||||
|
|
||||||
# IDE (e.g. Android Studio) users:
|
|
||||||
# Gradle settings configured through the IDE *will override*
|
|
||||||
# any settings specified in this file.
|
|
||||||
|
|
||||||
# For more details on how to configure your build environment visit
|
|
||||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
|
||||||
|
|
||||||
# Specifies the JVM arguments used for the daemon process.
|
|
||||||
# The setting is particularly useful for tweaking memory settings.
|
|
||||||
org.gradle.jvmargs=-Xmx1536m
|
|
||||||
|
|
||||||
# When configured, Gradle will run in incubating parallel mode.
|
|
||||||
# This option should only be used with decoupled projects. More details, visit
|
|
||||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
|
||||||
# org.gradle.parallel=true
|
|
||||||
|
|
||||||
# AndroidX package structure to make it clearer which packages are bundled with the
|
|
||||||
# Android operating system, and which are packaged with your app's APK
|
|
||||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
|
||||||
android.useAndroidX=true
|
|
||||||
# Automatically convert third-party libraries to use AndroidX
|
|
||||||
android.enableJetifier=true
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
||||||
@@ -1,185 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright 2015 the original author or authors.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
#
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
##
|
|
||||||
## Gradle start up script for UN*X
|
|
||||||
##
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
|
||||||
# Resolve links: $0 may be a link
|
|
||||||
PRG="$0"
|
|
||||||
# Need this for relative symlinks.
|
|
||||||
while [ -h "$PRG" ] ; do
|
|
||||||
ls=`ls -ld "$PRG"`
|
|
||||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
||||||
if expr "$link" : '/.*' > /dev/null; then
|
|
||||||
PRG="$link"
|
|
||||||
else
|
|
||||||
PRG=`dirname "$PRG"`"/$link"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
SAVED="`pwd`"
|
|
||||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
|
||||||
APP_HOME="`pwd -P`"
|
|
||||||
cd "$SAVED" >/dev/null
|
|
||||||
|
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=`basename "$0"`
|
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
||||||
MAX_FD="maximum"
|
|
||||||
|
|
||||||
warn () {
|
|
||||||
echo "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
die () {
|
|
||||||
echo
|
|
||||||
echo "$*"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# OS specific support (must be 'true' or 'false').
|
|
||||||
cygwin=false
|
|
||||||
msys=false
|
|
||||||
darwin=false
|
|
||||||
nonstop=false
|
|
||||||
case "`uname`" in
|
|
||||||
CYGWIN* )
|
|
||||||
cygwin=true
|
|
||||||
;;
|
|
||||||
Darwin* )
|
|
||||||
darwin=true
|
|
||||||
;;
|
|
||||||
MINGW* )
|
|
||||||
msys=true
|
|
||||||
;;
|
|
||||||
NONSTOP* )
|
|
||||||
nonstop=true
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
||||||
# IBM's JDK on AIX uses strange locations for the executables
|
|
||||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
|
||||||
else
|
|
||||||
JAVACMD="$JAVA_HOME/bin/java"
|
|
||||||
fi
|
|
||||||
if [ ! -x "$JAVACMD" ] ; then
|
|
||||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
JAVACMD="java"
|
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
|
||||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
|
||||||
MAX_FD_LIMIT=`ulimit -H -n`
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
|
||||||
MAX_FD="$MAX_FD_LIMIT"
|
|
||||||
fi
|
|
||||||
ulimit -n $MAX_FD
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For Darwin, add options to specify how the application appears in the dock
|
|
||||||
if $darwin; then
|
|
||||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
||||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
|
||||||
|
|
||||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
|
||||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
|
||||||
SEP=""
|
|
||||||
for dir in $ROOTDIRSRAW ; do
|
|
||||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
|
||||||
SEP="|"
|
|
||||||
done
|
|
||||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
|
||||||
# Add a user-defined pattern to the cygpath arguments
|
|
||||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
|
||||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
|
||||||
fi
|
|
||||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
||||||
i=0
|
|
||||||
for arg in "$@" ; do
|
|
||||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
|
||||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
|
||||||
|
|
||||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
|
||||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
|
||||||
else
|
|
||||||
eval `echo args$i`="\"$arg\""
|
|
||||||
fi
|
|
||||||
i=`expr $i + 1`
|
|
||||||
done
|
|
||||||
case $i in
|
|
||||||
0) set -- ;;
|
|
||||||
1) set -- "$args0" ;;
|
|
||||||
2) set -- "$args0" "$args1" ;;
|
|
||||||
3) set -- "$args0" "$args1" "$args2" ;;
|
|
||||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
|
||||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
|
||||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
|
||||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
|
||||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
|
||||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Escape application args
|
|
||||||
save () {
|
|
||||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
|
||||||
echo " "
|
|
||||||
}
|
|
||||||
APP_ARGS=`save "$@"`
|
|
||||||
|
|
||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
|
||||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
|
||||||
|
|
||||||
exec "$JAVACMD" "$@"
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
@rem
|
|
||||||
@rem Copyright 2015 the original author or authors.
|
|
||||||
@rem
|
|
||||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
@rem you may not use this file except in compliance with the License.
|
|
||||||
@rem You may obtain a copy of the License at
|
|
||||||
@rem
|
|
||||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
@rem
|
|
||||||
@rem Unless required by applicable law or agreed to in writing, software
|
|
||||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
@rem See the License for the specific language governing permissions and
|
|
||||||
@rem limitations under the License.
|
|
||||||
@rem
|
|
||||||
|
|
||||||
@if "%DEBUG%" == "" @echo off
|
|
||||||
@rem ##########################################################################
|
|
||||||
@rem
|
|
||||||
@rem Gradle startup script for Windows
|
|
||||||
@rem
|
|
||||||
@rem ##########################################################################
|
|
||||||
|
|
||||||
@rem Set local scope for the variables with windows NT shell
|
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
|
||||||
set APP_BASE_NAME=%~n0
|
|
||||||
set APP_HOME=%DIRNAME%
|
|
||||||
|
|
||||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
|
||||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
|
||||||
|
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
|
||||||
|
|
||||||
@rem Find java.exe
|
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if "%ERRORLEVEL%" == "0" goto execute
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:execute
|
|
||||||
@rem Setup the command line
|
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
|
||||||
|
|
||||||
:end
|
|
||||||
@rem End local scope for the variables with windows NT shell
|
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
|
||||||
|
|
||||||
:fail
|
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
||||||
rem the _cmd.exe /c_ return code!
|
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:mainEnd
|
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
|
||||||
|
|
||||||
:omega
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
include ':app'
|
|
||||||
include ':capacitor-cordova-android-plugins'
|
|
||||||
project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
|
|
||||||
|
|
||||||
apply from: 'capacitor.settings.gradle'
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
ext {
|
|
||||||
minSdkVersion = 21
|
|
||||||
compileSdkVersion = 30
|
|
||||||
targetSdkVersion = 30
|
|
||||||
androidxActivityVersion = '1.2.0'
|
|
||||||
androidxAppCompatVersion = '1.2.0'
|
|
||||||
androidxCoordinatorLayoutVersion = '1.1.0'
|
|
||||||
androidxCoreVersion = '1.3.2'
|
|
||||||
androidxFragmentVersion = '1.3.0'
|
|
||||||
junitVersion = '4.13.1'
|
|
||||||
androidxJunitVersion = '1.1.2'
|
|
||||||
androidxEspressoCoreVersion = '3.3.0'
|
|
||||||
cordovaAndroidVersion = '7.0.0'
|
|
||||||
}
|
|
||||||
@@ -26,6 +26,7 @@ dependencies {
|
|||||||
implementation project(':capacitor-voice-recorder')
|
implementation project(':capacitor-voice-recorder')
|
||||||
implementation project(':capacitor2-file-picker')
|
implementation project(':capacitor2-file-picker')
|
||||||
implementation "com.soundcloud.android:android-crop:1.0.0@aar"
|
implementation "com.soundcloud.android:android-crop:1.0.0@aar"
|
||||||
|
implementation "androidx.appcompat:appcompat:1.0.0"
|
||||||
implementation "com.android.support:support-v4:27.+"
|
implementation "com.android.support:support-v4:27.+"
|
||||||
implementation "com.squareup.okhttp:okhttp-urlconnection:2+"
|
implementation "com.squareup.okhttp:okhttp-urlconnection:2+"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<manifest package="com.gpr.gabinetedigital" xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest package="com.gpr.gabinetedigital" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name=".App" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
|
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name=".App" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
|
||||||
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/title_activity_main" android:launchMode="singleTask" android:name="com.gpr.gabinetedigital.MainActivity" android:theme="@style/AppTheme.NoActionBarLaunch">
|
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/title_activity_main" android:launchMode="singleTask" android:name="com.gpr.gabinetedigital.MainActivity" android:theme="@style/AppTheme.NoActionBarLaunch">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|||||||
@@ -16,5 +16,8 @@
|
|||||||
"sound"
|
"sound"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"url": "http://192.168.0.69:8100"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@
|
|||||||
<param name="android-package" value="me.rahul.plugins.sqlDB.sqlDB"/>
|
<param name="android-package" value="me.rahul.plugins.sqlDB.sqlDB"/>
|
||||||
</feature>
|
</feature>
|
||||||
|
|
||||||
|
<feature name="SitewaertsDocumentViewer">
|
||||||
|
<param name="android-package" value="de.sitewaerts.cordova.documentviewer.DocumentViewerPlugin"/>
|
||||||
|
</feature>
|
||||||
|
|
||||||
<feature name="File">
|
<feature name="File">
|
||||||
<param name="android-package" value="org.apache.cordova.file.FileUtils"/>
|
<param name="android-package" value="org.apache.cordova.file.FileUtils"/>
|
||||||
<param name="onload" value="true"/>
|
<param name="onload" value="true"/>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<preference name="SplashScreenDelay" value="3000" />
|
<preference name="SplashScreenDelay" value="3000" />
|
||||||
<platform name="android">
|
<platform name="android">
|
||||||
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
|
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<application android:requestLegacyExternalStorage="true" android:networkSecurityConfig="@xml/network_security_config" />
|
<application android:usesCleartextTraffic="true" android:requestLegacyExternalStorage="true" android:networkSecurityConfig="@xml/network_security_config" />
|
||||||
</edit-config>
|
</edit-config>
|
||||||
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
|
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
|
||||||
<resource-file src="google-services.json" target="google-services.json" />
|
<resource-file src="google-services.json" target="google-services.json" />
|
||||||
@@ -46,49 +46,6 @@
|
|||||||
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
|
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
|
||||||
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
|
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
|
||||||
</platform>
|
</platform>
|
||||||
<mfp:android>
|
|
||||||
<mfp:sdkChecksum>3077110622</mfp:sdkChecksum>
|
|
||||||
<mfp:appChecksum>3619450036</mfp:appChecksum>
|
|
||||||
<mfp:security>
|
|
||||||
<mfp:testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3" />
|
|
||||||
</mfp:security>
|
|
||||||
</mfp:android>
|
|
||||||
<mfp:ios>
|
|
||||||
<mfp:sdkChecksum>1979143311</mfp:sdkChecksum>
|
|
||||||
<mfp:appChecksum>1328564293</mfp:appChecksum>
|
|
||||||
<mfp:security>
|
|
||||||
<mfp:testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3" />
|
|
||||||
</mfp:security>
|
|
||||||
</mfp:ios>
|
|
||||||
<mfp:windows>
|
|
||||||
<mfp:windows8>
|
|
||||||
<mfp:sdkChecksum>0</mfp:sdkChecksum>
|
|
||||||
<mfp:security>
|
|
||||||
<mfp:testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3" />
|
|
||||||
</mfp:security>
|
|
||||||
</mfp:windows8>
|
|
||||||
<mfp:windowsphone8>
|
|
||||||
<mfp:sdkChecksum>0</mfp:sdkChecksum>
|
|
||||||
<mfp:security>
|
|
||||||
<mfp:testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3" />
|
|
||||||
</mfp:security>
|
|
||||||
</mfp:windowsphone8>
|
|
||||||
<mfp:windows10>
|
|
||||||
<mfp:sdkChecksum>0</mfp:sdkChecksum>
|
|
||||||
<mfp:security>
|
|
||||||
<mfp:testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3" />
|
|
||||||
</mfp:security>
|
|
||||||
</mfp:windows10>
|
|
||||||
<mfp:appChecksum>0</mfp:appChecksum>
|
|
||||||
</mfp:windows>
|
|
||||||
<mfp:platformVersion>8.0.0.00-20210905-154328</mfp:platformVersion>
|
|
||||||
<mfp:clientCustomInit enabled="false" />
|
|
||||||
<mfp:server runtime="mfp" url="http://gpr-dev-10.gabinetedigital.local:9080" />
|
|
||||||
<mfp:serverUri url="" />
|
|
||||||
<mfp:directUpdateAuthenticityPublicKey />
|
|
||||||
<mfp:languagePreferences>en</mfp:languagePreferences>
|
|
||||||
<mfp:APIproxyURL>/adapters/MobileAPIProxy</mfp:APIproxyURL>
|
|
||||||
<mfp:SDKProtocolVersion>2</mfp:SDKProtocolVersion>
|
|
||||||
<allow-navigation href="http://localhost:8100" sessionid="9714472a" />
|
<allow-navigation href="http://localhost:8100" sessionid="9714472a" />
|
||||||
<allow-navigation href="http://localhost:8101" sessionid="4721f88c" />
|
<allow-navigation href="http://localhost:8101" sessionid="4721f88c" />
|
||||||
<plugin name="cordova-plugin-dbcopy" spec="https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git" />
|
<plugin name="cordova-plugin-dbcopy" spec="https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git" />
|
||||||
|
|||||||
@@ -814,6 +814,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@awesome-cordova-plugins/document-viewer": {
|
||||||
|
"version": "5.41.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@awesome-cordova-plugins/document-viewer/-/document-viewer-5.41.0.tgz",
|
||||||
|
"integrity": "sha512-90zZvtYuCHTvK55LDoESd7F3OtuDj8AJ0C0Owz+PqZq2J2fUP4fzd7lJE89Cp6vZet7rjiOz7d/8hbTxKMWsdg==",
|
||||||
|
"requires": {
|
||||||
|
"@types/cordova": "^0.0.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/cordova": {
|
||||||
|
"version": "0.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
|
||||||
|
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@awesome-cordova-plugins/file": {
|
"@awesome-cordova-plugins/file": {
|
||||||
"version": "5.41.0",
|
"version": "5.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@awesome-cordova-plugins/file/-/file-5.41.0.tgz",
|
"resolved": "https://registry.npmjs.org/@awesome-cordova-plugins/file/-/file-5.41.0.tgz",
|
||||||
@@ -8549,6 +8564,11 @@
|
|||||||
"integrity": "sha512-FUHI6eEVeoz2VkxbF0P56QlUQLGzXcvw3i4xuXyM9gEct6Y+FA3Xzgl2pJTZcTg5wRqLWzN08kgNoHPkom15pw==",
|
"integrity": "sha512-FUHI6eEVeoz2VkxbF0P56QlUQLGzXcvw3i4xuXyM9gEct6Y+FA3Xzgl2pJTZcTg5wRqLWzN08kgNoHPkom15pw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"cordova-plugin-document-viewer": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cordova-plugin-document-viewer/-/cordova-plugin-document-viewer-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-LQZiWVU543rLJ0wYoawSdMrAfoxBLWCx8a2CuQjFeav4U9CN16QAh1VHetHaHicp5ZEwTC7Zq/0TNbak6A7bVw=="
|
||||||
|
},
|
||||||
"cordova-plugin-file": {
|
"cordova-plugin-file": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
"@angular/platform-browser-dynamic": "~12.1.2",
|
"@angular/platform-browser-dynamic": "~12.1.2",
|
||||||
"@angular/router": "~12.1.2",
|
"@angular/router": "~12.1.2",
|
||||||
"@awesome-cordova-plugins/core": "^5.40.0",
|
"@awesome-cordova-plugins/core": "^5.40.0",
|
||||||
|
"@awesome-cordova-plugins/document-viewer": "^5.41.0",
|
||||||
"@awesome-cordova-plugins/file": "^5.41.0",
|
"@awesome-cordova-plugins/file": "^5.41.0",
|
||||||
"@awesome-cordova-plugins/file-opener": "^5.41.0",
|
"@awesome-cordova-plugins/file-opener": "^5.41.0",
|
||||||
"@awesome-cordova-plugins/multiple-document-picker": "^5.40.0",
|
"@awesome-cordova-plugins/multiple-document-picker": "^5.40.0",
|
||||||
@@ -112,6 +113,7 @@
|
|||||||
"cordova": "^10.0.0",
|
"cordova": "^10.0.0",
|
||||||
"cordova-plugin-crop": "^0.4.0",
|
"cordova-plugin-crop": "^0.4.0",
|
||||||
"cordova-plugin-dbcopy": "git+https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git",
|
"cordova-plugin-dbcopy": "git+https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git",
|
||||||
|
"cordova-plugin-document-viewer": "^1.0.0",
|
||||||
"cordova-plugin-file": "^6.0.2",
|
"cordova-plugin-file": "^6.0.2",
|
||||||
"cordova-plugin-file-opener2": "^3.0.5",
|
"cordova-plugin-file-opener2": "^3.0.5",
|
||||||
"cordova-plugin-filepath": "^1.5.8",
|
"cordova-plugin-filepath": "^1.5.8",
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import {MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';
|
|||||||
import { NgxMatDateFormats, NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';
|
import { NgxMatDateFormats, NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';
|
||||||
import { Network } from '@ionic-native/network/ngx';
|
import { Network } from '@ionic-native/network/ngx';
|
||||||
import { MultipleDocumentsPicker } from '@awesome-cordova-plugins/multiple-document-picker/ngx';
|
import { MultipleDocumentsPicker } from '@awesome-cordova-plugins/multiple-document-picker/ngx';
|
||||||
|
import { DocumentViewer } from '@awesome-cordova-plugins/document-viewer/ngx';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -143,7 +144,8 @@ import { FirebaseX } from '@ionic-native/firebase-x/ngx'; */
|
|||||||
NgxImageCompressService,
|
NgxImageCompressService,
|
||||||
MultipleDocumentsPicker,
|
MultipleDocumentsPicker,
|
||||||
NgxExtendedPdfViewerModule,
|
NgxExtendedPdfViewerModule,
|
||||||
FileOpener
|
FileOpener,
|
||||||
|
DocumentViewer
|
||||||
|
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent],
|
bootstrap: [AppComponent],
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div *ngIf="type == 'application/pdf'">
|
<div *ngIf="type == 'application/pdf'">
|
||||||
|
|
||||||
<pdf-viewer [src]="base64Sanitize"
|
<pdf-viewer [src]="image"
|
||||||
[render-text]="true"
|
[render-text]="true"
|
||||||
[original-size]="false"
|
[original-size]="false"
|
||||||
style="width: 400px; height: 500px"
|
style="width: 400px; height: 500px"
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ import { VoiceRecorder, VoiceRecorderPlugin, RecordingData, GenericResponse, Cur
|
|||||||
import { Filesystem, Directory, Encoding } from '@capacitor/filesystem';
|
import { Filesystem, Directory, Encoding } from '@capacitor/filesystem';
|
||||||
import { DomSanitizer } from '@angular/platform-browser';
|
import { DomSanitizer } from '@angular/platform-browser';
|
||||||
import { MessageService } from 'src/app/services/chat/message.service';
|
import { MessageService } from 'src/app/services/chat/message.service';
|
||||||
|
import { File } from '@awesome-cordova-plugins/file/ngx';
|
||||||
|
import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-group-messages',
|
selector: 'app-group-messages',
|
||||||
@@ -80,8 +82,8 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
allowTyping = true;
|
allowTyping = true;
|
||||||
storedFileNames = [];
|
storedFileNames = [];
|
||||||
lastAudioRecorded = '';
|
lastAudioRecorded = '';
|
||||||
audioRecorded:any = "";
|
audioRecorded: any = "";
|
||||||
audioDownloaded:any = "";
|
audioDownloaded: any = "";
|
||||||
durationDisplay = '';
|
durationDisplay = '';
|
||||||
duration = 0;
|
duration = 0;
|
||||||
showAvatar = true;
|
showAvatar = true;
|
||||||
@@ -111,6 +113,8 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
private processesService: ProcessesService,
|
private processesService: ProcessesService,
|
||||||
private CameraService: CameraService,
|
private CameraService: CameraService,
|
||||||
private sanitiser: DomSanitizer,
|
private sanitiser: DomSanitizer,
|
||||||
|
private file: File,
|
||||||
|
private fileOpener: FileOpener,
|
||||||
) {
|
) {
|
||||||
this.loggedUserChat = authService.ValidatedUserChat['data'];
|
this.loggedUserChat = authService.ValidatedUserChat['data'];
|
||||||
this.isGroupCreated = true;
|
this.isGroupCreated = true;
|
||||||
@@ -224,7 +228,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
async getFile(fileName?:any){
|
async getFile(fileName?: any) {
|
||||||
const audioFile = await Filesystem.readFile({
|
const audioFile = await Filesystem.readFile({
|
||||||
path: fileName,
|
path: fileName,
|
||||||
directory: Directory.Data
|
directory: Directory.Data
|
||||||
@@ -254,14 +258,14 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
try {
|
try {
|
||||||
this.storage.get('recordData').then((recordData) => {
|
this.storage.get('recordData').then((recordData) => {
|
||||||
console.log(recordData);
|
console.log(recordData);
|
||||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
if (recordData?.value?.recordDataBase64.includes('data:audio')) {
|
||||||
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);
|
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);
|
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (error) {}
|
} catch (error) { }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -275,7 +279,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
this.recording = false;
|
this.recording = false;
|
||||||
VoiceRecorder.stopRecording().then(async (result: RecordingData) => {
|
VoiceRecorder.stopRecording().then(async (result: RecordingData) => {
|
||||||
console.log('==================================',result);
|
console.log('==================================', result);
|
||||||
|
|
||||||
this.recording = false;
|
this.recording = false;
|
||||||
if (result.value && result.value.recordDataBase64) {
|
if (result.value && result.value.recordDataBase64) {
|
||||||
@@ -283,8 +287,8 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
//console.log(recordData);
|
//console.log(recordData);
|
||||||
const fileName = new Date().getTime() + ".mp3";
|
const fileName = new Date().getTime() + ".mp3";
|
||||||
//Save file
|
//Save file
|
||||||
await this.storage.set('fileName',fileName)
|
await this.storage.set('fileName', fileName)
|
||||||
this.storage.set('recordData',result).then(() => {
|
this.storage.set('recordData', result).then(() => {
|
||||||
console.log('Audio recorded saved', result);
|
console.log('Audio recorded saved', result);
|
||||||
|
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
@@ -309,7 +313,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
async deleteRecording(){
|
async deleteRecording() {
|
||||||
this.storage.remove('fileName');
|
this.storage.remove('fileName');
|
||||||
this.storage.remove('recordData');
|
this.storage.remove('recordData');
|
||||||
|
|
||||||
@@ -444,17 +448,17 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
var byteArrays = new Array(slicesCount);
|
var byteArrays = new Array(slicesCount);
|
||||||
|
|
||||||
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
|
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
|
||||||
var begin = sliceIndex * sliceSize;
|
var begin = sliceIndex * sliceSize;
|
||||||
var end = Math.min(begin + sliceSize, bytesLength);
|
var end = Math.min(begin + sliceSize, bytesLength);
|
||||||
|
|
||||||
var bytes = new Array(end - begin);
|
var bytes = new Array(end - begin);
|
||||||
for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
|
for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
|
||||||
bytes[i] = byteCharacters[offset].charCodeAt(0);
|
bytes[i] = byteCharacters[offset].charCodeAt(0);
|
||||||
}
|
}
|
||||||
byteArrays[sliceIndex] = new Uint8Array(bytes);
|
byteArrays[sliceIndex] = new Uint8Array(bytes);
|
||||||
}
|
}
|
||||||
return new Blob(byteArrays, { type: contentType });
|
return new Blob(byteArrays, { type: contentType });
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendAudio(fileName) {
|
async sendAudio(fileName) {
|
||||||
|
|
||||||
@@ -463,35 +467,35 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
this.storage.get('recordData').then((recordData) => {
|
this.storage.get('recordData').then((recordData) => {
|
||||||
console.log(recordData);
|
console.log(recordData);
|
||||||
audioFile = recordData;
|
audioFile = recordData;
|
||||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
if (recordData?.value?.recordDataBase64.includes('data:audio')) {
|
||||||
this.audioRecorded = recordData?.value?.recordDataBase64;
|
this.audioRecorded = recordData?.value?.recordDataBase64;
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Converting base64 to blob
|
//Converting base64 to blob
|
||||||
const encodedData = btoa(this.audioRecorded);
|
const encodedData = btoa(this.audioRecorded);
|
||||||
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
||||||
console.log(blob)
|
console.log(blob)
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("blobFile", blob);
|
formData.append("blobFile", blob);
|
||||||
|
|
||||||
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
||||||
file: {
|
file: {
|
||||||
"type": "application/audio",
|
"type": "application/audio",
|
||||||
"msDuration":audioFile.value.msDuration,
|
"msDuration": audioFile.value.msDuration,
|
||||||
"mimeType":audioFile.value.mimeType,
|
"mimeType": audioFile.value.mimeType,
|
||||||
},
|
},
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": fileName ,
|
"title": fileName,
|
||||||
"title_link_download": true,
|
"title_link_download": true,
|
||||||
"type": "audio"
|
"type": "audio"
|
||||||
}],
|
}],
|
||||||
temporaryData: formData
|
temporaryData: formData
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
this.deleteRecording();
|
this.deleteRecording();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,37 +696,60 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async addFileToChat(types: typeof FileType[] ) {
|
async addFileToChat(types: typeof FileType[]) {
|
||||||
|
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
|
|
||||||
const file: any = await this.fileService.getFileFromDevice(types);
|
const file: any = await this.fileService.getFileFromDevice(types);
|
||||||
console.log('Add file', file)
|
|
||||||
/* const imageData = await this.fileToBase64Service.convert(file).then((filee) => {
|
|
||||||
console.log('Add file', filee)
|
|
||||||
}) */
|
|
||||||
const response = await fetch(file);
|
|
||||||
const blob = await response.blob();
|
|
||||||
console.log('Add file', blob)
|
|
||||||
|
|
||||||
const formData = new FormData();
|
console.log('Add file', JSON.stringify(await this.getBase64(file)))
|
||||||
formData.append("blobFile", blob);
|
|
||||||
|
|
||||||
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
if (file.type == "application/pdf") {
|
||||||
file: {
|
|
||||||
"type": file.type,
|
|
||||||
"guid": '',
|
|
||||||
},
|
|
||||||
attachments: [{
|
|
||||||
"title": file.name ,
|
|
||||||
"name": file.name ,
|
|
||||||
// "text": "description",
|
|
||||||
//"image_url": file.base64String, // rocketchat
|
|
||||||
"title_link_download": false,
|
|
||||||
}],
|
|
||||||
temporaryData: formData
|
|
||||||
})
|
|
||||||
|
|
||||||
|
const encodedData = btoa(JSON.stringify(await this.getBase64(file)));
|
||||||
|
const blob = this.base64toBlob(encodedData, 'application/pdf')
|
||||||
|
console.log('Add Blob file', blob)
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('blobFile', blob);
|
||||||
|
console.log(formData)
|
||||||
|
|
||||||
|
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
||||||
|
file: {
|
||||||
|
"type": file.type,
|
||||||
|
"guid": '',
|
||||||
|
},
|
||||||
|
attachments: [{
|
||||||
|
"title": file.name,
|
||||||
|
"name": file.name,
|
||||||
|
// "text": "description",
|
||||||
|
"title_link_download": false,
|
||||||
|
}],
|
||||||
|
temporaryData: formData
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log('File type invalid')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getFileReader(): FileReader {
|
||||||
|
const fileReader = new FileReader();
|
||||||
|
const zoneOriginalInstance = (fileReader as any)["__zone_symbol__originalInstance"];
|
||||||
|
return zoneOriginalInstance || fileReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
getBase64(file) {
|
||||||
|
var reader = this.getFileReader();
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
return new Promise(resolve => {
|
||||||
|
reader.onload = function () {
|
||||||
|
resolve(reader.result)
|
||||||
|
};
|
||||||
|
reader.onerror = function (error) {
|
||||||
|
console.log('Error: ', error);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -980,27 +1007,86 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
card.el.style['z-index'] = 11;
|
card.el.style['z-index'] = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b64toBlob(b64Data, contentType) {
|
||||||
|
contentType = contentType || '';
|
||||||
|
var sliceSize = 512;
|
||||||
|
b64Data = b64Data.replace(/^[^,]+,/, '');
|
||||||
|
b64Data = b64Data.replace(/\s/g, '');
|
||||||
|
var byteCharacters = window.atob(b64Data);
|
||||||
|
var byteArrays = [];
|
||||||
|
|
||||||
|
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
|
||||||
|
var slice = byteCharacters.slice(offset, offset + sliceSize);
|
||||||
|
|
||||||
|
var byteNumbers = new Array(slice.length);
|
||||||
|
for (var i = 0; i < slice.length; i++) {
|
||||||
|
byteNumbers[i] = slice.charCodeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
var byteArray = new Uint8Array(byteNumbers);
|
||||||
|
|
||||||
|
byteArrays.push(byteArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
var blob = new Blob(byteArrays, { type: contentType });
|
||||||
|
return blob;
|
||||||
|
}
|
||||||
|
|
||||||
|
openFile(pdfString, filename) {
|
||||||
|
const blob = this.b64toBlob(pdfString, 'application/pdf')
|
||||||
|
let pathFile = ''
|
||||||
|
const fileName = filename
|
||||||
|
const contentFile = blob
|
||||||
|
if (this.platform.is('ios')) {
|
||||||
|
pathFile = this.file.documentsDirectory
|
||||||
|
} else {
|
||||||
|
pathFile = this.file.externalRootDirectory
|
||||||
|
}
|
||||||
|
console.log(pdfString)
|
||||||
|
console.log(pathFile)
|
||||||
|
console.log(contentFile)
|
||||||
|
this.file
|
||||||
|
.writeFile(pathFile, fileName, contentFile, { replace: true })
|
||||||
|
.then(success => {
|
||||||
|
this.fileOpener
|
||||||
|
.open(pathFile + fileName, 'application/pdf')
|
||||||
|
.then(() => console.log('File is opened'))
|
||||||
|
.catch(e => console.log('Error opening file', e));
|
||||||
|
})
|
||||||
|
.catch(e => console.log('Error writing file', e))
|
||||||
|
}
|
||||||
|
|
||||||
downloadFileMsg(msg: MessageService) {
|
downloadFileMsg(msg: MessageService) {
|
||||||
msg.downloadFileMsg()
|
msg.downloadFileMsg()
|
||||||
}
|
}
|
||||||
|
|
||||||
async openPreview(msg: MessageService) {
|
async openPreview(msg: MessageService) {
|
||||||
|
|
||||||
if (!msg.attachments[0].image_url ||msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') {
|
if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') {
|
||||||
this.downloadFileMsg(msg)
|
this.downloadFileMsg(msg)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const modal = await this.modalController.create({
|
|
||||||
component: ViewMediaPage,
|
var str = msg.attachments[0].image_url;
|
||||||
cssClass: 'modal modal-desktop',
|
str = str.substring(1, ((str.length) - 1));
|
||||||
componentProps: {
|
|
||||||
image: msg.attachments[0].image_url,
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
||||||
type: msg.file.type,
|
|
||||||
username: msg.u.name,
|
const modal = await this.modalController.create({
|
||||||
_updatedAt: msg._updatedAt
|
component: ViewMediaPage,
|
||||||
}
|
cssClass: 'modal modal-desktop',
|
||||||
});
|
componentProps: {
|
||||||
modal.present();
|
image: str,
|
||||||
|
type: msg.file.type,
|
||||||
|
username: msg.u.name,
|
||||||
|
_updatedAt: msg._updatedAt
|
||||||
|
}
|
||||||
|
});
|
||||||
|
modal.present();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.openFile(str, msg.attachments[0].name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1009,7 +1095,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
console.log(msg);
|
console.log(msg);
|
||||||
if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {
|
if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {
|
||||||
this.downloadFileMsg(msg)
|
this.downloadFileMsg(msg)
|
||||||
} else {}
|
} else { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import { DomSanitizer } from '@angular/platform-browser';
|
|||||||
import { StringDecoder } from 'string_decoder';
|
import { StringDecoder } from 'string_decoder';
|
||||||
import { File } from '@awesome-cordova-plugins/file/ngx';
|
import { File } from '@awesome-cordova-plugins/file/ngx';
|
||||||
import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';
|
import { FileOpener } from '@awesome-cordova-plugins/file-opener/ngx';
|
||||||
|
import { DocumentViewer } from '@awesome-cordova-plugins/document-viewer/ngx';
|
||||||
|
|
||||||
|
|
||||||
const IMAGE_DIR = 'stored-images';
|
const IMAGE_DIR = 'stored-images';
|
||||||
@@ -137,6 +138,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
private file: File,
|
private file: File,
|
||||||
private fileOpener: FileOpener,
|
private fileOpener: FileOpener,
|
||||||
private sanitiser: DomSanitizer,
|
private sanitiser: DomSanitizer,
|
||||||
|
private document: DocumentViewer
|
||||||
) {
|
) {
|
||||||
this.loggedUser = authService.ValidatedUserChat['data'];
|
this.loggedUser = authService.ValidatedUserChat['data'];
|
||||||
this.roomId = this.navParams.get('roomId');
|
this.roomId = this.navParams.get('roomId');
|
||||||
@@ -772,82 +774,38 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
async addFileToChat(types: typeof FileType[]) {
|
async addFileToChat(types: typeof FileType[]) {
|
||||||
|
|
||||||
/* this.multipleDocumentsPicker.pick(2)
|
|
||||||
.then(async (res: any) => {
|
|
||||||
this.files = JSON.parse(res)
|
|
||||||
console.log('1 Add file', this.files[0].uri)
|
|
||||||
console.log('1 Add file', JSON.stringify(this.files[0].uri))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const downloadPath = (
|
|
||||||
this.platform.is('android')
|
|
||||||
) ? this.file.externalDataDirectory : this.file.documentsDirectory;
|
|
||||||
|
|
||||||
this.file.writeFile(downloadPath, 'YHaaa2.pdf', 'Eudes Inácio').then((fil)=> {
|
|
||||||
console.log('write file', fil)
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
this.fileToBase64('GS_FOLHETO_AUTOMOVEL_AC.pdf',this.files[0].uri).then(
|
|
||||||
(data) => console.log(data)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
const blob = new Blob([res])
|
|
||||||
console.log('Add Blob file', blob)
|
|
||||||
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append("blobFile", blob);
|
|
||||||
console.log(formData)
|
|
||||||
|
|
||||||
this.wsChatMethodsService.getDmRoom(this.roomId).send({
|
|
||||||
file: {
|
|
||||||
"type": 'application/pdf',
|
|
||||||
"guid": '',
|
|
||||||
},
|
|
||||||
attachments: [{
|
|
||||||
"title": 'pdf1',
|
|
||||||
"name": 'pdf1',
|
|
||||||
// "text": "description",
|
|
||||||
"title_link_download": false,
|
|
||||||
}],
|
|
||||||
temporaryData: formData
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch((error: any) => console.error(error)); */
|
|
||||||
|
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
|
|
||||||
const file: any = await this.fileService.getFileFromDevice(types);
|
const file: any = await this.fileService.getFileFromDevice(types);
|
||||||
|
|
||||||
console.log('Add file', JSON.stringify(await this.getBase64(file)))
|
console.log('Add file', JSON.stringify(await this.getBase64(file)))
|
||||||
|
|
||||||
const encodedData = btoa(JSON.stringify(await this.getBase64(file)));
|
if (file.type == "application/pdf") {
|
||||||
const blob = this.base64toBlob(encodedData, 'application/pdf')
|
|
||||||
console.log('Add Blob file', blob)
|
|
||||||
//console.log('Add Blob file', await this.blobToBase64(blob))
|
|
||||||
//console.log('Add Blob file', await this.fileToByteArray(file))
|
|
||||||
|
|
||||||
|
const encodedData = btoa(JSON.stringify(await this.getBase64(file)));
|
||||||
|
const blob = this.base64toBlob(encodedData, 'application/pdf')
|
||||||
|
console.log('Add Blob file', blob)
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('blobFile', blob);
|
||||||
|
console.log(formData)
|
||||||
|
|
||||||
const formData = new FormData();
|
this.wsChatMethodsService.getDmRoom(roomId).send({
|
||||||
formData.append('blobFile', blob);
|
file: {
|
||||||
console.log(formData)
|
"type": file.type,
|
||||||
|
"guid": '',
|
||||||
this.wsChatMethodsService.getDmRoom(roomId).send({
|
},
|
||||||
file: {
|
attachments: [{
|
||||||
"type": file.type,
|
"title": file.name,
|
||||||
"guid": '',
|
"name": file.name,
|
||||||
},
|
// "text": "description",
|
||||||
attachments: [{
|
"title_link_download": false,
|
||||||
"title": file.name,
|
}],
|
||||||
"name": file.name,
|
temporaryData: formData
|
||||||
// "text": "description",
|
});
|
||||||
"title_link_download": false,
|
} else {
|
||||||
}],
|
console.log('File type invalid')
|
||||||
temporaryData: formData
|
}
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -867,34 +825,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileToByteArray(file) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
let reader = this.getFileReader();
|
|
||||||
//var file = new File([filepath], filename);
|
|
||||||
reader.readAsBinaryString(file);
|
|
||||||
reader.onloadend = (evt) => {
|
|
||||||
console.log(evt.target.result)
|
|
||||||
resolve(evt.target.result); // Convert data to base64
|
|
||||||
reader.readAsDataURL(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
reject(e);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
blobToBase64 = blob => {
|
|
||||||
const reader = this.getFileReader();
|
|
||||||
reader.readAsDataURL(blob);
|
|
||||||
return new Promise(resolve => {
|
|
||||||
reader.onloadend = () => {
|
|
||||||
resolve(reader.result);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
async openChatOptions(ev?: any) {
|
async openChatOptions(ev?: any) {
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
console.log('MOBILE CHAT OPTION', this.members);
|
console.log('MOBILE CHAT OPTION', this.members);
|
||||||
@@ -1016,82 +946,47 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
|
|
||||||
downloadFileMsg(msg: MessageService) {
|
downloadFileMsg(msg: MessageService) {
|
||||||
console.log('FILE TYPE', msg.file.type)
|
msg.downloadFileMsg();
|
||||||
this.downloadFile = "";
|
|
||||||
//if (msg.file.type == "application/img") {
|
|
||||||
this.AttachmentsService.downloadFile(msg.file.guid).subscribe(async (event) => {
|
|
||||||
console.log('FILE TYPE 22', msg.file.guid)
|
|
||||||
var name = msg.file.guid;
|
|
||||||
|
|
||||||
if (event.type === HttpEventType.DownloadProgress) {
|
|
||||||
this.downloadProgess = Math.round((100 * event.loaded) / event.total);
|
|
||||||
console.log(this.downloadProgess)
|
|
||||||
console.log('FILE TYPE 33', msg.file.type)
|
|
||||||
} else if (event.type === HttpEventType.Response) {
|
|
||||||
if (msg.file.type == "application/img") {
|
|
||||||
this.downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
|
||||||
} else if (msg.file.type == "application/pdf") {
|
|
||||||
//console.log('TRY THIS LIBRARY ',fromByteArray(event.body));
|
|
||||||
this.downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');
|
|
||||||
//this.downloadFile = event.body
|
|
||||||
console.log(this.downloadFile)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg.attachments[0] = {
|
|
||||||
image_url: this.downloadFile,
|
|
||||||
name: msg.attachments[0].name,
|
|
||||||
title: msg.attachments[0].title,
|
|
||||||
title_link_download: msg.attachments[0].title_link_download,
|
|
||||||
ts: msg.attachments[0].ts
|
|
||||||
}
|
|
||||||
this.sqlservice.updateChatMsg(msg._id, this.downloadFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_arrayBufferToBase64(buffer) {
|
b64toBlob(b64Data, contentType) {
|
||||||
var binary = '';
|
|
||||||
var bytes = new Uint8Array(buffer);
|
|
||||||
var len = bytes.byteLength;
|
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
binary += String.fromCharCode(bytes[i]);
|
|
||||||
}
|
|
||||||
return window.btoa(binary);
|
|
||||||
}
|
|
||||||
|
|
||||||
b64toBlob(b64Data, contentType, sliceSize) {
|
|
||||||
contentType = contentType || '';
|
contentType = contentType || '';
|
||||||
sliceSize = sliceSize || 512;
|
var sliceSize = 512;
|
||||||
const encodedData = btoa(b64Data);
|
b64Data = b64Data.replace(/^[^,]+,/, '');
|
||||||
var byteCharacters = atob(encodedData);
|
b64Data = b64Data.replace(/\s/g, '');
|
||||||
|
var byteCharacters = window.atob(b64Data);
|
||||||
var byteArrays = [];
|
var byteArrays = [];
|
||||||
|
|
||||||
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
|
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
|
||||||
var slice = byteCharacters.slice(offset, offset + sliceSize);
|
var slice = byteCharacters.slice(offset, offset + sliceSize);
|
||||||
|
|
||||||
var byteNumbers = new Array(slice.length);
|
var byteNumbers = new Array(slice.length);
|
||||||
for (var i = 0; i < slice.length; i++) {
|
for (var i = 0; i < slice.length; i++) {
|
||||||
byteNumbers[i] = slice.charCodeAt(i);
|
byteNumbers[i] = slice.charCodeAt(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
var byteArray = new Uint8Array(byteNumbers);
|
var byteArray = new Uint8Array(byteNumbers);
|
||||||
|
|
||||||
byteArrays.push(byteArray);
|
byteArrays.push(byteArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
var blob = new Blob(byteArrays, { type: contentType });
|
var blob = new Blob(byteArrays, { type: contentType });
|
||||||
return blob;
|
return blob;
|
||||||
}
|
}
|
||||||
|
|
||||||
getUserDataSheet(pdfString) {
|
openFile(pdfString, filename) {
|
||||||
const blob = this.b64toBlob(pdfString, 'application/pdf', 512)
|
const blob = this.b64toBlob(pdfString, 'application/pdf')
|
||||||
let pathFile = ''
|
let pathFile = ''
|
||||||
const fileName = 'myPdf.pdf'
|
const fileName = filename
|
||||||
const contentFile = blob
|
const contentFile = blob
|
||||||
if (this.platform.is('ios')) {
|
if (this.platform.is('ios')) {
|
||||||
pathFile = this.file.documentsDirectory
|
pathFile = this.file.documentsDirectory
|
||||||
} else {
|
} else {
|
||||||
pathFile = this.file.externalRootDirectory
|
pathFile = this.file.externalRootDirectory
|
||||||
}
|
}
|
||||||
|
console.log(pdfString)
|
||||||
|
console.log(pathFile)
|
||||||
|
console.log(contentFile)
|
||||||
this.file
|
this.file
|
||||||
.writeFile(pathFile, fileName, contentFile, { replace: true })
|
.writeFile(pathFile, fileName, contentFile, { replace: true })
|
||||||
.then(success => {
|
.then(success => {
|
||||||
@@ -1115,7 +1010,24 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
var str = msg.attachments[0].image_url;
|
var str = msg.attachments[0].image_url;
|
||||||
str = str.substring(1, ((str.length) - 1));
|
str = str.substring(1, ((str.length) - 1));
|
||||||
|
|
||||||
this.getUserDataSheet(str);
|
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
||||||
|
|
||||||
|
const modal = await this.modalController.create({
|
||||||
|
component: ViewMediaPage,
|
||||||
|
cssClass: 'modal modal-desktop',
|
||||||
|
componentProps: {
|
||||||
|
image: str,
|
||||||
|
type: msg.file.type,
|
||||||
|
username: msg.u.name,
|
||||||
|
_updatedAt: msg._updatedAt
|
||||||
|
}
|
||||||
|
});
|
||||||
|
modal.present();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.openFile(str, msg.attachments[0].name);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -235,7 +235,8 @@ export class MessageService {
|
|||||||
downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
||||||
} else if (this.file.type === 'application/pdf') {
|
} else if (this.file.type === 'application/pdf') {
|
||||||
|
|
||||||
downloadFile = event.body as any;
|
downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');
|
||||||
|
console.log(downloadFile)
|
||||||
} else if (this.file.type == 'application/audio') {
|
} else if (this.file.type == 'application/audio') {
|
||||||
downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');
|
downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,9 +217,9 @@
|
|||||||
<ion-fab-button title="Nova Reunião" (click)="bookMeeting()" color="light">
|
<ion-fab-button title="Nova Reunião" (click)="bookMeeting()" color="light">
|
||||||
<ion-icon name="calendar"></ion-icon>
|
<ion-icon name="calendar"></ion-icon>
|
||||||
</ion-fab-button>
|
</ion-fab-button>
|
||||||
<!-- <ion-fab-button title="Adicionar Documento" (click)="addFile()" color="light">
|
<ion-fab-button title="Adicionar Documento" (click)="addFile()" color="light">
|
||||||
<ion-icon name="document"></ion-icon>
|
<ion-icon name="document"></ion-icon>
|
||||||
</ion-fab-button> -->
|
</ion-fab-button>
|
||||||
<ion-fab-button title="Anexar Fotografia" (click)="addImage()" color="light">
|
<ion-fab-button title="Anexar Fotografia" (click)="addImage()" color="light">
|
||||||
<ion-icon name="image"></ion-icon>
|
<ion-icon name="image"></ion-icon>
|
||||||
</ion-fab-button>
|
</ion-fab-button>
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
allowTyping = true;
|
allowTyping = true;
|
||||||
storedFileNames = [];
|
storedFileNames = [];
|
||||||
lastAudioRecorded = '';
|
lastAudioRecorded = '';
|
||||||
audioRecorded:any = "";
|
audioRecorded: any = "";
|
||||||
audioDownloaded:any = "";
|
audioDownloaded: any = "";
|
||||||
durationDisplay = '';
|
durationDisplay = '';
|
||||||
duration = 0;
|
duration = 0;
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
|
|
||||||
this.showAvatar = false
|
this.showAvatar = false
|
||||||
|
|
||||||
setTimeout(()=>{
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
this.showAvatar = true
|
this.showAvatar = true
|
||||||
}, 50)
|
}, 50)
|
||||||
@@ -152,7 +152,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.loggedUser=this.loggedUserChat;
|
this.loggedUser = this.loggedUserChat;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.getRoomInfo();
|
this.getRoomInfo();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
@@ -260,7 +260,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
async getFile(fileName?:any){
|
async getFile(fileName?: any) {
|
||||||
const audioFile = await Filesystem.readFile({
|
const audioFile = await Filesystem.readFile({
|
||||||
path: fileName,
|
path: fileName,
|
||||||
directory: Directory.Data
|
directory: Directory.Data
|
||||||
@@ -278,14 +278,14 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
|
|
||||||
this.storage.get('recordData').then((recordData) => {
|
this.storage.get('recordData').then((recordData) => {
|
||||||
console.log(recordData);
|
console.log(recordData);
|
||||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
if (recordData?.value?.recordDataBase64.includes('data:audio')) {
|
||||||
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);
|
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(recordData?.value?.recordDataBase64);
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);
|
this.audioRecorded = this.sanitiser.bypassSecurityTrustResourceUrl(`data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (error) {}
|
} catch (error) { }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -317,8 +317,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
//console.log(recordData);
|
//console.log(recordData);
|
||||||
const fileName = new Date().getTime() + ".mp3";
|
const fileName = new Date().getTime() + ".mp3";
|
||||||
//Save file
|
//Save file
|
||||||
this.storage.set('fileName',fileName);
|
this.storage.set('fileName', fileName);
|
||||||
this.storage.set('recordData',result).then(() => {
|
this.storage.set('recordData', result).then(() => {
|
||||||
console.log('Audio recorded saved');
|
console.log('Audio recorded saved');
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -328,7 +328,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteRecording(){
|
async deleteRecording() {
|
||||||
this.storage.remove('fileName');
|
this.storage.remove('fileName');
|
||||||
this.storage.remove('recordData');
|
this.storage.remove('recordData');
|
||||||
|
|
||||||
@@ -426,17 +426,17 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
var byteArrays = new Array(slicesCount);
|
var byteArrays = new Array(slicesCount);
|
||||||
|
|
||||||
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
|
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
|
||||||
var begin = sliceIndex * sliceSize;
|
var begin = sliceIndex * sliceSize;
|
||||||
var end = Math.min(begin + sliceSize, bytesLength);
|
var end = Math.min(begin + sliceSize, bytesLength);
|
||||||
|
|
||||||
var bytes = new Array(end - begin);
|
var bytes = new Array(end - begin);
|
||||||
for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
|
for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
|
||||||
bytes[i] = byteCharacters[offset].charCodeAt(0);
|
bytes[i] = byteCharacters[offset].charCodeAt(0);
|
||||||
}
|
}
|
||||||
byteArrays[sliceIndex] = new Uint8Array(bytes);
|
byteArrays[sliceIndex] = new Uint8Array(bytes);
|
||||||
}
|
}
|
||||||
return new Blob(byteArrays, { type: contentType });
|
return new Blob(byteArrays, { type: contentType });
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendAudio(fileName) {
|
async sendAudio(fileName) {
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
@@ -444,36 +444,36 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
this.storage.get('recordData').then((recordData) => {
|
this.storage.get('recordData').then((recordData) => {
|
||||||
console.log(recordData);
|
console.log(recordData);
|
||||||
audioFile = recordData;
|
audioFile = recordData;
|
||||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
if (recordData?.value?.recordDataBase64.includes('data:audio')) {
|
||||||
this.audioRecorded = recordData?.value?.recordDataBase64;
|
this.audioRecorded = recordData?.value?.recordDataBase64;
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Converting base64 to blob
|
//Converting base64 to blob
|
||||||
const encodedData = btoa(this.audioRecorded);
|
const encodedData = btoa(this.audioRecorded);
|
||||||
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
||||||
console.log(blob)
|
console.log(blob)
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("blobFile", blob);
|
formData.append("blobFile", blob);
|
||||||
|
|
||||||
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
||||||
file: {
|
file: {
|
||||||
"type": "application/audio",
|
"type": "application/audio",
|
||||||
"msDuration":audioFile.value.msDuration,
|
"msDuration": audioFile.value.msDuration,
|
||||||
"mimeType":audioFile.value.mimeType,
|
"mimeType": audioFile.value.mimeType,
|
||||||
},
|
},
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": fileName ,
|
"title": fileName,
|
||||||
"title_link_download": true,
|
"title_link_download": true,
|
||||||
"type": "audio"
|
"type": "audio"
|
||||||
}],
|
}],
|
||||||
temporaryData: formData
|
temporaryData: formData
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
this.deleteRecording();
|
this.deleteRecording();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -724,7 +724,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
//const imageData = await this.fileToBase64Service.convert(file)
|
//const imageData = await this.fileToBase64Service.convert(file)
|
||||||
//console.log('ADDFILECHAT', imageData)
|
//console.log('ADDFILECHAT', imageData)
|
||||||
|
|
||||||
const response = await fetch('data:image/jpeg;base64,'+ file.base64String!);
|
const response = await fetch('data:image/jpeg;base64,' + file.base64String!);
|
||||||
const blob = await response.blob();
|
const blob = await response.blob();
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
@@ -737,8 +737,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
},
|
},
|
||||||
temporaryData: formData,
|
temporaryData: formData,
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": file.path ,
|
"title": file.path,
|
||||||
"image_url": 'data:image/jpeg;base64,' +file.base64String,
|
"image_url": 'data:image/jpeg;base64,' + file.base64String,
|
||||||
"text": "description",
|
"text": "description",
|
||||||
"title_link_download": false,
|
"title_link_download": false,
|
||||||
}]
|
}]
|
||||||
@@ -752,7 +752,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
const image = await this.CameraService.takePicture();
|
const image = await this.CameraService.takePicture();
|
||||||
await this.fileService.saveImage(image)
|
await this.fileService.saveImage(image)
|
||||||
const lastphoto: any = await this.fileService.loadFiles();
|
const lastphoto: any = await this.fileService.loadFiles();
|
||||||
const { capturedImage, capturedImageTitle} = await this.fileService.loadFileData(lastphoto);
|
const { capturedImage, capturedImageTitle } = await this.fileService.loadFileData(lastphoto);
|
||||||
|
|
||||||
const base64 = await fetch(capturedImage);
|
const base64 = await fetch(capturedImage);
|
||||||
const blob = await base64.blob();
|
const blob = await base64.blob();
|
||||||
@@ -765,7 +765,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
"guid": ''
|
"guid": ''
|
||||||
},
|
},
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": capturedImageTitle ,
|
"title": capturedImageTitle,
|
||||||
"image_url": capturedImage,
|
"image_url": capturedImage,
|
||||||
"text": "description",
|
"text": "description",
|
||||||
"title_link_download": false,
|
"title_link_download": false,
|
||||||
@@ -796,13 +796,13 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
await modal.present();
|
await modal.present();
|
||||||
modal.onDidDismiss().then(async res=>{
|
modal.onDidDismiss().then(async res => {
|
||||||
const data = res.data;
|
const data = res.data;
|
||||||
|
|
||||||
if(data.selected) {
|
if (data.selected) {
|
||||||
|
|
||||||
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
||||||
file:{
|
file: {
|
||||||
"name": res.data.selected.Assunto,
|
"name": res.data.selected.Assunto,
|
||||||
"type": "application/webtrix",
|
"type": "application/webtrix",
|
||||||
"ApplicationId": res.data.selected.ApplicationType,
|
"ApplicationId": res.data.selected.ApplicationType,
|
||||||
@@ -828,7 +828,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
async addFileToChatMobile(types: typeof FileType[] ) {
|
async addFileToChatMobile(types: typeof FileType[]) {
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
|
|
||||||
const file = await Camera.getPhoto({
|
const file = await Camera.getPhoto({
|
||||||
@@ -841,7 +841,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
//const imageData = await this.fileToBase64Service.convert(file)
|
//const imageData = await this.fileToBase64Service.convert(file)
|
||||||
//console.log('ADDFILECHAT', imageData)
|
//console.log('ADDFILECHAT', imageData)
|
||||||
|
|
||||||
const response = await fetch('data:image/jpeg;base64,'+ file.base64String!);
|
const response = await fetch('data:image/jpeg;base64,' + file.base64String!);
|
||||||
const blob = await response.blob();
|
const blob = await response.blob();
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
@@ -854,8 +854,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
},
|
},
|
||||||
temporaryData: formData,
|
temporaryData: formData,
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": file.path ,
|
"title": file.path,
|
||||||
"image_url": 'data:image/jpeg;base64,' +file.base64String,
|
"image_url": 'data:image/jpeg;base64,' + file.base64String,
|
||||||
"text": "description",
|
"text": "description",
|
||||||
"title_link_download": false,
|
"title_link_download": false,
|
||||||
}]
|
}]
|
||||||
@@ -864,39 +864,38 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async addFileToChat(types: typeof FileType[] ) {
|
async addFileToChat(types: typeof FileType[]) {
|
||||||
|
|
||||||
const roomId = this.roomId
|
const roomId = this.roomId
|
||||||
|
|
||||||
const file: any = await this.fileService.getFileFromDevice(types);
|
const file: any = await this.fileService.getFileFromDevice(types);
|
||||||
console.log('Add file', file)
|
console.log('Add file', file)
|
||||||
/* const imageData = await this.fileToBase64Service.convert(file).then((filee) => {
|
|
||||||
console.log('Add file', filee)
|
|
||||||
}) */
|
|
||||||
const blob = new Blob([file],{type: file.type})
|
|
||||||
console.log('Add file', blob)
|
|
||||||
|
|
||||||
const formData = new FormData();
|
if (file.type == "application/pdf") {
|
||||||
formData.append("blobFile", blob);
|
|
||||||
|
const blob = new Blob([file], { type: file.type })
|
||||||
|
console.log('Add file', blob)
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("blobFile", blob);
|
||||||
|
|
||||||
let pdfBase64;
|
|
||||||
this.blobToBase64(blob).then(res => {
|
|
||||||
console.log('Base64 pdf', res);
|
|
||||||
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
this.wsChatMethodsService.getGroupRoom(roomId).send({
|
||||||
file: {
|
file: {
|
||||||
"type": file.type,
|
"type": file.type,
|
||||||
"guid": '',
|
"guid": '',
|
||||||
},
|
},
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": file.name ,
|
"title": file.name,
|
||||||
"name": file.name ,
|
"name": file.name,
|
||||||
"image_url": res,
|
/* "image_url": res, */
|
||||||
// "text": "description",
|
// "text": "description",
|
||||||
"title_link_download": false,
|
"title_link_download": false,
|
||||||
}],
|
}],
|
||||||
temporaryData: formData
|
temporaryData: formData
|
||||||
})
|
})
|
||||||
});
|
} else {
|
||||||
|
console.log('File type invalid')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -955,7 +954,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
await modal.present();
|
await modal.present();
|
||||||
modal.onDidDismiss().then( async (res) => {
|
modal.onDidDismiss().then(async (res) => {
|
||||||
console.log(res['data']);
|
console.log(res['data']);
|
||||||
const roomId = this.roomId;
|
const roomId = this.roomId;
|
||||||
|
|
||||||
@@ -999,15 +998,19 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
|
|
||||||
async openPreview(msg) {
|
async openPreview(msg) {
|
||||||
|
|
||||||
if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '' ) {
|
if (!msg.attachments[0].image_url || msg.attachments[0].image_url === null || msg.attachments[0].image_url === '') {
|
||||||
this.downloadFileMsg(msg)
|
this.downloadFileMsg(msg)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
var str = msg.attachments[0].image_url;
|
||||||
|
str = str.substring(1, ((str.length) - 1));
|
||||||
|
|
||||||
const modal = await this.modalController.create({
|
const modal = await this.modalController.create({
|
||||||
component: ViewMediaPage,
|
component: ViewMediaPage,
|
||||||
cssClass: 'modal modal-desktop',
|
cssClass: 'modal modal-desktop',
|
||||||
componentProps: {
|
componentProps: {
|
||||||
image: msg.attachments[0].image_url,
|
image: str,
|
||||||
type: msg.file.type,
|
type: msg.file.type,
|
||||||
username: msg.u.name,
|
username: msg.u.name,
|
||||||
_updatedAt: msg._updatedAt
|
_updatedAt: msg._updatedAt
|
||||||
@@ -1022,7 +1025,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
|
|||||||
console.log(msg);
|
console.log(msg);
|
||||||
if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {
|
if (!msg.attachments[0].title_link || msg.attachments[0].title_link === null || msg.attachments[0].title_link === '') {
|
||||||
this.downloadFileMsg(msg)
|
this.downloadFileMsg(msg)
|
||||||
} else {}
|
} else { }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,9 +198,9 @@
|
|||||||
<ion-fab-button title="Nova Reunião" (click)="bookMeeting()" color="light">
|
<ion-fab-button title="Nova Reunião" (click)="bookMeeting()" color="light">
|
||||||
<ion-icon name="calendar"></ion-icon>
|
<ion-icon name="calendar"></ion-icon>
|
||||||
</ion-fab-button>
|
</ion-fab-button>
|
||||||
<!-- <ion-fab-button title="Adicionar Documento" (click)="addFile()" color="light">
|
<ion-fab-button title="Adicionar Documento" (click)="addFile()" color="light">
|
||||||
<ion-icon name="document"></ion-icon>
|
<ion-icon name="document"></ion-icon>
|
||||||
</ion-fab-button> -->
|
</ion-fab-button>
|
||||||
<ion-fab-button title="Anexar Fotografia" (click)="addImage()" color="light">
|
<ion-fab-button title="Anexar Fotografia" (click)="addImage()" color="light">
|
||||||
<ion-icon name="image"></ion-icon>
|
<ion-icon name="image"></ion-icon>
|
||||||
</ion-fab-button>
|
</ion-fab-button>
|
||||||
|
|||||||
@@ -375,31 +375,31 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
if (recordData.value.recordDataBase64.includes('data:audio')) {
|
if (recordData.value.recordDataBase64.includes('data:audio')) {
|
||||||
this.audioRecorded = recordData.value.recordDataBase64;
|
this.audioRecorded = recordData.value.recordDataBase64;
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
||||||
}
|
}
|
||||||
//Converting base64 to blob
|
//Converting base64 to blob
|
||||||
const encodedData = btoa(this.audioRecorded);
|
const encodedData = btoa(this.audioRecorded);
|
||||||
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
||||||
console.log(blob)
|
console.log(blob)
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("blobFile", blob);
|
formData.append("blobFile", blob);
|
||||||
|
|
||||||
this.wsChatMethodsService.getDmRoom(roomId).send({
|
this.wsChatMethodsService.getDmRoom(roomId).send({
|
||||||
file: {
|
file: {
|
||||||
"type": "application/audio",
|
"type": "application/audio",
|
||||||
"msDuration": audioFile.value.msDuration,
|
"msDuration": audioFile.value.msDuration,
|
||||||
"mimeType": audioFile.value.mimeType,
|
"mimeType": audioFile.value.mimeType,
|
||||||
},
|
},
|
||||||
attachments: [{
|
attachments: [{
|
||||||
"title": fileName,
|
"title": fileName,
|
||||||
"title_link_download": true,
|
"title_link_download": true,
|
||||||
"type": "audio"
|
"type": "audio"
|
||||||
}],
|
}],
|
||||||
temporaryData: formData
|
temporaryData: formData
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
this.deleteRecording();
|
this.deleteRecording();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -768,19 +768,18 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
|
|
||||||
const file: any = await this.fileService.getFileFromDevice(types);
|
const file: any = await this.fileService.getFileFromDevice(types);
|
||||||
|
|
||||||
console.log('Add file', file)
|
if (file.type == "application/pdf") {
|
||||||
/* const imageData = await this.fileToBase64Service.convert(file).then((filee) => {
|
|
||||||
console.log('Add file', filee)
|
|
||||||
}) */
|
|
||||||
const blob = new Blob([file], { type: file.type })
|
|
||||||
console.log('Add file', blob)
|
|
||||||
|
|
||||||
const formData = new FormData();
|
console.log('Add file', file)
|
||||||
formData.append("blobFile", blob);
|
/* const imageData = await this.fileToBase64Service.convert(file).then((filee) => {
|
||||||
|
console.log('Add file', filee)
|
||||||
|
}) */
|
||||||
|
const blob = new Blob([file], { type: file.type })
|
||||||
|
console.log('Add file', blob)
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("blobFile", blob);
|
||||||
|
|
||||||
let pdfBase64;
|
|
||||||
this.blobToBase64(blob).then(res => {
|
|
||||||
console.log('Base64 pdf', res);
|
|
||||||
this.wsChatMethodsService.getDmRoom(roomId).send({
|
this.wsChatMethodsService.getDmRoom(roomId).send({
|
||||||
file: {
|
file: {
|
||||||
"type": file.type,
|
"type": file.type,
|
||||||
@@ -795,7 +794,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
}],
|
}],
|
||||||
temporaryData: formData
|
temporaryData: formData
|
||||||
})
|
})
|
||||||
});
|
|
||||||
|
} else {
|
||||||
|
console.log('File type invalid')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -903,44 +905,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
|
|
||||||
|
|
||||||
downloadFileMsg(msg: MessageService) {
|
downloadFileMsg(msg: MessageService) {
|
||||||
console.log('FILE TYPE', msg.file.type)
|
msg.downloadFileMsg()
|
||||||
this.downloadFile = "";
|
|
||||||
//if (msg.file.type == "application/img") {
|
|
||||||
this.AttachmentsService.downloadFile(msg.file.guid).subscribe(async (event) => {
|
|
||||||
console.log('FILE TYPE 22', msg.file.guid)
|
|
||||||
var name = msg.file.guid;
|
|
||||||
|
|
||||||
if (event.type === HttpEventType.DownloadProgress) {
|
|
||||||
//this.downloadProgess = Math.round((100 * event.loaded) / event.total);
|
|
||||||
console.log('FILE TYPE 33', msg.file.type)
|
|
||||||
} else if (event.type === HttpEventType.Response) {
|
|
||||||
if (msg.file.type == "application/img") {
|
|
||||||
this.downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
|
||||||
} else if (msg.file.type === 'application/pdf') {
|
|
||||||
|
|
||||||
this.downloadFile = new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '');
|
|
||||||
//console.log(this._arrayBufferToBase64(event.body))
|
|
||||||
console.log(eval(this.downloadFile))
|
|
||||||
}
|
|
||||||
|
|
||||||
msg.attachments[0] = {
|
|
||||||
image_url: this.downloadFile,
|
|
||||||
name: msg.attachments[0].name,
|
|
||||||
title: msg.attachments[0].title,
|
|
||||||
title_link_download: msg.attachments[0].title_link_download,
|
|
||||||
ts: msg.attachments[0].ts
|
|
||||||
}
|
|
||||||
|
|
||||||
// save the changes to the storage
|
|
||||||
//msg.save()
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pdfPreview() {
|
pdfPreview() {
|
||||||
|
|||||||