QuickAccess database implementation 77/92177/9
authorDariusz Frankiewicz <d.frankiewic@samsung.com>
Wed, 5 Oct 2016 14:38:34 +0000 (16:38 +0200)
committerDariusz Frankiewicz <d.frankiewic@samsung.com>
Fri, 14 Oct 2016 15:51:35 +0000 (17:51 +0200)
[Issue]    http://suprem.sec.samsung.net/jira/browse/TWF-2246
[Problem]  QuickAccess used bookmarks instead of it's own elements.
[Solution] Implement QuickAccess database and switch bindings from
           bookmarks to new mechanism.
[Verify]   Try to add and delete some QuickAccess items.

Change-Id: I3e115cf1f840540519ceac5579b047fcca0d79e1
Signed-off-by: Dariusz Frankiewicz <d.frankiewic@samsung.com>
27 files changed:
core/AbstractInterfaces/AbstractFavoriteService.h
core/AbstractWebEngine/TabId.h
core/CMakeLists.txt
core/Config/Config.cpp
core/Tools/BrowserImage.h
core/Tools/BrowserImageTypedef.h [deleted file]
core/Tools/EflTools.h
core/Tools/GeneralTools.h
core/Tools/QuickAccessItem.cpp [new file with mode: 0644]
core/Tools/QuickAccessItem.h [new file with mode: 0644]
services/BookmarkFlowUI/BookmarkFlowUI.cpp
services/BookmarkFlowUI/BookmarkFlowUI.h
services/BookmarkService/BookmarkService.cpp
services/BookmarkService/BookmarkService.h
services/HistoryService/HistoryItem.h
services/HistoryService/HistoryService.h
services/QuickAccess/QuickAccess.cpp
services/QuickAccess/QuickAccess.h
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/StorageService/CMakeLists.txt
services/StorageService/QuickAccessStorage.cpp [new file with mode: 0644]
services/StorageService/QuickAccessStorage.h [new file with mode: 0644]
services/StorageService/StorageService.h
services/TabService/TabService.h
services/WebPageUI/WebPageUI.cpp
services/WebPageUI/WebPageUI.h

index 2882541991c972cabb78a75f3e957f577e1ef196..79d2fbc0906fa8e36ffc6ee367a4f7eb71f962d4 100644 (file)
@@ -112,7 +112,6 @@ public:
     virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getAllBookmarkItems(
         int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
     virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getRoot() = 0;
-    virtual int getQuickAccessRoot() = 0;
     virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getBookmarkItem(int id) = 0;
     virtual void editBookmark(int id, const std::string & url, const std::string & title, int parent = -1,
         int order = -1) = 0;
index 2ecc4f538ec7160613e0e78763b367d855f6ae35..f4554b3cc5db96f5017b967c79c5a7a30c564667 100644 (file)
@@ -20,7 +20,7 @@
 #include <string>
 #include <memory>
 
-#include "BrowserImageTypedef.h"
+#include "BrowserImage.h"
 #include "TabIdTypedef.h"
 #include "TabOrigin.h"
 
index 4b68e28bc16bf20c76fbefa3faff57abcd602cbb..00019d338fefdc1c419849fe06b2ace1d0e4c12c 100755 (executable)
@@ -36,6 +36,7 @@ set(browserCore_SRCS
     Tools/Blob.cpp
     Tools/BookmarkItem.cpp
     Tools/BookmarkFolder.cpp
+    Tools/QuickAccessItem.cpp
     Tools/CapiWebErrorCodes.cpp
     Tools/FeedItem.cpp
     Tools/FeedChannel.cpp
index acd98287f8b1a2c6034a2f81c028e28964a8529a..81b8a2697c00c1fc17a1d9b18159f738fa3fd08f 100644 (file)
@@ -36,6 +36,7 @@ Config::Config()
     m_data["DB_HISTORY"] = std::string(".browser.history.db");
     m_data["DB_SESSION"] = std::string(".browser.session.db");
     m_data["DB_CERTIFICATE"] = std::string(".browser.certificate.db");
+    m_data["DB_QUICKACCESS"] = std::string(".browser.quickaccess.db");
 
     m_data["TOOLTIP_DELAY"] = 0.05;       // time from mouse in to tooltip show
     m_data["TOOLTIP_HIDE_TIMEOUT"] = 2.0; // time from tooltip show to tooltip hide
index b1cb4108309ba5f473228118e7c6a1dc345cdc32..0221462f9fe1472f28b6abe7b1da6779757fdb0b 100644 (file)
@@ -18,6 +18,7 @@
 #define __BROWSER_IMAGE_H__
 
 #include <Evas.h>
+#include <memory>
 namespace tizen_browser
 {
 namespace tools
@@ -87,6 +88,7 @@ private:
     Evas_Colorspace m_colorSpace;
 };
 
+using BrowserImagePtr = std::shared_ptr<BrowserImage>;
 
 } /* end of namespace tools */
 } /* end of namespace tizen_browser */
diff --git a/core/Tools/BrowserImageTypedef.h b/core/Tools/BrowserImageTypedef.h
deleted file mode 100644 (file)
index 63fd321..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef BROWSERIMAGETYPEDEF_H_
-#define BROWSERIMAGETYPEDEF_H_
-
-#include <memory>
-
-namespace tizen_browser
-{
-namespace tools
-{
-
-class BrowserImage;
-typedef std::shared_ptr<BrowserImage> BrowserImagePtr;
-typedef std::shared_ptr<const BrowserImage> BrowserImagePtrConst;
-
-}
-}
-
-#endif /* BROWSERIMAGETYPEDEF_H_ */
index 5a2013688a7c7a3b77840f7fcd48cc5ec13abf8c..31220a730c51778da6e6df4592596024a101c8b8 100644 (file)
@@ -24,7 +24,6 @@
 #define __EFL_TOOLS_H__ 1
 
 #include <Evas.h>
-#include "BrowserImageTypedef.h"
 #include "BrowserImage.h"
 #include "Blob.h"
 
index 65e5832332bbaa8ad0c699472e57d879da4e622a..26b1f85295729d36bf164f7a1b116f3ba267b4ed 100644 (file)
@@ -31,7 +31,9 @@ namespace tools
     static const char * PROTCOL_BEGIN = "://";
     static const char END_SLASH = '/';
     // which protocol, when only domain is available?
