--- a/blogic/BlogEngine.py Wed Jan 03 21:45:33 2007 -0300
+++ b/blogic/BlogEngine.py Thu Jan 04 01:05:39 2007 -0300
@@ -29,7 +29,7 @@
if engine == 'mt':
engine = 'MovableType'
- print engine
+ print "BlogEngine::%s" % engine
protocol = self._get_backend(engine)
self.backend = protocol.Blog(url, user, passwd)
--- a/blogic/BlogMovableType.py Wed Jan 03 21:45:33 2007 -0300
+++ b/blogic/BlogMovableType.py Thu Jan 04 01:05:39 2007 -0300
@@ -49,13 +49,13 @@
return content
def _fill_category(self, cat_id):
- # Create the struct with the category information, then pass that to a list.
+ # Create the struct with the category information, then
+ # return it as a list.
category_list = []
- category = {}
- category['categoryId'] = cat_id
- category['isPrimary'] = xmlrpclib.True
- category_list.append(category)
-
+ for id, is_primary in cat_id.items():
+ category_list += [ { 'categoryId': id,
+ 'isPrimary': is_primary
+ } ]
return category_list
def post_new(self, blog_id, cat_id, publish, data):
@@ -101,8 +101,14 @@
self.user, self.passwd)
def get_category_list(self, blog_id):
- return self.rpc_server.mt.getCategoryList(blog_id,
+ data = self.rpc_server.mt.getCategoryList(blog_id,
self.user, self.passwd)
+ categories = {}
+ for cat in data:
+ id = cat['categoryId']
+ name = cat['categoryName']
+ categories[id] = name
+ return categories
def get_post(self, post_id):
try:
@@ -116,18 +122,17 @@
return post
def get_categories_for_post(self, post_id):
- primary = ""
- categories = []
+ categories = {}
try:
result = self.rpc_server.mt.getPostCategories(post_id,
self.user, self.passwd)
+ categories = {}
for item in result:
- if item['isPrimary'] == xmlrpclib.True:
- primary = item['categoryId']
- categories += [ item['categoryId'] ]
+ id = item['categoryId']
+ categories[id] = item['isPrimary']
except:
raise
- return (primary, categories)
+ return categories
def get_last_entries(self, blog_id, n):
"""Retrieve last 'n' entries from the server"""
--- a/blogic/app.py Wed Jan 03 21:45:33 2007 -0300
+++ b/blogic/app.py Thu Jan 04 01:05:39 2007 -0300
@@ -46,8 +46,9 @@
import BlogEngine
from BlogBase import BlogData
-def print_debug(msg):
- print msg
+class Category:
+ primary = {}
+ secondary = {}
class Blogic(BlogSettings):
default_ui = {
@@ -91,7 +92,12 @@
def __init__(self):
self.blogs = {}
self.categories = {}
+ self.category = Category()
+ self.category_sync = False
+ self.categories_primary = {}
+ self.categories_secondary = {}
self.filename = None
+ self.blog_name = None
BlogSettings.__init__(self, 'blogic')
@@ -116,11 +122,7 @@
self.allow_comments = self.gxml.get_widget('allow_comments_menu')
# Categories of Blogs
- self.categories_combo = self.gxml.get_widget('categories')
self.label_categories = self.gxml.get_widget('label_categories')
- model = gtk.ListStore(str, str)
- self.categories_combo.set_model(model)
- self.categories_combo.set_text_column(0)
# Editor
self.editor = Editor()
@@ -224,7 +226,7 @@
return False
def on_preferences_activate(self, widget, user_data=None):
- print_debug("on preferences activate")
+ pass
def on_about_activate(self, widget, user_data=None):
ui_file = environ.find_resource('glade', 'blogic.glade')
@@ -413,8 +415,6 @@
blog = self.blog_get_data(blog_name)
self.system = blog["system"]
- print "get_blog::blog_id:", blog["blog_id"]
-
self.blog_engine = BlogEngine.Blog(blog["system"],
blog["url"],
blog["blog_id"],
@@ -426,86 +426,72 @@
return True
- ### FIXME: It shouldn't use neither categoryName or categoryId.
- ### both of them should be abstracted.
- def on_blogs_changed(self, widget, user_data=None):
- """Update the categories associated to a specific blog"""
- blog_id = self.blog_engine.get_blog_id()
- model = self.categories_combo.get_model()
- model.clear()
-
- if len(self.categories) <= 0:
- self.categories = self.get_categories()
-
- if not self.categories.has_key(blog_id):
- print_debug("%s doesn't have categories" % (blog_id))
- return
+ def get_categories_id(self):
+ """Get the category's id selected in the ComboBoxEntry"""
+ result = {}
+ for id in self.categories_secondary.keys():
+ result[id] = False
+ for id in self.categories_primary.keys():
+ result[id] = True
- categories = self.categories[blog_id]
-
- for item in categories:
- model.append([item['categoryName'], item['categoryId']])
-
- model.set_sort_column_id(0, gtk.SORT_ASCENDING)
- self.categories_combo.set_active(0)
-
- def get_category_id(self):
- """Get the category's id selected in the ComboBoxEntry"""
- model = self.categories_combo.get_model()
- active = self.categories_combo.get_active()
- if active != -1:
- return model[active][1]
- else:
- return "0"
+ return result
def get_categories(self, blog_name):
"""Get all categories from an account and Update the
categories associated to a specific blog"""
- # categories = {}
- # for id in self.blogs.keys():
- # categories[id] = self.blog_engine.get_category_list(id)
- # return categories
- print "get_categories::blog_name:", blog_name
self.categories = self.blog_get_categories(blog_name)
- model = self.categories_combo.get_model()
- model.clear()
-
- #if not self.categories.has_key(blog_name):
- # print_debug("%s doesn't have categories" % (blog_name))
- # return
-
- for id in self.categories.keys():
- model.append([self.categories[id], id])
-
- model.set_sort_column_id(0, gtk.SORT_ASCENDING)
- self.categories_combo.set_active(0)
-
def on_button_categories_clicked(self, *args):
blog_id = self.blog_engine.get_blog_id()
- print "on_button_categories_clicked::blog_id", blog_id
- category_list = self.blog_engine.get_category_list(blog_id)
categories = []
- for cat in category_list:
- categories += [ (cat['categoryId'],
- False, False,
- cat['categoryName']) ]
+ if not self.category_sync:
+ category_list = self.blog_engine.get_category_list(blog_id)
+ self.blog_set_categories(self.blog_name, category_list)
+ self.category_sync = True
- dialog = CategoryDialog(data=categories)
+ for id, name in category_list.items():
+ # categories += [ (id, False, False, name) ]
+ #for id, name in self.categories.items():
+ is_primary = self.categories_primary.has_key(id)
+ is_secondary = self.categories_secondary.has_key(id)
+ categories += [ (id, is_primary, is_secondary, name) ]
+ else:
+ for id, name in self.categories.items():
+ is_primary = self.categories_primary.has_key(id)
+ is_secondary = self.categories_secondary.has_key(id)
+ categories += [ (id, is_primary, is_secondary, name) ]
+
+ dialog = CategoryDialog(categories)
dialog.set_default_size(300,250)
dialog.show_all()
result = dialog.run()
if result == gtk.RESPONSE_OK:
primary, secondary = dialog.get_categories_choosen()
-
- text = '<b>%s</b>' % ('; ').join(primary.values())
- text += ', %s' % ('; ').join(secondary.values())
- self.label_categories.set_text(text)
- self.label_categories.set_use_markup(True)
+ self.categories_primary = primary
+ self.categories_secondary = secondary
+ self.update_label_categories(primary, secondary)
dialog.hide()
+ def update_label_categories(self, primary, secondary):
+ bold = []
+ for id in primary.keys():
+ if self.categories.has_key(id):
+ bold += [ self.categories[id] ]
+ text = '<b>%s</b>' % ('; ').join(bold)
+
+ normal = []
+ for id in secondary.keys():
+ if self.categories.has_key(id):
+ normal += [ self.categories[id] ]
+
+ if normal:
+ text += '; %s' % ('; ').join(normal)
+
+ self.label_categories.set_text(text)
+ self.label_categories.set_use_markup(True)
+
def on_post_activate(self, widget, user_data=None):
self.post(True)
@@ -521,7 +507,7 @@
data.text = self.editor.get_body().encode("utf-8")
blog_id = self.blog_engine.get_blog_id()
- category_id = self.get_category_id()
+ categories = self.get_categories_id()
data.keywords = self.keywords.get_text()
data.trackback = self.trackback.get_text()
@@ -533,7 +519,7 @@
# If the message is new, post_id is -1, else has the post_id.
self.statusbar.push(1, _("Posting the message..."))
if self.post_id == -1:
- self.post_id = self.blog_engine.post_new(category_id,
+ self.post_id = self.blog_engine.post_new(categories,
publish, data)
if self.post_id == -1:
text = _("An error has ocurred to post the message.")
@@ -541,7 +527,7 @@
text = _("The message has been successfully posted")
self.editor.set_modified(False)
else:
- result = self.blog_engine.post_edit(category_id,
+ result = self.blog_engine.post_edit(categories,
self.post_id, publish,
data)
if result == 1:
@@ -568,19 +554,8 @@
window.show_all()
def on_history_post_selected(self, widget, post):
- for i in post.categories:
- print_debug(i)
+ # FIXME: Update to the code of category
- """Select the right category according to the post's category"""
- model = self.categories_combo.get_model()
- n = 0
- for row in model:
- if row[1] == post.primary_category:
- self.categories_combo.set_active(n)
- break
- n += 1
-
- print "Title", post.title
self.editor.set_title(post.title)
self.editor.set_body(post.text)
@@ -625,21 +600,19 @@
if (len(post_id.get_text()) > 0):
post = self.blog_engine.get_post(post_id.get_text())
- (post.primary_category, post.categories) = \
- self.blog_engine.get_categories_for_post(post.post_id)
-
- for i in post.categories:
- print_debug(i)
+ categories = self.blog_engine.get_categories_for_post(post.post_id)
- """Select the right category according to the post's category"""
- model = self.categories_combo.get_model()
- n = 0
- for row in model:
- if row[1] == post.primary_category:
- self.categories_combo.set_active(n)
- break
- n += 1
-
+ self.categories_primary = {}
+ self.categories_secondary = {}
+ for id, is_primary in categories.items():
+ if is_primary:
+ self.categories_primary[id] = True
+ else:
+ self.categories_secondary[id] = False
+
+ self.update_label_categories(self.categories_primary,
+ self.categories_secondary)
+
self.editor.set_title(post.title)
self.editor.set_body(post.text)
@@ -759,8 +732,6 @@
gnome.url_show(url)
def on_url_url_changed(self, widget, user_data=None):
- #print_debug(widget)
- #print_debug(user_data)
pass
def on_insert_image_activate(self, widget, user_data=None):
@@ -821,14 +792,13 @@
self.is_spell_active = not self.is_spell_active
- def on_blog_list_activate(self, widget, data=None):
- print_debug("widget: %s, %s, %s" % (widget.active , \
- widget.get_name(), data))
+ def on_blog_list_activate(self, widget, blog_name=None):
if widget.get_active():
- self.gconf["last_blog"] = data
- if (self.get_blog(data)):
- self.set_title(data)
- self.get_categories(data)
+ self.gconf["last_blog"] = blog_name
+ if (self.get_blog(blog_name)):
+ self.set_title(blog_name)
+ self.get_categories(blog_name)
+ self.blog_name = blog_name
else:
self.set_title()
--- a/blogic/blog_gconf.py Wed Jan 03 21:45:33 2007 -0300
+++ b/blogic/blog_gconf.py Thu Jan 04 01:05:39 2007 -0300
@@ -214,8 +214,6 @@
category_id += [id]
category_name += [name]
- print category_id, category_name
-
self.gconf["category_id"] = category_id
self.gconf["category_name"] = category_name
--- a/dialogs/blogic.glade Wed Jan 03 21:45:33 2007 -0300
+++ b/dialogs/blogic.glade Thu Jan 04 01:05:39 2007 -0300
@@ -1000,14 +1000,14 @@
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">0</property>
+ <property name="spacing">6</property>
<child>
<widget class="GtkVBox" id="vbox_entry">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="spacing">0</property>
<child>
<widget class="GtkHBox" id="hbox_entry">
@@ -1060,73 +1060,45 @@
</child>
<child>
- <widget class="GtkVBox" id="vbox48">
- <property name="border_width">6</property>
+ <widget class="GtkHBox" id="hbox_title">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
- <widget class="GtkHBox" id="hbox_title">
+ <widget class="GtkButton" id="button_categories">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button_categories">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Category:</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_button_categories_clicked" last_modification_time="Wed, 03 Jan 2007 18:55:42 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Category:</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_button_categories_clicked" last_modification_time="Wed, 03 Jan 2007 18:55:42 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
- <child>
- <widget class="GtkLabel" id="label_categories">
- <property name="visible">True</property>
- <property name="label" translatable="yes">...</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBoxEntry" id="categories">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
+ <child>
+ <widget class="GtkLabel" id="label_categories">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">...</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>