From patchwork Tue Mar 31 05:55:19 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Changqing Li X-Patchwork-Id: 84864 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id AAD5CFF60C8 for ; Tue, 31 Mar 2026 05:55:51 +0000 (UTC) Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.13992.1774936543935869452 for ; Mon, 30 Mar 2026 22:55:44 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@windriver.com header.s=PPS06212021 header.b=AZEQ/LFq; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 205.220.178.238, mailfrom: prvs=8550d9304b=changqing.li@windriver.com) Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62V4SHhn2006267 for ; Tue, 31 Mar 2026 05:55:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=PPS06212021; bh=s9EZQZWrIXAz/dQKurBjeflYWLc7/iz4gRVyvu9NPKM=; b=AZEQ/LFq7W5M 4XBfhZPl0q6hlPX4WcwXzhJwWa+Sb+KBwbq25kVSAk3UqC65FE3F1T7GLeadVr1U myjj49zXNZNz0c/pEWkAYfsSbcOr07Y7/ANrLgFkfIE9Kz+QXZa0gim4rT2iqh0F OuovKgiuMCRGvJ0vkcVPJvONTXJ0CyiPqw8Xnw0p1i6TqC73G6FLA0YZxuy43ZgS ixwyX9KCdKkzJV9M0rcVGlkIAS56ICKnb70ZKd74o3c8GNy6flLMHAjbJUIzJam9 H3SVVkZZsAKSlPrfaZkaV+fuwUhmk5vwo9gxVoCawGh9Aj9B8+6OQnoF4O4Cju5y F3oUdjFCqg== Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011045.outbound.protection.outlook.com [40.93.194.45]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 4d646vu76d-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for ; Tue, 31 Mar 2026 05:55:42 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PeFaSNdeLEMetMOp6Y8nDXgxOq0rhOeW7ztax9arSknqkQegL4Akgx/pcgA/ZaCQgbjvjPMPv5KGkFaWohWxbKAm0sXu/eGyxyQIvnO1lSLnmgkB+aV/uW9wjVkCe/BnGOqJAy4iIhJ6hWvXZZ47U65WPYdRCApHm7mo/ycM2ozpw0olZpO2beOH/nGuiHlZnHP+I76rcjLJSuLc7OfMNZ2v8Tkj1IwGSePVWQ+D7Tspmxe/kU9almQ9Bd/DtHnrOhJb+SS/unmgQ3Q8pBpcY1HikQLGq3UdIUpD0E4bUzddR+NYpX4H2wuoxcJYw1X7A2bZbPGS9hsAbbVU4YfHiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=s9EZQZWrIXAz/dQKurBjeflYWLc7/iz4gRVyvu9NPKM=; b=HnlCDVLpLoXoB+GAPXfiXfhr+eNR5MqE/vYLVgm7lLGZU5AcU5E2jtoWJsKTr0z2rkh8akXaBTtjtL3GeDyex6qISwwdPz/w0OiA5puXlO5boKsEJOpX5jBcAyJ4E9tLc6mrwVNWBcK1N6dPY6XryJY+8Yw28pL0ICLRCEa8gxORPhJ2UOU9033BASPLcK+AlfOesgH81aA+wGuqassyNV1+glD9lwHd32EgRuVdJpqsBot7YFFDpnGYUdgUebk8aaFbt+f09l7TANJdsRTXiLXUbq91e7To+wbzjBD8ahh4dgDpdgsMb29i6Wldskt5UlgvhyPxNa9V8saRoaYXHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from DS0PR11MB7312.namprd11.prod.outlook.com (2603:10b6:8:11f::18) by PH7PR11MB6748.namprd11.prod.outlook.com (2603:10b6:510:1b6::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.15; Tue, 31 Mar 2026 05:55:39 +0000 Received: from DS0PR11MB7312.namprd11.prod.outlook.com ([fe80::531e:6ef5:812b:48f6]) by DS0PR11MB7312.namprd11.prod.outlook.com ([fe80::531e:6ef5:812b:48f6%5]) with mapi id 15.20.9769.014; Tue, 31 Mar 2026 05:55:39 +0000 From: Changqing Li To: openembedded-devel@lists.openembedded.org Subject: [meta-gnome][PATCH 3/4] libgdata: remove unmaintained recipe Date: Tue, 31 Mar 2026 13:55:19 +0800 Message-Id: <20260331055520.444552-3-changqing.li@windriver.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260331055520.444552-1-changqing.li@windriver.com> References: <20260331055520.444552-1-changqing.li@windriver.com> X-ClientProxiedBy: IA4P221CA0002.NAMP221.PROD.OUTLOOK.COM (2603:10b6:208:559::8) To DS0PR11MB7312.namprd11.prod.outlook.com (2603:10b6:8:11f::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB7312:EE_|PH7PR11MB6748:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d2be321-73ca-4473-5f12-08de8eea22ec X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|366016|1800799024|38350700014|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: XAXT+WI5V32/EkD52OW6xusRJp1lIYhkgtMokFcGpKaM8TzI4jADzHHtSnXUqPAF0cmI4Je1dhIZl/RAoFg8214miAhY5mqtfGoZZWZWfgSMAouSxc7VjiCSo7IFM5+ptRmmaK0ldb0PxvLjSYltJhCKCjRv3ofNv0pQ1TgHCP1xb9LwalRNFHmft5M0l6z2mQiNdJAn4r3zlCQMEWj9kaRrGEgd9pHkMyxfoMCLpy/Zpu+ntdKjuUCJB40m6VBdg+Qkfb0puHOrMFPOMQQeqRy2g+6Luu13Y59SndqhUmQ3byMlBUxlfJUKwvArfXnikLRIOrgJnQnHgX7LLPia1O/vZrTsVsHm6YIrJxg46pH+lRSj/BAPjEv1e0VfTPY6hYKSuHVpcW/2FWQnB9PLpfhFn/NWjOGY+P/TTBt8tSfEWCukdHIPnku9Vy3F2upII2dV//SSTjY8Bai66qcV1NghUkaxkMP6fnVTSZaCiCsEfDxwuRz75BJvS9rKO/rhYrq+wmC4CRtYyFw+XWtb/rYqgWkX/4pqI+kw0KkXdezIlX5ZPjgx7jvmCvk47ok7LiBuvCIOYIs7CV+VlwON8iYoNUBh2tqOBNu19Mz/bAOCs23K1uEttTyNL1t1BmA4/Bv34/KJJWp3BNcdQhodvChZQAhsMse8e8y258KjH9rgmLcN4wPh9cUIUdLdHStWdU4QMJY1jncsM9Gmqc0/BMoCchhWZ/PfT9Y5+7ofZE0gFnqvrfZf4a8OE9VPF8mT X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB7312.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(366016)(1800799024)(38350700014)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yA0fd49Lfb8fLjBXQTZ4I8Mx1rvw?= =?utf-8?q?iMLYBQsxi5wn/DHDUQr52h5D+XH3GMEWnaNrRsdcmvAnoFuVcMH+KnjD3oTYMfp8J?= =?utf-8?q?halwcMG3Zv2gOQyk09vO6hf0TroKhfGxKPDiOp+RO7+15dGUBdrmiMdLvnRBn7ivu?= =?utf-8?q?kqvD6vB3L48cHQQVMqlZ0aTkrXmTQu0KI0tNPTr2n4+N1Tzv2DgkJaIgBhsQiDCJ6?= =?utf-8?q?c+d1vmeitno7eNfEIsj9WYENP7c1D/Sn5Im5fhROxlmIloUsZ66UqLsxRo45/1pXL?= =?utf-8?q?SvD5c8MpivLaphkV0ivFk/cMpH94TqYvhbeuyDPOdoKUoLc+cvujn2958R8zEjP9V?= =?utf-8?q?i6F0pNxnj2OD/qwGxAXj0sWmACHERY2IVNhc2UYdrZTCXZeA79xMgkwSEm+FSg8RS?= =?utf-8?q?P1rS0UueeoHk0k/v0aJjd0HigiDI5Uis2s485ZP5CNyoOapaAXLBENz6uhiRmOIz8?= =?utf-8?q?8Q8FNs+Fus/Cs8W4qf/ef4/owHHRldG28TI2OgJMpuveOfaMT9f0phi2KkPsAdYKJ?= =?utf-8?q?40hBoZFc+0XGiOoVicV3kpf1BHP7bfNNdUpLlTjRsARhNAwpLuRI+ZRWAXuHD2O/E?= =?utf-8?q?oR0ob4yEn0/MTPqEtlwCno2yKd7NRWpGStq+Jypg0F764xRK+hVO3cP+JyNLFQB6x?= =?utf-8?q?S0l+7E4dljO2+Y99UIOUHDrNBk6nGej5VF2Rmq8T7l+C7uU6Tl9ZbzEDqRB5Ot7L/?= =?utf-8?q?HfnkroC2GFPLjuOPVWonqsF/4vJUsznk9f5CLgfUQGf7qA19wYUQqYbS/Ps9+v4Jr?= =?utf-8?q?dH3qCFAQSjOA+wCkpcw59EkBTrm9vSrua24eOeFPHrkypoTsygKo7zs3+n7GauBNE?= =?utf-8?q?FAmfqGVBrre+hGibkvBHqhISXwn0L8xo3xIJCpKD+jG4Es0XX5hN6y9zMvAh1IUGZ?= =?utf-8?q?hUvGEpeHouGRvm2508EkEY03OS39zVaNRGBdSy9sB3K3WzCHFJv6LT7rOp4hY5loT?= =?utf-8?q?70+oMgyofsQoT+mZtyeJcr+LTWMBlIWMABMrnkfDiaXd/Oz3ODdJ4XFdwSqX+bLG/?= =?utf-8?q?6/QmEGdsrXJox4mbLmR5t7ZUStq7wWk24ku3yhOufz8Tmr/Caf2B8g/4ScncJlV7U?= =?utf-8?q?L056Asf/VFpNN4dH2gFlgIyPHUDzOwzfIwPaffPCKf3rRs26MBwfdOpMg2LQOJF8h?= =?utf-8?q?ktb76Hww/UyhptmJZEqdkvfezSIHmqXpfgVyS4lGR6QjiF+oSd8Lze5zs0cqQEQKt?= =?utf-8?q?AqDY6/xto/BE9q8dSoxd6F/Wik1XhUJKfpmAm6qj0D7y/DcUanqLACKtV+oim+Hph?= =?utf-8?q?7Ry+2bNVOnAacimGt9lAhmRUKWw0vmAqgrlxNpAXZFy0+i6s9F3xlFExjDUSmO4AK?= =?utf-8?q?ae3RWGfqJBeB8h/Ro0WuZXpUHpzuP9GigxRxQyn7iRQgnW4oeDK/NS1AgtEmJzX2z?= =?utf-8?q?XWeoek6k/WsLHOzVUw1RTzD9XxOtGEzSZy/9RzB71UP3oWxnNyvHre6wqekp4OrLI?= =?utf-8?q?Inp51iV3J5bQ3DpvJgjeyBQHA89k/ApMyf2fSq7fewUO7YnFmGYSPQC2jc7dl7LCd?= =?utf-8?q?N3AZDyF7WBbW7CRGndKtddLEsNen5v8HCFL/nQq5w8/FL/dgbXNuHLUP/hHL6Uk0b?= =?utf-8?q?8K0FfnXqegh3rd6fIxdFQnw8e0FEl+mZwg+a1UaMTtckYQYF1JgM2OWhor+HbKrvL?= =?utf-8?q?JZVVv1IyxkErlrnLoR80ttGaUlkaB8L5jYOolDJTwsrkK2cceKgZw=3D?= X-Exchange-RoutingPolicyChecked: QtVTcULq1V3kjmaZYPDUVaZZkDY0rOgmUq5gwNv8oOlQSHqnqTvtDORxF4dSwoUTUL0vTkqoY+duu4FF7+fVQT/2glOSvAgp+MWM4OtG67JQz3q4ijeUxtUoU+Bi4qi4PkII7ThooOwga6qJuiyIrTtEnmWRaZF++2KeSvXapr1sla8Td7JUc+qX+tQ1VyxqgUZw4MwZOdk9Ti7OuOJSrGrE1ipD6giY5L6dFotRcDzxWnMtWWjGuD1Rhhx3NrjA1gpgh/SECRE61syoJq/RgZig68NKwAqEH4ISRwmINQ+pRqnZTjmSaT0LdgXrVb+4pUlztoBDjIJPUt6B4q06nw== X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d2be321-73ca-4473-5f12-08de8eea22ec X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB7312.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2026 05:55:39.8541 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B+orZGbMhUnnhIPXR/X8FJVf1Qy2ts1qUjeXbqX30pjGyKYcz4ID6xf8QIK50uAdzix0IQPPYKTsktN5AE6LGibdtX2bgHTBzEVA1Gc8KgU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB6748 X-Authority-Analysis: v=2.4 cv=Zqjg6t7G c=1 sm=1 tr=0 ts=69cb61de cx=c_pps a=z/rjtr9/JqYX5j7IdmSYkQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=bi6dqmuHe4P4UrxVR6um:22 a=klDOsUkWDRETUCZYPvoE:22 a=GHR8O2WEAAAA:20 a=SFbbONLXAAAA:20 a=1XWaLZrsAAAA:8 a=3g80flMcAAAA:8 a=aiIX5UjjAAAA:8 a=t7CeM3EgAAAA:8 a=V2sgnzSHAAAA:8 a=pGLkceISAAAA:8 a=A1X0JdhQAAAA:8 a=Pkdk1CNixluC7fb_OmcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=3urWGuTZa-U-TZ_dHwj2:22 a=FdTzh2GWekK77mhwV6Dw:22 a=Z31ocT7rh6aUJxSkT1EX:22 X-Proofpoint-ORIG-GUID: G1JZafOnkmmy_6H1qoOhH6zT-AxFoBqf X-Proofpoint-GUID: G1JZafOnkmmy_6H1qoOhH6zT-AxFoBqf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzMxMDA1MyBTYWx0ZWRfX1oYGF9kHAa+n SgaKLpd+KadvEfILD52zE1D6H7+/z/wV3QEnSeJ5YygPqUwcYU/7jVbTblGu3AIPY7zg8lIfY9q PK7jI0z028AcTFOjbmvZ/EvPiYcOxAG4dTyTbwCUsVCFv3nif9CjMV6kpNIHN2siU2C3ZyIqHON TydWdzpbjxwT/C4gpQ9c96rlgaYFR7X6HV2VGcSVTPo4QpS2MXz3kR96fGlq/xfGMdbf1HosAxv vmBEOnsQiNCXFia/+RgsBzSNiNbFwgSGEtj/p8AYE8VhysLDbaOs69BjfL5HzLaaAR8IgYMPJHv izKHiQR/Ucj8hEb02QDQK0ZPxHgab0MRbKrvePyar2bPgKKM3a0VKwvIZhN1QOjBdjZ5ef6d9Vq UpZIxZENkkkarpTa9k/04H23kwPUaZvGG1pM5yZZgZc4S2BanGpQAyrGGP2qQQCRpfxt7plgSd9 SP6dEWCveQvVHSeQW1w== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-31_01,2026-03-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 suspectscore=0 phishscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603310053 X-MIME-Autoconverted: from 8bit to quoted-printable by mx0a-0064b401.pphosted.com id 62V4SHhn2006267 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 31 Mar 2026 05:55:51 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-devel/message/125875 This recipe is unmaintained now, and gvfs already disable google option, so remove this recipe. [1] https://gitlab.gnome.org/GNOME/gvfs/-/merge_requests/266 [2] https://gitlab.gnome.org/Archive/libgdata/-/merge_requests/49 Signed-off-by: Changqing Li --- ...01-Drop-usage-of-deprecated-GTimeVal.patch | 1134 ----------------- .../recipes-gnome/libgdata/libgdata_0.18.1.bb | 34 - 2 files changed, 1168 deletions(-) delete mode 100644 meta-gnome/recipes-gnome/libgdata/libgdata/0001-Drop-usage-of-deprecated-GTimeVal.patch delete mode 100644 meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb diff --git a/meta-gnome/recipes-gnome/libgdata/libgdata/0001-Drop-usage-of-deprecated-GTimeVal.patch b/meta-gnome/recipes-gnome/libgdata/libgdata/0001-Drop-usage-of-deprecated-GTimeVal.patch deleted file mode 100644 index 6fb52d6d52..0000000000 --- a/meta-gnome/recipes-gnome/libgdata/libgdata/0001-Drop-usage-of-deprecated-GTimeVal.patch +++ /dev/null @@ -1,1134 +0,0 @@ -From ef8722baa444958601bfddfee3a977ccf4f7c02c Mon Sep 17 00:00:00 2001 -From: Daniel Kolesa -Date: Tue, 16 Mar 2021 17:22:08 +0100 -Subject: [PATCH] drop usage of deprecated GTimeVal - -Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libgdata/-/commit/ef8722baa444958601bfddfee3a977ccf4f7c02c] -Signed-off-by: Gyorgy Sarvari - ---- - demos/calendar/calendar-cli.c | 90 ++++++++++++------- - demos/tasks/tasks-cli.c | 31 ++++--- - demos/youtube/youtube-cli.c | 9 +- - gdata/gdata-access-rule.c | 4 +- - gdata/gdata-batch-operation.c | 8 +- - gdata/gdata-oauth1-authorizer.c | 6 +- - gdata/gdata-parser.c | 48 +++++----- - gdata/gdata-service.c | 5 +- - .../services/calendar/gdata-calendar-event.c | 18 ++-- - .../services/calendar/gdata-calendar-query.c | 6 +- - .../contacts/gdata-contacts-contact.c | 4 +- - .../services/contacts/gdata-contacts-group.c | 4 +- - .../documents/gdata-documents-query.c | 8 +- - .../picasaweb/gdata-picasaweb-album.c | 8 +- - .../services/picasaweb/gdata-picasaweb-file.c | 8 +- - gdata/services/youtube/gdata-youtube-query.c | 18 ++-- - .../services/youtube/gdata-youtube-service.c | 10 ++- - gdata/tests/calendar.c | 60 +++++++------ - gdata/tests/contacts.c | 22 +++-- - gdata/tests/general.c | 7 +- - gdata/tests/perf.c | 15 ++-- - gdata/tests/picasaweb.c | 14 +-- - gdata/tests/youtube.c | 14 +-- - 23 files changed, 231 insertions(+), 186 deletions(-) - -diff --git a/demos/calendar/calendar-cli.c b/demos/calendar/calendar-cli.c -index a1d84f67..4f601f48 100644 ---- a/demos/calendar/calendar-cli.c -+++ b/demos/calendar/calendar-cli.c -@@ -38,13 +38,13 @@ print_usage (char *argv[]) - return -1; - } - --/* Convert a GTimeVal to an ISO 8601 date string (without a time component). */ -+/* Convert a unix time to an ISO 8601 date string (without a time component). */ - static gchar * --tv_to_iso8601_date (GTimeVal *tv) -+tv_to_iso8601_date (gint64 tv) - { - struct tm *tm; - -- tm = gmtime (&tv->tv_sec); -+ tm = gmtime (&tv); - - return g_strdup_printf ("%04d-%02d-%02d", - tm->tm_year + 1900, -@@ -81,8 +81,9 @@ print_event (GDataCalendarEvent *event) - { - const gchar *title, *id, *description, *status, *visibility; - const gchar *transparency, *uid; -- GTimeVal date_published_tv = { 0, }; -- GTimeVal date_edited_tv = { 0, }; -+ GDateTime *tmp; -+ gint64 date_published_tv; -+ gint64 date_edited_tv; - gchar *date_published = NULL; /* owned */ - gchar *date_edited = NULL; /* owned */ - guint sequence; -@@ -95,10 +96,14 @@ print_event (GDataCalendarEvent *event) - title = gdata_entry_get_title (GDATA_ENTRY (event)); - id = gdata_entry_get_id (GDATA_ENTRY (event)); - description = gdata_entry_get_content (GDATA_ENTRY (event)); -- date_published_tv.tv_sec = gdata_entry_get_published (GDATA_ENTRY (event)); -- date_published = g_time_val_to_iso8601 (&date_published_tv); -- date_edited_tv.tv_sec = gdata_calendar_event_get_edited (event); -- date_edited = g_time_val_to_iso8601 (&date_edited_tv); -+ date_published_tv = gdata_entry_get_published (GDATA_ENTRY (event)); -+ tmp = g_date_time_new_from_unix_utc (date_published_tv); -+ date_published = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); -+ date_edited_tv = gdata_calendar_event_get_edited (event); -+ tmp = g_date_time_new_from_unix_utc (date_edited_tv); -+ date_edited = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); - status = gdata_calendar_event_get_status (event); - visibility = gdata_calendar_event_get_visibility (event); - transparency = gdata_calendar_event_get_transparency (event); -@@ -155,20 +160,25 @@ print_event (GDataCalendarEvent *event) - - for (; times != NULL; times = times->next) { - GDataGDWhen *when; -- GTimeVal start_time = { 0, }, end_time = { 0, }; -+ gint64 start_time, end_time; - gchar *start = NULL, *end = NULL; /* owned */ - - when = GDATA_GD_WHEN (times->data); - -- start_time.tv_sec = gdata_gd_when_get_start_time (when); -- end_time.tv_sec = gdata_gd_when_get_end_time (when); -+ start_time = gdata_gd_when_get_start_time (when); -+ end_time = gdata_gd_when_get_end_time (when); - - if (gdata_gd_when_is_date (when)) { -- start = tv_to_iso8601_date (&start_time); -- end = tv_to_iso8601_date (&end_time); -+ start = tv_to_iso8601_date (start_time); -+ end = tv_to_iso8601_date (end_time); - } else { -- start = g_time_val_to_iso8601 (&start_time); -- end = g_time_val_to_iso8601 (&end_time); -+ GDateTime *tmp; -+ tmp = g_date_time_new_from_unix_utc (start_time); -+ start = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); -+ tmp = g_date_time_new_from_unix_utc (end_time); -+ end = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); - } - - g_print (" • %s to %s (%s)\n", -@@ -416,8 +426,7 @@ command_insert_event (int argc, char *argv[]) - GDataAuthorizer *authorizer = NULL; - GDataGDWhen *when = NULL; - gboolean is_date; -- gchar *start_with_time = NULL, *end_with_time = NULL; -- GTimeVal start_tv = { 0, }, end_tv = { 0, }; -+ GDateTime *start_tv = NULL, *end_tv = NULL; - gint i; - - if (argc < 7) { -@@ -454,25 +463,38 @@ command_insert_event (int argc, char *argv[]) - event = gdata_calendar_event_new (NULL); - gdata_entry_set_title (GDATA_ENTRY (event), title); - -- start_with_time = g_strconcat (start, "T00:00:00Z", NULL); -- end_with_time = g_strconcat (end, "T00:00:00Z", NULL); -- -- if (g_time_val_from_iso8601 (start, &start_tv) && -- g_time_val_from_iso8601 (end, &end_tv)) { -+ start_tv = g_date_time_new_from_iso8601 (start, NULL); -+ end_tv = g_date_time_new_from_iso8601 (end, NULL); -+ if (start_tv && end_tv) { - /* Includes time. */ - is_date = FALSE; -- } else if (g_time_val_from_iso8601 (start_with_time, &start_tv) && -- g_time_val_from_iso8601 (end_with_time, &end_tv)) { -- /* Does not include time. */ -- is_date = TRUE; - } else { -- g_printerr ("%s: Could not parse start time ‘%s’ and end time " -- "‘%s’ as ISO 8601.\n", argv[0], start, end); -- retval = 1; -- goto done; -+ gchar *start_with_time, *end_with_time; -+ -+ g_clear_pointer (&start_tv, g_date_time_unref); -+ g_clear_pointer (&end_tv, g_date_time_unref); -+ -+ start_with_time = g_strconcat (start, "T00:00:00Z", NULL); -+ end_with_time = g_strconcat (end, "T00:00:00Z", NULL); -+ -+ start_tv = g_date_time_new_from_iso8601 (start_with_time, NULL); -+ end_tv = g_date_time_new_from_iso8601 (end_with_time, NULL); -+ -+ g_free (start_with_time); -+ g_free (end_with_time); -+ -+ if (start_tv && end_tv) { -+ /* Does not include time. */ -+ is_date = TRUE; -+ } else { -+ g_printerr ("%s: Could not parse start time ‘%s’ and end time " -+ "‘%s’ as ISO 8601.\n", argv[0], start, end); -+ retval = 1; -+ goto done; -+ } - } - -- when = gdata_gd_when_new (start_tv.tv_sec, end_tv.tv_sec, is_date); -+ when = gdata_gd_when_new (g_date_time_to_unix (start_tv), g_date_time_to_unix (end_tv), is_date); - gdata_calendar_event_add_time (event, when); - g_object_unref (when); - -@@ -507,8 +529,8 @@ command_insert_event (int argc, char *argv[]) - print_event (inserted_event); - - done: -- g_free (start_with_time); -- g_free (end_with_time); -+ g_clear_pointer (&start_tv, g_date_time_unref); -+ g_clear_pointer (&end_tv, g_date_time_unref); - g_clear_object (&inserted_event); - g_clear_object (&event); - g_clear_object (&authorizer); -diff --git a/demos/tasks/tasks-cli.c b/demos/tasks/tasks-cli.c -index c795761a..ef4ae900 100644 ---- a/demos/tasks/tasks-cli.c -+++ b/demos/tasks/tasks-cli.c -@@ -67,35 +67,42 @@ print_task (GDataTasksTask *task) - { - const gchar *title, *id, *description, *parent_id, *position, *notes; - const gchar *status; -- GTimeVal date_published_tv = { 0, }; -+ GDateTime *tmp; -+ gint64 date_published_tv; - gchar *date_published = NULL; /* owned */ -- GTimeVal due_tv = { 0, }; -+ gint64 due_tv; - gchar *due = NULL; /* owned */ -- GTimeVal completed_tv = { 0, }; -+ gint64 completed_tv; - gchar *completed = NULL; /* owned */ - gboolean is_deleted, is_hidden; - - title = gdata_entry_get_title (GDATA_ENTRY (task)); - id = gdata_entry_get_id (GDATA_ENTRY (task)); - description = gdata_entry_get_content (GDATA_ENTRY (task)); -- date_published_tv.tv_sec = gdata_entry_get_published (GDATA_ENTRY (task)); -- date_published = g_time_val_to_iso8601 (&date_published_tv); -+ date_published_tv = gdata_entry_get_published (GDATA_ENTRY (task)); -+ tmp = g_date_time_new_from_unix_utc (date_published_tv); -+ date_published = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); - parent_id = gdata_tasks_task_get_parent (task); - position = gdata_tasks_task_get_position (task); - notes = gdata_tasks_task_get_notes (task); - status = gdata_tasks_task_get_status (task); -- due_tv.tv_sec = gdata_tasks_task_get_due (task); -- due = g_time_val_to_iso8601 (&due_tv); -- completed_tv.tv_sec = gdata_tasks_task_get_completed (task); -- completed = g_time_val_to_iso8601 (&completed_tv); -+ due_tv = gdata_tasks_task_get_due (task); -+ tmp = g_date_time_new_from_unix_utc (due_tv); -+ due = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); -+ completed_tv = gdata_tasks_task_get_completed (task); -+ tmp = g_date_time_new_from_unix_utc (completed_tv); -+ completed = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); - is_deleted = gdata_tasks_task_is_deleted (task); - is_hidden = gdata_tasks_task_is_hidden (task); - - g_print ("%s — %s\n", id, title); -- g_print (" Published: %s\n", date_published_tv.tv_sec != 0 ? date_published : "unknown"); -+ g_print (" Published: %s\n", date_published_tv != 0 ? date_published : "unknown"); - g_print (" Status: %s\n", format_status (status)); -- g_print (" Due: %s\n", due_tv.tv_sec != 0 ? due : "not set"); -- g_print (" Completed: %s\n", completed_tv.tv_sec != 0 ? completed : "not yet"); -+ g_print (" Due: %s\n", due_tv != 0 ? due : "not set"); -+ g_print (" Completed: %s\n", completed_tv != 0 ? completed : "not yet"); - g_print (" Deleted? %s\n", is_deleted ? "Yes" : "No"); - g_print (" Hidden? %s\n", is_hidden ? "Yes" : "No"); - g_print (" Position: %s\n", position); -diff --git a/demos/youtube/youtube-cli.c b/demos/youtube/youtube-cli.c -index 37ff4afc..e3e0e3dc 100644 ---- a/demos/youtube/youtube-cli.c -+++ b/demos/youtube/youtube-cli.c -@@ -46,7 +46,8 @@ print_video (GDataYouTubeVideo *video) - { - const gchar *title, *player_uri, *id, *description; - GList/**/ *thumbnails; -- GTimeVal date_published_tv = { 0, }; -+ GDateTime *tmp; -+ gint64 date_published_tv; - gchar *date_published = NULL; /* owned */ - guint duration; /* seconds */ - guint rating_min = 0, rating_max = 0, rating_count = 0; -@@ -57,8 +58,10 @@ print_video (GDataYouTubeVideo *video) - id = gdata_entry_get_id (GDATA_ENTRY (video)); - description = gdata_youtube_video_get_description (video); - thumbnails = gdata_youtube_video_get_thumbnails (video); -- date_published_tv.tv_sec = gdata_entry_get_published (GDATA_ENTRY (video)); -- date_published = g_time_val_to_iso8601 (&date_published_tv); -+ date_published_tv = gdata_entry_get_published (GDATA_ENTRY (video)); -+ tmp = g_date_time_new_from_unix_utc (date_published_tv); -+ date_published = g_date_time_format_iso8601 (tmp); -+ g_date_time_unref (tmp); - duration = gdata_youtube_video_get_duration (video); - gdata_youtube_video_get_rating (video, &rating_min, &rating_max, - &rating_count, &rating_average); -diff --git a/gdata/gdata-access-rule.c b/gdata/gdata-access-rule.c -index 9fd1ce95..0064623f 100644 ---- a/gdata/gdata-access-rule.c -+++ b/gdata/gdata-access-rule.c -@@ -257,12 +257,10 @@ gdata_access_rule_constructor (GType type, guint n_construct_params, GObjectCons - /* We can't create these in init, or they would collide with the group and control created when parsing the XML */ - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataAccessRulePrivate *priv = GDATA_ACCESS_RULE (object)->priv; -- GTimeVal time_val; - - /* Set the edited property to the current time (creation time). We don't do this in *_init() since that would cause - * setting it from parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->edited = time_val.tv_sec; -+ priv->edited = g_get_real_time () / G_USEC_PER_SEC; - - /* Set up the role and scope type */ - priv->role = g_strdup (GDATA_ACCESS_ROLE_NONE); -diff --git a/gdata/gdata-batch-operation.c b/gdata/gdata-batch-operation.c -index f78801ed..212fcb0b 100644 ---- a/gdata/gdata-batch-operation.c -+++ b/gdata/gdata-batch-operation.c -@@ -598,7 +598,7 @@ gdata_batch_operation_run (GDataBatchOperation *self, GCancellable *cancellable, - GDataBatchOperationPrivate *priv = self->priv; - SoupMessage *message; - GDataFeed *feed; -- GTimeVal updated; -+ gint64 updated; - gchar *upload_data; - guint status; - GHashTableIter iter; -@@ -638,9 +638,9 @@ gdata_batch_operation_run (GDataBatchOperation *self, GCancellable *cancellable, - message = _gdata_service_build_message (priv->service, priv->authorization_domain, SOUP_METHOD_POST, priv->feed_uri, NULL, TRUE); - - /* Build the request */ -- g_get_current_time (&updated); -+ updated = g_get_real_time () / G_USEC_PER_SEC; - feed = _gdata_feed_new (GDATA_TYPE_FEED, "Batch operation feed", -- "batch1", updated.tv_sec); -+ "batch1", updated); - - g_hash_table_iter_init (&iter, priv->operations); - while (g_hash_table_iter_next (&iter, &op_id, (gpointer*) &op) == TRUE) { -@@ -658,7 +658,7 @@ gdata_batch_operation_run (GDataBatchOperation *self, GCancellable *cancellable, - g_free (entry_uri); - - gdata_entry_set_title (entry, "Batch operation query"); -- _gdata_entry_set_updated (entry, updated.tv_sec); -+ _gdata_entry_set_updated (entry, updated); - - _gdata_entry_set_batch_data (entry, op->id, op->type); - _gdata_feed_add_entry (feed, entry); -diff --git a/gdata/gdata-oauth1-authorizer.c b/gdata/gdata-oauth1-authorizer.c -index 7b857ac0..6d5fd5ec 100644 ---- a/gdata/gdata-oauth1-authorizer.c -+++ b/gdata/gdata-oauth1-authorizer.c -@@ -471,7 +471,7 @@ sign_message (GDataOAuth1Authorizer *self, SoupMessage *message, const gchar *to - gchar *uri, *signature, *timestamp; - char *nonce; - gboolean is_first = TRUE; -- GTimeVal time_val; -+ gint64 time_val; - guchar signature_buf[HMAC_SHA1_LEN]; - gsize signature_buf_len; - GHmac *signature_hmac; -@@ -494,8 +494,8 @@ sign_message (GDataOAuth1Authorizer *self, SoupMessage *message, const gchar *to - - /* Add various standard parameters to the list (note: this modifies the hash table belonging to the caller) */ - nonce = oauth_gen_nonce (); -- g_get_current_time (&time_val); -- timestamp = g_strdup_printf ("%li", time_val.tv_sec); -+ time_val = g_get_real_time () / G_USEC_PER_SEC; -+ timestamp = g_strdup_printf ("%li", time_val); - - if (parameters == NULL) { - parameters = g_hash_table_new (g_str_hash, g_str_equal); -diff --git a/gdata/gdata-parser.c b/gdata/gdata-parser.c -index c1cfe00d..d6ab92e2 100644 ---- a/gdata/gdata-parser.c -+++ b/gdata/gdata-parser.c -@@ -207,21 +207,22 @@ gboolean - gdata_parser_int64_from_date (const gchar *date, gint64 *_time) - { - gchar *iso8601_date; -- gboolean success; -- GTimeVal time_val; -+ g_autoptr(GDateTime) time_val = NULL; - - if (strlen (date) != 10 && strlen (date) != 8) - return FALSE; - - /* Note: This doesn't need translating, as it's outputting an ISO 8601 time string */ - iso8601_date = g_strdup_printf ("%sT00:00:00Z", date); -- success = g_time_val_from_iso8601 (iso8601_date, &time_val); -+ time_val = g_date_time_new_from_iso8601 (iso8601_date, NULL); - g_free (iso8601_date); - -- if (success == TRUE) -- *_time = time_val.tv_sec; -+ if (time_val) { -+ *_time = g_date_time_to_unix (time_val); -+ return TRUE; -+ } - -- return success; -+ return FALSE; - } - - gchar * -@@ -240,21 +241,24 @@ gdata_parser_date_from_int64 (gint64 _time) - gchar * - gdata_parser_int64_to_iso8601 (gint64 _time) - { -- GTimeVal time_val; -+ g_autoptr(GDateTime) time_val = NULL; -+ -+ time_val = g_date_time_new_from_unix_utc (_time); - -- time_val.tv_sec = _time; -- time_val.tv_usec = 0; -+ if (!time_val) -+ return NULL; - -- return g_time_val_to_iso8601 (&time_val); -+ return g_date_time_format_iso8601 (time_val); - } - - gboolean - gdata_parser_int64_from_iso8601 (const gchar *date, gint64 *_time) - { -- GTimeVal time_val; -+ g_autoptr(GDateTime) time_val = NULL; - -- if (g_time_val_from_iso8601 (date, &time_val) == TRUE) { -- *_time = time_val.tv_sec; -+ time_val = g_date_time_new_from_iso8601 (date, NULL); -+ if (time_val) { -+ *_time = g_date_time_to_unix (time_val); - return TRUE; - } - -@@ -479,7 +483,7 @@ gdata_parser_int64_time_from_element (xmlNode *element, const gchar *element_nam - gint64 *output, gboolean *success, GError **error) - { - xmlChar *text; -- GTimeVal time_val; -+ g_autoptr(GDateTime) time_val = NULL; - - /* Check it's the right element */ - if (xmlStrcmp (element->name, (xmlChar*) element_name) != 0) -@@ -499,14 +503,15 @@ gdata_parser_int64_time_from_element (xmlNode *element, const gchar *element_nam - return TRUE; - } - -- /* Attempt to parse the string as a GTimeVal */ -- if (g_time_val_from_iso8601 ((gchar*) text, &time_val) == FALSE) { -+ /* Attempt to parse the string as a GDateTune */ -+ time_val = g_date_time_new_from_iso8601 ((gchar *) text, NULL); -+ if (!time_val) { - *success = gdata_parser_error_not_iso8601_format (element, (gchar*) text, error); - xmlFree (text); - return TRUE; - } - -- *output = time_val.tv_sec; -+ *output = g_date_time_to_unix (time_val); - - /* Success! */ - xmlFree (text); -@@ -911,7 +916,7 @@ gdata_parser_int64_time_from_json_member (JsonReader *reader, const gchar *membe - gint64 *output, gboolean *success, GError **error) - { - const gchar *text; -- GTimeVal time_val; -+ g_autoptr(GDateTime) time_val = NULL; - const GError *child_error = NULL; - - /* Check if there's such element */ -@@ -935,14 +940,15 @@ gdata_parser_int64_time_from_json_member (JsonReader *reader, const gchar *membe - return TRUE; - } - -- /* Attempt to parse the string as a GTimeVal */ -- if (g_time_val_from_iso8601 ((gchar*) text, &time_val) == FALSE) { -+ /* Attempt to parse the string as a GDateTime */ -+ time_val = g_date_time_new_from_iso8601 (text, NULL); -+ if (!time_val) { - *success = gdata_parser_error_not_iso8601_format_json (reader, text, error); - return TRUE; - } - - /* Success! */ -- *output = time_val.tv_sec; -+ *output = g_date_time_to_unix (time_val); - *success = TRUE; - - return TRUE; -diff --git a/gdata/gdata-service.c b/gdata/gdata-service.c -index fce970ec..40fbaf84 100644 ---- a/gdata/gdata-service.c -+++ b/gdata/gdata-service.c -@@ -956,12 +956,9 @@ __gdata_service_query (GDataService *self, GDataAuthorizationDomain *domain, con - - /* Are we off the end of the final page? */ - if (query != NULL && _gdata_query_is_finished (query)) { -- GTimeVal updated; -- - /* Build an empty dummy feed to signify the end of the list. */ -- g_get_current_time (&updated); - return _gdata_feed_new (klass->feed_type, "Empty feed", "feed1", -- updated.tv_sec); -+ g_get_real_time () / G_USEC_PER_SEC); - } - - /* Send the request. */ -diff --git a/gdata/services/calendar/gdata-calendar-event.c b/gdata/services/calendar/gdata-calendar-event.c -index a3a4d713..4cdf2700 100644 ---- a/gdata/services/calendar/gdata-calendar-event.c -+++ b/gdata/services/calendar/gdata-calendar-event.c -@@ -37,7 +37,7 @@ - * GDataGDWhere *where; - * GDataGDWho *who; - * GDataGDWhen *when; -- * GTimeVal current_time; -+ * gint64 current_time; - * GError *error = NULL; - * - * /* Create a service */ -@@ -58,8 +58,8 @@ - * gdata_calendar_event_add_person (event, who); - * g_object_unref (who); - * -- * g_get_current_time (¤t_time); -- * when = gdata_gd_when_new (current_time.tv_sec, current_time.tv_sec + 3600, FALSE); -+ * current_time = g_get_real_time () / G_USEC_PER_SEC; -+ * when = gdata_gd_when_new (current_time, current_time + 3600, FALSE); - * gdata_calendar_event_add_time (event, when); - * g_object_unref (when); - * -@@ -374,12 +374,10 @@ gdata_calendar_event_constructor (GType type, guint n_construct_params, GObjectC - - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataCalendarEventPrivate *priv = GDATA_CALENDAR_EVENT (object)->priv; -- GTimeVal time_val; - - /* Set the edited property to the current time (creation time). We don't do this in *_init() since that would cause - * setting it from parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->edited = time_val.tv_sec; -+ priv->edited = g_get_real_time () / G_USEC_PER_SEC; - } - - return object; -@@ -554,7 +552,7 @@ date_object_from_json (JsonReader *reader, - if (json_reader_read_member (reader, "dateTime")) { - const gchar *date_string; - const GError *child_error; -- GTimeVal time_val; -+ GDateTime *time_val; - - date_string = json_reader_get_string_value (reader); - child_error = json_reader_get_error (reader); -@@ -567,13 +565,15 @@ date_object_from_json (JsonReader *reader, - return TRUE; - } - -- if (!g_time_val_from_iso8601 (date_string, &time_val)) { -+ time_val = g_date_time_new_from_iso8601 (date_string, NULL); -+ if (!time_val) { - *success = gdata_parser_error_not_iso8601_format_json (reader, date_string, error); - json_reader_end_member (reader); - return TRUE; - } - -- date_time = time_val.tv_sec; -+ date_time = g_date_time_to_unix (time_val); -+ g_date_time_unref (time_val); - is_date = FALSE; - found_member = TRUE; - } -diff --git a/gdata/services/calendar/gdata-calendar-query.c b/gdata/services/calendar/gdata-calendar-query.c -index 37779bbe..dd019529 100644 ---- a/gdata/services/calendar/gdata-calendar-query.c -+++ b/gdata/services/calendar/gdata-calendar-query.c -@@ -37,7 +37,7 @@ - * GDataCalendarCalendar *calendar; - * GDataCalendarQuery *query; - * GDataFeed *feed; -- * GTimeVal current_time; -+ * gint64 current_time; - * GList *i; - * GError *error = NULL; - * -@@ -47,8 +47,8 @@ - * - * /* Create the query to use. We're going to query for events within the next week which match the search term "party", - * * ordered by last modification time (descending). */ -- * g_get_current_time (¤t_time); -- * query = gdata_calendar_query_new_with_limits ("party", current_time.tv_sec, current_time.tv_sec + 7 * 24 * 60 * 60); -+ * current_time = g_get_real_time () / G_USEC_PER_SEC; -+ * query = gdata_calendar_query_new_with_limits ("party", current_time, current_time + 7 * 24 * 60 * 60); - * gdata_calendar_query_set_order_by (query, "lastmodified"); - * - * /* Execute the query */ -diff --git a/gdata/services/contacts/gdata-contacts-contact.c b/gdata/services/contacts/gdata-contacts-contact.c -index 4f511315..eb4148d0 100644 ---- a/gdata/services/contacts/gdata-contacts-contact.c -+++ b/gdata/services/contacts/gdata-contacts-contact.c -@@ -582,12 +582,10 @@ gdata_contacts_contact_constructor (GType type, guint n_construct_params, GObjec - - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataContactsContactPrivate *priv = GDATA_CONTACTS_CONTACT (object)->priv; -- GTimeVal time_val; - - /* Set the edited property to the current time (creation time). We don't do this in *_init() since that would cause - * setting it from parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->edited = time_val.tv_sec; -+ priv->edited = g_get_real_time () / G_USEC_PER_SEC; - } - - return object; -diff --git a/gdata/services/contacts/gdata-contacts-group.c b/gdata/services/contacts/gdata-contacts-group.c -index 055f4255..2059369a 100644 ---- a/gdata/services/contacts/gdata-contacts-group.c -+++ b/gdata/services/contacts/gdata-contacts-group.c -@@ -266,12 +266,10 @@ gdata_contacts_group_constructor (GType type, guint n_construct_params, GObjectC - - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataContactsGroupPrivate *priv = GDATA_CONTACTS_GROUP (object)->priv; -- GTimeVal time_val; - - /* Set the edited property to the current time (creation time). We don't do this in *_init() since that would cause setting it from - * parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->edited = time_val.tv_sec; -+ priv->edited = g_get_real_time () / G_USEC_PER_SEC; - } - - return object; -diff --git a/gdata/services/documents/gdata-documents-query.c b/gdata/services/documents/gdata-documents-query.c -index e589b524..4797718f 100644 ---- a/gdata/services/documents/gdata-documents-query.c -+++ b/gdata/services/documents/gdata-documents-query.c -@@ -37,7 +37,7 @@ - * GDataDocumentsService *service; - * GDataDocumentsQuery *query; - * GDataFeed *feed; -- * GTimeVal current_time; -+ * gint64 current_time; - * GList *i; - * GError *error = NULL; - * -@@ -51,9 +51,9 @@ - * gdata_documents_query_add_collaborator (query, "example@gmail.com"); - * gdata_documents_query_set_show_deleted (query, TRUE); - * -- * g_get_current_time (¤t_time); -- * gdata_query_set_updated_min (GDATA_QUERY (query), current_time.tv_sec - 7 * 24 * 60 * 60); -- * gdata_query_set_updated_max (GDATA_QUERY (query), current_time.tv_sec); -+ * current_time = g_get_real_time () / G_USEC_PER_SEC; -+ * gdata_query_set_updated_min (GDATA_QUERY (query), current_time - 7 * 24 * 60 * 60); -+ * gdata_query_set_updated_max (GDATA_QUERY (query), current_time); - * - * /* Execute the query */ - * feed = gdata_documents_service_query_documents (service, query, NULL, NULL, NULL, &error); -diff --git a/gdata/services/picasaweb/gdata-picasaweb-album.c b/gdata/services/picasaweb/gdata-picasaweb-album.c -index 40fd8cfb..fd6d0abc 100644 ---- a/gdata/services/picasaweb/gdata-picasaweb-album.c -+++ b/gdata/services/picasaweb/gdata-picasaweb-album.c -@@ -507,13 +507,13 @@ gdata_picasaweb_album_constructor (GType type, guint n_construct_params, GObject - - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataPicasaWebAlbumPrivate *priv = GDATA_PICASAWEB_ALBUM (object)->priv; -- GTimeVal time_val; -+ gint64 time_val; - - /* Set the edited and timestamp properties to the current time (creation time). bgo#599140 - * We don't do this in *_init() since that would cause setting it from parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->timestamp = (gint64) time_val.tv_sec * 1000; -- priv->edited = time_val.tv_sec; -+ time_val = g_get_real_time () / G_USEC_PER_SEC; -+ priv->timestamp = time_val * 1000; -+ priv->edited = time_val; - } - - return object; -diff --git a/gdata/services/picasaweb/gdata-picasaweb-file.c b/gdata/services/picasaweb/gdata-picasaweb-file.c -index 53aab33b..96db23a6 100644 ---- a/gdata/services/picasaweb/gdata-picasaweb-file.c -+++ b/gdata/services/picasaweb/gdata-picasaweb-file.c -@@ -690,13 +690,13 @@ gdata_picasaweb_file_constructor (GType type, guint n_construct_params, GObjectC - - if (_gdata_parsable_is_constructed_from_xml (GDATA_PARSABLE (object)) == FALSE) { - GDataPicasaWebFilePrivate *priv = GDATA_PICASAWEB_FILE (object)->priv; -- GTimeVal time_val; -+ gint64 time_val; - - /* Set the edited and timestamp properties to the current time (creation time). bgo#599140 - * We don't do this in *_init() since that would cause setting it from parse_xml() to fail (duplicate element). */ -- g_get_current_time (&time_val); -- priv->timestamp = (gint64) time_val.tv_sec * 1000; -- priv->edited = time_val.tv_sec; -+ time_val = g_get_real_time () / G_USEC_PER_SEC; -+ priv->timestamp = time_val * 1000; -+ priv->edited = time_val; - } - - return object; -diff --git a/gdata/services/youtube/gdata-youtube-query.c b/gdata/services/youtube/gdata-youtube-query.c -index 212a0d10..bb5cff15 100644 ---- a/gdata/services/youtube/gdata-youtube-query.c -+++ b/gdata/services/youtube/gdata-youtube-query.c -@@ -572,22 +572,20 @@ get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboo - - if (priv->age != GDATA_YOUTUBE_AGE_ALL_TIME) { - gchar *after; -- GTimeVal tv = { 0, }; -+ GDateTime *tv, *tv2; - -- g_get_current_time (&tv); -- -- /* Squash the microseconds; they’re not useful. */ -- tv.tv_usec = 0; -+ /* don't use g_date_time_new_now_utc (squash microseconds) */ -+ tv2 = g_date_time_new_from_unix_utc (g_get_real_time () / G_USEC_PER_SEC); - - switch (priv->age) { - case GDATA_YOUTUBE_AGE_TODAY: -- tv.tv_sec -= 24 * 60 * 60; -+ tv = g_date_time_add_days (tv2, -1); - break; - case GDATA_YOUTUBE_AGE_THIS_WEEK: -- tv.tv_sec -= 7 * 24 * 60 * 60; -+ tv = g_date_time_add_weeks (tv2, -1); - break; - case GDATA_YOUTUBE_AGE_THIS_MONTH: -- tv.tv_sec -= 31 * 24 * 60 * 60; -+ tv = g_date_time_add_months (tv2, -1); - break; - case GDATA_YOUTUBE_AGE_ALL_TIME: - default: -@@ -596,9 +594,11 @@ get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboo - - APPEND_SEP - -- after = g_time_val_to_iso8601 (&tv); -+ after = g_date_time_format_iso8601 (tv); - g_string_append_printf (query_uri, "publishedAfter=%s", after); - g_free (after); -+ g_date_time_unref (tv); -+ g_date_time_unref (tv2); - } - - /* We don’t need to use APPEND_SEP below here, as this parameter is -diff --git a/gdata/services/youtube/gdata-youtube-service.c b/gdata/services/youtube/gdata-youtube-service.c -index 75134e57..35994c54 100644 ---- a/gdata/services/youtube/gdata-youtube-service.c -+++ b/gdata/services/youtube/gdata-youtube-service.c -@@ -684,14 +684,16 @@ standard_feed_type_to_feed_uri (GDataYouTubeStandardFeedType feed_type) - case GDATA_YOUTUBE_RECENTLY_FEATURED_FEED: - case GDATA_YOUTUBE_WATCH_ON_MOBILE_FEED: { - gchar *date, *out; -- GTimeVal tv; -+ GDateTime *tv, *tv2; - - /* All feed types except MOST_POPULAR have been deprecated for - * a while, and fall back to MOST_POPULAR on the server anyway. - * See: https://developers.google.com/youtube/2.0/developers_guide_protocol_video_feeds#Standard_feeds */ -- g_get_current_time (&tv); -- tv.tv_sec -= 24 * 60 * 60; /* 1 day ago */ -- date = g_time_val_to_iso8601 (&tv); -+ tv = g_date_time_new_now_utc (); -+ tv2 = g_date_time_add_days (tv, -1); -+ g_date_time_unref (tv); -+ date = g_date_time_format_iso8601 (tv2); -+ g_date_time_unref (tv2); - out = _gdata_service_build_uri ("https://www.googleapis.com/youtube/v3/videos" - "?part=snippet" - "&chart=mostPopular" -diff --git a/gdata/tests/calendar.c b/gdata/tests/calendar.c -index 4d70d1b7..87fb0b81 100644 ---- a/gdata/tests/calendar.c -+++ b/gdata/tests/calendar.c -@@ -495,7 +495,7 @@ test_event_insert (InsertEventData *data, gconstpointer service) - GDataGDWhere *where; - GDataGDWho *who; - GDataGDWhen *when; -- GTimeVal start_time, end_time; -+ GDateTime *start_time, *end_time; - GError *error = NULL; - - gdata_test_mock_server_start_trace (mock_server, "event-insert"); -@@ -512,11 +512,13 @@ test_event_insert (InsertEventData *data, gconstpointer service) - who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com"); - gdata_calendar_event_add_person (event, who); - g_object_unref (who); -- g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time); -- g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time); -- when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE); -+ start_time = g_date_time_new_from_iso8601 ("2009-04-17T15:00:00.000Z", NULL); -+ end_time = g_date_time_new_from_iso8601 ("2009-04-17T17:00:00.000Z", NULL); -+ when = gdata_gd_when_new (g_date_time_to_unix (start_time), g_date_time_to_unix (end_time), FALSE); - gdata_calendar_event_add_time (event, when); - g_object_unref (when); -+ g_date_time_unref (start_time); -+ g_date_time_unref (end_time); - - /* Insert the event */ - new_event = data->new_event = gdata_calendar_service_insert_calendar_event (GDATA_CALENDAR_SERVICE (service), -@@ -540,8 +542,8 @@ G_STMT_START { - GDataGDWhere *where; - GDataGDWho *who; - GDataGDWhen *when; -- GTimeVal start_time; -- GTimeVal end_time; -+ GDateTime *start_time; -+ GDateTime *end_time; - - event = gdata_calendar_event_new (NULL); - -@@ -555,11 +557,13 @@ G_STMT_START { - who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com"); - gdata_calendar_event_add_person (event, who); - g_object_unref (who); -- g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time); -- g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time); -- when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE); -+ start_time = g_date_time_new_from_iso8601 ("2009-04-17T15:00:00.000Z", NULL); -+ end_time = g_date_time_new_from_iso8601 ("2009-04-17T17:00:00.000Z", NULL); -+ when = gdata_gd_when_new (g_date_time_to_unix (start_time), g_date_time_to_unix (end_time), FALSE); - gdata_calendar_event_add_time (event, when); - g_object_unref (when); -+ g_date_time_unref (start_time); -+ g_date_time_unref (end_time); - - /* Insert the event */ - gdata_calendar_service_insert_calendar_event_async (GDATA_CALENDAR_SERVICE (service), -@@ -587,7 +591,7 @@ test_event_json (void) - GDataGDWhere *where; - GDataGDWho *who; - GDataGDWhen *when; -- GTimeVal start_time, end_time; -+ GDateTime *start_time, *end_time; - - event = gdata_calendar_event_new (NULL); - -@@ -601,11 +605,13 @@ test_event_json (void) - who = gdata_gd_who_new (GDATA_GD_WHO_EVENT_ORGANIZER, "John Smith‽", "john.smith@example.com"); - gdata_calendar_event_add_person (event, who); - g_object_unref (who); -- g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &start_time); -- g_time_val_from_iso8601 ("2009-04-17T17:00:00.000Z", &end_time); -- when = gdata_gd_when_new (start_time.tv_sec, end_time.tv_sec, FALSE); -+ start_time = g_date_time_new_from_iso8601 ("2009-04-17T15:00:00.000Z", NULL); -+ end_time = g_date_time_new_from_iso8601 ("2009-04-17T17:00:00.000Z", NULL); -+ when = gdata_gd_when_new (g_date_time_to_unix (start_time), g_date_time_to_unix (end_time), FALSE); - gdata_calendar_event_add_time (event, when); - g_object_unref (when); -+ g_date_time_unref (start_time); -+ g_date_time_unref (end_time); - - /* Check the JSON */ - gdata_test_assert_json (event, "{" -@@ -1099,7 +1105,7 @@ static void - test_query_uri (void) - { - gint64 _time; -- GTimeVal time_val; -+ GDateTime *time_val; - gchar *query_uri; - GDataCalendarQuery *query = gdata_calendar_query_new ("q"); - -@@ -1111,15 +1117,15 @@ test_query_uri (void) - g_assert_cmpstr (gdata_calendar_query_get_order_by (query), ==, "starttime"); - - G_GNUC_BEGIN_IGNORE_DEPRECATIONS -- g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &time_val); -- gdata_calendar_query_set_recurrence_expansion_start (query, time_val.tv_sec); -+ time_val = g_date_time_new_from_iso8601 ("2009-04-17T15:00:00.000Z", NULL); -+ gdata_calendar_query_set_recurrence_expansion_start (query, g_date_time_to_unix (time_val)); - _time = gdata_calendar_query_get_recurrence_expansion_start (query); -- g_assert_cmpint (_time, ==, time_val.tv_sec); -+ g_assert_cmpint (_time, ==, g_date_time_to_unix (time_val)); - -- g_time_val_from_iso8601 ("2010-04-17T15:00:00.000Z", &time_val); -- gdata_calendar_query_set_recurrence_expansion_end (query, time_val.tv_sec); -+ time_val = g_date_time_new_from_iso8601 ("2010-04-17T15:00:00.000Z", NULL); -+ gdata_calendar_query_set_recurrence_expansion_end (query, g_date_time_to_unix (time_val)); - _time = gdata_calendar_query_get_recurrence_expansion_end (query); -- g_assert_cmpint (_time, ==, time_val.tv_sec); -+ g_assert_cmpint (_time, ==, g_date_time_to_unix (time_val)); - G_GNUC_END_IGNORE_DEPRECATIONS - - gdata_calendar_query_set_single_events (query, TRUE); -@@ -1130,15 +1136,17 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS - g_assert_cmpstr (gdata_calendar_query_get_sort_order (query), ==, "descending"); - G_GNUC_END_IGNORE_DEPRECATIONS - -- g_time_val_from_iso8601 ("2009-04-17T15:00:00.000Z", &time_val); -- gdata_calendar_query_set_start_min (query, time_val.tv_sec); -+ time_val = g_date_time_new_from_iso8601 ("2009-04-17T15:00:00.000Z", NULL); -+ gdata_calendar_query_set_start_min (query, g_date_time_to_unix (time_val)); - _time = gdata_calendar_query_get_start_min (query); -- g_assert_cmpint (_time, ==, time_val.tv_sec); -+ g_assert_cmpint (_time, ==, g_date_time_to_unix (time_val)); -+ g_date_time_unref (time_val); - -- g_time_val_from_iso8601 ("2010-04-17T15:00:00.000Z", &time_val); -- gdata_calendar_query_set_start_max (query, time_val.tv_sec); -+ time_val = g_date_time_new_from_iso8601 ("2010-04-17T15:00:00.000Z", NULL); -+ gdata_calendar_query_set_start_max (query, g_date_time_to_unix (time_val)); - _time = gdata_calendar_query_get_start_max (query); -- g_assert_cmpint (_time, ==, time_val.tv_sec); -+ g_assert_cmpint (_time, ==, g_date_time_to_unix (time_val)); -+ g_date_time_unref (time_val); - - gdata_calendar_query_set_timezone (query, "America/Los Angeles"); - g_assert_cmpstr (gdata_calendar_query_get_timezone (query), ==, "America/Los_Angeles"); -diff --git a/gdata/tests/contacts.c b/gdata/tests/contacts.c -index e4f72deb..f70cee25 100644 ---- a/gdata/tests/contacts.c -+++ b/gdata/tests/contacts.c -@@ -304,14 +304,12 @@ test_contact_insert (InsertData *data, gconstpointer service) - GList *list; - GDate date; - GHashTable *properties; -- GTimeVal current_time; - gint64 edited, creation_time; - GError *error = NULL; - - gdata_test_mock_server_start_trace (mock_server, "contact-insert"); - - contact = gdata_contacts_contact_new (NULL); -- g_get_current_time (¤t_time); - - /* Check the kind is present and correct */ - g_assert (GDATA_IS_CONTACTS_CONTACT (contact)); -@@ -752,13 +750,13 @@ static void - test_group_insert (InsertGroupData *data, gconstpointer service) - { - GDataContactsGroup *group, *new_group; -- GTimeVal time_val; -+ gint64 time_val; - GHashTable *properties; - GError *error = NULL; - - gdata_test_mock_server_start_trace (mock_server, "group-insert"); - -- g_get_current_time (&time_val); -+ time_val = g_get_real_time () / G_USEC_PER_SEC; - - group = gdata_contacts_group_new (NULL); - -@@ -780,7 +778,7 @@ test_group_insert (InsertGroupData *data, gconstpointer service) - /* Check the properties. Time-based properties can't be checked when running against a mock server, since - * the trace files may be quite old. */ - if (uhm_server_get_enable_online (mock_server) == TRUE) { -- g_assert_cmpint (gdata_contacts_group_get_edited (new_group), >=, time_val.tv_sec); -+ g_assert_cmpint (gdata_contacts_group_get_edited (new_group), >=, time_val); - } - g_assert (gdata_contacts_group_is_deleted (new_group) == FALSE); - g_assert (gdata_contacts_group_get_system_group_id (new_group) == NULL); -@@ -850,12 +848,12 @@ test_contact_properties (void) - gchar *nickname, *file_as, *billing_information, *directory_server, *gender, *initials, *maiden_name, *mileage, *occupation; - gchar *priority, *sensitivity, *short_name, *subject, *photo_etag; - GDate date, *date2; -- GTimeVal current_time; -+ gint64 current_time; - gint64 edited; - gboolean deleted, birthday_has_year; - - contact = gdata_contacts_contact_new (NULL); -- g_get_current_time (¤t_time); -+ current_time = g_get_real_time () / G_USEC_PER_SEC; - - /* Check the kind is present and correct */ - g_assert (GDATA_IS_CONTACTS_CONTACT (contact)); -@@ -984,7 +982,7 @@ test_contact_properties (void) - "subject", &subject, - NULL); - -- g_assert_cmpint (edited, ==, current_time.tv_sec); -+ g_assert_cmpint (edited, ==, current_time); - g_assert (deleted == FALSE); - g_assert (photo_etag == NULL); - g_assert (name2 == name); -@@ -1751,7 +1749,7 @@ static void - test_group_properties (void) - { - GDataContactsGroup *group; -- GTimeVal time_val; -+ gint64 time_val; - GHashTable *properties; - gint64 edited; - gboolean deleted; -@@ -1768,8 +1766,8 @@ test_group_properties (void) - g_assert (gdata_contacts_group_set_extended_property (group, "foobar", "barfoo") == TRUE); - - /* Check various properties */ -- g_get_current_time (&time_val); -- g_assert_cmpint (gdata_contacts_group_get_edited (group), ==, time_val.tv_sec); -+ time_val = g_get_real_time () / G_USEC_PER_SEC; -+ g_assert_cmpint (gdata_contacts_group_get_edited (group), ==, time_val); - g_assert (gdata_contacts_group_is_deleted (group) == FALSE); - g_assert (gdata_contacts_group_get_system_group_id (group) == NULL); - -@@ -1785,7 +1783,7 @@ test_group_properties (void) - "system-group-id", &system_group_id, - NULL); - -- g_assert_cmpint (edited, ==, time_val.tv_sec); -+ g_assert_cmpint (edited, ==, time_val); - g_assert (deleted == FALSE); - g_assert (system_group_id == NULL); - -diff --git a/gdata/tests/general.c b/gdata/tests/general.c -index 30604ba1..39478713 100644 ---- a/gdata/tests/general.c -+++ b/gdata/tests/general.c -@@ -3502,11 +3502,12 @@ static void - test_gd_when_escaping (void) - { - GDataGDWhen *when; -- GTimeVal start_time; -+ GDateTime *start_time; - -- g_time_val_from_iso8601 ("2005-06-07T01:00:00Z", &start_time); -- when = gdata_gd_when_new (start_time.tv_sec, -1, FALSE); -+ start_time = g_date_time_new_from_iso8601 ("2005-06-07T01:00:00Z", NULL); -+ when = gdata_gd_when_new (g_date_time_to_unix (start_time), -1, FALSE); - gdata_gd_when_set_value_string (when, "Value string & stuff!"); -+ g_date_time_unref (start_time); - - /* Check the outputted XML is escaped properly */ - gdata_test_assert_xml (when, -diff --git a/gdata/tests/perf.c b/gdata/tests/perf.c -index 2749d40d..60f3dcc1 100644 ---- a/gdata/tests/perf.c -+++ b/gdata/tests/perf.c -@@ -78,23 +78,24 @@ test_parse_feed (void) - static void - test_perf_parsing (void) - { -- GTimeVal start_time, end_time; -+ GDateTime *start_time, *end_time; -+ GTimeSpan total_time, per_iteration_time; - guint i; -- guint64 total_time; /* microseconds */ -- guint64 per_iteration_time; /* microseconds */ - - #define ITERATIONS 10000 - - /* Test feed parsing time */ -- g_get_current_time (&start_time); -+ start_time = g_date_time_new_now_utc (); - for (i = 0; i < ITERATIONS; i++) - test_parse_feed (); -- g_get_current_time (&end_time); -+ end_time = g_date_time_new_now_utc (); - -- total_time = (end_time.tv_sec - start_time.tv_sec) * G_USEC_PER_SEC + -- (end_time.tv_usec - start_time.tv_usec); -+ total_time = g_date_time_difference (end_time, start_time); - per_iteration_time = total_time / ITERATIONS; - -+ g_date_time_unref (start_time); -+ g_date_time_unref (end_time); -+ - /* Prefix with hashes to avoid the output being misinterpreted as TAP - * commands. */ - printf ("# Parsing a feed %u times took:\n" -diff --git a/gdata/tests/picasaweb.c b/gdata/tests/picasaweb.c -index eecf1b78..19978e3c 100644 ---- a/gdata/tests/picasaweb.c -+++ b/gdata/tests/picasaweb.c -@@ -782,7 +782,7 @@ typedef struct { - static void - set_up_insert_album (InsertAlbumData *data, gconstpointer service) - { -- GTimeVal timestamp; -+ GDateTime *timestamp; - - data->album = gdata_picasaweb_album_new (NULL); - g_assert (GDATA_IS_PICASAWEB_ALBUM (data->album)); -@@ -791,8 +791,9 @@ set_up_insert_album (InsertAlbumData *data, gconstpointer service) - gdata_entry_set_summary (GDATA_ENTRY (data->album), "Family photos of the feast!"); - gdata_picasaweb_album_set_location (data->album, "Winnipeg, MN"); - -- g_time_val_from_iso8601 ("2002-10-14T09:58:59.643554Z", ×tamp); -- gdata_picasaweb_album_set_timestamp (data->album, (gint64) timestamp.tv_sec * 1000); -+ timestamp = g_date_time_new_from_iso8601 ("2002-10-14T09:58:59.643554Z", NULL); -+ gdata_picasaweb_album_set_timestamp (data->album, g_date_time_to_unix (timestamp) * 1000); -+ g_date_time_unref (timestamp); - } - - static void -@@ -1757,12 +1758,12 @@ test_album_new (void) - GRegex *regex; - GMatchInfo *match_info; - gint64 delta; -- GTimeVal timeval; -+ GDateTime *timeval; - - g_test_bug ("598893"); - - /* Get the current time */ -- g_get_current_time (&timeval); -+ timeval = g_date_time_new_now_utc (); - - /* Build a regex to match the timestamp from the XML, since we can't definitely say what it'll be. Note that we also assign any order to the - * namespace definitions, since due to a change in GLib's hashing algorithm, they could be in different orders with different GLib versions. */ -@@ -1795,9 +1796,10 @@ test_album_new (void) - xml = gdata_parsable_get_xml (GDATA_PARSABLE (album)); - g_assert (g_regex_match (regex, xml, 0, &match_info) == TRUE); - parsed_time_str = g_match_info_fetch (match_info, 2); -- delta = g_ascii_strtoull (parsed_time_str, NULL, 10) - (((guint64) timeval.tv_sec) * 1000 + ((guint64) timeval.tv_usec) / 1000); -+ delta = g_ascii_strtoull (parsed_time_str, NULL, 10) - (g_date_time_to_unix (timeval) * 1000 + ((guint64) g_date_time_get_microsecond (timeval)) / 1000); - g_assert_cmpuint (ABS (delta), <, 1000); - -+ g_date_time_unref (timeval); - g_free (parsed_time_str); - g_free (xml); - g_regex_unref (regex); -diff --git a/gdata/tests/youtube.c b/gdata/tests/youtube.c -index 5fefbaf8..b2732680 100644 ---- a/gdata/tests/youtube.c -+++ b/gdata/tests/youtube.c -@@ -1537,13 +1537,17 @@ test_comment_properties_parent_comment_uri (void) - static gchar * - build_this_week_date_str (void) - { -- GTimeVal tv; -+ GDateTime *tv, *tv2; -+ gchar *ret; - -- g_get_current_time (&tv); -- tv.tv_sec -= 7 * 24 * 60 * 60; /* this week */ -- tv.tv_usec = 0; /* pointless accuracy */ -+ /* don't use g_date_time_new_now_utc (squash microseconds) */ -+ tv = g_date_time_new_from_unix_utc (g_get_real_time () / G_USEC_PER_SEC); -+ tv2 = g_date_time_add_weeks (tv, -1); -+ g_date_time_unref (tv); - -- return g_time_val_to_iso8601 (&tv); -+ ret = g_date_time_format_iso8601 (tv2); -+ g_date_time_unref (tv2); -+ return ret; - } - - static void --- -GitLab - diff --git a/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb b/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb deleted file mode 100644 index 5f5d5834a7..0000000000 --- a/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb +++ /dev/null @@ -1,34 +0,0 @@ -SUMMARY = "GLib-based library for accessing online service APIs using the GData protocol" -HOMEPAGE = "http://live.gnome.org/libgdata" -BUGTRACKER = "https://bugzilla.gnome.org/" - -LICENSE = "LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \ - file://gdata/gdata.h;endline=20;md5=079a554efcf65d46f96a515806e7e99a \ - file://gdata/gdata-types.h;endline=20;md5=7399b111aac8718da13888fc634be6ef" - -DEPENDS = "libxml2 glib-2.0 libsoup-2.4 intltool-native liboauth gcr3 json-glib" - -GTKDOC_MESON_OPTION = "gtk_doc" - -inherit gnomebase pkgconfig gettext gtk-doc vala gobject-introspection manpages features_check - -SRC_URI += "file://0001-Drop-usage-of-deprecated-GTimeVal.patch" - -ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}" -REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG', 'goa', 'opengl', '', d)}" - -do_compile:prepend() { - export GIR_EXTRA_LIBS_PATH="${B}/gdata/.libs" -} - -# goa is required for gnome-photos -PACKAGECONFIG ??= "goa gtk vala" -PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false" -PACKAGECONFIG[goa] = "-Dgoa=enabled,-Dgoa=disabled,gnome-online-accounts" -PACKAGECONFIG[gtk] = "-Dgtk=enabled,-Dgtk=disabled,gtk+3" -PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false" - -EXTRA_OEMESON = "-Dalways_build_tests=false" - -SRC_URI[archive.sha256sum] = "dd8592eeb6512ad0a8cf5c8be8c72e76f74bfe6b23e4dd93f0756ee0716804c7"