[gnome-notes] Derive NoteObj and Notebook from GObject



commit 6efaed2522af63e6b0b4326f6722489babb62d8b
Author: Mohammed Sadiq <sadiq sadiqpk org>
Date:   Mon Jan 17 19:36:14 2022 +0530

    Derive NoteObj and Notebook from GObject
    
    And adapt to changes
    
    Also remove biji-item as it's no longer used, the APIs in biji-item
    has been split and added appropriately to BijiNoteObj and BijiNotebook

 src/bjb-application.c                             |  17 +-
 src/bjb-controller.c                              |  44 +--
 src/bjb-list-view-row.c                           |   5 +-
 src/bjb-notebook-row.c                            |   8 +-
 src/bjb-notebook-row.h                            |   4 +-
 src/bjb-notebooks-dialog.c                        |  31 +-
 src/bjb-share.c                                   |   2 +-
 src/bjb-window.c                                  |  40 +--
 src/libbiji/biji-item.c                           | 259 -----------------
 src/libbiji/biji-item.h                           | 104 -------
 src/libbiji/biji-manager.c                        | 125 +++-----
 src/libbiji/biji-manager.h                        |   9 +-
 src/libbiji/biji-note-obj.c                       | 339 +++++++++++++---------
 src/libbiji/biji-note-obj.h                       |  21 +-
 src/libbiji/biji-notebook.c                       | 167 ++++-------
 src/libbiji/biji-notebook.h                       |   9 +-
 src/libbiji/biji-tracker.c                        |  16 +-
 src/libbiji/biji-tracker.h                        |   4 +-
 src/libbiji/deserializer/biji-lazy-deserializer.c |   6 +-
 src/libbiji/libbiji.h                             |   1 -
 src/libbiji/meson.build                           |   1 -
 src/libbiji/provider/biji-import-provider.c       |   2 +-
 src/libbiji/provider/biji-local-note.c            |  27 +-
 src/libbiji/provider/biji-memo-note.c             |  17 +-
 src/libbiji/provider/biji-nextcloud-note.c        |  15 +-
 src/libbiji/serializer/biji-lazy-serializer.c     |   7 +-
 26 files changed, 442 insertions(+), 838 deletions(-)
---
diff --git a/src/bjb-application.c b/src/bjb-application.c
index 595acadc..9823ae85 100644
--- a/src/bjb-application.c
+++ b/src/bjb-application.c
@@ -117,14 +117,13 @@ on_window_activated_cb (BjbWindow      *window,
    * but not the default one - more work is needed here */
   if (self->new_note && g_queue_is_empty (&self->files_to_open))
   {
-    BijiItem *item;
+    BijiNoteObj *note;
 
     self->new_note = FALSE;
-    item = BIJI_ITEM (biji_manager_note_new (
-                        self->manager,
-                        NULL,
-                        bjb_settings_get_default_location (self->settings)));
-    bijiben_new_window_internal (self, BIJI_NOTE_OBJ (item));
+    note = biji_manager_note_new (self->manager,
+                                  NULL,
+                                  bjb_settings_get_default_location (self->settings));
+    bijiben_new_window_internal (self, note);
   }
 }
 
@@ -166,7 +165,7 @@ bijiben_open_path (BjbApplication *self,
                    gchar          *path,
                    BjbWindow      *window)
 {
-  BijiItem *item;
+  gpointer item;
 
   if (!self->is_loaded)
     return FALSE;
@@ -174,9 +173,9 @@ bijiben_open_path (BjbApplication *self,
   item = biji_manager_get_item_at_path (self->manager, path);
 
   if (!window)
-    bijiben_new_window_internal (self, BIJI_NOTE_OBJ (item));
+    bijiben_new_window_internal (self, item);
   else
-    bjb_window_set_note (window, BIJI_NOTE_OBJ (item));
+    bjb_window_set_note (window, item);
 
   return TRUE;
 }
diff --git a/src/bjb-controller.c b/src/bjb-controller.c
index 8ae073f7..8a4b6508 100644
--- a/src/bjb-controller.c
+++ b/src/bjb-controller.c
@@ -179,16 +179,18 @@ bjb_controller_set_property (GObject  *object,
 /* get iter at this item
  * or get iter at first note if item == NULL*/
 static gboolean
-bjb_controller_get_iter (BjbController *self,
-                         BijiItem *item,
-                         GtkTreeIter **iter)
+bjb_controller_get_iter (BjbController  *self,
+                         gpointer        item,
+                         GtkTreeIter   **iter)
 {
   gboolean retval = FALSE;
   gboolean try;
   const gchar *needle = NULL;
 
-  if (item && BIJI_IS_ITEM (item))
-      needle = biji_item_get_uuid (item);
+  if (BIJI_IS_NOTEBOOK (item))
+    needle = biji_notebook_get_uuid (BIJI_NOTEBOOK (item));
+  else if (BIJI_IS_NOTE_OBJ (item))
+    needle = biji_note_obj_get_uuid (BIJI_NOTE_OBJ (item));
 
   try = gtk_tree_model_get_iter_first (self->model, *iter);
 
@@ -225,7 +227,7 @@ bjb_controller_get_iter (BjbController *self,
  * prepend just before this iter */
 static void
 bjb_controller_add_item (BjbController *self,
-                         BijiItem      *item,
+                         gpointer       item,
                          gboolean       prepend,
                          GtkTreeIter   *sibling)
 {
@@ -235,7 +237,7 @@ bjb_controller_add_item (BjbController *self,
   const char      *text       = _("Notebook");
   g_autofree char *color      = NULL;
 
-  g_return_if_fail (BIJI_IS_ITEM (item));
+  g_return_if_fail (BIJI_IS_NOTE_OBJ (item) || BIJI_IS_NOTEBOOK (item));
   store = GTK_LIST_STORE (self->model);
 
   /* Only append notes which are not templates. Currently useless */
@@ -268,10 +270,10 @@ bjb_controller_add_item (BjbController *self,
 
   gtk_list_store_set (store,
                       &iter,
-                      BJB_MODEL_COLUMN_UUID,  biji_item_get_uuid (item),
-                      BJB_MODEL_COLUMN_TITLE, biji_item_get_title (item),
+                      BJB_MODEL_COLUMN_UUID,  biji_note_obj_get_uuid (BIJI_NOTE_OBJ (item)),
+                      BJB_MODEL_COLUMN_TITLE, biji_note_obj_get_title (BIJI_NOTE_OBJ (item)),
                       BJB_MODEL_COLUMN_TEXT,  text,
-                      BJB_MODEL_COLUMN_MTIME, biji_item_get_mtime (item),
+                      BJB_MODEL_COLUMN_MTIME, biji_note_obj_get_mtime (BIJI_NOTE_OBJ (item)),
                       BJB_MODEL_COLUMN_COLOR, color,
                       -1);
 }
@@ -279,7 +281,7 @@ bjb_controller_add_item (BjbController *self,
 /* If the user searches for notes, is the note searched? */
 static void
 bjb_controller_add_item_if_needed (BjbController *self,
-                                   BijiItem      *item,
+                                   gpointer       item,
                                    gboolean       prepend,
                                    GtkTreeIter   *sibling)
 {
@@ -288,7 +290,7 @@ bjb_controller_add_item_if_needed (BjbController *self,
   const gchar *title;
 
   /* No note... */
-  if (!item || !BIJI_IS_ITEM (item))
+  if (!BIJI_IS_NOTEBOOK (item) && !BIJI_IS_NOTE_OBJ (item))
     return;
 
   /* No search - we add the note */
@@ -304,7 +306,10 @@ bjb_controller_add_item_if_needed (BjbController *self,
   /* a search.. we test...*/
   else
   {
-    title = biji_item_get_title (item);
+    if (BIJI_IS_NOTEBOOK (item))
+      title = biji_notebook_get_title (item);
+    else
+      title = biji_note_obj_get_title (item);
 
     /* matching title... */
     if (g_strrstr (title, self->needle) != NULL)
@@ -327,8 +332,8 @@ bjb_controller_add_item_if_needed (BjbController *self,
 static gint
 most_recent_item_first (gconstpointer a, gconstpointer b)
 {
-  const BijiItem *one = a;
-  const BijiItem *other = b;
+  const BijiNoteObj *one = a;
+  const BijiNoteObj *other = b;
   glong result = 0;
 
   /* Always sort notebooks before notes */
@@ -347,8 +352,8 @@ most_recent_item_first (gconstpointer a, gconstpointer b)
    * two notebooks, use the most recent cookbook */
   else
   {
-    result = biji_item_get_mtime ((gpointer) other)
-      - biji_item_get_mtime ((gpointer) one);
+    result = biji_note_obj_get_mtime ((gpointer) other)
+      - biji_note_obj_get_mtime ((gpointer) one);
   }
 
   return result;
@@ -588,10 +593,9 @@ static void
 on_manager_changed (BijiManager            *manager,
                     BijiItemsGroup          group,
                     BijiManagerChangeFlag   flag,
-                    gpointer               *biji_item,
+                    gpointer               *item,
                     BjbController          *self)
 {
-  BijiItem    *item = BIJI_ITEM (biji_item);
   GtkTreeIter iter;
   GtkTreeIter *p_iter = &iter;
 
@@ -872,7 +876,7 @@ bjb_controller_set_notebook (BjbController *self,
   self->notebook = coll;
 
   biji_tracker_get_notes_with_notebook_async (biji_manager_get_tracker (self->manager),
-                                              biji_item_get_title (BIJI_ITEM (coll)),
+                                              biji_notebook_get_title (coll),
                                               on_controller_get_notes_cb,
                                               g_object_ref (self));
 }
diff --git a/src/bjb-list-view-row.c b/src/bjb-list-view-row.c
index e862bb13..91aa74b5 100644
--- a/src/bjb-list-view-row.c
+++ b/src/bjb-list-view-row.c
@@ -49,13 +49,12 @@ on_manager_changed (BijiManager            *manager,
                     gpointer               *biji_item,
                     BjbListViewRow         *self)
 {
-  BijiItem *item = BIJI_ITEM (biji_item);
-  BijiNoteObj *note_obj = BIJI_NOTE_OBJ (item);
+  BijiNoteObj *note_obj = BIJI_NOTE_OBJ (biji_item);
 
   /* Note title/content amended. */
   if (flag == BIJI_MANAGER_NOTE_AMENDED)
     {
-      if (g_strcmp0 (self->uuid, biji_item_get_uuid (item)) == 0)
+      if (g_strcmp0 (self->uuid, biji_note_obj_get_uuid (note_obj)) == 0)
         {
           if (biji_note_obj_get_title (note_obj) != NULL &&
               g_strcmp0 (gtk_label_get_text (self->title),
diff --git a/src/bjb-notebook-row.c b/src/bjb-notebook-row.c
index 31a630da..3cbfaf49 100644
--- a/src/bjb-notebook-row.c
+++ b/src/bjb-notebook-row.c
@@ -38,7 +38,7 @@ struct _BjbNotebookRow
 {
   GtkListBoxRow   parent_instance;
 
-  BijiItem       *item;
+  BijiNotebook   *item;
 
   GtkWidget      *select_image;
   GtkWidget      *tag_label;
@@ -82,7 +82,7 @@ bjb_notebook_row_init (BjbNotebookRow *self)
 }
 
 GtkWidget *
-bjb_notebook_row_new (BijiItem *notebook)
+bjb_notebook_row_new (BijiNotebook *notebook)
 {
   BjbNotebookRow *self;
 
@@ -92,12 +92,12 @@ bjb_notebook_row_new (BijiItem *notebook)
   self->item = g_object_ref (notebook);
 
   gtk_label_set_text (GTK_LABEL (self->tag_label),
-                      biji_item_get_title (notebook));
+                      biji_notebook_get_title (notebook));
 
   return GTK_WIDGET (self);
 }
 
-BijiItem *
+BijiNotebook *
 bjb_notebook_row_get_item (BjbNotebookRow *self)
 {
   g_return_val_if_fail (BJB_IS_NOTEBOOK_ROW (self), NULL);
diff --git a/src/bjb-notebook-row.h b/src/bjb-notebook-row.h
index 553493f6..29022c6d 100644
--- a/src/bjb-notebook-row.h
+++ b/src/bjb-notebook-row.h
@@ -35,8 +35,8 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (BjbNotebookRow, bjb_notebook_row, BJB, NOTEBOOK_ROW, GtkListBoxRow)
 
-GtkWidget    *bjb_notebook_row_new        (BijiItem       *notebook);
-BijiItem     *bjb_notebook_row_get_item   (BjbNotebookRow *self);
+GtkWidget    *bjb_notebook_row_new        (BijiNotebook   *notebook);
+BijiNotebook *bjb_notebook_row_get_item   (BjbNotebookRow *self);
 gboolean      bjb_notebook_row_get_active (BjbNotebookRow *self);
 void          bjb_notebook_row_set_active (BjbNotebookRow *self,
                                            gboolean        is_active);
diff --git a/src/bjb-notebooks-dialog.c b/src/bjb-notebooks-dialog.c
index 51599bbc..6bd91031 100644
--- a/src/bjb-notebooks-dialog.c
+++ b/src/bjb-notebooks-dialog.c
@@ -60,16 +60,16 @@ on_notebook_entry_changed_cb (BjbNotebooksDialog *self)
       return;
     }
 
-  notebooks = biji_manager_get_notebooks (biji_item_get_manager (BIJI_ITEM (self->item)));
+  notebooks = biji_manager_get_notebooks (biji_note_obj_get_manager (self->item));
   n_items = g_list_model_get_n_items (notebooks);
 
   for (guint i = 0; i < n_items; i++)
     {
-      g_autoptr(BijiItem) item = NULL;
+      g_autoptr(BijiNotebook) item = NULL;
 
       item = g_list_model_get_item (notebooks, i);
 
-      if (g_strcmp0 (biji_item_get_title (item), notebook) == 0)
+      if (g_strcmp0 (biji_notebook_get_title (item), notebook) == 0)
         {
           gtk_widget_set_sensitive (self->add_notebook_button, FALSE);
           return;
@@ -85,17 +85,17 @@ on_new_notebook_created_cb (GObject      *object,
                             gpointer      user_data)
 {
   BjbNotebooksDialog *self = user_data;
-  g_autoptr(BijiItem) notebook = NULL;
+  g_autoptr(BijiNotebook) notebook = NULL;
   g_autoptr(GList) rows = NULL;
 
   notebook = biji_tracker_add_notebook_finish (BIJI_TRACKER (object), result, NULL);
-  biji_item_add_notebook (BIJI_ITEM (self->item), notebook, NULL);
+  biji_note_obj_add_notebook (self->item, notebook, NULL);
   gtk_entry_set_text (GTK_ENTRY (self->notebook_entry), "");
 
   rows = gtk_container_get_children (GTK_CONTAINER (self->notebooks_list));
 
   for (GList *row = rows; row; row = row->next)
-    if (notebook == bjb_notebook_row_get_item (row->data))
+    if ((gpointer)notebook == bjb_notebook_row_get_item (row->data))
       {
         bjb_notebook_row_set_active (row->data, TRUE);
         break;
@@ -110,7 +110,7 @@ on_add_notebook_button_clicked_cb (BjbNotebooksDialog *self)
 
   notebook = gtk_entry_get_text (GTK_ENTRY (self->notebook_entry));
 
-  manager = biji_item_get_manager (BIJI_ITEM (self->item));
+  manager = biji_note_obj_get_manager (self->item);
   biji_tracker_add_notebook_async (biji_manager_get_tracker (manager),
                                    notebook, on_new_notebook_created_cb, self);
 }
@@ -120,7 +120,7 @@ on_notebooks_row_activated_cb (BjbNotebooksDialog *self,
                                BjbNotebookRow     *row,
                                GtkListBox         *box)
 {
-  BijiItem *notebook;
+  BijiNotebook *notebook;
 
   g_assert (BJB_IS_NOTEBOOKS_DIALOG (self));
   g_assert (GTK_IS_LIST_BOX (box));
@@ -131,13 +131,13 @@ on_notebooks_row_activated_cb (BjbNotebooksDialog *self,
   notebook = bjb_notebook_row_get_item (row);
 
   BJB_TRACE_MSG ("Notebook '%s' %s",
-                 biji_item_get_title (notebook),
+                 biji_notebook_get_title (notebook),
                  bjb_notebook_row_get_active (row) ? "selected" : "deselected");
 
   if (bjb_notebook_row_get_active (row))
-    biji_item_add_notebook (BIJI_ITEM (self->item), notebook, NULL);
+    biji_note_obj_add_notebook (self->item, notebook, NULL);
   else
-    biji_item_remove_notebook (BIJI_ITEM (self->item), notebook);
+    biji_note_obj_remove_notebook (self->item, notebook);
 }
 
 static GtkWidget *
@@ -149,7 +149,7 @@ notebooks_row_new (BijiNotebook       *notebook,
   g_assert (BJB_IS_NOTEBOOKS_DIALOG (self));
   g_assert (BIJI_IS_NOTEBOOK (notebook));
 
-  row = bjb_notebook_row_new (BIJI_ITEM (notebook));
+  row = bjb_notebook_row_new (notebook);
 
   return row;
 }
@@ -225,7 +225,7 @@ bjb_notebooks_dialog_set_item (BjbNotebooksDialog *self,
   if (!g_set_object (&self->item, note))
     return;
 
-  BJB_DEBUG_MSG ("Setting note '%s'", biji_item_get_title (BIJI_ITEM (note)));
+  BJB_DEBUG_MSG ("Setting note '%s'", biji_note_obj_get_title (note));
 
   notebooks = biji_note_obj_get_notebooks (self->item);
   rows = gtk_container_get_children (GTK_CONTAINER (self->notebooks_list));
@@ -236,12 +236,11 @@ bjb_notebooks_dialog_set_item (BjbNotebooksDialog *self,
 
   for (GList *row = rows; row; row = row->next)
     {
-      BijiItem *notebook;
+      BijiNotebook *notebook;
       gboolean selected;
 
       notebook = bjb_notebook_row_get_item (row->data);
-      selected = biji_item_has_notebook (BIJI_ITEM (self->item),
-                                         (char *)biji_item_get_title (notebook));
+      selected = biji_note_obj_has_notebook (self->item, biji_notebook_get_title (notebook));
       bjb_notebook_row_set_active (row->data, selected);
     }
 }
diff --git a/src/bjb-share.c b/src/bjb-share.c
index e22a61dc..afed7f5a 100644
--- a/src/bjb-share.c
+++ b/src/bjb-share.c
@@ -37,7 +37,7 @@ on_email_note_callback (BijiNoteObj *note)
   GVariantBuilder *arraybuilder;
   GVariant *dict;
 
-  title_mail = mail_str ((gchar*) biji_item_get_title (BIJI_ITEM (note)));
+  title_mail = mail_str (biji_note_obj_get_title (note));
   text_mail = mail_str (biji_note_obj_get_raw_text (note));
 
   proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
diff --git a/src/bjb-window.c b/src/bjb-window.c
index 8e9688d7..201f2584 100644
--- a/src/bjb-window.c
+++ b/src/bjb-window.c
@@ -124,12 +124,12 @@ destroy_note_if_needed (BjbWindow *self)
 }
 
 static void
-on_note_renamed (BijiItem      *note,
-                 BjbWindow *self)
+on_note_renamed (BijiNoteObj *note,
+                 BjbWindow   *self)
 {
   const char *str;
 
-  str = biji_item_get_title (note);
+  str = biji_note_obj_get_title (note);
   if (str == NULL || strlen(str) == 0)
     str = _("Untitled");
   gtk_entry_set_text (GTK_ENTRY (self->title_entry), str);
@@ -144,7 +144,7 @@ on_note_list_row_activated (GtkListBox    *box,
                             gpointer       user_data)
 {
   const char *note_uuid;
-  BijiItem *to_open;
+  gpointer to_open;
   BijiManager *manager;
   BjbWindow *self = BJB_WINDOW (user_data);
   GList *windows;
@@ -170,14 +170,14 @@ on_note_list_row_activated (GtkListBox    *box,
       hdy_leaflet_navigate (self->main_leaflet, HDY_NAVIGATION_DIRECTION_FORWARD);
 
       /* Only open the note if it's not already opened. */
-      if (!biji_note_obj_is_opened (BIJI_NOTE_OBJ (to_open)))
+      if (!biji_note_obj_is_opened (to_open))
         {
-          bjb_window_set_note (self, BIJI_NOTE_OBJ (to_open));
+          bjb_window_set_note (self, to_open);
         }
     }
   else if (to_open && BIJI_IS_NOTEBOOK (to_open))
     {
-      bjb_controller_set_notebook (self->controller, BIJI_NOTEBOOK (to_open));
+      bjb_controller_set_notebook (self->controller, to_open);
     }
 }
 
@@ -467,7 +467,7 @@ on_show_notebook_cb (GSimpleAction *action,
   const char *note_uuid;
   const char *title;
   BjbWindow *self = BJB_WINDOW (user_data);
-  BijiItem *notebook;
+  BijiNotebook *notebook;
   BijiManager *manager;
 
   clear_text_in_search_entry (self);
@@ -482,10 +482,10 @@ on_show_notebook_cb (GSimpleAction *action,
   {
     manager = bjb_window_get_manager (GTK_WIDGET (self));
     notebook = biji_manager_find_notebook (manager, note_uuid);
-    bjb_controller_set_notebook (self->controller, BIJI_NOTEBOOK (notebook));
+    bjb_controller_set_notebook (self->controller, notebook);
 
     /* Update headerbar title. */
-    title = biji_item_get_title (notebook);
+    title = biji_notebook_get_title (notebook);
     gtk_label_set_text (GTK_LABEL (self->filter_label), title);
   }
 
@@ -505,7 +505,7 @@ on_trash_cb (GSimpleAction *action,
 
   /* Delete the note from notebook
    * The deleted note will emit a signal. */
-  biji_item_trash (BIJI_ITEM (note));
+  biji_note_obj_trash (note);
 
   destroy_note_if_needed (self);
   bjb_window_set_view (self, BJB_WINDOW_MAIN_VIEW);
@@ -578,8 +578,8 @@ bjb_window_configure_event (GtkWidget         *widget,
 }
 
 static void
-append_notebook (BijiItem      *notebook,
-                 BjbWindow *self)
+append_notebook (BijiNotebook *notebook,
+                 BjbWindow    *self)
 {
   const char *note_uuid;
   const char *title;
@@ -587,10 +587,10 @@ append_notebook (BijiItem      *notebook,
   GtkStyleContext *context;
   GtkWidget *button;
 
-  note_uuid = biji_item_get_uuid (notebook);
+  note_uuid = biji_notebook_get_uuid (notebook);
   variant = g_variant_new_string (note_uuid);
 
-  title = biji_item_get_title (notebook);
+  title = biji_notebook_get_title (notebook);
   button = gtk_model_button_new ();
   g_object_set (button,
                 "action-name", "win.show-notebook",
@@ -626,7 +626,7 @@ on_display_notebooks_changed (BjbWindow *self)
 
   for (guint i = 0; i < n_items; i++)
     {
-      g_autoptr(BijiItem) item = NULL;
+      g_autoptr(BijiNotebook) item = NULL;
 
       item = g_list_model_get_item (notebooks, i);
       append_notebook (item, self);
@@ -925,8 +925,8 @@ bjb_window_set_view (BjbWindow     *self,
 }
 
 static void
-on_last_updated_cb (BijiItem  *note,
-                    BjbWindow *self)
+on_last_updated_cb (BijiNoteObj *note,
+                    BjbWindow   *self)
 {
   g_autofree char *label = NULL;
   g_autofree char *time_str = NULL;
@@ -944,10 +944,10 @@ on_last_updated_cb (BijiItem  *note,
 static void
 populate_headerbar_for_note_view (BjbWindow *self)
 {
-  on_note_renamed (BIJI_ITEM (self->note), self);
+  on_note_renamed (self->note, self);
   g_signal_connect (self->note, "renamed", G_CALLBACK (on_note_renamed), self);
 
-  on_last_updated_cb (BIJI_ITEM (self->note), self);
+  on_last_updated_cb (self->note, self);
   g_signal_connect (self->note, "changed", G_CALLBACK (on_last_updated_cb), self);
 }
 
diff --git a/src/libbiji/biji-manager.c b/src/libbiji/biji-manager.c
index df6bca16..f0d63cd7 100644
--- a/src/libbiji/biji-manager.c
+++ b/src/libbiji/biji-manager.c
@@ -93,7 +93,7 @@ on_provider_loaded_cb (BijiProvider   *provider,
     case BIJI_LIVING_ITEMS:
       for (l=items; l!=NULL; l=l->next)
       {
-        if (BIJI_IS_ITEM (l->data))
+        if (BIJI_IS_NOTEBOOK (l->data) || BIJI_IS_NOTE_OBJ (l->data))
           biji_manager_add_item (manager, l->data, BIJI_LIVING_ITEMS, FALSE);
       }
       break;
@@ -101,7 +101,7 @@ on_provider_loaded_cb (BijiProvider   *provider,
     case BIJI_ARCHIVED_ITEMS:
       for (l=items; l!= NULL; l=l->next)
       {
-        if (BIJI_IS_ITEM (l->data))
+        if (BIJI_IS_NOTEBOOK (l->data) || BIJI_IS_NOTE_OBJ (l->data))
           biji_manager_add_item (manager, l->data, BIJI_ARCHIVED_ITEMS, FALSE);
       }
       break;
@@ -370,19 +370,20 @@ static gboolean
 title_is_unique (BijiManager *self, gchar *title)
 {
   gboolean is_unique = TRUE;
-  BijiItem *iter;
   GList *items, *l;
 
   items = g_hash_table_get_values (self->items);
 
   for ( l=items ; l != NULL ; l = l->next)
   {
-    if (BIJI_IS_ITEM (l->data) == FALSE)
-      break;
+    const char *item_title = NULL;
 
-    iter = BIJI_ITEM (l->data);
+    if (BIJI_IS_NOTE_OBJ (l->data))
+      item_title = biji_note_obj_get_title (l->data);
+    else if (BIJI_IS_NOTEBOOK (l->data))
+      item_title = biji_notebook_get_title (l->data);
 
-    if (g_strcmp0 (biji_item_get_title (iter), title) == 0)
+    if (g_strcmp0 (item_title, title) == 0)
     {
      is_unique = FALSE;
      break;
@@ -421,10 +422,10 @@ biji_manager_get_unique_title (BijiManager *manager, const gchar *title)
 
 
 void
-biji_manager_notify_changed (BijiManager            *manager,
-                             BijiItemsGroup          group,
-                             BijiManagerChangeFlag   flag,
-                             BijiItem               *item)
+biji_manager_notify_changed (BijiManager           *manager,
+                             BijiItemsGroup         group,
+                             BijiManagerChangeFlag  flag,
+                             gpointer               item)
 {
   g_debug ("manager: notify changed, %i", flag);
   g_signal_emit (manager,
@@ -437,16 +438,17 @@ biji_manager_notify_changed (BijiManager            *manager,
 
 
 static void
-on_item_deleted_cb (BijiItem *item, BijiManager *self)
+on_item_deleted_cb (BijiNoteObj *item,
+                    BijiManager *self)
 {
-  BijiItem        *to_delete;
+  BijiNoteObj     *to_delete;
   const gchar     *path;
   GHashTable      *store;
   BijiItemsGroup   group;
 
 
   to_delete = NULL;
-  path = biji_item_get_uuid (item);
+  path = biji_note_obj_get_uuid (item);
   store = NULL;
 
   if ((to_delete = g_hash_table_lookup (self->archives, path)))
@@ -465,66 +467,36 @@ on_item_deleted_cb (BijiItem *item, BijiManager *self)
 
 
   g_hash_table_remove (store, path);
-  biji_manager_notify_changed (self, group,
-                               BIJI_MANAGER_ITEM_DELETED, item);
+  biji_manager_notify_changed (self, group, BIJI_MANAGER_ITEM_DELETED, item);
 }
 
 
 /* Signal if item is known */
 static void
-on_item_trashed_cb (BijiItem *item, BijiManager *self)
+on_item_trashed_cb (BijiNoteObj *item,
+                    BijiManager *self)
 {
   const gchar *path;
 
-  path = biji_item_get_uuid (item);
+  path = biji_note_obj_get_uuid (item);
   item = g_hash_table_lookup (self->items, path);
 
   if (item == NULL)
     return;
 
   biji_manager_notify_changed (self, BIJI_LIVING_ITEMS, BIJI_MANAGER_ITEM_TRASHED, item);
-  g_hash_table_insert (self->archives,
-                       (gpointer) biji_item_get_uuid (item), item);
+  g_hash_table_insert (self->archives, (gpointer) path, item);
   g_hash_table_remove (self->items, path);
 }
 
 
-/*
- * old uuid : we need this because local provider uses
- * file name as uuid. Now this proves this is not right.
- *
- * save : in order to restore the note inside tracker
- *
- *
- * notify... BIJI_ARCHIVED_ITEM
- * well, works currently : we assume Archives change.
- * but we might double-ping as well
- * or improve the whole logic
- */
-static void
-on_item_restored_cb (BijiItem *item, gchar *old_uuid, BijiManager *manager)
-{
-  const char *path = biji_item_get_uuid (item);
-  if (BIJI_IS_NOTE_OBJ (item))
-    biji_note_obj_save_note (BIJI_NOTE_OBJ (item));
-
-  g_hash_table_insert (manager->items, (gpointer) path, item);
-  g_hash_table_remove (manager->archives, path);
-
-  biji_manager_notify_changed (manager,
-                               BIJI_ARCHIVED_ITEMS,
-                               BIJI_MANAGER_ITEM_DELETED,
-                               item);
-}
-
-
 static void
 manager_on_note_changed_cb (BijiNoteObj *note, BijiManager *manager)
 {
   biji_manager_notify_changed (manager,
                                BIJI_LIVING_ITEMS,
                                BIJI_MANAGER_NOTE_AMENDED,
-                               BIJI_ITEM (note));
+                               note);
 }
 
 static void
@@ -533,7 +505,7 @@ manager_on_item_icon_changed_cb (BijiNoteObj *note, BijiManager *manager)
   biji_manager_notify_changed (manager,
                                BIJI_LIVING_ITEMS,
                                BIJI_MANAGER_ITEM_ICON_CHANGED,
-                               BIJI_ITEM (note));
+                               note);
 }
 
 static int
@@ -543,29 +515,32 @@ compare_notebook (gconstpointer a,
 {
   g_autofree char *up_a = NULL;
   g_autofree char *up_b = NULL;
-  BijiItem *item_a = (BijiItem *) a;
-  BijiItem *item_b = (BijiItem *) b;
+  BijiNotebook *item_a = (BijiNotebook *) a;
+  BijiNotebook *item_b = (BijiNotebook *) b;
 
-  up_a = g_utf8_casefold (biji_item_get_title (item_a), -1);
-  up_b = g_utf8_casefold (biji_item_get_title (item_b), -1);
+  up_a = g_utf8_casefold (biji_notebook_get_title (item_a), -1);
+  up_b = g_utf8_casefold (biji_notebook_get_title (item_b), -1);
 
   return g_strcmp0 (up_a, up_b);
 }
 
 gboolean
-biji_manager_add_item (BijiManager *manager,
-                       BijiItem *item,
-                       BijiItemsGroup group,
-                       gboolean notify)
+biji_manager_add_item (BijiManager    *manager,
+                       gpointer        item,
+                       BijiItemsGroup  group,
+                       gboolean        notify)
 {
   const gchar *uid;
   gboolean retval;
 
   g_return_val_if_fail (BIJI_IS_MANAGER (manager), FALSE);
-  g_return_val_if_fail (BIJI_IS_ITEM (item), FALSE);
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (item) || BIJI_IS_NOTE_OBJ (item), FALSE);
 
   retval = TRUE;
-  uid = biji_item_get_uuid (item);
+  if (BIJI_IS_NOTEBOOK (item))
+    uid = biji_notebook_get_uuid (BIJI_NOTEBOOK (item));
+  else
+    uid = biji_note_obj_get_uuid (BIJI_NOTE_OBJ (item));
 
   /* Check if item is not already there */
   if (uid != NULL)
@@ -588,22 +563,15 @@ biji_manager_add_item (BijiManager *manager,
   {
     /* Add the item*/
     if (group == BIJI_LIVING_ITEMS)
-      g_hash_table_insert (manager->items,
-                           (gpointer) biji_item_get_uuid (item), item);
+      g_hash_table_insert (manager->items, (gpointer) uid, item);
     else if (group == BIJI_ARCHIVED_ITEMS)
-      g_hash_table_insert (manager->archives,
-                           (gpointer) biji_item_get_uuid (item), item);
+      g_hash_table_insert (manager->archives, (gpointer) uid, item);
 
     /* Connect */
-    g_signal_connect (item, "deleted",
-                      G_CALLBACK (on_item_deleted_cb), manager);
-    g_signal_connect (item, "trashed",
-                      G_CALLBACK (on_item_trashed_cb), manager);
-    g_signal_connect (item, "restored",
-                      G_CALLBACK (on_item_restored_cb), manager);
-
     if (BIJI_IS_NOTE_OBJ (item))
     {
+      g_signal_connect (item, "deleted", G_CALLBACK (on_item_deleted_cb), manager);
+      g_signal_connect (item, "trashed", G_CALLBACK (on_item_trashed_cb), manager);
       g_signal_connect (item, "changed", G_CALLBACK (manager_on_note_changed_cb), manager);
       g_signal_connect (item, "renamed", G_CALLBACK (manager_on_note_changed_cb), manager);
       g_signal_connect (item, "color-changed", G_CALLBACK (manager_on_item_icon_changed_cb), manager);
@@ -724,7 +692,7 @@ biji_manager_get_notebooks (BijiManager *self)
   return G_LIST_MODEL (self->notebooks);
 }
 
-BijiItem *
+BijiNotebook *
 biji_manager_find_notebook (BijiManager *self,
                             const char  *uuid)
 {
@@ -739,12 +707,12 @@ biji_manager_find_notebook (BijiManager *self,
 
   for (guint i = 0; i < n_items; i++)
     {
-      g_autoptr(BijiItem) notebook = NULL;
+      g_autoptr(BijiNotebook) notebook = NULL;
       const char *item_uuid;
 
       notebook = g_list_model_get_item (notebooks, i);
 
-      item_uuid = biji_item_get_uuid (notebook);
+      item_uuid = biji_notebook_get_uuid (notebook);
 
       if (g_strcmp0 (uuid, item_uuid) == 0)
         return notebook;
@@ -753,10 +721,11 @@ biji_manager_find_notebook (BijiManager *self,
   return NULL;
 }
 
-BijiItem *
+gpointer
 biji_manager_get_item_at_path (BijiManager *self, const gchar *path)
 {
-  BijiItem *retval;
+  gpointer retval;
+
   g_return_val_if_fail (BIJI_IS_MANAGER (self), NULL);
 
   if (path == NULL)
@@ -941,7 +910,7 @@ biji_manager_note_new            (BijiManager  *self,
   retval = BIJI_PROVIDER_GET_CLASS (provider)->create_new_note (provider, str);
 
   if (retval)
-    biji_manager_add_item (self, BIJI_ITEM (retval), BIJI_LIVING_ITEMS, TRUE);
+    biji_manager_add_item (self, retval, BIJI_LIVING_ITEMS, TRUE);
 
   return retval;
 }
diff --git a/src/libbiji/biji-manager.h b/src/libbiji/biji-manager.h
index d84e5d00..71cb10f7 100644
--- a/src/libbiji/biji-manager.h
+++ b/src/libbiji/biji-manager.h
@@ -5,6 +5,7 @@
 
 #include "biji-info-set.h"
 #include "biji-note-obj.h"
+#include "biji-notebook.h"
 
 
 #include <libedataserver/libedataserver.h> /* ESourceRegistry */
@@ -72,7 +73,7 @@ gchar           *biji_manager_get_unique_title      (BijiManager *manager,
 
 
 gboolean         biji_manager_add_item                (BijiManager *manager,
-                                                       BijiItem *item,
+                                                       gpointer     item,
                                                        BijiItemsGroup group,
                                                        gboolean notify);
 
@@ -80,10 +81,10 @@ gboolean         biji_manager_add_item                (BijiManager *manager,
 void             biji_manager_notify_changed        (BijiManager           *manager,
                                                      BijiItemsGroup         group,
                                                      BijiManagerChangeFlag  flag,
-                                                     BijiItem              *item);
+                                                     gpointer               item);
 
 
-BijiItem        *biji_manager_get_item_at_path      (BijiManager *manager,
+gpointer         biji_manager_get_item_at_path      (BijiManager *manager,
                                                      const gchar *path);
 
 /* Get all items, either notes or notebooks
@@ -93,7 +94,7 @@ BijiItem        *biji_manager_get_item_at_path      (BijiManager *manager,
 GList           *biji_manager_get_items             (BijiManager         *manager,
                                                      BijiItemsGroup       group);
 GListModel      *biji_manager_get_notebooks         (BijiManager         *self);
-BijiItem        *biji_manager_find_notebook         (BijiManager         *self,
+BijiNotebook    *biji_manager_find_notebook         (BijiManager         *self,
                                                      const char          *uuid);
 
 BijiNoteObj     *biji_manager_note_new              (BijiManager *manager,
diff --git a/src/libbiji/biji-note-obj.c b/src/libbiji/biji-note-obj.c
index f3d66747..fac49f93 100644
--- a/src/libbiji/biji-note-obj.c
+++ b/src/libbiji/biji-note-obj.c
@@ -35,6 +35,7 @@ typedef struct
   gint64                 last_metadata_change_date;
   GdkRGBA               *color; // Not yet in Tracker
 
+  BijiManager           *manager;
   /* Editing use the same widget
    * for all notes provider. */
   BijiWebkitEditor      *editor;
@@ -60,6 +61,7 @@ enum {
   PROP_TITLE,
   PROP_MTIME,
   PROP_CONTENT,
+  PROP_MANAGER,
   BIJI_OBJ_PROPERTIES
 };
 
@@ -67,6 +69,9 @@ static GParamSpec *properties[BIJI_OBJ_PROPERTIES] = { NULL, };
 
 /* Signals. Do not interfere with biji-item parent class. */
 enum {
+  NOTE_RESTORED,
+  NOTE_DELETED,
+  NOTE_TRASHED,
   NOTE_RENAMED,
   NOTE_CHANGED,
   NOTE_COLOR_CHANGED,
@@ -75,7 +80,7 @@ enum {
 
 static guint biji_obj_signals [BIJI_OBJ_SIGNALS] = { 0 };
 
-G_DEFINE_TYPE_WITH_PRIVATE (BijiNoteObj, biji_note_obj, BIJI_TYPE_ITEM)
+G_DEFINE_TYPE_WITH_PRIVATE (BijiNoteObj, biji_note_obj, G_TYPE_OBJECT)
 
 static void
 on_save_timeout (BijiNoteObj *self)
@@ -98,6 +103,18 @@ on_save_timeout (BijiNoteObj *self)
   g_object_unref (self);
 }
 
+static void
+on_note_obj_add_notebook_cb (GObject      *object,
+                             GAsyncResult *result,
+                             gpointer      user_data)
+{
+  g_autoptr(BijiNotebook) notebook = user_data;
+
+  g_assert (BIJI_IS_NOTEBOOK (notebook));
+
+  biji_notebook_refresh (notebook);
+}
+
 static void
 biji_note_obj_init (BijiNoteObj *self)
 {
@@ -159,6 +176,9 @@ biji_note_obj_set_property (GObject      *object,
       biji_note_obj_set_raw_text (self, g_value_get_string (value));
       g_object_notify_by_pspec (object, properties[PROP_CONTENT]);
       break;
+    case PROP_MANAGER:
+      priv->manager = g_value_get_object (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -194,20 +214,6 @@ biji_note_obj_get_property (GObject    *object,
     }
 }
 
-/* First cancel timeout
- * this func is most probably stupid it might exists (move file) */
-static gboolean
-trash (BijiItem *item)
-{
-  BijiNoteObj        *self      = BIJI_NOTE_OBJ (item);
-  BijiNoteObjPrivate *priv      = biji_note_obj_get_instance_private (self);
-
-  priv->needs_save = FALSE;
-  biji_timeout_cancel (priv->timeout);
-
-  return BIJI_NOTE_OBJ_GET_CLASS (self)->archive (self);
-}
-
 gboolean
 biji_note_obj_is_trashed (BijiNoteObj *self)
 {
@@ -222,14 +228,6 @@ biji_note_obj_get_path (BijiNoteObj *self)
   return priv->path;
 }
 
-static const char *
-get_path (BijiItem *item)
-{
-  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (item), NULL);
-
-  return biji_note_obj_get_path (BIJI_NOTE_OBJ (item));
-}
-
 void
 biji_note_obj_set_path (BijiNoteObj *self,
                         const char  *path)
@@ -252,21 +250,13 @@ biji_note_obj_get_title (BijiNoteObj *self)
   return priv->title;
 }
 
-static const char *
-get_title (BijiItem *item)
-{
-  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (item), NULL);
-
-  return biji_note_obj_get_title (BIJI_NOTE_OBJ (item));
-}
-
 /* If already a title, then note is renamed */
 gboolean
 biji_note_obj_set_title (BijiNoteObj *self,
                          const char  *proposed_title)
 {
   BijiNoteObjPrivate *priv    = biji_note_obj_get_instance_private (self);
-  BijiManager        *manager = biji_item_get_manager (BIJI_ITEM (self));
+  BijiManager        *manager = priv->manager;
   g_autofree char    *title   = NULL;
 
   if (g_strcmp0 (proposed_title, priv->title) == 0)
@@ -285,6 +275,20 @@ biji_note_obj_set_title (BijiNoteObj *self,
   return TRUE;
 }
 
+const char *
+biji_note_obj_get_uuid (BijiNoteObj *self)
+{
+  return biji_note_obj_get_path (self);
+}
+
+gint64
+biji_note_obj_get_mtime (BijiNoteObj *self)
+{
+  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
+
+  return priv->mtime;
+}
+
 gboolean
 biji_note_obj_set_mtime (BijiNoteObj *self,
                          gint64       time)
@@ -298,21 +302,130 @@ biji_note_obj_set_mtime (BijiNoteObj *self,
   return TRUE;
 }
 
-static gint64
-get_mtime (BijiItem *item)
+gpointer
+biji_note_obj_get_manager (BijiNoteObj *self)
 {
-  BijiNoteObj        *self = BIJI_NOTE_OBJ (item);
   BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
 
-  return priv->mtime;
+  return priv->manager;
+}
+
+gboolean
+biji_note_obj_trash (BijiNoteObj *self)
+{
+  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
+  gboolean retval;
+
+  priv->needs_save = FALSE;
+  biji_timeout_cancel (priv->timeout);
+
+  retval = BIJI_NOTE_OBJ_GET_CLASS (self)->archive (self);
+
+  if (retval)
+    g_signal_emit_by_name (self, "trashed", NULL);
+
+  return retval;
+}
+
+gboolean
+biji_note_obj_restore (BijiNoteObj *self)
+{
+  g_autofree char *old_uuid = NULL;
+  gboolean retval;
+
+  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (self), FALSE);
+
+  retval = BIJI_NOTE_OBJ_GET_CLASS (self)->restore (self, &old_uuid);
+  if (retval)
+    g_signal_emit_by_name (self, "restored", old_uuid, NULL);
+
+  return retval;
+}
+
+gboolean
+biji_note_obj_delete (BijiNoteObj *self)
+{
+  gboolean retval;
+
+  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (self), FALSE);
+
+  retval = BIJI_NOTE_OBJ_GET_CLASS (self)->delete (self);
+  if (retval)
+    g_signal_emit_by_name (self, "deleted", NULL);
+
+  return retval;
+}
+
+gboolean
+biji_note_obj_has_notebook (BijiNoteObj *self,
+                            const char  *label)
+{
+  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
+
+  if (g_hash_table_lookup (priv->labels, label))
+    return TRUE;
+
+  return FALSE;
+}
+
+gboolean
+biji_note_obj_add_notebook (BijiNoteObj *self,
+                            gpointer     notebook,
+                            const char  *title)
+{
+  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
+  const char *label = title;
+
+  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (self), FALSE);
+
+  if (BIJI_IS_NOTEBOOK (notebook))
+    label = biji_notebook_get_title (notebook);
+
+  if (biji_note_obj_has_notebook (self, label))
+    return FALSE;
+
+  g_hash_table_add (priv->labels, g_strdup (label));
+
+  if (BIJI_IS_NOTEBOOK (notebook))
+    {
+      biji_tracker_add_note_to_notebook_async (biji_manager_get_tracker (priv->manager),
+                                               self, label, on_note_obj_add_notebook_cb,
+                                               g_object_ref (notebook));
+
+      biji_note_obj_set_last_metadata_change_date (self, g_get_real_time () / G_USEC_PER_SEC);
+      biji_note_obj_save_note (self);
+    }
+
+  return TRUE;
+}
+
+gboolean
+biji_note_obj_remove_notebook (BijiNoteObj *self,
+                               gpointer     notebook)
+{
+  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (self);
+
+  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (self), FALSE);
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (notebook), FALSE);
+
+  if (g_hash_table_remove (priv->labels, biji_notebook_get_title (notebook)))
+    {
+      biji_tracker_remove_note_notebook_async (biji_manager_get_tracker (priv->manager),
+                                               self, notebook, on_note_obj_add_notebook_cb,
+                                               g_object_ref (notebook));
+
+      biji_note_obj_set_last_metadata_change_date (self, g_get_real_time () / G_USEC_PER_SEC);
+      biji_note_obj_save_note (self);
+      return TRUE;
+    }
+
+  return FALSE;
 }
 
 char *
 biji_note_obj_get_last_change_date_string (BijiNoteObj *self)
 {
-  BijiItem *item = BIJI_ITEM (self);
-
-  return bjb_utils_get_human_time (get_mtime (item));
+  return bjb_utils_get_human_time (biji_note_obj_get_mtime (self));
 }
 
 gint64
@@ -415,97 +528,6 @@ biji_note_obj_get_notebooks (BijiNoteObj *self)
   return g_hash_table_get_values (priv->labels);
 }
 
-static gboolean
-has_notebook (BijiItem *item,
-              char     *label)
-{
-  BijiNoteObjPrivate *priv = biji_note_obj_get_instance_private (BIJI_NOTE_OBJ (item));
-
-  if (g_hash_table_lookup (priv->labels, label))
-    return TRUE;
-
-  return FALSE;
-}
-
-static void
-on_note_obj_add_notebook_cb (GObject      *object,
-                             GAsyncResult *result,
-                             gpointer      user_data)
-{
-  g_autoptr(BijiNotebook) notebook = user_data;
-
-  g_assert (BIJI_IS_NOTEBOOK (notebook));
-
-  biji_notebook_refresh (notebook);
-}
-
-static gboolean
-add_notebook (BijiItem *item,
-              BijiItem *notebook,
-              char     *title)
-{
-  BijiNoteObj        *self;
-  BijiNoteObjPrivate *priv;
-  char               *label = title;
-
-  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (item), FALSE);
-  self = BIJI_NOTE_OBJ (item);
-  priv = biji_note_obj_get_instance_private (self);
-
-  if (BIJI_IS_NOTEBOOK (notebook))
-    label = (char*) biji_item_get_title (notebook);
-
-  if (has_notebook (item, label))
-    return FALSE;
-
-  g_hash_table_add (priv->labels, g_strdup (label));
-
-  if (BIJI_IS_NOTEBOOK (notebook))
-    {
-      BijiManager *manager;
-
-      manager = biji_item_get_manager (item);
-      biji_tracker_add_note_to_notebook_async (biji_manager_get_tracker (manager),
-                                               self, label, on_note_obj_add_notebook_cb,
-                                               g_object_ref (notebook));
-
-      biji_note_obj_set_last_metadata_change_date (self, g_get_real_time () / G_USEC_PER_SEC);
-      biji_note_obj_save_note (self);
-    }
-
-  return TRUE;
-}
-
-static gboolean
-remove_notebook (BijiItem *item,
-                 BijiItem *notebook)
-{
-  BijiNoteObj        *self;
-  BijiNoteObjPrivate *priv;
-
-  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (item), FALSE);
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (notebook), FALSE);
-
-  self = BIJI_NOTE_OBJ (item);
-  priv = biji_note_obj_get_instance_private (self);
-
-  if (g_hash_table_remove (priv->labels, biji_item_get_title (notebook)))
-    {
-      BijiManager *manager;
-
-      manager = biji_item_get_manager (item);
-      biji_tracker_remove_note_notebook_async (biji_manager_get_tracker (manager),
-                                               self, notebook, on_note_obj_add_notebook_cb,
-                                               g_object_ref (notebook));
-
-      biji_note_obj_set_last_metadata_change_date (self, g_get_real_time () / G_USEC_PER_SEC);
-      biji_note_obj_save_note (self);
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
 gboolean
 biji_note_obj_is_template (BijiNoteObj *self)
 {
@@ -674,13 +696,11 @@ static void
 on_biji_note_obj_closed_cb (BijiNoteObj *self)
 {
   BijiNoteObjPrivate *priv;
-  BijiItem *item;
   const char *title;
 
   priv = biji_note_obj_get_instance_private (self);
-  item = BIJI_ITEM (self);
   priv->editor = NULL;
-  title = biji_item_get_title (item);
+  title = biji_note_obj_get_title (self);
 
   /*
    * Delete (not _trash_ if note is totaly blank
@@ -689,7 +709,7 @@ on_biji_note_obj_closed_cb (BijiNoteObj *self)
   if (biji_note_obj_get_raw_text (self) == NULL)
     {
       priv->needs_save = FALSE;
-      biji_item_delete (item);
+      biji_note_obj_delete (self);
     }
 
   /* If the note has no title */
@@ -755,7 +775,6 @@ static void
 biji_note_obj_class_init (BijiNoteObjClass *klass)
 {
   GObjectClass  *object_class = G_OBJECT_CLASS  (klass);
-  BijiItemClass *item_class   = BIJI_ITEM_CLASS (klass);
 
   object_class->finalize     = biji_note_obj_finalize;
   object_class->get_property = biji_note_obj_get_property;
@@ -790,8 +809,48 @@ biji_note_obj_class_init (BijiNoteObjClass *klass)
                         NULL,
                         G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 
+  properties[PROP_MANAGER] =
+    g_param_spec_object("manager",
+                        "Note Manager",
+                        "The Note Manager controlling this item",
+                        BIJI_TYPE_MANAGER,
+                        G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
+
   g_object_class_install_properties (object_class, BIJI_OBJ_PROPERTIES, properties);
 
+  biji_obj_signals[NOTE_DELETED] =
+    g_signal_new ("deleted",
+                  G_OBJECT_CLASS_TYPE (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL,
+                  NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE,
+                  0);
+
+  biji_obj_signals[NOTE_TRASHED] =
+    g_signal_new ("trashed",
+                  G_OBJECT_CLASS_TYPE (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL,
+                  NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE,
+                  0);
+
+  biji_obj_signals[NOTE_RESTORED] =
+    g_signal_new ("restored",
+                  G_OBJECT_CLASS_TYPE (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL,
+                  NULL,
+                  g_cclosure_marshal_VOID__VOID,
+                  G_TYPE_NONE,
+                  0);
+
   biji_obj_signals[NOTE_RENAMED] =
     g_signal_new ("renamed",
                   G_OBJECT_CLASS_TYPE (klass),
@@ -824,15 +883,5 @@ biji_note_obj_class_init (BijiNoteObjClass *klass)
                   g_cclosure_marshal_VOID__VOID,
                   G_TYPE_NONE,
                   0);
-
-  /* Interface
-   * is_collectable is implemented at higher level, eg local_note */
-  item_class->get_title       = get_title;
-  item_class->get_uuid        = get_path;
-  item_class->get_mtime       = get_mtime;
-  item_class->trash           = trash;
-  item_class->has_notebook    = has_notebook;
-  item_class->add_notebook    = add_notebook;
-  item_class->remove_notebook = remove_notebook;
 }
 
diff --git a/src/libbiji/biji-note-obj.h b/src/libbiji/biji-note-obj.h
index 28e44640..de1c90dc 100644
--- a/src/libbiji/biji-note-obj.h
+++ b/src/libbiji/biji-note-obj.h
@@ -21,7 +21,6 @@
 #include <gtk/gtk.h>
 
 #include "biji-info-set.h"
-#include "biji-item.h"
 
 G_BEGIN_DECLS
 
@@ -43,11 +42,11 @@ typedef enum
 
 #define BIJI_TYPE_NOTE_OBJ (biji_note_obj_get_type ())
 
-G_DECLARE_DERIVABLE_TYPE (BijiNoteObj, biji_note_obj, BIJI, NOTE_OBJ, BijiItem)
+G_DECLARE_DERIVABLE_TYPE (BijiNoteObj, biji_note_obj, BIJI, NOTE_OBJ, GObject)
 
 struct _BijiNoteObjClass
 {
-  BijiItemClass parent_class;
+  GObjectClass  parent_class;
 
   char         *(*get_basename)      (BijiNoteObj *note);
 
@@ -90,10 +89,26 @@ struct _BijiNoteObjClass
    * - bold, italic, srike
    */
   gboolean      (*can_format)        (BijiNoteObj *note);
+  gboolean      (*restore)           (BijiNoteObj *note,
+                                      char       **old_uuid);
+  gboolean      (*delete)            (BijiNoteObj *note);
 };
 
+const char      *biji_note_obj_get_uuid                      (BijiNoteObj *self);
+gint64           biji_note_obj_get_mtime                     (BijiNoteObj *self);
 gboolean         biji_note_obj_set_mtime                     (BijiNoteObj *self,
                                                               gint64       time);
+gpointer         biji_note_obj_get_manager                   (BijiNoteObj *self);
+gboolean         biji_note_obj_trash                         (BijiNoteObj *self);
+gboolean         biji_note_obj_restore                       (BijiNoteObj *self);
+gboolean         biji_note_obj_delete                        (BijiNoteObj *self);
+gboolean         biji_note_obj_has_notebook                  (BijiNoteObj *self,
+                                                              const char  *label);
+gboolean         biji_note_obj_add_notebook                  (BijiNoteObj  *self,
+                                                              gpointer      notebook,
+                                                              const char   *title);
+gboolean         biji_note_obj_remove_notebook               (BijiNoteObj  *self,
+                                                              gpointer      notebook);
 
 char            *biji_note_obj_get_last_change_date_string   (BijiNoteObj *self);
 
diff --git a/src/libbiji/biji-notebook.c b/src/libbiji/biji-notebook.c
index 707c7c4e..a8fc5224 100644
--- a/src/libbiji/biji-notebook.c
+++ b/src/libbiji/biji-notebook.c
@@ -41,18 +41,19 @@ static void on_collected_item_change (BijiNotebook *self);
 
 struct _BijiNotebook
 {
-  BijiItem         parent_instance;
+  GObject          parent_instance;
 
   gchar           *urn;
   gchar           *name;
   gint64           mtime;
 
+  BijiManager     *manager;
   GList           *collected_items;
 };
 
 static void biji_notebook_finalize (GObject *object);
 
-G_DEFINE_TYPE (BijiNotebook, biji_notebook, BIJI_TYPE_ITEM)
+G_DEFINE_TYPE (BijiNotebook, biji_notebook, G_TYPE_OBJECT)
 
 /* Properties */
 enum {
@@ -60,104 +61,13 @@ enum {
   PROP_URN,
   PROP_NAME,
   PROP_MTIME,
+  PROP_MANAGER,
   BIJI_NOTEBOOK_PROPERTIES
 };
 
 
 static GParamSpec *properties[BIJI_NOTEBOOK_PROPERTIES] = { NULL, };
 
-static const gchar *
-biji_notebook_get_title (BijiItem *coll)
-{
-  BijiNotebook *self;
-
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (coll), NULL);
-  self = BIJI_NOTEBOOK (coll);
-
-  return self->name;
-}
-
-
-static const gchar *
-biji_notebook_get_uuid (BijiItem *coll)
-{
-  BijiNotebook *self;
-
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (coll), NULL);
-  self = BIJI_NOTEBOOK (coll);
-
-  return self->urn;
-}
-
-static gint64
-biji_notebook_get_mtime (BijiItem *coll)
-{
-  BijiNotebook *self;
-
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (coll), 0);
-  self = BIJI_NOTEBOOK (coll);
-
-  return self->mtime;
-}
-
-static gboolean
-biji_notebook_trash (BijiItem *item)
-{
-  BijiNotebook *self;
-  BijiManager *manager;
-
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (item), FALSE);
-
-  self = BIJI_NOTEBOOK (item);
-  manager = biji_item_get_manager (item);
-
-  biji_tracker_remove_notebook (biji_manager_get_tracker (manager), self->urn);
-
-  return TRUE;
-}
-
-static gboolean
-biji_notebook_delete (BijiItem *item)
-{
-  g_return_val_if_fail (BIJI_IS_NOTEBOOK (item), FALSE);
-
-  g_warning ("Notebooks delete is not yet implemented");
-  return FALSE;
-}
-
-static gboolean
-biji_notebook_restore (BijiItem  *item,
-                       gchar    **old_uuid)
-{
-  g_warning ("Notebooks restore is not yet implemented");
-  return FALSE;
-}
-
-
-static gboolean
-biji_notebook_has_notebook (BijiItem *item, gchar *notebook)
-{
-  //todo
-  return FALSE;
-}
-
-
-static gboolean
-biji_notebook_add_notebook (BijiItem *item, BijiItem *coll, gchar *title)
-{
-  g_warning ("biji notebook add notebook is not implemented.");
-  return FALSE;
-}
-
-
-static gboolean
-biji_notebook_remove_notebook (BijiItem *item, BijiItem *notebook)
-{
-  g_warning ("biji notebook remove notebook is not implemented.");
-  return FALSE;
-}
-
-
 static void
 biji_notebook_set_property (GObject      *object,
                               guint         property_id,
@@ -178,6 +88,9 @@ biji_notebook_set_property (GObject      *object,
       case PROP_MTIME:
         self->mtime = g_value_get_int64 (value);
         break;
+      case PROP_MANAGER:
+        self->manager = g_value_get_object (value);
+        break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
         break;
@@ -241,7 +154,7 @@ on_collected_item_change (BijiNotebook *self)
   BijiManager *manager;
   GList *l;
 
-  manager = biji_item_get_manager (BIJI_ITEM (self));
+  manager = self->manager;
 
   /* Disconnected any handler */
   for (l = self->collected_items; l != NULL; l = l->next)
@@ -269,7 +182,7 @@ biji_notebook_constructed (GObject *obj)
   BijiManager *manager;
 
 
-  manager = biji_item_get_manager (BIJI_ITEM (obj));
+  manager = self->manager;
 
   biji_tracker_get_notes_with_notebook_async (biji_manager_get_tracker (manager),
                                               self->name,
@@ -281,10 +194,8 @@ static void
 biji_notebook_class_init (BijiNotebookClass *klass)
 {
   GObjectClass *g_object_class;
-  BijiItemClass*  item_class;
 
   g_object_class = G_OBJECT_CLASS (klass);
-  item_class = BIJI_ITEM_CLASS (klass);
 
   g_object_class->constructed = biji_notebook_constructed;
   g_object_class->finalize = biji_notebook_finalize;
@@ -312,18 +223,14 @@ biji_notebook_class_init (BijiNotebookClass *klass)
                          G_MININT64, G_MAXINT64, 0,
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
 
-  g_object_class_install_properties (g_object_class, BIJI_NOTEBOOK_PROPERTIES, properties);
+  properties[PROP_MANAGER] =
+    g_param_spec_object("manager",
+                        "Note Manager",
+                        "The Note Manager controlling this item",
+                        BIJI_TYPE_MANAGER,
+                        G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
 
-  /* Interface */
-  item_class->get_title = biji_notebook_get_title;
-  item_class->get_uuid = biji_notebook_get_uuid;
-  item_class->get_mtime = biji_notebook_get_mtime;
-  item_class->trash = biji_notebook_trash;
-  item_class->delete = biji_notebook_delete;
-  item_class->restore = biji_notebook_restore;
-  item_class->has_notebook = biji_notebook_has_notebook;
-  item_class->add_notebook = biji_notebook_add_notebook;
-  item_class->remove_notebook = biji_notebook_remove_notebook;
+  g_object_class_install_properties (g_object_class, BIJI_NOTEBOOK_PROPERTIES, properties);
 }
 
 
@@ -357,3 +264,45 @@ biji_notebook_new (GObject *manager, gchar *urn, gchar *name, gint64 mtime)
                        "mtime",     mtime,
                        NULL);
 }
+
+gint64
+biji_notebook_get_mtime (BijiNotebook *self)
+{
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (self), 0);
+
+  return self->mtime;
+}
+
+gpointer
+biji_notebook_manager (BijiNotebook *self)
+{
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (self), NULL);
+
+  return self->manager;
+}
+
+const char *
+biji_notebook_get_title (BijiNotebook *self)
+{
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (self), NULL);
+
+  return self->name;
+}
+
+const char *
+biji_notebook_get_uuid (BijiNotebook *self)
+{
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (self), NULL);
+
+  return self->urn;
+}
+
+gboolean
+biji_notebook_trash (BijiNotebook *self)
+{
+  g_return_val_if_fail (BIJI_IS_NOTEBOOK (self), FALSE);
+
+  biji_tracker_remove_notebook (biji_manager_get_tracker (self->manager), self->urn);
+
+  return TRUE;
+}
diff --git a/src/libbiji/biji-notebook.h b/src/libbiji/biji-notebook.h
index 8a1f2e81..ad41ee67 100644
--- a/src/libbiji/biji-notebook.h
+++ b/src/libbiji/biji-notebook.h
@@ -20,18 +20,23 @@
 
 #pragma once
 
-#include "biji-item.h"
+#include <glib-object.h>
 
 G_BEGIN_DECLS
 
 #define BIJI_TYPE_NOTEBOOK (biji_notebook_get_type ())
 
-G_DECLARE_FINAL_TYPE (BijiNotebook, biji_notebook, BIJI, NOTEBOOK, BijiItem)
+G_DECLARE_FINAL_TYPE (BijiNotebook, biji_notebook, BIJI, NOTEBOOK, GObject)
 
 /* Exiting coll in tracker : provide urn & iso8601 date
  * To create a brand new notebook in tracker rather gobjectize existing one,
  * see biji_create_new_notebook_async */
 BijiNotebook * biji_notebook_new (GObject *manager, gchar *urn, gchar *name, gint64 mtime);
+gint64         biji_notebook_get_mtime  (BijiNotebook *self);
+gpointer       biji_notebook_manager    (BijiNotebook *self);
+const char    *biji_notebook_get_title  (BijiNotebook *self);
+const char    *biji_notebook_get_uuid   (BijiNotebook *self);
+gboolean       biji_notebook_trash      (BijiNotebook *self);
 
 
 /* Watching for tracker would be best. Right now manually called. */
diff --git a/src/libbiji/biji-tracker.c b/src/libbiji/biji-tracker.c
index 6a2d5b4d..21e92abf 100644
--- a/src/libbiji/biji-tracker.c
+++ b/src/libbiji/biji-tracker.c
@@ -115,7 +115,7 @@ on_add_notebook_cb (GObject      *object,
       notebook = biji_notebook_new (G_OBJECT (self->manager),
                                     urn, notebook_str,
                                     g_get_real_time () / G_USEC_PER_SEC);
-      biji_manager_add_item (self->manager, BIJI_ITEM (notebook), BIJI_LIVING_ITEMS, true);
+      biji_manager_add_item (self->manager, notebook, BIJI_LIVING_ITEMS, true);
     }
 
   g_task_return_pointer (task, notebook, NULL);
@@ -249,7 +249,7 @@ on_get_list_async_cb (GObject      *object,
 
   if (cursor)
     {
-      BijiItem *item = NULL;
+      gpointer item = NULL;
       const char *full_path;
       char *path;
 
@@ -475,7 +475,7 @@ biji_tracker_add_notebook_async (BijiTracker         *self,
                                                 on_add_notebook_cb, task);
 }
 
-BijiItem *
+BijiNotebook *
 biji_tracker_add_notebook_finish (BijiTracker  *self,
                                   GAsyncResult *result,
                                   GError       **error)
@@ -591,7 +591,7 @@ biji_tracker_get_notebooks_finish (BijiTracker   *self,
 void
 biji_tracker_remove_note_notebook_async (BijiTracker         *self,
                                          BijiNoteObj         *note,
-                                         BijiItem            *notebook,
+                                         BijiNotebook        *notebook,
                                          GAsyncReadyCallback  callback,
                                          gpointer             user_data)
 {
@@ -604,9 +604,9 @@ biji_tracker_remove_note_notebook_async (BijiTracker         *self,
   g_return_if_fail (BIJI_IS_NOTEBOOK (notebook));
   g_return_if_fail (callback);
 
-  url = g_strdup_printf ("file://%s", biji_item_get_uuid (BIJI_ITEM (note)));
+  url = g_strdup_printf ("file://%s", biji_note_obj_get_uuid (note));
   query = g_strdup_printf ("DELETE {'%s' nie:isPartOf '%s'}",
-                           biji_item_get_uuid (notebook), url);
+                           biji_notebook_get_uuid (notebook), url);
 
   task = g_task_new (self, NULL, callback, user_data);
 
@@ -645,7 +645,7 @@ biji_tracker_add_note_to_notebook_async (BijiTracker         *self,
   g_return_if_fail (notebook && *notebook);
   g_return_if_fail (callback);
 
-  url = g_strdup_printf ("file://%s", biji_item_get_uuid (BIJI_ITEM (note)));
+  url = g_strdup_printf ("file://%s", biji_note_obj_get_uuid (note));
   query = g_strdup_printf ("INSERT {?urn nie:isPartOf '%s'} "
                            "WHERE {?urn a nfo:DataContainer; nie:title '%s'; nie:generator 'Bijiben'}",
                            url, notebook);
@@ -711,7 +711,7 @@ biji_tracker_delete_note (BijiTracker *self,
   g_return_if_fail (BIJI_IS_NOTE_OBJ (note));
 
   query = g_strdup_printf ("DELETE { <%s> a rdfs:Resource }",
-                           biji_item_get_uuid (BIJI_ITEM (note)));
+                           biji_note_obj_get_uuid (note));
 
   tracker_sparql_connection_update_async (self->connection, query,
 #if !HAVE_TRACKER3
diff --git a/src/libbiji/biji-tracker.h b/src/libbiji/biji-tracker.h
index ffe1579a..f7a6fcab 100644
--- a/src/libbiji/biji-tracker.h
+++ b/src/libbiji/biji-tracker.h
@@ -40,7 +40,7 @@ void        biji_tracker_add_notebook_async              (BijiTracker         *s
                                                           const char          *notebook,
                                                           GAsyncReadyCallback  callback,
                                                           gpointer             user_data);
-BijiItem   *biji_tracker_add_notebook_finish             (BijiTracker         *self,
+BijiNotebook *biji_tracker_add_notebook_finish           (BijiTracker         *self,
                                                           GAsyncResult        *result,
                                                           GError             **error);
 void        biji_tracker_remove_notebook                 (BijiTracker         *self,
@@ -61,7 +61,7 @@ GHashTable *biji_tracker_get_notebooks_finish            (BijiTracker         *s
                                                           GError             **error);
 void        biji_tracker_remove_note_notebook_async      (BijiTracker         *self,
                                                           BijiNoteObj         *note,
-                                                          BijiItem            *notebook,
+                                                          BijiNotebook        *notebook,
                                                           GAsyncReadyCallback  callback,
                                                           gpointer             user_data);
 gboolean    biji_tracker_remove_note_notebook_finish     (BijiTracker         *self,
diff --git a/src/libbiji/deserializer/biji-lazy-deserializer.c 
b/src/libbiji/deserializer/biji-lazy-deserializer.c
index 1aeb638c..670f8322 100644
--- a/src/libbiji/deserializer/biji-lazy-deserializer.c
+++ b/src/libbiji/deserializer/biji-lazy-deserializer.c
@@ -511,7 +511,7 @@ processNode (BijiLazyDeserializer *self)
     {
       norm = g_string_new (tag);
       g_string_erase (norm,0,16);
-      biji_item_add_notebook (BIJI_ITEM (n), NULL, norm->str);
+      biji_note_obj_add_notebook (n, NULL, norm->str);
       g_string_free (norm, TRUE);
     }
 
@@ -542,7 +542,7 @@ biji_lazy_deserialize_internal (BijiLazyDeserializer *self)
   xmlNodePtr cur;
   xmlChar     *version;
 
-  path = biji_item_get_uuid (BIJI_ITEM (n));
+  path = biji_note_obj_get_uuid (n);
   doc = xmlParseFile (path);
 
   if (doc == NULL )
@@ -599,7 +599,7 @@ biji_lazy_deserialize_internal (BijiLazyDeserializer *self)
 
   xmlFree (version);
 
-  path = biji_item_get_uuid (BIJI_ITEM (n));
+  path = biji_note_obj_get_uuid (n);
   self->r = xmlNewTextReaderFilename (path);
 
   biji_parse_file (self);
diff --git a/src/libbiji/libbiji.h b/src/libbiji/libbiji.h
index 5f3fa28c..f81fe517 100644
--- a/src/libbiji/libbiji.h
+++ b/src/libbiji/libbiji.h
@@ -21,7 +21,6 @@
 
 
 #include "biji-date-time.h"
-#include "biji-item.h"
 #include "biji-marshalers.h"
 #include "biji-manager.h"
 #include "biji-notebook.h"
diff --git a/src/libbiji/meson.build b/src/libbiji/meson.build
index 580b46eb..f07facf1 100644
--- a/src/libbiji/meson.build
+++ b/src/libbiji/meson.build
@@ -14,7 +14,6 @@ sources = files(
   'serializer/biji-lazy-serializer.c',
   'biji-date-time.c',
   'biji-info-set.c',
-  'biji-item.c',
   'biji-manager.c',
   'biji-notebook.c',
   'biji-note-obj.c',
diff --git a/src/libbiji/provider/biji-import-provider.c b/src/libbiji/provider/biji-import-provider.c
index ed4a9993..3610a2a1 100644
--- a/src/libbiji/provider/biji-import-provider.c
+++ b/src/libbiji/provider/biji-import-provider.c
@@ -125,7 +125,7 @@ go_through_notes_cb (GObject      *object,
       if (iter != NULL)
         {
           g_hash_table_insert (self->items,
-                               (gpointer) biji_item_get_uuid (BIJI_ITEM (iter)),
+                               (gpointer) biji_note_obj_get_uuid (iter),
                                (gpointer) iter);
         }
     }
diff --git a/src/libbiji/provider/biji-local-note.c b/src/libbiji/provider/biji-local-note.c
index bf2fd822..3f5b8766 100644
--- a/src/libbiji/provider/biji-local-note.c
+++ b/src/libbiji/provider/biji-local-note.c
@@ -56,7 +56,6 @@ local_note_set_html (BijiNoteObj *note,
 static void
 local_note_save (BijiNoteObj *note)
 {
-  BijiItem *item = BIJI_ITEM (note);
   BijiLocalNote *self = BIJI_LOCAL_NOTE (note);
   const BijiProviderInfo *prov_info = biji_provider_get_info (self->provider);
   BijiInfoSet *info = biji_info_set_new ();
@@ -66,14 +65,14 @@ local_note_save (BijiNoteObj *note)
   biji_lazy_serialize (note);
 
   /* Tracker */
-  info->url = (char *) biji_item_get_uuid (item);
-  info->title = (char *) biji_item_get_title (item);
+  info->url = (char *) biji_note_obj_get_uuid (note);
+  info->title = (char *) biji_note_obj_get_title (note);
   info->content = (char *) biji_note_obj_get_raw_text (note);
-  info->mtime = biji_item_get_mtime (item);
+  info->mtime = biji_note_obj_get_mtime (note);
   info->created = biji_note_obj_get_create_date (note);
   info->datasource_urn = g_strdup (prov_info->datasource);
 
-  manager = biji_item_get_manager (item);
+  manager = biji_note_obj_get_manager (note);
   biji_tracker_save_note (biji_manager_get_tracker (manager), info);
 }
 
@@ -152,8 +151,8 @@ local_note_is_trashed (BijiNoteObj *note)
 }
 
 static gboolean
-local_note_restore (BijiItem  *item,
-                    char     **old_uuid)
+local_note_restore (BijiNoteObj  *item,
+                    char        **old_uuid)
 {
   BijiLocalNote *self = BIJI_LOCAL_NOTE (item);
   g_autofree char *root_path = NULL;
@@ -206,16 +205,16 @@ delete_file (GObject      *note,
 /* Do not check if note is already trashed
  * eg, note is empty */
 static gboolean
-local_note_delete (BijiItem *item)
+local_note_delete (BijiNoteObj *note)
 {
-  BijiLocalNote *self = BIJI_LOCAL_NOTE (item);
+  BijiLocalNote *self = BIJI_LOCAL_NOTE (note);
   g_autofree char *file_path = g_file_get_path (self->location);
   BijiTracker *tracker;
 
   g_debug ("local note delete : %s", file_path);
 
-  tracker = biji_manager_get_tracker (biji_item_get_manager (item));
-  biji_tracker_delete_note (tracker, BIJI_NOTE_OBJ (item));
+  tracker = biji_manager_get_tracker (biji_note_obj_get_manager (note));
+  biji_tracker_delete_note (tracker, note);
   g_file_delete_async (self->location,
                        G_PRIORITY_LOW,
                        NULL,                  /* Cancellable */
@@ -236,14 +235,10 @@ static void
 biji_local_note_class_init (BijiLocalNoteClass *klass)
 {
   GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
-  BijiItemClass *item_class = BIJI_ITEM_CLASS (klass);
   BijiNoteObjClass *note_class = BIJI_NOTE_OBJ_CLASS (klass);
 
   g_object_class->finalize = biji_local_note_finalize;
 
-  item_class->restore = local_note_restore;
-  item_class->delete = local_note_delete;
-
   note_class->get_basename = local_note_get_basename;
   note_class->get_html = local_note_get_html;
   note_class->set_html = local_note_set_html;
@@ -251,6 +246,8 @@ biji_local_note_class_init (BijiLocalNoteClass *klass)
   note_class->can_format = note_yes;
   note_class->archive = local_note_archive;
   note_class->is_trashed = local_note_is_trashed;
+  note_class->restore = local_note_restore;
+  note_class->delete = local_note_delete;
 }
 
 BijiNoteObj *
diff --git a/src/libbiji/provider/biji-memo-note.c b/src/libbiji/provider/biji-memo-note.c
index cb86c92e..d1f5f0dc 100644
--- a/src/libbiji/provider/biji-memo-note.c
+++ b/src/libbiji/provider/biji-memo-note.c
@@ -109,7 +109,7 @@ fill_in_components (ECalComponent *comp,
 
 
   /* Set : title */
-  text = e_cal_component_text_new (biji_item_get_title (BIJI_ITEM (self)), NULL);
+  text = e_cal_component_text_new (biji_note_obj_get_title (BIJI_NOTE_OBJ (self)), NULL);
   e_cal_component_set_summary (clone, text);
   e_cal_component_text_free (text);
 
@@ -152,7 +152,7 @@ fill_in_components (ECalComponent *comp,
    * Several: attach / attendee / comment / contact / related / rstatus / x-prop
   */
 
-  mtime = biji_item_get_mtime (BIJI_ITEM (self));
+  mtime = biji_note_obj_get_mtime (BIJI_NOTE_OBJ (self));
   t = icaltime_from_time_val (mtime);
   if (t)
     {
@@ -265,15 +265,6 @@ memo_set_html (BijiNoteObj *note,
   /* NULL */
 }
 
-static gboolean
-memo_item_delete (BijiItem *item)
-{
-  g_return_val_if_fail (BIJI_IS_NOTE_OBJ (item), FALSE);
-
-  g_warning ("Memo note delete is not yet implemented");
-  return FALSE;
-}
-
 static void
 on_memo_deleted (GObject      *ecal,
                  GAsyncResult *res,
@@ -331,18 +322,14 @@ static void
 biji_memo_note_class_init (BijiMemoNoteClass *klass)
 {
   GObjectClass     *object_class = G_OBJECT_CLASS (klass);
-  BijiItemClass    *item_class;
   BijiNoteObjClass *note_class;
 
-  item_class = BIJI_ITEM_CLASS (klass);
   note_class = BIJI_NOTE_OBJ_CLASS (klass);
 
   object_class->finalize = biji_memo_note_finalize;
   object_class->get_property = biji_memo_note_get_property;
   object_class->set_property = biji_memo_note_set_property;
 
-  item_class->delete = memo_item_delete;
-
   note_class->get_basename = memo_get_basename;
   note_class->get_html = memo_get_html;
   note_class->set_html = memo_set_html;
diff --git a/src/libbiji/provider/biji-nextcloud-note.c b/src/libbiji/provider/biji-nextcloud-note.c
index da36398c..331e2ff2 100644
--- a/src/libbiji/provider/biji-nextcloud-note.c
+++ b/src/libbiji/provider/biji-nextcloud-note.c
@@ -59,8 +59,7 @@ note_no (BijiNoteObj *note)
 static char *
 get_basename (BijiNoteObj *note)
 {
-  BijiItem *item = BIJI_ITEM (note);
-  return (char *) biji_item_get_uuid (item);
+  return (char *) biji_note_obj_get_uuid (note);
 }
 
 static char *
@@ -80,7 +79,6 @@ save_note_finish (GObject      *source_object,
                   GAsyncResult *res,
                   gpointer      user_data)
 {
-  BijiItem *item = BIJI_ITEM (source_object);
   BijiNoteObj *note = BIJI_NOTE_OBJ (source_object);
   BijiNextcloudNote *self = BIJI_NEXTCLOUD_NOTE (source_object);
   const BijiProviderInfo *prov_info = biji_provider_get_info (BIJI_PROVIDER (self->provider));
@@ -90,11 +88,11 @@ save_note_finish (GObject      *source_object,
   info->url = (char *) biji_note_obj_get_path (note);
   info->title = (char *) biji_note_obj_get_title (note);
   info->content = (char *) biji_note_obj_get_raw_text (note);
-  info->mtime = biji_item_get_mtime (item);
+  info->mtime = biji_note_obj_get_mtime (note);
   info->created = biji_note_obj_get_create_date (note);
   info->datasource_urn = g_strdup (prov_info->datasource);
 
-  manager = biji_item_get_manager (item);
+  manager = biji_note_obj_get_manager (note);
   biji_tracker_save_note (biji_manager_get_tracker (manager), info);
 }
 
@@ -168,7 +166,7 @@ save_note_thread (GTask        *task,
       json_text = g_strdup_printf ("{\"title\": \"%s\", \"content\": \"%s\", \"modified\": %ld}",
                                    biji_note_obj_get_title (note),
                                    content,
-                                   biji_item_get_mtime (BIJI_ITEM (source_object)));
+                                   biji_note_obj_get_mtime (note));
 
       curl_easy_setopt (curl, CURLOPT_HTTPHEADER, headers);
       curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json_text);
@@ -206,8 +204,7 @@ save_note_async (BijiNextcloudNote *self)
 static void
 save_note (BijiNoteObj *note)
 {
-  BijiItem *item = BIJI_ITEM (note);
-  const char *title = biji_item_get_title (item);
+  const char *title = biji_note_obj_get_title (note);
   const char *content = biji_note_obj_get_raw_text (note);
 
   if (title && strlen (title) > 0 && content && strlen (content) > 0)
@@ -242,7 +239,7 @@ archive (BijiNoteObj *note)
         {
           curl_easy_cleanup (curl);
 
-          tracker = biji_manager_get_tracker (biji_item_get_manager (BIJI_ITEM (note)));
+          tracker = biji_manager_get_tracker (biji_note_obj_get_manager (note));
           biji_tracker_delete_note (tracker, note);
 
           return TRUE;
diff --git a/src/libbiji/serializer/biji-lazy-serializer.c b/src/libbiji/serializer/biji-lazy-serializer.c
index e8645566..95884513 100644
--- a/src/libbiji/serializer/biji-lazy-serializer.c
+++ b/src/libbiji/serializer/biji-lazy-serializer.c
@@ -21,7 +21,6 @@
 #include <string.h>
 
 #include "biji-lazy-serializer.h"
-#include "../biji-item.h"
 #include "../biji-note-obj.h"
 #include "../biji-string.h"
 
@@ -191,7 +190,7 @@ biji_lazy_serialize_internal (BijiLazySerializer *self)
   // <Title>
   serialize_node (self->writer,
                   "title",
-                  (gchar*) biji_item_get_title (BIJI_ITEM (self->note)));
+                  (char *)biji_note_obj_get_title (self->note));
 
   // <text>
   xmlTextWriterWriteRaw(self->writer, BAD_CAST "\n  ");
@@ -204,7 +203,7 @@ biji_lazy_serialize_internal (BijiLazySerializer *self)
   xmlTextWriterEndElement(self->writer);
 
   // <last-change-date>
-  change_date = g_date_time_new_from_unix_utc (biji_item_get_mtime (BIJI_ITEM (self->note)));
+  change_date = g_date_time_new_from_unix_utc (biji_note_obj_get_mtime (self->note));
   change_date_str = g_date_time_format_iso8601 (change_date);
   if (change_date_str)
   {
@@ -256,7 +255,7 @@ biji_lazy_serialize_internal (BijiLazySerializer *self)
 
   xmlFreeTextWriter(self->writer);
 
-  path = biji_item_get_uuid (BIJI_ITEM (self->note));
+  path = biji_note_obj_get_uuid (self->note);
   retval = g_file_set_contents (path, (gchar*) self->buf->content, -1, NULL);
 
   return retval;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]