Ejemplo n.º 1
0
 def __pull_bookmarks(self, bulk_keys, first_sync):
     """
         Pull from bookmarks
         @param bulk_keys as KeyBundle
         @param first_sync as bool
         @raise StopIteration
     """
     debug("pull bookmarks")
     SqlCursor.add(El().bookmarks)
     records = self.__mozilla_sync.get_records("bookmarks", bulk_keys)
     children_array = []
     for record in records:
         self.__check_worker()
         if record["modified"] < self.__mtimes["bookmarks"]:
             continue
         sleep(0.01)
         bookmark = record["payload"]
         bookmark_id = El().bookmarks.get_id_by_guid(bookmark["id"])
         # Nothing to apply, continue
         if El().bookmarks.get_mtime(bookmark_id) >= record["modified"]:
             continue
         debug("pulling %s" % record)
         # Deleted bookmark
         if "deleted" in bookmark.keys():
             El().bookmarks.remove(bookmark_id)
         # Keep folder only for firefox compatiblity
         elif "type" in bookmark.keys() and bookmark["type"] == "folder"\
                 and bookmark["id"] is not None\
                 and bookmark["title"]:
             if bookmark_id is None:
                 bookmark_id = El().bookmarks.add(bookmark["title"],
                                                  bookmark["id"],
                                                  bookmark["id"],
                                                  [],
                                                  0,
                                                  False)
             # Will calculate position later
             if "children" in bookmark.keys():
                 children_array.append(bookmark["children"])
         # We have a bookmark, add it
         elif "type" in bookmark.keys() and bookmark["type"] == "bookmark"\
                 and bookmark["id"] is not None\
                 and bookmark["title"]:
             # Add a new bookmark
             if bookmark_id is None:
                 # Use parent name if no bookmarks tags
                 if "tags" not in bookmark.keys() or\
                         not bookmark["tags"]:
                     if "parentName" in bookmark.keys() and\
                             bookmark["parentName"]:
                         bookmark["tags"] = [bookmark["parentName"]]
                     else:
                         bookmark["tags"] = []
                 bookmark_id = El().bookmarks.add(bookmark["title"],
                                                  bookmark["bmkUri"],
                                                  bookmark["id"],
                                                  bookmark["tags"],
                                                  0,
                                                  False)
             # Update bookmark
             else:
                 El().bookmarks.set_title(bookmark_id,
                                          bookmark["title"],
                                          False)
                 El().bookmarks.set_uri(bookmark_id,
                                        bookmark["bmkUri"],
                                        False)
                 # Update tags
                 current_tags = El().bookmarks.get_tags(bookmark_id)
                 for tag in El().bookmarks.get_tags(bookmark_id):
                     if "tags" in bookmark.keys() and\
                             tag not in bookmark["tags"]:
                         tag_id = El().bookmarks.get_tag_id(tag)
                         current_tags.remove(tag)
                         El().bookmarks.del_tag_from(tag_id,
                                                     bookmark_id,
                                                     False)
                 if "tags" in bookmark.keys():
                     for tag in bookmark["tags"]:
                         # Tag already associated
                         if tag in current_tags:
                             continue
                         tag_id = El().bookmarks.get_tag_id(tag)
                         if tag_id is None:
                             tag_id = El().bookmarks.add_tag(tag, False)
                         El().bookmarks.add_tag_to(tag_id,
                                                   bookmark_id,
                                                   False)
         # Update parent name if available
         if bookmark_id is not None and "parentName" in bookmark.keys():
             El().bookmarks.set_parent(bookmark_id,
                                       bookmark["parentid"],
                                       bookmark["parentName"],
                                       False)
         El().bookmarks.set_mtime(bookmark_id,
                                  record["modified"],
                                  False)
     # Update bookmark position
     for children in children_array:
         position = 0
         for child in children:
             bid = El().bookmarks.get_id_by_guid(child)
             El().bookmarks.set_position(bid,
                                         position,
                                         False)
             position += 1
     El().bookmarks.clean_tags()  # Will commit
     SqlCursor.remove(El().bookmarks)
