qTox / qTox

qTox is a chat, voice, video, and file transfer IM client using the encrypted peer-to-peer Tox protocol.
https://qtox.github.io/
GNU General Public License v3.0
4.76k stars 1.05k forks source link

Need a contact export function #6284

Open Xanuman opened 3 years ago

Xanuman commented 3 years ago

At first I used qtox on windows 10. During this time, I have accumulated several contacts.

When switching to Linux, I connected to my account by importing the * .tox file

But the contact list in qtox (Linux) was empty.

We need to somehow solve this problem.

I suggest also writing the list of contacts to the * .tox file so that it can be added in other systems

anthonybilinski commented 3 years ago

The .tox profile should be compatible between systems, and the friend list is stored in there. I personally use the same profiles on multiple systems. Note that if you are online at the same time with the same profile on multiple systems, bad things will happen.

It's weird that you were able to open the profile but that the friends list was empty. How did you import the profile on Linux? It think the only way to do that would be to drop it under ~/.config/tox/ and then from the qTox login screen select it from the username list.

Xanuman commented 3 years ago

I tried using different methods to connect the * .tox configuration file One of the options. I copied this file to the /home/user/.config/tox folder Then I entered an account with a password for this configuration. The connection is established. The profile is loaded. And the contact list is empty.

I tried this on two operating systems: Linux Manjaro Linux Ubuntu

I remind you. Initially, the profile was created in the Windows 10 operating system (qtox).

anthonybilinski commented 3 years ago

I just tested on my side moving an existing profile from Windows 10 to Ubuntu 20.10 ans was able to load it including the contact list and chat history, so I'm still stumped as to what's going wrong.

Could you provide the debug logs from your Linux log? It's accessible from settings -> advanced -> export/copy debug log.

Are you able to reproduce this issue with a new profile?

Xanuman commented 3 years ago

