-FolderItem *rssyl_feed_subscribe_new(FolderItem *parent, const gchar *url,
- gboolean verbose)
-{
- gchar *myurl = NULL, *tmpname = NULL;
- FolderItem *new_item = NULL;
- RFolderItem *ritem = NULL;
- gboolean success = FALSE;
-
- g_return_val_if_fail(parent != NULL, FALSE);
- g_return_val_if_fail(url != NULL, FALSE);
-
- log_print(LOG_PROTOCOL, RSSYL_LOG_SUBSCRIBING, url);
-
- if( !strncmp(url, "feed://", 7) )
- myurl = g_strdup(url+7);
- else if( !strncmp(url, "feed:", 5) )
- myurl = g_strdup(url+5);
- else
- myurl = g_strdup(url);
-
- myurl = g_strchomp(myurl);
-
- folderview_freeze(mainwindow_get_mainwindow()->folderview);
- folder_item_update_freeze();
-
- /* Create a feed folder with generic name. */
- tmpname = g_strdup_printf("%s.%ld", RSSYL_NEW_FOLDER_NAME, (long int)time(NULL));
- new_item = folder_create_folder(parent, tmpname);
- g_free(tmpname);
- if( !new_item ) {
- if( verbose )
- alertpanel_error(_("Couldn't create folder for new feed '%s'."),
- myurl);
- g_free(myurl);
- return NULL;
- }
-
- /* Set it up as a RSSyl folder */
- ritem = (RFolderItem *)new_item;
- ritem->url = g_strdup(myurl);
-
- /* Try to update it, delete if failed.
- * (it is renamed in rssyl_update_feed(). */
- if( (success = rssyl_update_feed(ritem, verbose)) == FALSE )
- new_item->folder->klass->remove_folder(new_item->folder, new_item);
- else {
- folder_item_scan(new_item);
- folder_write_list();
- }
-
- folder_item_update_thaw();
- folderview_thaw(mainwindow_get_mainwindow()->folderview);
-
- if( success )
- log_print(LOG_PROTOCOL, RSSYL_LOG_SUBSCRIBED, ritem->official_title,
- ritem->url);
- else {
- debug_print("RSSyl: Failed to add feed '%s'\n", myurl);
- g_free(myurl);
- return NULL;
- }
-
- return new_item;
-}
-