Online with Multiple ToxIDs
Is that possible?
Not at the same time, no. (qTox does let you switch IDs though.)
Why not?
@srkunze it it ~possible if you're running multiple instances of qTox. Otherwise not possible.
$ qtox --help
It would be great to have one running instance of qTox that can handle multiple instances of toxcore. This would be helpful if you want to set a different status for multiple groups of people (family, friends, work, ...).
Do you have a picture in your head of the UI for this?
I was thinking about something like this:

Maybe it would be better to have the ability to choose a different username/status message/avatar for each group. But that's something that has to be discussed.
That would be very nice. :) This way, you can have a pseudo for random people, your real name for work and family, your habitual nickname for you friends…
When you put it that way, now I'm +1 on this idea...
Wow. Nice mockup. I like it. You'd need a name and status for each, still, but that arrangement's a good way to do it.
I believe it can look better. cast @ItsDuke
@suhr @ItsDuke I'm not 100% happy with the separation between the groups in this first mockup. It's not clear that the labels refer to the contacts below them. Also, I'm not sure how we should handle different usernames for the 'groups'. Any ideas?
What is "Tox User" supposed to be? I assume "Family", "Work" and "Friends" represent ToxIDs.
@codedust Just leave a bit of space below the group. Or (as Jabber does) you simply can expand/collapse a group by having an arrow down icon.
@srkunze The markup assumes that you would have 3 ToxIDs and set the same name/status message for all of therse (which isn't the best solution). I could imagine that the block containing "Tox User" and the status would look a bit bloated when copied before each group label. That's why I designed it the way it is for now.
That exactly does not solve my use-case. :D I am known differently for different groups.
Also, I'm not sure how we should handle different usernames for the 'groups'. Any ideas?
@codedust simplest solution would be: don't.
If you need separate identities, you can ~easily run multiple profiles at the same time. Currently there's no easy way to select profile at qTox's start (to run multiple qTox's instances at the same time), but I guess making GUI for it would be the way to go, instead of trying to complicate UI.
@zetok Why should I as a user need to think about which profile I should use? Just get me online and I use my ToxID (whatever ToxID exactly) whenever I want to.
@srkunze yes, that's the default way qTox operates and will operate
I didn't mean that I need to select the ToxID when I want to use it. It greatly simplifies usage when the client gets me online for all my configured ToxIDs so I can chat with contacts from different ToxIDs at once without thinking about which ToxID to use.
I agree. The default behavior should be that tox automatically generates a ToxID and is ready to use without a single step of configuration (as it is right now). Adding another group should be totally optional (not all users want to do that).
@codedust Your use of the term "group", meaning "group of contacts", is a bit confusing (versus actual groupchats). Rather, you should say something like "adding another ToxID for simultaneous use".
@codedust I'm kinda digging the mockup, but I agree with @srkunze that it needs a way to expand/collapse it. Because imagine a user who has 100 contacts in each, having to scroll down that far just to change each different identity would be a definite headache and a half.
Also, how would this work? Would you have a "mother" Tox ID, and then create a bunch of child IDs underneath it for each grouping of users you want to create?
@dubslow +1 we need a name for this concept. It's sort of like G+ Circles in the way that you group your contacts socially, but I don't think G+ lets you have different names. These things are wholly different identities for the user.
@ItsDuke Basically, yes. We just need a way to manage multiple accounts at once. Identities. Your work people will see WorkGuy, Online, Consolidating Enterprise Spreadsheets, while your friends will see FunDude, Busy, Stickin' It To The Man From The Inside. And if you want to jump onto ToxMegle and chat with random people, you should be able to effortlessly create a new throwaway ID and identity to use for that.
Also, how would this work? Would you have a "mother" Tox ID, and then create a bunch of child IDs underneath it for each grouping of users you want to create?
Let's keep it simple. Just get me online with my ToxIDs simultaneously. Each ToxID should have its own set of contacts, username and status message.
This said, there is no need to associate your different ToxIDs with each other.
Not sure if that needs to be addressed as well but I link both issues, just in case: https://github.com/tux3/qTox/issues/1034
@srkunze So each ToxID should have it's own window, then? Not sure how "simple" you're voting to keep it.
@ItsDuke That's already possible. We need a way to manage multiple identities in one window, like what the mockup @codedust posted is getting at.
@ProMcTagonist Exactly.
Was just playing around with some ideas and decided to see what the thoughts were.
You can see here that the current person has four different identities, and that even when collapsed, you can still get a quick look at how many contacts are online, idle, offline/away, and how many friend requests that identity has.
Each identity status can be changed independently, and each one's contacts can be filtered just like a single-user setup.
Thanks @ItsDuke. :+1: Looks very useful!
Not sure if it's only me but a bit more space between the different groups would help distinguishing them.
Furthermore, I am not sure, if it is necessary to see my avatar and status for each group directly in the list of contacts. Maybe a context menu (popping up to the right of the group) would clean it up.
It is just because, among my contacts, I am not that much important. My contacts are, so should they appear, up-front and first; I am second. Not sure if that makes any sense to you, but at least it does to me.
@ItsDuke This context menu also could handle the (un-)locking regarding password-secured accounts.
@srkunze Perhaps that could be included in a sort of "compact mode"? Maybe I'm just a different sort of person, but having the quick visual image of my avatar helps me quickly parse where I am, especially when the list gets as long as 20-30+ users/names.
@ItsDuke Interesting. Well, I remember stuff mostly by its position and labels (username in our case). First group from the top: work; last group (first from the bottom): family; group in between: special project.
Most important thing is, that is it there. Whether "compact mode", "no at all mode" or "normal mode" is second. This said, I leave the design aspects to you. :)
@ItsDuke I love it, nice work. And I agree with the large appearance of the self status and avatar bar because it helps keep track of what identity you're using, which is very important in a multi-identity setup.
I like the multiple-bars approach because I can picture dragging an identity bar out of the window to give it its own window, and likewise dragging one from a separate window back in.
I had some qualms about it looking a bit cluttered and confusing at first. And how will the scrollbar work in this new mockup?
@ProMcTagonist I would imagine that when the list is so long that it requires a scrollbar, everything would get bumped over to the right a bit to make room for the scrollbar on the left. The identities would not be immune from this either, since there is no longer just one identity.
Though, you could also just show a few users when you expand it (5-10), and just have a scrollbar inside each expanded section to scroll with, so that your identities don't get pushed over. Just a thought.
I had some qualms about it looking a bit cluttered and confusing at first.
That was why I proposed using a different style for contacts than for identities. They look too much the same (is that English?)
They are different and serve different needs and should therefore be presented differently (e.g. different in size if you wish to see your avatars).
I imagine @srkunze had something like this in mind?
@ItsDuke Multiple scrollbars is a no-go for sure.
The lack of avatars severely damages the glanceability of multiple identities. I don't think this is the right idea.
@ProMcTagonist I agree, but I wanted to toss it in just so people would have something concrete to look at.
@ItsDuke Thanks for your effort again. I somehow fail to recognize groups at the first glance. Maybe, it is due to the background color. The items of a group (color, name, status, friends/color of friends) look so disconnected.
@ItsDuke Of course :) Thanks for being involved like this.
@ItsDuke Let me see if I can get you what I mean by using the right buttons in GIMP if I ever find them. Don't hurt me if it looks messy, but I hope it will get you the idea.
@srkunze Haha, no worries. I'm not going to judge anyone's technical skill. It's all about being able to get your point across.

