diff --git a/wp-fdroid/wp-fdroid.php b/wp-fdroid/wp-fdroid.php index 52ffb212..5efb416f 100644 --- a/wp-fdroid/wp-fdroid.php +++ b/wp-fdroid/wp-fdroid.php @@ -108,6 +108,7 @@ class FDroid sys_get_temp_dir().'/android-permissions.cache'); $permissions_data = $permissions_object->get_permissions_array(); + // Get app data $xml = simplexml_load_file($this->site_path.'/repo/index.xml'); foreach($xml->children() as $app) { @@ -143,6 +144,12 @@ class FDroid case "web": $web=$el; break; + case "antifeatures"; + $antifeatures=$el; + break; + case "requirements"; + $requirements=$el; + break; case "package": $thisapk=array(); foreach($el->children() as $pel) { @@ -178,6 +185,23 @@ class FDroid } } + // Generate app diff data + foreach(array_reverse($apks, true) as $key=>$apk) { + if(isset($previous)) { + // Apk size + $apks[$key]['diff']['size'] = $apk['size']-$previous['size']; + } + + // Permissions + $permissions = explode(',',$apk['permissions']); + $permissionsPrevious = isset($previous['permissions'])?explode(',',$previous['permissions']):array(); + $apks[$key]['diff']['permissions']['added'] = array_diff($permissions, $permissionsPrevious); + $apks[$key]['diff']['permissions']['removed'] = array_diff($permissionsPrevious, $permissions); + + $previous = $apk; + } + + // Output app information $out='
'.$name.""; @@ -186,7 +210,21 @@ class FDroid $out.="
".$desc."
"; - $out.="License: ".$license."
"; + if(isset($antifeatures)) { + $antifeaturesArray = explode(',',$antifeatures); + foreach($antifeaturesArray as $antifeature) { + $antifeatureDesctiption = $this->get_antifeature_description($antifeature); + $out.=''.$antifeatureDesctiption['name'].'
';
+ $out.=$antifeatureDesctiption['description'].'
";
+ $out.="License: ".$license;
+ if(isset($requirements)) {
+ $out.='
Additional requirements: '.$requirements;
+ }
+ $out.="
"; if(strlen($web)>0) @@ -212,45 +250,83 @@ class FDroid $out.="
Version ".$apk['version']."
";
$out.='download apk ';
$out.=$this->human_readable_size($apk['size']);
- if($apk['srcname']) {
+ $diffSize = $apk['diff']['size'];
+ if(abs($diffSize) > 500) {
+ $out.=' (';
+ $out.=$diffSize>0?'+':'';
+ $out.=$this->human_readable_size($diffSize, 1).')';
+ }
+ if(isset($apk['srcname']) && file_exists($this->site_path.'/repo/'.$apk['srcname'])) {
$out.='
source tarball ';
$out.=$this->human_readable_size(filesize($this->site_path.'/repo/'.$apk['srcname']));
}
if(isset($apk['permissions'])) {
+ // Permissions diff link
+ if($first == false) {
+ $permissionsAddedCount = count($apk['diff']['permissions']['added']);
+ $permissionsRemovedCount = count($apk['diff']['permissions']['removed']);
+ $divIdDiff='permissionsDiff'.$i;
+ if($permissionsAddedCount || $permissionsRemovedCount) {
+ $out.='
permissions diff';
+ $out.=' (';
+ if($permissionsAddedCount)
+ $out.='+'.$permissionsAddedCount;
+ if($permissionsAddedCount && $permissionsRemovedCount)
+ $out.='/';
+ if($permissionsRemovedCount)
+ $out.='-'.$permissionsRemovedCount;
+ $out.=')';
+ }
+ else
+ {
+ $out.='
no permission changes';
+ }
+ }
+
+ // Permissions list link
+ $permissionsListString = $this->get_permission_list_string(explode(',',$apk['permissions']), $permissions_data, $summary);
/*if($i==0)
$divStyleDisplay='block';
else*/
$divStyleDisplay='none';
$divId='permissions'.$i;
- $out.='
view permissions
';
- $out.='
'.$permission.']Application not found
"; } - private function get_permission_protection_level_icon($protection_level) { + private function get_permission_list_string($permissions, $permissions_data, &$summary) { + $out=''; + usort($permissions, "permissions_cmp"); + $permission_group_last = ''; + foreach($permissions as $permission) { + $permission_group = $permissions_data['permission'][$permission]['permissionGroup']; + if($permission_group != $permission_group_last) { + $permission_group_label = $permissions_data['permission-group'][$permission_group]['label']; + if($permission_group_label=='') $permission_group_label = 'Extra/Custom'; + $out.=''.strtoupper($permission_group_label).''.$permission.']