No need to modify *.spec file? Regards, Yin, Yan
> -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of hmin > Sent: Wednesday, October 13, 2010 3:08 PM > To: [email protected] > Subject: [meego-commits] 8350: Changes to > MeeGo:1.1:Netbook:Testing/chrome-meego-extension > > Hi, > I have made the following changes to chrome-meego-extension in project > MeeGo:1.1:Netbook:Testing. Please review and accept ASAP. > > Thank You, > hmin > > [This message was auto-generated] > > --- > > Request #8350: > > submit: > home:hmin:branches:MeeGo:1.1:Netbook:Testing/chrome-meego-extension(r > 1)(cleanup) -> MeeGo:1.1:Netbook:Testing/chrome-meego-extension > > > Message: > None > > State: new 2010-10-13T00:07:48 hmin > Comment: None > > > > changes files: > -------------- > --- chrome-meego-extension.changes > +++ chrome-meego-extension.changes > @@ -0,0 +1,4 @@ > +* Sat Sep 25 2010 Hongbo Min <[email protected]> - 0.2.0 > +- Fix BMC#6940, BMC#6941, BMC#6932, BMC#6868 which causes the > incorrect > + snapshot of web page. > + > > spec files: > ----------- > > other changes: > -------------- > > ++++++ chrome-meego-extension-0.2.0.tar.bz2 > --- > chrome-meego-extension-0.2.0/extension/chrome-meego-extension/backgrou > nd.js > +++ > chrome-meego-extension-0.2.0/extension/chrome-meego-extension/backgrou > nd.js > @@ -15,65 +15,121 @@ > * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. > */ > > -var _debug = false; > +var _debug = true; > + > +// Regular expression for extracting the root part from the given part > +// Example: http://www.x.com/y/z -> http://www.x.com/ > +var URLRegExp = new > RegExp("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%\?\.=]+/?"); > + > +// Store all tabs opening in browser > +var currentTabs = {}; > +var favIcons = {}; > +var thumbnails = {}; > +var urls = {} > +var thumbnailUpdateTime = {}; > + > +// helper function for debug > function DBG(msg) > { > if(_debug) plugin.debug(msg); > } > > -var currentTabs = {}; > -var favIcons = {}; > - > function Tab(tabId, windowId) { > this.id = tabId; > this.windowId = windowId; > this.title = ""; > this.url = ""; > - this.thumbnail = null; > this.favIconUrl = ""; > this.status = ""; > this.update_thumbnail_time=0; > } > > -// url: setThumbnailTime > -var setThumbnail = {}; > -const THUMBNAIL_UPDATE_INTERVAL = 3600 * 1000; > +function URL(id, url) > +{ > + this.id = id; > + this.url = url; > + this.title = ""; > + this.visitCount = 0; > + this.typedCount = 0; > + this.lastVisitTime = 0; > +} > + > +// get the favIcon url for the given url > +function getFaviconUrl(url) > +{ > + var favIconUrl = ""; > + var result = URLRegExp.exec(url); > + if(result && result.length > 0) > + { > + favIconUrl = result[0]; > + if(favIconUrl.charAt(favIconUrl.length-1) == '/') > + favIconUrl += "favicon.ico"; > + else favIconUrl += "/favicon.ico"; > + if(!favIcons[favIconUrl]) > + { > + favIcons[favIconUrl] = ""; > + plugin.addFavIconItem(favIconUrl, Date.now(), ""); > + } > + } > + return favIconUrl; > +} > + > +// Get the favIcon data via http request > +function getFavIconData(favIconUrl) > +{ > + if(!favIconUrl || favIconUrl=="" || (favIcons[favIconUrl]!=null && > favIcons[favIconUrl] != "")) return; > + > + var request = new XMLHttpRequest(); > + request.open("GET", favIconUrl, true); > + request.overrideMimeType("text/plain; charset=x-user-defined"); > + request.onreadystatechange = function() > + { > + if(this.readyState == 3) { > + // the response entity body is being received > + if(favIcons[favIconUrl] != null && favIcons[favIconUrl] > != "") > return; > + var i = 0; > + var icon_data=""; > + for(i = 0; i < this.responseText.length; i++) > + > icon_data+=String.fromCharCode(this.responseText.charCodeAt(i) & > 0xFF); > + var base64 = btoa(icon_data); > + plugin.addFavIconItem(favIconUrl, Date.now(), base64); > + favIcons[favIconUrl] = base64; > + } > + } > + request.send(null); > +} > > function selectTabById(tabId) { > - DBG("selectTabById " + tabId); > if (tabId == -1) > { > - chrome.tabs.create({}, function (tab) { > - chrome.windows.update(tab.windowId, {focused: true}); > - }); > + chrome.tabs.create({}, NULL); > return; > } > chrome.tabs.update(tabId, {selected: true}); > - chrome.windows.update(currentTabs[tabId].windowId, {focused: true}); > -} > - > -function openNewTabWithUrl(targetUrl) { > - DBG("open new tab"); > - chrome.tabs.create({url:targetUrl, selected:true}, null); > -} > - > -function restoreTabSelection(url) { > - selectTabByUrl(url); > + chrome.windows.update(currentTabs[tabId].windowId, {focused:true}); > + takeScreenshot(tabId); > } > > -function selectTabByUrl(url) { > +// Open a tab with the given target url > +// If the url is already loaded in the browser, then the > +// tab will be focused. Otherwise, create a new tab to > +// load it > +function selectTabByUrl(targetUrl) { > for (i in currentTabs) { > - if (currentTabs[i].url == url) { > + if (currentTabs[i].url == targetUrl) { > + chrome.windows.update(currentTabs[i].windowId, {focused:true}); > chrome.tabs.update(currentTabs[i].id, {selected: true}); > - chrome.windows.update(currentTabs[i].windowId, {focused: true}); > + takeScreenshot(i); > + return; > } > } > + // creat a new tab open the target url > + chrome.tabs.create({url:targetUrl, selected:true}, null); > } > > // when a new tab is created > chrome.tabs.onCreated.addListener( > function (tab) { > - DBG("## chrome.tabs.onCreated: id=" +tab.id+", url=" + tab.url); > if (!currentTabs[tab.id]) > currentTabs[tab.id] = new Tab(tab.id, tab.windowId); > currentTabs[tab.id].url = tab.url; > @@ -82,92 +138,89 @@ > if(tab.url) > { > var title = tab.title ? tab.title : tab.url; > - plugin.addTabItem(tab.id, tab.windowId, tab.url, title); > + var favIconUrl = getFaviconUrl(tab.url); > + plugin.addTabItem(tab.id, tab.windowId, tab.url, title, > favIconUrl?favIconUrl:""); > } > } > ); > > -function takeScreenshot(tab) > +// capture the thumbnail > +function takeScreenshot(tabId) > { > - chrome.tabs.captureVisibleTab(tab.windowId, {format:"jpeg", > quality:5},function(dataUrl){ > - currentTabs[tab.id].thumbnail = dataUrl; > - currentTabs[tab.id].update_thumbnail_time = Date.now(); > - plugin.addThumbnailItem(tab.url, Date.now(), dataUrl); > - > - chrome.history.getVisits({'url': tab.url}, > function(visits) { > - if(visits.length > 0) { > - // Capture the thumbnail for URL typed by user > - var i = visits.length - 1; // Get the > most recent visit > item > - if(visits[i].transition == 'typed') { > - > if(!setThumbnail[currentTabs[tab.id].url] || > - Date.now() - > setThumbnail[currentTabs[tab.id].url] > THUMBNAIL_UPDATE_INTERVAL){ > - > plugin.setPageThumbnail(currentTabs[tab.id].url, > currentTabs[tab.id].title, > dataUrl); > - > setThumbnail[currentTabs[tab.id].url] = > Date.now(); > - } > + chrome.tabs.captureVisibleTab(currentTabs[tabId].windowId, > {format:"jpeg", quality:5}, function(dataUrl){ > + var tab = currentTabs[tabId]; > +// if(tab.status == "complete" && > +// (!thumbnailUpdateTime[tab.url] || > +// Date.now() - thumbnailUpdateTime[tab.url] > > 1800*1000)) > + if(tab.status == "complete") > + chrome.history.getVisits({'url':tab.url}, > function(visits) { > + // Capture the thumbnail for URL only typed by > user > + for(i = 0; i < visits.length; i++) > + if(visits[i].transition == 'typed') > + { > + console.log("save thumbnail for > " + tab.url); > + thumbnailUpdateTime[tab.url] = > Date.now(); > + > plugin.setPageThumbnail(tab.url, tab.title, > dataUrl); > + break; > } > - } > - }); > + }); > + > + if(thumbnails[tab.url]!=null && thumbnails[tab.url] == > dataUrl) > return; > + thumbnails[tab.url] = dataUrl; > + plugin.addThumbnailItem(tab.url, Date.now(), dataUrl); > + > }); > } > > -// Get the Icon data from http request > -function getFavIconData(tab, favIconUrl) > -{ > - var request = new XMLHttpRequest(); > - request.open("GET", favIconUrl, true); > - request.overrideMimeType("text/plain; charset=x-user-defined"); > - request.onreadystatechange = function() > - { > - if(this.readyState == 3) { > - // the response entity body is being received > - var i = 0, icon_data=""; > - for(i = 0; i < this.responseText.length; i++) > - > icon_data+=String.fromCharCode(this.responseText.charCodeAt(i) & > 0xFF); > - var base64 = btoa(icon_data); > - plugin.addFavoriteIconItem(favIconUrl, Date.now(), > base64); > - plugin.updateURLInfo(tab.url, tab.title, favIconUrl); > - favIcons[favIconUrl] = base64; > - } > - } > - request.send(null); > -} > // when a tab is updated > chrome.tabs.onUpdated.addListener( > function (tabId, changeInfo, tab) { > - var reg = new > RegExp("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%\?\.=]+/"); > - var rootUrl = reg.exec(tab.url); > - if(rootUrl) > - { > - favIconUrl = rootUrl+"favicon.ico"; > - if(!favIcons[favIconUrl])getFavIconData(tab, favIconUrl); > - else plugin.updateURLInfo(tab.url, tab.title, favIconUrl); > - } > + > + var favIconUrl = getFaviconUrl(tab.url); > + getFavIconData(favIconUrl); > + > + if(!currentTabs[tab.id]) currentTabs[tab.id] = new Tab(tab.id, > tab.windowId); > > if(changeInfo.status == 'loading') { > - DBG("## chrome.tabs.onUpdated#loading: id="+tab.id+", > url="+tab.url); > - if(!currentTabs[tab.id]) currentTabs[tab.id] = new Tab(tab.id, > tab.windowId); > currentTabs[tab.id].status = "loading"; > - plugin.addTabItem(tab.id, tab.windowId, tab.url, tab.title); > + currentTabs[tab.id].url = tab.url; > + currentTabs[tab.id].favIconUrl = favIconUrl; > + plugin.addTabItem(tab.id, tab.windowId, tab.url, tab.title, > favIconUrl); > + > + if(urls[tab.url] && tab.title != "") > + plugin.addURLItem(urls[tab.url].id, tab.url, tab.title, > favIconUrl, > urls[tab.url].visitCount, > + urls[tab.url].typedCount, > urls[tab.url].lastVisitTime); > } > + > if(changeInfo.status == 'complete') { > - DBG("## chrome.tabs.onUpdated#complete: id="+tab.id+", url=" + > tab.url); > + currentTabs[tabId].url = tab.url; > currentTabs[tabId].title = tab.title; > - currentTabs[tabId].favIconUrl = tab.favIconUrl; > currentTabs[tabId].status = "complete"; > - > - if(tab.favIconUrl) > + > + var iconUrl = favIconUrl; > + if(tab.favIconUrl && !favIcons[tab.favIconUrl]) > { > - if(!favIcons[tab.favIconUrl])getFavIconData(tab, > tab.favIconUrl); > - else plugin.updateURLInfo(tab.url, tab.title, > tab.favIconUrl?tab.favIconUrl:""); > + iconUrl = tab.favIconUrl; > + plugin.addFavIconItem(iconUrl, Date.now(), ""); > + getFavIconData(iconUrl); > } > > - plugin.addTabItem(tab.id, tab.windowId, tab.url, tab.title); > + if(urls[tab.url] && tab.title != "") > + { > + chrome.tabs.getSelected(currentTabs[tabId].windowId, > function(atab) { > + if(atab.id == tabId) { > + takeScreenshot(tabId); > + } > + }); > + > + plugin.addURLItem(urls[tab.url].id, tab.url, tab.title, > iconUrl, > urls[tab.url].visitCount, > + urls[tab.url].typedCount, > urls[tab.url].lastVisitTime); > + delete urls[tab.url]; > + } > > - chrome.tabs.getSelected(currentTabs[tabId].windowId, > function(atab) { > - if(atab.id == tabId) { > - takeScreenshot(tab); > - } > - }); > + plugin.addTabItem(tab.id, tab.windowId, tab.url, tab.title, > iconUrl); > + > + > } > } > ); > @@ -175,7 +228,6 @@ > //When a tab is attached to a window > chrome.tabs.onAttached.addListener( > function (tabId, attachInfo) { > - DBG("## chrome.tabs.onAttached: id="+attachInfo.newWindowId); > currentTabs[tabId].windowId = attachInfo.newWindowId; > plugin.updateWindowId(tabId, attachInfo.newWindowId); > } > @@ -184,38 +236,63 @@ > // When a tab is selected > chrome.tabs.onSelectionChanged.addListener(function (tabId) { > // capture the thumbnail each time the tab get selected > - DBG("## chrome.tabs.onSelectionChanged: id=" + tabId); > - chrome.tabs.captureVisibleTab(currentTabs[tabId].windowId, > {format:"jpeg", quality:5}, > - function (dataUrl) { > - currentTabs[tabId].thumbnail = dataUrl; > - plugin.addThumbnailItem(currentTabs[tabId].url, > Date.now(), > dataUrl); > - }); > + takeScreenshot(tabId); > }); > > //When a tab is closed > chrome.tabs.onRemoved.addListener( > function (tabId) { > - DBG("## chrome.tabs.onRemoved: id="+tabId); > delete currentTabs[tabId]; > plugin.removeTabItem(tabId); > } > ); > > //When a URL is visited > + > +// Why comment out the following code: > +// It can not handle such a situation gracefully: > +// when typing manually a url (baidu.com) into the url location bar, > +// the browser will redirect it to http://www.baidu.com/. And the > +// onVisited event is also emitted twice, one for baidu.com, another > +// for http://www.baidu.com/. It seems to be tedious to make the > +// thumbnail for url (baidu.com) correct, > +// > +//chrome.history.onVisited.addListener( > +// function(item){ > +// if(item.title == "") return; > +// chrome.history.getVisits({'url':item.url}, function(visits) > +// { > +// var last = visits.length - 1; > +// > +// if(visits[last].transition == "typed" || > +// visits[last].transition == "link" || > +// visits[last].transition == "start_page" || > +// visits[last].transition == "auto_bookmark" || > +// visits[last].transition == "manual_subframe" || > +// visits[last].transition == "start_page" || > +// visits[last].transition == "reload") > +// { > +// var favIconUrl = getFaviconUrl(item.url); > +// getFavIconData(favIconUrl); > +// plugin.addURLItem(item.id, item.url, item.title, > favIconUrl, item.visitCount, item.typedCount, item.lastVisitTime); > +// } > +// }); > +// } > +//); > +// > chrome.history.onVisited.addListener( > - function(item){ > - chrome.history.getVisits({'url':item.url}, function(visits) > - { > - var last = visits.length - 1; > - if(visits[last].transition == "typed" || > - visits[last].transition == "link" || > - visits[last].transition == "start_page" > || > - visits[last].transition == "generated" > || > - visits[last].transition == > "auto_bookmark" || > - visits[last].transition == "reload") > - plugin.addURLItem(item.id, item.url, > item.title, > item.visitCount, item.typedCount, item.lastVisitTime, 0); > - }); > - } > + function(item) { > + var url; > + > + if(urls[item.url]) url = urls[item.url]; > + else url = new URL(item.id, item.url); > + > + url.title = item.title; > + url.visitCount = item.visitCount; > + url.typedCount = item.typedCount; > + url.lastVisitTime = item.lastVisitTime; > + urls[item.url] = url; > + } > ); > > //When a history is removed > @@ -224,6 +301,7 @@ > if(removeInfo.allHistory) > { > plugin.clearAllURLs(); > + urls = {}; > } > else > { > @@ -231,6 +309,7 @@ > for(i = 0; i < removeInfo.urls.length; i++) > { > plugin.removeURLItem(removeInfo.urls[i]); > + delete urls[removeInfo.urls[i]]; > } > } > } > @@ -239,7 +318,8 @@ > //When a new bookmark is created > chrome.bookmarks.onCreated.addListener( > function(id, node){ > - plugin.addBookmarkItem(id, node.url, node.title, > node.dateAdded); > + var favIconUrl = getFaviconUrl(node.url); > + plugin.addBookmarkItem(id, node.url, node.title, favIconUrl, > node.dateAdded); > } > ); > > @@ -255,7 +335,8 @@ > var i; > if(bookmark.children == null) > { > - plugin.addBookmarkItem(bookmark.id, bookmark.url, > bookmark.title, > bookmark.dateAdded); > + var favIconUrl = getFaviconUrl(bookmark.url); > + plugin.addBookmarkItem(bookmark.id, bookmark.url, > bookmark.title, > favIconUrl, bookmark.dateAdded); > } > else > { > @@ -267,26 +348,26 @@ > function init() { > > DBG("Initialize MeeGo extension...."); > - > chrome.windows.getAll({populate: true}, function (windows) { > - var found = false; > + var found = false; > // Get the URL from web panel > var selected_url = plugin.fetchUrlFromPanel(); > - plugin.clearAllTabItems(); > + DBG("fetch url from panel: " + selected_url); > + plugin.clearAllTabItems(); > windows.forEach(function (win) { > window.focus(); > win.tabs.forEach(function (tab) { > if(tab.url == selected_url){ > - DBG("restore " + selected_url); > chrome.tabs.update(tab.id, {selected: > true}); > - chrome.windows.update(tab.windowId, > {focused: > true}); > found = true; > } > currentTabs[tab.id] = new Tab(tab.id, > tab.windowId); > currentTabs[tab.id].title = tab.title; > - currentTabs[tab.id].favIconUrl = tab.favIconUrl; > + favIconUrl = tab.favIconUrl ? tab.favIconUrl : > getFaviconUrl(tab.url); > + currentTabs[tab.id].favIconUrl = favIconUrl; > currentTabs[tab.id].url = tab.url; > - plugin.addTabItem(tab.id, tab.windowId, > tab.url, tab.title); > + currentTabs[tab.id].status = "loading"; > + plugin.addTabItem(tab.id, tab.windowId, > tab.url?tab.url:"", > tab.title?tab.title:"", favIconUrl); > > }); > }); > --- chrome-meego-extension-0.2.0/plugin/src/MeeGoPluginAPI.cpp > +++ chrome-meego-extension-0.2.0/plugin/src/MeeGoPluginAPI.cpp > @@ -18,13 +18,15 @@ > #include <sys/types.h> > #include <sys/stat.h> > #include <errno.h> > - > +#include <string.h> > #include "BrowserObjectAPI.h" > #include "variant_list.h" > #include "DOM/JSAPI_DOMDocument.h" > #include "DOM/JSAPI_DOMWindow.h" > #include "MeeGoPluginAPI.h" > > +#define EXTENSION_DEBUG > + > #ifdef EXTENSION_DEBUG > #include <stdarg.h> > #define DBG(...) g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, > __VA_ARGS__) > @@ -40,13 +42,13 @@ > > MeeGoPluginAPI::MeeGoPluginAPI(FB::BrowserHostWrapper *host) : > m_host(host), m_input_file(NULL), m_input(NULL) > { > - DBG("===> MeeGoPluginAPI::ctor()"); > registerMethod("debug", make_method(this, > &MeeGoPluginAPI::debug)); > registerMethod("setPageThumbnail", make_method(this, > &MeeGoPluginAPI::setPageThumbnail)); > - registerMethod("addURLItem", make_method(this, > &MeeGoPluginAPI::addURLItem)); > registerMethod("updateURLInfo", make_method(this, > &MeeGoPluginAPI::updateURLInfo)); > + > + registerMethod("addURLItem", make_method(this, > &MeeGoPluginAPI::addURLItem)); > registerMethod("addBookmarkItem", make_method(this, > &MeeGoPluginAPI::addBookmarkItem)); > - registerMethod("addFavoriteIconItem", make_method(this, > &MeeGoPluginAPI::addFavoriteIconItem)); > + registerMethod("addFavIconItem", make_method(this, > &MeeGoPluginAPI::addFavIconItem)); > registerMethod("addThumbnailItem", make_method(this, > &MeeGoPluginAPI::addThumbnailItem)); > registerMethod("updateWindowId", make_method(this, > &MeeGoPluginAPI::updateWindowId)); > registerMethod("addTabItem", make_method(this, > &MeeGoPluginAPI::addTabItem)); > @@ -65,8 +67,6 @@ > > MeeGoPluginAPI::~MeeGoPluginAPI() > { > - DBG("==> MeeGoPluginAPI::~MeeGoPluginAPI"); > - > closePipe(); > sqlite3_close(m_panel_db); > g_free(m_db_dirname); > @@ -78,7 +78,6 @@ > { > std::string s; > s = msg.convert_cast<std::string>(); > - > DBG("%s", s.c_str()); > return msg; > } > @@ -90,10 +89,6 @@ > memset(img, 0, len); > memcpy(img, thumbnail.data() + 22, len); > > -#ifdef EXTENSION_DEBUG > - g_debug("setPageThumbnail for %s %s", url.c_str(), title.c_str()); > -#endif > - > // update thumbnail > gchar *thumbnail_path; > gchar *thumbnail_filename = NULL; > @@ -143,8 +138,8 @@ > } > else > { > - data.app_name = (gchar*)"chromium"; > - data.app_exec = (gchar*)"chromium \"%u\""; > + data.app_name = (gchar*)"chromium-browser"; > + data.app_exec = (gchar*)"chromium-browser \"%u\""; > } > data.is_private = FALSE; > data.groups = NULL; > @@ -190,8 +185,6 @@ > GError *error = NULL; > gboolean result = TRUE; > > - DBG("input_io_func: handle %d condition", condition); > - > while (condition & (G_IO_PRI | G_IO_IN)) > { > GIOStatus status; > @@ -252,7 +245,6 @@ > > void MeeGoPluginAPI::processCommand(guint command) > { > - DBG("processCommand %d\n", command); > switch (command) { > case CMD_SELECT_TAB: > { > @@ -262,7 +254,9 @@ > > status = pipe_receive (m_input, > G_TYPE_INT, &tab_id, > G_TYPE_INVALID); > - DBG("Restore tab %d", tab_id); > + > + DBG("select tab id: %d", tab_id); > + > // > FireEvent("onReceivedSelectTabCmd", > FB::variant_list_of(tab_id)); > > m_host->getDOMWindow().callMethod<void>("selectTabById", > FB::variant_list_of(tab_id)); > > @@ -275,7 +269,6 @@ > } > case CMD_NEW_TAB: > { > - DBG("handle CMD_NEW_TAB command"); > try > { > char* buffer = NULL; > @@ -283,7 +276,7 @@ > std::string url; > status = pipe_receive(m_input, > G_TYPE_STRING, > &buffer, G_TYPE_INVALID); > url = buffer; > - > m_host->getDOMWindow().callMethod<void>("openNewTabWithUrl", > FB::variant_list_of(url)); > + > m_host->getDOMWindow().callMethod<void>("selectTabByUrl", > FB::variant_list_of(url)); > g_free(buffer); > }catch(...){ > g_warning("exception for invoke > javascript method"); > @@ -303,15 +296,12 @@ > > GIOStatus status; > > - DBG("pipe_receive ..."); > va_start (args, channel); > > while ((type = va_arg (args, GType)) != G_TYPE_INVALID) > { > gsize size; > > - DBG("type = %d", type); > - > gchar *buffer = (gchar*)va_arg (args, gpointer); > GError *error = NULL; > > @@ -354,7 +344,6 @@ > { > do > { > - DBG("#read chars from channel ..."); > status = g_io_channel_read_chars (channel, > (gchar *)(&size), > sizeof (size), > @@ -368,7 +357,6 @@ > > do > { > - DBG("@read chars from channel ..."); > status = g_io_channel_read_chars > (channel, > *((gchar **)buffer), > size, > @@ -380,7 +368,6 @@ > } > else do > { > - DBG("$read chars from chanel ..."); > status = g_io_channel_read_chars (channel, > buffer, > size, > @@ -439,9 +426,6 @@ > } > g_remove(m_input_file); > g_free(m_input_file); > -#ifdef EXTENSION_DEBUG > - g_debug("MeeGo plugin closePipe\n"); > -#endif > } > > void MeeGoPluginAPI::createPipe() > @@ -457,7 +441,6 @@ > > g_assert(m_input_file); > > - DBG("MeeGo plugin openPipe: %s", m_input_file); > fd = open (m_input_file, O_RDONLY | O_NONBLOCK); > m_input = g_io_channel_unix_new (fd); > g_io_channel_set_encoding (m_input, NULL, NULL); > @@ -467,7 +450,6 @@ > (GIOCondition) (G_IO_IN | G_IO_ERROR | G_IO_HUP), > (GIOFunc)input_io_func, > this); > - DBG("pipe %s opened", m_input_file); > } > > std::string MeeGoPluginAPI::fetchUrlFromPanel() > @@ -478,8 +460,6 @@ > gchar *command; > gsize length; > > - DBG("doStartupCmd"); > - > if (g_file_test (plugin_cmd, G_FILE_TEST_EXISTS)) > { > g_file_get_contents (plugin_cmd, (gchar **)&command, &length, > NULL); > @@ -506,19 +486,17 @@ > (id INTEGER PRIMARY KEY, url LONGCHARVAR, last_update_time > INTEGER NOT NULL, image_data BLOB)" > > #define CREATE_TABS_TABLE_STMT "CREATE TABLE IF NOT EXISTS > current_tabs \ > - (id INTEGER PRIMARY KEY, tab_id INTEGER, win_id INTEGER, url > LONGVARCHAR, title LONGVARCHAR)" > + (tab_id INTEGER PRIMARY KEY, win_id INTEGER, url LONGVARCHAR, title > LONGVARCHAR, \ > + favicon_id INTEGER DEFAULT 0)" > > #define CREATE_ICON_TABLE_STMT "CREATE TABLE IF NOT EXISTS favicons \ > - (id INTEGER PRIMARY KEY, url LONGVARCHAR, last_update_time > INTEGER, \ > - icon_data BLOB)" > + (id INTEGER PRIMARY KEY, url LONGVARCHAR, last_update_time > INTEGER)" > > void MeeGoPluginAPI::init_db() > { > int rc; > gchar* db_path = NULL; > > - DBG("init panel database()"); > - > db_path = g_build_filename(g_get_home_dir(), > ".config", > NETPANEL_DIRNAME, > @@ -565,7 +543,7 @@ > } > else > { > - DBG("failed to open %s: %s", db_path, > sqlite3_errmsg(m_panel_db)); > + g_warning("failed to open %s: %s", db_path, > sqlite3_errmsg(m_panel_db)); > sqlite3_close(m_panel_db); > m_panel_db = NULL; > } > @@ -580,13 +558,10 @@ > > > // Insert a URL item into urls table > -void MeeGoPluginAPI::addURLItem(std::string id, std::string url, std::string > title, > - FB::variant visit_count, FB::variant typed_count, FB::variant > last_visit_time, > - std::string favicon_url) > +void MeeGoPluginAPI::addURLItem(std::string id, std::string url, std::string > title, std::string favicon_url, > + FB::variant visit_count, FB::variant typed_count, FB::variant > last_visit_time) > { > - int rc; > - char* select_sql, *insert_sql, *update_sql; > - sqlite3_stmt *select_stmt; > + char* insert_sql; > int visit_count_, typed_count_; > long long id_, last_visit_time_; > > @@ -599,86 +574,20 @@ > > if(!m_panel_db) return; > > - select_sql = insert_sql = update_sql = NULL; > - select_stmt = NULL; > - > - DBG("MeeGoPluginAPI::insertURLItem('%s')", url.c_str()); > - > - // Check whether the item has been already existing in table > - select_sql = g_strdup_printf("SELECT id FROM urls WHERE id=%d", id_); > - sqlite3_prepare_v2(m_panel_db, select_sql, -1, &select_stmt, NULL); > - rc = sqlite3_step(select_stmt); > - sqlite3_finalize(select_stmt); > - > - int favicon_id = 0; //FIXME: determine the id for favorite icon from > its url > - if(rc == SQLITE_DONE) // No item found, insert new record into table > - { > - insert_sql = g_strdup_printf("INSERT INTO urls(id, url, title, > visit_count, typed_count, last_visit_time, favicon_id) \ > - VALUES(%lld, \"%s\", \"%s\", %d, %d, %lld, > %d)", id_, > url.c_str(), title.c_str(), visit_count_, typed_count_, > - last_visit_time_, favicon_id); > - > - char* errmsg = NULL; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, insert_sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec %s: %s", update_sql, errmsg); > - g_free(errmsg); > - } > - g_free(insert_sql); > - } > - > - else if(rc == SQLITE_ROW) // Already exists and update the item > - { > - update_sql = g_strdup_printf("UPDATE urls SET url=\"%s\", > title=\"%s\", visit_count=%d, typed_count=%d," > - "last_visit_time=%lld, favicon_id=%d WHERE > id=%lld", > url.c_str(), title.c_str(), visit_count_, > - typed_count_,last_visit_time_, favicon_id, id_); > - > - char* errmsg = NULL; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, update_sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec %s: %s", update_sql, errmsg); > - } > - g_free(errmsg); > - g_free(update_sql); > - } > - > - else > - { > - DBG("failed to exec '%s': %s", select_sql, > sqlite3_errmsg(m_panel_db)); > - } > - > - g_free(select_sql); > - > - return; > -} > + insert_sql = g_strdup_printf( > + "INSERT OR REPLACE INTO urls(id, url, title, > visit_count, > typed_count, last_visit_time, favicon_id) " > + "VALUES(%lld, '%s', '%s', %d, %d, %lld, (SELECT > COALESCE((SELECT id FROM favicons WHERE url='%s'), 0)))", > + id_, url.c_str(), title.c_str(), visit_count_, > typed_count_, > last_visit_time_, favicon_url.c_str()); > > -void MeeGoPluginAPI::updateURLInfo(std::string url, std::string title, > std::string favicon_url) > -{ > - int rc; > char* errmsg = NULL; > - > - if(!m_panel_db) return; > - > - DBG("MeeGoPluginAPI::updateURLInfo: %s", url.c_str()); > - > - char* sql = g_strdup_printf("UPDATE urls SET > title='%s',favicon_id=(SELECT id FROM favicons WHERE url='%s') WHERE > url='%s'", title.c_str(), favicon_url.c_str(), url.c_str()); > - > - rc = sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg); > - if(rc != SQLITE_OK) > - { > - DBG("failed to exec '%s': %s", sql, errmsg); > - g_free(errmsg); > - } > - g_free(sql); > - > - sql = g_strdup_printf("UPDATE bookmarks SET favicon_id=(SELECT id > FROM favicons WHERE url='%s') WHERE url='%s'", favicon_url.c_str(), > url.c_str()); > - rc = sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg); > - if(rc != SQLITE_OK) > + if(SQLITE_OK != sqlite3_exec(m_panel_db, insert_sql, NULL, NULL, > &errmsg)) > { > - DBG("failed to exec '%s': %s", sql, errmsg); > + g_warning("failed to exec: %s", errmsg); > g_free(errmsg); > } > - g_free(sql); > + g_free(insert_sql); > > + return; > } > > void MeeGoPluginAPI::clearAllURLs() > @@ -686,7 +595,6 @@ > char* errmsg = NULL; > if(!m_panel_db) return; > > - DBG("MeeGoPluginAPI::clearAllURLs"); > // Remove thumbnails > char* thumbnail_dirname = g_build_filename(m_db_dirname, > "thumbnails", NULL); > > @@ -712,13 +620,15 @@ > > if(sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg) != SQLITE_OK) > { > - DBG("failed to exec %s: %s", sql, errmsg); > + g_warning("failed to exec %s: %s", sql, errmsg); > g_free(errmsg); > } > } > > // Insert a bookmark item into bookmarks table > -void MeeGoPluginAPI::addBookmarkItem(std::string id, std::string url, > std::string title, FB::variant dateAdded) > +void MeeGoPluginAPI::addBookmarkItem(std::string id, std::string url, > + std::string title, std::string > faviconUrl, > + > FB::variant dateAdded) > { > int rc; > sqlite3_stmt* select_stmt = NULL; > @@ -729,116 +639,116 @@ > > if(!m_panel_db) return; > > - DBG("MeeGoPluginAPI::insertBookmarkItem"); > - > dateAdded_ = static_cast<long > long>(dateAdded.convert_cast<double>()); > - > id_ = g_ascii_strtoll(id.c_str(), NULL, 10); > - favicon_id = 0; //FIXME: determine the id for favorite icon > > - // Check whether the item already exists > - select_sql = g_strdup_printf("SELECT id from bookmarks WHERE id=%lld > LIMIT 1", id_); > - sqlite3_prepare_v2(m_panel_db, select_sql, -1, &select_stmt, NULL); > - rc = sqlite3_step(select_stmt); > + insert_sql = g_strdup_printf( > + "INSERT OR REPLACE INTO bookmarks(id, url, title, > dateAdded, > favicon_id) " > + "VALUES(%lld, '%s', '%s', %lld, (SELECT > COALESCE((SELECT id > FROM favicons WHERE url='%s'), 0)))", > + id_, url.c_str(), title.c_str(), dateAdded_, > faviconUrl.c_str()); > > - if(rc == SQLITE_DONE) // Not found, add the new item > + if(SQLITE_OK != sqlite3_exec(m_panel_db, insert_sql, NULL, NULL, > &errmsg)) > { > - insert_sql = g_strdup_printf("INSERT INTO bookmarks(id, url, > title, > dateAdded) \ > - VALUES(%lld, \"%s\", \"%s\", %lld)", id_, > url.c_str(), > title.c_str(), dateAdded_); > - > - errmsg = NULL; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, insert_sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec %s: %s", insert_sql, errmsg); > - g_free(errmsg); > - } > - g_free(insert_sql); > + g_warning("failed to exec %s: %s", insert_sql, errmsg); > + g_free(errmsg); > } > - else if(rc == SQLITE_ROW) //Found the item, update it > + g_free(insert_sql); > + > +} > +void MeeGoPluginAPI::updateURLInfo(std::string url, std::string title, > std::string favicon_url) > +{ > + int rc; > + char* errmsg = NULL; > + > + if(!m_panel_db) return; > + > + char* sql = g_strdup_printf("UPDATE urls SET > title='%s',favicon_id=(SELECT id FROM favicons WHERE url='%s') WHERE > url='%s'", title.c_str(), favicon_url.c_str(), url.c_str()); > + > + if(SQLITE_OK != sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg)) > { > - update_sql = g_strdup_printf("UPDATE bookmarks SET url=\"%s\", > title=\"%s\", favicon_id=(SELECT favicon_id FROM urls WHERE url='%s') WHERE > id=%lld", > - url.c_str(), title.c_str(), url.c_str(), id_); > - errmsg = NULL; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, update_sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec %s: %s", update_sql, errmsg); > - g_free(errmsg); > - } > - g_free(update_sql); > + g_warning("failed to exec: %s", errmsg); > + g_free(errmsg); > } > - else > + g_free(sql); > + > + sql = g_strdup_printf("UPDATE bookmarks SET favicon_id=(SELECT id > FROM favicons WHERE url='%s') WHERE url='%s'", favicon_url.c_str(), > url.c_str()); > + rc = sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg); > + if(rc != SQLITE_OK) > { > - DBG("failed to exec '%s'", select_sql); > + g_warning("failed to exec '%s': %s", sql, errmsg); > + g_free(errmsg); > } > + g_free(sql); > > - sqlite3_finalize(select_stmt); > - g_free(select_sql); > + return; > } > > // Insert a favorite icon item into favicons table > -void MeeGoPluginAPI::addFavoriteIconItem(std::string url, FB::variant > last_update, FB::variant data ) > +void MeeGoPluginAPI::addFavIconItem(std::string url, FB::variant last_update, > FB::variant data) > { > int rc; > + int id; > long long last_update_; > - char* select_sql, *sql = NULL; > + char* select_sql = NULL; > + char* sql = NULL; > sqlite3_stmt* select_stmt = NULL; > - > + > if(!m_panel_db) return; > - > - last_update_ = static_cast<long > long>(last_update.convert_cast<double>()); > > - DBG("MeeGoPluginAPI::insertFavoriteIconItem(url=\"%s\", > last_update_time=%lld)", url.c_str(), last_update_); > + last_update_ = static_cast<long > long>(last_update.convert_cast<double>()); > > - std::string base64_string = data.convert_cast<std::string>(); > + select_sql = g_strdup_printf("SELECT id FROM favicons WHERE url='%s'", > url.c_str()); > + sqlite3_prepare_v2(m_panel_db, select_sql, -1, &select_stmt, NULL); > + if(sqlite3_step(select_stmt) == SQLITE_ROW) // Already exists > + { > + sql = g_strdup_printf("UPDATE favicons SET last_update_time=%lld > WHERE url='%s'", last_update_, url.c_str()); > + } > + else > + { > + sql = g_strdup_printf("INSERT INTO favicons(url, > last_update_time) > VALUES('%s', %lld)", url.c_str(), last_update_); > + } > + sqlite3_finalize(select_stmt); > + g_free(select_sql); > > - select_sql = g_strdup_printf("SELECT id FROM favicons WHERE url='%s' > LIMIT 1", url.c_str()); > - sqlite3_prepare_v2(m_panel_db, select_sql, -1, &select_stmt, NULL); > - rc = sqlite3_step(select_stmt); > > - if(rc != SQLITE_DONE && rc != SQLITE_ROW) > + // Execute SQL statement > + char* errmsg = NULL; > + if(sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg) != SQLITE_OK) > { > - DBG("failed to exec %s: %s", select_sql, > sqlite3_errmsg(m_panel_db)); > - g_free(select_sql); > - return; > + g_warning("failed to exec: %s", errmsg); > + g_free(errmsg); > } > + g_free(sql); > + > + std::string base64_string = data.convert_cast<std::string>(); > + if(base64_string == "") return; > > // Build icon filename from url > char* csum = g_compute_checksum_for_string (G_CHECKSUM_MD5, > url.c_str(), -1); > char* filename = g_strconcat(csum, ".ico", NULL); > > - if(rc == SQLITE_DONE) // Not found > - { > - sql = g_strdup_printf("INSERT INTO favicons(url, > last_update_time, > icon_data) VALUES('%s', %lld, '%s')", > - url.c_str(), last_update_, filename); > - } > - if(rc == SQLITE_ROW) // Found > - { > - sql = g_strdup_printf("UPDATE favicons SET > last_update_time=%lld,icon_data='%s' WHERE url='%s'", > - last_update_, filename, url.c_str()); > - } > + // Save the icon data into local .ico file > + size_t len = 0; > + GError* error = NULL; > + char* icon_filename = NULL; > + char* icon_data = NULL; > + > + icon_data = (char*)g_base64_decode(base64_string.c_str(), &len); > > - char* errmsg = NULL; > - if(sql != NULL && (SQLITE_OK == sqlite3_exec(m_panel_db, sql, NULL, > NULL, &errmsg))) > - { > - size_t len = 0; > - char* icon_data = (char*)g_base64_decode(base64_string.c_str(), > &len); > + // avoid bad-formed icon data > + if(strstr(icon_data, "<HTML>") || strstr(icon_data, "<html>")) goto end; > > - GError* error = NULL; > - char* icon_filename = g_build_filename(m_db_dirname, "favicons", > filename, NULL); > - if(!g_file_set_contents(icon_filename, icon_data, len, &error)) > - { > - DBG("failed to g_file_set_contents: %s", > error->message); > - g_error_free(error); > - } > - g_free(sql); > - g_free(icon_data); > - g_free(icon_filename); > - } > - else > + icon_filename = g_build_filename(m_db_dirname, "favicons", filename, > NULL); > + if(!g_file_set_contents(icon_filename, icon_data, len, &error)) > { > - DBG("Oops .... %s", errmsg ? errmsg : "null"); > + g_warning("failed to g_file_set_contents: %s", error->message); > + g_error_free(error); > } > - g_free(select_sql); > + > +end: > + g_free(icon_data); > + g_free(icon_filename); > + > return; > } > > @@ -848,8 +758,6 @@ > { > if(!m_panel_db) return; > > - DBG("MeeGoPluginAPI::insertThumbnailItem"); > - > // Build filename for thumbnail > char* csum = g_compute_checksum_for_string (G_CHECKSUM_MD5, > url.c_str(), -1); > char* filename = g_strconcat(csum, ".png", NULL); > @@ -861,7 +769,7 @@ > char* thumbnail_filename = g_build_filename(m_db_dirname, > "thumbnails", filename, NULL); > if(!g_file_set_contents(thumbnail_filename, blob, len, &error)) > { > - DBG("failed to g_file_set_contents: %s", error->message); > + g_warning("failed to g_file_set_contents: %s", error->message); > g_error_free(error); > } > g_free(blob); > @@ -871,13 +779,12 @@ > g_free(csum); > g_free(filename); > > - DBG("end of addThumbnailItem"); > - > return; > } > > // Insert a tab item FB:varianto current_tabs table > -void MeeGoPluginAPI::addTabItem(FB::variant tab_id, FB::variant win_id, > std::string url, std::string title) > +void MeeGoPluginAPI::addTabItem(FB::variant tab_id, FB::variant win_id, > std::string url, > + std::string title, std::string > faviconUrl) > { > int rc; > int tab_id_, win_id_; > @@ -889,46 +796,19 @@ > tab_id_ = tab_id.convert_cast<int>(); > win_id_ = win_id.convert_cast<int>(); > > - DBG("MeeGoPluginAPI::insertTabItem(tab_id=%d, win_id=%d, url=%s, > title=%s)", > - tab_id_, win_id_, url.c_str(), title.c_str()); > - > - // Check whether it exists > - sql = g_strdup_printf("SELECT tab_id FROM current_tabs WHERE > tab_id=%d LIMIT 1", tab_id_); > - sqlite3_prepare_v2(m_panel_db, sql, -1, &select_stmt, NULL); > - g_free(sql); > - > - rc = sqlite3_step(select_stmt); > - if(rc == SQLITE_DONE) // Not found > - { > - // Insert a record into current_tabs > - sql = g_strdup_printf("INSERT INTO current_tabs(tab_id, win_id, > url, > title) VALUES(%d, %d, '%s', '%s')", > - tab_id_, win_id_, url.c_str(), title.c_str()); > + // Insert a record into current_tabs > + sql = g_strdup_printf("INSERT OR REPLACE INTO current_tabs(tab_id, > win_id, url, title, favicon_id) " > + "VALUES(%d, %d, '%s', '%s',(SELECT COALESCE((SELECT id > FROM > favicons WHERE url='%s'), 0)))", > + tab_id_, win_id_, url.c_str(), title.c_str(), > faviconUrl.c_str()); > > - char* errmsg; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec '%s': %s", sql, errmsg); > - g_free(errmsg); > - } > - g_free(sql); > - } > - else if(rc == SQLITE_ROW) // Found > - { > - sql = g_strdup_printf("UPDATE current_tabs SET win_id=%d, > url='%s', > title='%s' WHERE tab_id=%d", > - win_id_, url.c_str(), title.c_str(), tab_id_); > - char* errmsg; > - if(SQLITE_OK != sqlite3_exec(m_panel_db, sql, NULL, NULL, > &errmsg)) > - { > - DBG("failed to exec '%s': %s", sql, errmsg); > - g_free(errmsg); > - } > - g_free(sql); > - } > - else > + char* errmsg; > + if(SQLITE_OK != sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg)) > { > - DBG("failed to exec: %s", sqlite3_errmsg(m_panel_db)); > + g_warning("failed to exec '%s': %s", sql, errmsg); > + g_free(errmsg); > } > - sqlite3_finalize(select_stmt); > + g_free(sql); > + > return; > } > > @@ -942,14 +822,12 @@ > tab_id_ = tab_id.convert_cast<int>(); > newwin_id_ = newwin_id.convert_cast<int>(); > > - DBG("updateWindowId: tab_id=%d, newwin_id=%d", tab_id_, > newwin_id_); > - > char* sql = g_strdup_printf("UPDATE current_tabs SET win_id=%d WHERE > tab_id=%d", newwin_id_, tab_id_); > char* errmsg = NULL; > rc = sqlite3_exec(m_panel_db, sql, NULL, NULL, &errmsg); > if(rc != SQLITE_OK) > { > - DBG("failed to exec '%s': %s", sql, errmsg); > + g_warning("failed to exec '%s': %s", sql, errmsg); > g_free(errmsg); > } > g_free(sql); > @@ -962,13 +840,11 @@ > > if(!m_panel_db) return; > > - DBG("clearAllTabItems ..."); > - > char* errmsg = NULL; > rc = sqlite3_exec(m_panel_db, "DELETE FROM current_tabs", NULL, NULL, > &errmsg); > if(rc != SQLITE_OK) > { > - DBG("failed to clear tabs: %s", errmsg); > + g_warning("failed to clear tabs: %s", errmsg); > g_free(errmsg); > } > return; > @@ -984,13 +860,11 @@ > > tab_id_ = tab_id.convert_cast<int>(); > > - DBG("removeTabItem: tab id = %d", tab_id_); > - > char* delete_sql = g_strdup_printf("DELETE FROM current_tabs WHERE > tab_id=%d", tab_id_); > rc = sqlite3_exec(m_panel_db, delete_sql, NULL, NULL, &errmsg); > if(rc != SQLITE_OK) > { > - DBG("Error: failed to exec '%s': %s", delete_sql); > + g_warning("Error: failed to exec : %s", errmsg); > g_free(errmsg); > } > g_free(delete_sql); > @@ -1006,21 +880,19 @@ > > if(!m_panel_db) return; > > - DBG("removeURLItem: url=%s", url.c_str()); > - > // Delete the item from urls > char* delete_sql = g_strdup_printf("DELETE FROM urls WHERE url='%s'", > url.c_str()); > rc = sqlite3_exec(m_panel_db, delete_sql, NULL, NULL, &errmsg); > if(rc != SQLITE_OK) > { > - DBG("Error: failed to exec '%s': %s", delete_sql); > + g_warning("Error: failed to exec: %s", errmsg); > g_free(errmsg); > } > g_free(delete_sql); > > // Remove thumbnail file > char* csum = g_compute_checksum_for_string (G_CHECKSUM_MD5, > url.c_str(), -1); > - char* filename = g_strconcat(csum, ".png", NULL); > + char* filename = g_strconcat(csum, ".jpg", NULL); > char* thumbnail_filename = g_build_filename(m_db_dirname, > "thumbnails", filename, NULL); > > g_remove(thumbnail_filename); > @@ -1029,6 +901,7 @@ > g_free(filename); > g_free(thumbnail_filename); > > + > return; > } > > @@ -1042,15 +915,16 @@ > if(!m_panel_db) return; > > id_ = g_ascii_strtoll(id.c_str(), NULL, 10); > - char* delete_sql = g_strdup_printf("DELETE FROM bookmarks WHERE > id=%d", id_); > + char* delete_sql = g_strdup_printf("DELETE FROM bookmarks WHERE > id=%lld", id_); > rc = sqlite3_exec(m_panel_db, delete_sql, NULL, NULL, &errmsg); > if(rc != SQLITE_OK) > { > - DBG("Error: failed to exec '%s': %s", delete_sql, errmsg); > + g_warning("Error: failed to exec '%s': %s", delete_sql, errmsg); > g_free(errmsg); > } > > g_free(delete_sql); > + > } > > bool MeeGoPluginAPI::hasBookmarkImported() > @@ -1067,7 +941,7 @@ > if(b) > { > int fd = creat(fname, 0400); > - if(fd < 0) DBG("failed to create %s: %s", fname, > strerror(errno)); > + if(fd < 0) g_warning("failed to create %s: %s", fname, > strerror(errno)); > else > { > close(fd); > --- chrome-meego-extension-0.2.0/plugin/src/MeeGoPluginAPI.h > +++ chrome-meego-extension-0.2.0/plugin/src/MeeGoPluginAPI.h > @@ -43,11 +43,9 @@ > void setPageThumbnail(std::string url, std::string title, std::string > thumbnail); > > // Insert a URL item into urls table > - void addURLItem(std::string id, std::string url, std::string title, > - FB::variant visit_count, FB::variant typed_count, > FB::variant > last_visit_time, > - std::string favicon_url); > + void addURLItem(std::string id, std::string url, std::string title, > std::string > faviconUrl, > + FB::variant visit_count, FB::variant typed_count, > FB::variant > last_visit_time); > > - // Update URL info > void updateURLInfo(std::string url, std::string title, std::string > favicon_url); > > // Clear URL table > @@ -57,19 +55,19 @@ > void removeURLItem(std::string id); > > // Insert a bookmark item into bookmarks table > - void addBookmarkItem(std::string id, std::string url, std::string title, > FB::variant dataAdded); > + void addBookmarkItem(std::string id, std::string url, std::string title, > std::string faviconUrl, FB::variant dateAdded); > > // Remove a bookmark item > void removeBookmarkItem(std::string id); > > // Insert a favorite icon item into favicons table > - void addFavoriteIconItem(std::string url, FB::variant last_update, > FB::variant icon_data ); > + void addFavIconItem(std::string url, FB::variant last_update, > FB::variant > data); > > // Insert a thumbnail for a URL into thumbnails table > void addThumbnailItem(std::string url, FB::variant last_update, > std::string > image_data); > > // Insert a tab item into current_tabs table > - void addTabItem(FB::variant tab_id, FB::variant win_id, std::string url, > std::string title); > + void addTabItem(FB::variant tab_id, FB::variant win_id, std::string url, > std::string title, std::string faviconUrl); > > // Clear all tabs > void clearAllTabItems(); > > _______________________________________________ > Meego-commits mailing list > [email protected] > http://lists.meego.com/listinfo/meego-commits _______________________________________________ MeeGo-packaging mailing list [email protected] http://lists.meego.com/listinfo/meego-packaging