Something like this. :D
Something, I also realized was that we have two views on the world.
For me: "Work" For others: "Charles Hanlon"
I think that also is what makes groups useful. Organizing contacts around purposes and tasks.
The pop-up on the right only appears when e.g. clicking on the name of the group. Then you can change avatar, status, color, public username.
That's nice and clean. I agree with having names for the identities like Work and Family.
I don't like the popup and think that the identity bar would fit just fine underneath.

Thoughts?
I'm not sure how we can tell the user that there are new messages in a closed identity, or an ongoing call, etc... stuff the friend count area with other icons?
Looks good. :) (Although, I like the popup. Maybe, we could make that a setting? :) If not, I am fine as well.)
Re:-newmessages Looks like we need another indicator.
@ProMcTagonist Looks great! ;) I used your mockup and changed two things that could be improved, imo.
- The status indicator next to 'Chris Hansen' should be placed in the bar containing the identity name ('Special Project X'). I think this would be more consistent.
- I think it's more consistent to use the same background color for your own profile and your contacts (but that seems to be very subjective). Anyways, the color of the space left after the last identity should be dark gray as it does not belong to any list of contacts.
So here is another version of your mockup:

@2. I like "Chris" being part of the header with the dark gray instead of the lighter gray. He is not part of the contacts. Now, he looks like being part of them strangely separated by "Online.. 1 Friend Request".
I still do not find it necessary to see "Chris" up front. I would be glad to see a way to turn it off. That leaves more space for contacts. :) Maybe in later versions.
@codedust
-
I like the status changer in the current mockup's single identity setup. And I'm not sure it would be good to change the position of the status changer comparatively between single- and multi- identity setups. They shouldn't seem like different modes.
-
As I saw it, the background color was light grey, and the foreground color was dark grey. Friends sit in the background field, and your own identity bar and the buttons at the bottom are more prominent and are foreground. The friends scroll behind all the foreground stuff. Obviously this changes with multiple identities, but I still think it's good to have the friends and background light and your own things and controls, of which there are fewer, dark.
When there are enough identities and friends to scroll, the foreground/background distinction becomes more visible.

