Merge lp:~gary-wzl77/ubuntu-calendar-app/dynamic_creation_perf_tunning into lp:ubuntu-calendar-app

Proposed by Gary.Wang
Status: Merged
Merge reported by: Gary.Wang
Merged at revision: not available
Proposed branch: lp:~gary-wzl77/ubuntu-calendar-app/dynamic_creation_perf_tunning
Merge into: lp:ubuntu-calendar-app
Diff against target: 658 lines (+172/-175)
8 files modified
ContactChoicePopup.qml (+1/-1)
EventBubble.qml (+2/-2)
EventListModel.qml (+1/-2)
NewEvent.qml (+1/-0)
YearView.qml (+7/-1)
YearViewDelegate.qml (+13/-9)
calendar.qml (+106/-123)
po/com.ubuntu.calendar.pot (+41/-37)
To merge this branch: bzr merge lp:~gary-wzl77/ubuntu-calendar-app/dynamic_creation_perf_tunning
Reviewer Review Type Date Requested Status
Ubuntu Phone Apps Jenkins Bot continuous-integration Needs Fixing
Kunal Parmar Approve
Review via email: mp+258449@code.launchpad.net

Commit message

performance tuning

Description of the change

Performance tunning for page transition.
Page Transition between different views will cause dynamic creation(Qt.ResolvedUrl)
for qml object back and forth.Using Qt.CreateComponent for dynamic creation for 1st
time and reuse exsiting obj without re-creating.

related bugs:#1423185,#1309263

To post a comment you must log in.
Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

Originally we were destroying Pages to conserve memory, but it that's not issue anymore. Then this MR looks good to me.

I will test some more and approve it.

Thanks for MR and taking your time to improve calendar

Revision history for this message
Gary.Wang (gary-wzl77) wrote :

Kunal, have u fun with this MR. Still two clear UI bugs has been fixed.
Pls approve.

BTW: Have u check this one on ur devices? it's marked as FIX COMMITTED.
     https://bugs.launchpad.net/ubuntu-calendar-app/+bug/1438910
     I can see it's still exciting with latest repo on 15.04(r211)

Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

sorry forgot about this MR, I will test this today night before calendar meeting and approve.

Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

looks good to me, thanks for MR

review: Approve
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :

FAILED: Autolanding.
No commit message was specified in the merge proposal. Hit 'Add commit message' on the merge proposal web page or follow the link below. You can approve the merge proposal yourself to rerun.
https://code.launchpad.net/~gary-wzl77/ubuntu-calendar-app/dynamic_creation_perf_tunning/+merge/258449/+edit-commit-message