-    static const std::string PROTOCOL_DEFAULT("http://");
+    static const std::string PROTOCOL_HTTP("http://");
+    static const std::string PROTOCOL_HTTPS("https://");
+    static const std::string PROTOCOL_FTP("ftp://");
 
     // declaration using 'unused' attribute because in some modules not all functions are used
     static std::string fromChar(const char* c) __attribute__ ((unused));
diff --git a/core/Tools/QuickAccessItem.cpp b/core/Tools/QuickAccessItem.cpp
new file mode 100644 (file)
index 0000000..85d7377
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "browser_config.h"
+#include "QuickAccessItem.h"
+
+#include <string>
+#include <Evas.h>
+
+namespace tizen_browser{
+namespace services{
+
+QuickAccessItem::QuickAccessItem()
+    : m_id(0)
+    , m_url("")
+    , m_title("")
+    , m_color(0)
+    , m_order(0)
+    , m_has_favicon(false)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+QuickAccessItem::QuickAccessItem(
+        int id,
+        const std::string &url,
+        const std::string &title,
+        int color,
+        int order,
+        bool hasFavicon)
+    : m_id(id)
+    , m_url(url)
+    , m_title(title)
+    , m_color(color)
+    , m_order(order)
+    , m_has_favicon(hasFavicon)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void QuickAccessItem::setFavicon(tools::BrowserImagePtr favicon)
+{
+    m_has_favicon = true;
+    m_favicon = favicon;
+}
+
+tools::BrowserImagePtr QuickAccessItem::getFavicon() const
+{
+    return m_favicon;
+}
+
+}//end namespace storage
+}//end namespace tizen_browser
diff --git a/core/Tools/QuickAccessItem.h b/core/Tools/QuickAccessItem.h
new file mode 100644 (file)
index 0000000..68cd9f3
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef QUICKACCESSITEM_H
+#define QUICKACCESSITEM_H
+
+#include "BrowserLogger.h"
+#include "BrowserImage.h"
+
+namespace tizen_browser{
+namespace services{
+
+class QuickAccessItem
+{
+public:
+    QuickAccessItem();
+    QuickAccessItem(
+        int id,
+        const std::string& url = "",
+        const std::string& title = "",
+        int color = 0,
+        int order = 0,
+        bool hasFavicon = false
+        // TODO: favicon
+        );
+
+    void setId(int id) { m_id = id; }
+    int getId() const { return m_id; }
+
+    void setUrl(const std::string & url) { m_url = url; }
+    std::string getUrl() const { return m_url; }
+
+    void setTitle(const std::string & title) { m_title = title; }
+    std::string getTitle() const { return m_title; }
+
+    void setColor(int color) { m_color = color; }
+    int getColor() const { return m_color; }
+
+    void setOrder(int order) { m_order = order; }
+    int getOrder() const { return m_order; }
+
+    void setFavicon(tools::BrowserImagePtr favicon);
+    tools::BrowserImagePtr getFavicon() const;
+
+    bool has_favicon() const { return m_has_favicon; }
+
+private:
+    int m_id;
+    std::string m_url;
+    std::string m_title;
+    int m_color;
+    int m_order;
+    std::shared_ptr<tools::BrowserImage> m_favicon;
+    bool m_has_favicon;
+
+};
+
+using SharedQuickAccessItem = std::shared_ptr<QuickAccessItem>;
+using SharedQuickAccessItemVector = std::vector<SharedQuickAccessItem>;
+
+}//end namespace storage
+}//end namespace tizen_browser
+
+#endif // QUICKACCESSITEM_H
index 0f9ed74442bdeee0b02aa79eb051fbf63b5f593b..4f9f69b10de8bb9e3cfc283324bcb839750f28b0 100755 (executable)
@@ -450,7 +450,12 @@ void BookmarkFlowUI::_done_clicked(void * data, Evas_Object *, void *)
             update.url = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
             bookmarkFlowUI->editBookmark(update);
         }
+
+        if (bookmarkFlowUI->m_add_to_qa)
+            bookmarkFlowUI->addToQuickAccess(bookmarkFlowUI->m_url, bookmarkFlowUI->m_title);
+
         bookmarkFlowUI->closeBookmarkFlowClicked();
+        bookmarkFlowUI->m_add_to_qa = false;
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
@@ -461,6 +466,7 @@ void BookmarkFlowUI::_cancel_clicked(void * data, Evas_Object *, void *)
     if (data) {
         BookmarkFlowUI* bookmarkFlowUI = static_cast<BookmarkFlowUI*>(data);
         bookmarkFlowUI->closeBookmarkFlowClicked();
+        bookmarkFlowUI->m_add_to_qa = false;
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
index 2fe65366db6287abebeb6cdd0bbabaad3109607c..bc51a6b30df2668f1f1261f53e438d1d76d317a3 100644 (file)
@@ -77,6 +77,7 @@ public:
     boost::signals2::signal<void (BookmarkUpdate)> saveBookmark;
     boost::signals2::signal<void (BookmarkUpdate)> editBookmark;
     boost::signals2::signal<void (services::SharedBookmarkItem)> showSelectFolderUI;
+    boost::signals2::signal<void (std::string, std::string)> addToQuickAccess;
 
 private:
     struct FolderData {
index 59582c7a33770c4f137b67bf017fc407d4006f0f..755df7df3556ad178aa5cbf41a3f3ffa753be6ef 100644 (file)
@@ -53,15 +53,6 @@ BookmarkService::BookmarkService()
 
     m_root = std::make_shared<BookmarkItem>(ROOT_FOLDER_ID, "", _("IDS_BR_BODY_BOOKMARKS"), "", -1, 1);
     m_root->set_folder_flag(true);
-
-
-    //TODO: temporary folder. Refactor this when quickaccess dabatabe will be available.
-    if (folderExists("QuickAccess"))
-        m_quickAccess_root = getFolderId("QuickAccess", ROOT_FOLDER_ID);
-    else {
-        addFolder("QuickAccess");
-        m_quickAccess_root = getFolderId("QuickAccess", ROOT_FOLDER_ID);
-    }
 }
 
 BookmarkService::~BookmarkService()
index fda08474e8404fc802cc31c4b123888991e161d8..219362b5ca22d9579bc77a693dab62d143cb7e43 100644 (file)
@@ -117,7 +117,6 @@ public:
     std::vector<std::shared_ptr<BookmarkItem>> getAllBookmarkItems(int parent = ROOT_FOLDER_ID);
 
     std::shared_ptr<services::BookmarkItem> getRoot();
-    int getQuickAccessRoot() {return m_quickAccess_root;}
 
     std::shared_ptr<services::BookmarkItem> getBookmarkItem(int id);
 
@@ -162,7 +161,6 @@ private:
     int getBookmarkId(const std::string & url);
 
     std::shared_ptr<services::BookmarkItem> m_root;
-    int m_quickAccess_root;
 };
 
 }
