| Summary: | Contact / ContactList Group integration | ||
|---|---|---|---|
| Product: | Telepathy | Reporter: | Simon McVittie <smcv> |
| Component: | tp-qt | Assignee: | Andre Moreira Magalhaes <andrunko> |
| Status: | RESOLVED FIXED | QA Contact: | Telepathy bugs list <telepathy-bugs> |
| Severity: | enhancement | ||
| Priority: | medium | Keywords: | patch |
| Version: | unspecified | ||
| Hardware: | Other | ||
| OS: | All | ||
| URL: | http://git.collabora.co.uk/?p=user/andrunko/telepathy-qt4.git;a=shortlog;h=refs/heads/roster-groups | ||
| Whiteboard: | |||
| i915 platform: | i915 features: | ||
| Bug Depends on: | 20032 | ||
| Bug Blocks: | |||
|
Description
Simon McVittie
2009-02-10 04:06:28 UTC
Comments on andrunko's branch, apart from some that I already told him on IRC.
+ if (group.isEmpty() || group.trimmed().isEmpty()) {
+ return new PendingFailure(this, TELEPATHY_ERROR_INVALID_ARGUMENT,
+ "Group must be a non-empty UTF-8 string");
+ }
This is wrong - nothing says that CMs don't support groups with the empty name, or groups whose name is entirely whitespace. Don't do this check - if the CM doesn't like your group name, it is the CM's responsibility to fail.
+ // TODO Check here. Spec states that in order to create an empty group
+ // RequestHandles with HandleType 'HandleTypeGroup' and the UTF-8 name
+ // of the group should be called, but this just does not work.
+ // Using CreateChannel does the job, so let's use it.
+ /*
+ return connection()->requestHandles(HandleTypeGroup,
+ QStringList() << group);
+ */
You are right that this is both insufficient and unnecessary. The old way to make a group was RequestHandles() followed by RequestChannel(), but CreateChannel() does that for us.
+/**
+ * Attempt to add an user-defined contact list group named \a group.
+ *
+ * On some protocols (e.g. XMPP) empty groups are not represented on the server,
+ * so disconnecting from the server and reconnecting might cause empty groups to
+ * vanish.
+ *
+ * \param group Group name.
+ * \return A pending operation which will return when an attempt has been made
+ * to add an user-defined contact list group.
+ * \sa groupAdded(), groupAddContacts()
+ */
+PendingOperation *ContactManager::addGroup(const QString &group)
+ return connection()->createChannel(request);
I think this function should use ensureChannel, so it succeeds if the group already exists.
Do we actually need API to create a group at all, or should the C++ API to create groups just be "add a contact to the desired group"?
+/**
+ * Attempt to remove an user-defined contact list group named \a group.
+ *
+ * User-defined contact list groups may only be deleted if the group is
+ * already empty.
If the user has explicitly called a method called removeGroup(), wouldn't it be friendlier to remove all the members and then close the channel?
(The restriction on deleting non-empty groups via the D-Bus API is to stop naive clients, like MC 4, accidentally deleting all your groups because they don't know where to dispatch them... it's not desirable here.)
-void ContactManager::setContactListChannels(
+void ContactManager::setContactListsChannels(
Revert this, please. The old version is correct English.
+/**
+ * Return a list of user-defined contact list groups the contact belongs.
+ *
+ * This method requires Connection::FeatureRosterGroups to be enabled.
Can we have a feature on Contact objects, that implicitly enables that Connection feature the first time it is enable on any Contact?
I think a setGroups() method would be good to have - in the current D-Bus API it would become an inefficient series of calls to group{Add,Remove}Contacts, but in a future (more Contact-centric) D-Bus API, it would be a single D-Bus call.
+void TestConnRosterGroups::initTestCase()
...
+ g_set_prgname("conn-basics");
No. Hope that helps. :-P
What's the test coverage in lcov like? I find it hard to believe that this test covers all the new functionality, although what's there looks reasonable.
The obligatory en_BR -> en_GB pass through the docs: I don't know whether it's better to call things "contact groups" or "contact list groups"; I vaguely lean towards "contact groups". It may be worth adding a brief explanation of the concept of a contact [list] group in one function header, and having a \sa to it from every other mention. In particular, mention that in most protocols, contact groups behave like tags, so a contact can be in 0, 1 or many groups. Perhaps we need some support for checking the Only_One_Group flag (<http://telepathy.freedesktop.org/spec/org.freedesktop.Telepathy.Channel.Interface.Group.html#org.freedesktop.Telepathy.Channel.Interface.Group.Channel_Group_Flags>), but tbh that can wait. + * Return a list of user-defined contact list groups names. "contact [list] groups' names" + * Return a list of contacts on a given user-defined contact list group + * named \a group. Return the contacts in the user-defined contact [list] group named \a group + * Return a list of user-defined contact list groups the contact belongs. Return the names of the user-defined contact [list] groups to which the contact belongs Fixed upstream, it will be in next release 0.1.9 |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.