~charlesk/indicator-transfer/fix-flint-and-clang-warnings

« back to all changes in this revision

Viewing changes to src/world-dbus.cpp

  • Committer: CI bot
  • Author(s): Charles Kerr
  • Date: 2014-07-07 22:22:21 UTC
  • mfrom: (6.1.9 per-transfer-actions)
  • Revision ID: ps-jenkins@lists.canonical.com-20140707222221-5o6gsim4jnmfy6ry
Create per-transfer actions for simpler state lookup by renderers. Previously this was done as a single action that contained a map of unique transfer ids to states. 
Approved by: Ted Gould, Ted Gould

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
  {
43
43
    g_debug("creating a new DBusTransfer for '%s'", object_path);
44
44
 
45
 
    id = object_path;
 
45
    id = next_unique_id();
46
46
    time_started = time(nullptr);
47
47
 
48
48
    get_properties_from_bus();
83
83
    call_method_no_args_no_response("cancel");
84
84
  }
85
85
 
86
 
  // the 'started', 'paused', 'resumed', and 'canceled' signals
87
 
  // from com.canonical.applications.Download all have a single
88
 
  // parameter, a boolean success flag.
89
 
  bool get_signal_success_arg(GVariant* parameters)
 
86
  const std::string& object_path() const
90
87
  {
91
 
    gboolean success = false;
92
 
    g_return_val_if_fail(g_variant_is_container(parameters), false);
93
 
    g_return_val_if_fail(g_variant_n_children(parameters) == 1, false);
94
 
    g_variant_get_child(parameters, 0, "b", &success);
95
 
    return success;
 
88
    return m_object_path;
96
89
  }
97
90
 
98
91
  void handle_signal(const gchar* signal_name, GVariant* parameters)
156
149
 
157
150
private:
158
151
 
 
152
  // the 'started', 'paused', 'resumed', and 'canceled' signals
 
153
  // from com.canonical.applications.Download all have a single
 
154
  // parameter, a boolean success flag.
 
155
  bool get_signal_success_arg(GVariant* parameters)
 
156
  {
 
157
    gboolean success = false;
 
158
    g_return_val_if_fail(g_variant_is_container(parameters), false);
 
159
    g_return_val_if_fail(g_variant_n_children(parameters) == 1, false);
 
160
    g_variant_get_child(parameters, 0, "b", &success);
 
161
    return success;
 
162
  }
 
163
 
159
164
  void call_method_no_args_no_response(const char* method_name)
160
165
  {
161
166
    g_dbus_connection_call(m_bus,                  // connection
515
520
    }
516
521
}
517
522
 
 
523
namespace
 
524
{
 
525
  std::shared_ptr<DBusTransfer>
 
526
  find_dbus_transfer_for_object_path(const std::shared_ptr<Model>& model,
 
527
                                     const std::string& object_path)
 
528
  {
 
529
    std::shared_ptr<DBusTransfer> dbus_transfer;
 
530
 
 
531
    for (const auto& transfer : model->get_all())
 
532
      {
 
533
        const auto tmp = std::static_pointer_cast<DBusTransfer>(transfer);
 
534
 
 
535
        if (tmp && (tmp->object_path()==object_path))
 
536
          {
 
537
             dbus_transfer = tmp;
 
538
             break;
 
539
          }
 
540
      }
 
541
 
 
542
    return dbus_transfer;
 
543
  }
 
544
}
 
545
 
518
546
void DBusWorld::on_download_signal(GDBusConnection*, //connection,
519
547
                                  const gchar*,      //sender_name,
520
548
                                  const gchar*         object_path,
525
553
{
526
554
  auto self = static_cast<DBusWorld*>(gself);
527
555
 
528
 
  auto transfer = self->m_model->get(object_path);
529
 
  if (!transfer)
 
556
  auto dbus_transfer = find_dbus_transfer_for_object_path(self->m_model, object_path);
 
557
 
 
558
  if (!dbus_transfer)
530
559
    {
531
560
      g_message("A %s that we didn't know about just emitted signal '%s' -- "
532
561
                "might be a transfer that was here before us?",
533
562
                DOWNLOAD_IFACE_NAME, signal_name);
534
563
      self->add_transfer(object_path);
535
 
      transfer = self->m_model->get(object_path);
536
 
      g_return_if_fail (transfer);
 
564
      dbus_transfer = find_dbus_transfer_for_object_path(self->m_model, object_path);
 
565
      g_return_if_fail (dbus_transfer);
537
566
    }
538
567
 
539
 
  std::static_pointer_cast<DBusTransfer>(transfer)->handle_signal(signal_name,
540
 
                                                                  parameters);
 
568
  dbus_transfer->handle_signal(signal_name, parameters);
541
569
}
542
570
 
543
571
void DBusWorld::on_download_created(GDBusConnection*, //connection,
568
596
  m_model->add(transfer);
569
597
 
570
598
  // notify the model whenever the Transfer changes
571
 
  const std::string id = object_path;
 
599
  const auto id = dbus_transfer->id;
572
600
  dbus_transfer->changed().connect([this,id]{
573
601
    if (m_model->get(id))
574
602
      m_model->emit_changed(id);