index a76eba68360cd8c1f358ce13f4eaa648cbcabaa7..a3e1695b1531985f1ae23e9920331e3b000a849e 100644 (file)
@@ -23,7 +23,6 @@
 #include <vector>
 
 #include "BrowserImage.h"
-#include "BrowserImageTypedef.h"
 
 namespace tizen_browser {
 namespace services {
index a937be7288cafaccb99f3ba1affe84ee9fc0842e..4fb491aa67dfe851353f5b8f348725330474153e 100644 (file)
@@ -21,7 +21,6 @@
 #include <memory>
 #include <boost/date_time/gregorian/gregorian.hpp>
 #include <boost/signals2/signal.hpp>
-#include "BrowserImageTypedef.h"
 
 #include "ServiceFactory.h"
 #include "service_macros.h"
index e71119ad4eb911edc8b4938a4afe41350afbff93..660e5fb820aef29c52ff8a72119e747b00329b5c 100644 (file)
@@ -93,9 +93,9 @@ void QuickAccess::createItemClasses()
         m_quickAccess_item_class = elm_gengrid_item_class_new();
         m_quickAccess_item_class->item_style = "quickAccess";
         m_quickAccess_item_class->func.text_get = nullptr;
-        m_quickAccess_item_class->func.content_get =  _grid_bookmark_content_get;
+        m_quickAccess_item_class->func.content_get =  _grid_quickaccess_content_get;
         m_quickAccess_item_class->func.state_get = nullptr;
-        m_quickAccess_item_class->func.del = _grid_bookmark_del;
+        m_quickAccess_item_class->func.del = _grid_quickaccess_del;
     }
     if (!m_mostVisited_item_class) {
         m_mostVisited_item_class = elm_gengrid_item_class_new();
@@ -228,9 +228,15 @@ Evas_Object* QuickAccess::createQuickAccessGengrid(Evas_Object *parent)
 
     elm_gengrid_align_set(quickAccessGengrid, 0.5, 0.1);
     if (isOrientationLandscape()) {
-        elm_gengrid_item_size_set(quickAccessGengrid, Z3_SCALE_SIZE(BOOKMARK_ITEM_WIDTH_LANDSCAPE), Z3_SCALE_SIZE(BOOKAMRK_ITEM_HEIGHT_LANDSCAPE));
+        elm_gengrid_item_size_set(
+            quickAccessGengrid,
+            Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH_LANDSCAPE),
+            Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT_LANDSCAPE));
     } else {
-        elm_gengrid_item_size_set(quickAccessGengrid, Z3_SCALE_SIZE(BOOKMARK_ITEM_WIDTH), Z3_SCALE_SIZE(BOOKAMRK_ITEM_HEIGHT));
+        elm_gengrid_item_size_set(
+            quickAccessGengrid,
+            Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH),
+            Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT));
     }
     elm_scroller_bounce_set(quickAccessGengrid, EINA_FALSE, EINA_FALSE);
 
@@ -245,9 +251,15 @@ Evas_Object *QuickAccess::createMostVisitedGengrid(Evas_Object *parent)
     evas_object_size_hint_align_set(mostVisitedGengrid, EVAS_HINT_FILL, EVAS_HINT_EXPAND);
     elm_gengrid_align_set(mostVisitedGengrid, 0.5, 0.1);
     if (isOrientationLandscape()) {
-        elm_gengrid_item_size_set(mostVisitedGengrid, Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH_LANDSCAPE), Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT_LANDSCAPE));
+        elm_gengrid_item_size_set(
+            mostVisitedGengrid,
+            Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH_LANDSCAPE),
+            Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT_LANDSCAPE));
     } else {
-        elm_gengrid_item_size_set(mostVisitedGengrid, Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH), Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT));
+        elm_gengrid_item_size_set(
+            mostVisitedGengrid,
+            Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH),
+            Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT));
     }
     elm_scroller_bounce_set(mostVisitedGengrid, EINA_FALSE, EINA_FALSE);
 
@@ -317,13 +329,11 @@ void QuickAccess::setMostVisitedItems(std::shared_ptr<services::HistoryItemVecto
     items->clear();
 }
 
-void QuickAccess::addQuickAccessItem(std::shared_ptr<tizen_browser::services::BookmarkItem> bi)
+void QuickAccess::addQuickAccessItem(services::SharedQuickAccessItem qa)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (bi->is_folder())
-        return;
-    BookmarkItemData *itemData = new BookmarkItemData();        // deleted in _grid_bookmark_del
-    itemData->item = bi;
+    QuickAccessItemData *itemData = new QuickAccessItemData();        // deleted in _grid_quickaccess_del
+    itemData->item = qa;
     itemData->quickAccess = this;
     elm_gengrid_item_append(m_quickAccessGengrid, m_quickAccess_item_class, itemData, _thumbQuickAccessClicked, itemData);
 }
@@ -334,7 +344,7 @@ void QuickAccess::clearMostVisitedGengrid()
     elm_gengrid_clear(m_mostVisitedGengrid);
 }
 
-void QuickAccess::setQuickAccessItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > items)
+void QuickAccess::setQuickAccessItems(services::SharedQuickAccessItemVector items)
 {
     clearQuickAccessGengrid();
 
@@ -410,11 +420,11 @@ void QuickAccess::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj*
     }
 }
 
