Changeset 41
- Timestamp:
- 03/08/07 16:22:37 (2 years ago)
- Files:
-
- blog-service/trunk/bs-manager.c (modified) (9 diffs)
- blog-service/trunk/bs-manager.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
blog-service/trunk/bs-manager.c
r40 r41 21 21 static void _g_value_free(gpointer pointer); 22 22 23 static gboolean bs_manager_update_blogs(BsManager *manager, 24 DBusGMethodInvocation *context); 23 25 static gboolean bs_manager_get_blogs(BsManager *manager, 24 26 const gchar **fields, … … 270 272 blog_post_free(post); 271 273 } 274 g_free(user_data); 272 275 } 273 276 … … 339 342 BsManagerPrivate *priv = BS_MANAGER_GET_PRIVATE(manager); 340 343 Blog *blog; 341 struct CreatePostClosure clo;344 struct CreatePostClosure *clo; 342 345 343 346 if (!(blog = g_hash_table_lookup(priv->blogs, blog_id))) { … … 350 353 } 351 354 352 clo.post = g_new0(BlogPost, 1); 353 clo.blog = blog; 354 clo.publish = TRUE; 355 356 g_hash_table_foreach(fields, _bs_manager_populate_post, &clo); 357 358 if (!clo.post->title || !clo.post->content) { 355 clo = g_new0(struct CreatePostClosure, 1); 356 clo->post = g_new0(BlogPost, 1); 357 clo->blog = blog; 358 clo->publish = TRUE; 359 360 g_hash_table_foreach(fields, _bs_manager_populate_post, clo); 361 362 if (!clo->post->title || !clo->post->content) { 359 363 error = g_error_new(g_quark_from_string("blog-service"), 360 364 412, 361 365 "No title or content." 362 366 ); 363 blog_post_free(clo.post); 367 blog_post_free(clo->post); 368 g_free(clo); 364 369 dbus_g_method_return_error(context, error); 365 370 return FALSE; … … 367 372 368 373 blog->plugin->newPost(blog, 369 clo .post,370 clo .publish,374 clo->post, 375 clo->publish, 371 376 _bs_manager_posted, 372 377 &clo); … … 387 392 Blog *blog; 388 393 GSList *iter; 389 struct CreatePostClosure clo; 390 391 if (!(clo.blog = g_hash_table_lookup(priv->blogs, blog_id))) { 394 struct CreatePostClosure *clo; 395 BlogPost *post; 396 397 if (!(blog = g_hash_table_lookup(priv->blogs, blog_id))) { 392 398 error = g_error_new(g_quark_from_string("blog-service"), 393 399 404, … … 398 404 } 399 405 400 for (iter = clo.blog->posts; iter; iter = iter->next) {401 BlogPost *post = iter->data;402 403 if (!strcmp(post ->id, post_id)) {404 clo.post = post;406 for (iter = blog->posts; iter; iter = iter->next) { 407 BlogPost *posti = iter->data; 408 409 if (!strcmp(posti->id, post_id)) { 410 post = posti; 405 411 break; 406 412 } 407 413 } 408 414 409 if (! (clo.blog = g_hash_table_lookup(priv->blogs, blog_id))) {415 if (!post) { 410 416 error = g_error_new(g_quark_from_string("blog-service"), 411 417 404, … … 416 422 } 417 423 418 clo.publish = TRUE; 424 clo = g_new0(struct CreatePostClosure, 1); 425 clo->publish = TRUE; 426 clo->post = post; 427 clo->blog = blog; 419 428 420 429 g_hash_table_foreach(fields, _bs_manager_populate_post, &clo); 421 430 422 if (!clo .post->title || !clo.post->content) {431 if (!clo->post->title || !clo->post->content) { 423 432 error = g_error_new(g_quark_from_string("blog-service"), 424 433 412, 425 434 "No title or content." 426 435 ); 427 blog_post_free(clo.post); 436 blog_post_free(clo->post); 437 g_free(clo); 428 438 dbus_g_method_return_error(context, error); 429 439 return FALSE; … … 431 441 432 442 blog->plugin->editPost(blog, 433 clo .post,434 clo .publish,443 clo->post, 444 clo->publish, 435 445 _bs_manager_posted, 436 &clo);446 clo); 437 447 438 448 *status = FALSE; 439 449 return TRUE; 450 } 451 452 struct UpdateClosure { 453 guint count; 454 DBusGMethodInvocation *context; 455 }; 456 457 static void _bs_manager_update_done(Blog *blog, 458 const BlogPluginError *error, 459 gpointer user_data) 460 { 461 struct UpdateClosure *closure = user_data; 462 if (!(--closure->count)) { 463 dbus_g_method_return(closure->context); 464 g_free(user_data); 465 } 466 } 467 468 static void _bs_manager_update_posts(Blog *blog, 469 const BlogPluginError *error, 470 gpointer user_data) 471 { 472 blog->plugin->getRecent(blog, _bs_manager_update_done, user_data); 473 } 474 475 static void _bs_manager_update_blog(gpointer key, 476 gpointer blogp, 477 gpointer user_data) 478 { 479 Blog *blog = blogp; 480 GSList *posts = blog->posts; 481 GSList *categories = blog->categories; 482 483 blog->posts = NULL; 484 blog->categories = NULL; 485 486 g_slist_foreach(posts, (GFunc)blog_post_free, NULL); 487 g_slist_foreach(categories, (GFunc)blog_category_free, NULL); 488 g_slist_free(posts); 489 g_slist_free(categories); 490 491 blog->plugin->getCategories(blog, _bs_manager_update_posts, user_data); 492 } 493 494 static void _bs_manager_count(gpointer key, 495 gpointer blog, 496 gpointer user_data) 497 { 498 struct UpdateClosure *closure = user_data; 499 500 (void)key; 501 (void)blog; 502 503 closure->count++; 504 } 505 506 static gboolean bs_manager_update_blogs(BsManager *manager, 507 DBusGMethodInvocation *context) 508 { 509 BsManagerPrivate *priv = BS_MANAGER_GET_PRIVATE(manager); 510 struct UpdateClosure *clo = g_new0(struct UpdateClosure, 1); 511 clo->context = context; 512 g_hash_table_foreach(priv->blogs, _bs_manager_count, clo); 513 g_hash_table_foreach(priv->blogs, _bs_manager_update_blog, clo); 514 return 0; 440 515 } 441 516 blog-service/trunk/bs-manager.xml
r38 r41 4 4 <interface name="org.MaemoHackers.BlogService"> 5 5 <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="BsManager" /> 6 <method name="update_blogs"> 7 <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="bs_manager_update_blogs" /> 8 <annotation name="org.freedesktop.DBus.GLib.ASync" value="" /> 9 </method> 6 10 <method name="get_blogs"> 7 11 <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="bs_manager_get_blogs" />