Ejemplo n.º 2
0
 def __pull_bookmarks(self, bulk_keys, first_sync):
     """
         Pull from bookmarks
         @param bulk_keys as KeyBundle
         @param first_sync as bool
         @raise StopIteration
     """
     debug("pull bookmarks")
     SqlCursor.add(El().bookmarks)
     records = self.__mozilla_sync.get_records("bookmarks", bulk_keys)
     # We get all guids here and remove them while sync
     # At the end, we have deleted records
     # On fist sync, keep all
     if first_sync:
         to_delete = []
     else:
         to_delete = El().bookmarks.get_guids()
     for record in records:
         if self.__stop:
             raise StopIteration("Cancelled")
         sleep(0.01)
         bookmark = record["payload"]
         if "type" not in bookmark.keys() or\
                 bookmark["type"] not in ["folder", "bookmark"]:
             continue
         bookmark_id = El().bookmarks.get_id_by_guid(bookmark["id"])
         # This bookmark exists, remove from to delete
         if bookmark["id"] in to_delete:
             to_delete.remove(bookmark["id"])
         # Nothing to apply, continue
         if El().bookmarks.get_mtime(bookmark_id) >= record["modified"]:
             continue
         debug("pulling %s" % record)
         if bookmark_id is None:
             if "bmkUri" in bookmark.keys():
                 # Use parent name if no bookmarks tags
                 if "tags" not in bookmark.keys() or\
                         not bookmark["tags"]:
                     if "parentName" in bookmark.keys() and\
                             bookmark["parentName"]:
                         bookmark["tags"] = [bookmark["parentName"]]
                     else:
                         bookmark["tags"] = []
                 bookmark_id = El().bookmarks.add(bookmark["title"],
                                                  bookmark["bmkUri"],
                                                  bookmark["id"],
                                                  bookmark["tags"], False)
             else:
                 bookmark["tags"] = []
                 bookmark_id = El().bookmarks.add(bookmark["title"],
                                                  bookmark["id"],
                                                  bookmark["id"],
                                                  bookmark["tags"], False)
         else:
             El().bookmarks.set_title(bookmark_id, bookmark["title"], False)
             if "bmkUri" in bookmark.keys():
                 El().bookmarks.set_uri(bookmark_id, bookmark["bmkUri"],
                                        False)
             elif "children" in bookmark.keys():
                 position = 0
                 for child in bookmark["children"]:
                     bid = El().bookmarks.get_id_by_guid(child)
                     El().bookmarks.set_position(bid, position, False)
                     position += 1
             # Remove previous tags
             current_tags = El().bookmarks.get_tags(bookmark_id)
             for tag in El().bookmarks.get_tags(bookmark_id):
                 if "tags" in bookmark.keys() and\
                         tag not in bookmark["tags"]:
                     tag_id = El().bookmarks.get_tag_id(tag)
                     current_tags.remove(tag)
                     El().bookmarks.del_tag_from(tag_id, bookmark_id, False)
             if "tags" in bookmark.keys():
                 for tag in bookmark["tags"]:
                     # Tag already associated
                     if tag in current_tags:
                         continue
                     tag_id = El().bookmarks.get_tag_id(tag)
                     if tag_id is None:
                         tag_id = El().bookmarks.add_tag(tag, False)
                     El().bookmarks.add_tag_to(tag_id, bookmark_id, False)
         El().bookmarks.set_mtime(bookmark_id, record["modified"], False)
         if "parentName" in bookmark.keys():
             El().bookmarks.set_parent(bookmark_id, bookmark["parentid"],
                                       bookmark["parentName"], False)
     for guid in to_delete:
         if self.__stop:
             raise StopIteration("Cancelled")
         debug("deleting: %s" % guid)
         bookmark_id = El().bookmarks.get_id_by_guid(guid)
         if bookmark_id is not None:
             El().bookmarks.remove(bookmark_id, False)
     El().bookmarks.clean_tags()  # Will commit
     SqlCursor.remove(El().bookmarks)