[14:26:42.915 UTC] :0 : Info: Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. [14:26:43.250 UTC] persistence/settings.cpp:117 : Debug: No settings file found, using defaults [14:26:43.250 UTC] persistence/settings.cpp:121 : Debug: "Loading settings from :/conf/qtox.ini" [14:26:43.254 UTC] ipc.cpp:61 : Debug: Our global IPC ID is xxxxxxxxxxxxxxxxxx [14:26:43.254 UTC] main.cpp:312 : Debug: commit: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [14:26:43.440 UTC] :0 : Warning: "/proc/89548/root" [14:32:48.235 UTC] :0 : Info: Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. [14:32:48.446 UTC] persistence/settings.cpp:117 : Debug: No settings file found, using defaults [14:32:48.446 UTC] persistence/settings.cpp:121 : Debug: "Loading settings from :/conf/qtox.ini" [14:32:48.447 UTC] ipc.cpp:61 : Debug: Our global IPC ID is xxxxxxxxxxxxxxxxxxxx [14:32:48.447 UTC] main.cpp:312 : Debug: commit: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [14:32:48.461 UTC] persistence/settings.cpp:2433 : Debug: Creating new profile settings in "/home/xxxxx/.config/tox//xxxxxxx.ini" [14:32:48.586 UTC] :0 : Warning: "/proc/89885/root" [14:33:02.516 UTC] persistence/profile.cpp:146 : Debug: Loading tox save "/home/xxxx/.config/tox/xxxxxxxxxxxx.tox" [14:33:02.588 UTC] persistence/settings.cpp:487 : Debug: Loading personal settings from "/home/xxxx/.config/tox/xxxxxxxxx.ini" [14:33:02.589 UTC] core/toxoptions.cpp:110 : Debug: Core starting with IPv6 enabled [14:33:02.662 UTC] persistence/db/rawdatabase.cpp:321 : Debug: Highest supported SQLCipher params on this system are "4.0 default" [14:33:02.662 UTC] persistence/db/rawdatabase.cpp:292 : Debug: Setting SQLCipher "4.0 default" parameters [14:33:02.662 UTC] persistence/db/rawdatabase.cpp:199 : Info: Opened database with SQLCipher "4.0 default" parameters [14:33:02.693 UTC] persistence/history.cpp:240 : Debug: Database created at schema version 4 [14:33:02.693 UTC] persistence/settings.cpp:487 : Debug: Loading personal settings from "/home/xxxxx/.config/tox/xxxxxxxxxx.ini" [14:33:02.693 UTC] persistence/settings.cpp:606 : Debug: "Saving global settings at /home/xxxxx/.config/tox/qtox.ini" [14:33:02.697 UTC] nexus.cpp:86 : Debug: Starting up [14:33:03.127 UTC] persistence/profile.cpp:318 : Debug: Self avatar not found, will broadcast empty avatar to friends [14:33:03.497 UTC] net/updatecheck.cpp:143 : Info: qTox is up to date [14:33:04.561 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:04.589 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:09.112 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:09.112 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:19.121 UTC] core/core.cpp:81 : Critical: Could not resolve hostname, or invalid IP address [14:33:29.130 UTC] core/core.cpp:81 : Critical: Could not resolve hostname, or invalid IP address [14:33:33.611 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:33.612 UTC] core/core.cpp:484 : Debug: "Connecting to a bootstrap node..." [14:33:35.861 UTC] core/core.cpp:446 : Debug: Connected to the DHT [14:34:03.875 UTC] :0 : Warning: QXcbConnection: XCB error: 3 (BadWindow), sequence: 4549, resource id: 0, major code: 18 (ChangeProperty), minor code: 0 [14:34:06.084 UTC] :0 : Warning: QXcbConnection: XCB error: 3 (BadWindow), sequence: 4567, resource id: 0, major code: 18 (ChangeProperty), minor code: 0 [14:34:09.537 UTC] :0 : Warning: QXcbConnection: XCB error: 3 (BadWindow), sequence: 4591, resource id: 0, major code: 18 (ChangeProperty), minor code: 0 [14:44:09.224 UTC] widget/form/addfriendform.cpp:254 : Debug: Import list: [14:44:09.225 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "t������\u0001XP�\u00107g\u0010\u0016n\t�\u0003����B\u0006G��ie-]�Z���3����'��" [14:44:19.038 UTC] widget/form/addfriendform.cpp:254 : Debug: Import list: [14:44:19.038 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "toxEsaveo;�4e�D?N;#\":�>0�۸<�����\u007Fܽ,:0\u000B�" [14:44:19.038 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "�K3��\u0013�e�y2q̽wLݯ\u0019��1�\u007F\uF467�\t�6\u0018ؼ\u0019��70;�E���3��p�" [14:44:19.038 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "�D�\u000BJevw�߳}�kys�h��@\u001F��\���� ���M^\u0004|jQ0" [14:44:47.235 UTC] widget/form/addfriendform.cpp:254 : Debug: Import list: [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[Advanced]" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dbSyncType=1946842991" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "enableIPv6=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "enableLanDiscovery=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "forceTCP=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "makeToxPortable=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[Audio]" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "audioBitrate=64" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "audioInDevEnabled=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "audioOutDevEnabled=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "audioThreshold=0" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "enableTestSound=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "inDev=" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "inGain=0" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "outDev=" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "outVolume=100" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[Chat]" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "chatMessageFont=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s\xbf\xf0\0\0\0\0\0\0\0\0\0\x10\x5\x1\0\x32\x10)" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[GUI]" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dateFormat=yyyy-MM-dd" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "desktopNotify=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dontGroupWindows=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "emojiFontPointSize=24" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "firstColumnHandlePos=50" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "groupAlwaysNotify=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "groupchatPosition=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "lightTrayIcon=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "minimizeOnClose=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "minimizeToTray=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "nameColors=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "notify=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "secondColumnHandlePosFromRight=50" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "separateWindow=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "showIdenticons=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "showWindow=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "smileyPack=:/smileys/emojione/emoticons.xml" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "spellCheckingEnabled=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "statusChangeNotificationEnabled=false" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "style=Fusion" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "themeColor=0" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "timestampFormat=hh:mm:ss" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "useEmoticons=true" [14:44:47.235 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[%General]" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "autoAcceptMaxSize=20971520" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "autoAwayTime=10" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "autoSaveEnabled=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "autostartInTray=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "busySound=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "checkUpdates=true" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "closeToTray=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "currentProfile=xxxxxxxxxxx" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "globalAutoAcceptDir=/home/xxxx/" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "notifyHide=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "notifySound=true" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "showSystemTray=true" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "stylePreference=1" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "translation=en" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[Login]" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "autoLogin=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[State]" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dialogGeometry=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dialogSettingsGeometry=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "dialogSplitterState=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "splitterState=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "windowGeometry=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "windowState=@ByteArray()" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "[Video]" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "camVideoFPS=@Variant(\0\0\0\x87\0\0\0\0)" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "camVideoRes=@Rect(0 0 0 0)" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "screenGrabbed=false" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "screenRegion=@Rect(0 0 0 0)" [14:44:47.236 UTC] widget/form/addfriendform.cpp:263 : Debug: Invalid ID: "videoDev="

Xanuman commented 3 years ago

These are the logs on the Linux machine (Manjaro) just at the time of connecting the xxx.tox file I replaced confidential data with xxx characters Perhaps you need logs on the Windows 10 side at the time of saving the * .tox file?

anthonybilinski commented 3 years ago

qTox has a global qtox.ini file for global client setting, then in addition two files per profile, a name.tox file that contains your tox keys and friends, and a name.ini file that contains profile specific client settings.

Sorry I'm just now understanding what you meant. I was thinking of the login screen's "Import" button, which expects a .tox file (tox profile), but what your logs show and what makes sense with what you're talking about is the "Add friends" -> "Import Contacts" option, and it looks like it was given the qtox.ini configuration file. That feature expects just a plain line with one Tox ID per line

And you're right that qTox has no way to generate a file that just contains the contacts, one per line, as needed to import. The reason for this is that Tox IDs, which this import requires, are different from the Tox public keys that you remember your friends by. The Tox ID is only used during the friend invite, and can be changed since you invited them, or in the case that they invited you, you never received their Tox ID. This can be seen at "Settings" -> "Privacy" -> "NoSpam". Because of this qTox doesn't necessarily know the Tox IDs of even friends you're currently talking to.

Importing the profile like I was thinking of would keep all the friends, but then you would be using the same profile, and synching them back and forth between the two places you use them would be a bit of a pain, and you wouldn't be able to be online with both at the same time.

So unfortunately for your case, this is a privacy design by Tox to avoid Tox IDs being endlessly sharable, so can't really be implemented in qTox.