-Evas_Object * QuickAccess::_grid_bookmark_content_get(void *data, Evas_Object* obj, const char *part)
+Evas_Object * QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object* obj, const char *part)
 {
     BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
     if (data) {
-        BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
+        QuickAccessItemData *itemData = reinterpret_cast<QuickAccessItemData*>(data);
 
         if (!strcmp(part, "elm.swallow.icon")) {
             Evas_Object *button = elm_button_add(obj);
@@ -451,9 +461,9 @@ Evas_Object * QuickAccess::_grid_bookmark_content_get(void *data, Evas_Object* o
     return nullptr;
 }
 
-void QuickAccess::_grid_bookmark_del(void* data, Evas_Object*)
+void QuickAccess::_grid_quickaccess_del(void* data, Evas_Object*)
 {
-    auto itemData = static_cast<BookmarkItemData*>(data);
+    auto itemData = static_cast<QuickAccessItemData*>(data);
     if (itemData)
         delete itemData;
 }
@@ -461,7 +471,7 @@ void QuickAccess::_grid_bookmark_del(void* data, Evas_Object*)
 void QuickAccess::__quckAccess_del_clicked(void *data, Evas_Object */*obj*/, void *)
 {
     BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__);
-    auto itemData = static_cast<BookmarkItemData*>(data);
+    auto itemData = static_cast<QuickAccessItemData*>(data);
     itemData->quickAccess->deleteQuickAccessItem(itemData->item);
 
     elm_object_item_del(elm_gengrid_selected_item_get(itemData->quickAccess->m_quickAccessGengrid));
@@ -479,7 +489,7 @@ char *QuickAccess::_grid_mostVisited_text_get(void *data, Evas_Object *, const c
 
 Evas_Object *QuickAccess::_grid_mostVisited_content_get(void *data, Evas_Object *obj, const char *part)
 {
-    if (data) {
+    if (data && obj && part) {
         HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
 
         if (!strcmp(part, "elm.swallow.icon")) {
@@ -514,21 +524,31 @@ void QuickAccess::_grid_mostVisited_del(void *data, Evas_Object *)
 
 void QuickAccess::_thumbQuickAccessClicked(void * data, Evas_Object * , void *)
 {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
-    if (itemData->quickAccess->m_state == QuickAccessState::Default) {
-        itemData->quickAccess->openURL(itemData->item, itemData->quickAccess->isDesktopMode());
-        itemData->quickAccess->m_after_history_thumb = false;
+    if (data) {
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        QuickAccessItemData * itemData = reinterpret_cast<QuickAccessItemData *>(data);
+        if (itemData->quickAccess->m_state == QuickAccessState::Default) {
+            itemData->quickAccess->openURLquickaccess(itemData->item, itemData->quickAccess->isDesktopMode());
+            itemData->quickAccess->m_after_history_thumb = false;
+        }
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
+
 }
 
 void QuickAccess::_thumbMostVisitedClicked(void* data, Evas_Object*, void*)
 {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
-    if (itemData->quickAccess->m_state == QuickAccessState::Default) {
-        itemData->quickAccess->openURL(itemData->item, false);
+    if (data) {
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
+        if (itemData->quickAccess->m_state == QuickAccessState::Default) {
+            itemData->quickAccess->openURLhistory(itemData->item, false);
+        }
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
+
 }
 
 void QuickAccess::_check_state_changed(void *data, Evas_Object *obj, void *)
index b484f13a37bd7297be4423194a7d2516708ba7db..648498ad385e98576565617b2ece274660473c8a 100644 (file)
@@ -29,7 +29,7 @@
 #include "service_macros.h"
 #include "services/HistoryService/HistoryItem.h"
 #include "services/HistoryService/HistoryItemTypedef.h"
-#include "BookmarkItem.h"
+#include "QuickAccessItem.h"
 #include "Tools/EflTools.h"
 
 namespace tizen_browser{
@@ -42,7 +42,7 @@ enum class QuickAccessState {
 };
 
 class BROWSER_EXPORT QuickAccess
-        : public tizen_browser::core::AbstractService
+        : public core::AbstractService
         , public interfaces::AbstractRotatable
 {
 public:
@@ -55,7 +55,7 @@ public:
     void setQuickAccessState(QuickAccessState state) {m_state = state;}
     QuickAccessState getQuickAccessState() {return m_state;}
     void setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> vec);
-    void setQuickAccessItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > vec);
+    void setQuickAccessItems(services::SharedQuickAccessItemVector vec);
     void hideUI();
     void showUI();
     virtual std::string getName();
@@ -72,34 +72,32 @@ public:
     void deleteSelectedMostVisitedItems();
     void editingFinished();
 
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, bool)>
-        openURL;
+    boost::signals2::signal<void (services::SharedQuickAccessItem, bool)> openURLquickaccess;
+    boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, bool)> openURLhistory;
     boost::signals2::signal<void ()> getMostVisitedItems;
     boost::signals2::signal<void ()> getQuickAccessItems;
     boost::signals2::signal<void ()> addQuickAccessClicked;
     boost::signals2::signal<void ()> switchViewToWebPage;
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)>
-        deleteQuickAccessItem;
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::HistoryItem>, int)>
-        removeMostVisitedItem;
+    boost::signals2::signal<void (services::SharedQuickAccessItem)> deleteQuickAccessItem;
+    boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, int)> removeMostVisitedItem;
     boost::signals2::signal<void (int)> sendSelectedMVItemsCount;
 
 private:
     struct HistoryItemData
     {
-        std::shared_ptr<tizen_browser::services::HistoryItem> item;
+        std::shared_ptr<services::HistoryItem> item;
         QuickAccess* quickAccess;
     };
 
-    struct BookmarkItemData
+    struct QuickAccessItemData
     {
-        std::shared_ptr<tizen_browser::services::BookmarkItem> item;
+        services::SharedQuickAccessItem item;
         QuickAccess* quickAccess;
     };
 
     void createItemClasses();
     void addMostVisitedItem(std::shared_ptr<services::HistoryItem>);
-    void addQuickAccessItem(std::shared_ptr<tizen_browser::services::BookmarkItem>);
+    void addQuickAccessItem(services::SharedQuickAccessItem);
     void clearMostVisitedGengrid();
     void clearQuickAccessGengrid();
     Evas_Object* createQuickAccessGengrid(Evas_Object *parent);
@@ -117,9 +115,8 @@ private:
     void createMostVisitedView(Evas_Object *parent);
     void createQuickAccessView(Evas_Object *parent);
 
-    static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part);
-    static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part);
-    static void _grid_bookmark_del(void *data, Evas_Object *obj);
+    static Evas_Object * _grid_quickaccess_content_get(void *data, Evas_Object *obj, const char *part);
+    static void _grid_quickaccess_del(void *data, Evas_Object *obj);
     static void __quckAccess_del_clicked(void *data, Evas_Object *, void *);
     static char* _grid_mostVisited_text_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object * _grid_mostVisited_content_get(void *data, Evas_Object *obj, const char *part);
@@ -159,14 +156,14 @@ private:
     Evas_Object* m_index;
     Evas_Object* m_verticalScroller;
     Elm_Gengrid_Item_Class * m_quickAccess_tile_class;
-    std::list<std::shared_ptr<tizen_browser::services::HistoryItem>> m_mv_delete_list;
+    std::list<std::shared_ptr<services::HistoryItem>> m_mv_delete_list;
     bool m_landscapeView;
     static const int MOST_VISITED_PAGE = 1;
     static const int QUICKACCESS_PAGE = 0;
-    static const int BOOKMARK_ITEM_WIDTH = 150;
-    static const int BOOKAMRK_ITEM_HEIGHT = 204;
-    static const int BOOKMARK_ITEM_WIDTH_LANDSCAPE = 150;
-    static const int BOOKAMRK_ITEM_HEIGHT_LANDSCAPE = 204;
+    static const int QUICKACCESS_ITEM_WIDTH = 150;
+    static const int QUICKACCESS_ITEM_HEIGHT = 204;
+    static const int QUICKACCESS_ITEM_WIDTH_LANDSCAPE = 150;
+    static const int QUICKACCESS_ITEM_HEIGHT_LANDSCAPE = 204;
     static const int MOSTVISITED_ITEM_WIDTH = 200;
     static const int MOSTVISITED_ITEM_HEIGHT = 208;
     static const int MOSTVISITED_ITEM_WIDTH_LANDSCAPE = 200;
index e20c88eb6ad353c96975b70aa9440ca61a6e617e..c1f4924335bd6d3bc972ad4c8ec274803955832c 100755 (executable)
@@ -411,7 +411,8 @@ void SimpleUI::connectWebPageSignals()
     m_webPageUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
     m_webPageUI->quickAccessEdit.connect(boost::bind(&SimpleUI::editQuickAccess, this));
     m_webPageUI->deleteMostVisited.connect(boost::bind(&SimpleUI::deleteMostVisited, this));
-    m_webPageUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccess, this));
+    m_webPageUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
+    m_webPageUI->getTitle.connect(boost::bind(&basic_webengine::AbstractWebEngine::getTitle, m_webEngine.get()));
     m_webPageUI->getEngineState.connect(boost::bind(&basic_webengine::AbstractWebEngine::getState, m_webEngine.get()));
     // WPA
     m_webPageUI->requestCurrentPageForWebPageUI.connect(boost::bind(&SimpleUI::requestSettingsCurrentPage, this));
@@ -424,12 +425,13 @@ void SimpleUI::connectWebPageSignals()
 void SimpleUI::connectQuickAccessSignals()
 {
     M_ASSERT(m_quickAccess.get());
-    m_quickAccess->openURL.connect(boost::bind(&SimpleUI::openURL, this, _1, _2));
+    m_quickAccess->openURLquickaccess.connect(boost::bind(&SimpleUI::openURLquickaccess, this, _1, _2));
+    m_quickAccess->openURLhistory.connect(boost::bind(&SimpleUI::openURLhistory, this, _1, _2));
     m_quickAccess->getMostVisitedItems.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
     m_quickAccess->getQuickAccessItems.connect(boost::bind(&SimpleUI::onQuickAccessClicked, this));
     m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
     m_quickAccess->addQuickAccessClicked.connect(boost::bind(&SimpleUI::onNewQuickAccessClicked, this));
-    m_quickAccess->deleteQuickAccessItem.connect(boost::bind(&SimpleUI::onBookmarkDeleted, this, _1));
+    m_quickAccess->deleteQuickAccessItem.connect(boost::bind(&SimpleUI::onQuickAccessDeleted, this, _1));
     m_quickAccess->removeMostVisitedItem.connect(
         boost::bind(&SimpleUI::setMostVisitedFrequencyValue, this, _1, _2));
     m_quickAccess->sendSelectedMVItemsCount.connect(
@@ -490,6 +492,7 @@ void SimpleUI::connectBookmarkFlowSignals()
     m_bookmarkFlowUI->editBookmark.connect(boost::bind(&SimpleUI::editBookmark, this, _1));
     m_bookmarkFlowUI->showSelectFolderUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
         _1, BookmarkManagerState::SelectFolder));
+    m_bookmarkFlowUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
 }
 
 void SimpleUI::connectBookmarkManagerSignals()
@@ -832,15 +835,19 @@ bool SimpleUI::checkBookmark()
 bool SimpleUI::checkQuickAccess()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    //TODO: switch this to quickaccess database when it will be implemented
-    return checkBookmark();
+    return m_storageService->getQuickAccessStorage().quickAccessItemExist(m_webEngine->getURI());
 }
 
-void SimpleUI::openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
+void SimpleUI::openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
 {
     openURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
 }
 
+void SimpleUI::openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode)
+{
+    openURL(quickaccessItem->getUrl(), quickaccessItem->getTitle(), desktopMode);
+}
+
 void SimpleUI::openURL(const std::string& url)
 {
     // TODO: desktop mode should be checked in WebView or QuickAcces
@@ -886,12 +893,10 @@ void SimpleUI::onMostVisitedClicked()
 void SimpleUI::onQuickAccessClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    //TODO: Elements added here shouldn't be bookmark items, but quick access items.
-    m_quickAccess->setQuickAccessItems(
-        m_favoriteService->getAllBookmarkItems(m_favoriteService->getQuickAccessRoot()));
+    m_quickAccess->setQuickAccessItems(m_storageService->getQuickAccessStorage().getQuickAccessList());
 }
 