review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ContactChoicePopup.qml'
--- ContactChoicePopup.qml 2014-09-20 10:45:35 +0000
+++ ContactChoicePopup.qml 2015-05-14 03:37:54 +0000
@@ -94,7 +94,7 @@
94 objectName: "contactPopoverList"94 objectName: "contactPopoverList"
95 width: parent.width95 width: parent.width
96 model: contactModel96 model: contactModel
97 height: units.gu(30)97 height: units.gu(15)
98 clip: true98 clip: true
99 delegate: Standard{99 delegate: Standard{
100 objectName: "contactPopoverList%1".arg(index)100 objectName: "contactPopoverList%1".arg(index)
101101
=== modified file 'EventBubble.qml'
--- EventBubble.qml 2015-01-22 19:34:59 +0000
+++ EventBubble.qml 2015-05-14 03:37:54 +0000
@@ -221,8 +221,8 @@
221 anchors.fill: parent221 anchors.fill: parent
222 drag.target: isLiveEditing ? infoBubble : null222 drag.target: isLiveEditing ? infoBubble : null
223 drag.axis: Drag.YAxis223 drag.axis: Drag.YAxis
224 drag.minimumY: flickable.y224 drag.minimumY: flickable === null? 0: flickable.y
225 drag.maximumY: flickable.contentHeight - infoBubble.height225 drag.maximumY: flickable === null? 0 :flickable.contentHeight - infoBubble.height
226 onReleased: parent.Drag.drop()226 onReleased: parent.Drag.drop()
227 onClicked: {227 onClicked: {
228 if( isLiveEditing ) {228 if( isLiveEditing ) {
229229
=== modified file 'EventListModel.qml'
--- EventListModel.qml 2014-09-28 05:25:31 +0000
+++ EventListModel.qml 2015-05-14 03:37:54 +0000
@@ -44,7 +44,7 @@
44 var newObject = Qt.createQmlObject("import QtQuick 2.3; Timer {interval: 1000; running: true; repeat: false;}",44 var newObject = Qt.createQmlObject("import QtQuick 2.3; Timer {interval: 1000; running: true; repeat: false;}",
45 eventModel, "EventListMode.qml");45 eventModel, "EventListMode.qml");
46 newObject.onTriggered.connect( function(){46 newObject.onTriggered.connect( function(){
47 var items = getItems(eventModel.startPeriod, eventModel.endPeriod);47 var items = itemsByTimePeriod(eventModel.startPeriod, eventModel.endPeriod);
48 if( isLoading == true && items.length === 0) {48 if( isLoading == true && items.length === 0) {
49 isLoading = false;49 isLoading = false;
50 modelChanged();50 modelChanged();
@@ -53,7 +53,6 @@
53 });53 });
54 }54 }
5555
56
57 onModelChanged: {56 onModelChanged: {
58 isLoading = false57 isLoading = false
59 if(listeners === undefined){58 if(listeners === undefined){
6059
=== modified file 'NewEvent.qml'
--- NewEvent.qml 2015-04-05 04:54:54 +0000
+++ NewEvent.qml 2015-05-14 03:37:54 +0000
@@ -219,6 +219,7 @@
219 event.collectionId = calendarsOption.model[calendarsOption.selectedIndex].collectionId;219 event.collectionId = calendarsOption.model[calendarsOption.selectedIndex].collectionId;
220 model.saveItem(event);220 model.saveItem(event);
221 pageStack.pop();221 pageStack.pop();
222
222 root.eventAdded(event);223 root.eventAdded(event);
223 }224 }
224 }225 }
225226
=== modified file 'YearView.qml'
--- YearView.qml 2015-02-18 19:27:20 +0000
+++ YearView.qml 2015-05-14 03:37:54 +0000
@@ -29,6 +29,12 @@
2929
30 Keys.forwardTo: [yearPathView]30 Keys.forwardTo: [yearPathView]
3131
32 function refreshCurrentYear(year) {
33 currentYear = year;
34 var yearViewDelegate = yearPathView.currentItem.item;
35 yearViewDelegate.refresh();
36 }
37
32 Action {38 Action {
33 id: calendarTodayAction39 id: calendarTodayAction
34 objectName:"todaybutton"40 objectName:"todaybutton"
@@ -85,7 +91,7 @@
8591
86 scrollMonth: 0;92 scrollMonth: 0;
87 isCurrentItem: index == yearPathView.currentIndex93 isCurrentItem: index == yearPathView.currentIndex
88 year: (yearViewPage.currentYear + yearPathView.indexType(index))94 year: (currentYear + yearPathView.indexType(index))
8995
90 anchors.fill: parent96 anchors.fill: parent
91 }97 }
9298
=== modified file 'YearViewDelegate.qml'
--- YearViewDelegate.qml 2014-11-29 09:40:53 +0000
+++ YearViewDelegate.qml 2015-05-14 03:37:54 +0000
@@ -18,6 +18,19 @@
18 model: 12 /* months in a year */18 model: 12 /* months in a year */
1919
20 onYearChanged: {20 onYearChanged: {
21 refresh();
22 }
23
24 //scroll in case content height changed
25 onHeightChanged: {
26 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);
27 }
28
29 Component.onCompleted: {
30 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);
31 }
32
33 function refresh() {
21 scrollMonth = 0;34 scrollMonth = 0;
22 var today = new Date();35 var today = new Date();
23 if(year == today.getFullYear()) {36 if(year == today.getFullYear()) {
@@ -26,15 +39,6 @@
26 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);39 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);
27 }40 }
2841
29 //scroll in case content height changed
30 onHeightChanged: {
31 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);
32 }
33
34 Component.onCompleted: {
35 yearView.positionViewAtIndex(scrollMonth, GridView.Beginning);
36 }
37
38 Connections{42 Connections{
39 target: yearPathView43 target: yearPathView
40 onScrollUp: {44 onScrollUp: {
4145
=== modified file 'calendar.qml'
--- calendar.qml 2015-01-22 20:07:30 +0000
+++ calendar.qml 2015-05-14 03:37:54 +0000
@@ -186,7 +186,7 @@
186186
187 Tabs{187 Tabs{
188 id: tabs188 id: tabs
189 Keys.forwardTo: [tabs.currentPage.item]189 Keys.forwardTo: [tabs.currentPage]
190190
191 property var currentDay: DateExt.today();191 property var currentDay: DateExt.today();
192192
@@ -316,156 +316,139 @@
316 }316 }
317 }317 }
318318
319 onSelectedTabChanged: {
320 switch (tabs.selectedTab) {
321 case yearTab:{
322 if (yearTab.page === null) {
323 var yearViewCom = Qt.createComponent("YearView.qml");
324 if (yearViewCom.status === Component.Ready) {
325 var yearViewObj = yearViewCom.createObject(mainView);
326
327 yearViewObj.monthSelected.connect(function (date){
328 var now = DateExt.today();
329 if( date.getMonth() === now.getMonth()
330 && date.getFullYear() === now.getFullYear()) {
331 tabs.currentDay = now;
332 } else {
333 tabs.currentDay = date.midnight();
334 }
335 tabs.selectedTabIndex = monthTab.index;
336 })
337
338 yearTab.page = yearViewObj;
339 }
340 } else {
341 yearTab.page.refreshCurrentYear(DateExt.today().getFullYear());
342 }
343 } break;
344 case monthTab: {
345 if (monthTab.page === null) {
346 var monthViewCom = Qt.createComponent("MonthView.qml");
347 if (monthViewCom.status === Component.Ready) {
348 var monthViewObj = monthViewCom.createObject(mainView);
349
350 monthViewObj.dateSelected.connect(function (date) {
351 tabs.currentDay = date;
352 tabs.selectedTabIndex = dayTab.index;
353 })
354
355 monthTab.page = monthViewObj;
356 }
357 } else {
358 monthTab.page.currentMonth = tabs.currentDay.midnight();
359 }
360 } break;
361 case weekTab: {
362 if (weekTab.page === null) {
363 var weekViewCom = Qt.createComponent("WeekView.qml");
364 if (weekViewCom.status === Component.Ready) {
365 var weekViewObj = weekViewCom.createObject(mainView);
366
367 weekViewObj.isCurrentPage = Qt.binding(function() { return tabs.selectedTab == weekTab })
368 weekViewObj.onDayStartChanged.connect(function (){
369 tabs.currentDay = weekViewObj.dayStart;
370 });
371 weekViewObj.dateSelected.connect(function (date){
372 tabs.currentDay = date;
373 tabs.selectedTabIndex = dayTab.index;
374 });
375
376 weekTab.page = weekViewObj;
377 }
378 } else {
379 weekTab.page.dayStart = tabs.currentDay;
380 }
381 } break;
382 case dayTab: {
383 if (dayTab.page === null) {
384 var dayViewCom = Qt.createComponent("DayView.qml");
385 if (dayViewCom.status === Component.Ready) {
386 var dayViewObj = dayViewCom.createObject(mainView);
387
388 dayViewObj.isCurrentPage= Qt.binding(function() { return tabs.selectedTab == dayTab })
389 dayViewObj.onCurrentDayChanged.connect(function (){
390 tabs.currentDay = dayViewObj.currentDay;
391 });
392 dayViewObj.dateSelected.connect(function (date) {
393 tabs.currentDay = date;
394 });
395
396 dayTab.page =dayViewObj;
397 }
398 } else {
399 dayTab.page.currentDay = tabs.currentDay;
400 }
401 } break;
402 case agendaTab: {
403 var agendaViewCom = Qt.createComponent("AgendaView.qml");
404 if (agendaViewCom.status === Component.Ready) {
405 var agendaViewObj = agendaViewCom.createObject(mainView);
406
407 agendaViewObj.dateSelected.connect(function (date){
408 tabs.currentDay = date;
409 tabs.selectedTabIndex = dayTab.index;
410 })
411 agendaTab.page = agendaViewObj;
412 }
413 } break;
414 default:
415 break;
416 }
417 }
418
319 Tab{419 Tab{
320 id: yearTab420 id: yearTab
321 objectName: "yearTab"421 objectName: "yearTab"
322 title: i18n.tr("Year")422 title: i18n.tr("Year")
323 page: Loader{423 page: null
324 id: yearViewLoader
325 objectName: "yearViewLoader"
326 source: tabs.selectedTab == yearTab ? Qt.resolvedUrl("YearView.qml"):""
327 onLoaded: {
328 item.currentYear = tabs.currentDay.getFullYear();
329 }
330
331 anchors{
332 left: parent.left
333 right: parent.right
334 bottom: parent.bottom
335 }
336
337 Connections{
338 target: yearViewLoader.item
339 onMonthSelected: {
340 var now = DateExt.today();
341 if( date.getMonth() === now.getMonth()
342 && date.getFullYear() === now.getFullYear()) {
343 tabs.currentDay = now;
344 } else {
345 tabs.currentDay = date.midnight();
346 }
347 tabs.selectedTabIndex = monthTab.index;
348 }
349 }
350 }
351 }424 }
352425
353 Tab{426 Tab{
354 id: monthTab427 id: monthTab
355 objectName: "monthTab"428 objectName: "monthTab"
356 title: i18n.tr("Month")429 title: i18n.tr("Month")
357 page: Loader{430 page: null
358 id: monthViewLoader
359 objectName: "monthViewLoader"
360 source: tabs.selectedTab == monthTab ? Qt.resolvedUrl("MonthView.qml"):""
361 onLoaded: {
362 item.currentMonth = tabs.currentDay.midnight();
363 }
364
365 anchors{
366 left: parent.left
367 right: parent.right
368 bottom: parent.bottom
369 }
370
371 Connections{
372 target: monthViewLoader.item
373 onDateSelected: {
374 tabs.currentDay = date;
375 tabs.selectedTabIndex = dayTab.index;
376 }
377 }
378 }
379 }431 }
380432
381 Tab{433 Tab{
382 id: weekTab434 id: weekTab
383 objectName: "weekTab"435 objectName: "weekTab"
384 title: i18n.tr("Week")436 title: i18n.tr("Week")
385 page: Loader{437 page: null
386 id: weekViewLoader
387 objectName: "weekViewLoader"
388 source: tabs.selectedTab == weekTab ? Qt.resolvedUrl("WeekView.qml"):""
389 onLoaded: {
390 item.isCurrentPage= Qt.binding(function() { return tabs.selectedTab == weekTab })
391 item.dayStart = tabs.currentDay;
392 }
393
394 anchors{
395 left: parent.left
396 right: parent.right
397 bottom: parent.bottom
398 }
399
400 Connections{
401 target: weekViewLoader.item
402 onDayStartChanged: {
403 tabs.currentDay = weekViewLoader.item.dayStart;
404 }
405
406 onDateSelected: {
407 tabs.currentDay = date;
408 tabs.selectedTabIndex = dayTab.index;
409 }
410 }
411 }
412 }438 }
413439
414 Tab{440 Tab{
415 id: dayTab441 id: dayTab
416 objectName: "dayTab"442 objectName: "dayTab"
417 title: i18n.tr("Day")443 title: i18n.tr("Day")
418 page: Loader{444 page: null
419 id: dayViewLoader
420 objectName: "dayViewLoader"
421 source: tabs.selectedTab == dayTab ? Qt.resolvedUrl("DayView.qml"):""
422 onLoaded: {
423 item.isCurrentPage= Qt.binding(function() { return tabs.selectedTab == dayTab })
424 item.currentDay = tabs.currentDay;
425 }
426
427 anchors{
428 left: parent.left
429 right: parent.right
430 bottom: parent.bottom
431 }
432
433 Connections{
434 target: dayViewLoader.item
435 onCurrentDayChanged: {
436 tabs.currentDay = dayViewLoader.item.currentDay;
437 }
438
439 onDateSelected: {
440 tabs.currentDay = date;
441 }
442 }
443 }
444 }445 }
445446
446 Tab {447 Tab {
447 id: agendaTab448 id: agendaTab
448 objectName: "agendaTab"449 objectName: "agendaTab"
449 title: i18n.tr("Agenda")450 title: i18n.tr("Agenda")
450 page: Loader {451 page: null
451 id: agendaViewLoader
452 objectName: "agendaViewLoader"
453 source: tabs.selectedTab == agendaTab ? Qt.resolvedUrl("AgendaView.qml"):""
454
455 anchors{
456 left: parent.left
457 right: parent.right
458 bottom: parent.bottom
459 }
460
461 Connections{
462 target: agendaViewLoader.item
463 onDateSelected: {
464 tabs.currentDay = date;
465 tabs.selectedTabIndex = dayTab.index;
466 }
467 }
468 }
469 }452 }
470 }453 }
471 }454 }
472455
=== modified file 'po/com.ubuntu.calendar.pot'
--- po/com.ubuntu.calendar.pot 2015-04-17 05:05:13 +0000
+++ po/com.ubuntu.calendar.pot 2015-05-14 03:37:54 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: \n"9"Project-Id-Version: \n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2015-04-17 07:04+0200\n"11"POT-Creation-Date: 2015-05-14 11:34+0800\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,7 +19,7 @@
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21#: ../AgendaView.qml:51 ../DayView.qml:40 ../MonthView.qml:3721#: ../AgendaView.qml:51 ../DayView.qml:40 ../MonthView.qml:37
22#: ../WeekView.qml:42 ../YearView.qml:3622#: ../WeekView.qml:42 ../YearView.qml:42
23msgid "Today"23msgid "Today"
24msgstr ""24msgstr ""
2525
@@ -37,7 +37,7 @@
3737
38#. TRANSLATORS: the first argument (%1) refers to a start time for an event,38#. TRANSLATORS: the first argument (%1) refers to a start time for an event,
39#. while the second one (%2) refers to the end time39#. while the second one (%2) refers to the end time
40#: ../AgendaView.qml:168 ../EventBubble.qml:13140#: ../AgendaView.qml:168 ../EventBubble.qml:133
41#, qt-format41#, qt-format
42msgid "%1 - %2"42msgid "%1 - %2"
43msgstr ""43msgstr ""
@@ -59,7 +59,7 @@
59msgstr[0] ""59msgstr[0] ""
60msgstr[1] ""60msgstr[1] ""
6161
62#: ../CalendarChoicePopup.qml:33 ../EventActions.qml:5962#: ../CalendarChoicePopup.qml:33 ../EventActions.qml:60
63msgid "Calendars"63msgid "Calendars"
64msgstr ""64msgstr ""
6565
@@ -77,15 +77,15 @@
77msgid "Syncing"77msgid "Syncing"
78msgstr ""78msgstr ""
7979
80#: ../CalendarChoicePopup.qml:7080#: ../CalendarChoicePopup.qml:71
81msgid "Add new Calendar"81msgid "Add new Calendar"
82msgstr ""82msgstr ""
8383
84#: ../ColorPickerDialog.qml:2484#: ../ColorPickerDialog.qml:25
85msgid "Select Color"85msgid "Select Color"
86msgstr ""86msgstr ""
8787
88#: ../ColorPickerDialog.qml:53 ../DeleteConfirmationDialog.qml:6088#: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60
89#: ../EditEventConfirmationDialog.qml:5389#: ../EditEventConfirmationDialog.qml:53
90msgid "Cancel"90msgid "Cancel"
91msgstr ""91msgstr ""
@@ -101,7 +101,7 @@
101#. TRANSLATORS: this is a time formatting string,101#. TRANSLATORS: this is a time formatting string,
102#. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.102#. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.
103#. It's used in the header of the month and week views103#. It's used in the header of the month and week views
104#: ../DayView.qml:59 ../MonthView.qml:57 ../WeekView.qml:61104#: ../DayView.qml:59 ../MonthView.qml:58 ../WeekView.qml:61
105msgid "MMMM yyyy"105msgid "MMMM yyyy"
106msgstr ""106msgstr ""
107107
@@ -136,7 +136,7 @@
136msgid "Delete"136msgid "Delete"
137msgstr ""137msgstr ""
138138
139#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:283139#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:287
140msgid "Edit Event"140msgid "Edit Event"
141msgstr ""141msgstr ""
142142
@@ -154,18 +154,18 @@
154msgid "Edit this"154msgid "Edit this"
155msgstr ""155msgstr ""
156156
157#: ../EventActions.qml:50 ../NewEvent.qml:283157#: ../EventActions.qml:50 ../NewEvent.qml:287
158msgid "New Event"158msgid "New Event"
159msgstr ""159msgstr ""
160160
161#. TRANSLATORS: the first argument (%1) refers to a time for an event,161#. TRANSLATORS: the first argument (%1) refers to a time for an event,
162#. while the second one (%2) refers to title of event162#. while the second one (%2) refers to title of event
163#: ../EventBubble.qml:142 ../EventBubble.qml:147163#: ../EventBubble.qml:144 ../EventBubble.qml:149
164#, qt-format164#, qt-format
165msgid "%1 <b>%2</b>"165msgid "%1 <b>%2</b>"
166msgstr ""166msgstr ""
167167
168#: ../EventDetails.qml:42 ../NewEvent.qml:393168#: ../EventDetails.qml:42 ../NewEvent.qml:398
169msgid "Event Details"169msgid "Event Details"
170msgstr ""170msgstr ""
171171
@@ -189,11 +189,11 @@
189msgid "Edit"189msgid "Edit"
190msgstr ""190msgstr ""
191191
192#: ../EventDetails.qml:347 ../NewEvent.qml:479192#: ../EventDetails.qml:347 ../NewEvent.qml:500
193msgid "Guests"193msgid "Guests"
194msgstr ""194msgstr ""
195195
196#: ../EventDetails.qml:390 ../EventReminder.qml:35 ../NewEvent.qml:578196#: ../EventDetails.qml:390 ../EventReminder.qml:35 ../NewEvent.qml:599
197msgid "Reminder"197msgid "Reminder"
198msgstr ""198msgstr ""
199199
@@ -201,26 +201,26 @@
201#. and it is shown as the header of the page to choose repetition201#. and it is shown as the header of the page to choose repetition
202#. and as the header of the list item that shows the repetition202#. and as the header of the list item that shows the repetition
203#. summary in the page that displays the event details203#. summary in the page that displays the event details
204#: ../EventRepetition.qml:41 ../EventRepetition.qml:132204#: ../EventRepetition.qml:41 ../EventRepetition.qml:150
205msgid "Repeat"205msgid "Repeat"
206msgstr ""206msgstr ""
207207
208#: ../EventRepetition.qml:151208#: ../EventRepetition.qml:169
209msgid "Repeats On:"209msgid "Repeats On:"
210msgstr ""210msgstr ""
211211
212#: ../EventRepetition.qml:196212#: ../EventRepetition.qml:214
213msgid "Recurring event ends"213msgid "Recurring event ends"
214msgstr ""214msgstr ""
215215
216#. TRANSLATORS: this refers to how often a recurrent event repeats216#. TRANSLATORS: this refers to how often a recurrent event repeats
217#. and it is shown as the header of the option selector to choose217#. and it is shown as the header of the option selector to choose
218#. its repetition218#. its repetition
219#: ../EventRepetition.qml:219 ../NewEvent.qml:560219#: ../EventRepetition.qml:237 ../NewEvent.qml:581
220msgid "Repeats"220msgid "Repeats"
221msgstr ""221msgstr ""
222222
223#: ../EventRepetition.qml:244223#: ../EventRepetition.qml:262
224msgid "Date"224msgid "Date"
225msgstr ""225msgstr ""
226226
@@ -259,51 +259,51 @@
259msgid "After Date"259msgid "After Date"
260msgstr ""260msgstr ""
261261
262#: ../NewEvent.qml:59262#: ../NewEvent.qml:61
263msgid "Save"263msgid "Save"
264msgstr ""264msgstr ""
265265
266#: ../NewEvent.qml:165266#: ../NewEvent.qml:170
267msgid "End time can't be before start time"267msgid "End time can't be before start time"
268msgstr ""268msgstr ""
269269
270#: ../NewEvent.qml:293270#: ../NewEvent.qml:297
271msgid "Error"271msgid "Error"
272msgstr ""272msgstr ""
273273
274#: ../NewEvent.qml:295274#: ../NewEvent.qml:299
275msgid "OK"275msgid "OK"
276msgstr ""276msgstr ""
277277
278#: ../NewEvent.qml:347278#: ../NewEvent.qml:352
279msgid "From"279msgid "From"
280msgstr ""280msgstr ""
281281
282#: ../NewEvent.qml:360282#: ../NewEvent.qml:365
283msgid "To"283msgid "To"
284msgstr ""284msgstr ""
285285
286#: ../NewEvent.qml:377286#: ../NewEvent.qml:382
287msgid "All day event"287msgid "All day event"
288msgstr ""288msgstr ""
289289
290#: ../NewEvent.qml:406290#: ../NewEvent.qml:411
291msgid "Event Name"291msgid "Event Name"
292msgstr ""292msgstr ""
293293
294#: ../NewEvent.qml:419294#: ../NewEvent.qml:429
295msgid "Description"295msgid "Description"
296msgstr ""296msgstr ""
297297
298#: ../NewEvent.qml:432298#: ../NewEvent.qml:447
299msgid "Location"299msgid "Location"
300msgstr ""300msgstr ""
301301
302#: ../NewEvent.qml:441 com.ubuntu.calendar_calendar.desktop.in.in.h:1302#: ../NewEvent.qml:462 com.ubuntu.calendar_calendar.desktop.in.in.h:1
303msgid "Calendar"303msgid "Calendar"
304msgstr ""304msgstr ""
305305
306#: ../NewEvent.qml:483306#: ../NewEvent.qml:504
307msgid "Add Guest"307msgid "Add Guest"
308msgstr ""308msgstr ""
309309
@@ -390,6 +390,10 @@
390msgid "2 weeks"390msgid "2 weeks"
391msgstr ""391msgstr ""
392392
393#: ../TimeLineBase.qml:73
394msgid "Untitled"
395msgstr ""
396
393#. TRANSLATORS: W refers to Week, followed by the actual week number (%1)397#. TRANSLATORS: W refers to Week, followed by the actual week number (%1)
394#: ../TimeLineHeader.qml:49398#: ../TimeLineHeader.qml:49
395#, qt-format399#, qt-format
@@ -400,7 +404,7 @@
400msgid "All Day"404msgid "All Day"
401msgstr ""405msgstr ""
402406
403#: ../YearView.qml:54407#: ../YearView.qml:60
404#, qt-format408#, qt-format
405msgid "Year %1"409msgid "Year %1"
406msgstr ""410msgstr ""
@@ -412,23 +416,23 @@
412"about them"416"about them"
413msgstr ""417msgstr ""
414418
415#: ../calendar.qml:322419#: ../calendar.qml:422
416msgid "Year"420msgid "Year"
417msgstr ""421msgstr ""
418422
419#: ../calendar.qml:356423#: ../calendar.qml:429
420msgid "Month"424msgid "Month"
421msgstr ""425msgstr ""
422426
423#: ../calendar.qml:384427#: ../calendar.qml:436
424msgid "Week"428msgid "Week"
425msgstr ""429msgstr ""
426430
427#: ../calendar.qml:417431#: ../calendar.qml:443
428msgid "Day"432msgid "Day"
429msgstr ""433msgstr ""
430434
431#: ../calendar.qml:449435#: ../calendar.qml:450
432msgid "Agenda"436msgid "Agenda"
433msgstr ""437msgstr ""
434438

Subscribers

People subscribed via source and target branches

to status/vote changes: