Changeset 32
- Timestamp:
- 05/26/08 20:05:31 (4 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
form_main.cpp (modified) (5 diffs)
-
forum_tree.cpp (modified) (2 diffs)
-
storage/istorage.h (modified) (1 diff)
-
storage/mysql_storage.cpp (modified) (2 diffs)
-
storage/mysql_storage.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/form_main.cpp
r29 r32 7 7 #include "form_main.h" 8 8 //---------------------------------------------------------------------------------------------- 9 #include "form_date.h" 9 10 #include "webservice.h" 10 11 #include "form_request.h" … … 194 195 void FormMain::MenuServiceMarkAllAsRead_triggered () 195 196 { 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(); 196 214 } 197 215 //---------------------------------------------------------------------------------------------- … … 199 217 void FormMain::MenuServiceMarkPatrialAsRead_triggered () 200 218 { 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 } 201 241 } 202 242 //---------------------------------------------------------------------------------------------- … … 204 244 void FormMain::MenuServiceMarkAllAsUnread_triggered () 205 245 { 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(); 206 263 } 207 264 //---------------------------------------------------------------------------------------------- … … 209 266 void FormMain::MenuServiceMarkPatrialAsUnread_triggered () 210 267 { 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 } 211 290 } 212 291 //---------------------------------------------------------------------------------------------- -
trunk/forum_tree.cpp
r31 r32 149 149 group_item->setText(0, list[group_index].Group.Name); 150 150 151 group_item->SetTag(list[group_index].Group); 152 151 153 // форумы в группе 152 154 for (int forum_index = 0; forum_index < list[group_index].Forums.count(); forum_index++) … … 533 535 void AForumTree::menu_unsubscribe_triggered () 534 536 { 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 74 74 // read = false - после даты как непрочитанные 75 75 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; 76 81 }; 77 82 //---------------------------------------------------------------------------------------------- -
trunk/storage/mysql_storage.cpp
r31 r32 1047 1047 AMessageInfo info = list.Message[i]; 1048 1048 1049 // странно, но бывают сообщения с нулевым форумом, 1050 // которые потом будут вечно храниться в unread 1051 if (info.IDForum == 0) 1052 continue; 1053 1049 1054 if (info.IDParent != 0) 1050 1055 { … … 1954 1959 } 1955 1960 //---------------------------------------------------------------------------------------------- 1961 1962 bool 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 74 74 // read = false - после даты как непрочитанные 75 75 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); 76 81 }; 77 82 //----------------------------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.