-void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
+void SimpleUI::onBookmarkClicked(services::SharedBookmarkItem bookmarkItem)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
@@ -902,7 +907,7 @@ void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::Bookma
     }
 }
 
-void SimpleUI::onBookmarkEdit(std::shared_ptr<services::BookmarkItem> bookmarkItem)
+void SimpleUI::onBookmarkEdit(services::SharedBookmarkItem bookmarkItem)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (bookmarkItem->is_folder()) {
@@ -931,13 +936,13 @@ void SimpleUI::onBookmarkEdit(std::shared_ptr<services::BookmarkItem> bookmarkIt
     }
 }
 
-void SimpleUI::onBookmarkOrderEdited(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
+void SimpleUI::onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_favoriteService->editBookmark(bookmarkItem->getId(), "", "", -1, bookmarkItem->getOrder());
 }
 
-void SimpleUI::onBookmarkDeleted(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
+void SimpleUI::onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_favoriteService->deleteBookmark(bookmarkItem->getId());
@@ -978,7 +983,6 @@ void SimpleUI::onNewFolderPopupClick(const std::string& folder_name, int parent)
 void SimpleUI::onNewQuickAccessClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    //TODO: Implement it right with a correct functionality.
     auto inputPopup = InputPopup::createPopup(
         m_viewManager.getContent(),
         "Add to Quick access",
@@ -988,35 +992,62 @@ void SimpleUI::onNewQuickAccessClicked()
         _("IDS_BR_SK_CANCEL_ABB"));
     // TODO Add missing translations
     inputPopup->setTip(_("Enter web address"));
-    inputPopup->button_clicked.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1));        //TODO: connect new function
-    inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));        //TODO: connect new function
-    inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));        //TODO: connect new function
+    inputPopup->button_clicked.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, ""));
+    inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+    inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
     inputPopup->show();
 }
 
-void SimpleUI::addQuickAccessItem(const std::string& name)
+void SimpleUI::addQuickAccessItem(const string &urlArg, const string &titleArg)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    std::string url = name;
-    std::string title;
+    bool showQA = false;
+    std::string url = urlArg;
+    std::string title = titleArg;
 
-    //TODO: extract all prefixes to external file
-    if (!strncmp(name.c_str(), "http://", strlen("http://")))
-        title = name.substr(strlen("http://"), std::string::npos);
-    else if (!strncmp(name.c_str(), "https://", strlen("https://")))
-        title = name.substr(strlen("https://"), std::string::npos);
-    else if (!strncmp(name.c_str(), "ftp://", strlen("ftp://")))
-        title = name.substr(strlen("ftp://"), std::string::npos);
-    else {
-        url = std::string("http://") + name;
-        title = name;
+    if (url.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
+        url = std::string(tools::PROTOCOL_HTTP) + url;
+
+    if (titleArg.empty()) {
+        title = urlArg;
+        showQA = true;
     }
 
-    m_favoriteService->addBookmark(url, title, std::string(),
-        std::shared_ptr<tizen_browser::tools::BrowserImage>(),
-        std::shared_ptr<tizen_browser::tools::BrowserImage>(), m_favoriteService->getQuickAccessRoot());
-    showQuickAccess();
+    if (!title.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
+        title = title.substr(tools::PROTOCOL_HTTP.length(), std::string::npos);
+    else if (!title.compare(0, tools::PROTOCOL_HTTPS.length(), tools::PROTOCOL_HTTPS))
+        title = title.substr(tools::PROTOCOL_HTTPS.length(), std::string::npos);
+    else if (!title.compare(0, tools::PROTOCOL_FTP.length(), tools::PROTOCOL_FTP))
+        title = title.substr(tools::PROTOCOL_FTP.length(), std::string::npos);
+
+    //TODO: add support for reorder, color and images
+    m_storageService->getQuickAccessStorage().addQuickAccessItem(url, title, 0, 0, false);
+
+    if (showQA)
+        showQuickAccess();
+
+    //TODO: display toast message
+}
+
+void SimpleUI::onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_storageService->getQuickAccessStorage().deleteQuickAccessItem(quickaccessItem->getId());
+}
+
+void SimpleUI::editQuickAccess()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_quickAccess->editQuickAccess();
+    pushViewToStack(m_webPageUI->getQuickAccessEditUI());
+}
+
+void SimpleUI::deleteMostVisited()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_quickAccess->deleteMostVisited();
+    pushViewToStack(m_webPageUI->getQuickAccessEditUI());
 }
 
 void SimpleUI::onDeleteFolderClicked(const std::string& folder_name)
@@ -1034,7 +1065,7 @@ void SimpleUI::onDeleteFolderClicked(const std::string& folder_name)
     popup->show();
 }
 
-void SimpleUI::onRemoveFoldersClicked(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> items)
+void SimpleUI::onRemoveFoldersClicked(services::SharedBookmarkItemList items)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     for (auto it = items.begin(); it != items.end(); ++it) {
@@ -1715,42 +1746,6 @@ void SimpleUI::switchToDesktopMode()
     }
 }
 
-void SimpleUI::editQuickAccess()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_quickAccess->editQuickAccess();
-    pushViewToStack(m_webPageUI->getQuickAccessEditUI());
-}
-
-void SimpleUI::deleteMostVisited()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_quickAccess->deleteMostVisited();
-    pushViewToStack(m_webPageUI->getQuickAccessEditUI());
-}
-
-void SimpleUI::addQuickAccess()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    BookmarkUpdate item;
-    item.folder_id = m_favoriteService->getQuickAccessRoot();
-    item.old_url = "";
-    item.title = m_webEngine->getTitle();
-    item.url = m_webEngine->getURI();
-
-    //TODO: extract all prefixes to external file
-    if (!strncmp(item.title.c_str(), "http://", strlen("http://")))
-        item.title = item.title.substr(strlen("http://"), std::string::npos);
-    else if (!strncmp(item.title.c_str(), "https://", strlen("https://")))
-        item.title = item.title.substr(strlen("https://"), std::string::npos);
-    else if (!strncmp(item.title.c_str(), "ftp://", strlen("ftp://")))
-        item.title = item.title.substr(strlen("ftp://"), std::string::npos);
-
-    addBookmark(item);
-
-    //TODO: display toast message
-}
-
 void SimpleUI::showBookmarkFlowUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
index e363fd73859b8f7a21a40408f7a4203da10e1168..20fa7ed50f7c24b0dc773d661f72d490dd71c355 100644 (file)
@@ -150,23 +150,27 @@ private:
     void setMostVisitedFrequencyValue(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem,
         int visitFrequency);
 
-    void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
+    void onBookmarkClicked(services::SharedBookmarkItem bookmarkItem);
     void onNewQuickAccessClicked();
-    void addQuickAccessItem(const std::string &name);
-    void onBookmarkEdit(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
-    void onBookmarkOrderEdited(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
-    void onBookmarkDeleted(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
+    void addQuickAccessItem(const std::string &urlArg, const std::string &titleArg);
+    void onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem);
+    void editQuickAccess();
+    void deleteMostVisited();
+    void onBookmarkEdit(services::SharedBookmarkItem bookmarkItem);
+    void onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem);
+    void onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem);
     void onNewFolderClicked(int parent);
     void onNewFolderPopupClick(const std::string& folder_name, int parent);
     void onDeleteFolderClicked(const std::string& folder_name);
-    void onRemoveFoldersClicked(std::vector<std::shared_ptr<services::BookmarkItem>> items);
-    void onEditFolderPopupClicked(const std::string& newName, std::shared_ptr<services::BookmarkItem> item);
+    void onRemoveFoldersClicked(services::SharedBookmarkItemList items);
+    void onEditFolderPopupClicked(const std::string& newName, services::SharedBookmarkItem item);
     void onDeleteFolderPopupClicked(PopupButtons button);
     static void onUrlIMEOpened(void* data, Evas_Object*, void*);
     static void onUrlIMEClosed(void* data, Evas_Object*, void*);
 
     void onHistoryRemoved(const std::string& uri);
