Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 9e8dd677 authored by Akhil's avatar Akhil
Browse files

Handle timestamp correctly

parent 5a18d453
Loading
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -74,7 +74,6 @@ class MigrateWebmailAddressbooks extends Command {
	 * @return void
	 */
	private function migrateUsers(int $limit = 0, int $offset = 0, array $usernames = []) : void {
		$users = [];
		if (!empty($usernames)) {
			$emails = [];
			foreach ($usernames as $username) {
@@ -87,19 +86,18 @@ class MigrateWebmailAddressbooks extends Command {
				$email = $user->getEMailAddress();
				$emails[] = $email;
			}
			$users = $this->webmailMapper->getUsers($limit, $offset, $emails);
			if (empty($users)) {
			if (empty($emails)) {
				return;
			}
			$this->webmailMapper->migrateContacts($users, $this->commandOutput);
			$this->webmailMapper->migrateContacts($emails, $this->commandOutput);
			return;
		}
		$users = $this->webmailMapper->getUsers($limit, $offset);
		$emails = $this->webmailMapper->getEmails($limit, $offset);
		if ($limit === 0) {
			$this->commandOutput->writeln('Migrating all users starting at ' . $offset);
		} else {
			$this->commandOutput->writeln('Migrating ' . $limit . ' users starting at ' . $offset);
		}
		$this->webmailMapper->migrateContacts($users, $this->commandOutput);
		$this->webmailMapper->migrateContacts($emails, $this->commandOutput);
	}
}
+28 −21
Original line number Diff line number Diff line
@@ -2,18 +2,19 @@

namespace OCA\EcloudAccounts\Db;

use DateTime;
use OCP\IConfig;
use OCP\ILogger;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Connection;
use OCA\EcloudAccounts\Exception\DbConnectionParamsException;
use Sabre\VObject\UUIDUtil;
use \Sabre\VObject\Reader;
use OCP\IUserManager;
use OCP\IUser;
use OCA\DAV\CardDAV\CardDavBackend;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCA\SnappyMail\Util\SnappyMailHelper;
use RainLoop\Providers\AddressBook\PdoAddressBook;

use Throwable;

@@ -54,9 +55,9 @@ class WebmailMapper {
	}


	public function getUsers(int $limit = 0, int $offset = 0, array $emails = []) : array {
	public function getEmails(int $limit = 0, int $offset = 0, array $emails = []) : array {
		$qb = $this->conn->createQueryBuilder();
		$qb->select('rl_email, id_user')
		$qb->select('rl_email')
			->from(self::USERS_TABLE, 'u')
			->setFirstResult($offset);
		if ($limit > 0) {
@@ -69,24 +70,18 @@ class WebmailMapper {
		
		$result = $qb->execute();

		$users = [];
		$emails = [];
		while ($row = $result->fetch()) {
			$user = [
				'email' => $row['rl_email'],
				'id' => $row['id_user']
			];
			$users[] = $user;
			$users[] = (string) $row['rl_email'];
		}
		return $users;
		return $emails;
	}

	private function getUserContacts(string $email) : array {
		SnappyMailHelper::loadApp();
		$pdoAddressBook = new \RainLoop\Providers\AddressBook\PdoAddressBook();

		$pdoAddressBook = new PdoAddressBook();
		$pdoAddressBook->SetEmail($email);
		$contacts = $pdoAddressBook->GetContacts(0, PHP_INT_MAX);
		return $contacts;
		return $pdoAddressBook->GetContacts(0, PHP_INT_MAX);
	}

	private function createCloudAddressBook(array $contacts, string $email) {
@@ -122,7 +117,19 @@ class WebmailMapper {
		foreach ($contacts as $contact) {
			try {
				$contact->PRODID = '-//IDN murena.io//Migrated contact//EN';

				if (isset($contact->vCard->REV)) {
					try {
						$timeString = $contact->vCard->REV[0]->getJsonValue()[0];
						$timestamp = strtotime($timeString);
					}
					catch (Throwable $e) {
						// Do nothing
					}
				}
				if (!isset($timestamp)) {
					$timestamp = time();
				}
				$contact->vCard->REV = \gmdate('Ymd\\THis\\Z', $timestamp);
				$this->cardDavBackend->createCard(
					$addressBookId,
					UUIDUtil::getUUID() . '.vcf',
@@ -135,20 +142,20 @@ class WebmailMapper {
		}
	}

	public function migrateContacts(array $users, $commandOutput = null) {
	public function migrateContacts(array $emails, $commandOutput = null) {
		$userCount = 0;
		foreach ($users as $user) {
		foreach ($emails as $email) {
			$userCount += 1;
			if ($commandOutput) {
				$commandOutput->writeln('Migrating user ' . $userCount . ' with email: '.  $user['email']);
				$commandOutput->writeln('Migrating user ' . $userCount . ' with email: '. $email);
			}
			$contacts = $this->getUserContacts($user['email']);
			$contacts = $this->getUserContacts($email);
			$numberOfContacts = count($contacts);
			if ($commandOutput) {
				$commandOutput->writeln('Number of contacts for ' . $user['email'] . ':' . $numberOfContacts);
				$commandOutput->writeln('Number of contacts for ' . $email . ':' . $numberOfContacts);
			}
			if ($numberOfContacts > 0) {
				$this->createCloudAddressBook($contacts, $user['email']);
				$this->createCloudAddressBook($contacts, $email);
			}
		}
	}