@codedust
- is ~ok
- no. background should be left black.
-
@ProMcTagonist Maybe the status indicator could slide from the header to your profile card. The indicator should not jump to another position when you open/collapse an identitiy. That would not feel intuitive. Also, I replaced the small indicators in the header by the big ones used next to your own profile to achieve a more unified look.
-
@srkunze I agree with the argument that you are not part of your contacts. In @ProMcTagonist's first mockup, it looks like the header was behind the friend list (dark gray could be the background color in the upper half of the image). With the one or two pixel margin of the scrollbar, this changes completely. Maybe we should have this margin even if there is no scrollbar. @ProMcTagonist As I said, the headers look more like foreground elements now. One thing I still don't really like is that the status icons of your friends (online: 43, busy: 22, offline: 117) aren't visually tied to a specific identity. It's not clear that they belong to the identity above themselves. Even though they describe your contacts, I think the right place for them would be the header as that's where the name of your identity is ("14 friends are online").
@zetok See above. ;)

@codedust :+1:
So.. there is a problem.
Apparently when you add to qTox "login page", and want to preserve both currently available features (cross-client compatibility, exporting profiles, "portable" option) it becomes really _hard and messy_ to do multiple profiles.
Backlog of talk about it on IRC - more details: https://gist.github.com/zetok/efb3390c3a10ec128b04
Thus it's important to know whether multiple profiles can't be substituted with a good support for multiple instances, i.e. you could start multiple qTox instances from a single "login" page, each profile in a separate instance.
It would be better to have multiple instances instead, considering that if you want multiple profiles qTox would have to get rid of:
- cross-client compatibility - still possible to import from other client, but not-so-much when it comes to exporting; impossible for other clients to use same file qTox uses
- Portable option - could be kept, but only as qTox-compatible
- export - could be changed to export a .zip of profiles, but it would be better to remove
- messy code, working around what toxcore doesn't provide, which would lead to problems in how qTox would work
- “
_Everything_ would be harder with multiple profiles :)” - possibly other things
Do you really need multiple profiles, even though there will be proper support for multiple instances?
Please voice your opinions. (and by opinions I mean use-cases that multiple instances can't cover)
Reading through that discussion it seems like this really is a no-go. Shame.
Multiple instances are less confusing, anyway. More obvious separation.
If multiple instances mean multiple windows, I tend to dislike this solution. Just telling from a user's experience point of view. If that's a temporary solution, I am sure fine with it.
As it seems, the problem is that toxcore does not support that out of the box within a single process. So, why not having many instances of toxcore doing the messy network stuff and a single window process doing the display stuff?
Not sure about qTox internal design, but what I can tell from my experience as a software engineer/manager, expanding from a single instance to a multiple instance thing always improves design as relevant concepts need to be refactored out properly to be smaller/re-usable/readable.
It's set-based thinking that makes the difference:
My view on this: a user has N profiles which offer M contacts (1-to-many relationship). Each of these contacts can be in L circles (many-to-many-relationship).
So, each profile contributes its contacts to the pool of all contacts. This pool of all contacts then can be used to fill the circles (multiple times).
No 'if's, just loops.
In any case, I appreciate progress on this issue. :)
@srkunze thing is, core doesn't really do stuff like managing actual data on hdd - it's all up to client. And managing this, given core limitations and cross-client compatibility would lead to mess.
qTox could work with multiple profiles, but that would require breaking compatibility with other clients… A lot of effort is made to make clients compatible, since there are good reasons for that.
That being said, toxcore could be a lot improved when it comes to compatibility and provided functionality.
There are no real efforts (AFAIK) to make toxcore provide needed stuff though, so…
@srkunze
So, why not having many instances of toxcore doing the messy network stuff and a single window process doing the display stuff?
That was originally the plan, but it creates a lot more problems than it solves.
Here's a big mess of new problems on the top of my head.
There's of course compatibility with other clients, massive waste of resources (having to do the connection to the network, with all the crypto and bandwith needed, for each Tox ID), limitations with friends (can't move a friend from a subprofile to another without sending a new friend request), there's the problem of what a profile is when it used to be a single .tox file, but now we have several per profile (how do we know that it's 3 subprofiles that we have and not 3 profiles? what happens when we or another client opens a .tox as a single profile if it's actually just a subprofile?), there's the issue of what status do we show in the taskbar if half our Tox IDs are online but the other half got disconnected, dealing with all the extra locking required by the new threads and how they talk to each other, and that's simply a huge change with a million edge cases to consider all around the codebase, a big risk of new subtle profile corruption bugs.
My view on this: a user has N profiles which offer M contacts (1-to-many relationship). Each of these contacts can be in L circles (many-to-many-relationship). So, each profile contributes its contacts to the pool of all contacts. This pool of all contacts then can be used to fill the circles (multiple times).
Oh, but you can't move contacts or circles between two profiles. A pool of all contacts wouldn't work, because each of these contacts are only friend with one of your profiles. You can't share them or pool them, they are tied to one profile.
The cure looks worse than the problem here. Having multiple profiles by running multiple toxcore instances is a horrible hack around toxcore lacking some features. It's probably possible, but that way lies madness.
Alright. :) Thanks for the detailed explanation @zetok and @tux3.
Let me see what the guys from the toxcore have to say about it. If they don't find it worth the hassle, I am all fine with it. But I think I should at least brought this issue to them as well to get their opinion about this.
If they don't see the necessity to improve thing here, that is still fine and I close this issue (except you want me to leave it open for a possible future implementation).
Oh, but you can't move contacts or circles between two profiles. A pool of all contacts wouldn't work, because each of these contacts are only friend with one of your profiles. You can't share them or pool them, they are tied to one profile.
I then got the idea of circles wrong. Technically, I understand that contacts are tied to a single profile.
However, once added, the user should not need to differentiate between contacts. To him, they are all contacts. Maybe, the contacts come to be by having a telephone number of him, an email, an address or a name, but in the end: it's just a contact.
Some illustration (I am from the Python world, so bear with me ( {} means set )):
profile1 = {contact1, contact2} profile2 = {contact3, contact4, contact5}
all_contacts = profile1 + profile2 = {contact1, contact2, contact3, contact4, contact5}
circle1 = {contact1, contact2, contact5} circle2 = {contact3, contact2}
Well, you can have a set of all contact for a profile, and have circles use contacts from the profile. As long as contacts don't move between different profiles and Tox IDs, it's all good.
Understood. Why is that?
Because of the way toxcore works, two people are friends/contacts only if both of them agree. You can't become someone's friend without sending a friend request, so you can't move a friend to another Tox ID without sending a friend request from the new Tox ID.
There's no way to tell a friend that you changed your Tox ID. You have to send a new friend request.
Sure. So, this was a misunderstanding here. The relationship (contact <-> profile) is fine.
I was talking about the relationship (contact <-> circle). At least to me, a circle does not adhere to a profile. It is a way to group contacts (where-ever they come from) in such a way the user finds useful which is not necessarily a substructure of how the profiles are organized.
So you would want a way to share circles between two profiles (assuming the two profiles have all the contacts in that circle)? I'm not sure what that would look like.
Maybe, circle is a term tox defines differently from what I would expect. To me, something like this would be preferable:
profile1--> contact1 <--+
\-> contact2 <-----+
| +--circle2
/-> contact3 <-----+
profile2--> contact4 |
\-> contact5 <--+-----circle1
A circle is a set of pointers to contacts and has nothing to do with profiles. Correct me if I am wrong here.
That's a way to view things.
But sharing circles between profiles would raise some privacy issues. Two profiles are not necessarily owned by the same users, we don't want user A knowing what friends are in user B's circles/profile. So it doesn't make a whole lot of sense to save circles globally.
What we currently have is a list profiles (which can belong to one or more users), each profile having a list of friends/contacts, which can each belong to zero or one of this friend's circles.
profile1 --> contact1 [circle1]
+--> contact2
+--> contact3 [circle1]
\--> circle1 = Friends
profile2 --> contact9
+--> contact2 [circle1]
\--> circle1 = Family
But sharing circles between profiles ...
That is what I meant. FMPOV circles aren't something that can be shared among profiles. Circles are just here to group contacts.
What we currently have is a list profiles (which can belong to one or more users), each profile having a list of friends/contacts, which can each belong to zero or one of this friend's circles.
Now, I see where you are coming from. So, actually with a profile we intermingle two separate concepts:
- ToxID + contacts lists
- storage, passphrases, settings, etc.
What this issue initially was about is: I wanted to have a profile with multiple ToxIDs in it (which I can unlock with the same passphrase) and which encompasses all the friends associated with those multiple ToxIDs.
In the discussion above, ToxID == Profile, for me. Now, I see that the issue at hand is not that easy to make with the current setup.
That is very unfortunate.
I really like tux3's idea from the irc:
[14:48:45]
We can already block individual friends by removing them from the friendlist and adding them later.
We could make use of this "feature" to support different online statuses for each group:

