Changeset 32


Ignore:
Timestamp:
05/26/08 20:05:31 (4 years ago)
Author:
antonbatenev.ya.ru
Message:

доделана отписка от форума

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/form_main.cpp

    r29 r32  
    77#include "form_main.h" 
    88//---------------------------------------------------------------------------------------------- 
     9#include "form_date.h" 
    910#include "webservice.h" 
    1011#include "form_request.h" 
     
    194195void FormMain::MenuServiceMarkAllAsRead_triggered () 
    195196{ 
     197        // получение хранилища 
     198        std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 
     199 
     200        if (storage.get() == NULL) 
     201        { 
     202                QMessageBox::critical(this, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     203                return; 
     204        } 
     205 
     206        if (storage->SetIDsAsRead(QList<int>(), idsAll, true, QDateTime(), NULL) == false) 
     207        { 
     208                storage->ShowError(this); 
     209                return; 
     210        } 
     211 
     212        // перезагрузка количества непрочитаных 
     213        ForumTree->ReloadUnread(); 
    196214} 
    197215//---------------------------------------------------------------------------------------------- 
     
    199217void FormMain::MenuServiceMarkPatrialAsRead_triggered () 
    200218{ 
     219        std::auto_ptr<FormDate> form(new FormDate(this, true)); 
     220 
     221        if (form->exec() == QDialog::Accepted) 
     222        { 
     223                // получение хранилища 
     224                std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 
     225 
     226                if (storage.get() == NULL) 
     227                { 
     228                        QMessageBox::critical(this, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     229                        return; 
     230                } 
     231 
     232                if (storage->SetIDsAsRead(QList<int>(), idsAll, true, form->SelectedDate(), NULL) == false) 
     233                { 
     234                        storage->ShowError(this); 
     235                        return; 
     236                } 
     237 
     238                // перезагрузка количества непрочитаных 
     239                ForumTree->ReloadUnread(); 
     240        } 
    201241} 
    202242//---------------------------------------------------------------------------------------------- 
     
    204244void FormMain::MenuServiceMarkAllAsUnread_triggered () 
    205245{ 
     246        // получение хранилища 
     247        std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 
     248 
     249        if (storage.get() == NULL) 
     250        { 
     251                QMessageBox::critical(this, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     252                return; 
     253        } 
     254 
     255        if (storage->SetIDsAsRead(QList<int>(), idsAll, false, QDateTime(), NULL) == false) 
     256        { 
     257                storage->ShowError(this); 
     258                return; 
     259        } 
     260 
     261        // перезагрузка количества непрочитаных 
     262        ForumTree->ReloadUnread(); 
    206263} 
    207264//---------------------------------------------------------------------------------------------- 
     
    209266void FormMain::MenuServiceMarkPatrialAsUnread_triggered () 
    210267{ 
     268        std::auto_ptr<FormDate> form(new FormDate(this, false)); 
     269 
     270        if (form->exec() == QDialog::Accepted) 
     271        { 
     272                // получение хранилища 
     273                std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 
     274 
     275                if (storage.get() == NULL) 
     276                { 
     277                        QMessageBox::critical(this, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     278                        return; 
     279                } 
     280 
     281                if (storage->SetIDsAsRead(QList<int>(), idsAll, false, form->SelectedDate(), NULL) == false) 
     282                { 
     283                        storage->ShowError(this); 
     284                        return; 
     285                } 
     286 
     287                // перезагрузка количества непрочитаных 
     288                ForumTree->ReloadUnread(); 
     289        } 
    211290} 
    212291//---------------------------------------------------------------------------------------------- 
  • trunk/forum_tree.cpp

    r31 r32  
    149149                group_item->setText(0, list[group_index].Group.Name); 
    150150 
     151                group_item->SetTag(list[group_index].Group); 
     152 
    151153                // форумы в группе 
    152154                for (int forum_index = 0; forum_index < list[group_index].Forums.count(); forum_index++) 
     
    533535void AForumTree::menu_unsubscribe_triggered () 
    534536{ 
    535 } 
    536 //---------------------------------------------------------------------------------------------- 
     537        QTreeWidgetItem* item = GetSelectedItem(); 
     538 
     539        if (item == NULL) 
     540                return; 
     541 
     542        QString from = QString::fromUtf8("группы"); 
     543 
     544        if (IsGroup(item) == false) 
     545                from = QString::fromUtf8("форума"); 
     546 
     547        // демократия 
     548        if (QMessageBox::question(m_parent, QString::fromUtf8("Внимание!"), QString::fromUtf8("Вы уверены, что хотите отписаться от ") + from + "?", QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) 
     549                return; 
     550 
     551        QMessageBox::StandardButton answer = QMessageBox::question(m_parent, QString::fromUtf8("Внимание!"), QString::fromUtf8("Удалить сообщения ") + from + QString::fromUtf8(" из хранилища данных?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Cancel); 
     552 
     553        if (answer == QMessageBox::Cancel) 
     554                return; 
     555 
     556        bool clean = false; 
     557 
     558        if (answer == QMessageBox::Yes) 
     559                clean = true; 
     560 
     561        // получение хранилища 
     562        std::auto_ptr<IStorage> storage(AStorageFactory::GetStorage()); 
     563 
     564        if (storage.get() == NULL) 
     565        { 
     566                QMessageBox::critical(m_parent, QString::fromUtf8("Ошибка!"), QString::fromUtf8("Не выбрано хранилище данных")); 
     567                return; 
     568        } 
     569 
     570        if (IsGroup(item) == true) 
     571        { 
     572                int id = (static_cast<GroupTreeWidgetItem*>(item))->PTag()->ID; 
     573 
     574                if (storage->Unsubscribe(QList<int>() << id, idsGroup, clean, NULL) == false) 
     575                { 
     576                        storage->ShowError(m_parent); 
     577                        return; 
     578                } 
     579        } 
     580        else 
     581        { 
     582                int id = (static_cast<ForumTreeWidgetItem*>(item))->PTag()->ID; 
     583 
     584                if (storage->Unsubscribe(QList<int>() << id, idsForum, clean, NULL) == false) 
     585                { 
     586                        storage->ShowError(m_parent); 
     587                        return; 
     588                } 
     589        } 
     590 
     591        // обновление дерева сообщений 
     592        m_message_tree->ChangeForum(NULL); 
     593 
     594        // перезагрузка дерева 
     595        Reload(); 
     596} 
     597//---------------------------------------------------------------------------------------------- 
  • trunk/storage/istorage.h

    r31 r32  
    7474                //    read = false - после даты как непрочитанные 
    7575                virtual bool SetIDsAsRead (const QList<int>& list, AIDSet type, bool read, QDateTime date, IProgress* progress = NULL) = 0; 
     76 
     77                // отписка от форума / группы 
     78                // type = {idsForum | idsGroup} 
     79                // clean - очистить базу от "лишних" сообщений 
     80                virtual bool Unsubscribe (const QList<int>& list, AIDSet type, bool clean, IProgress* progress = NULL) = 0; 
    7681}; 
    7782//---------------------------------------------------------------------------------------------- 
  • trunk/storage/mysql_storage.cpp

    r31 r32  
    10471047                AMessageInfo info = list.Message[i]; 
    10481048 
     1049                // странно, но бывают сообщения с нулевым форумом, 
     1050                // которые потом будут вечно храниться в unread 
     1051                if (info.IDForum == 0) 
     1052                        continue; 
     1053 
    10491054                if (info.IDParent != 0) 
    10501055                { 
     
    19541959} 
    19551960//---------------------------------------------------------------------------------------------- 
     1961 
     1962bool AMySQLStorage::Unsubscribe (const QList<int>& list, AIDSet type, bool clean, IProgress* progress) 
     1963{ 
     1964        if (progress != NULL) 
     1965                progress->OnProgress(0); 
     1966 
     1967        if (!(type == idsGroup || type == idsForum)) 
     1968                return ReturnError(QString::fromUtf8("Указана неверная группа объектов")); 
     1969 
     1970        if (Transaction() == false) 
     1971                return ReturnError(AMySQLDatabase::LastError()); 
     1972 
     1973        // получение строки с id 
     1974        QString ids; 
     1975 
     1976        for (int i = 0; i < list.count(); i++) 
     1977        { 
     1978                ids += QString::number(list[i]); 
     1979 
     1980                if (i < list.count() - 1) 
     1981                        ids += ", "; 
     1982        } 
     1983 
     1984        QString sql; 
     1985 
     1986        // отписка с очисткой 
     1987        if (clean == true) 
     1988        { 
     1989                // 
     1990                // удаление из списка непрочитанных 
     1991                // 
     1992 
     1993                sql += "DELETE FROM\n"; 
     1994                sql += "        `unread`\n"; 
     1995                sql += "WHERE\n"; 
     1996 
     1997                if (type == idsForum) 
     1998                        sql += "        `id_forum` IN (" + ids + ")"; 
     1999                else 
     2000                { 
     2001                        sql += "        `id_forum` IN\n"; 
     2002                        sql += "        (\n"; 
     2003                        sql += "                SELECT\n"; 
     2004                        sql += "                        `id`\n"; 
     2005                        sql += "                FROM\n"; 
     2006                        sql += "                        `forum`\n"; 
     2007                        sql += "                WHERE\n"; 
     2008                        sql += "                        `id_group` IN (" + ids + ")\n"; 
     2009                        sql += "        )"; 
     2010                } 
     2011 
     2012                std::auto_ptr<AQuery> query_unread(CreateQuery(sql, false)); 
     2013 
     2014                if (query_unread.get() == NULL) 
     2015                { 
     2016                        QString msg = AMySQLDatabase::LastError(); 
     2017 
     2018                        AMySQLDatabase::Rollback(); 
     2019 
     2020                        return ReturnError(msg); 
     2021                } 
     2022 
     2023                if (query_unread->exec() == false) 
     2024                { 
     2025                        AMySQLDatabase::Rollback(); 
     2026 
     2027                        return ReturnError(query_unread->LastError()); 
     2028                } 
     2029 
     2030                // 
     2031                // удаление из списка рейтинга 
     2032                // 
     2033 
     2034                sql  = ""; 
     2035                sql += "DELETE FROM\n"; 
     2036                sql += "        `rating`\n"; 
     2037                sql += "WHERE\n"; 
     2038                sql += "        `id_message` IN\n"; 
     2039                sql += "        (\n"; 
     2040                sql += "                SELECT\n"; 
     2041                sql += "                        `id`\n"; 
     2042                sql += "                FROM\n"; 
     2043                sql += "                        `message`\n"; 
     2044                sql += "                WHERE\n"; 
     2045 
     2046                if (type == idsForum) 
     2047                        sql += "                        `id_forum` IN (" + ids + ")"; 
     2048                else 
     2049                { 
     2050                        sql += "                        `id_forum` IN\n"; 
     2051                        sql += "                        (\n"; 
     2052                        sql += "                                SELECT\n"; 
     2053                        sql += "                                        `id`\n"; 
     2054                        sql += "                                FROM\n"; 
     2055                        sql += "                                        `forum`\n"; 
     2056                        sql += "                                WHERE\n"; 
     2057                        sql += "                                        `id_group` IN (" + ids + ")\n"; 
     2058                        sql += "                        )"; 
     2059                } 
     2060 
     2061                sql += "        )"; 
     2062 
     2063                std::auto_ptr<AQuery> query_rating(CreateQuery(sql, false)); 
     2064 
     2065                if (query_rating.get() == NULL) 
     2066                { 
     2067                        QString msg = AMySQLDatabase::LastError(); 
     2068 
     2069                        AMySQLDatabase::Rollback(); 
     2070 
     2071                        return ReturnError(msg); 
     2072                } 
     2073 
     2074                if (query_rating->exec() == false) 
     2075                { 
     2076                        AMySQLDatabase::Rollback(); 
     2077 
     2078                        return ReturnError(query_rating->LastError()); 
     2079                } 
     2080 
     2081                // 
     2082                // удаление из списка модерилок 
     2083                // 
     2084 
     2085                sql  = ""; 
     2086                sql += "DELETE FROM\n"; 
     2087                sql += "        `moderate`\n"; 
     2088                sql += "WHERE\n"; 
     2089                sql += "        `id_message` IN\n"; 
     2090                sql += "        (\n"; 
     2091                sql += "                SELECT\n"; 
     2092                sql += "                        `id`\n"; 
     2093                sql += "                FROM\n"; 
     2094                sql += "                        `message`\n"; 
     2095                sql += "                WHERE\n"; 
     2096 
     2097                if (type == idsForum) 
     2098                        sql += "                        `id_forum` IN (" + ids + ")"; 
     2099                else 
     2100                { 
     2101                        sql += "                        `id_forum` IN\n"; 
     2102                        sql += "                        (\n"; 
     2103                        sql += "                                SELECT\n"; 
     2104                        sql += "                                        `id`\n"; 
     2105                        sql += "                                FROM\n"; 
     2106                        sql += "                                        `forum`\n"; 
     2107                        sql += "                                WHERE\n"; 
     2108                        sql += "                                        `id_group` IN (" + ids + ")\n"; 
     2109                        sql += "                        )"; 
     2110                } 
     2111 
     2112                sql += "        )"; 
     2113 
     2114                std::auto_ptr<AQuery> query_moderate(CreateQuery(sql, false)); 
     2115 
     2116                if (query_moderate.get() == NULL) 
     2117                { 
     2118                        QString msg = AMySQLDatabase::LastError(); 
     2119 
     2120                        AMySQLDatabase::Rollback(); 
     2121 
     2122                        return ReturnError(msg); 
     2123                } 
     2124 
     2125                if (query_moderate->exec() == false) 
     2126                { 
     2127                        AMySQLDatabase::Rollback(); 
     2128 
     2129                        return ReturnError(query_moderate->LastError()); 
     2130                } 
     2131 
     2132                // 
     2133                // удаление из списка сообщений 
     2134                // 
     2135 
     2136                sql  = ""; 
     2137                sql += "DELETE FROM\n"; 
     2138                sql += "        `message`\n"; 
     2139                sql += "WHERE\n"; 
     2140 
     2141                if (type == idsForum) 
     2142                        sql += "        `id_forum` IN (" + ids + ")"; 
     2143                else 
     2144                { 
     2145                        sql += "        `id_forum` IN\n"; 
     2146                        sql += "        (\n"; 
     2147                        sql += "                SELECT\n"; 
     2148                        sql += "                        `id`\n"; 
     2149                        sql += "                FROM\n"; 
     2150                        sql += "                        `forum`\n"; 
     2151                        sql += "                WHERE\n"; 
     2152                        sql += "                        `id_group` IN (" + ids + ")\n"; 
     2153                        sql += "        )"; 
     2154                } 
     2155 
     2156                std::auto_ptr<AQuery> query_message(CreateQuery(sql, false)); 
     2157 
     2158                if (query_message.get() == NULL) 
     2159                { 
     2160                        QString msg = AMySQLDatabase::LastError(); 
     2161 
     2162                        AMySQLDatabase::Rollback(); 
     2163 
     2164                        return ReturnError(msg); 
     2165                } 
     2166 
     2167                if (query_message->exec() == false) 
     2168                { 
     2169                        AMySQLDatabase::Rollback(); 
     2170 
     2171                        return ReturnError(query_message->LastError()); 
     2172                } 
     2173        } 
     2174 
     2175        // 
     2176        // удаление из подписаных 
     2177        // 
     2178 
     2179        sql  = ""; 
     2180        sql += "DELETE FROM\n"; 
     2181        sql += "        `subscribed`\n"; 
     2182        sql += "WHERE\n"; 
     2183 
     2184        if (type == idsForum) 
     2185                sql += "        `id_forum` IN (" + ids + ")"; 
     2186        else 
     2187        { 
     2188                sql += "        `id_forum` IN\n"; 
     2189                sql += "        (\n"; 
     2190                sql += "                SELECT\n"; 
     2191                sql += "                        `id`\n"; 
     2192                sql += "                FROM\n"; 
     2193                sql += "                        `forum`\n"; 
     2194                sql += "                WHERE\n"; 
     2195                sql += "                        `id_group` IN (" + ids + ")\n"; 
     2196                sql += "        )"; 
     2197        } 
     2198 
     2199        std::auto_ptr<AQuery> query_subscribed(CreateQuery(sql, false)); 
     2200 
     2201        if (query_subscribed.get() == NULL) 
     2202        { 
     2203                QString msg = AMySQLDatabase::LastError(); 
     2204 
     2205                AMySQLDatabase::Rollback(); 
     2206 
     2207                return ReturnError(msg); 
     2208        } 
     2209 
     2210        if (query_subscribed->exec() == false) 
     2211        { 
     2212                AMySQLDatabase::Rollback(); 
     2213 
     2214                return ReturnError(query_subscribed->LastError()); 
     2215        } 
     2216 
     2217        // 
     2218        // завершение транзакции 
     2219        // 
     2220 
     2221        if (Commit() == false) 
     2222        { 
     2223                QString msg = AMySQLDatabase::LastError(); 
     2224 
     2225                AMySQLDatabase::Rollback(); 
     2226 
     2227                return ReturnError(msg); 
     2228        } 
     2229 
     2230        return ReturnSuccess(); 
     2231} 
     2232//---------------------------------------------------------------------------------------------- 
  • trunk/storage/mysql_storage.h

    r31 r32  
    7474                //    read = false - после даты как непрочитанные 
    7575                bool SetIDsAsRead (const QList<int>& list, AIDSet type, bool read, QDateTime date, IProgress* progress = NULL); 
     76 
     77                // отписка от форума / группы 
     78                // type = {idsForum | idsGroup} 
     79                // clean - очистить базу от "лишних" сообщений 
     80                bool Unsubscribe (const QList<int>& list, AIDSet type, bool clean, IProgress* progress = NULL); 
    7681}; 
    7782//---------------------------------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.