| 700 g_list_free(list); |
700 g_list_free(list); |
| 701 } |
701 } |
| 702 |
702 |
| 703 /* This returns NULL if the active accounts don't have identical |
703 /* This returns NULL if the active accounts don't have identical |
| 704 * statuses and a token account if they do */ |
704 * statuses and a token account if they do */ |
| 705 static PurpleAccount* check_active_accounts_for_identical_statuses(void) |
705 static |
| 706 { |
706 PurpleAccount *check_active_accounts_for_identical_statuses(void) { |
| 707 GList *iter, *active_accts = purple_accounts_get_all_active(); |
707 PurpleAccountManager *manager = NULL; |
| |
708 GList *iter, *active_accts = NULL; |
| 708 PurpleAccount *acct1 = NULL; |
709 PurpleAccount *acct1 = NULL; |
| 709 const char *proto1 = NULL; |
710 const char *proto1 = NULL; |
| |
711 |
| |
712 manager = purple_account_manager_get_default(); |
| |
713 active_accts = purple_account_manager_get_active(manager); |
| 710 |
714 |
| 711 if (active_accts) { |
715 if (active_accts) { |
| 712 acct1 = active_accts->data; |
716 acct1 = active_accts->data; |
| 713 proto1 = purple_account_get_protocol_id(acct1); |
717 proto1 = purple_account_get_protocol_id(acct1); |
| 714 } else { |
718 } else { |
| 1711 |
1715 |
| 1712 if (changed) |
1716 if (changed) |
| 1713 { |
1717 { |
| 1714 /* Manually find the appropriate transient status */ |
1718 /* Manually find the appropriate transient status */ |
| 1715 if (status_box->token_status_account) { |
1719 if (status_box->token_status_account) { |
| |
1720 PurpleAccountManager *manager = NULL; |
| 1716 GList *iter = purple_savedstatuses_get_all(); |
1721 GList *iter = purple_savedstatuses_get_all(); |
| 1717 GList *tmp, *active_accts = purple_accounts_get_all_active(); |
1722 GList *active_accts = NULL; |
| |
1723 |
| |
1724 manager = purple_account_manager_get_default(); |
| |
1725 active_accts = purple_account_manager_get_active(manager); |
| 1718 |
1726 |
| 1719 for (; iter != NULL; iter = iter->next) { |
1727 for (; iter != NULL; iter = iter->next) { |
| 1720 PurpleSavedStatus *ss = iter->data; |
1728 PurpleSavedStatus *ss = iter->data; |
| 1721 const char *ss_msg = purple_savedstatus_get_message(ss); |
1729 const char *ss_msg = purple_savedstatus_get_message(ss); |
| 1722 /* find a known transient status that is the same as the |
1730 /* find a known transient status that is the same as the |
| 1725 purple_savedstatus_has_substatuses(ss) && /* Must have substatuses */ |
1733 purple_savedstatus_has_substatuses(ss) && /* Must have substatuses */ |
| 1726 purple_strequal(ss_msg, message)) |
1734 purple_strequal(ss_msg, message)) |
| 1727 { |
1735 { |
| 1728 gboolean found = FALSE; |
1736 gboolean found = FALSE; |
| 1729 /* this status must have substatuses for all the active accts */ |
1737 /* this status must have substatuses for all the active accts */ |
| 1730 for(tmp = active_accts; tmp != NULL; tmp = tmp->next) { |
1738 while(active_accts != NULL) { |
| 1731 PurpleAccount *acct = tmp->data; |
1739 PurpleAccount *acct = active_accts->data; |
| 1732 PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct); |
1740 PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct); |
| 1733 if (sub) { |
1741 if (sub) { |
| 1734 const PurpleStatusType *sub_type = |
1742 const PurpleStatusType *sub_type = |
| 1735 purple_savedstatus_substatus_get_status_type(sub); |
1743 purple_savedstatus_substatus_get_status_type(sub); |
| 1736 const char *subtype_status_id = purple_status_type_get_id(sub_type); |
1744 const char *subtype_status_id = purple_status_type_get_id(sub_type); |
| 1737 if (purple_strequal(subtype_status_id, id)) { |
1745 if (purple_strequal(subtype_status_id, id)) { |
| 1738 found = TRUE; |
1746 found = TRUE; |
| 1739 break; |
1747 break; |
| 1740 } |
1748 } |
| 1741 } |
1749 } |
| |
1750 |
| |
1751 active_accts = g_list_delete_link(active_accts, |
| |
1752 active_accts); |
| 1742 } |
1753 } |
| 1743 |
1754 |
| 1744 if (found) { |
1755 if (found) { |
| 1745 saved_status = ss; |
1756 saved_status = ss; |
| 1746 break; |
1757 break; |
| 1754 /* If we've used this type+message before, lookup the transient status */ |
1765 /* If we've used this type+message before, lookup the transient status */ |
| 1755 saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message); |
1766 saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message); |
| 1756 } |
1767 } |
| 1757 |
1768 |
| 1758 /* If this type+message is unique then create a new transient saved status */ |
1769 /* If this type+message is unique then create a new transient saved status */ |
| 1759 if (saved_status == NULL) |
1770 if(saved_status == NULL) { |
| 1760 { |
|
| 1761 saved_status = purple_savedstatus_new(NULL, primitive); |
1771 saved_status = purple_savedstatus_new(NULL, primitive); |
| 1762 purple_savedstatus_set_message(saved_status, message); |
1772 purple_savedstatus_set_message(saved_status, message); |
| |
1773 |
| 1763 if (status_box->token_status_account) { |
1774 if (status_box->token_status_account) { |
| 1764 GList *tmp, *active_accts = purple_accounts_get_all_active(); |
1775 PurpleAccountManager *manager = NULL; |
| 1765 for (tmp = active_accts; tmp != NULL; tmp = tmp->next) { |
1776 GList *active_accts = NULL; |
| 1766 purple_savedstatus_set_substatus(saved_status, |
1777 |
| 1767 (PurpleAccount*) tmp->data, acct_status_type, message); |
1778 manager = purple_account_manager_get_default(); |
| |
1779 active_accts = purple_account_manager_get_active(manager); |
| |
1780 |
| |
1781 while(active_accts != NULL) { |
| |
1782 PurpleAccount *account = NULL; |
| |
1783 |
| |
1784 account = PURPLE_ACCOUNT(active_accts->data); |
| |
1785 purple_savedstatus_set_substatus(saved_status, account, |
| |
1786 acct_status_type, |
| |
1787 message); |
| |
1788 |
| |
1789 active_accts = g_list_delete_link(active_accts, |
| |
1790 active_accts); |
| 1768 } |
1791 } |
| 1769 g_list_free(active_accts); |
|
| 1770 } |
1792 } |
| 1771 } |
1793 } |
| 1772 |
1794 |
| 1773 /* Set the status for each account */ |
1795 /* Set the status for each account */ |
| 1774 purple_savedstatus_activate(saved_status); |
1796 purple_savedstatus_activate(saved_status); |
| 1887 /* |
1909 /* |
| 1888 * Show the message box whenever the primitive allows for a |
1910 * Show the message box whenever the primitive allows for a |
| 1889 * message attribute on any protocol that is enabled, |
1911 * message attribute on any protocol that is enabled, |
| 1890 * or our protocol, if we have account set |
1912 * or our protocol, if we have account set |
| 1891 */ |
1913 */ |
| 1892 if (status_box->account) |
1914 if(status_box->account) { |
| 1893 accounts = g_list_prepend(accounts, status_box->account); |
1915 accounts = g_list_prepend(accounts, status_box->account); |
| 1894 else |
1916 } else { |
| 1895 accounts = purple_accounts_get_all_active(); |
1917 PurpleAccountManager *manager = NULL; |
| |
1918 |
| |
1919 manager = purple_account_manager_get_default(); |
| |
1920 |
| |
1921 accounts = purple_account_manager_get_active(manager); |
| |
1922 } |
| |
1923 |
| 1896 status_box->editor_visible = FALSE; |
1924 status_box->editor_visible = FALSE; |
| 1897 for (node = accounts; node != NULL; node = node->next) |
1925 for (node = accounts; node != NULL; node = node->next) |
| 1898 { |
1926 { |
| 1899 PurpleAccount *account; |
1927 PurpleAccount *account; |
| 1900 PurpleStatusType *status_type; |
1928 PurpleStatusType *status_type; |