void AP_UnixDialog_CollaborationShare::_populateBuddyModel(bool refresh) { UT_DEBUGMSG(("AP_UnixDialog_CollaborationShare::_populateBuddyModel()\n")); UT_return_if_fail(m_pBuddyModel); AbiCollabSessionManager* pManager = AbiCollabSessionManager::getManager(); UT_return_if_fail(pManager); AccountHandler* pHandler = _getActiveAccountHandler(); UT_return_if_fail(pHandler); if (refresh) { // signal the account to refresh its buddy list ... pHandler->getBuddiesAsync(); // this function is really sync() atm; we need to rework this dialog to make it proper async // fetch the current ACL m_vAcl = _getSessionACL(); } // clear out the old contents, if any _freeBuddyList(); GtkTreeIter iter; for (UT_uint32 i = 0; i < pHandler->getBuddies().size(); i++) { BuddyPtr pBuddy = pHandler->getBuddies()[i]; UT_continue_if_fail(pBuddy); if (!pBuddy->getHandler()->canShare(pBuddy)) { UT_DEBUGMSG(("Not allowed to share with buddy: %s\n", pBuddy->getDescription().utf8_str())); continue; } // crap, we can't store shared pointers in the list store; use a // hack to do it (which kinda defies the whole shared pointer thingy, // but alas...) BuddyPtrWrapper* pWrapper = new BuddyPtrWrapper(pBuddy); gtk_list_store_append (m_pBuddyModel, &iter); gtk_list_store_set (m_pBuddyModel, &iter, SHARE_COLUMN, _populateShareState(pBuddy), DESC_COLUMN, pBuddy->getDescription().utf8_str(), BUDDY_COLUMN, pWrapper, -1); } gtk_widget_show_all(m_wBuddyTree); }
void AbiCollabSessionManager::storeProfile() { UT_DEBUGMSG(("AbiCollabSessionManager::storeProfile()\n")); xmlBufferPtr doc = xmlBufferCreate(); if (doc) { xmlTextWriterPtr writer = xmlNewTextWriterMemory(doc, 0); if (writer) { int rc = xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL); if (rc >= 0) { // TODO: one could check every return value here, but I'm lazy right now xmlTextWriterStartElement(writer, reinterpret_cast<const xmlChar*>("AbiCollabProfile")); for (UT_uint32 i = 0; i < m_vecAccounts.size(); i++) { AccountHandler* pHandler = m_vecAccounts[i]; UT_continue_if_fail(pHandler); xmlTextWriterStartElement(writer, reinterpret_cast<const xmlChar*>("AccountHandler")); // write out the account handler type xmlTextWriterWriteAttribute(writer, reinterpret_cast<const xmlChar*>("type"), BAD_CAST pHandler->getStorageType().utf8_str()); // write out the account handler properties for (PropertyMap::const_iterator cit = pHandler->getProperties().begin(); cit != pHandler->getProperties().end(); cit++) { xmlTextWriterWriteElement(writer, BAD_CAST cit->first.c_str(), BAD_CAST BAD_CAST cit->second.c_str()); } // write out the account handler buddies xmlTextWriterStartElement(writer, reinterpret_cast<const xmlChar*>("buddies")); for (UT_uint32 j = 0; j < pHandler->getBuddies().size(); j++) { BuddyPtr pBuddy = pHandler->getBuddies()[j]; UT_continue_if_fail(pBuddy); if (!pBuddy->isVolatile()) { // we need to be able to store buddy properties UT_ASSERT_HARMLESS(UT_NOT_IMPLEMENTED); /*xmlTextWriterStartElement(writer, reinterpret_cast<const xmlChar*>("buddy")); // write out the buddy properties // TODO: for now, the only useful property a buddy has is its "name"; // However in the future we really should write out a generic property list xmlTextWriterWriteElement( writer, reinterpret_cast<const xmlChar*>("name"), reinterpret_cast<const xmlChar*>(pBuddy->getName().utf8_str()) ); xmlTextWriterEndElement(writer);*/ /* end buddy */ } } xmlTextWriterEndElement(writer); /* end buddies */ xmlTextWriterEndElement(writer); /* end AccountHandler */ } xmlTextWriterEndElement(writer); /* end AbiCollabProfile */ } xmlTextWriterEndDocument(writer); xmlFreeTextWriter(writer); gchar * s = g_build_filename(XAP_App::getApp()->getUserPrivateDirectory(), "AbiCollab.Profile",NULL); UT_UTF8String profile(s); FREEP(s); char *uri = UT_go_filename_to_uri(profile.utf8_str()); GError* error = 0; GsfOutput* out = UT_go_file_create (uri, &error); if (out) { gsf_output_write(out, strlen(reinterpret_cast<const char*>(const_cast<const xmlChar*>(doc->content))), reinterpret_cast<const guint8*>(const_cast<const xmlChar*>(doc->content)) ); gsf_output_close(out); g_object_unref(G_OBJECT(out)); } else { UT_DEBUGMSG(("Error creating AbiCollab Profile %s: %s!\n", profile.utf8_str(), error ? error->message : "unknown error")); } FREEP(uri); } else { UT_DEBUGMSG(("Error creating XML output writer\n")); } xmlBufferFree(doc); } else { UT_DEBUGMSG(("Error creating XML output buffer\n")); } }