void UserListBase::drawUpdates() { m_bDirty = false; updTimer->stop(); QListViewItem *item; list<unsigned long>::iterator it; for (it = updGroups.begin(); it != updGroups.end(); ++it){ Group *group = getContacts()->group(*it); if (group == NULL) continue; switch (m_groupMode){ case 1: item = findGroupItem(group->id()); if (item){ static_cast<GroupItem*>(item)->update(group); repaintItem(item); }else{ new GroupItem(this, group, true); } break; case 2: for (item = firstChild(); item; item = item->nextSibling()){ UserViewItemBase *i = static_cast<UserViewItemBase*>(item); if (i->type() != DIV_ITEM) continue; DivItem *divItem = static_cast<DivItem*>(i); GroupItem *grpItem = findGroupItem(group->id(), divItem); if (grpItem){ grpItem->update(group); repaintItem(grpItem); }else{ new GroupItem(divItem, group, divItem->state() == DIV_OFFLINE); } } break; } } updGroups.clear(); DivItem *itemOnline = NULL; DivItem *itemOffline = NULL; if (updContacts.size()){ if (m_groupMode != 1){ for (item = firstChild(); item != NULL; item = item->nextSibling()){ UserViewItemBase *i = static_cast<UserViewItemBase*>(item); if (i->type() != DIV_ITEM) continue; DivItem *divItem = static_cast<DivItem*>(i); if (divItem->state() == DIV_ONLINE) itemOnline = divItem; if (divItem->state() == DIV_OFFLINE) itemOffline = divItem; } } } for (it = updContacts.begin(); it != updContacts.end(); ++it){ Contact *contact = getContacts()->contact(*it); if (contact == NULL) continue; ContactItem *contactItem; GroupItem *grpItem; unsigned style; string icons; unsigned status = getUserStatus(contact, style, icons); unsigned unread = getUnread(contact->id()); bool bShow = false; ListUserData *data = (ListUserData*)(contact->getUserData(CorePlugin::m_plugin->list_data_id)); if (data && data->ShowAllways) bShow = true; switch (m_groupMode){ case 0: if (status == STATUS_OFFLINE){ if (itemOnline){ contactItem = findContactItem(contact->id(), itemOnline); if (contactItem){ deleteItem(contactItem); if (itemOnline->firstChild() == NULL){ deleteItem(itemOnline); itemOnline = NULL; } } } if ((unread == 0) && !bShow && m_bShowOnline){ if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ deleteItem(contactItem); if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } break; } if (itemOffline == NULL){ itemOffline = new DivItem(this, DIV_OFFLINE); setOpen(itemOffline, true); } contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(itemOffline); repaintItem(contactItem); }else{ contactItem = new ContactItem(itemOffline, contact, status, style, icons.c_str(), unread); } }else{ if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ deleteItem(contactItem); if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } if (itemOnline == NULL){ itemOnline = new DivItem(this, DIV_ONLINE); setOpen(itemOnline, true); } contactItem = findContactItem(contact->id(), itemOnline); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(itemOnline); repaintItem(contactItem); }else{ contactItem = new ContactItem(itemOnline, contact, status, style, icons.c_str(), unread); } } break; case 1: contactItem = findContactItem(contact->id()); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if (((status == STATUS_OFFLINE) && (unread == 0) && !bShow && m_bShowOnline) || (contact->getGroup() != grpItem->id())){ grpItem->m_nContacts--; if (contactItem->m_bOnline) grpItem->m_nContactsOnline--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; grpItem = NULL; } } if ((status != STATUS_OFFLINE) || unread || bShow || !m_bShowOnline){ if (grpItem == NULL) grpItem = findGroupItem(contact->getGroup()); if (grpItem){ if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(grpItem); repaintItem(contactItem); if (!m_bShowOnline && (contactItem->m_bOnline != (status != STATUS_OFFLINE))){ if (status == STATUS_OFFLINE){ grpItem->m_nContactsOnline--; contactItem->m_bOnline = false; }else{ grpItem->m_nContactsOnline++; contactItem->m_bOnline = true; } addGroupForUpdate(grpItem->id()); } }else{ contactItem = new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; if (!m_bShowOnline && (status != STATUS_OFFLINE)){ grpItem->m_nContactsOnline++; contactItem->m_bOnline = true; } addGroupForUpdate(grpItem->id()); } } } break; case 2: contactItem = findContactItem(contact->id(), itemOnline); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if ((status == STATUS_OFFLINE) || (grpItem->id() != contact->getGroup())){ grpItem->m_nContacts--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; } } if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if ((status != STATUS_OFFLINE) || (grpItem->id() != contact->getGroup())){ grpItem->m_nContacts--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; if (m_bShowOnline && (grpItem->firstChild() == NULL)){ deleteItem(grpItem); grpItem = NULL; if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } } } if ((unread == 0) && !bShow && (status == STATUS_OFFLINE) && m_bShowOnline) break; DivItem *divItem; if (status == STATUS_OFFLINE){ if (itemOffline == NULL){ itemOffline = new DivItem(this, DIV_OFFLINE); setOpen(itemOffline, true); } divItem = itemOffline; }else{ divItem = itemOnline; } grpItem = findGroupItem(contact->getGroup(), divItem); if (grpItem == NULL){ Group *grp = getContacts()->group(contact->getGroup()); if (grp == NULL) break; grpItem = new GroupItem(divItem, grp, true); } contactItem = findContactItem(contact->id(), grpItem); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(grpItem); }else{ new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; addGroupForUpdate(grpItem->id()); } } } updContacts.clear(); for (list<QListViewItem*>::iterator it_sort = sortItems.begin(); it_sort != sortItems.end(); ++it_sort){ (*it_sort)->sort(); } sortItems.clear(); }
void UserListBase::fill() { m_pressedItem = NULL; clear(); GroupItem *grpItem; ContactItem *contactItem; UserViewItemBase *divItem; UserViewItemBase *divItemOnline = NULL; UserViewItemBase *divItemOffline = NULL; ContactList *list = getContacts(); ContactList::GroupIterator grp_it; ContactList::ContactIterator contact_it; Group *grp; Contact *contact; switch (m_groupMode){ case 0: divItemOnline = NULL; divItemOffline = NULL; while ((contact = ++contact_it) != NULL){ if (contact->getIgnore() || contact->getTemporary()) continue; unsigned style; string icons; unsigned status = getUserStatus(contact, style, icons); unsigned unread = getUnread(contact->id()); bool bShow = false; ListUserData *data = (ListUserData*)contact->getUserData(CorePlugin::m_plugin->list_data_id); if (data && data->ShowAllways) bShow = true; if ((unread == 0) && !bShow && (status == STATUS_OFFLINE) && m_bShowOnline) continue; divItem = (status == STATUS_OFFLINE) ? divItemOffline : divItemOnline; if (divItem == NULL){ if (status == STATUS_OFFLINE){ divItemOffline = new DivItem(this, DIV_OFFLINE); setOpen(divItemOffline, true); divItem = divItemOffline; }else{ divItemOnline = new DivItem(this, DIV_ONLINE); setOpen(divItemOnline, true); divItem = divItemOnline; } } new ContactItem(divItem, contact, status, style, icons.c_str(), unread); } break; case 1: while ((grp = ++grp_it) != NULL){ if (grp->id() == 0) continue; grpItem = new GroupItem(this, grp, true); } grp = list->group(0); if (grp){ grpItem = new GroupItem(this, grp, true); } while ((contact = ++contact_it) != NULL){ if (contact->getIgnore() || contact->getTemporary()) continue; unsigned style; string icons; unsigned status = getUserStatus(contact, style, icons); unsigned unread = getUnread(contact->id()); bool bShow = false; ListUserData *data = (ListUserData*)contact->getUserData(CorePlugin::m_plugin->list_data_id); if (data && data->ShowAllways) bShow = true; if ((status == STATUS_OFFLINE) && !bShow && (unread == 0) && m_bShowOnline) continue; grpItem = findGroupItem(contact->getGroup()); if (grpItem == NULL) continue; contactItem = new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; if ((status != STATUS_OFFLINE) && !m_bShowOnline){ grpItem->m_nContactsOnline++; contactItem->m_bOnline = true; } } break; case 2: divItemOnline = new DivItem(this, DIV_ONLINE); setOpen(divItemOnline, true); while ((grp = ++grp_it) != NULL){ if (grp->id() == 0) continue; grpItem = new GroupItem(divItemOnline, grp, false); } grp = list->group(0); if (grp){ grpItem = new GroupItem(divItemOnline, grp, false); } if (!m_bShowOnline){ divItemOffline = new DivItem(this, DIV_OFFLINE); setOpen(divItemOffline, true); grp_it.reset(); while ((grp = ++grp_it) != NULL){ if (grp->id() == 0) continue; grpItem = new GroupItem(divItemOffline, grp, true); } grp = list->group(0); if (grp){ grpItem = new GroupItem(divItemOffline, grp, true); } } while ((contact = ++contact_it) != NULL){ if (contact->getIgnore() || contact->getTemporary()) continue; unsigned style; string icons; unsigned status = getUserStatus(contact, style, icons); unsigned unread = getUnread(contact->id()); bool bShow = false; ListUserData *data = (ListUserData*)contact->getUserData(CorePlugin::m_plugin->list_data_id); if (data && data->ShowAllways) bShow = true; if ((unread == 0) && !bShow && (status == STATUS_OFFLINE) && m_bShowOnline) continue; if (status == STATUS_OFFLINE){ if (divItemOffline == NULL){ divItemOffline = new DivItem(this, DIV_OFFLINE); setOpen(divItemOffline, true); } divItem = divItemOffline; }else{ divItem = divItemOnline; } grpItem = findGroupItem(contact->getGroup(), divItem); if (grpItem == NULL){ Group *grp = getContacts()->group(contact->getGroup()); if (grp == NULL) continue; grpItem = new GroupItem(divItem, grp, true); } new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; } break; } adjustColumn(); }
void LinTORManager::setupSubscriptions() { QJson::Parser parser; bool ok; QVariantMap result = parser.parse(subscriptionsReply->readAll(), &ok).toMap(); subscriptionsReply->deleteLater(); subscriptionsReply = 0; if (!ok) { qWarning() << "Failed to parse The Old Reader subscriptions data"; return; } QList<QVariant> subscriptionsVariants = result["subscriptions"].toList(); if (!subscriptionsVariants.isEmpty()) { QList<QVariant>::const_iterator index = subscriptionsVariants.constBegin(); QList<QVariant>::const_iterator end = subscriptionsVariants.constEnd(); QMap<QString, QVariant> singleSubscriptionMap; LinTORSubscriptionItem *item; while (index != end) { singleSubscriptionMap = (*index).toMap(); item = new LinTORSubscriptionItem( singleSubscriptionMap["id"].toString(), singleSubscriptionMap["title"].toString(), singleSubscriptionMap["sortid"].toString(), singleSubscriptionMap["firstitemmsec"].toString(), singleSubscriptionMap["url"].toString(), singleSubscriptionMap["htmlUrl"].toString(), singleSubscriptionMap["iconUrl"].toString(), qnam); // Make this a child of the All Subs item: allSubsItem->addChild(item); QList<QVariant> categoriesVariants = singleSubscriptionMap["categories"].toList(); if (!categoriesVariants.isEmpty()) { QList<QVariant>::const_iterator catsIndex = categoriesVariants.constBegin(); QList<QVariant>::const_iterator catsEnd = categoriesVariants.constEnd(); QMap<QString, QVariant> singleCatMap; while (catsIndex != catsEnd) { singleCatMap = (*catsIndex).toMap(); QString catID = singleCatMap["id"].toString(); // item->addCategory(catID, singleCatMap["label"].toString()); if (folderItems.contains(catID)) { folderItems[catID]->addChild( new LinTORSubscriptionItem(*item)); } ++catsIndex; } } ++index; } } // Now, query for unread numbers: getUnread(); }