summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/src/CalDuration.jsm
blob: cb289bdde452af90f6a65969f164172831aab096 (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

var EXPORTED_SYMBOLS = ["CalDuration"];

const { ICAL, unwrap } = ChromeUtils.import("resource:///modules/calendar/Ical.jsm");

function CalDuration(innerObject) {
  this.innerObject = innerObject || new ICAL.Duration();
  this.wrappedJSObject = this;
}

CalDuration.prototype = {
  QueryInterface: ChromeUtils.generateQI(["calIDuration"]),
  classID: Components.ID("{7436f480-c6fc-4085-9655-330b1ee22288}"),

  get icalDuration() {
    return this.innerObject;
  },
  set icalDuration(val) {
    this.innerObject = val;
  },

  isMutable: true,
  makeImmutable() {
    this.isMutable = false;
  },
  clone() {
    return new CalDuration(this.innerObject.clone());
  },

  get isNegative() {
    return this.innerObject.isNegative;
  },
  set isNegative(val) {
    this.innerObject.isNegative = !!val;
  },

  get weeks() {
    return this.innerObject.weeks;
  },
  set weeks(val) {
    this.innerObject.weeks = parseInt(val, 10);
  },

  get days() {
    return this.innerObject.days;
  },
  set days(val) {
    this.innerObject.days = parseInt(val, 10);
  },

  get hours() {
    return this.innerObject.hours;
  },
  set hours(val) {
    this.innerObject.hours = parseInt(val, 10);
  },

  get minutes() {
    return this.innerObject.minutes;
  },
  set minutes(val) {
    this.innerObject.minutes = parseInt(val, 10);
  },

  get seconds() {
    return this.innerObject.seconds;
  },
  set seconds(val) {
    this.innerObject.seconds = parseInt(val, 10);
  },

  get inSeconds() {
    return this.innerObject.toSeconds();
  },
  set inSeconds(val) {
    this.innerObject.fromSeconds(val);
  },

  addDuration: unwrap(ICAL.Duration, function (val) {
    this.innerObject.fromSeconds(this.innerObject.toSeconds() + val.toSeconds());
  }),

  compare: unwrap(ICAL.Duration, function (val) {
    return this.innerObject.compare(val);
  }),

  reset() {
    this.innerObject.reset();
  },
  normalize() {
    this.innerObject.normalize();
  },
  toString() {
    return this.innerObject.toString();
  },

  get icalString() {
    return this.innerObject.toString();
  },
  set icalString(val) {
    this.innerObject = ICAL.Duration.fromString(val);
  },
};