-    void openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
+    void openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
+    void openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode);
     /**
      * @brief Handles 'openUrlInNewTab' signals. Uses QuickAccess to indicate
      * desktop/mobile mode.
@@ -257,9 +261,6 @@ private:
     void refetchTabUIData();
     void switchToMobileMode();
     void switchToDesktopMode();
-    void editQuickAccess();
-    void deleteMostVisited();
-    void addQuickAccess();
     Evas_Object* showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper naviframe, bool removeMode = false);
     void showSettings(unsigned);
     void onDefSearchEngineClicked();
index 9d5119759ac56f449d5049ad9551ca029c88cc03..ce169f4025da8fa270e55621943b8931a3ab3da6 100644 (file)
@@ -6,6 +6,7 @@ set(StorageServiceSOURCES
     DriverManager.cpp
     Field.cpp
     FoldersStorage.cpp
+    QuickAccessStorage.cpp
     CertificateStorage.cpp
     SQLTransactionScope.cpp
     DBTools.cpp
diff --git a/services/StorageService/QuickAccessStorage.cpp b/services/StorageService/QuickAccessStorage.cpp
new file mode 100644 (file)
index 0000000..82a7405
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <BrowserAssert.h>
+#include <boost/any.hpp>
+#include <boost/format.hpp>
+
+#include "Field.h"
+#include "BrowserLogger.h"
+#include "DriverManager.h"
+#include "DBTools.h"
+#include "Config.h"
+#include "StorageExceptionInitialization.h"
+#include "SQLTransactionScope.h"
+
+
+#include "QuickAccessStorage.h"
+
+namespace {
+// ------ Database QUICKACCESS ------
+const std::string TABLE_QUICKACCESS = "QUICKACCESS";
+const std::string COL_ID = "ID";
+const std::string COL_URL = "URL";
+const std::string COL_TITLE = "TITLE";
+const std::string COL_COLOR = "COLOR";
+const std::string COL_ORDER = "QA_ORDER";
+const std::string COL_HAS_FAVICON = "HAS_FAVICON";
+const std::string COL_FAVICON = "FAVICON";
+
+const std::string CREATE_TABLE_QUICKACCESS
+        = "CREATE TABLE " + TABLE_QUICKACCESS
+        +   " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+        +   COL_URL + " TEXT UNIQUE, "
+        +   COL_TITLE + " TEXT, "
+        +   COL_COLOR + " INTEGER, "
+        +   COL_ORDER + " INTEGER NOT NULL, "
+        +   COL_HAS_FAVICON + " INTEGER "
+        + " );";
+// ------ (end) Database QUICKACCESS ------
+}
+
+namespace tizen_browser {
+namespace storage {
+
+QuickAccessStorage::QuickAccessStorage()
+    : m_isInitialized(false)
+    , m_dbQuickAccessInitialized(false)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    init();
+}
+
+void QuickAccessStorage::init()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_isInitialized)
+        return;
+
+    std::string resourceDbDir(boost::any_cast<std::string> (tizen_browser::config::Config::getInstance().get("resourcedb/dir")));
+    std::string quickaccessDb(boost::any_cast<std::string> (tizen_browser::config::Config::getInstance().get("DB_QUICKACCESS")));
+    DB_QUICKACCESS = resourceDbDir + quickaccessDb;
+    BROWSER_LOGD("[%s:%d] DB_QUICKACCESS=%s", __PRETTY_FUNCTION__, __LINE__, DB_QUICKACCESS.c_str());
+    try {
+        initDatabaseQuickAccess(DB_QUICKACCESS);
+    } catch (storage::StorageExceptionInitialization & e) {
+        BROWSER_LOGE("[%s:%d] Cannot initialize database %s!", __PRETTY_FUNCTION__, __LINE__, DB_QUICKACCESS.c_str());
+    }
+    m_isInitialized = true;
+}
+
+void QuickAccessStorage::addQuickAccessItem(const std::string &url, const std::string &title, int color, int order, bool hasFavicon)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    int hasFaviconInt = hasFavicon ? 1 : 0; // Convert to int bacause of SQLite doesn't have bool type.
+    boost::format addQuickAccessItemQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%, %4%, %5%, %6%) VALUES (?, ?, ?, ?, ?);");
+    addQuickAccessItemQueryString % TABLE_QUICKACCESS % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER % COL_HAS_FAVICON;
+    try {
+        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<storage::SQLDatabase> db = scope.database();
+        storage::SQLQuery addQuickAccessItemQuery(db->prepare(addQuickAccessItemQueryString.str()));
+        addQuickAccessItemQuery.bindText(1, url);
+        addQuickAccessItemQuery.bindText(2, title);
+        addQuickAccessItemQuery.bindInt(3, color);
+        addQuickAccessItemQuery.bindInt(4, order);
+        addQuickAccessItemQuery.bindInt(5, hasFaviconInt);
+        addQuickAccessItemQuery.exec();
+    } catch (storage::StorageException &e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
+void QuickAccessStorage::deleteQuickAccessItem(unsigned int id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format deleteQuickAccessItemQueryString("DELETE FROM %1% WHERE %2% = ?;");
+    deleteQuickAccessItemQueryString % TABLE_QUICKACCESS % COL_ID;
+    try {
+        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<storage::SQLDatabase> db = scope.database();
+        storage::SQLQuery deleteQuickAccessItemQuery(db->prepare(deleteQuickAccessItemQueryString.str()));
+        deleteQuickAccessItemQuery.bindInt(1, id);
+        deleteQuickAccessItemQuery.exec();
+    } catch (storage::StorageException &e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
+unsigned int QuickAccessStorage::getQuickAccessCount()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getCountString("SELECT COUNT (*) FROM " + TABLE_QUICKACCESS + " ;");
+    try {
+        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<storage::SQLDatabase> db = scope.database();
+        storage::SQLQuery getCountQuery(db->prepare(getCountString.str()));
+        getCountQuery.exec();
+        return getCountQuery.getInt(0);
+    } catch (storage::StorageException &e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+bool QuickAccessStorage::quickAccessItemExist(const std::string &url)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format isItemExistString("SELECT COUNT(*) FROM %1% WHERE %2% = ?;");
+    isItemExistString % TABLE_QUICKACCESS % COL_URL;
+    try {
+        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<storage::SQLDatabase> db = scope.database();
+        storage::SQLQuery isItemExistQuery(db->prepare(isItemExistString.str()));
+        isItemExistQuery.bindText(1, url);
+        isItemExistQuery.exec();
+        return static_cast<bool>(isItemExistQuery.getInt(0));
+    } catch (storage::StorageException &e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return false;
+}
+
+services::SharedQuickAccessItemVector QuickAccessStorage::getQuickAccessList()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    services::SharedQuickAccessItemVector QAList;
+    int QACount = getQuickAccessCount();
+    if (QACount > 0) {
+        boost::format getQuickAccessListString("SELECT %1%, %2%, %3%, %4%, %5%, %6% FROM %7% ;");
+        getQuickAccessListString % COL_ID % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER % COL_HAS_FAVICON % TABLE_QUICKACCESS;
+        try {
+            storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+            std::shared_ptr<storage::SQLDatabase> db = scope.database();
+            storage::SQLQuery getQuickAccesListQuery(db->prepare(getQuickAccessListString.str()));
+            getQuickAccesListQuery.exec();
+
+            for (int i = 0; i < QACount; i++) {
+                services::SharedQuickAccessItem QuickAccesItem = std::make_shared<services::QuickAccessItem>(
+                    getQuickAccesListQuery.getInt(0),
+                    getQuickAccesListQuery.getString(1),
+                    getQuickAccesListQuery.getString(2),
+                    getQuickAccesListQuery.getInt(3),
+                    getQuickAccesListQuery.getInt(4),
+                    static_cast<bool>(getQuickAccesListQuery.getInt(5)));
+                QAList.push_back(QuickAccesItem);
+                getQuickAccesListQuery.next();
+            }
+        } catch (storage::StorageException& e){
+            BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+        }
+    }
+    return QAList;
+}
+
+void QuickAccessStorage::initDatabaseQuickAccess(const std::string &db_str)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!m_dbQuickAccessInitialized) {
+        try {
+            dbtools::checkAndCreateTable(db_str, TABLE_QUICKACCESS, CREATE_TABLE_QUICKACCESS);
+        } catch (storage::StorageException &e) {
+            throw storage::StorageExceptionInitialization(e.getMessage(), e.getErrorCode());
+        }
+
+        m_dbQuickAccessInitialized = true;
+    }
+
+    M_ASSERT(m_dbQuickAccessInitialized);
+}
+
+
+}//end namespace storage
+}//end namespace tizen_browser
+
diff --git a/services/StorageService/QuickAccessStorage.h b/services/StorageService/QuickAccessStorage.h
new file mode 100644 (file)
index 0000000..202ecc4
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef QUICKACCESSSTORAGE_H
+#define QUICKACCESSSTORAGE_H
+
+#include "QuickAccessItem.h"
+#include "SQLDatabase.h"
+
+namespace tizen_browser {
+namespace storage {
+
+class QuickAccessStorage
+{
+public:
+
+    QuickAccessStorage();
+    void init();
+    void addQuickAccessItem(const std::string &url, const std::string &title, int color, int order, bool hasFavicon);
+    void deleteQuickAccessItem(unsigned int id);
+    unsigned int getQuickAccessCount();
+    bool quickAccessItemExist(const std::string &url);
+    services::SharedQuickAccessItemVector getQuickAccessList();
+
+private:
+
+    void initDatabaseQuickAccess(const std::string &db_str);
+    bool m_isInitialized;
+    bool m_dbQuickAccessInitialized;
+    std::string DB_QUICKACCESS;
+};
+
+}//end namespace storage
+}//end namespace tizen_browser
+
+#endif // QUICKACCESSSTORAGE_H
index f73c12437e7221e3efcad8bcab4a17a25ded27ca..2a3425d993c50151c1ae486875dbab1300213c6d 100644 (file)
@@ -22,6 +22,7 @@
 #include "SettingsStorage.h"
 #include "FoldersStorage.h"
 #include "CertificateStorage.h"
+#include "QuickAccessStorage.h"
 
 #define DOMAIN_STORAGE_SERVICE "org.tizen.browser.storageservice"
 
@@ -38,11 +39,13 @@ public:
     storage::SettingsStorage& getSettingsStorage() { return m_settingsStorage; }
     storage::FoldersStorage& getFoldersStorage() { return m_foldersStorage; }
     storage::CertificateStorage& getCertificateStorage() { return m_certificateStorage; }
+    storage::QuickAccessStorage& getQuickAccessStorage() { return m_quickaccessStorage; }
 
 private:
     storage::SettingsStorage m_settingsStorage;
     storage::FoldersStorage m_foldersStorage;
     storage::CertificateStorage m_certificateStorage;
+    storage::QuickAccessStorage m_quickaccessStorage;
 };
 
 
index 7c9677fb2d5f69498b27d34654b83b7143d107c9..d8ca1b753a15253e1a2f89e0c06e70bd0b867bbd 100644 (file)
@@ -27,7 +27,7 @@
 #include <boost/optional.hpp>
 #include <web/web_tab.h>
 #include "TabIdTypedef.h"
-#include "BrowserImageTypedef.h"
+#include "BrowserImage.h"
 #include "AbstractWebEngine/TabOrigin.h"
 
 namespace tizen_browser {
index 44a473ac33c1adcf8bb04a7706035155ee96c136..28276b61f14bbca3633247517a428bd68914556d 100755 (executable)
@@ -502,7 +502,11 @@ void WebPageUI::_cm_add_to_qa_clicked(void* data, Evas_Object*, void* )
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
         _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
-        webPageUI->addToQuickAccess();
+        auto signal = webPageUI->getTitle();
+        if (signal)
+            webPageUI->addToQuickAccess(webPageUI->getURI(), *signal);
+        else
+            BROWSER_LOGW("Signal does not exist!");
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
index f318b17563fa559742f80de2b80a43c18e6f7755..5b9e607d6d88c0d99690e1f56abeafa353215250 100755 (executable)
@@ -156,7 +156,8 @@ public:
     boost::signals2::signal<void ()> switchToDesktopMode;
     boost::signals2::signal<void ()> quickAccessEdit;
     boost::signals2::signal<void ()> deleteMostVisited;
-    boost::signals2::signal<void ()> addToQuickAccess;
+    boost::signals2::signal<void (std::string, std::string)> addToQuickAccess;
+    boost::signals2::signal<std::string ()> getTitle;
     boost::signals2::signal<bool ()> isMostVisited;
     boost::signals2::signal<bool ()> isFindOnPageVisible;