From bec08b56be02db1f39b4185eb7ee0c9bc3e97969 Mon Sep 17 00:00:00 2001 From: Tha_14 Date: Thu, 22 Feb 2024 23:56:53 +0200 Subject: [PATCH] v1.5.0 Release --- .circleci/config.yml | 18 + .gitattributes | 1 + .github/FUNDING.yml | 1 + .github/ISSUE_TEMPLATE/bug_report.md | 32 + .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.md | 26 + .github/stale.yml | 20 + .github/workflows/change_log.yml | 57 ++ .github/workflows/nightly.yml | 95 ++ .github/workflows/pull_request.yml | 77 ++ .github/workflows/release.yml | 77 ++ .github/workflows/upload_release.yml | 45 + .gitignore | 44 + .travis.yml | 6 + Antidote.xcodeproj/project.pbxproj | 103 ++- Antidote/AddFriendController.swift | 2 +- Antidote/AppDelegate.swift | 32 +- Antidote/ChatInputViewManager.swift | 4 - Antidote/ChatPrivateController.swift | 175 ++-- Antidote/FriendCardController.swift | 55 +- Antidote/FriendListController.swift | 2 +- Antidote/LoginCoordinator.swift | 2 +- Antidote/ProfileMainController.swift | 58 +- Antidote/SettingsMainController.swift | 12 +- Antidote/UserDefaultsManager.swift | 4 +- .../Submanagers/OCTSubmanagerChatsImpl.m | 26 +- .../objcTox/Classes/Public/Manager/nodes.json | 818 ++++++------------ 27 files changed, 968 insertions(+), 825 deletions(-) create mode 100644 .circleci/config.yml create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/stale.yml create mode 100644 .github/workflows/change_log.yml create mode 100644 .github/workflows/nightly.yml create mode 100644 .github/workflows/pull_request.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/upload_release.yml create mode 100644 .gitignore create mode 100644 .travis.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..2955628 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,18 @@ +--- +version: 2 + +workflows: + version: 2 + build_linux: + jobs: + - build + +jobs: + build: + docker: + - image: ubuntu:bionic + + steps: + - run: pwd; ls -al; id -a + + diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4712d86 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.strings diff=localizablestrings diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..e5f64f0 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ["https://liberapay.com/zoff/donate" , "https://blockstream.info/address/1TRifA7eNLHZEcCTj43eYVWHBbLqTuXkS" , "https://buy.stripe.com/6oE7t716E53c3AIdQQ"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..cfeee0a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,32 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Your system information:** + - Antidote Version: [1.4.0] + - App from App Store / Testflight / Self compiled / other: [App Store] + - IOS Version: [IOS 13] + - Device: + +**Add screenshots, if possible** + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..2889b54 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,26 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Your system information:** + - Antidote Version: [1.4.0] + - App from App Store / Testflight / Self compiled / other: [App Store] + - IOS Version: [IOS 13] + - Device: + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..5a6d635 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,20 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 90 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 30 +# Issues with these labels will never be considered stale +exemptLabels: + - bug + - security +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs in the next 30 days. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false +# Limit to only `issues` or `pulls` +only: issues + diff --git a/.github/workflows/change_log.yml b/.github/workflows/change_log.yml new file mode 100644 index 0000000..229c3c6 --- /dev/null +++ b/.github/workflows/change_log.yml @@ -0,0 +1,57 @@ +name: Generate Changelog + +on: + release: + types: [published, edited] + workflow_dispatch: + inputs: + version: + description: dummy + default: dummy + +defaults: + run: + shell: bash + +jobs: + gen-changelog: + runs-on: ubuntu-latest + environment: genlog_gen_token + steps: + - uses: actions/checkout@v3 + + - name: install pkgs + run: | + export DEBIAN_FRONTEND=noninteractive + sudo apt update && sudo apt install -y zip grep sudo ruby rubygems git ssh ruby-dev gcc make + sudo $(which gem) install specific_install + + - name: install github-changelog-generator + run: | + git clone https://github.com/ameir/github-changelog-generator.git -b v1.15.2-fixes + cd github-changelog-generator/ + sudo $(which gem) build github_changelog_generator.gemspec + sudo $(which gem) install -N github_changelog_generator-1.15.2.gem + + - name: run github-changelog-generator + env: + CHANGELOG_GEN_TOKEN: ${{ secrets.CHANGELOG_GEN_TOKEN }} + run: | + pwd + $(which ruby) $(which github_changelog_generator) -u Zoxcore -p Antidote \ + --exclude-tags "1.0.0-rc.1,1.0.0-rc.2,1.0.0-rc.3,1.0.0-rc.4,1.1.0,1.2.0,1.2.0-build-2,1.3.0,1.3.1,1.3.2,1.3.3,1.3.4,1.3.5,,0.1,0.10.0,0.10.1,0.10.2,0.10.3,0.10.4,0.10.4-2,0.2,0.2.1,0.2.2,0.2.3,0.2.4,0.2.5,0.3.0,0.4.0,0.5.0,0.6.0,0.6.1," \ + --token "$CHANGELOG_GEN_TOKEN" + + - name: chmod + run: | + sudo chmod a+r /home/runner/work/Antidote/Antidote/CHANGELOG.md + ls -rattlh + + - name: upload CHANGELOG file + uses: actions/upload-artifact@v3 + with: + name: Changelog + path: | + /home/runner/work/Antidote/Antidote/CHANGELOG.md + + diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..12ce232 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,95 @@ +name: Nightly + +on: + push: + paths-ignore: + - 'README.md' +# schedule: +# - cron: '0 0 * * *' + workflow_dispatch: + inputs: + version: + description: dummy + default: dummy + +defaults: + run: + shell: bash + +jobs: + macos-compile: + runs-on: macos-12 + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - name: Display the OS Version1 + run: sw_vers -productVersion + + - name: Display the OS Version2 + run: system_profiler SPSoftwareDataType + + - name: install pkgs + run: | + brew install ldid + + - name: xcode info + run: | + ls -al + pwd + id -a + pod install + xcode-select --print-path + xcodebuild -list -workspace Antidote.xcworkspace + xcodebuild -list -project Antidote.xcodeproj + + - name: xcode list destinations + run: | + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 || echo 'NO ERR' + xcrun xctrace list devices || echo 'NOERR' + + - name: xcode compile + run: | + echo "iPhone 11 Simulator" + set -x + id=`env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 2>&1 | grep 'platform:iOS Simulator,' | grep 'name:iPhone 11 }' | tail -1 | sed -e 's#.* id:##'|sed -e 's#, OS:.*$##'` || echo 'NOERR' + echo $id + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "platform=iOS Simulator,id=$id" + + - name: xcode compile for IOS + run: | + echo "IOS" + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -configuration Release archive -archivePath build/Antidote.xcarchive -scheme Antidote CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" + ls -al ./build/Antidote.xcarchive + ldid -S $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + echo codesign -fs "keyname" $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote || echo "dummy" + ldid -d $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + ./tools/package-ida.sh $(pwd)/build/Antidote.xcarchive $(pwd)/Antidote_unsigned.ipa + + - name: check compile output + run: | + ls -al /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/ + file /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/Antidote + + - name: upload IPA file + uses: actions/upload-artifact@v4 + with: + name: ipa + path: | + /Users/runner/work/Antidote/Antidote/Antidote_unsigned.ipa + + - name: Rename artifact for release upload + if: contains(github.ref, 'refs/tags/v') + run: | + echo "RELEASE_VERSION1=${GITHUB_REF#refs/*/}" + echo "RELEASE_VERSION2=${{github.ref_name}}" + cp -v /Users/runner/work/Antidote/Antidote/Antidote_unsigned.ipa Antidote_unsigned_${GITHUB_REF#refs/*/}.ipa + - name: Upload to versioned release + if: contains(github.ref, 'refs/tags/v') + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + draft: true + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: "Antidote_unsigned*.ipa" diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000..e3cbdfa --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,77 @@ +name: PullRequest + +on: + pull_request: + paths-ignore: + - 'README.md' + workflow_dispatch: + inputs: + version: + description: dummy + default: dummy + +defaults: + run: + shell: bash + +jobs: + macos-compile: + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + + - name: Display the OS Version1 + run: sw_vers -productVersion + + - name: Display the OS Version2 + run: system_profiler SPSoftwareDataType + + - name: install pkgs + run: | + brew install ldid + + - name: xcode info + run: | + ls -al + pwd + id -a + pod install + xcode-select --print-path + xcodebuild -list -workspace Antidote.xcworkspace + xcodebuild -list -project Antidote.xcodeproj + + - name: xcode list destinations + run: | + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 || echo 'NO ERR' + xcrun xctrace list devices || echo 'NOERR' + + - name: xcode compile + run: | + echo "iPhone 11 Simulator" + set -x + id=`env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 2>&1 | grep 'platform:iOS Simulator,' | grep 'name:iPhone 11 }' | tail -1 | sed -e 's#.* id:##'|sed -e 's#, OS:.*$##'` || echo 'NOERR' + echo $id + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "platform=iOS Simulator,id=$id" + + - name: xcode compile for IOS + run: | + echo "IOS" + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -configuration Release archive -archivePath build/Antidote.xcarchive -scheme Antidote CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" + ls -al ./build/Antidote.xcarchive + ldid -S $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + echo codesign -fs "keyname" $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote || echo "dummy" + ldid -d $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + ./tools/package-ida.sh $(pwd)/build/Antidote.xcarchive $(pwd)/Antidote_unsigned.ipa + + - name: check compile output + run: | + ls -al /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/ + file /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/Antidote + + - name: upload IPA file + uses: actions/upload-artifact@v3 + with: + name: ipa + path: | + /Users/runner/work/Antidote/Antidote/Antidote_unsigned.ipa + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a8b9149 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,77 @@ +name: Release + +on: + release: + types: [published, edited] + workflow_dispatch: + inputs: + version: + description: dummy + default: dummy + +defaults: + run: + shell: bash + +jobs: + macos-compile: + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + + - name: Display the OS Version1 + run: sw_vers -productVersion + + - name: Display the OS Version2 + run: system_profiler SPSoftwareDataType + + - name: install pkgs + run: | + brew install ldid + + - name: xcode info + run: | + ls -al + pwd + id -a + pod install + xcode-select --print-path + xcodebuild -list -workspace Antidote.xcworkspace + xcodebuild -list -project Antidote.xcodeproj + + - name: xcode list destinations + run: | + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 || echo 'NO ERR' + xcrun xctrace list devices || echo 'NOERR' + + - name: xcode compile + run: | + echo "iPhone 11 Simulator" + set -x + id=`env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "name=NoSuchName" -destination-timeout 1 2>&1 | grep 'platform:iOS Simulator,' | grep 'name:iPhone 11 }' | tail -1 | sed -e 's#.* id:##'|sed -e 's#, OS:.*$##'` || echo 'NOERR' + echo $id + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -scheme Antidote -destination "platform=iOS Simulator,id=$id" + + - name: xcode compile for IOS + run: | + echo "IOS" + env NSUnbufferedIO=YES xcodebuild -workspace ./Antidote.xcworkspace -configuration Release archive -archivePath build/Antidote.xcarchive -scheme Antidote CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" + ls -al ./build/Antidote.xcarchive + ldid -S $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + echo codesign -fs "keyname" $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote || echo "dummy" + ldid -d $(pwd)/build/Antidote.xcarchive/Products/Applications/Antidote.app/Antidote + ./tools/package-ida.sh $(pwd)/build/Antidote.xcarchive $(pwd)/Antidote_unsigned.ipa + + - name: check compile output + run: | + ls -al /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/ + file /Users/runner/Library/Developer/Xcode/DerivedData/Antidote-bhjjxfvewsypipfpuadvlmuxuzew/Build/Products/Debug-iphonesimulator/Antidote.app/Antidote + + - name: upload IPA file + uses: actions/upload-artifact@v3 + with: + name: ipa + path: | + /Users/runner/work/Antidote/Antidote/Antidote_unsigned.ipa + + diff --git a/.github/workflows/upload_release.yml b/.github/workflows/upload_release.yml new file mode 100644 index 0000000..829900b --- /dev/null +++ b/.github/workflows/upload_release.yml @@ -0,0 +1,45 @@ +name: Upload to Store + +on: +# push: +# paths-ignore: +# - 'README.md' + workflow_dispatch: + inputs: + version: + description: dummy + default: dummy + +defaults: + run: + shell: bash + +jobs: + macos-compile: + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + + - name: Display the OS Version1 + run: sw_vers -productVersion + + - name: Display the OS Version2 + run: system_profiler SPSoftwareDataType + + - name: install pkgs + run: | + sudo gem install fastlane -NV + + - name: xcode info + run: | + ls -al + pwd + id -a + xcode-select --print-path + + - name: check compile output + run: | + fastlane ios release + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cd3c1ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# Xcode +Antidote/GoogleService-Info.plist +build/* +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.xcworkspace +!default.xcworkspace +xcuserdata +profile +*.moved-aside +*.mode1 +*.perspective +xcshareddata + +# Exclude temp nibs and swap files +*~.nib +*.swp + +# Exclude OS X folder attributes +.DS_Store +# +# Exclude AppCode files +.idea + +Pods +Podfile.lock + +.bundle + +# fastlane specific +fastlane/report.xml +# deliver temporary files +fastlane/Preview.html +# snapshot generated screenshots +fastlane/screenshots +# scan temporary files +fastlane/test_output +__Users_vvg_github_Antidote44 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4d4d748 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: objective-c +osx_image: xcode9.3 + +install: + - echo dummy + diff --git a/Antidote.xcodeproj/project.pbxproj b/Antidote.xcodeproj/project.pbxproj index 7f1bf66..592729e 100644 --- a/Antidote.xcodeproj/project.pbxproj +++ b/Antidote.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -574,7 +574,7 @@ 9CEE6B521C528AB600A1ECB5 /* SettingsAdvancedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CEE6B511C528AB600A1ECB5 /* SettingsAdvancedController.swift */; }; 9CEE6B531C528AB600A1ECB5 /* SettingsAdvancedController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CEE6B511C528AB600A1ECB5 /* SettingsAdvancedController.swift */; }; AF2C929D279AB3F10094C08D /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF2C929C279AB3F10094C08D /* NotificationService.swift */; }; - AF2C92A1279AB3F10094C08D /* pushextension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = AF2C929A279AB3F10094C08D /* pushextension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + AF2C92A1279AB3F10094C08D /* pushextension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AF2C929A279AB3F10094C08D /* pushextension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; AFA023F4274C069100FBFCC0 /* ConnectionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA023F3274C069100FBFCC0 /* ConnectionStatus.swift */; }; AFA024022753CC9000FBFCC0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = AFA024012753CC9000FBFCC0 /* GoogleService-Info.plist */; }; D4F896D05F7EAA7C321A2AA8 /* libPods-Antidote.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 034E57B3AE56E352BBAA0487 /* libPods-Antidote.a */; }; @@ -661,15 +661,15 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - AF2C92A2279AB3F10094C08D /* Embed App Extensions */ = { + AF2C92A2279AB3F10094C08D /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - AF2C92A1279AB3F10094C08D /* pushextension.appex in Embed App Extensions */, + AF2C92A1279AB3F10094C08D /* pushextension.appex in Embed Foundation Extensions */, ); - name = "Embed App Extensions"; + name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ @@ -962,24 +962,23 @@ AF2C929E279AB3F10094C08D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; AF6AB23329156C5800019362 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; AF6AB23429156C6000019362 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/AppStoreLocalizable.strings; sourceTree = ""; }; - AF6AB23A29256F0000019362 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; AF6AB23529156EDA00019362 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/InfoPlist.strings; sourceTree = ""; }; AF6AB23629156EDA00019362 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ca; path = "ca.lproj/import-profile.html"; sourceTree = ""; }; - AF6AB23A29257F0000019362 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; AF6AB23729156EDC00019362 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/AppStoreLocalizable.strings; sourceTree = ""; }; AF6AB23829156F0000019362 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; AF6AB23929156F0000019362 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ko; path = "ko.lproj/import-profile.html"; sourceTree = ""; }; AF6AB23A29156F0000019362 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + AF6AB23A29256F0000019362 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + AF6AB23A29257F0000019362 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; + AF6AB23A29258F0000019362 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; + AF6AB23A29259F0000019362 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; AF6AB23B29156F0000019362 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/AppStoreLocalizable.strings; sourceTree = ""; }; AF6AB23C29156F0A00019362 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; AF6AB23D29156F0A00019362 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = nb; path = "nb.lproj/import-profile.html"; sourceTree = ""; }; - AF6AB23A29258F0000019362 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; AF6AB23F29156F0B00019362 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/AppStoreLocalizable.strings; sourceTree = ""; }; AF6AB24029156F1C00019362 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - AF6AB24129156F1C00019362 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = "pt-BR"; path = "pt-BR.lproj/import-profile.html"; sourceTree = ""; }; + AF6AB24129156F1C00019362 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; AF6AB24229156F1E00019362 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/AppStoreLocalizable.strings"; sourceTree = ""; }; - AF6AB23A29259F0000019362 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - AF6AB24129156F1C00019362 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "el"; path = "el.lproj/Localizable.strings"; sourceTree = ""; }; AFA023F3274C069100FBFCC0 /* ConnectionStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectionStatus.swift; sourceTree = ""; }; AFA024012753CC9000FBFCC0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; B3C17AF8CE3B4AD1B68F2B5B /* Pods-Antidote.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Antidote.release.xcconfig"; path = "Pods/Target Support Files/Pods-Antidote/Pods-Antidote.release.xcconfig"; sourceTree = ""; }; @@ -1558,7 +1557,7 @@ 1164762C19794D3300DB20B8 /* Frameworks */, 1164762D19794D3300DB20B8 /* Resources */, F334EF7D7E56B63481570925 /* [CP] Copy Pods Resources */, - AF2C92A2279AB3F10094C08D /* Embed App Extensions */, + AF2C92A2279AB3F10094C08D /* Embed Foundation Extensions */, ); buildRules = ( ); @@ -1613,18 +1612,19 @@ 1164762719794D3300DB20B8 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1250; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1520; ORGANIZATIONNAME = zoxcore; TargetAttributes = { 111782A61DC64391000C1721 = { CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 0820; + LastSwiftMigration = ""; TestTargetID = 1164762E19794D3300DB20B8; }; 1164762E19794D3300DB20B8 = { DevelopmentTeam = Y46L589C5C; - LastSwiftMigration = 0930; + LastSwiftMigration = ""; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.Keychain = { @@ -1634,7 +1634,7 @@ }; 1173F0551BC5D94400B88B7B = { CreatedOnToolsVersion = 7.0; - LastSwiftMigration = 0930; + LastSwiftMigration = ""; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.BackgroundModes = { @@ -1646,6 +1646,7 @@ AF2C9299279AB3F10094C08D = { CreatedOnToolsVersion = 12.5; DevelopmentTeam = Y46L589C5C; + LastSwiftMigration = ""; ProvisioningStyle = Automatic; }; }; @@ -2541,7 +2542,6 @@ AF6AB23629156EDA00019362 /* ca */, AF6AB23929156F0000019362 /* ko */, AF6AB23D29156F0A00019362 /* nb */, - AF6AB24129156F1C00019362 /* pt-BR */, ); name = "import-profile.html"; sourceTree = ""; @@ -2635,7 +2635,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = ScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ( "$(inherited)", @@ -2690,7 +2694,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = ScreenshotsUITests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( "$(inherited)", @@ -2781,7 +2789,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; ONLY_ACTIVE_ARCH = YES; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; @@ -2831,9 +2839,10 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -2848,16 +2857,19 @@ CODE_SIGN_ENTITLEMENTS = Antidote/Antidote.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 142800; + CURRENT_PROJECT_VERSION = 105000; DEVELOPMENT_TEAM = Y46L589C5C; ENABLE_BITCODE = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Antidote/Antidote-Prefix.pch"; GCC_WARN_SIGN_COMPARE = YES; INFOPLIST_FILE = "Antidote/Antidote-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.4.28; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = "org.zoxcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -2881,16 +2893,19 @@ CODE_SIGN_ENTITLEMENTS = Antidote/Antidote.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 142800; + CURRENT_PROJECT_VERSION = 105000; DEVELOPMENT_TEAM = Y46L589C5C; ENABLE_BITCODE = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Antidote/Antidote-Prefix.pch"; GCC_WARN_SIGN_COMPARE = YES; INFOPLIST_FILE = "Antidote/Antidote-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.4.28; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = "org.zoxcore.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -2918,7 +2933,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = AntidoteTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = zoxcore.AntidoteTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2945,7 +2964,11 @@ GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = AntidoteTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = zoxcore.AntidoteTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2969,8 +2992,12 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = Y46L589C5C; INFOPLIST_FILE = pushextension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.zoxcore.Antidote.pushextension; @@ -2996,8 +3023,12 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = Y46L589C5C; INFOPLIST_FILE = pushextension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.zoxcore.Antidote.pushextension; diff --git a/Antidote/AddFriendController.swift b/Antidote/AddFriendController.swift index 3a77bd5..909a257 100644 --- a/Antidote/AddFriendController.swift +++ b/Antidote/AddFriendController.swift @@ -118,7 +118,7 @@ extension AddFriendController { alert.addAction(SDCAlertAction(title: String(localized: "add_contact_send"), style: .recommended) { [unowned self] action in self.cachedMessage = messageView.text - let message = messageView.text.isEmpty ? "Antidote is Tox" : messageView.text + let message = messageView.text.isEmpty ? "Toxing on Antidote" : messageView.text do { try self.submanagerFriends.sendFriendRequest(toAddress: self.textView.text, message: message) diff --git a/Antidote/AppDelegate.swift b/Antidote/AppDelegate.swift index 78c7770..fe819a0 100644 --- a/Antidote/AppDelegate.swift +++ b/Antidote/AppDelegate.swift @@ -3,7 +3,7 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/. import UIKit -import Firebase +//import Firebase import os @UIApplicationMain @@ -70,9 +70,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { window?.backgroundColor = UIColor.white window?.makeKeyAndVisible() - FirebaseApp.configure() - - Messaging.messaging().delegate = self +// FirebaseApp.configure() +// +// Messaging.messaging().delegate = self if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self @@ -283,18 +283,18 @@ private extension AppDelegate { } } -extension AppDelegate: MessagingDelegate { - func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { - print("Firebase registration token: \(String(describing: fcmToken))") - - let dataDict: [String: String] = ["token": fcmToken ?? ""] - NotificationCenter.default.post( - name: Notification.Name("FCMToken"), - object: nil, - userInfo: dataDict - ) - } -} +//extension AppDelegate: MessagingDelegate { +// func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { +// print("Firebase registration token: \(String(describing: fcmToken))") +// +// let dataDict: [String: String] = ["token": fcmToken ?? ""] +// NotificationCenter.default.post( +// name: Notification.Name("FCMToken"), +// object: nil, +// userInfo: dataDict +// ) +// } +//} // Convenience AppWide Simple Alert extension AppDelegate { diff --git a/Antidote/ChatInputViewManager.swift b/Antidote/ChatInputViewManager.swift index c83a2e8..efc9cd4 100644 --- a/Antidote/ChatInputViewManager.swift +++ b/Antidote/ChatInputViewManager.swift @@ -81,10 +81,6 @@ extension ChatInputViewManager: ChatInputViewDelegate { func chatInputViewSendButtonPressed(_ view: ChatInputView) { // HINT: call OCTSubmanagerChatsImpl.m -> sendMessageToChat() submanagerChats.sendMessage(to: chat, text: view.text, type: .normal, successBlock: nil, failureBlock: nil) - DispatchQueue.main.asyncAfter(deadline: .now() + 10) { - os_log("PUSH:10_seconds") - self.submanagerChats.sendMessagePush(to: self.chat) - } view.text = "" endUserInteraction() diff --git a/Antidote/ChatPrivateController.swift b/Antidote/ChatPrivateController.swift index e23686e..4e0c6fd 100644 --- a/Antidote/ChatPrivateController.swift +++ b/Antidote/ChatPrivateController.swift @@ -61,7 +61,7 @@ class ChatPrivateController: KeyboardNotificationController, CLLocationManagerDe fileprivate var audioButton: UIBarButtonItem! fileprivate var videoButton: UIBarButtonItem! - fileprivate var locationButton: UIBarButtonItem! +// fileprivate var locationButton: UIBarButtonItem! fileprivate var CallWaitingView: UIView! fileprivate var callwaiting_running: Bool! fileprivate var CallWaitingCancelButton: CallButton? @@ -463,10 +463,6 @@ extension ChatPrivateController { // send a text message to trigger PUSH notification, and make friend come online (hopefully) // HINT: call OCTSubmanagerChatsImpl.m -> sendMessageToChat() self.submanagerChats.sendMessage(to: self.chat, text: "calling you", type: .normal, successBlock: nil, failureBlock: nil) - DispatchQueue.main.asyncAfter(deadline: .now() + 10) { - os_log("PUSH:10_seconds") - self.submanagerChats.sendMessagePush(to: self.chat) - } self.linearBar.startAnimation(viewToAddto: self.CallWaitingView, viewToAlignToBottomOf: lb3, bottom_margin: 10) self.CallWaitingView.bringSubview(toFront: self.linearBar) @@ -520,61 +516,61 @@ extension ChatPrivateController { } } - @objc func displayalert() { - var alert = UIAlertController(title: "Location Sharing", message: "Would you like to enable location sharing with this contact?\nYou can disable this feature by clicking on the location icon after it has been enabled.", preferredStyle: UIAlertControllerStyle.alert) - var action_title = "Enable" - - if (AppDelegate.location_sharing_contact_pubkey != "-1") - { - alert = UIAlertController(title: "Location Sharing", message: "Disable sharing with this contact " + AppDelegate.location_sharing_contact_pubkey + " ?" , preferredStyle: UIAlertControllerStyle.alert) - action_title = "Disable" - } - - alert.addAction((UIAlertAction(title: action_title, style: .default, handler: { [self] (action) -> Void in - if (action_title == "Disable") - { - AppDelegate.location_sharing_contact_pubkey = "-1" - let locationImage = UIImage(named: "location-call-medium")!.withRenderingMode(.alwaysOriginal) - locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) - } - else - { - AppDelegate.location_sharing_contact_pubkey = self.friend?.publicKey ?? "-1" - let locationImage = UIImage(named: "location-call-activated-medium")!.withRenderingMode(.alwaysOriginal) - locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) - - DispatchQueue.global(qos: .userInitiated).async { - - print("ll:location_sharing") - if self.friend != nil { - - while AppDelegate.location_sharing_contact_pubkey != "-1" { - location_manager.requestLocation() - // HINT: sleep for 30 seconds - sleep(30) - } - print("ll:while_loop_end") - } - } - } - alert.dismiss(animated: true, completion: nil) - }))) - - alert.addAction( - UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) -> Void in - alert.dismiss(animated: true, completion: nil) - })) - - self.present(alert, animated: true, completion: nil) - } +// @objc func displayalert() { +// var alert = UIAlertController(title: "Location Sharing", message: "Would you like to enable location sharing with this contact?\nYou can disable this feature by clicking on the location icon after it has been enabled.", preferredStyle: UIAlertControllerStyle.alert) +// var action_title = "Enable" +// +// if (AppDelegate.location_sharing_contact_pubkey != "-1") +// { +// alert = UIAlertController(title: "Location Sharing", message: "Disable sharing with this contact " + AppDelegate.location_sharing_contact_pubkey + " ?" , preferredStyle: UIAlertControllerStyle.alert) +// action_title = "Disable" +// } +// +// alert.addAction((UIAlertAction(title: action_title, style: .default, handler: { [self] (action) -> Void in +// if (action_title == "Disable") +// { +// AppDelegate.location_sharing_contact_pubkey = "-1" +// let locationImage = UIImage(named: "location-call-medium")!.withRenderingMode(.alwaysOriginal) +// locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) +// } +// else +// { +// AppDelegate.location_sharing_contact_pubkey = self.friend?.publicKey ?? "-1" +// let locationImage = UIImage(named: "location-call-activated-medium")!.withRenderingMode(.alwaysOriginal) +// locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) +// +// DispatchQueue.global(qos: .userInitiated).async { +// +// print("ll:location_sharing") +// if self.friend != nil { +// +// while AppDelegate.location_sharing_contact_pubkey != "-1" { +// location_manager.requestLocation() +// // HINT: sleep for 30 seconds +// sleep(30) +// } +// print("ll:while_loop_end") +// } +// } +// } +// alert.dismiss(animated: true, completion: nil) +// }))) +// +// alert.addAction( +// UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) -> Void in +// alert.dismiss(animated: true, completion: nil) +// })) +// +// self.present(alert, animated: true, completion: nil) +// } @objc func videoCallButtonPressed() { delegate?.chatPrivateControllerCallToChat(self, enableVideo: true) } - @objc func locationButtonPressed() { - displayalert() - } +// @objc func locationButtonPressed() { +// displayalert() +// } @objc func editMessagesDeleteButtonPressed(_ barButtonItem: UIBarButtonItem) { guard let selectedRows = tableView?.indexPathsForSelectedRows else { @@ -671,31 +667,11 @@ extension ChatPrivateController: UITableViewDataSource { if let messageText = message.messageText { let outgoingModel = ChatOutgoingTextCellModel() - if (UserDefaultsManager().DebugMode == false) { - outgoingModel.message = messageText.text ?? "" - } else { - let s1 = (messageText.text ?? "") - let s2 = (messageText.msgv3HashHex ?? "") - let s3 = (message.senderUniqueIdentifier ?? "") - let s4 = (message.chatUniqueIdentifier ) - let s5 = String(messageText.isDelivered) - let s6 = String(messageText.sentPush) - let s7 = String(message.tssent) - let s8 = String(message.tsrcvd) - let s9 = String(message.dateInterval) - outgoingModel.message = s1 + "\n" - + "msgv3HashHex:\n" + s2 + "\n" - + "senderUniqueIdentifier:\n" + s3 + "\n" - + "chatUniqueIdentifier:\n" + s4 + "\n" - + "isDelivered:\n" + s5 + "\n" - + "sentPush:\n" + s6 + "\n" - + "tssent:\n" + s7 + "\n" - + "tsrcvd:\n" + s8 + "\n" - + "dateInterval:\n" + s9 + "\n" - } + + outgoingModel.message = messageText.text ?? "" outgoingModel.delivered = messageText.isDelivered - outgoingModel.sentpush = messageText.sentPush + //outgoingModel.sentpush = messageText.sentPush model = outgoingModel @@ -717,26 +693,9 @@ extension ChatPrivateController: UITableViewDataSource { if let messageText = message.messageText { let incomingModel = ChatBaseTextCellModel() - if (UserDefaultsManager().DebugMode == false) { - incomingModel.message = messageText.text ?? "" - } else { - let s1 = (messageText.text ?? "") - let s2 = (messageText.msgv3HashHex ?? "") - let s3 = (message.senderUniqueIdentifier ?? "") - let s4 = (message.chatUniqueIdentifier) - let s5 = String(messageText.isDelivered) - let s6 = String(message.tssent) - let s7 = String(message.tsrcvd) - let s8 = String(message.dateInterval) - incomingModel.message = "" + s1 + "\n" - + "msgv3HashHex:\n" + s2 + "\n" - + "senderUniqueIdentifier:\n" + s3 + "\n" - + "chatUniqueIdentifier:\n" + s4 + "\n" - + "isDelivered:\n" + s5 + "\n" - + "tssent:\n" + s6 + "\n" - + "tsrcvd:\n" + s7 + "\n" - + "dateInterval:\n" + s8 + "\n" - } + + incomingModel.message = messageText.text ?? "" + model = incomingModel @@ -1156,7 +1115,7 @@ private extension ChatPrivateController { titleView.connectionStatus = ConnectionStatus(connectionStatus: .none) audioButton.isEnabled = true videoButton.isEnabled = false - locationButton.isEnabled = true +// locationButton.isEnabled = true chatInputView.cameraButtonEnabled = false return } @@ -1185,7 +1144,7 @@ private extension ChatPrivateController { self.audioButton.isEnabled = true self.videoButton.isEnabled = isConnected - self.locationButton.isEnabled = true + //self.locationButton.isEnabled = true self.chatInputView.cameraButtonEnabled = isConnected self.updateTableHeaderView() @@ -1296,7 +1255,7 @@ private extension ChatPrivateController { } func updateLastReadDate() { - submanagerObjects.change(chat, lastReadDateInterval: Date().timeIntervalSince1970) + submanagerObjects.change(chat, lastReadDateInterval: Date().timeIntervalSince1970 ?? 0.0) } func imageCellWithMessage(_ message: OCTMessageAbstract, incoming: Bool) -> (ChatMovableDateCellModel, ChatMovableDateCell) { @@ -1471,18 +1430,18 @@ private extension ChatPrivateController { let locationImage = UIImage(named: "location-call-medium")!.withRenderingMode(.alwaysOriginal) audioButton = UIBarButtonItem(image: audioImage, style: .plain, target: self, action: #selector(ChatPrivateController.audioCallButtonPressed)) videoButton = UIBarButtonItem(image: videoImage, style: .plain, target: self, action: #selector(ChatPrivateController.videoCallButtonPressed)) - locationButton = UIBarButtonItem(image: locationImage, style: .plain, target: self, action: #selector(ChatPrivateController.locationButtonPressed)) +// locationButton = UIBarButtonItem(image: locationImage, style: .plain, target: self, action: #selector(ChatPrivateController.locationButtonPressed)) - if (AppDelegate.location_sharing_contact_pubkey != "-1") { - let locationImage = UIImage(named: "location-call-activated-medium")!.withRenderingMode(.alwaysOriginal) - locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) - } +// if (AppDelegate.location_sharing_contact_pubkey != "-1") { +// let locationImage = UIImage(named: "location-call-activated-medium")!.withRenderingMode(.alwaysOriginal) +// locationButton.setBackgroundImage(locationImage, for: .normal, barMetrics: .default) +// } navigationItem.leftBarButtonItems = nil navigationItem.rightBarButtonItems = [ videoButton, - audioButton, - locationButton + audioButton//, +// locationButton ] } } diff --git a/Antidote/FriendCardController.swift b/Antidote/FriendCardController.swift index 203e06f..c34e8e7 100644 --- a/Antidote/FriendCardController.swift +++ b/Antidote/FriendCardController.swift @@ -27,7 +27,7 @@ class FriendCardController: StaticTableController { fileprivate let nameModel: StaticTableDefaultCellModel fileprivate let statusMessageModel: StaticTableDefaultCellModel fileprivate let publicKeyModel: StaticTableDefaultCellModel - fileprivate let capabilitiesModel: StaticTableDefaultCellModel +// fileprivate let capabilitiesModel: StaticTableDefaultCellModel fileprivate let pushurlModel: StaticTableDefaultCellModel init(theme: Theme, friend: OCTFriend, submanagerObjects: OCTSubmanagerObjects) { @@ -42,7 +42,7 @@ class FriendCardController: StaticTableController { nameModel = StaticTableDefaultCellModel() statusMessageModel = StaticTableDefaultCellModel() publicKeyModel = StaticTableDefaultCellModel() - capabilitiesModel = StaticTableDefaultCellModel() +// capabilitiesModel = StaticTableDefaultCellModel() pushurlModel = StaticTableDefaultCellModel() super.init(theme: theme, style: .plain, model: [ @@ -58,12 +58,12 @@ class FriendCardController: StaticTableController { [ publicKeyModel, ], - [ - capabilitiesModel, - ], - [ - pushurlModel, - ], +// [ +// capabilitiesModel, +// ], +// [ +// pushurlModel, +// ], ]) updateModels() @@ -142,45 +142,6 @@ private extension FriendCardController { publicKeyModel.value = friend.publicKey publicKeyModel.userInteractionEnabled = false publicKeyModel.canCopyValue = true - - capabilitiesModel.title = "Tox Capabilities" - let capabilities = friend.capabilities2 ?? "" - if (capabilities.count > 0) { - let caps = NSNumber(value: UInt64(capabilities) ?? 0) - capabilitiesModel.value = capabilitiesToString(caps) - } else { - capabilitiesModel.value = "BASIC" - } - capabilitiesModel.userInteractionEnabled = false - - pushurlModel.title = "Push URL" - let pushtoken = friend.pushToken ?? "" - if (pushtoken.count > 0) { - pushurlModel.value = pushtoken - } else { - pushurlModel.value = "" - } - pushurlModel.userInteractionEnabled = false - } - - func capabilitiesToString(_ cap: NSNumber) -> String { - var ret: String = "BASIC" - if ((UInt(cap) & 1) > 0) { - ret = ret + " CAPABILITIES" - } - if ((UInt(cap) & 2) > 0) { - ret = ret + " MSGV2" - } - if ((UInt(cap) & 4) > 0) { - ret = ret + " H264" - } - if ((UInt(cap) & 8) > 0) { - ret = ret + " MSGV3" - } - if ((UInt(cap) & 16) > 0) { - ret = ret + " FTV2" - } - return ret; } } diff --git a/Antidote/FriendListController.swift b/Antidote/FriendListController.swift index cdfb26c..ce6dd54 100644 --- a/Antidote/FriendListController.swift +++ b/Antidote/FriendListController.swift @@ -75,7 +75,7 @@ class FriendListController: UIViewController { if (UserDefaultsManager().EchobotAdded == false) { do { - try self.submanagerFriends.sendFriendRequest(toAddress: echobotid, message: message) + //try self.submanagerFriends.sendFriendRequest(toAddress: echobotid, message: message) UserDefaultsManager().EchobotAdded = true } catch let error as NSError { diff --git a/Antidote/LoginCoordinator.swift b/Antidote/LoginCoordinator.swift index a37c072..7a71269 100644 --- a/Antidote/LoginCoordinator.swift +++ b/Antidote/LoginCoordinator.swift @@ -286,7 +286,7 @@ private extension LoginCoordinator { loginWithProfile(profileName, password: password, configurationClosure: { if let name = username { _ = try? $0.user.setUserName(name) - _ = try? $0.user.setUserStatusMessage("Antidote is Tox") + _ = try? $0.user.setUserStatusMessage("Toxing on Antidote") } }, errorClosure: { error in handleErrorWithType(.createOCTManager, error: error) diff --git a/Antidote/ProfileMainController.swift b/Antidote/ProfileMainController.swift index 44e2377..bba0201 100644 --- a/Antidote/ProfileMainController.swift +++ b/Antidote/ProfileMainController.swift @@ -3,7 +3,7 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/. import UIKit -import Firebase +//import Firebase protocol ProfileMainControllerDelegate: class { func profileMainControllerLogout(_ controller: ProfileMainController) @@ -27,7 +27,7 @@ class ProfileMainController: StaticTableController { // fileprivate let userStatusModel = StaticTableDefaultCellModel() fileprivate let toxIdModel = StaticTableDefaultCellModel() fileprivate let pushurlModel = StaticTableDefaultCellModel() - fileprivate let capabilitiesModel = StaticTableDefaultCellModel() +// fileprivate let capabilitiesModel = StaticTableDefaultCellModel() fileprivate let profileDetailsModel = StaticTableDefaultCellModel() fileprivate let logoutModel = StaticTableButtonCellModel() @@ -50,12 +50,12 @@ class ProfileMainController: StaticTableController { [ toxIdModel, ], - [ - pushurlModel, - ], - [ - capabilitiesModel, - ], +// [ +// pushurlModel, +// ], +// [ +// capabilitiesModel, +// ], [ profileDetailsModel, ], @@ -168,19 +168,15 @@ private extension ProfileMainController { // for debugging print own ToxID ---------------- // print("TOXID: \(submanagerUser.userAddress)") // for debugging print own ToxID ---------------- - - pushurlModel.title = "Push URL" - let pushtoken = Messaging.messaging().fcmToken ?? "" - if (pushtoken.count > 0) { - pushurlModel.value = "https://tox.zoff.xyz/toxfcm/fcm.php?id=" + pushtoken + "&type=1" - } else { - pushurlModel.value = "" - } - pushurlModel.userInteractionEnabled = false - - capabilitiesModel.title = "Tox Capabilities" - capabilitiesModel.value = capabilitiesToString(submanagerUser.capabilities as NSNumber) - capabilitiesModel.userInteractionEnabled = false +// +// pushurlModel.title = "Push URL" +// let pushtoken = Messaging.messaging().fcmToken ?? "" +// if (pushtoken.count > 0) { +// pushurlModel.value = "https://tox.zoff.xyz/toxfcm/fcm.php?id=" + pushtoken + "&type=1" +// } else { +// pushurlModel.value = "" +// } +// pushurlModel.userInteractionEnabled = false profileDetailsModel.value = String(localized: "profile_details") profileDetailsModel.didSelectHandler = showProfileDetails @@ -190,26 +186,6 @@ private extension ProfileMainController { logoutModel.didSelectHandler = logout } - func capabilitiesToString(_ cap: NSNumber) -> String { - var ret: String = "BASIC" - if ((UInt(cap) & 1) > 0) { - ret = ret + " CAPABILITIES" - } - if ((UInt(cap) & 2) > 0) { - ret = ret + " MSGV2" - } - if ((UInt(cap) & 4) > 0) { - ret = ret + " H264" - } - if ((UInt(cap) & 8) > 0) { - ret = ret + " MSGV3" - } - if ((UInt(cap) & 16) > 0) { - ret = ret + " FTV2" - } - return ret; - } - func logout(_: StaticTableBaseCell) { delegate?.profileMainControllerLogout(self) } diff --git a/Antidote/SettingsMainController.swift b/Antidote/SettingsMainController.swift index 1a1b384..5e2141d 100644 --- a/Antidote/SettingsMainController.swift +++ b/Antidote/SettingsMainController.swift @@ -33,24 +33,24 @@ class SettingsMainController: StaticTableController { [ autodownloadImagesModel, ], - [ - longerbgModel, - ], +// [ +// longerbgModel, +// ], [ notificationsModel, dateonmessagemodeModel, - debugmodeModel, +// debugmodeModel, ], [ advancedSettingsModel, ], [ - faqModel, +// faqModel, aboutModel, ], ], footers: [ String(localized: "settings_autodownload_images_description"), - "This will keep the Application running for longer in the background to finish sending messages, but this will also reveal more meta data about you. It will link your IP address and your PUSH token. It's a tradeoff between convenience and metadata privacy.\n\nYou can use ProtonVPN to prevent that.\n\nSee https://protonvpn.com/free-vpn/\n\nand\n\nhttps://apps.apple.com/app/apple-store/id1437005085", +// "This will keep the Application running for longer in the background to finish sending messages, but this will also reveal more meta data about you. It will link your IP address and your PUSH token. It's a tradeoff between convenience and metadata privacy.\n\nYou can use ProtonVPN to prevent that.\n\nSee https://protonvpn.com/free-vpn/\n\nand\n\nhttps://apps.apple.com/app/apple-store/id1437005085", nil, nil, nil, diff --git a/Antidote/UserDefaultsManager.swift b/Antidote/UserDefaultsManager.swift index e531bb0..f110265 100644 --- a/Antidote/UserDefaultsManager.swift +++ b/Antidote/UserDefaultsManager.swift @@ -14,7 +14,7 @@ class UserDefaultsManager { var UDPEnabled: Bool { get { - return boolForKey(Keys.UDPEnabled, defaultValue: false) + return boolForKey(Keys.UDPEnabled, defaultValue: true) } set { setBool(newValue, forKey: Keys.UDPEnabled) @@ -23,7 +23,7 @@ class UserDefaultsManager { var EchobotAdded: Bool { get { - return boolForKey(Keys.EchobotAdded, defaultValue: false) + return boolForKey(Keys.EchobotAdded, defaultValue: true) } set { setBool(newValue, forKey: Keys.EchobotAdded) diff --git a/local_pod_repo/objcTox/Classes/Private/Manager/Submanagers/OCTSubmanagerChatsImpl.m b/local_pod_repo/objcTox/Classes/Private/Manager/Submanagers/OCTSubmanagerChatsImpl.m index ab30388..5e62b3b 100644 --- a/local_pod_repo/objcTox/Classes/Private/Manager/Submanagers/OCTSubmanagerChatsImpl.m +++ b/local_pod_repo/objcTox/Classes/Private/Manager/Submanagers/OCTSubmanagerChatsImpl.m @@ -261,19 +261,19 @@ triggerPush(NSString *used_pushToken, NSString *msgv3HashHex = nil; UInt32 msgv3tssec = 0; - if ((message_v3_hash_bin) && (message_v3_hash_hexstr)) - { - tox_messagev3_get_new_message_id(message_v3_hash_bin); - bin_to_hex((const char *)message_v3_hash_bin, (size_t)TOX_MSGV3_MSGID_LENGTH, message_v3_hash_hexstr); - - msgv3HashHex = [[NSString alloc] initWithBytes:message_v3_hash_hexstr length:(TOX_MSGV3_MSGID_LENGTH * 2) encoding:NSUTF8StringEncoding]; - - // HINT: set sent timestamp to now() as unixtimestamp value - msgv3tssec = [[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] integerValue]; - - free(message_v3_hash_bin); - free(message_v3_hash_hexstr); - } +// if ((message_v3_hash_bin) && (message_v3_hash_hexstr)) +// { +// tox_messagev3_get_new_message_id(message_v3_hash_bin); +// bin_to_hex((const char *)message_v3_hash_bin, (size_t)TOX_MSGV3_MSGID_LENGTH, message_v3_hash_hexstr); +// +// msgv3HashHex = [[NSString alloc] initWithBytes:message_v3_hash_hexstr length:(TOX_MSGV3_MSGID_LENGTH * 2) encoding:NSUTF8StringEncoding]; +// +// // HINT: set sent timestamp to now() as unixtimestamp value +// msgv3tssec = [[NSNumber numberWithDouble: [[NSDate date] timeIntervalSince1970]] integerValue]; +// +// free(message_v3_hash_bin); +// free(message_v3_hash_hexstr); +// } __weak OCTSubmanagerChatsImpl *weakSelf = self; OCTSendMessageOperationSuccessBlock successBlock = ^(OCTToxMessageId messageId) { diff --git a/local_pod_repo/objcTox/Classes/Public/Manager/nodes.json b/local_pod_repo/objcTox/Classes/Public/Manager/nodes.json index e55dd87..9520984 100644 --- a/local_pod_repo/objcTox/Classes/Public/Manager/nodes.json +++ b/local_pod_repo/objcTox/Classes/Public/Manager/nodes.json @@ -1,56 +1,90 @@ { - "last_scan": 1675968658, - "last_refresh": 1675968601, + "last_scan": 1708636023, + "last_refresh": 1708635904, "nodes": [ + { + "ipv4": "tox.plastiras.org", + "ipv6": "tox.plastiras.org", + "port": 33445, + "tcp_ports": [33445, 443], + "public_key": "8E8B63299B3D520FB377FE5100E65E3322F7AE5B20A0ACED2981769FC5B43725", + "maintainer": "Tha_14", + "location": "LU", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", + "last_ping": 1708636023 + }, + { + "ipv4": "tox2.plastiras.org", + "ipv6": "tox2.plastiras.org", + "port": 33445, + "tcp_ports": [33445, 3389], + "public_key": "B6626D386BE7E3ACA107B46F48A5C4D522D29281750D44A0CBA6A2721E79C951", + "maintainer": "Tha_14", + "location": "DE", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", + "last_ping": 1708636023 + }, + { + "ipv4": "tox3.plastiras.org", + "ipv6": "tox3.plastiras.org", + "port": 33445, + "tcp_ports": [33445], + "public_key": "4B031C96673B6FF123269FF18F2847E1909A8A04642BBECD0189AC8AEEADAF64", + "maintainer": "Tha_14", + "location": "DE", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", + "last_ping": 1708636025 + }, + { + "ipv4": "tox4.plastiras.org", + "ipv6": "-", + "port": 33445, + "tcp_ports": [3389, 443, 33445], + "public_key": "836D1DA2BE12FE0E669334E437BE3FB02806F1528C2B2782113E0910C7711409", + "maintainer": "Tha_14", + "location": "MD", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", + "last_ping": 1708636023 + }, { "ipv4": "144.217.167.73", "ipv6": "-", "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], + "tcp_ports": [33445, 3389], "public_key": "7E5668E0EE09E19F320AD47902419331FFEE147BB3606769CFBE921A2A2FD34C", "maintainer": "velusip", "location": "CA", "status_udp": true, "status_tcp": true, - "version": "1000002013", + "version": "1000002018", "motd": "Jera", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { "ipv4": "tox.abilinski.com", "ipv6": "-", "port": 33445, - "tcp_ports": [ - 33445 - ], + "tcp_ports": [33445], "public_key": "10C00EB250C3233E343E2AEBA07115A5C28920E9C8D29492F6D00B29049EDC7E", "maintainer": "AnthonyBilinski", "location": "CA", "status_udp": true, "status_tcp": true, - "version": "1000002013", + "version": "1000002018", "motd": "Running https://github.com/toktok/c-toxcore v0.2.13. qTox best Tox! Contact: AC18841E56CCDEE16E93E10E6AB2765BE54277D67F1372921B5B418A6B330D3D3FAFA60B0931", - "last_ping": 1675968658 - }, - { - "ipv4": "198.199.98.108", - "ipv6": "2604:a880:1:20::32f:1001", - "port": 33445, - "tcp_ports": [ - 33445, - 3389 - ], - "public_key": "BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F", - "maintainer": "Cody", - "location": "US", - "status_udp": true, - "status_tcp": true, - "version": "1000002015", - "motd": "Cody's Tox node!", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { "ipv4": "tox.kurnevsky.net", @@ -64,18 +98,13 @@ "status_tcp": false, "version": "3000002000", "motd": "Hi from tox-rs!", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { "ipv4": "205.185.115.131", "ipv6": "-", "port": 53, - "tcp_ports": [ - 53, - 443, - 33445, - 3389 - ], + "tcp_ports": [53, 443, 3389, 33445], "public_key": "3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68", "maintainer": "GDR!", "location": "US", @@ -83,32 +112,13 @@ "status_tcp": true, "version": "1000002018", "motd": "https://gdr.name/tuntox/", - "last_ping": 1675968658 - }, - { - "ipv4": "tox2.abilinski.com", - "ipv6": "tox2.abilinski.com", - "port": 33445, - "tcp_ports": [ - 33445 - ], - "public_key": "7A6098B590BDC73F9723FC59F82B3F9085A64D1B213AAF8E610FD351930D052D", - "maintainer": "AnthonyBilinski", - "location": "US", - "status_udp": true, - "status_tcp": true, - "version": "1000002013", - "motd": "Running https://github.com/toktok/c-toxcore v0.2.13. qTox best Tox! Contact: AC18841E56CCDEE16E93E10E6AB2765BE54277D67F1372921B5B418A6B330D3D3FAFA60B0931", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { "ipv4": "46.101.197.175", "ipv6": "2a03:b0c0:3:d0::ac:5001", "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], + "tcp_ports": [3389, 33445], "public_key": "CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707", "maintainer": "kotelnik", "location": "DE", @@ -116,16 +126,13 @@ "status_tcp": true, "version": "1000002018", "motd": "Power to Ukraine!", - "last_ping": 1675968659 + "last_ping": 1708636023 }, { "ipv4": "tox1.mf-net.eu", "ipv6": "tox1.mf-net.eu", "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], + "tcp_ports": [33445, 3389], "public_key": "B3E5FA80DC8EBD1149AD2AB35ED8B85BD546DEDE261CA593234C619249419506", "maintainer": "2mf", "location": "DE", @@ -133,68 +140,27 @@ "status_tcp": true, "version": "1000002018", "motd": "tox-bootstrapd", - "last_ping": 1675968660 + "last_ping": 1708636025 }, { - "ipv4": "tox2.mf-net.eu", - "ipv6": "tox2.mf-net.eu", - "port": 33445, - "tcp_ports": [ - 33445, - 3389 - ], - "public_key": "70EA214FDE161E7432530605213F18F7427DC773E276B3E317A07531F548545F", - "maintainer": "2mf", - "location": "DE", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "tox-bootstrapd", - "last_ping": 1675968659 - }, - { - "ipv4": "195.201.7.101", + "ipv4": "5.19.249.240", "ipv6": "-", - "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], - "public_key": "B84E865125B4EC4C368CD047C72BCE447644A2DC31EF75BD2CDA345BFD310107", - "maintainer": "tux1973", - "location": "DE", + "port": 38296, + "tcp_ports": [3389, 38296], + "public_key": "DA98A4C0CD7473A133E115FEA2EBDAEEA2EF4F79FD69325FC070DA4DE4BA3238", + "maintainer": "Toxdaemon", + "location": "RU", "status_udp": true, "status_tcp": true, - "version": "1000002012", - "motd": "tox-bootstrapd", - "last_ping": 1675968660 - }, - { - "ipv4": "tox4.plastiras.org", - "ipv6": "-", - "port": 33445, - "tcp_ports": [ - 443, - 3389, - 33445 - ], - "public_key": "836D1DA2BE12FE0E669334E437BE3FB02806F1528C2B2782113E0910C7711409", - "maintainer": "Tha_14", - "location": "MD", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", - "last_ping": 1675968659 + "version": "", + "motd": "", + "last_ping": 1708636023 }, { "ipv4": "188.225.9.167", "ipv6": "209:dead:ded:4991:49f3:b6c0:9869:3019", "port": 33445, - "tcp_ports": [ - 33445, - 3389 - ], + "tcp_ports": [3389, 33445], "public_key": "1911341A83E02503AB1FD6561BD64AF3A9D6C3F12B5FBB656976B2E678644A67", "maintainer": "Nikat", "location": "RU", @@ -202,65 +168,27 @@ "status_tcp": true, "version": "1000002013", "motd": "First yggdrasil tox bootstrapd!!!\nYou can read about it here: https://yggdrasil-network.github.io/", - "last_ping": 1675968659 - }, - { - "ipv4": "122.116.39.151", - "ipv6": "2001:b011:8:2f22:1957:7f9d:e31f:96dd", - "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], - "public_key": "5716530A10D362867C8E87EE1CD5362A233BAFBBA4CF47FA73B7CAD368BD5E6E", - "maintainer": "miaoski", - "location": "TW", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "tox-bootstrapd", - "last_ping": 1675968659 - }, - { - "ipv4": "tox3.plastiras.org", - "ipv6": "tox3.plastiras.org", - "port": 33445, - "tcp_ports": [ - 33445, - 3389 - ], - "public_key": "4B031C96673B6FF123269FF18F2847E1909A8A04642BBECD0189AC8AEEADAF64", - "maintainer": "Tha_14", - "location": "DE", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", - "last_ping": 1675968659 + "last_ping": 1708636024 }, { "ipv4": "104.225.141.59", "ipv6": "-", "port": 43334, - "tcp_ports": [], + "tcp_ports": [33445, 3389], "public_key": "933BA20B2E258B4C0D475B6DECE90C7E827FE83EFA9655414E7841251B19A72C", "maintainer": "Gabe", "location": "US", "status_udp": true, - "status_tcp": false, + "status_tcp": true, "version": "1000002018", "motd": "True peace is in Jesus Matt 11:28-30 Tox ID: 07D7B9018C5C724A2E9EB34C60782F78B7BDF64D5316946EF49F8E6A20F26B4631FEC281D6A4", - "last_ping": 1675968658 + "last_ping": 1708636025 }, { "ipv4": "139.162.110.188", "ipv6": "2400:8902::f03c:93ff:fe69:bf77", "port": 33445, - "tcp_ports": [ - 443, - 3389, - 33445 - ], + "tcp_ports": [443, 33445, 3389], "public_key": "F76A11284547163889DDC89A7738CF271797BF5E5E220643E97AD3C7E7903D55", "maintainer": "ToxTom", "location": "CA", @@ -268,31 +196,13 @@ "status_tcp": true, "version": "1000002013", "motd": "ToxTom", - "last_ping": 1675968659 - }, - { - "ipv4": "198.98.49.206", - "ipv6": "2605:6400:10:caa:1:be:a:7001", - "port": 33445, - "tcp_ports": [ - 33445 - ], - "public_key": "28DB44A3CEEE69146469855DFFE5F54DA567F5D65E03EFB1D38BBAEFF2553255", - "maintainer": "Cüber", - "location": "US", - "status_udp": true, - "status_tcp": true, - "version": "1000002013", - "motd": "Tox", - "last_ping": 1675968660 + "last_ping": 1708636023 }, { "ipv4": "172.105.109.31", "ipv6": "2600:3c04::f03c:92ff:fe30:5df", "port": 33445, - "tcp_ports": [ - 33445 - ], + "tcp_ports": [33445], "public_key": "D46E97CF995DC1820B92B7D899E152A217D36ABE22730FEA4B6BF1BFC06C617C", "maintainer": "amr", "location": "CA", @@ -300,7 +210,7 @@ "status_tcp": true, "version": "1000002018", "motd": "FrozenDev Node: tox-bootstrapd Add me on tox: A625D9E9EAAA7B40C399F50BA8B255836EE5A09B6DD0C54CF0E190E24544DC39237D6389FAED", - "last_ping": 1675968660 + "last_ping": 1708636025 }, { "ipv4": "91.146.66.26", @@ -314,31 +224,13 @@ "status_tcp": false, "version": "1000002013", "motd": "tox-bootstrapd 91.146.66.26", - "last_ping": 1675968658 - }, - { - "ipv4": "tox01.ky0uraku.xyz", - "ipv6": "tox01.ky0uraku.xyz", - "port": 33445, - "tcp_ports": [ - 33445 - ], - "public_key": "FD04EB03ABC5FC5266A93D37B4D6D6171C9931176DC68736629552D8EF0DE174", - "maintainer": "ky0uraku", - "location": "NL", - "status_udp": true, - "status_tcp": true, - "version": "1000002013", - "motd": "ky0uraku tox01 node", - "last_ping": 1675968660 + "last_ping": 1708636023 }, { "ipv4": "tox02.ky0uraku.xyz", "ipv6": "tox02.ky0uraku.xyz", "port": 33445, - "tcp_ports": [ - 33445 - ], + "tcp_ports": [33445], "public_key": "D3D6D7C0C7009FC75406B0A49E475996C8C4F8BCE1E6FC5967DE427F8F600527", "maintainer": "ky0uraku", "location": "FR", @@ -346,67 +238,13 @@ "status_tcp": true, "version": "1000002016", "motd": "ky0uraku tox02 node", - "last_ping": 1675968660 - }, - { - "ipv4": "tox.plastiras.org", - "ipv6": "tox.plastiras.org", - "port": 33445, - "tcp_ports": [ - 33445, - 443 - ], - "public_key": "8E8B63299B3D520FB377FE5100E65E3322F7AE5B20A0ACED2981769FC5B43725", - "maintainer": "Tha_14", - "location": "LU", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", - "last_ping": 1675968659 - }, - { - "ipv4": "kusoneko.moe", - "ipv6": "kusoneko.moe", - "port": 33445, - "tcp_ports": [ - 33445 - ], - "public_key": "BE7ED53CD924813507BA711FD40386062E6DC6F790EFA122C78F7CDEEE4B6D1B", - "maintainer": "Kusoneko", - "location": "CA", - "status_udp": true, - "status_tcp": true, - "version": "1000002013", - "motd": "Managed by kusoneko (ID:D8E4A5E926A4E7A85FA40F8CA55D47554F043D3C5CDB457187726F19CE20E52C0D7C3FCE9466)", - "last_ping": 1675968658 - }, - { - "ipv4": "tox2.plastiras.org", - "ipv6": "tox2.plastiras.org", - "port": 33445, - "tcp_ports": [ - 33445, - 3389 - ], - "public_key": "B6626D386BE7E3ACA107B46F48A5C4D522D29281750D44A0CBA6A2721E79C951", - "maintainer": "Tha_14", - "location": "DE", - "status_udp": true, - "status_tcp": true, - "version": "1000002018", - "motd": "Add me on Tox: F0AA7C8C55552E8593B2B77AC6FCA598A40D1F5F52A26C2322690A4BF1DFCB0DD8AEDD2822FF", - "last_ping": 1675968659 + "last_ping": 1708636025 }, { "ipv4": "172.104.215.182", "ipv6": "2600:3c03::f03c:93ff:fe7f:6096", "port": 33445, - "tcp_ports": [ - 443, - 33445, - 3389 - ], + "tcp_ports": [443, 3389, 33445], "public_key": "DA2BD927E01CD05EBCC2574EBE5BEBB10FF59AE0B2105A7D1E2B40E49BB20239", "maintainer": "zero-one", "location": "US", @@ -414,33 +252,83 @@ "status_tcp": true, "version": "1000002018", "motd": "tox-bootstrapd", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { - "ipv4": "5.19.249.240", - "ipv6": "-", - "port": 38296, - "tcp_ports": [ - 38296, - 3389 - ], - "public_key": "DA98A4C0CD7473A133E115FEA2EBDAEEA2EF4F79FD69325FC070DA4DE4BA3238", - "maintainer": "Toxdaemon", - "location": "RU", - "status_udp": false, + "ipv4": "tox.initramfs.io", + "ipv6": "tox.initramfs.io", + "port": 33445, + "tcp_ports": [3389, 33445], + "public_key": "3F0A45A268367C1BEA652F258C85F4A66DA76BCAA667A49E770BCC4917AB6A25", + "maintainer": "initramfs", + "location": "TW", + "status_udp": true, "status_tcp": true, - "version": "", - "motd": "", - "last_ping": 1675968659 + "version": "1000002018", + "motd": "initramfs' tox bootstrap node", + "last_ping": 1708636023 + }, + { + "ipv4": "188.214.122.30", + "ipv6": "-", + "port": 33445, + "tcp_ports": [33445, 3389], + "public_key": "2A9F7A620581D5D1B09B004624559211C5ED3D1D712E8066ACDB0896A7335705", + "maintainer": "turambar", + "location": "EG", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "tox-bootstrapd", + "last_ping": 1708636023 + }, + { + "ipv4": "194.36.190.71", + "ipv6": "-", + "port": 33445, + "tcp_ports": [33445], + "public_key": "99E8460035E45C0A6B6DC2C02B14440F7F876518E9D054D028209B5669827645", + "maintainer": "UR1229SWL", + "location": "NL", + "status_udp": true, + "status_tcp": true, + "version": "3000002000", + "motd": "Welcome to https://rx-tx.info and t.me/rx_tx_info", + "last_ping": 1708636025 + }, + { + "ipv4": "62.183.96.32", + "ipv6": "-", + "port": 33445, + "tcp_ports": [33445], + "public_key": "52BD37D53357701CB9C69ABA81E7741C5F14105523C89153A770D73F434AC473", + "maintainer": "Alexsandr", + "location": "RU", + "status_udp": true, + "status_tcp": true, + "version": "1000002018", + "motd": "New Adugeya tox boostrap node", + "last_ping": 1708636023 + }, + { + "ipv4": "141.11.229.155", + "ipv6": "-", + "port": 33445, + "tcp_ports": [33445, 3389], + "public_key": "1FD96DF8DCAC4A95C117B460F23EB740C8FBA60DE89BE7B45136790B8E3D4B63", + "maintainer": "lzk", + "location": "US", + "status_udp": true, + "status_tcp": true, + "version": "1000002013", + "motd": "tox-bootstrapd", + "last_ping": 1708636023 }, { "ipv4": "NONE", "ipv6": "2607:f130:0:f8::4c85:a645", "port": 33445, - "tcp_ports": [ - 3389, - 33445 - ], + "tcp_ports": [33445, 3389], "public_key": "8AFE1FC6426E5B77AB80318ED64F5F76341695B9FB47AB8AC9537BF5EE9E9D29", "maintainer": "Busindre", "location": "US", @@ -448,315 +336,119 @@ "status_tcp": true, "version": "", "motd": "", - "last_ping": 1675968658 + "last_ping": 1708636023 }, { - "ipv4": "91.219.59.156", - "ipv6": "-", + "ipv4": "198.199.98.108", + "ipv6": "2604:a880:1:20::32f:1001", "port": 33445, "tcp_ports": [], - "public_key": "8E7D0B859922EF569298B4D261A8CCB5FEA14FB91ED412A7603A585A25698832", - "maintainer": "ray65536", - "location": "RU", + "public_key": "BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F", + "maintainer": "Cody", + "location": "US", + "status_udp": false, + "status_tcp": false, + "version": "1000002015", + "motd": "Cody's Tox node!", + "last_ping": 1692090783 + }, + { + "ipv4": "tox2.abilinski.com", + "ipv6": "tox2.abilinski.com", + "port": 33445, + "tcp_ports": [], + "public_key": "7A6098B590BDC73F9723FC59F82B3F9085A64D1B213AAF8E610FD351930D052D", + "maintainer": "AnthonyBilinski", + "location": "US", + "status_udp": false, + "status_tcp": false, + "version": "1000002018", + "motd": "Running https://github.com/toktok/c-toxcore v0.2.13. qTox best Tox! Contact: AC18841E56CCDEE16E93E10E6AB2765BE54277D67F1372921B5B418A6B330D3D3FAFA60B0931", + "last_ping": 1708608063 + }, + { + "ipv4": "tox01.ky0uraku.xyz", + "ipv6": "tox01.ky0uraku.xyz", + "port": 33445, + "tcp_ports": [], + "public_key": "FD04EB03ABC5FC5266A93D37B4D6D6171C9931176DC68736629552D8EF0DE174", + "maintainer": "ky0uraku", + "location": "NL", "status_udp": false, "status_tcp": false, "version": "1000002013", - "motd": "Ray's Tox Node. TOX ID:3C3D6DB24D24754393679E59F198EF45EE26835AEF7EA3E3ECEA40E204F2B828BE86DF012ABF", - "last_ping": 1669411200 + "motd": "ky0uraku tox01 node", + "last_ping": 1691512685 }, { - "ipv4": "85.143.221.42", - "ipv6": "2a04:ac00:1:9f00:5054:ff:fe01:becd", + "ipv4": "122.116.39.151", + "ipv6": "2001:b011:8:2f22:1957:7f9d:e31f:96dd", "port": 33445, "tcp_ports": [], - "public_key": "DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43", - "maintainer": "MAH69K", - "location": "RU", - "status_udp": false, - "status_tcp": false, - "version": "1000002013", - "motd": "Saluton! Mia Tox ID: B229B7BD68FC66C2716EAB8671A461906321C764782D7B3EDBB650A315F6C458EF744CE89F07. Scribu! ;)", - "last_ping": 1667642040 - }, - { - "ipv4": "tox.verdict.gg", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976", - "maintainer": "Deliran", - "location": "DE", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "78.46.73.141", - "ipv6": "2a01:4f8:120:4091::3", - "port": 33445, - "tcp_ports": [], - "public_key": "02807CF4F8BB8FB390CC3794BDF1E8449E9A8392C5D3F2200019DA9F1E812E46", - "maintainer": "Sorunome", - "location": "DE", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "tox.initramfs.io", - "ipv6": "tox.initramfs.io", - "port": 33445, - "tcp_ports": [], - "public_key": "3F0A45A268367C1BEA652F258C85F4A66DA76BCAA667A49E770BCC4917AB6A25", - "maintainer": "initramfs", + "public_key": "5716530A10D362867C8E87EE1CD5362A233BAFBBA4CF47FA73B7CAD368BD5E6E", + "maintainer": "miaoski", "location": "TW", "status_udp": false, "status_tcp": false, "version": "1000002018", - "motd": "initramfs' tox bootstrap node", - "last_ping": 1674742139 - }, - { - "ipv4": "46.229.50.168", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "813C8F4187833EF0655B10F7752141A352248462A567529A38B6BBF73E979307", - "maintainer": "Stranger", - "location": "UA", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "mk.tox.dcntrlzd.network", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "5E815C25A4E58910A7350EC64ECB32BC9E1919F86844DC97125735C2C30FBE6E", - "maintainer": "cryptogospod", - "location": "MK", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "tox.novg.net", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "D527E5847F8330D628DAB1814F0A422F6DC9D0A300E6C357634EE2DA88C35463", - "maintainer": "blind_oracle", - "location": "NL", - "status_udp": false, - "status_tcp": false, - "version": "1000002012", "motd": "tox-bootstrapd", - "last_ping": 1673387100 + "last_ping": 1681799519 }, { - "ipv4": "87.118.126.207", + "ipv4": "173.232.195.131", "ipv6": "-", "port": 33445, "tcp_ports": [], - "public_key": "0D303B1778CA102035DA01334E7B1855A45C3EFBC9A83B9D916FFDEBC6DD3B2E", - "maintainer": "quux", - "location": "DE", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "81.169.136.229", - "ipv6": "2a01:238:4254:2a00:7aca:fe8c:68e0:27ec", - "port": 33445, - "tcp_ports": [], - "public_key": "E0DB78116AC6500398DDBA2AEEF3220BB116384CAB714C5D1FCD61EA2B69D75E", - "maintainer": "9ofSpades", - "location": "DE", - "status_udp": false, - "status_tcp": false, - "version": "1000002009", - "motd": "🂩 wishes happy toxing. 📡", - "last_ping": 1674603960 - }, - { - "ipv4": "floki.blog", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "6C6AF2236F478F8305969CCFC7A7B67C6383558FF87716D38D55906E08E72667", - "maintainer": "Floki", - "location": "GB", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "bg.tox.dcntrlzd.network", - "ipv6": "bg.tox.dcntrlzd.network", - "port": 33445, - "tcp_ports": [], - "public_key": "20AD2A54D70E827302CDF5F11D7C43FA0EC987042C36628E64B2B721A1426E36", - "maintainer": "cryptogospod", - "location": "BG", - "status_udp": false, - "status_tcp": false, - "version": "1000002015", - "motd": "BG tox-bootstrapd node, courtesy of DCNTRLZD NETWORK. Get in touch at 03279E64D53B1B71DFB35F4F5568B448B015F467C0C6F73FB52C9CCF86C78A45DB83C24E7DF2", - "last_ping": 1667250480 - }, - { - "ipv4": "46.146.229.184", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "94750E94013586CCD989233A621747E2646F08F31102339452CADCF6DC2A760A", - "maintainer": "GS", - "location": "RU", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "gt.sot-te.ch", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "F4F4856F1A311049E0262E9E0A160610284B434F46299988A9CB42BD3D494618", - "maintainer": "SOT-TECH", - "location": "JP", + "public_key": "3F7D1765E54FADEE08DEDDFECCF8ACF38C52580D4DCA77B30CC3E478F2C50A34", + "maintainer": "DEADBEEF", + "location": "PL", "status_udp": false, "status_tcp": false, "version": "1000002018", - "motd": "SOT-TECH NPO", - "last_ping": 1672337220 + "motd": "Maintained by DEADBEEF; ID: AFF6CAA16FFEDE7F458A08D2B19D5DABA6E39A3B26319CC516178DEFBC652154EE393B6C2008", + "last_ping": 1692574743 }, { - "ipv4": "209.59.144.175", - "ipv6": "-", + "ipv4": "198.98.49.206", + "ipv6": "2605:6400:10:caa:1:be:a:7001", "port": 33445, "tcp_ports": [], - "public_key": "214B7FEA63227CAEC5BCBA87F7ABEEDB1A2FF6D18377DD86BF551B8E094D5F1E", - "maintainer": "LasersAreGreat", - "location": "US", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "rs.tox.dcntrlzd.network", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "FC4BADF62DCAF17168A4E3ACAD5D656CF424EDB5E0C0C2B9D77E509E74BD8F0D", - "maintainer": "cryptogospod", - "location": "RS", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "195.123.208.139", - "ipv6": "2a02:27ac::3ff", - "port": 33445, - "tcp_ports": [], - "public_key": "534A589BA7427C631773D13083570F529238211893640C99D1507300F055FE73", + "public_key": "28DB44A3CEEE69146469855DFFE5F54DA567F5D65E03EFB1D38BBAEFF2553255", "maintainer": "Cüber", - "location": "LV", - "status_udp": false, - "status_tcp": false, - "version": "1000002013", - "motd": "😺 meow moew", - "last_ping": 1672186498 - }, - { - "ipv4": "208.38.228.104", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "3634666A51CA5BE1579C031BD31B20059280EB7C05406ED466BD9DFA53373271", - "maintainer": "LasersAreGreat", "location": "US", "status_udp": false, "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "lunarfire.spdns.org", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "E61F5963268A6306CCFE7AF98716345235763529957BD5F45889484654EE052B", - "maintainer": "Merlinoz", - "location": "DE", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "ru.tox.dcntrlzd.network", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "DBB2E896990ECC383DA2E68A01CA148105E34F9B3B9356F2FE2B5096FDB62762", - "maintainer": "cryptogospod", - "location": "RU", - "status_udp": false, - "status_tcp": false, - "version": "1000002015", - "motd": "RU tox-bootstrapd node, courtesy of DCNTRLZD NETWORK. Get in touch @ 03279E64D53B1B71DFB35F4F5568B448B015F467C0C6F73FB52C9CCF86C78A45DB83C24E7DF2", - "last_ping": 1666732500 - }, - { - "ipv4": "43.231.185.239", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "27D4029A96C9674C15B958011C62F63D4D35A23142EF2BA5CD9AF164162B3448", - "maintainer": "Jskmm", - "location": "US", - "status_udp": false, - "status_tcp": false, - "version": "", - "motd": "", - "last_ping": 0 - }, - { - "ipv4": "141.95.108.234", - "ipv6": "-", - "port": 33445, - "tcp_ports": [], - "public_key": "2DEF3156812324B1593A6442C937EAE0A8BD98DE529D2D4A7DD4BA6CB3ECF262", - "maintainer": "CTL.DPC.RE", - "location": "DE", - "status_udp": false, - "status_tcp": false, "version": "1000002013", + "motd": "Tox", + "last_ping": 1685639465 + }, + { + "ipv4": "tox2.mf-net.eu", + "ipv6": "tox2.mf-net.eu", + "port": 33445, + "tcp_ports": [], + "public_key": "70EA214FDE161E7432530605213F18F7427DC773E276B3E317A07531F548545F", + "maintainer": "2mf", + "location": "DE", + "status_udp": false, + "status_tcp": false, + "version": "1000002018", "motd": "tox-bootstrapd", - "last_ping": 1661962379 + "last_ping": 1688899925 + }, + { + "ipv4": "kusoneko.moe", + "ipv6": "kusoneko.moe", + "port": 33445, + "tcp_ports": [], + "public_key": "BE7ED53CD924813507BA711FD40386062E6DC6F790EFA122C78F7CDEEE4B6D1B", + "maintainer": "Kusoneko", + "location": "CA", + "status_udp": false, + "status_tcp": false, + "version": "1000002018", + "motd": "Managed by kusoneko (ID:D8E4A5E926A4E7A85FA40F8CA55D47554F043D3C5CDB457187726F19CE20E52C0D7C3FCE9466)", + "last_ping": 1708449003 }, { "ipv4": "NONE", @@ -771,6 +463,34 @@ "version": "", "motd": "", "last_ping": 0 + }, + { + "ipv4": "193.168.141.224", + "ipv6": "-", + "port": 33445, + "tcp_ports": [], + "public_key": "8E82CF0D7CC42B63748C01DD61EAA490BC35DBDB177942D423DC96D40762C01D", + "maintainer": "DEADBEEF", + "location": "RO", + "status_udp": false, + "status_tcp": false, + "version": "1000002018", + "motd": "Maintained by DEADBEEF; ID: AFF6CAA16FFEDE7F458A08D2B19D5DABA6E39A3B26319CC516178DEFBC652154EE393B6C2008", + "last_ping": 1689605883 + }, + { + "ipv4": "110.41.135.27", + "ipv6": "-", + "port": 33445, + "tcp_ports": [], + "public_key": "E1E50212E2AA339C95BDA1D015B6407224A508F63DE42066B7F2BC632BC8800F", + "maintainer": "Dave", + "location": "CN", + "status_udp": false, + "status_tcp": false, + "version": "", + "motd": "", + "last_ping": 1705829045 } ] }