Re: How do I spawn an unknown viewer for a known file?



Bastiaan,

I looked into a solution for the similar problem last fall.  I not sure if I will continue with this project 
so I HAVE NOT thoroughly tested it.  This is what I came up with.

James,


From the numa.sourceforge.net package
http://ext3carve.cvs.sourceforge.net/ext3carve/gfs_watch/client/numa_gui.c?view=markup

[CODE]
/*
 1690  * Determines the type of file and attempts to launch it
 1691  * using the default application or the shell
 1692 */
 1693 static gboolean numa_gui_util_launch_restored (PNOTIFY pnotify, gchar *pch_file)
 1694 {
 1695   gboolean b_rc = TRUE;
 1696   gchar *pch_uri = NULL, *pch = NULL;
 1697   const char *pch_mime = NULL;
 1698   const char *pemsg = NULL;
 1699   GnomeVFSURI *vfs_uri = NULL;
 1700   GnomeVFSMimeApplication *pApp = NULL;
 1701   GList *glFile = NULL;
 1702   GnomeVFSResult result;
 1703   GError  *gerror = NULL;
 1704 
 1705   g_return_val_if_fail (pnotify != NULL, FALSE);
 1706   g_return_val_if_fail (pch_file != NULL, FALSE);
 1707 
 1708   numa_gui_util_log_msg ("numa_gui_util_launch_restored", "enter", pch_file);
 1709 
 1710 
 1711   /*
 1712    * turn regular filename into a uri */
 1713   pch_uri = gnome_vfs_make_uri_from_input (pch_file);
 1714   glFile = g_list_append (glFile, g_strdup ((gchar *)pch_uri));
 1715 
 1716   /*
 1717    * create a formal uri from output of above */
 1718   vfs_uri = gnome_vfs_uri_new (pch_uri);
 1719 
 1720   /*
 1721    * get the mime type for this uri */
 1722   pch_mime = gnome_vfs_get_mime_type_from_uri (vfs_uri);
 1723 
 1724   /*
 1725    * get the application to launch */
 1726   pApp = gnome_vfs_mime_get_default_application_for_uri (pch_uri, pch_mime);
 1727   if (pApp == NULL)
 1728   {
 1729     if ( g_file_test (pch_file, G_FILE_TEST_IS_EXECUTABLE) )
 1730     {
 1731         b_rc = g_spawn_command_line_async ( pch_file, &gerror );
 1732         if ( gerror != NULL )
 1733         {
 1734             g_snprintf(pnotify->cLastStatusMsg, sizeof(pnotify->cLastStatusMsg),
 1735                        "Launching { %s } EMsg=%s", pch_file, gerror->message);
 1736             g_error_free (gerror);
 1737         } else {
 1738             g_snprintf(pnotify->cLastStatusMsg, sizeof(pnotify->cLastStatusMsg),
 1739                        "Launched { %s }.", pch_file);
 1740         }
 1741     } else {
 1742         g_snprintf(pnotify->cLastStatusMsg, sizeof(pnotify->cLastStatusMsg),
 1743                    "Unable to Launch { %s }.", pch_file);
 1744         b_rc = FALSE;
 1745     }
 1746   }
 1747   else
 1748   {
 1749     /*
 1750      * launch the application */
 1751     result = gnome_vfs_mime_application_launch (pApp, glFile);
 1752 
 1753     switch (result)
 1754     {
 1755     case GNOME_VFS_OK:
 1756       pch = "the application was launched.";
 1757       pemsg = gnome_vfs_result_to_string (result);
 1758       b_rc = TRUE;
 1759     break;
 1760     case GNOME_VFS_ERROR_NOT_SUPPORTED:
 1761       pch = "the uri protocol is not supported by the application.";
 1762       pemsg = gnome_vfs_result_to_string (result);
 1763       b_rc = FALSE;
 1764     break;
 1765     case GNOME_VFS_ERROR_PARSE:
 1766       pch = "the application command can not be parsed.";
 1767       pemsg = gnome_vfs_result_to_string (result);
 1768       b_rc = FALSE;
 1769     break;
 1770     case GNOME_VFS_ERROR_LAUNCH:
 1771       pch = "the application command can not be launched.";
 1772       pemsg = gnome_vfs_result_to_string (result);
 1773       b_rc = FALSE;
 1774     break;
 1775     case GNOME_VFS_ERROR_INTERNAL:
 1776       pch = "internal error.";
 1777       pemsg = gnome_vfs_result_to_string (result);
 1778       b_rc = FALSE;
 1779     break;
 1780     default:
 1781       pch = "unknown launch error.";
 1782       pemsg = gnome_vfs_result_to_string (result);
 1783       b_rc = FALSE;
 1784     }
 1785 
 1786     g_snprintf (pnotify->cLastStatusMsg, sizeof(pnotify->cLastStatusMsg),
 1787                 "Launch restored file using %s, %s, %s", pApp->name, pch, pemsg);
 1788   }
 1789 
 1790   /*
 1791    * release mem used */
 1792   gnome_vfs_mime_application_free (pApp);
 1793   gnome_vfs_uri_unref (vfs_uri);
 1794   g_free(pch_uri);
 1795   g_list_free(glFile);
 1796 
 1797   numa_gui_util_log_msg ("numa_gui_util_launch_restored", "exit", (b_rc) ? "Launched" : "Failed");
 1798 
 1799   return b_rc;
 1800 }
[/CODE]

----- Original Message ----
From: Bastiaan Veelo <bastiaan sarc nl>
To: gtk-app-devel-list gnome org
Sent: Saturday, March 8, 2008 5:11:02 PM
Subject: How do I spawn an unknown viewer for a known file?


Hi,

What 
is 
the 
platform 
independent 
way 
to 
spawn 
a 
viewer 
for, 
say, 
a 
PDF 
document?

Thanks,
Bastiaan.
_______________________________________________
gtk-app-devel-list 
mailing 
list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list






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