File: common.go

package info (click to toggle)
golang-gitlab-ubports-development-core-go-ldm 0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 120 kB
  • sloc: makefile: 4
file content (89 lines) | stat: -rw-r--r-- 2,235 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
 * Copyright 2014 Canonical Ltd.
 * Copyright 2024 Guido Berhoerster <guido+ubports@berhoerster.name>
 *
 * Authors:
 * Manuel de la Pena: manuel.delapena@canonical.com
 *
 * This file is part of lomiri-download-manager.
 *
 * lomiri-download-manager is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3.
 *
 * lomiri-download-manager is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

// Package ldm provides a go interface to work with the lomiri download manager
package ldm

import (
	"github.com/godbus/dbus/v5"
)

// Progress provides how much progress has been performed in a download that was
// already started.
type Progress struct {
	Received uint64
	Total    uint64
}

// interface added to simplify testing
type proxy interface {
	Call(method string, flags dbus.Flags, args ...interface{}) *dbus.Call
}

var readCallArgs = func(c *dbus.Call, args ...interface{}) error {
	return c.Store(args...)
}

var readSignalArgs = func(s *dbus.Signal, args ...interface{}) error {
	return dbus.Store(s.Body, args...)
}

func getUint64Value(p proxy, method string) (value uint64, err error) {
	c := p.Call(method, 0)
	if c.Err != nil {
		err = c.Err
		return
	}

	err = readCallArgs(c, &value)
	return
}

func setUint64Value(p proxy, method string, value uint64) error {
	return p.Call(method, 0, value).Err
}

func setStringValue(p proxy, method, value string) error {
	return p.Call(method, 0, value).Err
}

func getBoolValue(p proxy, method string) (value bool, err error) {
	c := p.Call(method, 0)
	if c.Err != nil {
		err = c.Err
		return
	}

	err = readCallArgs(c, &value)
	return
}

func getMetadataMap(p proxy, method string) (value map[string]string, err error) {
	c := p.Call(method, 0)
	if c.Err != nil {
		err = c.Err
		return
	}

	err = readCallArgs(c, &value)
	return
}