packages feed

bustle 0.7.3 → 0.7.4

raw patch · 13 files changed

+622/−78 lines, 13 files

Files

Bustle/UI.hs view
@@ -343,7 +343,7 @@     let yyyy_mm_dd_hh_mm_ss = takeWhile (/= '.') (show zt)      cacheDir <- io getCacheDir-    let filename = cacheDir </> yyyy_mm_dd_hh_mm_ss <.> "bustle"+    let filename = cacheDir </> yyyy_mm_dd_hh_mm_ss <.> "pcap"      let title = printf (__ "Recording %s&#8230;") $ case target of             Left BusTypeNone    -> error "whoops, this value shouldn't exist"
Bustle/UI/AboutDialog.hs view
@@ -46,7 +46,7 @@     dialog `set` [ aboutDialogName := __ "Bustle"                  , aboutDialogVersion := showVersion version                  , aboutDialogComments := __ "Someone's favourite D-Bus profiler"-                 , aboutDialogWebsite := "https://www.freedesktop.org/wiki/Software/Bustle/"+                 , aboutDialogWebsite := "https://gitlab.freedesktop.org/bustle/bustle#readme"                  , aboutDialogAuthors := authors                  , aboutDialogCopyright := "© 2008–2017 Will Thompson, Collabora Ltd. and contributors"                  , aboutDialogLicense := license
Bustle/UI/DetailsView.hs view
@@ -28,19 +28,23 @@ import Graphics.UI.Gtk hiding (Signal)  import qualified DBus as D+import DBus.Internal.Message (MethodError(..))+import DBus.Internal.Types (ErrorName(..))  import Bustle.Types import Bustle.Marquee import Bustle.VariantFormatter +type OptionalRow = (Label, Label)+ data DetailsView =     DetailsView { detailsGrid :: Grid                 , detailsType :: Stack                 , detailsSender :: Label-                , detailsDestinationCaption :: Label-                , detailsDestination :: Label+                , detailsDestination :: OptionalRow                 , detailsPath :: Label                 , detailsMember :: Label+                , detailsErrorName :: OptionalRow                 , detailsBodyView :: TextView                 } @@ -50,12 +54,17 @@     <$> builderGetObject builder castToGrid "detailsGrid"     <*> builderGetObject builder castToStack "detailsType"     <*> builderGetObject builder castToLabel "detailsSender"-    <*> builderGetObject builder castToLabel "detailsDestinationCaption"-    <*> builderGetObject builder castToLabel "detailsDestination"+    <*> optionalRow "detailsDestination"     <*> builderGetObject builder castToLabel "detailsPath"     <*> builderGetObject builder castToLabel "detailsMember"+    <*> optionalRow "detailsErrorName"     <*> builderGetObject builder castToTextView "detailsArguments"+  where+    optionalRow labelId = (,)+        <$> builderGetObject builder castToLabel (labelId ++ "Caption")+        <*> builderGetObject builder castToLabel labelId + pickType :: Detailed Message -> String pickType (Detailed _ m _ _) = case m of     MethodCall {} -> "methodCall"@@ -82,15 +91,42 @@     Signal { signalDestination = d } -> d     _                                -> Just (destination m) +getErrorName :: Detailed a -> Maybe String+getErrorName (Detailed _ _ _ rm) = case rm of+    (D.ReceivedMethodError _ (MethodError { methodErrorName = ErrorName en})) -> Just en+    _                                                                         -> Nothing++getErrorMessage :: Detailed a+                -> Maybe String+getErrorMessage (Detailed _ _ _ (D.ReceivedMethodError _ (MethodError _ _ _ _ body))) =+    case D.fromVariant <$> body of+        [message] -> message+        _         -> Nothing+getErrorMessage _ = Nothing+ formatMessage :: Detailed Message -> String formatMessage (Detailed _ _ _ rm) =     formatArgs $ D.receivedMessageBody rm   where     formatArgs = intercalate "\n" . map (format_Variant VariantStyleSignature)+-- TODO: suppress escaping and type sig for errors, which are always (s)  detailsViewGetTop :: DetailsView -> Widget detailsViewGetTop = toWidget . detailsGrid +setOptionalRow :: OptionalRow+               -> Maybe String+               -> IO ()+setOptionalRow (caption, label) s_ = do+    case s_ of+        Just s -> do+            labelSetText label s+            widgetShow label+            widgetShow caption+        Nothing -> do+            widgetHide label+            widgetHide caption+ detailsViewUpdate :: DetailsView                   -> Detailed Message                   -> IO ()@@ -102,17 +138,13 @@     -- TODO: these would be a lot more useful if we could resolve unique names     -- to/from well-known names and show both     labelSetText (detailsSender d) (unBusName . sender . deEvent $ m)-    case getDestination m of-        Just n -> do-            labelSetText (detailsDestination d) (unBusName n)-            widgetShow (detailsDestination d)-            widgetShow (detailsDestinationCaption d)-        Nothing -> do-            widgetHide (detailsDestination d)-            widgetHide (detailsDestinationCaption d)+    setOptionalRow (detailsDestination d) (unBusName <$> getDestination m)+    setOptionalRow (detailsErrorName d) (getErrorName m)      labelSetText (detailsPath d) (maybe unknown (D.formatObjectPath . path) member_)     labelSetMarkup (detailsMember d) (maybe unknown getMemberMarkup member_)-    textBufferSetText buf $ formatMessage m+    textBufferSetText buf $ case getErrorMessage m of+        Just message -> message+        Nothing      -> formatMessage m   where     unknown = ""
CONTRIBUTING.md view
@@ -48,7 +48,10 @@ scp -r x.y.z annarchy.freedesktop.org:/srv/www.freedesktop.org/www/software/bustle/  # Upload source to Hackage-stack upload+stack upload .  git push origin --tags master ```++* Add `.1` to version number in `bustle.cabal`+* Update <https://github.com/flathub/org.freedesktop.Bustle>
NEWS.md view
@@ -1,3 +1,22 @@+Bustle 0.7.4 (2018-12-07)+-------------------------++User-facing changes:++* In the details for an error reply, the error name is now shown, and+  the error message is formatted more legibly.+* The default file extension for log files is now `.pcap`, reflecting+  what they actually are.++Internal changes:++* When you stop monitoring the system bus, the privileged dbus-monitor+  process is now terminated promptly, rather than dying with “Broken+  pipe” the next time a message is sent on the bus.+* Update all links to <https://gitlab.freedesktop.org/bustle/bustle> or+  <https://gitlab.freedesktop.org/bustle/bustle#readme> depending on+  context.+ Bustle 0.7.3 (2018-11-15) ------------------------- 
README.md view
@@ -34,9 +34,3 @@      bustle --count logfile.bustle     bustle --time logfile.bustle---More information-================--See <https://www.freedesktop.org/wiki/Software/Bustle/>.
bustle.cabal view
@@ -1,6 +1,6 @@ Name:           bustle Category:       Network, Desktop-Version:        0.7.3+Version:        0.7.4 Cabal-Version:  2.0 Tested-With:    GHC == 8.4.3 Synopsis:       Draw sequence diagrams of D-Bus traffic@@ -9,7 +9,7 @@ License-file:   LICENSE Author:         Will Thompson <will@willthompson.co.uk> Maintainer:     Will Thompson <will@willthompson.co.uk>-Homepage:       https://www.freedesktop.org/wiki/Software/Bustle/+Homepage:       https://gitlab.freedesktop.org/bustle/bustle#readme Data-files:     data/bustle.ui,                 data/OpenTwoDialog.ui,                 data/RecordAddressDialog.ui,
c-sources/bustle-pcap.c view
@@ -208,7 +208,7 @@   GMainLoop *loop = user_data;    if (!(domain == G_IO_ERROR && code == G_IO_ERROR_CANCELLED))-    fprintf (stderr, "Error: %s %d %s", g_quark_to_string (domain), code, message);+    g_printerr ("Error while monitoring: %s\n", message);    g_main_loop_quit (loop); }@@ -230,7 +230,7 @@ {   GMainLoop *loop;   gchar *filename;-  GError *error = NULL;+  g_autoptr(GError) error = NULL;   BustlePcapMonitor *pcap;    parse_arguments (&argc, &argv, &filename);@@ -238,9 +238,8 @@   pcap = bustle_pcap_monitor_new (bus_type, address, filename, &error);   if (pcap == NULL)     {-      fprintf (stderr, "%s %d %s",-          g_quark_to_string (error->domain), error->code, error->message);-      g_clear_error (&error);+      g_printerr ("Failed to start monitor: %s\n",+                  error->message);       exit (1);     } 
c-sources/pcap-monitor.c view
@@ -18,17 +18,29 @@  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA  */ +#define _GNU_SOURCE+ #include "config.h" #include "pcap-monitor.h"  #include <errno.h>+#include <fcntl.h> #include <signal.h> #include <string.h>+#include <sys/ioctl.h>+#include <sys/stat.h>+#include <sys/types.h>+ #include <pcap/pcap.h>++#include <glib.h>+#include <glib/gstdio.h> #include <gio/gunixinputstream.h> + /* Prefix of name claimed by the connection that collects name owners. */ const char *BUSTLE_MONITOR_NAME_PREFIX = "org.freedesktop.Bustle.Monitor.";+static gboolean RUNNING_IN_FLATPAK = FALSE;  /*  * Transitions:@@ -85,6 +97,8 @@      /* input */     GSubprocess *dbus_monitor;+    /* If >= 0, master side of controlling terminal for dbus_monitor */+    int pt_master;     GSource *dbus_monitor_source;     pcap_t *pcap_in; @@ -121,12 +135,24 @@     G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init);     ) +/* A sad echo of the functions in libglnx. */+static inline void *+throw_errno (GError **error,+             const gchar *prefix)+{+  int errsv = errno;+  g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),+               "%s: %s", prefix, g_strerror (errsv));+  return NULL;+}+ static void bustle_pcap_monitor_init (BustlePcapMonitor *self) {   self->bus_type = G_BUS_TYPE_SESSION;   self->state = STATE_NEW;   self->cancellable = g_cancellable_new ();+  self->pt_master = -1; }  static void@@ -224,6 +250,12 @@   g_clear_error (&self->pcap_error);   g_clear_error (&self->subprocess_error); +  if (self->pt_master >= 0)+    {+      g_close (self->pt_master, NULL);+      self->pt_master = -1;+    }+   if (parent_class->finalize != NULL)     parent_class->finalize (object); }@@ -298,6 +330,8 @@       G_TYPE_UINT,       G_TYPE_INT,       G_TYPE_STRING);++  RUNNING_IN_FLATPAK = g_file_test ("/.flatpak-info", G_FILE_TEST_EXISTS); }  static void@@ -580,6 +614,36 @@   g_task_run_in_thread (task, dump_names_thread_func); } +/**+ * send_sigint:+ *+ * Send SIGINT to the dbus-monitor subprocess, in as many ways as possible.+ */+static void+send_sigint (BustlePcapMonitor *self)+{+  /* Send the signal directly; this has no effect on the privileged subprocess+   * used on the system bus.+   */+  if (self->dbus_monitor != NULL)+    g_subprocess_send_signal (self->dbus_monitor, SIGINT);++  /* Send it via the PTY that we set as the subprocess's controlling terminal;+   * this works even for a privileged child.+   */+  if (self->pt_master >= 0)+    {+      char ctrl_c = '\x03';++      if (write (self->pt_master, &ctrl_c, 1) != 1)+        {+          g_autoptr(GError) local_error = NULL;+          throw_errno (&local_error, "write to pt_master failed");+          g_warning ("%s: %s", G_STRFUNC, local_error->message);+        }+    }+}+ static gboolean start_pcap (     BustlePcapMonitor *self,@@ -599,9 +663,10 @@   dbus_monitor_filep = fdopen (stdout_fd, "r");   if (dbus_monitor_filep == NULL)     {-      g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "fdopen");+      throw_errno (error, "fdopen failed");       return FALSE;     }+   /* fd is owned by the FILE * now */   g_unix_input_stream_set_close_fd (G_UNIX_INPUT_STREAM (stdout_pipe), FALSE); @@ -619,10 +684,8 @@       /* Cause dbus-monitor to exit next time it tries to write a message */       g_clear_pointer (&dbus_monitor_filep, fclose); -      /* And try to terminate it immediately. When spawning via pkexec we may-       * not be able to kill it.-       */-      g_subprocess_force_exit (self->dbus_monitor);+      /* And try to terminate it immediately. */+      send_sigint (self);        return FALSE;     }@@ -737,9 +800,7 @@    /* cases:    * - G_SPAWN_ERROR / G_SPAWN_ERROR_FAILED / "Child process killed by signal N":-   *   dbus-monitor was killed, possibly by us calling-   *   g_subprocess_force_exit(), though this doesn't work for pkexec'd-   *   dbus-monitor+   *   dbus-monitor was killed, presumably by send_sigint()    * - G_SPAWN_EXIT_ERROR:    *   - 0: bus itself went away (assuming pkexec/flatpak-spawn propagate    *        errors correctly)@@ -765,27 +826,17 @@    */   g_clear_pointer (&self->pcap_in, pcap_close); -  if (self->dbus_monitor != NULL)-    {-      /* Try to make it stop sooner; this has no effect on a privileged-       * dbus-monitor.-       */-      g_subprocess_force_exit (self->dbus_monitor);-    }+  /* And try to terminate it immediately. */+  send_sigint (self); } -static gboolean-initable_init (-    GInitable *initable,-    GCancellable *cancellable,-    GError **error)+static const char **+build_argv (BustlePcapMonitor *self,+            GError **error) {-  BustlePcapMonitor *self = BUSTLE_PCAP_MONITOR (initable);-  gboolean in_flatpak = g_file_test ("/.flatpak-info", G_FILE_TEST_EXISTS);   g_autoptr(GPtrArray) dbus_monitor_argv = g_ptr_array_sized_new (8);-  GInputStream *stdout_pipe = NULL; -  if (in_flatpak)+  if (RUNNING_IN_FLATPAK)     {       g_ptr_array_add (dbus_monitor_argv, "flatpak-spawn");       g_ptr_array_add (dbus_monitor_argv, "--host");@@ -818,11 +869,82 @@       default:         g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,             "Can only log the session bus, system bus, or a given address");-        return FALSE;+        return NULL;     }    g_ptr_array_add (dbus_monitor_argv, NULL);+  return (const char **) g_ptr_array_free (g_steal_pointer (&dbus_monitor_argv), FALSE);+} +/**+ * set_controlling_tty_to_stdin:+ *+ * child_setup function for the dbus-monitor subprocess which arranges for its+ * controlling TTY to be a PTY, so we can send SIGINT to it even if it's+ * privileged.+ */+static void+set_controlling_tty_to_stdin (void *user_data G_GNUC_UNUSED)+{+  /* Move this child process to a new session, unsetting any existing+   * controlling terminal.+   */+  setsid ();++  /* Make stdin (the worker end of a PTY pair) the controlling terminal for+   * this child process.+   */+  ioctl (STDIN_FILENO, TIOCSCTTY, 0);+}++static GSubprocess *+spawn_monitor (BustlePcapMonitor *self,+               const char *const *argv,+               GError **error)+{+  g_autoptr(GSubprocessLauncher) launcher =+    g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE);++  self->pt_master = posix_openpt (O_RDWR | O_NOCTTY | O_CLOEXEC);+  if (self->pt_master < 0)+    return throw_errno (error, "posix_openpt failed");++  if (unlockpt (self->pt_master) < 0)+    return throw_errno (error, "unlockpt failed");++  char sname[PATH_MAX] = { 0 };+  if (ptsname_r (self->pt_master, sname, G_N_ELEMENTS (sname)) != 0)+    return throw_errno (error, "ptsname_r failed");++  int pt_slave = open (sname, O_RDWR);+  if (pt_slave < 0)+    return throw_errno (error, "open(sname) failed");++  g_subprocess_launcher_take_stdin_fd (launcher, pt_slave);+  if (!RUNNING_IN_FLATPAK)+    g_subprocess_launcher_set_child_setup (launcher, set_controlling_tty_to_stdin, NULL, NULL);+  /* otherwise, the session-helper process already does this for us */++  GSubprocess *child = g_subprocess_launcher_spawnv (launcher, argv, error);++  g_close (pt_slave, NULL);+  return child;+}++static gboolean+initable_init (+    GInitable *initable,+    GCancellable *cancellable,+    GError **error)+{+  BustlePcapMonitor *self = BUSTLE_PCAP_MONITOR (initable);+  g_autofree const char **argv = NULL;+  GInputStream *stdout_pipe = NULL;++  argv = build_argv (self, error);+  if (NULL == argv)+    return FALSE;+   if (self->filename == NULL)     {       g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,@@ -851,13 +973,9 @@       return FALSE;     } -  self->dbus_monitor = g_subprocess_newv (-      (const gchar * const *) dbus_monitor_argv->pdata,-      G_SUBPROCESS_FLAGS_STDOUT_PIPE, error);+  self->dbus_monitor = spawn_monitor (self, (const char * const *) argv, error);   if (self->dbus_monitor == NULL)-    {-      return FALSE;-    }+    return FALSE;    stdout_pipe = g_subprocess_get_stdout_pipe (self->dbus_monitor);   g_return_val_if_fail (stdout_pipe != NULL, FALSE);
data/bustle.ui view
@@ -726,7 +726,7 @@                           </object>                           <packing>                             <property name="left_attach">0</property>-                            <property name="top_attach">5</property>+                            <property name="top_attach">6</property>                           </packing>                         </child>                         <child>@@ -747,7 +747,7 @@                           </object>                           <packing>                             <property name="left_attach">1</property>-                            <property name="top_attach">5</property>+                            <property name="top_attach">6</property>                           </packing>                         </child>                         <child>@@ -886,6 +886,38 @@                           <packing>                             <property name="left_attach">1</property>                             <property name="top_attach">2</property>+                          </packing>+                        </child>+                        <child>+                          <object class="GtkLabel" id="detailsErrorNameCaption">+                            <property name="visible">True</property>+                            <property name="can_focus">False</property>+                            <property name="hexpand">False</property>+                            <property name="label" translatable="yes">Error</property>+                            <property name="xalign">1</property>+                            <style>+                              <class name="dim-label"/>+                            </style>+                          </object>+                          <packing>+                            <property name="left_attach">0</property>+                            <property name="top_attach">5</property>+                          </packing>+                        </child>+                        <child>+                          <object class="GtkLabel" id="detailsErrorName">+                            <property name="name">detailsMember</property>+                            <property name="visible">True</property>+                            <property name="can_focus">False</property>+                            <property name="hexpand">True</property>+                            <property name="label">com.example.Placeholder.Error.OhNo</property>+                            <property name="selectable">True</property>+                            <property name="ellipsize">start</property>+                            <property name="xalign">0</property>+                          </object>+                          <packing>+                            <property name="left_attach">1</property>+                            <property name="top_attach">5</property>                           </packing>                         </child>                       </object>
data/org.freedesktop.Bustle.appdata.xml.in view
@@ -2,7 +2,9 @@ <!-- Copyright 2014 Philip Withnall <philip@tecnocode.co.uk> --> <!-- Copyright 2016–2018 Will Thompson <will@willthompson.co.uk> --> <component type="desktop-application">-	<id>org.freedesktop.Bustle.desktop</id>+	<id>org.freedesktop.Bustle</id>+	<launchable type="desktop-id">org.freedesktop.Bustle.desktop</launchable>+	<content_rating type="oars-1.1" /> 	<metadata_license>CC-BY-SA-3.0</metadata_license> 	<name>Bustle</name> 	<summary>Draw sequence diagrams of D-Bus activity</summary>@@ -32,13 +34,19 @@ 			<caption>Relax with this soothing greyscale welcome page</caption> 		</screenshot> 	</screenshots>-	<url type="homepage">https://www.freedesktop.org/wiki/Software/Bustle/</url>+	<url type="homepage">https://gitlab.freedesktop.org/bustle/bustle#readme</url> 	<update_contact>will_at_willthompson.co.uk</update_contact> 	<translation type="gettext">bustle</translation> 	<provides> 		<id>bustle.desktop</id> 	</provides> 	<releases>+		<release date="2018-12-07" version="0.7.4">+			<description>+				<p>In the details for an error reply, the error name is now shown, and the error message is formatted more legibly.</p>+				<p>The default file extension for log files is now ‘.pcap’, reflecting what they actually are.</p>+			</description>+		</release> 		<release date="2018-11-15" version="0.7.3"> 			<description> 				<p>Bustle now handles the application/vnd.tcpdump.pcap MIME type, which in practice means that your file manager will offer to open pcap files with Bustle.</p>
+ po/en_GB.po view
@@ -0,0 +1,327 @@+# SOME DESCRIPTIVE TITLE.+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER+# This file is distributed under the same license as the PACKAGE package.+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.+# +# Translators:+# Will Thompson <wjt@endlessm.com>, 2018+# +#, fuzzy+msgid ""+msgstr ""+"Project-Id-Version: PACKAGE VERSION\n"+"Report-Msgid-Bugs-To: \n"+"POT-Creation-Date: 2018-11-15 08:51+0000\n"+"PO-Revision-Date: 2018-11-15 09:57+0000\n"+"Last-Translator: Will Thompson <wjt@endlessm.com>, 2018\n"+"Language-Team: English (United Kingdom) (https://www.transifex.com/bustle/teams/6754/en_GB/)\n"+"MIME-Version: 1.0\n"+"Content-Type: text/plain; charset=UTF-8\n"+"Content-Transfer-Encoding: 8bit\n"+"Language: en_GB\n"+"Plural-Forms: nplurals=2; plural=(n != 1);\n"++#: Bustle/StatisticsPane.hs:189 Bustle/StatisticsPane.hs:192+msgid "%.1f ms"+msgstr ""++#: Bustle/Noninteractive.hs:55+msgid "(no interface)"+msgstr ""++#: Bustle/UI/AboutDialog.hs:46 data/bustle.ui:101+#: data/org.freedesktop.Bustle.desktop.in:3+#: data/org.freedesktop.Bustle.appdata.xml.in:6+msgid "Bustle"+msgstr ""++#: Bustle/StatisticsPane.hs:190+msgid "Calls"+msgstr ""++#: Bustle/UI.hs:456+msgid "Close _Without Saving"+msgstr ""++#: Bustle/UI.hs:226+msgid "Could not read '%s'"+msgstr "Could not read ‘%s’"++#: Bustle/UI.hs:763+msgid "Couldn't export log as PDF: "+msgstr "Couldn’t export log as PDF: OH NO"++#: Bustle/Noninteractive.hs:48+msgid "Couldn't parse '%s': %s"+msgstr "Couldn’t parse ‘%s’: %s"++#: Bustle/UI.hs:431+msgid "Couldn't save log: "+msgstr "Couldn’t save log: "++#: Bustle/StatisticsPane.hs:222 data/bustle.ui:787+msgid "Error"+msgstr ""++#: Bustle/StatisticsPane.hs:150+msgid "Frequency"+msgstr ""++#: Bustle/UI.hs:455+msgid "If you don't save, this log will be lost forever."+msgstr "If you don’t save, this log will be lost forever."++#: Bustle/StatisticsPane.hs:229+msgid "Largest"+msgstr ""++#: Bustle/UI.hs:239+msgid "Logged <b>%u</b> messages"+msgstr ""++#: Bustle/StatisticsPane.hs:191 Bustle/StatisticsPane.hs:228+msgid "Mean"+msgstr ""++#: Bustle/StatisticsPane.hs:135 Bustle/StatisticsPane.hs:213+#: data/bustle.ui:688+msgid "Member"+msgstr ""++#: Bustle/StatisticsPane.hs:142 Bustle/StatisticsPane.hs:179+msgid "Method"+msgstr ""++#: Bustle/StatisticsPane.hs:220 data/bustle.ui:762+msgid "Method call"+msgstr ""++#: Bustle/StatisticsPane.hs:221 data/bustle.ui:774+msgid "Method return"+msgstr ""++#: Bustle/UI.hs:348+msgid "Recording %s&#8230;"+msgstr ""++#: Bustle/UI.hs:448+msgid "Save log '%s' before closing?"+msgstr ""++#: Bustle/StatisticsPane.hs:143 Bustle/StatisticsPane.hs:223+#: data/bustle.ui:800+msgid "Signal"+msgstr ""++#: Bustle/StatisticsPane.hs:227+msgid "Smallest"+msgstr ""++#: Bustle/UI/AboutDialog.hs:48+msgid "Someone's favourite D-Bus profiler"+msgstr "Someone’s favourite D-Bus profiler"++#: Bustle/StatisticsPane.hs:188+msgid "Total"+msgstr ""++#: Bustle/UI/FilterDialog.hs:123+msgid ""+"Unticking a service hides its column in the diagram, and all messages it is "+"involved in. That is, all methods it calls or are called on it, the "+"corresponding returns, and all signals it emits will be hidden."+msgstr ""++#: Bustle/Util.hs:48+msgid "Warning: "+msgstr ""++#: Bustle/UI.hs:433+msgid ""+"You might want to manually recover the log from the temporary file at "+"\"%s\"."+msgstr ""++#: data/bustle.ui:14+msgid "_Filter Visible Services…"+msgstr ""++#: data/bustle.ui:24+msgid "_Statistics"+msgstr ""++#: data/bustle.ui:62+msgid ""+"Display two logs—one for the session bus, one for the system bus—side by "+"side."+msgstr ""++#: data/bustle.ui:63+msgid "O_pen a Pair of Logs…"+msgstr ""++#: data/bustle.ui:75+msgid "Record S_ession Bus"+msgstr ""++#: data/bustle.ui:84+msgid "Record S_ystem Bus"+msgstr ""++#: data/bustle.ui:93+msgid "Record _Address…"+msgstr ""++#: data/bustle.ui:138+msgid "Record a new log"+msgstr ""++#: data/bustle.ui:149+msgid "_Record"+msgstr ""++#: data/bustle.ui:182+msgid "_Stop"+msgstr ""++#: data/bustle.ui:200+msgid "Open an existing log"+msgstr ""++#: data/bustle.ui:310+msgid "Export as PDF"+msgstr ""++#: data/bustle.ui:334+msgid "Save"+msgstr ""++#: data/bustle.ui:493+msgid ""+"Start recording D-Bus activity with the <b>Record</b> button above\n"+" You can also run <i>dbus-monitor --pcap</i> from the command line"+msgstr ""++#: data/bustle.ui:512+msgid "Welcome to Bustle"+msgstr ""++#: data/bustle.ui:537+msgid "<big><b>Waiting for D-Bus traffic; please hold…</b></big>"+msgstr ""++#: data/bustle.ui:564+msgid "Frequencies"+msgstr ""++#: data/bustle.ui:578+msgid "Durations"+msgstr ""++#: data/bustle.ui:593+msgid "Sizes"+msgstr ""++#: data/bustle.ui:640+msgid "Type"+msgstr ""++#: data/bustle.ui:656+msgid "Path"+msgstr ""++#: data/bustle.ui:720+msgid "Arguments"+msgstr ""++#: data/bustle.ui:813+msgid "Directed signal"+msgstr ""++#: data/bustle.ui:832+msgid "Sender"+msgstr ""++#: data/bustle.ui:848+msgid "Destination"+msgstr ""++#: data/org.freedesktop.Bustle.desktop.in:4+#: data/org.freedesktop.Bustle.appdata.xml.in:7+msgid "Draw sequence diagrams of D-Bus activity"+msgstr ""++#: data/org.freedesktop.Bustle.desktop.in:6+msgid "org.freedesktop.Bustle"+msgstr ""++#: data/org.freedesktop.Bustle.desktop.in:11+msgid "debug;profile;d-bus;dbus;sequence;monitor;"+msgstr ""++#. Translators: These are the application description paragraphs in the+#. AppData file.+#: data/org.freedesktop.Bustle.appdata.xml.in:10+msgid ""+"Bustle draws sequence diagrams of D-Bus activity. It shows signal emissions,"+" method calls and their corresponding returns, with time stamps for each "+"individual event and the duration of each method call. This can help you "+"check for unwanted D-Bus traffic, and pinpoint why your D-Bus-based "+"application is not performing as well as you like. It also provides "+"statistics like signal frequencies and average method call times."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:23+msgid "Explore sequence diagrams of D-Bus activity"+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:27+msgid "See statistics summarizing the log"+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:31+msgid "Relax with this soothing greyscale welcome page"+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:43+msgid ""+"Bustle now handles the application/vnd.tcpdump.pcap MIME type, which in "+"practice means that your file manager will offer to open pcap files with "+"Bustle."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:48+msgid ""+"You can now explore messages while they're being recorded. (Filtering, "+"statistics and exporting are still only available once you stop recording.)"+msgstr ""+"You can now explore messages while they’re being recorded. (Filtering, "+"statistics and exporting are still only available once you stop recording.)"++#: data/org.freedesktop.Bustle.appdata.xml.in:49+msgid ""+"The raw sender and destination for each message is now shown in the details "+"pane."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:50+msgid ""+"Bytestrings with embedded NULs which are otherwise ASCII are now shown as "+"ASCII strings."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:55+msgid ""+"It's now possible to monitor the system bus (from the user interface and "+"with the bustle-pcap command-line tool), with no need to reconfigure the "+"system bus. It's also possible to monitor an arbitrary bus by address."+msgstr ""+"It’s now possible to monitor the system bus (from the user interface and "+"with the bustle-pcap command-line tool), with no need to reconfigure the "+"system bus. It’s also possible to monitor an arbitrary bus by address."++#: data/org.freedesktop.Bustle.appdata.xml.in:56+msgid ""+"Bustle now requires that dbus-monitor (≥ 1.9.10) and pkexec are installed on"+" your system."+msgstr ""
po/messages.pot view
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2018-11-15 08:51+0000\n"+"POT-Creation-Date: 2018-12-07 09:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -27,7 +27,7 @@  #: Bustle/UI/AboutDialog.hs:46 data/bustle.ui:101 #: data/org.freedesktop.Bustle.desktop.in:3-#: data/org.freedesktop.Bustle.appdata.xml.in:6+#: data/org.freedesktop.Bustle.appdata.xml.in:9 msgid "Bustle" msgstr "" @@ -55,7 +55,7 @@ msgid "Couldn't save log: " msgstr "" -#: Bustle/StatisticsPane.hs:222 data/bustle.ui:787+#: Bustle/StatisticsPane.hs:222 data/bustle.ui:787 data/bustle.ui:896 msgid "Error" msgstr "" @@ -240,7 +240,7 @@ msgstr ""  #: data/org.freedesktop.Bustle.desktop.in:4-#: data/org.freedesktop.Bustle.appdata.xml.in:7+#: data/org.freedesktop.Bustle.appdata.xml.in:10 msgid "Draw sequence diagrams of D-Bus activity" msgstr "" @@ -253,7 +253,7 @@ msgstr ""  #. Translators: These are the application description paragraphs in the AppData file.-#: data/org.freedesktop.Bustle.appdata.xml.in:10+#: data/org.freedesktop.Bustle.appdata.xml.in:13 msgid "" "Bustle draws sequence diagrams of D-Bus activity. It shows signal emissions, " "method calls and their corresponding returns, with time stamps for each "@@ -263,51 +263,63 @@ "statistics like signal frequencies and average method call times." msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:23+#: data/org.freedesktop.Bustle.appdata.xml.in:26 msgid "Explore sequence diagrams of D-Bus activity" msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:27+#: data/org.freedesktop.Bustle.appdata.xml.in:30 msgid "See statistics summarizing the log" msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:31+#: data/org.freedesktop.Bustle.appdata.xml.in:34 msgid "Relax with this soothing greyscale welcome page" msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:43+#: data/org.freedesktop.Bustle.appdata.xml.in:46 msgid ""+"In the details for an error reply, the error name is now shown, and the "+"error message is formatted more legibly."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:47+msgid ""+"The default file extension for log files is now ‘.pcap’, reflecting what "+"they actually are."+msgstr ""++#: data/org.freedesktop.Bustle.appdata.xml.in:52+msgid "" "Bustle now handles the application/vnd.tcpdump.pcap MIME type, which in " "practice means that your file manager will offer to open pcap files with " "Bustle." msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:48+#: data/org.freedesktop.Bustle.appdata.xml.in:57 msgid "" "You can now explore messages while they're being recorded. (Filtering, " "statistics and exporting are still only available once you stop recording.)" msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:49+#: data/org.freedesktop.Bustle.appdata.xml.in:58 msgid "" "The raw sender and destination for each message is now shown in the details " "pane." msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:50+#: data/org.freedesktop.Bustle.appdata.xml.in:59 msgid "" "Bytestrings with embedded NULs which are otherwise ASCII are now shown as " "ASCII strings." msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:55+#: data/org.freedesktop.Bustle.appdata.xml.in:64 msgid "" "It's now possible to monitor the system bus (from the user interface and " "with the bustle-pcap command-line tool), with no need to reconfigure the " "system bus. It's also possible to monitor an arbitrary bus by address." msgstr "" -#: data/org.freedesktop.Bustle.appdata.xml.in:56+#: data/org.freedesktop.Bustle.appdata.xml.in:65 msgid "" "Bustle now requires that dbus-monitor (≥ 1.9.10) and pkexec are installed on " "your system."