2016-10-27 18:41:15 +03:00
< ? php
/**
* @ copyright Copyright ( c ) 2016 Lukas Reschke < lukas @ statuscode . ch >
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program 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 Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*
*/
namespace Test\App\AppStore\Fetcher ;
use OC\App\AppStore\Fetcher\AppFetcher ;
2018-03-29 10:44:38 +03:00
use OC\App\CompareVersion ;
2018-05-08 21:59:31 +03:00
use OC\Files\AppData\AppData ;
2017-05-10 10:56:38 +03:00
use OC\Files\AppData\Factory ;
2016-11-24 16:29:57 +03:00
use OCP\AppFramework\Utility\ITimeFactory ;
use OCP\Files\IAppData ;
use OCP\Files\NotFoundException ;
use OCP\Files\SimpleFS\ISimpleFile ;
use OCP\Files\SimpleFS\ISimpleFolder ;
use OCP\Http\Client\IClient ;
use OCP\Http\Client\IClientService ;
use OCP\Http\Client\IResponse ;
use OCP\IConfig ;
2017-05-12 11:02:15 +03:00
use OCP\ILogger ;
2018-03-29 10:44:38 +03:00
use PHPUnit_Framework_MockObject_MockObject ;
2016-11-24 16:29:57 +03:00
use Test\TestCase ;
2020-04-10 15:19:56 +03:00
class AppFetcherTest extends TestCase {
2018-03-29 10:44:38 +03:00
/** @var IAppData|PHPUnit_Framework_MockObject_MockObject */
2016-11-24 16:29:57 +03:00
protected $appData ;
2018-03-29 10:44:38 +03:00
/** @var IClientService|PHPUnit_Framework_MockObject_MockObject */
2016-11-24 16:29:57 +03:00
protected $clientService ;
2018-03-29 10:44:38 +03:00
/** @var ITimeFactory|PHPUnit_Framework_MockObject_MockObject */
2016-11-24 16:29:57 +03:00
protected $timeFactory ;
2018-03-29 10:44:38 +03:00
/** @var IConfig|PHPUnit_Framework_MockObject_MockObject */
2016-11-24 16:29:57 +03:00
protected $config ;
2018-03-29 10:44:38 +03:00
/** @var CompareVersion|PHPUnit_Framework_MockObject_MockObject */
protected $compareVersion ;
/** @var ILogger|PHPUnit_Framework_MockObject_MockObject */
2017-05-12 11:02:15 +03:00
protected $logger ;
2016-11-24 16:29:57 +03:00
/** @var AppFetcher */
protected $fetcher ;
/** @var string */
2020-04-10 17:48:31 +03:00
public static $responseJson = <<< 'EOD'
2016-11-25 13:32:46 +03:00
[{ " id " : " direct_menu " , " categories " : [ " customization " ], " userDocs " : " " , " adminDocs " : " " , " developerDocs " : " " , " issueTracker " : " https://github.com/juliushaertl/direct_menu/issues " , " website " : " " , " created " : " 2016-10-01T09:16:06.030994Z " , " lastModified " : " 2016-10-06T14:01:05.584192Z " , " releases " : [{ " version " : " 0.9.2 " , " phpExtensions " : [], " databases " : [], " shellCommands " : [], " phpVersionSpec " : " * " , " platformVersionSpec " : " >=9.0.0 <12.0.0 " , " minIntSize " : 32 , " download " : " https://github.com/juliushaertl/direct_menu/releases/download/v0.9.2/direct_menu.tar.gz " , " created " : " 2016-10-06T14:01:05.578297Z " , " licenses " : [ " agpl " ], " lastModified " : " 2016-10-06T14:01:05.643813Z " , " isNightly " : false , " rawPhpVersionSpec " : " * " , " rawPlatformVersionSpec " : " >=9 <=11 " , " signature " : " ERBS9G5bZ3vwCizz2Ht5DehsVJmb63bzF3aYcH7xjbDVMPagOFWdUAiLDwTeZR1n \n i4gdZ73J/IjHQQJoOPwtCjgbZgLPFqL5x13CLUO9mb/33dZe/+gqEDc/3AuJ4TlA \n XUdLxHRb1bwIlJOwuSr/E24452VG20WUhLXBoM0Zm7WcMxvJWo2zAWnuqnLX3dy9 \n cPB4PX+6JU2lUMINj8OYQmM1QnqvjG8YV0cYHbBbnSicOGwXEnni7mojsC8T0cn7 \n YEJ2O2iO9hh3fvFEXUzDcL7tDQ5bZqm63Oa991bsAJxFo/RbzeJRh//DcOrd8Ufn \n u2SqRhwybS8j4YvfjAL9RPdRfPLwf6X2gx/Y6QFrKHH0QMI/9J/ZFyoUQcqKbsHV \n 85O+yuWoqVmza71tkp4n9PuMdprCinaVvHbHbNGUf2SIh9BWuEQuVvvnvB+ZW8XY \n +Cl+unzk3WgOgT0iY3uEmsQcrLIo4DSKhcNgD1NS13fR/JTSavvmOqBarUMFZfVC \n bkR1DTBCyDjdpNBidpa3/26675dz5IT5Zedp4BBBREQzX08cIhJx5mgqDdX3CU09 \n uWtzoaLi71/1BWTFAN+Y9VyfZ8/Z3Pg3vKedRJ565mztIj0geL3riEsC5YnPS0+C \n +a3B9sDiiOa101EORzX3lrPqL7reEPdCxrIwN+hKFBQ= " , " translations " : {}}], " screenshots " : [{ " url " : " https://bitgrid.net/~jus/direct_menu_nc.png " }], " translations " : { " en " : { " name " : " Direct Menu " , " summary " : " Provide easy access to all apps in the header. " , " description " : " Provide easy access to all apps in the header. " }}, " isFeatured " : false , " authors " : [{ " name " : " Julius Härtl " , " mail " : " " , " homepage " : " " }], " ratingRecent " : 0.5 , " ratingOverall " : 0.5 , " ratingNumRecent " : 0 , " ratingNumOverall " : 0 , " certificate " : " -----BEGIN CERTIFICATE----- \r \n MIIEBjCCAu4CAhADMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD \r \n VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI \r \n MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB \r \n dXRob3JpdHkwHhcNMTYwOTE0MTI1MDU0WhcNMjYxMjIxMTI1MDU0WjAWMRQwEgYD \r \n VQQDDAtkaXJlY3RfbWVudTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB \r \n AMkzWsAkKP/40ktvJMpnr0IJNVoPOR0hvh24igcDskL1WKiD2eiRUenj5LE0Nvn+ \r \n siGmWsAqRVpdiz+Y8ghQqQMzKi43IrRN0AxlCrHWrSqBZT3wIAUcFz4RzEoFxc1N \r \n UZzWma6ljukGnvt4V1ZyT+H/cjqxUkBhh/y9SS0jUen1a1grND6Rw54X46V2dlCu \r \n FH+pLsfPJJGw+QLeTGHn7dqdv18cYMAlWDCzPixVnNiCXHZcUtKMmstU2xU4R2e6 \r \n zimp2rgkE4TNHrafpjH8xGdNi2FG5Dmokob/L5Q2r8jyNaW7UsFfrvLTRj371b3/ \r \n 2FhhxoGUvDzaG2An02Exwm52LJfdTVMHAMPZub5poHfy5vAEdZGPQ/m02l8ZK/Y2 \r \n 7yT807GlfPMXfdfjCxR6wNtmv7rvBDdrUZmIRNJfpFSdvlH/+MOTWnabyfQv2K4Q \r \n BIwltX6Elh0lh4ntvt1ZVtvFv+PL1Dc7QLV+w19+/LJA0mnsh7GIFYKFlbA65gA0 \r \n c/w+uqDy0+5MxkR9WGPpd79KRA1tKWTis4Ny1lApK5y3zIsVGa3DfBHXcwqkWHbV \r \n wIpyuyyDsFtC1b9LTFONX7iU9cbNk5C5GTM331MdA2kLcD/D5k42GNTBSca7MkPx \r \n Fx/ETSn0Ct167el30symf2AxvXjw+mBYPN71rVTMDwe9AgMBAAEwDQYJKoZIhvcN \r \n AQELBQADggEBAC0fJKnbEhXA8M283jA9GxABxLyTBcQyVVNnz2L/bYYNi81Y9iZv \r \n +U0S3qaIfoqNcV9FTKAutbsKvWyolnI7MRRK6feNuFfoP2jKubM1CnawpyT/RF2Q \r \n e/zxnB1EmeI2X5D2xceJDLB7Fy5W0EGrLixRIdFaSUommWFUm9E2hSIaNlziSBdc \r \n 1J/mOQeNYO5zg5ouEt1rzQW4Mhh1I2uNQmGe4ip+Jl/2LAv3FZuu4NrSEcoXH3ro \r \n G2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M+Ug81AqiY7XjdiaCPdh0Tthcx \r \n 2OmWZo7UBREWenjKyFZZ/iKoqH5sdenBtpo= \r \n -----END CERTIFICATE----- " },{ " id " : " apporder " , " categories " : [ " customization " ], " userDocs " : " " , " adminDocs " : " " , " developerDocs " : " " , " issueTracker " : " https://github.com/juliushaertl/apporder/issues " , " website " : " " , " created " : " 2016-10-01T09:16:47.111889Z " , " lastModified " : " 2016-10-12T19:50:16.038821Z " , " releases " : [{ " version " : " 0.3.3 " , " phpExtensions " : [], " databases " : [], " shellCommands " : [], " phpVersionSpec " : " * " , " platformVersionSpec " : " >=9.0.0 <12.0.0 " , " minIntSize " : 32 , " download " : " https://github.com/juliushaertl/apporder/releases/download/0.3.3/apporder.tar.gz " , " created " : " 2016-10-12T19:14:10.802359Z " , " licenses " : [ " agpl " ], " lastModified " : " 2016-10-12T19:50:16.104357Z " , " isNightly " : false , " rawPhpVersionSpec " : " * " , " rawPlatformVersionSpec " : " >=9 <=11 " , " signatur
2016-11-24 16:29:57 +03:00
EOD ;
2020-04-10 17:48:31 +03:00
public static $expectedResponse = [
2020-01-09 19:29:00 +03:00
'data' =>
2020-03-26 11:30:18 +03:00
[
2020-04-09 10:22:29 +03:00
0 =>
[
'id' => 'direct_menu' ,
'categories' =>
[
0 => 'customization' ,
],
'userDocs' => '' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/juliushaertl/direct_menu/issues' ,
'website' => '' ,
'created' => '2016-10-01T09:16:06.030994Z' ,
'lastModified' => '2016-10-06T14:01:05.584192Z' ,
'releases' =>
[
0 =>
[
'version' => '0.9.2' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/juliushaertl/direct_menu/releases/download/v0.9.2/direct_menu.tar.gz' ,
'created' => '2016-10-06T14:01:05.578297Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-10-06T14:01:05.643813Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' ERBS9G5bZ3vwCizz2Ht5DehsVJmb63bzF3aYcH7xjbDVMPagOFWdUAiLDwTeZR1n
2016-11-24 16:29:57 +03:00
i4gdZ73J / IjHQQJoOPwtCjgbZgLPFqL5x13CLUO9mb / 33 dZe /+ gqEDc / 3 AuJ4TlA
XUdLxHRb1bwIlJOwuSr / E24452VG20WUhLXBoM0Zm7WcMxvJWo2zAWnuqnLX3dy9
cPB4PX + 6 JU2lUMINj8OYQmM1QnqvjG8YV0cYHbBbnSicOGwXEnni7mojsC8T0cn7
YEJ2O2iO9hh3fvFEXUzDcL7tDQ5bZqm63Oa991bsAJxFo / RbzeJRh //DcOrd8Ufn
u2SqRhwybS8j4YvfjAL9RPdRfPLwf6X2gx / Y6QFrKHH0QMI / 9 J / ZFyoUQcqKbsHV
85 O + yuWoqVmza71tkp4n9PuMdprCinaVvHbHbNGUf2SIh9BWuEQuVvvnvB + ZW8XY
+ Cl + unzk3WgOgT0iY3uEmsQcrLIo4DSKhcNgD1NS13fR / JTSavvmOqBarUMFZfVC
bkR1DTBCyDjdpNBidpa3 / 26675 dz5IT5Zedp4BBBREQzX08cIhJx5mgqDdX3CU09
uWtzoaLi71 / 1 BWTFAN + Y9VyfZ8 / Z3Pg3vKedRJ565mztIj0geL3riEsC5YnPS0 + C
+ a3B9sDiiOa101EORzX3lrPqL7reEPdCxrIwN + hKFBQ = ' ,
2020-04-09 10:22:29 +03:00
'translations' =>
[
],
2020-11-11 18:43:41 +03:00
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://bitgrid.net/~jus/direct_menu_nc.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Direct Menu' ,
'summary' => 'Provide easy access to all apps in the header.' ,
'description' => 'Provide easy access to all apps in the header.' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Julius Härtl' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEBjCCAu4CAhADMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTE0MTI1MDU0WhcNMjYxMjIxMTI1MDU0WjAWMRQwEgYD
VQQDDAtkaXJlY3RfbWVudTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AMkzWsAkKP / 40 ktvJMpnr0IJNVoPOR0hvh24igcDskL1WKiD2eiRUenj5LE0Nvn +
siGmWsAqRVpdiz + Y8ghQqQMzKi43IrRN0AxlCrHWrSqBZT3wIAUcFz4RzEoFxc1N
UZzWma6ljukGnvt4V1ZyT + H / cjqxUkBhh / y9SS0jUen1a1grND6Rw54X46V2dlCu
FH + pLsfPJJGw + QLeTGHn7dqdv18cYMAlWDCzPixVnNiCXHZcUtKMmstU2xU4R2e6
zimp2rgkE4TNHrafpjH8xGdNi2FG5Dmokob / L5Q2r8jyNaW7UsFfrvLTRj371b3 /
2 FhhxoGUvDzaG2An02Exwm52LJfdTVMHAMPZub5poHfy5vAEdZGPQ / m02l8ZK / Y2
7 yT807GlfPMXfdfjCxR6wNtmv7rvBDdrUZmIRNJfpFSdvlH /+ MOTWnabyfQv2K4Q
BIwltX6Elh0lh4ntvt1ZVtvFv + PL1Dc7QLV + w19 +/ LJA0mnsh7GIFYKFlbA65gA0
c / w + uqDy0 + 5 MxkR9WGPpd79KRA1tKWTis4Ny1lApK5y3zIsVGa3DfBHXcwqkWHbV
wIpyuyyDsFtC1b9LTFONX7iU9cbNk5C5GTM331MdA2kLcD / D5k42GNTBSca7MkPx
Fx / ETSn0Ct167el30symf2AxvXjw + mBYPN71rVTMDwe9AgMBAAEwDQYJKoZIhvcN
AQELBQADggEBAC0fJKnbEhXA8M283jA9GxABxLyTBcQyVVNnz2L / bYYNi81Y9iZv
+ U0S3qaIfoqNcV9FTKAutbsKvWyolnI7MRRK6feNuFfoP2jKubM1CnawpyT / RF2Q
e / zxnB1EmeI2X5D2xceJDLB7Fy5W0EGrLixRIdFaSUommWFUm9E2hSIaNlziSBdc
1 J / mOQeNYO5zg5ouEt1rzQW4Mhh1I2uNQmGe4ip + Jl / 2 LAv3FZuu4NrSEcoXH3ro
G2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M + Ug81AqiY7XjdiaCPdh0Tthcx
2 OmWZo7UBREWenjKyFZZ / iKoqH5sdenBtpo =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
1 =>
[
'id' => 'apporder' ,
'categories' =>
[
0 => 'customization' ,
],
'userDocs' => '' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/juliushaertl/apporder/issues' ,
'website' => '' ,
'created' => '2016-10-01T09:16:47.111889Z' ,
'lastModified' => '2016-10-12T19:50:16.038821Z' ,
'releases' =>
[
0 =>
[
'version' => '0.3.3' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/juliushaertl/apporder/releases/download/0.3.3/apporder.tar.gz' ,
'created' => '2016-10-12T19:14:10.802359Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-10-12T19:50:16.104357Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => 'nhlT9lhrmBxIsqh/e3RLm2NDw/U8ZvvoMyYQTLMM3H19DQmVcPYPYC9QWVTsowUzXblVaOXVGylbpKma9yOlOAqJtF3qyXecLl4+tA/Awb6BBhKPgHFdcLDAL5yy1K7/uei3SgEojMlJoI9vEK5I1C5YTh43yNH+//Im6MAuNYFUTlMXK426zdOe6ogpCI5GlYdXopqYANxcpT+WXWET6DDSM5Ev+MYwMcSAY4r8+tvARRU4ZAenRgjkBT6R5z6cD76emRax14tbV6vkjjwRcO+dQtM0tFPbd+5fsNInbauv50VzIMgjA6RnKTOI17gRsSdGlsV4vZn2aIxEPWauu6T/UohMvAE9HMn13vtbpPBSFwJAktj6yHASYGzupNQLprA0+OdyALoLZPpQAKNEXA42a4EVISBKu0EmduHJlUPeqhnIGkkGgVNWS8AWqzP2nFoPdXBgUWateiMcBTHxgEKDac5YmNc9lsXpzf1OxBaXHBhGYKuXPwIfyH3jTWb1OdwixJEuRe9dl63T9qOTRre8QWns/bMqKLibGfMtFhVB21ARJayBuX70eVvabG/2N7Y5t1zUlFygIKu51tvo3AVCRDdRrFWDvkAjxzIz5FIdALVZ+DReFYu/r4WF/w3V9rInFuEDSwb/OH4r8sQycs07tSlMyA74Y3FpjKTBxso=' ,
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://bitgrid.net/~jus/apporder-nc.gif' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'AppOrder' ,
'summary' => 'Sort apps in the menu with drag and drop' ,
'description' => '
2016-11-24 16:29:57 +03:00
Enable sorting for icons inside the app menu . The order will be saved for each
user individually . Administrators can define a custom default order .
AppOrder works with the default owncloud menu as well as with the direct_menu
app .
## Set a default order for all new users
Go to the Admin settings > Additional settings and drag the icons under App order .
## Use first app as default app
You can easily let Nextcloud redirect your user to the first app in their
personal order by changing the following parameter in your config / config . php :
\ ' defaultapp\ ' => \ ' apporder\ ' ,
Users will now get redirected to the first app of the default order or to the
first app of the user order .
' ,
2020-11-11 18:43:41 +03:00
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Julius Härtl' ,
'mail' => 'jus@bitgrid.net' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAzCCAusCAhAEMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTE0MTI1MjQ4WhcNMjYxMjIxMTI1MjQ4WjATMREwDwYD
VQQDDAhhcHBvcmRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKVK
Kn5jivCu + eRfe5BECjDOzNaGHlpiegb49Hf4nh0W7DqcoLHip5c1O2BcEYdH6rkw
20 WclvjoQpgavG5aFXzXzur6eKTT5TpgY5oZTLoWjbx4e + fKdhyDPTpqNZzs1pxz
sZLDL / ElpbSErE0s + QK / pzP11WNPylAkI9AKSyDMO3Mbllg8I8Bt + bT7LJKYOO / T
Lhv9m0anLZ4HrdfimhVIoMiu3RpyRigk8titXZA94 + F8Fbf7ZQ9f14Y / v3 + rfJFQ
ii9cDoox5uUrjplH2LrMr5BodfCfydLu4uVpPWYkdccgvcZ1sugjvNXyCQgdzQDK
pOpiwVkkiQFaQJYbGSDblFWPl / cLtA / P / qS7s8tWyTQuc1rYlEpCHG / fG8ZFkSVK
9 eCMGxK908VB4IU2DHZHOHi7JvtOz8X / Ak6pIIFdARoW3rfKlrz6DD4T9jEgYq0n
Re7YwCKEIU3liZJ + qG6LCa + rMlp / 7 sCzAmqBhaaaJyX4nnZCa2Q2cNZpItEAdwVc
qxLYL1FiNFMSeeYhzJJoq5iMC3vp2LScUJJNoXZj9zv + uqTNGHr + bimchR2rHUBo
PzDLFJmat03KdWcMYxcK5mxJNGHpgyqM7gySlbppY / cgAospE8 / ygU2FlFWIC9N0
eDaY + T8QA1msnzsfMhYuOI8CRYigan1agGOMDgGxAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGsECd + meXHg1rr8Wb6qrkDz / uxkY1J + pa5WxnkVcB6QrF3 + HDtLMvYm
TTS02ffLLyATNTOALZFSy4fh4At4SrNzl8dUaapgqk1T8f + y1FhfpZrEBsarrq + 2
CSKtBro2jcnxzI3BvHdQcx4RAGo8sUzaqKBmsy + JmAqpCSk8f1zHR94x4Akp7n44
8 Ha7u1GcHMPzSeScRMGJX / x06B45cLVGHH5GF2Bu / 8 JaCSEAsgETCMkc / XFMYrRd
Tu + WGOL2Ee5U4k4XFdzeSLODWby08iU + Gx3bXTR6WIvXCYeIVsCPKK / luvfGkiSR
CpW1GUIA1cyulT4uyHf9g6BMdYVOsFQ =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
2 =>
[
'id' => 'twofactor_totp' ,
'categories' =>
[
0 => 'tools' ,
],
'userDocs' => '' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => '' ,
'website' => '' ,
'created' => '2016-10-08T14:13:54.356716Z' ,
'lastModified' => '2016-10-12T14:38:56.186269Z' ,
'releases' =>
[
0 =>
[
'version' => '0.4.1' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '>=5.4.0 <7.1.0' ,
'platformVersionSpec' => '>=10.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/ChristophWurst/twofactor_totp/releases/download/0.4.1/twofactor_totp.tar.gz' ,
'created' => '2016-10-12T14:38:56.174612Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-10-12T14:38:56.248223Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '>=5.4 <=7.0' ,
'rawPlatformVersionSpec' => '>=10 <=11' ,
'signature' => ' bnwWxmHEn8xkoWbtwhC1kIrJ0dQfAI3PUtU62k + Tru / BHt1G2aVxqO8bCdghojZ7
2016-11-24 16:29:57 +03:00
zdFMlIJw4kekYFsVfLk8jzjUTZKVbNVKCdkHrVTQ0bUUryMAMLqGQ3PSRI5NX6D5
FpkvwO1coYwU0XVWF8KAS0meX0ztSkT3Mv96LLrxr8F8SrB / MGmKIE4WTjt1fAIa
ZLAVEUo / 3 sNFTGLYBtL3wjctrkZvJltP8abeRfls9FkRHu + rN7R3uLFzk42uZn3X
Wpt5BBmlYm5ORbnJ2ApsxEkMNK + rOy8GIePaz5277ozTNrOnO04id1FXnS9mIsKD
20 nRzjekZH + nneQYoCTfnEFg2QXpW + a + zINbqCD5hivEU8utdpDAHFpNjIJdjXcS
8 MiCA / yvtwRnfqJ5Fy9BxJ6Gt05 / GPUqT8DS7P1I1N + qxhsvFEdxhrm2yIOhif8o
h7ro5ls + d3OQ8i3i4vdZm821Ytxdu / DQBHiVoOBarvFWwWAv2zd2VAvpTmk6J5yv
3 y + csRqpEJYd9fcVMPsTu7WBRRrpBsAqdAHJcZEwak2kz1kdOgSf8FIzP1z6Q71d
Ml2RKcPeutMHHSLiGIN / h7fM5aSs49wGgGZmfz28fHVd7 / U0HFSMYmkT / GMq5tMP
Iyc + QZAN4qbX8G0k / QSTkK / L4lOT2hQiQqiSqmWItMk = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
],
'translations' =>
[
'en' =>
[
'name' => 'Two Factor TOTP Provider' ,
'summary' => 'A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)' ,
'description' => 'A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)' ,
],
],
'isFeatured' => true ,
'authors' =>
[
0 =>
[
'name' => 'Christoph Wurst' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIECTCCAvECAhASMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDEyMDkzNDMxWhcNMjcwMTE4MDkzNDMxWjAZMRcwFQYD
VQQDDA50d29mYWN0b3JfdG90cDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
ggIBALC1K94104L / nOtmTygx7QNjUcnHs3yrn71mw4pMxTlonXOnMTpwxsfL1Hhu
/ 5 GMSgupTbQPlevSl6J86UMs455 / sPShd6ifmAuhb8VFaAsjpizjs0RMaUg1sjmF
uV18PD9FXLourx51V / c4MG5kpavlV + bLUrVMAjbsJY2 + k30tCC / XkP5u8jUWmM / T
5 REChn7 / obPgaeddhuJoILYhKEW3VNrR8Fm9SYiviB3FLhM7URDZ97IBnXYqbvbT
Znvq + E74Zc7HgYwQwrjU / AqQAInhNpAR4ZM6CkWWWWaL96O1q3lCfKJNaxqC0Kg /
kGn / pxYkl9062jtMUz60s9OPDyuisfyl68UyM68Ozyz4SMRLmDVbewOqQAwmAbtz
8 p9AQrX3Pr9tXhARR4pDSsQz1z + 8 ExEd6EKbhMyiTtHtZQ1Vm9qfoR52snpznb5N
e4TcT2qHAkOWV9 + a9ESXmQz2bNjgThxEl5edTVY9m4t248lK5aBTGq5ZKGULNHSQ
GGpr / ftMFpII45tSvadexUvzcR / BHt3QwBAlPmA4rWtjmOMuJGDGk + mKw4pUgtT8
KvUMPQpnrbXSjKctxb3V5Ppg0UGntlSG71aVdxY1raLvKSmYeoMxUTnNeS6UYAF6
I3FiuPnrjVFsZa2gwZfG8NmUPVPdv1O / IvLbToXvyieo8MbZAgMBAAEwDQYJKoZI
hvcNAQELBQADggEBAEb6ajdng0bnNRuqL / GbmDC2hyy3exqPoZB / P5u0nZZzDZ18
LFgiWr8DOYvS + 9 i6kdwWscMwNJsLEUQ2rdrAi + fGr6dlazn3sCCXrskLURKn5qCU
fIFZbr2bGjSg93JGnvNorfsdJkwpFW2Z9gOwMwa9tAzSkR9CsSdOeYrmdtBdodAR
dIu2MkhxAZk9FZfnFkjTaAXcBHafJce7H / IEjHDEoIkFp5KnAQLHsJb4n8JeXmi9
VMgQ6yUWNuzOQMZpMIV7RMOUZHvxiX / ZWUFzXNYX0GYub6p4O2uh3LJE + xXyDf77
RBO7PLY3m4TXCeKesxZlkoGke + lnq7B8tkADdPI =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
3 =>
[
'id' => 'contacts' ,
'categories' =>
[
0 => 'office' ,
1 => 'organization' ,
2 => 'social' ,
],
'userDocs' => 'https://docs.nextcloud.com/server/11/user_manual/pim/contacts.html' ,
'adminDocs' => 'https://docs.nextcloud.com/server/11/admin_manual/configuration_server/occ_command.html?highlight=occ%20commands#dav-label' ,
'developerDocs' => 'https://github.com/nextcloud/contacts#building-the-app' ,
'issueTracker' => 'https://github.com/nextcloud/contacts/issues' ,
'website' => 'https://github.com/nextcloud/contacts#readme' ,
'created' => '2016-10-30T14:00:58.922766Z' ,
'lastModified' => '2016-11-22T22:08:01.904319Z' ,
'releases' =>
[
0 =>
[
'version' => '1.5.0' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/nextcloud/contacts/releases/download/v1.5.0/contacts.tar.gz' ,
'created' => '2016-11-22T22:08:01.861942Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-22T22:08:02.306939Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' ZqqhqtbHcNB + rzGCQ7FDIjjvHjit + dhAE1UhFgiXApkx3tmPP4nJOBAGNjHe + 2 Ao
2016-11-24 16:29:57 +03:00
VcTIX2SrWEfieRrA4Gp + 0 k7pUPWag1Z0T1OVOwO4cmS1AVFyGIOE1bRvDhMfsWTU
4 CI4oXaKBFAY6mtnf7VJ7EeIdNqhImkohyWDQ88NiPRLM1XNkJJk6AvZBcT0fvCv
o145X4dLpbixSXsN99QFNJ / oXvK + 9 tBGwTd5i / WnNFY90vcNRLia8aRo7SA0YJRx
Lnxnj2HMqwTTDQEKE + 1 elYKWsqQ2DeqwScP97UIKe5bZXnrwOi9kH9PDmR4abtzd
lHL8E1Wgw25ePDeHG7APrx0tVOJy1bP + g8vcarpGynWZoizDkBvYZD + xtxizpBXC
JsDOSzczApptY6dnOtv0Vat8oh / Z / F99gBUahEu4WZ16ZgR1nj40PDK1Snl18Cgk
Me1EZcde8SLEpTbCWYIfIw / O9Fkp5cWD / dAqoiO6g + gNxSZ / gGp57qoGfFxn7d / x
H3aH8GljatAFjrwItw1JzR0THt0ukkOK + bw / pfCslk10sjHMitmz / GXa4qMS91DZ
BKLUd0dSfQUQzkfwcojImbzJRvca4 / DYe3mfG7 + RCH0tDL6t72dKL9joB ++ u5R1u
VZPgkToexlXcKWpiDB8H2 / SEShKr4udAOjR5de9CYWM = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Contacts' ,
'summary' => 'The new and improved app for your Contacts.' ,
'description' => 'The new and improved app for your Contacts.' ,
],
],
'isFeatured' => true ,
'authors' =>
[
0 =>
[
'name' => 'Alexander Weidinger' ,
'mail' => '' ,
'homepage' => '' ,
],
1 =>
[
'name' => 'Jan-Christoph Borchardt' ,
'mail' => '' ,
'homepage' => '' ,
],
2 =>
[
'name' => 'Hendrik Leppelsack' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAzCCAusCAhATMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDEyMjAzNzIyWhcNMjcwMTE4MjAzNzIyWjATMREwDwYD
VQQDDAhjb250YWN0czCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANzx
/ zJF + 5 / s4lOJLWIlfKQgTy + UpvIpiUXCgrsHsDZTx + hjQAhIWukH88a + 7 NVAL7Ys
kQNC0Tlm755FJi / T6EdR7edOwIRdo2ZwakOWLZXd209 + 6 cCd2UloHL0bgnbWepTl
R / 4 YgbLg / G + FVKCfkEiYc3PuDZ3EVrcwQFcg7h74X9ne6CHH0Z1WQLydxJuVEb2n
X9I + nIRpPHcVostkSiUmzHR7C5TjTIo2PzzgnCU6GC0iBa6z6dDYfz24QEp / b8UA
ZaLhjkyKghVGMnoF / s9KPgH4NM8pvvtadQN8pxlOPju4wbmKPUrsXo4ujurDXbbc
YkzNt8ojobGwdTXoyDogAsGZLQd2FQksWpRvY + I3zVPokBfPMdUPLllG5VcV0VA5
DRK + h2ms + XmspdBvGonjF + XdbFm9hEmDoFmoi9aU6C6AdofjmG / e9 + pw / 20 dXUWk
mMorWwXQ5yLmIn5LnpRXrOuK7CS28VRhBYuVNMlsyKhzU0rophbsD9OFXxYLjr6s
7 UPNwZ5h + kjXZDBKD89QctBSViT8RhLe8nulRIm0iJn1sb9hca / CF63KmsFzENfK
QeM6MO0H34PB84iNyz5AX1OIy + 1 wHD4Wrzt9O / i2LkWK6tBhL69aZiBqdLXWKffj
ARDCxxIfews51EZFyHzwsw65I97y46aBKxY382q7AgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBACLypX0spxAVAwQIS9dlC9bh1X / XdW2nAvSju2taUTBzbp074SnW6niI
bnY4ihYs4yOuGvzXxnp / OlvWH7qhOIchJUq / XPcEFMa7P03XjVpcNnD3k0zQWlZb
tGonX9EUOeLZKdqI4fkrCkMLScfjgJzoHGYQrm8vlIg0IVuRLCKd5 + x4bS7KagbG
iuPit2pjkw3nWz0JRHneRXz / BNoAWBnJiV7JMF2xwBAHN4ghTM8NSJzrGTurmpMI
Gld7yCP47xNPaAZEC66odcClvNtJ2Clgp8739jD6uJJCqcKDejeef0VU1PG7AXId
52 bVrGMxJwOuL1393vKxGH0PHDzcB1M =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
4 =>
[
'id' => 'mail' ,
'categories' =>
[
0 => 'tools' ,
],
'userDocs' => '' ,
'adminDocs' => 'https://github.com/nextcloud/mail#readme' ,
'developerDocs' => '' ,
'issueTracker' => '' ,
'website' => '' ,
'created' => '2016-10-19T19:41:41.710285Z' ,
'lastModified' => '2016-10-19T19:57:33.689238Z' ,
'releases' =>
[
0 =>
[
'version' => '0.6.0' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '>=5.4.0 <7.1.0' ,
'platformVersionSpec' => '>=10.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/nextcloud/mail/releases/download/v0.6.0/mail.tar.gz' ,
'created' => '2016-10-19T19:57:33.676730Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-10-19T19:57:33.834580Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '>=5.4 <=7.0' ,
'rawPlatformVersionSpec' => '>=10 <=11' ,
'signature' => ' VbMsvDpt + gSPeFM8LrZXEK10rk8kkLlgCcblgqNdCSeGZeVpwDAYv3CccVSLa0 + l
2016-11-24 16:29:57 +03:00
lTSqQ0VIoH + OIU6vIQNBKHmSCzTplk7OrY0 + L5FajXx8LnBaOh892GfGSlEt1neN
KyM0i0uOjO / xpCP / NoUlgkz6hnmYY5XEdN6DTsJtJ / XZhDQ45IYuIkMkHE / eFehS
0 JnOagIz + PSipeBY2Ry + tV8YbRa7bC1JAvZzlod0dyI015AHZESeitRUY + MwMWkt
N / me7g7 / Kev0wggIQQZm9aYcw63GMk / 1 VHUPB7Y0ESW9tx2nR5 + KwTDn / Jy4DGf1
rg8h0t5I + aPhHOBLrpczH0qaZWY2lsVZWq8KWjJI9aR9P0v2f2aXixXzD / Cuz1cK
hvhKWkOSla4D +/ FxeyHGjQvdXMG8gXm0ZmTimKChCoVuCbncDd8pzkdyNoGXcvuk
sP8OrkQFooL4E7S4BWfdSiN / a8jUITJQkuXp / OVrVGeCupLWJh7qegUw6DvoqyGy
D4c6b + qYn68kx3CLaPPiz + tFAZQZQdj7 + Kx / lohso8yTnVSiGYrMj4IvvCbpsQjg
WF3WSqF / K / tTnPYTWb9NUPSihTbVNv6AXOfTsPEp / ba2YSS5DjvjVjkr5vhR9eg1
ikQ3Cw6lW3vaA4LVCC + hFkMRnI4N0bo5qQavP3PnZPc = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
'en' =>
[
'changelog' => ' ### Added
2016-11-24 16:29:57 +03:00
- Alias support
[ #1523](https://github.com/owncloud/mail/pull/1523) @tahaalibra
- New incoming messages are prefetched
[ #1631](https://github.com/owncloud/mail/pull/1631) @ChristophWurst
- Custom app folder support
[ #1627](https://github.com/owncloud/mail/pull/1627) @juliushaertl
- Improved search
[ #1609](https://github.com/owncloud/mail/pull/1609) @ChristophWurst
- Scroll to refresh
[ #1595](https://github.com/owncloud/mail/pull/1593) @ChristophWurst
- Shortcuts to star and mark messages as unread
[ #1590](https://github.com/owncloud/mail/pull/1590) @ChristophWurst
- Shortcuts to select previous / next messsage
[ #1557](https://github.com/owncloud/mail/pull/1557) @ChristophWurst
## Changed
- Minimum server is Nextcloud 10 / ownCloud 9.1
[ #84](https://github.com/nextcloud/mail/pull/84) @ChristophWurst
- Use session storage instead of local storage for client - side cache
[ #1612](https://github.com/owncloud/mail/pull/1612) @ChristophWurst
- When deleting the current message , the next one is selected immediatelly
[ #1585](https://github.com/owncloud/mail/pull/1585) @ChristophWurst
## Fixed
- Client error while composing a new message
[ #1609](https://github.com/owncloud/mail/pull/1609) @ChristophWurst
- Delay app start until page has finished loading
[ #1634](https://github.com/owncloud/mail/pull/1634) @ChristophWurst
- Auto - redirection of HTML mail links
[ #1603](https://github.com/owncloud/mail/pull/1603) @ChristophWurst
- Update folder counters when reading / deleting messages
[ #1585](https://github.com/owncloud/mail/pull/1585)',
2020-11-11 18:43:41 +03:00
],
],
],
],
'screenshots' =>
[
],
'translations' =>
[
'en' =>
[
'name' => 'Mail' ,
'summary' => 'Easy to use email client which connects to your mail server via IMAP and SMTP.' ,
'description' => 'Easy to use email client which connects to your mail server via IMAP and SMTP.' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Christoph Wurst, Thomas Müller, Jan-Christoph Borchardt, Steffen Lindner & many more …' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIID / zCCAucCAhAVMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDE5MTkzMDM0WhcNMjcwMTI1MTkzMDM0WjAPMQ0wCwYD
VQQDDARtYWlsMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp ++ RuliQ
lBeeiPtP0ecBn00OaU1UCpft / NVI5pnSiT9nU4l2kc5IvKjA8UxDB3gWfYTOeBFh
tUHQ2P6UKCmHZT9sApHhqLu2n0V + YhlFIViuaxndSID / M414cl56xOYQusV3Pcae
o2dOSeRRzLab3tEaVHlkBSFkGmAwPZItsmTklvV3h1sUysDicYgfXPCkf7K + JgWA
BP7vsWC8B7MDRhcB3enYv5tTcpsyvtGX7bb1oTIWVypcmKsGYfTX12VNBxKzNBIG
8 pwdb8Xo0o14TytWsWN7mSHf1XbwfwYMjDWOlMqiRc + mcoKMBH41TfM / CXslSivI
syvxasEaFdlj8lmKPENdzw1OfYRs43usIf4szwyt4rb8ocXfDipnY3P2hccN6YcZ
l8y8Vsr69ASluDj2A2Pl5vH6xp6tNybZRnN5G6sghhaYaLNDU / TdMyYzz4AY33Ra
HSaMypfcXjd76Aj8jZvcwk1BH + ZsvFqNK7ZKCb7WVcMH8KRcU1sxZ4rp9vviM2fL
L7EVtznm3bSI9jjHXbiwq7RvNRRy + F6YRpAdWGwTU8uUkDabPFi41FikYyzNWauK
JhlDJXl514XjKyMVBjAZYVr5gZZkO1J7C4XzLFbC5UzYNSzW5Iwx / 1 j5OeYJRxh6
5 rhiUwR + COT1wdVsl6khMC8MfBR4unSd338CAwEAATANBgkqhkiG9w0BAQsFAAOC
AQEATBvpqz75PUOFPy7Tsj9bJPaKOlvBSklHH7s43fDDmQbJwswXarZi3gNdKf8D
yO / ACZvO8ANWAWL / WahkOyQtKOYzffaABGcEIP7636jzBdKtgwSGzW3fMwDghG10
qBr2dE6ruOEdSpuZxgMgh2EulgknZUXaHAMI2HjjtAMOBScLQVjOgUqiOHmICrXy
ZETmzhx0BXDt5enJYs8R2KMYJNIme1easQRYmWKliXogNY09W7ifT9FHtVW1HX + K
xRS4JXbapjolkxyGSpP + iYSgItVnYzl6o9KZResR4yDsBv7G / 8 fpV4GQU9IS3zLD
PiZOosVHWJdpUKCw9V4P1prGTQ ==
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
5 =>
[
'id' => 'audioplayer' ,
'categories' =>
[
0 => 'multimedia' ,
],
'userDocs' => 'https://github.com/rello/audioplayer/wiki#user-documentation' ,
'adminDocs' => 'https://github.com/rello/audioplayer/wiki#admin-documentation' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/rello/audioplayer/issues' ,
'website' => 'https://github.com/rello/audioplayer' ,
'created' => '2016-09-16T05:44:24.857567Z' ,
'lastModified' => '2016-11-17T22:34:34.637028Z' ,
'releases' =>
[
0 =>
[
'version' => '1.3.1' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '>=5.4.0' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/Rello/audioplayer/releases/download/1.3.1/audioplayer-1.3.1.tar.gz' ,
'created' => '2016-11-17T22:34:34.215350Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-17T22:34:34.867778Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '>=5.4' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => 'p6Zz0IEFrxvw6y/3jHgGWWCxR6qpMzvU2HKfxcIVsK6sJnoRUhWLeAXwZ432fH2a S2llj+IGS9OvW+5VQElrXgPtEjDK1BT00DRJnp5RFCRlUv0LNoedJMzx6B6AHqPP JBufk3cG1O/CO0M0L1ITGSmSOzfKvWTRo3lxVGF792NyBaP/SyZCkH1N1TzBQzUi Ywl3+HiglPcXbHjtJm/arnKorbJWVKoaN93xFuaBapd2ozQSpi0fE0uGRsici+U7 HNa1M5WFE1rzUJoufE0E9246At07rFY1e+TdNEq8IlLgCXg5vGCKkEyuWpWno6aX LfRaIiT9x39UTAwNvuDKS0c+n4uWDYPsGfKhDx9N7CXpUrthfXVEWRzZEXG7as10 6ANvrRPJemSZH8FUSrdJhD7k12qa9R825y7mIG68Li8P71V92EOxFfo9tNXqXwBt VuDGxBqByFVPqSCj5I8hrzJzQl2Xt40g8+8ZcSF96RMg/pM+bwRMTv+mz0V+vQQ4 DWjqnWVPalaJ1PPD5/QFFErtXuNRbyxKZ6BMWxfJlLM9Kz66P75K+8fYaSwz+2KG NxY7I3svzS2K9LGH3fBLUy1t3Hl+c3zGFq/ll1MJrf9NswV4yxt2WmISfM/KDww8 yELkGs2cRzbw2tCvnmYlJJhIqRLkyFAbDzWRH/XdVx4=' ,
'translations' =>
[
'en' =>
[
'changelog' => ' 2016 - 11 - 17
2016-11-24 16:29:57 +03:00
- fix : one - click - play for wav not working
- fix : wrong sql statement for PostgreSQL [ #90](https://github.com/rello/audioplayer/issues/90)',
2020-11-11 18:43:41 +03:00
],
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_main.png' ,
],
1 =>
[
'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_lists.png' ,
],
2 =>
[
'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_share.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Audio Player' ,
'summary' => 'Audio Player for ownCloud and Nextcloud' ,
'description' => 'Audio Player for MP3, MP4, Ogg, and Wave with a lot of flexibility for all your needs.' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Marcel Scherello' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEBjCCAu4CAhAIMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTE1MjExMjA4WhcNMjYxMjIyMjExMjA4WjAWMRQwEgYD
VQQDDAthdWRpb3BsYXllcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
ALyC + iLscLs62NeNmUXEBmg + xMuUtDmZKr + xzJWtl6SSNRz + 8 K1JygvUIXFJ3RIL
CYA3xyq8 / wyZH1gNrLKyz5eTeYawG + eT3ges / FT6MWGUbZoRrBrikVcLC94QzxTH
xOl8Dn + SCV / 2 bhcvPTQdhK + dqtvGilOtjHa40iMrk9gSdlKVys5CK / xdlEp8uiMa
kz1WENn8MVCCJV58bAUbaCupDWXR9CCoSsw8XinNsCenZ2B2XlnmbM44280w0ojs
72 rfQRgj3yDG + ZUUyUOuxIuodu8liXYciLf0ph6t / f / qoSmctbBdsR5Fl1Upj1Ac
qeHb5Yf / B3Vi6Mn3XfDx0H2EHk1v9Dhzxay + v9BHUzyIX2iH / q + 7 TE0 / Jzo5AwBW
vFKWXvG7wXaALcHYZf5v / M93IE0iCHsv2EsZKQPBnzXVGmp4DwFSP4po1B7hcog1
gAMaellAzzvUAizgCovN6Qct3qDEANYniPlvtnlcaQGonajW4N019kFQRHLIzPFR
jab5iUMMwSnT8FhZO2ZOWuWhJven + gXjxC8mfMVgBfZnAVgydNfx9rN + KzTc88ke
obUdZ0OOeBzA7pIxGEFg9V6KTEEWZ + qH048vxXz4HI9B1I + 2 wQLBrZl8CvweEZ5U
5 ID8XrrE / UaNZ1CvLKtCgB24gj / m1Elkh7wA3gEcEo2JAgMBAAEwDQYJKoZIhvcN
AQELBQADggEBACtgUp + FCmjWIkQUuWSdzKWdO + IH4v9wBIrF9mo0OLIakFyDYyM5
LlkYZXbplGXd4cfn3ruIqJNzlIb4xa5CU0bM4TMbD4oOSlLMKM / EamKPHI3bzr ++
zi7mQDFxmAE6FWSMBgKKUb4tqLc5oBap8e12tPEZl / UR6d9iUB2ltvrm3T3vrjjl
2 Worm0eYBNqnagXmX5 + wS11AQqeJemGqRy5e1yXRlTgB0IJhH0dCsFNwifEigutp
FNvGFVBn4r5qCiChEoq + rCXHRjPi / eCfbW21XeLFDiLxapcZyc85JIcA7znUYoFe
P7Y / ekMscwWhLbF91OaQlcWpRtEMyde / DaI =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
6 =>
[
'id' => 'calendar' ,
'categories' =>
[
0 => 'organization' ,
],
'userDocs' => 'https://docs.nextcloud.com/server/10/user_manual/pim/calendar.html' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/nextcloud/calendar/issues' ,
'website' => 'https://github.com/nextcloud/calendar/' ,
'created' => '2016-10-01T12:40:39.060903Z' ,
'lastModified' => '2016-11-22T20:31:13.029921Z' ,
'releases' =>
[
0 =>
[
'version' => '1.4.1' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/nextcloud/calendar/releases/download/v1.4.1/calendar.tar.gz' ,
'created' => '2016-11-22T20:31:13.020268Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-22T20:31:13.087340Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' nThwe9CJBCan9nuDLdhfBiQyPhmum6Aa0UcYsIDdhGMw + C2acf81KhEmBJuTTWxo
2016-11-24 16:29:57 +03:00
WGby6WcrcJJmeuCW + ePU91ju7Pd76RirprhVXIEceIDzSCxin + K0oZCZ1IGVIJjP
IkVehTsLuCeTBbjvz1b3k5QFyhUhvd32Xt7k5d7VARyI4OqnqYYNBtH9vvgeRrFw
AxsQr4o4axof6i3iykLg6WfWarYArY4dIuu5DkPuGPWf2bbgjwWEra4sQejhOs7G
sk1xcsfYv2NpArIbpw / wnATdjiax + Gjz1URMD3NgL5ky0ecuZmNvN25QErg3nlVr
hh1FBfA5pvCJbkJ6nr5bU4bKaffwDX1nr5h77FS5zzn0Pyd7ZIExmVmNtaeJfnfV
5 vnclapzXMNU + R6t / ATJQd1srvSJhyljQapzsqnrjNMEUojOEvqqygJp0KwNVPqs
3 g9XGSoOnO + WULWBeISW7UVOg8BOF8pwvHIU2 ++ bSzOdpypW0Eq6p2DPWO6qL / H1
eFLKrUg3EvnTjvknbBxMB55h9jNJr0SAlkrmyEVm6 + CE3BwRWpKB + cJMBuGiwPwv
r / ASRiJrkDThbNWAUtX70rUmCqDV6 / MujLXViqOc / Q2OHvcXd1oGDccJSQT92 / 1 z
7 nonnedyYQIDqUt7u68WL8JRxp7pFsEqKLVuWSgxW3c = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/1.png' ,
],
1 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/2.png' ,
],
2 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/3.png' ,
],
3 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/4.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Calendar' ,
'summary' => 'Calendar GUI for Nextcloud\'s CalDAV server' ,
'description' => ' The Nextcloud calendar app is a user interface for Nextcloud\ ' s CalDAV server .
2016-11-24 16:29:57 +03:00
It integrates with other apps , allows you to manage calendars and events , display external calendars and invite attendees to your events ' ,
2020-11-11 18:43:41 +03:00
],
],
'isFeatured' => true ,
'authors' =>
[
0 =>
[
'name' => 'Georg Ehrke' ,
'mail' => '' ,
'homepage' => 'https://georg.coffee' ,
],
1 =>
[
'name' => 'Raghu Nayyar' ,
'mail' => '' ,
'homepage' => 'http://raghunayyar.com' ,
],
2 =>
[
'name' => 'Thomas Citharel' ,
'mail' => '' ,
'homepage' => 'https://tcit.fr' ,
],
],
'ratingRecent' => 0.94444444444444398 ,
'ratingOverall' => 0.94444444444444398 ,
'ratingNumRecent' => 9 ,
'ratingNumOverall' => 9 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAzCCAusCAhARMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDAzMTMyNjQwWhcNMjcwMTA5MTMyNjQwWjATMREwDwYD
VQQDEwhjYWxlbmRhcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm6
FTeqgzCXprkU83VM4 / DrZWn3kqtfaR / edkC4gYT3ug7RHa / Uv1C / S ++ vr7pvgpnk
YzQoavl / 0 Qlh5sKEYX + 0 ud / LQDoiidwBRDckFUQ1bRfVLxAD9UAVvDRHxDqJMOx2
gZArbeQ3ztdSHZp4ThzBFWq2FILsJD86weG7LwHjzhW6SWgLb / YTLbuuW6tRCDVV
btB0I / a0vCwj2u91Chw3u6pWWjPakc9DQrIDH4HCIBKQ4zVrYDxAmJDRFGDvVVWx
uIAeux8sd8drqSMqAhX + XMcZPRD71NQTWbCupSwWO8kgjmZnBpIiBNpzvMQzJf3A
QloZtjZ2RDXAQG88eTeT8pp8yEOCEoDLpGdraKxJrh / z2Dsk30JP3lOiNYJ9vBaB
C8NJbJ3oAlG7THwUaFF9fsdAKoTwzs5Xms04TI7W / v4Z / GClOzMymnR1T4sR72Oy
3 WaMNHv / 1 QGffvQn2 / TtZt23Ou3P083xWx2vn5FgTcac8 + x85vRgWsVCA4hq9v6m
AlktB0 + UWDEXpDTKD9BdFNWM8Ig9jQf7EJrvTLNnS7FIJZMB4GK8lpvPxyvACWnh
R2hQOe987Zvl3B1JZNO5RvtSeYld9Y9UfMgW1aPRweDNjSuZYAKlugx1ZoyI5HyA
QjfzAwicIMwZsCJDV / P5ZO8FE + 23 rdWaoJczpBqDAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAHQXwvj8q5khWR / ilg3JGYpmMNBYHE9OeDaOcNArkKaGMd478SDPOXeu
yW7hCvNEpiTk5g0h3g3yleZFws0xH8fPsQgZANgvQXb3RCcD61NL77d0cMTr7Xzr
N3Lq / ML1YLc / WwL4uV1XvpMQMwALFL1p63BU2c0ysO31zbLOjMKAJi0hHFDYz5ZQ
D3xxtc17ll3B5IqrMnMHRqmOQ39Sbe56Y7T4agaIz / sUWpseo85D5kt7UAIOR + Mr
Q0Bl / QinETk72afGR46Qvc7tC1t9JjQQD3AUbEGuJdGvXjJJ9GREYu01XoODmPdT
jXXOI8XIOK6kxXhPHUc3iWu9b4KqGm0 =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
8 =>
[
'id' => 'ownpad' ,
'categories' =>
[
0 => 'tools' ,
],
'userDocs' => 'https://github.com/otetard/ownpad/blob/master/README.md#mimetype-detection' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/otetard/ownpad/issues' ,
'website' => '' ,
'created' => '2016-09-29T15:58:52.814912Z' ,
'lastModified' => '2016-11-19T17:37:52.278497Z' ,
'releases' =>
[
0 =>
[
'version' => '0.5.6' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/otetard/ownpad/releases/download/v0.5.6/ownpad.tar.gz' ,
'created' => '2016-11-19T17:37:52.234684Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-19T17:37:52.423930Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' dh + Txg1iVfqXr8 + cxplNQuBZGErSnXUo0ewGwnybNMJqp8 / EjEo72 + zPpW3dVnhY
2016-11-24 16:29:57 +03:00
67 YCvhrm2bo + VRdFFymEfymzSJu9nWVFkGJhEwvTxPyIdAtuD5YAVrzmnR6L + H7m
7 Q1nXE63ICPCAQpHkxIfIXLh25OhWeyofBB8AVsjDUNn58FEYJ8fFkr6dCgPriZS
sM2J + xtZMDYufy + xFMsVf / Q3WopjFuBjMC3qOecW76ZTwtREaswOC2RtpzUku2r1
sogrfFlFer3Ii9 / CWgOktnLfjB1DzbTwdEkM2xNVBRJgdMXt2VLA9FsxFFkjmr5A
l7x9cNLWA8RLpOIpIMBbaef75u5HgRBvSvq114UsA9GCu / EYbIgD8YxEt7xuKd4t
enksJB5gJ2IQNdHrPbsil59AsJ / dismDN6ktYgWQEk5dINzvm9EAvucueW0Gt + Jr
qEC5WBgJucsFxSvkHh52v43M8jgPYBfHWEL / M /+ 377 z3 + mbuIh + BcQ + vcDdiqxTF
o3n0 + gw3QYIhLEe75sUhxG6ynVUdW25AKKju1kVj3KJnZTBH1R8t8 / zy4DnJG8d4
uRGqyU4BXpZjEC3nVlsC7vCncWWhxl0WZQ / MWKqsfjVAU4I88E518D6NioqMnPEJ
iCZ2x + 69 UCDEQyfCSKajgAYT17r3OhZei8F9KSCH8Vw = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
],
'translations' =>
[
'en' =>
[
'name' => 'Ownpad' ,
'summary' => '
2016-11-24 16:29:57 +03:00
Create and open Etherpad and Ethercalc documents .
' ,
2020-11-11 18:43:41 +03:00
'description' => '
2016-11-24 16:29:57 +03:00
Ownpad is an ownCloud application that allows to create and open
Etherpad and Ethercalc documents .
This application requires to have access to an instance of
Etherpad and / or Ethercalc to work properly .
' ,
2020-11-11 18:43:41 +03:00
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Olivier Tétard' ,
'mail' => 'olivier.tetard@miskin.fr' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEATCCAukCAhAPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTI5MTU1NDA3WhcNMjcwMTA1MTU1NDA3WjARMQ8wDQYD
VQQDDAZvd25wYWQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6CY7I
HRJTaqDu376vt + kruX + QOL864joScxRuh3IOVcQktCvxasuA0EtrX7TCAQrV1tBK
fkqJxU9uOV54RTgyh30yH / ZtnF2bYQwViGM06Snc0riqWydFrN5fxK52dpZWs63o
UFCNhHxrX4aUGyfXu5nQMISLm4QHoZ3LDLofk1ZsiK62fM / Jz8N2PM8qeHzf1ATo
SKcAOd3UeaS9C8bv2DuiZM7unkSO / tjrBzkMiq8ds9sIzBBsyk6BRh2HQjHPOtmO
ed + pS9mIZmc2xhssXoHL4IfZwTqwhktpsaTl7v0ROw2dwDATz / QoKMkUpboQ5lkz
wgLQhoIZw6uAZ1R / Qjze59I3iU8zIo9quDarHBotZNXboYCmg9FRfE4mHtegVaa8
v1a1JvFQ5gvsWEsKSV6Bzb65GTp4KG4q7YnUrzh6HJyDCGLvLlWm5OWsFj6sNzXX
wLOv6JLORMbF4ZIo2iybb3x7gdfCu9JxMZ4JtOUC8KSJ6 + ub15C1Aia3lN68dNts
Y6KwUF1Ted0o4OQPAulq5pUc + g6dTYmIKsavIiPKhMtl86AbUK50vRTeuGdFsT7X
av73IanPdFI9bKth + tajgvB6dxcVnvBXbrsLUyEcsxsxtBJvQcMYS4aZ6ZJYLTep
7 AdK0Zt1iMdXB8 + 4 PCps4rcG6bYB / uJeEAVm7QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQCM10O + sCYhIExnx01vGzKlnRS7MSQNx8ZMmbR5Elfz4AVJAEJ96ytS2DXH
2 c + hcD0wAenXQEFk920AEqFQBT8DP34p0FmF83aMHW08ovzFiu4MdlhcqrLnko0h
cZTXHVyS / 8 JZh + o6SVm8R0 / BBLF1MQQ5TqRkJehbmk6gL0 + MSYxehUDKWTjJITkR
ifneTw / Ba1d0AXBOq0c0HFyGxMPIlWe4qn5LtxH5t0wyVGeSj4jyv4nvd3ZGuAgY
EUa2uYht / z475k4 + vf0YhV98iQH07GnmlfD2TDZgmOCQGKlNfJh1v88OZyLLa3dz
gRHzGwKbAiJ8T8bbpZ3e2ozXxADr
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
9 =>
[
'id' => 'announcementcenter' ,
'categories' =>
[
0 => 'organization' ,
],
'userDocs' => '' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/nextcloud/announcementcenter/issues' ,
'website' => 'https://github.com/nextcloud/announcementcenter' ,
'created' => '2016-09-14T10:38:53.939634Z' ,
'lastModified' => '2016-11-24T11:21:50.324839Z' ,
'releases' =>
[
0 =>
[
'version' => '2.0.0' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=10.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/nextcloud/announcementcenter/releases/download/v2.0.0/announcementcenter-2.0.0.tar.gz' ,
'created' => '2016-10-06T12:41:56.195206Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-10-06T12:41:56.263124Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=10 <=11' ,
'signature' => ' NVWYz73KtuoZ7ti2sluztJO5aFUc7PzhlDcg0VWyAQd1H7sk5wjw7i0bhrjw8O7M
2016-11-24 16:29:57 +03:00
Lsrb + PegnsL9eMlYM2WrRom + RF1PDP482xymZf1T8vh8qcTCm3TK89xSuiSm8yoA
iWUb / Uv / ODj74wVDWqWxAFKaAG / FestCB3InOOZQqQZLzlAV0U9ziYDGNzBjFqof
9 rLNxJ2IOqZOA7hhMIKhSrpA0KkSfNhBsVf8CWClYnVkZQiq0LoYkHkHIlXmXUr3
OfQFKEjtsx + bNLa6CkAaocHGHJXAofX3GQZ9cjBsjZqiTfbXfcVk0kRfz7pwL92L
I1McfJYvgMxDQG5bjRpNJw == ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://github.com/nextcloud/announcementcenter/raw/stable10/docs/AnnouncementCenterFrontpage.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Announcement Center' ,
'summary' => 'An announcement center for Nextcloud' ,
'description' => 'An announcement center for Nextcloud' ,
],
],
'isFeatured' => true ,
'authors' =>
[
0 =>
[
'name' => 'Joas Schilling' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.75 ,
'ratingOverall' => 0.75 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIDDTCCAfUCAhABMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwODIzMDkyNTQ0WhcNMjYxMTI5MDkyNTQ0WjAdMRswGQYD
VQQDDBJhbm5vdW5jZW1lbnRjZW50ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQDPx4Hp1HdBo5v7bDEiVcv2UrVjNW + fPPKS / 5 rwbagtPcE / 1 v3WDcwX
vFwaXk8qCn2UpPSQ2b1rTuTDm51G1ZmEZhNiio + rBfEe9F + 3 tLsq9lElqIPKhkAq
EUVI6dcN + jSqvLmLhuwloEoQQSYaLrX75mY3lGqTb83h1l2Pk / brVixuVf4vJW31
TgeieuGKnC + keLzKOrvTHffJakU8ktwB2Nuu1o + jN5a7u1bxKkP3LjEWPjq236hk
AoOcW / wi1dUEyUKUZsZQeJyvTJh1UXdLHKwYywtUu1 / VLZ1IUtNyPBfiQ8ukPp3T
TnSSmG3ZnvsfM6DmAvLZ8bBQkMBzEcTLAgMBAAEwDQYJKoZIhvcNAQELBQADggEB
AAB3i2NgiZ4rpNag7cXYdaFxAxdDWnke1 + LX2V2R3hzGmx73 / W6cKLpo3JBn9 + zT
1 aEjlqkt0yHu4aAPVYQzOa5zIV8mjP84p3ODSyV9J8lfjFNXT7wdA8 + 9 PVx3lVki
2 ONoCNBh1kOxnxI4 + BsMlQfF00ZbBSuGcMm3Ep3lTFWXzuUn3MQITzPwkL5LkW6a
sli / yAYQRTVDsXD8A3ACYT7BG31jGxyXtIHzqCci0MhZFdKKayMYkwfjZchIUtGN
JJoU8LQoHwGRtp3wutk0GlFzpEQEvSsn / Lsvvot5IfIe46tnzA6MVj5s64s5G8 + Q
phhXFlzXqO / VxquPdbfYjvU =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
11 =>
[
'id' => 'rainloop' ,
'categories' =>
[
0 => 'social' ,
1 => 'tools' ,
],
'userDocs' => '' ,
'adminDocs' => '' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/RainLoop/rainloop-webmail/issues' ,
'website' => 'http://www.rainloop.net/' ,
'created' => '2016-10-20T04:17:37.217555Z' ,
'lastModified' => '2016-11-18T11:36:04.309739Z' ,
'releases' =>
[
0 =>
[
'version' => '4.26.0' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '>=5.4.0' ,
'platformVersionSpec' => '>=10.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/pierre-alain-b/rainloop-nextcloud/releases/download/v4.26.0/rainloop-4.26.0.tar.gz' ,
'created' => '2016-10-20T04:28:21.491747Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-18T11:36:04.619927Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '>=5.4' ,
'rawPlatformVersionSpec' => '>=10 <=11' ,
'signature' => ' nTYIVSB6mIwKtXIrKoVGsOGFflpLjed8jFem1VLQNtXQj4bztnNrdc4YaPIn0yzM
2016-11-24 16:29:57 +03:00
yLpMSqRDNzdYNFuOeDiyKLPJPTA ++ MotLCNjEe7kxUekek + m + qzgnGBdcT7RQT6R
p9xWGecnVx94d6aA55uiRhgQRyHpdDMMLCOz1be + HvpwHy69DRFZ1 + SPmGUt6eW0
u5yS0vHCu1K22cbrVNXFKjxAOlGcIDm61oQuz7ycl3uAujZO4rZbWt55jilgKGak
ew559A5gTp9W + j + TWKIcg6LIZ9zLRlGjcQrWJrsc + OBZQcqiYimSFyO6HhfT9TPS
Pof //I+dSsd+H0SRGGeL8DvSnK+NKZL1q5EX5pziqsv6nZFITpCDwmAN+I8AnXXL
SNkFi53M8RZTOABpD2x7YPYP1cEvwrRweqV / C / oHcYnpfh7D2DjFeWwXsjeAXrHY
hgFhPrg + 7 rf7g6UmJFOCp0dC9sBdyQ3KtJkv7bGqPr854r2cdA7xW0QHWQ2in9qQ
LhIczc32ECi3ZVVgyF8zyT4Y / 3 MRS05oX3FHvHyt88mjni6bVaO78F7ZRSha8gHh
NOAkku7AMXPvUCHaZP2iVCCoAViEso8GeR3O8xh2G42Ai61RLYwx8LB1 + 23 EoJTr
mfFuRYNSg + qAKCokXNnh + lDlwu4AkaQo3vtKGPXvU7A = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/pierre-alain-b/rainloop-nextcloud/master/screenshots/2016.10.20-screenshot.jpg' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'RainLoop' ,
'summary' => 'RainLoop Webmail' ,
'description' => 'Simple, modern and fast web-based email client.' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'RainLoop Team' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAzCCAusCAhAXMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDE5MTkzNDEwWhcNMjcwMTI1MTkzNDEwWjATMREwDwYD
VQQDDAhyYWlubG9vcDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANqB
5 jnF9qZ / qjckt0kRjpHCOMtJumW / KiQoMeNP5nGv4ad0DS3KemOapUef8Zn7qCYb
MnODhK7HBwPifFzI1j8bnT2hP6E0geFLb0MdN59d2NF0n4CCs1 + BnepQPJ1kFbPK
35 wQRi0RDeTf / GQ +/ owEVCU9a9W1P / VUXk8Z0vMoQxCXEdRqnB63SgsKl7DB9G / C
4 SYrgGor + OHVGl4ntMZhJujiM996DttrNK3iZRGkQ07L + lfUIwQ52XOhQNRdic4p
B03lw7PpChwPGMv / EEvdR5HpCJQBJniqJbbu3Jh8bMBKTE / 8 fCzN3vMXICB2g3Bq
lKkZW6fnJRGsrZ79fsQnl + WBPNSrWRLOxOfe1fyCFV1ljFB4nTH7uF3pC8ZRgJes
kHIESHz3GJm28hn4 + 17 ESMGHBCbs7L9FK2GY31cobU0VRntLxpSG + d9njbIAgMG1
S7U + oKVFQhSVpdXNOaUNqhcQ3HkbQTLEP0k53A / lhLQb2 + KPd8nntaELjwNyrmZg
sVMgHj / zdlvrbguZjZFzUzDBFvkuv / 5 M58lNT / D1C6ufVp / R6eLsYI + nnk1ojAjz
l7N6U8X5SXpD + Bm7 + Kn1PH + bHl7cViCx8oXJXO2RhP + COXckw7BDZKtjItYHNG7M
pFwgYqWpvCu9LN6IN5a / eLqSI76dOOP3iYbaTH + NAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGB0Vq0l6ndGTgNbZxSEFyBR3u3tiR3pWK81DYjsui7qBoO6P / BaGmf +
raSwHPaBOwA9XNS8jcGLh5xdqY2p / m0dTS64xNjVL9nweWsG + FwVnPANo8C4nXdm
9 ajJ4cdg54stQK8qn1uh / xPcd23GKfYJazjYSwYmZ3pXXdzlGN9NxkeYJQxJ6B + 5
pzAeVGiABI / e5URpxzz2UayRX7EE + vtpe3B84hzkLqsq0N39ZN6KLfaTyEBGLzqE
iLYeXQTV0XSRs8xVt + iyGlj7nPkv2DR0oCqRpWUFWeSBI //niDG5WxS3qg8kacSW
fDSYhSN + IjrnIkwNtc8V9t7 / GeQB5FE =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
12 =>
[
'id' => 'richdocuments' ,
'categories' =>
[
0 => 'integration' ,
1 => 'office' ,
],
'userDocs' => 'https://nextcloud.com/collaboraonline/' ,
'adminDocs' => 'https://nextcloud.com/collaboraonline/' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/owncloud/richdocuments/issues' ,
'website' => '' ,
'created' => '2016-10-31T08:55:45.631429Z' ,
'lastModified' => '2016-11-24T12:13:53.905352Z' ,
'releases' =>
[
0 =>
[
'version' => '1.1.14' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/owncloud/richdocuments/releases/download/1.1.14/richdocuments.tar.gz' ,
'created' => '2016-11-24T12:10:13.337165Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-24T12:13:53.963638Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' prDGlfRPxqT6LP0BsAFPwGww7P4Bngha2N4u5B6 + F02N + RVOjGtTcXKqvM1KjZb1
2016-11-24 16:29:57 +03:00
Co7qJvgJmjpvIvDmB + rup02i8ObfwP2ct6UdsD7ouzOWJG2sJANXK31bHyvOmQ2h
vKu5eNcOkf + WFyFKYi51TbsfWn2 + 1 Wge3WWujKAVcEvqtcOOz + uMWNtqzBptEupk
E1aaRnQfTx488YB8Ubul06LIY0PNCHgGCWPgy817tOVT7JA + V0P0FFonl / PXE0dr
WgtxRJmvGaNiFzYq + kQmdKMfayZTm3kdVgP0W52t5wp878K0i4s2KPg5lANvjTz7
DCT + VV2IGIE52o4RpMUGyQ == ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-document.png' ,
],
1 =>
[
'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-app.png' ,
],
2 =>
[
'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-presentation.png' ,
],
3 =>
[
'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-spreadsheet.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Collabora Online' ,
'summary' => 'Edit office documents directly in your browser.' ,
'description' => 'Collabora Online allows you to to work with all kinds of office documents directly in your browser. This application requires Collabora Cloudsuite to be installed on one of your servers, please read the documentation to learn more about that.' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Collabora Productivity based on work of Frank Karlitschek, Victor Dubiniuk' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIDCDCCAfACAhAZMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYxMDMxMDg1NDExWhcNMjcwMjA2MDg1NDExWjAYMRYwFAYD
VQQDEw1yaWNoZG9jdW1lbnRzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEA1jk29m6JykcJ2Ld0YEpjPMYh6kwxY6GysNJnfkA / th7tPWL3 + vBJ9oTYyVnZ
jwAE1Cqwfa9MyBKMZ2IdfIqtT8PeWzuFP7Ib942EdxUpwwh9F3lykeGsj0h4zQwX
F9OooiS99PfLX + JpkKm15Ujb00iLB6xQmq0 + 3 NeOT1CTD1ziJ1ueOcxBKMwaFp2a
Puz3F5ywqCvpmxG / OBuOs0LI3 / zStXhBNbUMxBrWblr7zaVNJXl / I2JCKj8Wah / H
XUEEGbW15fAUP1f + 90 eQSxpEoCZDBHXOQCTJYzySGv + BjU + qlI9 / gS0QbrsiyzUf
O5lyvi8LvUZBzpBw + yg1U75rqQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA9jU3m
ZmD0ywO3MUsG / GLigFtcWi / p7zp2BliR + NpuY2qNFYDcsIb8ZUudmUc / cJRRctzy
APaLLj / d + h5RFaxjTVvim1PSe6M7urK / IMSvyUVYCeQRYpG8ZJixKTCOVIBaWHMz
xTfc51tm9EPlpJpK6JtaWrYYoWGE3k9sINdJ4JkvKkE2CBAqVhX6ZGyEQ0bnEhtk
Ru1DXn + LW7TJ4NZ8VtLWvmW / 6 Kfmi7dQ1V ++ Kmn0lO5ntRt5altePbStCHC8bhGp
myBOrjhrJgLIwvgH26MYZhdiSkFzoE38nMPZdrUmUDxcPCwucWJqgzDPudguFthj
WCVZ3TTG / 2 z3 + tWM
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
13 =>
[
'id' => 'ocr' ,
'categories' =>
[
0 => 'files' ,
1 => 'tools' ,
],
'userDocs' => 'https://janis91.github.io/ocr/' ,
'adminDocs' => 'https://github.com/janis91/ocr/wiki' ,
'developerDocs' => 'https://github.com/janis91/ocr/wiki' ,
'issueTracker' => 'https://github.com/janis91/ocr/issues' ,
'website' => 'https://janis91.github.io/ocr/' ,
'created' => '2016-09-19T12:07:49.220376Z' ,
'lastModified' => '2016-11-21T11:22:21.024501Z' ,
'releases' =>
[
0 =>
[
'version' => '1.0.0' ,
'phpExtensions' =>
[
],
'databases' =>
[
0 =>
[
'id' => 'pgsql' ,
'versionSpec' => '*' ,
'rawVersionSpec' => '*' ,
],
1 =>
[
'id' => 'mysql' ,
'versionSpec' => '*' ,
'rawVersionSpec' => '*' ,
],
2 =>
[
'id' => 'sqlite' ,
'versionSpec' => '*' ,
'rawVersionSpec' => '*' ,
],
],
'shellCommands' =>
[
0 => 'ocrmypdf' ,
1 => 'tesseract' ,
],
'phpVersionSpec' => '>=5.6.0 <8.0.0' ,
'platformVersionSpec' => '>=10.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/janis91/ocr/releases/download/v1.0.0/ocr.tar.gz' ,
'created' => '2016-10-24T06:50:43.283900Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-21T11:22:21.269108Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '>=5.6 <=7' ,
'rawPlatformVersionSpec' => '>=10 <=11' ,
'signature' => ' CBJkCIiUKyf2NuWfz2zJ3grhf8p7wJes7DPV / OxUzhlxIH0Fh7K54 + U5A9JOOi6f
2016-11-24 16:29:57 +03:00
WPhjXG1ylkyIVY1glr / B8svWNsD4jAclpnUi1 / 9 ZW5UPT8LnRBfTbtF9Uoj0OgNs
tsGQYbpuREoHnjbJWTRe0kq1OsOfX44xuf8PuX43B + lpQPW4iRSSz3ZIhdPcDGq1
7 pyqQM7gdKhBQ6 / tOiwd7Enyt5Hi4V6jhwhUOCYeTNiLD2V3yKL + qA9DzpXUfNNw
LGTjcaMrifibHQIZBZWbPPMmCfMJZ7GO9oR4gWHwkhWqt0yVWAJXAHJBLd5vXC5I
jtRTXRpHO / k6Dtqem8tZCVoDE5MAC7fDZ / 0 XzoFiXHciP6MenVasVcXo6xJOJc5y
GsrecNftUEhP / ngxA6lMBVkLmmdpiexVisvsavPi64i34OUA6qOuxjgNVBDwg56i
2 lOEVvHa3nn0UX7ZZoQ / Nu6Mz7J3Hx / VDlttPuWe42eeJAphyDGubT1M62gW8dVB
D3tJOF7spnK6I3BhVLviou / zs30AIRVBDTU0Orzx78cbInwy6 / vyJib2a1olAaHz
v05SzlQRnBWM4jYBe0mA / 2 ds9AO6VrXGrT / iLlHemj6JYoGBM185TGewA7OJyX3a
HSlSDqaremmi + aS3onx3AKhXykDxTRkMVarePwTzzFs = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc1.png' ,
],
1 =>
[
'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc2.png' ,
],
2 =>
[
'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc3.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'OCR' ,
'summary' => 'Character recoginition for your images and pdf files.' ,
'description' => ' # Description
2016-11-24 16:29:57 +03:00
Nextcloud OCR ( optical character recoginition ) processing for images and PDF with tesseract - ocr and OCRmyPDF brings OCR capability to your Nextcloud 10.
The app uses tesseract - ocr , OCRmyPDF and a php internal message queueing service in order to process images ( png , jpeg , tiff ) and PDF ( currently not all PDF - types are supported , for more information see [ here ]( https :// github . com / jbarlow83 / OCRmyPDF )) asynchronously and save the output file to the same folder in nextcloud , so you are able to search in it .
The source data won & #39;t get lost. Instead:
- in case of a PDF a copy will be saved with an extra layer of the processed text , so that you are able to search in it .
- in case of a image the result of the OCR processing will be saved in a . txt file next to the image ( same folder ) .
** One big feature is the asynchronous ocr processing brought by the internal php message queueing system ( Semaphore functions ), which supports workers to handle tasks asynchronous from the rest of nextcloud .**
## Prerequisites, Requirements and Dependencies
The OCR app has some prerequisites :
- ** [ Nextcloud 10 ]( https :// nextcloud . com / ) ** or higher
- ** Linux ** server as environment . ( tested with Debian 8 , Raspbian and Ubuntu 14.04 ( Trusty ))
- ** [ OCRmyPDF ]( https :// github . com / jbarlow83 / OCRmyPDF ) ** & gt ; v2 . x ( tested with v4 . 1.3 ( v4 is recommended ))
- ** [ tesseract - ocr ]( https :// github . com / tesseract - ocr / tesseract ) ** & gt ; v3 . 02.02 with corresponding language files ( e . g . tesseract - ocr - eng )
For further information see the homepage or the appropriate documentation . ' ,
2020-11-11 18:43:41 +03:00
],
'de' =>
[
'name' => 'OCR' ,
'summary' => 'Schrifterkennung für Bilder (mit Text) und PDF Dateien.' ,
'description' => ' # Beschreibung
2016-11-24 16:29:57 +03:00
OCR ( Automatische Texterkennung ) für Bilder ( mit Text ) und PDF Dateien mithilfe von tesseract - ocr und OCRmyPDF ermöglicht Ihnen automatische Schrifterkennung direkt in Ihrer Nextcloud 10.
Die App nutzt Tesseract - ocr , OCRmyPDF und den internen Message Queueing Service von PHP , um so asynchron ( im Hintegrund ) Bilder ( PNG , JPEG , TIFF ) und PDFs ( aktuell werden nicht alle Typen unterstützt , näheres [ hier ]( https :// github . com / jbarlow83 / OCRmyPDF )) zu verarbeiten . Das Ergebnis , welches jetzt durchsuchbar , kopierbar und ähnliches ist , wird anschließend im selben Ordner gespeichert , wie die Ursprungsdatei .
Die Ursuprungsdatei geht dabei nicht verloren :
- im Falle einer PDF wird eine Kopie mit einer zusätzlichen Textebene gespeichert , damit sie durchsuchbar und kopierbar wird .
- im Falle eines Bildes wird das Resultat in einer txt - Datei gespeichert .
** Ein großer Vorteil ist , dass das Ausführen und Verarbeiten asynchron im Hintergrund stattfindet . Dies geschieht mithilfe der PHP internernen Unterstützung einer Message Queue ( Semaphore Funktionen ) . Die Aufgaben werden somit getrennt von der Nextcloud in einem eigenen Arbeits - Prozess ( Worker ) abgearbeitet .**
## Anforderungen und Abhängigkeiten
Für die OCR App müssen folgende Anforderungen erfüllt sein :
- ** [ Nextcloud 10 ]( https :// nextcloud . com / ) ** oder höher
- ** Linux ** server als Betriebssystem . ( getestet mit Debian 8 , Raspbian und Ubuntu 14.04 ( Trusty ))
- ** [ OCRmyPDF ]( https :// github . com / jbarlow83 / OCRmyPDF ) ** & gt ; v2 . x ( getestet mit v4 . 1.3 ( v4 empfohlen ))
- ** [ tesseract - ocr ]( https :// github . com / tesseract - ocr / tesseract ) ** & gt ; v3 . 02.02 mit den dazugehörigen Übersetzungs - und Sprachdateien ( z . B . tesseract - ocr - deu )
Für weiter Informationen besuchen Sie die Homepage oder lesen Sie die zutreffende Dokumentation . ' ,
2020-11-11 18:43:41 +03:00
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Janis Koehr' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIID / jCCAuYCAhAKMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTE5MTEzNTAxWhcNMjYxMjI2MTEzNTAxWjAOMQwwCgYD
VQQDDANvY3IwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDDpXiwec4f
XAT //7YBPSb4z6ZsBJSMfBq0VTL/HagjJnQ7BL+WagzWlS69IStNDqlIlenamYRX
4 B40heJIUinzYKjTRbr5UAw6MX29HibZccm / qgrk36o1XTgIsoRhmvSxbXDVIo1k
bDOJN8gc2Gvswa8X + uOe9pfcDgAdqGxOvFnoKW89GnB01pCNT + xakNErGAFqVLsr
2 AeademAZnbxJ1cB54tQn2Bygb / 7 DKKY8EmFfIq6 / 27 n9Jbph1FG9HIlWRT4 / M2H
U2pG3cCScWMEBPsW7kpfpnzLk7Q30Oj6k / rEYjJgmNYgg6oVnn0D9uRmhBYBnGyx
Mab1ilsK53lyuzQY0pmU8V5ULqpnNFAK6DVFfofEamDUhBPO + TZXEA5cZmuULRpf
QQXmGpUQSyV6pS9WirMIqXFp9wmQ4vtjMdhu / 6 CP7cmtYZdq9uOhWEHbQM0mZUkb
8 hMjeItPx9XITI7Cge1JUOI8ZIwiB3USnQXcMd3v82l ++/ VgqHB7s5OaKPhygsWI
M6RCoBcGiuQB5 / fEUOg5ACOpGVyJiBda0Mi57AdoxdJmfnr7Bxcf2tAWIJL9Y7T3
E1 + V2BMxJOWwvVz26Cq83F41yXK2hJS + SbfQTqNUR8Cfh50CS9POvgRxNrJK9yvI
kKle3ITRtGVM1XU0njWjnsdGg3D3O2mmjQIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
AQAbFddMbgfPI1szT57V1FKZrOrdYqQ7qjewlIQOzshGydbMtqS / 9 XL5hYocJCMt
Y6w + C / i6iEzO2Jx8D / k4rcZMXoVR6y3ZvO0Ke0gzSRsU + 5 eYj2FK1VV + cNIQW5Iu
CYYIVa7pVPVHdeQH2Bba680bLV0HMF6b1fI9IwkfdCAinvCYZLjyEXZlmB7YjyA8
HR7qPCNz4uG2Va7mlUHE3UYUYnlv8JFOV3YdbVL0nxhWwIdzSri5sxFIhdlabpzY
yA1z / MCBEyTRo80jxFmL + MpwbsdbUJi7Qxlnd56zb6HHDGrLHXZTh9LXgyVbnhWL
kxomWjIXQh4aMHQL4QF7U4EK
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
14 =>
[
'id' => 'spreedme' ,
'categories' =>
[
0 => 'tools' ,
],
'userDocs' => 'https://github.com/strukturag/nextcloud-spreedme/blob/master/README.md' ,
'adminDocs' => 'https://github.com/strukturag/nextcloud-spreedme/blob/master/README.md' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/strukturag/nextcloud-spreedme/issues' ,
'website' => '' ,
'created' => '2016-09-27T08:43:07.835196Z' ,
'lastModified' => '2016-11-21T16:51:23.703819Z' ,
'releases' =>
[
0 =>
[
'version' => '0.3.4' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://apps.owncloud.com/CONTENT/content-files/174436-spreedme.tar.gz' ,
'created' => '2016-11-21T16:51:23.689599Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-21T16:51:23.826509Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' Mhy3hXeGWlIujx1Op39MMRdqHYOo360BCwr4FPWoTNNggH3aS0gWlh48DAfGYK9W
2016-11-24 16:29:57 +03:00
etNiOqIuRyA0NrVlsqR2vDILgFtODJSbKPyHd3PQn3hcGsjogjQ + dkKciLNLinw7
Ohbv6aDdRFLBeRHpX / 7 wOnWL5W3ko / gyn0Awvi88M9 + nC5aARtqncQqPy2SxDGzH
KlOZHSNDnEQCGMhA8hNWWKdVwNUJHod / wmBWpW5QVNSJq5DqrKZcNwpGM2UUJoql
EqUMwDXk5uVH5r5k62Tr9kguDWoUEG1OqQSyeMY24AmA64tq / HSlAdZ + CX32bc4E
Zvm + n8poJBrdSVmWEaa4ZfYaLFdOc6Kcuid1B1Sv9kPhD9WD6T1sicdzjDzcorBK
/ MLReCuSb2E8aPTnFWRoAZ4xCUGs1IXzX5fmxI8VdzwR42R6RhGJ / rqMuZRFenZF
bOks45K5gE1da4QpkYOUQa3GVMNPqPiT3CqjmJ8tjxq7bGpb6v + YoCLACjjPpPZL
2 Y28qLxwHVaINDFUUxD75WWdrlulRbqHwiSw8jolP9qrpXhDuLAqYam9tRwV5K5R
8 uNawnFwWkicBEYkN / WtBTouWzehOPn38tHXov6SyEyD6lkuxUBZrsGQ2ru + t33U
k0kKCbV0GFw43I + 3 Ji5DiB4TUVNZYVoPG1B7Qve + UfA = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/conference.gif' ,
],
1 =>
[
'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/presentation.png' ,
],
2 =>
[
'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/import.png' ,
],
3 =>
[
'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/users.png' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Spreed.ME' ,
'summary' => 'Audio-, video- and text chat for your Nextcloud' ,
'description' => 'Securely communicate with your friends and family using rich audio-, video- and text chat, and much more right from your Nextcloud – in your browser' ,
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'struktur AG' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAzCCAusCAhANMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTI2MTYxNzMzWhcNMjcwMTAyMTYxNzMzWjATMREwDwYD
VQQDEwhzcHJlZWRtZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKLx
2 dCPBLIgX948BnOdLij0YyI2 + FKD6uZOvzxMaoi3rlxNf8MJgraNMzTBWEXtxT5b
7 ZISNp89WEXhaQ1dwwCocodd / xow4Ek63m5nUvTZXsm + YSbMgrFbxzsBhYU7KuIE
T / jhKdzYgemzErwwN / gtwkLMfPo3jkgg6c8NPPohYv6k7V4VnsqtJ0JS0kX19FqM
MiNz9XkcncBHy9x0BSxy4 + YnwbFcgIx / MtYKlBL8NkPuuJaB / 6 C1O + IPYhdEdnpX
+ RaIue71nSStOYOqT4YDqHAIw7EmqgA1my09mmK + 0 Pn92GJVEAEN7JGBSQ + F32RI
dB3ivGAOVtUtVvJlepWdbHxj1xqeP + LCjWzHMLQjm0TyH8VqU4Cg / wxwAEFnBATH
aOaWwrggzY2d9KBo1mp0k71NArLbBdlHykFU4bgiSDWrXXMz0fZzLQVwGI0Eqcxc
ouf6t0kvrK8oKjrnso + FjBoT7lHV / H6ny4ufxIEDAJ / FEBV / gMizt5fDZ + DvmMw4
q + a088 / lXoiI / vWPoGfOa77H5BQOt3y70Pmwv2uVYp46dtU8oat + ZvyW9iMmgP1h
JSEHj1WGGGlp45d10l4OghwfTB0OSuPUYwWR + lZnV8sukGvQzC9iRV1DGl / rREMC
cQ5ajRAtO5NPnThvN5 / Zuh4n8JoDc0GK4jEZsIivAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBAGHMRbPV0WTI9r1w6m2iJRrMbZtbBb + mQr8NtOoXQwvSXWT1lXMP2N8u
LQ1a8U5UaUjeg7TnoUWTEOqU05HpwA8GZtdWZqPPQpe691kMNvfqF64g0le2kzOL
huMP9kpDGzSD8pEKf1ihxvEWNUBmwewrZTC3 + b4gM + MJ3BBCfb5SCzMURLirfFST
axCNzc7veb2M98hS73w5ZE6vO + C / wz0GTsxuK0AoLitApT5naQnjvxSvSsjFPEGD
sUNUEU2Decyp0jxLVnrrpz6Y5UupfBR0V8yAv1t5Od / mCKLc5DxHsDWiKOpsob9U
JN + bdzJil2NNftihD4Dm7Ha7OS3O8W0 =
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
15 =>
[
'id' => 'nextant' ,
'categories' =>
[
0 => 'files' ,
1 => 'tools' ,
],
'userDocs' => '' ,
'adminDocs' => 'https://github.com/nextcloud/nextant/wiki' ,
'developerDocs' => '' ,
'issueTracker' => 'https://github.com/nextcloud/nextant/issues' ,
'website' => 'https://github.com/nextcloud/nextant/wiki' ,
'created' => '2016-09-14T14:34:35.977699Z' ,
'lastModified' => '2016-11-22T16:02:57.758477Z' ,
'releases' =>
[
0 =>
[
'version' => '0.6.6' ,
'phpExtensions' =>
[
],
'databases' =>
[
],
'shellCommands' =>
[
],
'phpVersionSpec' => '*' ,
'platformVersionSpec' => '>=9.0.0 <12.0.0' ,
'minIntSize' => 32 ,
'download' => 'https://github.com/nextcloud/nextant/releases/download/v0.6.6/nextant-0.6.6.tar.gz' ,
'created' => '2016-11-16T15:11:14.344704Z' ,
'licenses' =>
[
0 => 'agpl' ,
],
'lastModified' => '2016-11-16T20:39:59.030384Z' ,
'isNightly' => false ,
'rawPhpVersionSpec' => '*' ,
'rawPlatformVersionSpec' => '>=9 <=11' ,
'signature' => ' aOZeEeThyZ0V / vXBcn6c + Z0vyCsZcN6nfSJ8oWEea4zXh4g705Si + MFZESqix3M2
2016-11-25 13:32:46 +03:00
OPCnA / U8eASwdRTAEwQJrW5ECmu1THXSIsrzQzc9kFycvyOGzCgAWtuu0ayzZD2 /
U5aDWlzpLHC1Czg9QJ5UnfZR0AfChWQ402N1YzGqMShdJv6AHXFrVE + uYnIyxuYI
oPJQBUYbQwthVUjpYwFwSxw50YU17gmx5RZ0Y0OPz3i / EiuEUrxopXtfDVYAuCML
pDw37LOTRQ2JqxSU3teALh8LcrwJbTeOP0n4bTeV + vU3jvtiaEoRrwfVrK41F701
QymGXy1 / EFG0kxPGS2dRNPBAXYLZfeoWlROl3D5BWlbsCcXKU1S + 22 yn0TEdS7x1
Y44x8jRKnBddDE7qkn + QoQYHNNcxOREsFFLmIoyCUpdNOdDX2PvTFUYkIqdnXaJy
oAKv2GkvWPQ0aiiBtA1i4oXuzvHW / M2wOrK7v7DCpNfILrD / sjxpljxcX082nRCd
9 P3iPd2hQ6yOM9fG21LVN74b6wggI81BzFf / xJPd4ZqYLjfeG / yqd0zaiMOzMm1W
se + kc / a4iB3BoCNX3E942pBBzew4ya8LkCXdCHUUsuelDf1va1ikTh / G7D84ll9 /
2 avNqQnUh3hgOnxFCLI / 5 VrbqxfSTVdO6O / LTuAmwgw = ' ,
2020-11-11 18:43:41 +03:00
'translations' =>
[
],
],
],
'screenshots' =>
[
0 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/displayResult.jpg' ,
],
1 =>
[
'url' => 'https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/admin.jpg' ,
],
],
'translations' =>
[
'en' =>
[
'name' => 'Nextant' ,
'summary' => 'Navigate through your cloud using Solr' ,
'description' => '
2016-11-24 16:29:57 +03:00
Navigate through your cloud using Solr
** Nextant ** performs fast and concise _Full - Text Search_ within :
- your own files ,
- shared files ,
- external storage ,
- bookmarks
### Recognized file format:
- plain text ,
- rtf ,
- pdf ,
- html ,
- openoffice ,
- microsoft office ,
- image JPEG and TIFF ( will requiert Tesseract installed )
- pdf with no text layer ( will also requiert Tesseract ) _ [ work in progress ] _
## Installation
- [ You first need to install a Solr servlet ]( https :// github . com / nextcloud / nextant / wiki )
- Download the . zip from the appstore , unzip and place this app in ** nextcloud / apps /** ( or clone the github and build the app yourself )
- Enable the app in the app list ,
- Edit the settings in the administration page .
2016-11-25 13:32:46 +03:00
- Extract the current files from your cloud using the **./ occ nextant : index ** commands
2016-11-24 16:29:57 +03:00
- Have a look to this [ explanation on how Nextant works ]( https :// github . com / nextcloud / nextant / wiki / Extracting , - Live - Update )
- _ ( Optional ) _ [ Installing Tesseract ]( https :// github . com / tesseract - ocr / tesseract / wiki ) ([ Optical Character Recognition ]( https :// en . wikipedia . org / wiki / Optical_character_recognition ) ( OCR ) Engine ) will allow Nextant to extract text from images and pdfs without text layer .
' ,
2020-11-11 18:43:41 +03:00
],
],
'isFeatured' => false ,
'authors' =>
[
0 =>
[
'name' => 'Maxence Lange' ,
'mail' => '' ,
'homepage' => '' ,
],
],
'ratingRecent' => 0.5 ,
'ratingOverall' => 0.5 ,
'ratingNumRecent' => 0 ,
'ratingNumOverall' => 0 ,
'certificate' => ' ----- BEGIN CERTIFICATE -----
2016-11-24 16:29:57 +03:00
MIIEAjCCAuoCAhAFMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMTYwOTE0MTI1NDQwWhcNMjYxMjIxMTI1NDQwWjASMRAwDgYD
VQQDDAduZXh0YW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsbnQ
+ 9 acjKHfcrUj4yqBpD ++ GmQ5z2Sp8C8uOz4ZbLyM9bUXEYHo4a4u3CdC49kGUkb3
p5MkEAEzslTWDi1eh5MZgPWpbPgItsDsXY1o55O3jtxNkzSG5 / yYcPQcuKtIOm9S
7 DY0K + UQt3nK + RrXEZfARMNrzFbEzpE3b7w901Yl5n + m / B8rhW4pqg8uSfx3u04J
wduV1fHwoHUB0Ox5HyWib4Pq1XppNh7xdc2Fg93JxshwuCPJyOOzrFTnxC7s1yzQ
UvaqkjPW5QeQRunQjZ2XtpYH8f8v01W18bNEiHwqtFwuDEyCVx1rvEMgUDVXdPkP
gZrlB5TzGmz0U3HzYvf6205WuzfHxz7kPj502wP51PoZBKpniggKzmuXkx6BpsZC
ZX45VpDHdiATLwRj1t2bMs3C01nzpIWO5ZwFtkepH3Y + mvwX5lDh / XDsqJC2Yo8o
WMmniWNW7dspufYOsBUqqYGP7rkailgVT4oYk6D1j6oFZ5SSpfPF5lsyYedDSM6y
bIGVkSF + sjLK6R9BenBijKceAKsS //WwRYCBPC+JHlsYpXKW12bL+C47Kj2/N6d4
rYryzV6ofVSF6pwIq0oEjoyfBfNpYavf3xrRkSSmIIlPSnMY7DT1xkGD5retxSm6
+ WIfkWKRZpv2S6PhMHGLspYc4H5Dj8c48rG5Co8CAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAOZUwyPaUi + 1 BOUgQJMWqYRoTVZUyBshTXSC7jSwa97b7qADV9ooA6TYF
zgsPcE41k7jRkUbnjcY45RGtL3vqsgZbx5TjPa5fGMxlqJ6eYBOY61Q6VIHEVm3u
xnPEO9dsMoDBijvo5D7KtE + Ccs907Rq70kCsbrdgPHkyb5tDSnCKogN1LiQrg1EP
my7Z1C7jG9 / h57vx0 + QBMDCYnTmqLsvMKqo27uHskzAiB7VXLEdSZ2FtMGHkLUQO
0 bfhnvTZ2VhMmK83t7ovo71An4ycmsolGD / MA0vNI78VrVISrdI8rRh2WntUnCBU
EJL3BaQAQaASSsvFrcozYxrQG4VzEg ==
----- END CERTIFICATE ----- ' ,
2020-11-11 18:43:41 +03:00
],
2020-04-09 10:22:29 +03:00
],
2020-01-09 19:29:00 +03:00
'timestamp' => 1234 ,
'ncversion' => '11.0.0.2' ,
'ETag' => '"myETag"' ,
2020-03-26 11:30:18 +03:00
];
2020-01-09 19:29:00 +03:00
protected function setUp () : void {
parent :: setUp ();
/** @var Factory|PHPUnit_Framework_MockObject_MockObject $factory */
$factory = $this -> createMock ( Factory :: class );
$this -> appData = $this -> createMock ( AppData :: class );
$factory -> expects ( $this -> once ())
-> method ( 'get' )
-> with ( 'appstore' )
-> willReturn ( $this -> appData );
$this -> clientService = $this -> createMock ( IClientService :: class );
$this -> timeFactory = $this -> createMock ( ITimeFactory :: class );
$this -> config = $this -> createMock ( IConfig :: class );
$this -> compareVersion = new CompareVersion ();
$this -> logger = $this -> createMock ( ILogger :: class );
$this -> fetcher = new AppFetcher (
$factory ,
$this -> clientService ,
$this -> timeFactory ,
$this -> config ,
$this -> compareVersion ,
$this -> logger
2016-11-24 16:29:57 +03:00
);
2020-01-09 19:29:00 +03:00
}
2016-11-24 16:29:57 +03:00
2020-01-09 19:29:00 +03:00
public function testGetWithFilter () {
$this -> config -> method ( 'getSystemValue' )
2020-04-09 14:53:40 +03:00
-> willReturnCallback ( function ( $key , $default ) {
2020-01-09 19:29:00 +03:00
if ( $key === 'appstoreenabled' ) {
return true ;
2020-04-10 11:35:09 +03:00
} elseif ( $key === 'version' ) {
2020-01-09 19:29:00 +03:00
return '11.0.0.2' ;
2020-04-10 11:35:09 +03:00
} elseif ( $key === 'appstoreurl' && $default === 'https://apps.nextcloud.com/api/v1' ) {
2020-01-09 19:29:00 +03:00
return 'https://custom.appsstore.endpoint/api/v1' ;
} else {
return $default ;
}
});
$file = $this -> createMock ( ISimpleFile :: class );
$folder = $this -> createMock ( ISimpleFolder :: class );
$folder
-> expects ( $this -> at ( 0 ))
-> method ( 'getFile' )
-> with ( 'apps.json' )
-> willThrowException ( new NotFoundException ());
$folder
-> expects ( $this -> at ( 1 ))
-> method ( 'newFile' )
-> with ( 'apps.json' )
-> willReturn ( $file );
$this -> appData
-> expects ( $this -> once ())
-> method ( 'getFolder' )
-> with ( '/' )
-> willReturn ( $folder );
$client = $this -> createMock ( IClient :: class );
$this -> clientService
-> expects ( $this -> once ())
-> method ( 'newClient' )
-> willReturn ( $client );
$response = $this -> createMock ( IResponse :: class );
$client
-> method ( 'get' )
-> with ( 'https://custom.appsstore.endpoint/api/v1/apps.json' )
-> willReturn ( $response );
$response
-> expects ( $this -> once ())
-> method ( 'getBody' )
-> willReturn ( self :: $responseJson );
$response -> method ( 'getHeader' )
-> with ( $this -> equalTo ( 'ETag' ))
-> willReturn ( '"myETag"' );
$this -> timeFactory
-> expects ( $this -> once ())
-> method ( 'getTime' )
-> willReturn ( 1234 );
$dataToPut = self :: $expectedResponse ;
2016-11-25 13:32:46 +03:00
$dataToPut [ 'data' ] = array_values ( $dataToPut [ 'data' ]);
$originalArray = json_decode ( self :: $responseJson , true );
$mappedOriginalArray = [];
2020-04-10 15:19:56 +03:00
foreach ( $originalArray as $key => $value ) {
foreach ( $value as $releaseKey => $releaseValue ) {
if ( $releaseKey === 'id' ) {
2016-11-25 13:32:46 +03:00
$mappedOriginalArray [ $releaseValue ] = $originalArray [ $key ];
}
}
}
2020-04-10 15:19:56 +03:00
foreach ( $dataToPut [ 'data' ] as $key => $appValue ) {
foreach ( $appValue as $appKey => $value ) {
if ( $appKey === 'certificate' || $appKey === 'description' ) {
2016-11-25 13:32:46 +03:00
$dataToPut [ 'data' ][ $key ][ $appKey ] = $mappedOriginalArray [ $appValue [ 'id' ]][ $appKey ];
}
}
}
2016-11-24 16:29:57 +03:00
$file
-> expects ( $this -> at ( 0 ))
2019-03-06 21:59:15 +03:00
-> method ( 'putContent' );
2016-11-24 16:29:57 +03:00
$file
-> method ( 'getContent' )
2020-01-09 19:29:00 +03:00
-> willReturn ( json_encode ( self :: $expectedResponse ));
2016-11-24 16:29:57 +03:00
2020-01-09 19:29:00 +03:00
$this -> assertEquals ( self :: $expectedResponse [ 'data' ], $this -> fetcher -> get ());
2016-11-24 16:29:57 +03:00
}
2017-02-23 23:56:28 +03:00
public function testAppstoreDisabled () {
$this -> config
-> method ( 'getSystemValue' )
2020-04-09 14:53:40 +03:00
-> willReturnCallback ( function ( $var , $default ) {
2017-11-17 22:41:58 +03:00
if ( $var === 'appstoreenabled' ) {
return false ;
2020-04-10 11:35:09 +03:00
} elseif ( $var === 'version' ) {
2019-03-06 21:59:15 +03:00
return '11.0.0.2' ;
2017-11-17 22:41:58 +03:00
}
return $default ;
2020-03-26 00:21:27 +03:00
});
2017-11-17 22:41:58 +03:00
$this -> appData
-> expects ( $this -> never ())
-> method ( 'getFolder' );
$this -> assertEquals ([], $this -> fetcher -> get ());
}
public function testNoInternet () {
$this -> config
-> method ( 'getSystemValue' )
2020-04-09 14:53:40 +03:00
-> willReturnCallback ( function ( $var , $default ) {
2017-11-17 22:41:58 +03:00
if ( $var === 'has_internet_connection' ) {
return false ;
2020-04-10 11:35:09 +03:00
} elseif ( $var === 'version' ) {
2019-03-06 21:59:15 +03:00
return '11.0.0.2' ;
2017-11-17 22:41:58 +03:00
}
return $default ;
2020-03-26 00:21:27 +03:00
});
2017-02-23 23:56:28 +03:00
$this -> appData
-> expects ( $this -> never ())
-> method ( 'getFolder' );
$this -> assertEquals ([], $this -> fetcher -> get ());
}
2020-01-09 19:29:00 +03:00
public function testSetVersion () {
$this -> config -> method ( 'getSystemValue' )
2020-04-09 14:53:40 +03:00
-> willReturnCallback ( function ( $key , $default ) {
2020-01-09 19:29:00 +03:00
if ( $key === 'appstoreenabled' ) {
return true ;
2020-04-10 11:35:09 +03:00
} elseif ( $key === 'version' ) {
2020-01-09 19:29:00 +03:00
return '10.0.7.2' ;
2020-04-10 11:35:09 +03:00
} elseif ( $key === 'appstoreurl' && $default === 'https://apps.nextcloud.com/api/v1' ) {
2020-01-09 19:29:00 +03:00
return 'https://custom.appsstore.endpoint/api/v1' ;
} else {
return $default ;
}
});
$file = $this -> createMock ( ISimpleFile :: class );
$folder = $this -> createMock ( ISimpleFolder :: class );
$folder
-> expects ( $this -> at ( 0 ))
-> method ( 'getFile' )
-> with ( 'future-apps.json' )
-> willThrowException ( new NotFoundException ());
$folder
-> expects ( $this -> at ( 1 ))
-> method ( 'newFile' )
-> with ( 'future-apps.json' )
-> willReturn ( $file );
$this -> appData
-> expects ( $this -> once ())
-> method ( 'getFolder' )
-> with ( '/' )
-> willReturn ( $folder );
$client = $this -> createMock ( IClient :: class );
$this -> clientService
-> expects ( $this -> once ())
-> method ( 'newClient' )
-> willReturn ( $client );
$response = $this -> createMock ( IResponse :: class );
$client
-> method ( 'get' )
-> with ( 'https://custom.appsstore.endpoint/api/v1/apps.json' )
-> willReturn ( $response );
$response
-> expects ( $this -> once ())
-> method ( 'getBody' )
-> willReturn ( self :: $responseJson );
$response -> method ( 'getHeader' )
-> with ( $this -> equalTo ( 'ETag' ))
-> willReturn ( '"myETag"' );
$this -> timeFactory
-> expects ( $this -> once ())
-> method ( 'getTime' )
-> willReturn ( 1234 );
$dataToPut = self :: $expectedResponse ;
$dataToPut [ 'data' ] = array_values ( $dataToPut [ 'data' ]);
$originalArray = json_decode ( self :: $responseJson , true );
$mappedOriginalArray = [];
2020-04-10 15:19:56 +03:00
foreach ( $originalArray as $key => $value ) {
foreach ( $value as $releaseKey => $releaseValue ) {
if ( $releaseKey === 'id' ) {
2020-01-09 19:29:00 +03:00
$mappedOriginalArray [ $releaseValue ] = $originalArray [ $key ];
}
}
}
2020-04-10 15:19:56 +03:00
foreach ( $dataToPut [ 'data' ] as $key => $appValue ) {
foreach ( $appValue as $appKey => $value ) {
if ( $appKey === 'certificate' || $appKey === 'description' ) {
2020-01-09 19:29:00 +03:00
$dataToPut [ 'data' ][ $key ][ $appKey ] = $mappedOriginalArray [ $appValue [ 'id' ]][ $appKey ];
}
}
}
$file
-> expects ( $this -> at ( 0 ))
-> method ( 'putContent' );
$file
-> method ( 'getContent' )
-> willReturn ( json_encode ( self :: $expectedResponse ));
$this -> fetcher -> setVersion ( '11.0.0.2' , 'future-apps.json' , false );
$this -> assertEquals ( self :: $expectedResponse [ 'data' ], $this -> fetcher -> get ());
}
2016-10-27 18:41:15 +03:00
}