~ubuntu-branches/ubuntu/utopic/indicator-transfer/utopic

« back to all changes in this revision

Viewing changes to src/world-dbus.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Charles Kerr
  • Date: 2014-10-09 13:39:39 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20141009133939-oakbb7kbct19uspb
Tags: 0.1+14.10.20141009-0ubuntu1
[ Charles Kerr ]
Throttle how frequently a transfer item updates its action state and
menuitem. (LP: #1378941)

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
 
73
73
  ~DBusTransfer()
74
74
  {
 
75
    if (m_changed_tag)
 
76
      g_source_remove(m_changed_tag);
 
77
 
75
78
    g_cancellable_cancel(m_cancellable);
76
79
    g_clear_object(&m_cancellable);
77
80
    g_clear_object(&m_bus);
239
242
    g_clear_pointer(&v, g_variant_unref);
240
243
  }
241
244
 
242
 
  void emit_changed() { changed()(); }
 
245
  void emit_changed_soon()
 
246
  {
 
247
    if (m_changed_tag == 0)
 
248
        m_changed_tag = g_timeout_add_seconds(1, emit_changed_now, this);
 
249
  }
 
250
 
 
251
  static gboolean emit_changed_now(gpointer gself)
 
252
  {
 
253
    auto self = static_cast<DBusTransfer*>(gself);
 
254
    self->m_changed_tag = 0;
 
255
    self->m_changed();
 
256
    return G_SOURCE_REMOVE;
 
257
  }
243
258
 
244
259
  /* The 'started', 'paused', 'resumed', and 'canceled' signals
245
260
     from com.canonical.applications.Download all have a single
337
352
      }
338
353
 
339
354
    if (changed)
340
 
      emit_changed();
 
355
      emit_changed_soon();
341
356
  }
342
357
 
343
358
  void set_state(State state_in)
352
367
            m_history.clear();
353
368
          }
354
369
 
355
 
        emit_changed();
 
370
        emit_changed_soon();
356
371
      }
357
372
  }
358
373
 
363
378
    {
364
379
      g_debug("changing '%s' error to '%s'", m_ccad_path.c_str(), tmp.c_str());
365
380
      error_string = tmp;
366
 
      emit_changed();
 
381
      emit_changed_soon();
367
382
    }
368
383
  }
369
384
 
374
389
      {
375
390
        g_debug("changing '%s' path to '%s'", m_ccad_path.c_str(), tmp.c_str());
376
391
        local_path = tmp;
377
 
        emit_changed();
 
392
        emit_changed_soon();
378
393
      }
379
394
 
380
395
    // If we don't already have a title,
394
409
      {
395
410
        g_debug("changing '%s' title to '%s'", m_ccad_path.c_str(), tmp.c_str());
396
411
        title = tmp;
397
 
        emit_changed();
 
412
        emit_changed_soon();
398
413
      }
399
414
  }
400
415
 
460
475
      {
461
476
        g_debug("changing '%s' icon to '%s'", m_ccad_path.c_str(), tmp.c_str());
462
477
        app_icon = tmp;
463
 
        emit_changed();
 
478
        emit_changed_soon();
464
479
      }
465
480
  }
466
481
 
589
604
 
590
605
  core::Signal<> m_changed;
591
606
 
 
607
  uint32_t m_changed_tag = 0;
592
608
  uint64_t m_received = 0;
593
609
  uint64_t m_total_size = 0;
594
610
  struct DownloadProgress {
763
779
                          const gchar* signal_name,
764
780
                          GVariant* parameters)
765
781
  {
766
 
    g_debug("transfer signal: %s %s %s", cucdt_path, signal_name, g_variant_print(parameters, TRUE));
 
782
    gchar* variant_str = g_variant_print(parameters, TRUE);
 
783
    g_debug("transfer signal: %s %s %s", cucdt_path, signal_name, variant_str);
 
784
    g_free(variant_str);
767
785
 
768
786
    if (!g_strcmp0(signal_name, "DownloadIdChanged"))
769
787
      {
792
810
                                 GVariant*          parameters,
793
811
                                 gpointer           gself)
794
812
  {
795
 
    g_debug("download signal: %s %s %s", ccad_path, signal_name, g_variant_print(parameters, TRUE));
 
813
    gchar* variant_str = g_variant_print(parameters, TRUE);
 
814
    g_debug("download signal: %s %s %s", ccad_path, signal_name, variant_str);
 
815
    g_free(variant_str);
796
816
 
797
817
    // Route this signal to the DBusTransfer for processing 
798
818
    auto self = static_cast<Impl*>(gself);