In this mockup the contacts in the "Family"-circle are temporary removed from the friendlist and therefore cannot see my online status. The contacts in the "Friends"-circle can see my online status like they were added to the friendlist the way this is currently done.
Since toxcore doesn't support different user statuses for each contact, friends can only see me as offline or they can see my current online status (it's not possible to set one circle to busy and another one to online).
When you click the button next to "Family" in the mockup, the contacts in this circle will be added to the friendlist again. When you click the button next to "Friends", the contacts in the "Friends"-circle will be temporary removed.
This way we could have different user statuses without supporting multiple profiles (= Tox IDs) per qTox instance (and avoid the additional complexity that would come with it). If toxcore will support different user statuses for each contact in the future, it would only require minimal code changes to support them.
You can't have "different user statuses" in general so much as you can appear as offline to people temporarily, if I understand your method, which is still a good feature.
@codedust , @ProMcTagonist That's just contact blocking (which will be implemented at some point), and it's not going to work for different "statuses".
@ProMcTagonist @zetok I know. The idea was to use contact blocking for "fake online statuses" within one tox account (= one Tox ID):
Since toxcore doesn't support different user statuses for each contact, friends can only see me as offline or they can see my current online status (it's not possible to set one circle to busy and another one to online).
As I said, it would be very easy to implement different user statuses for each group when this feature will be added to toxcore.
when this feature will be added to toxcore.
What makes you so sure that it will be added to toxcore?
What makes you so sure that it will be added to toxcore?
Nothing. I wanted to say: "If this feature will be added to toxcore." But even in case it won't be added, we would still have a nice feature to organize contacts into groups and we would have fake offline statuses.
What makes you so sure that it will be added to toxcore?
Nothing. I wanted to say: "If this feature will be added to toxcore."
see also https://github.com/irungentoo/toxcore/issues/1125
this is a really necessary feature (especially if Tox have no ability for selective Invisible Mode implementation). I like the UI draft of @codedust
I agree. I totally need this. For now, I use screen+toxic and have 5 ToxIDs, and it is very uncomfortable to use it such way.
Here is my idea for the UI:

Each tab is a separate profile. They don't share friends nor settings.
I definitely like this idea, and would be interested to see if it could be implemented. And what were your thoughts on how you'd be notified of a new message in a tab you're not currently using?
Maybe like this?

May I suggest the following ?

That's a great idea. But in that case should also make separate settings. It's useless to anonymize if you can see the IP anyway: for that one account has to have a proxy connection, and the other one doesn't have to. For example, if you talk to random people from one account, and call your family with video from the second account, you can connect through Tor in the first case, and you don't have to do it in the second one.
Any news?