]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/dialogs/AddOrEditCookieDialog.cpp
Add durable cookie support.
[PrivacyBrowserPC.git] / src / dialogs / AddOrEditCookieDialog.cpp
index 78234a68b1119e29908cb8f6b48e41ff774b46d8..e39303e8e7094230d63cf6db49615fcb0686e8d5 100644 (file)
@@ -20,6 +20,7 @@
 // Application headers.
 #include "AddOrEditCookieDialog.h"
 #include "ui_AddOrEditCookieDialog.h"
+#include "databases/CookiesDatabase.h"
 
 // KDE Framework headers.
 #include <KLocalizedString>
@@ -33,7 +34,7 @@ const int AddOrEditCookieDialog::AddCookie = 0;
 const int AddOrEditCookieDialog::EditCookie = 1;
 
 // Construct the class.
-AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetworkCookie *cookiePointer) : QDialog(nullptr)
+AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetworkCookie *cookiePointer, const bool &isDurable) : QDialog(nullptr)
 {
     // Set the dialog window title according to the dialog type.
     if (dialogType == AddCookie)
@@ -41,8 +42,9 @@ AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetwo
     else
         setWindowTitle(i18nc("The edit cookie dialog window title.", "Edit Cookie"));
 
-    // Populate the is edit dialog boolean.
+    // Populate the class variables.
     isEditDialog = (dialogType == EditCookie);
+    originalIsDurable = isDurable;
 
     // Set the window modality.
     setWindowModality(Qt::WindowModality::ApplicationModal);
@@ -56,6 +58,7 @@ AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetwo
     // Get handles for the widgets.
     domainLineEditPointer = addOrEditCookieDialogUi.domainLineEdit;
     nameLineEditPointer = addOrEditCookieDialogUi.nameLineEdit;
+    durableCheckBoxPointer = addOrEditCookieDialogUi.durableCheckBox;
     expirationCheckBoxPointer = addOrEditCookieDialogUi.expirationCheckBox;
     expirationDateTimeEditPointer = addOrEditCookieDialogUi.expirationDateTimeEdit;
     pathLineEditPointer = addOrEditCookieDialogUi.pathLineEdit;
@@ -69,18 +72,19 @@ AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetwo
     if (isEditDialog)
     {
         // Store the old cookie.
-        oldCookie = *cookiePointer;
+        originalCookie = *cookiePointer;
 
         // Populate the widgets.
-        domainLineEditPointer->setText(oldCookie.domain());
-        nameLineEditPointer->setText(oldCookie.name());
-        pathLineEditPointer->setText(oldCookie.path());
-        httpOnlyCheckBoxPointer->setChecked(oldCookie.isHttpOnly());
-        secureCheckBoxPointer->setChecked(oldCookie.isSecure());
-        valueLineEditPointer->setText(oldCookie.value());
+        domainLineEditPointer->setText(originalCookie.domain());
+        durableCheckBoxPointer->setChecked(originalIsDurable);
+        nameLineEditPointer->setText(originalCookie.name());
+        pathLineEditPointer->setText(originalCookie.path());
+        httpOnlyCheckBoxPointer->setChecked(originalCookie.isHttpOnly());
+        secureCheckBoxPointer->setChecked(originalCookie.isSecure());
+        valueLineEditPointer->setText(originalCookie.value());
 
         // Populate the expiration date if it exists.
-        if (!oldCookie.isSessionCookie())
+        if (!originalCookie.isSessionCookie())
         {
             // Check the expiration box.
             expirationCheckBoxPointer->setChecked(true);
@@ -89,7 +93,7 @@ AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetwo
             expirationDateTimeEditPointer->setEnabled(true);
 
             // Set the expiration date.
-            expirationDateTimeEditPointer->setDateTime(oldCookie.expirationDate());
+            expirationDateTimeEditPointer->setDateTime(originalCookie.expirationDate());
         }
     }
 
@@ -114,13 +118,13 @@ void AddOrEditCookieDialog::saveCookie()
 {
     // Delete the old cookie if this is an edit dialog.
     if (isEditDialog)
-        emit deleteCookie(oldCookie);
+        emit deleteCookie(originalCookie);
 
     // Create the variables.
     QNetworkCookie cookie;
 
     // Populate the cookie.
-    cookie.setDomain(domainLineEditPointer->text());
+    cookie.setDomain(domainLineEditPointer->text().toLower());
     cookie.setName(nameLineEditPointer->text().toUtf8());
     cookie.setPath(pathLineEditPointer->text());
     cookie.setHttpOnly(httpOnlyCheckBoxPointer->isChecked());
@@ -130,8 +134,37 @@ void AddOrEditCookieDialog::saveCookie()
     // Populate the expiration date if it is specified.
     if (expirationCheckBoxPointer->isChecked()) cookie.setExpirationDate(expirationDateTimeEditPointer->dateTime());
 
-    // Add the cookie.
-    emit addCookie(cookie);
+    // Get the durable status.
+    const bool isDurable = durableCheckBoxPointer->isChecked();
+
+    // Update the durable cookies database.
+    if (originalIsDurable)  // The cookie is currently in the durable cookies database.
+    {
+        if (isDurable)  // Update the cookie in the database.
+        {
+            qDebug() << "Updating a durable cookie.";
+
+            // Update the cookie in the durable cookies database.
+            CookiesDatabase::updateCookie(originalCookie, cookie);
+        }
+        else  // Delete the cookie from the database.
+        {
+            qDebug() << "Deleting a durable cookie.";
+
+            // Delete the cookie from the durable cookies database.
+            CookiesDatabase::deleteCookie(originalCookie);
+        }
+    }
+    else if (isDurable)  // The cookie is being added to the durable cookies database.
+    {
+        qDebug() << "Adding a durable cookie.";
+
+        // Add the cookie to the durable cookies database.
+        CookiesDatabase::addCookie(cookie);
+    }
+
+    // Add the cookie to the store, the list, and the tree.
+    emit addCookie(cookie, isDurable);
 
     // Close the dialog.
     reject();