WIP: Implement Installed Apps Widget and AFC2 file explorer

- Added InstalledAppsWidget for displaying installed applications on the device.
- Created AppTabWidget for individual app representation with icon and details.
- Integrated fetching of app icons from Apple and displaying them in the widget.
- Implemented search functionality to filter installed apps.
- Added functionality to manage favorite places in SettingsManager.
- Introduced methods to save, remove, and retrieve favorite places with proper cleanup of invalid entries.
- Enhanced UI with responsive design and improved user interaction.
- Added support for AFC2 and improved file exploration capabilities.
This commit is contained in:
uncor3
2025-09-27 20:27:22 +00:00
parent 3b9df7577b
commit b4379505c7
16 changed files with 1538 additions and 134 deletions
+16 -2
View File
@@ -209,7 +209,6 @@ DeviceInfo fullDeviceInfo(const pugi::xml_document &doc,
/*BatteryInfo*/
plist_t diagnostics = nullptr;
get_battery_info(rawProductType, result.device, d.is_iPhone, diagnostics);
plist_print(diagnostics);
if (!diagnostics) {
qDebug() << "Failed to get diagnostics plist.";
@@ -266,7 +265,7 @@ DeviceInfo fullDeviceInfo(const pugi::xml_document &doc,
}
}
// TODO: need to handle errors and free resources properly
// TODO: IDescriptorInitDeviceResult
IDescriptorInitDeviceResult init_idescriptor_device(const char *udid)
{
// TODO:on a broken usb cable this can hang for a long time
@@ -281,6 +280,7 @@ IDescriptorInitDeviceResult init_idescriptor_device(const char *udid)
lockdownd_error_t ldret = LOCKDOWN_E_UNKNOWN_ERROR;
lockdownd_service_descriptor_t lockdownService = nullptr;
afc_client_t afcClient = nullptr;
afc_client_t afc2Client = nullptr;
try {
idevice_error_t ret = idevice_new_with_options(&result.device, udid,
IDEVICE_LOOKUP_USBMUX);
@@ -323,6 +323,20 @@ IDescriptorInitDeviceResult init_idescriptor_device(const char *udid)
return result;
}
try {
afc_error_t err = AFC_E_UNKNOWN_ERROR;
if ((err = afc2_client_new(result.device, &afc2Client)) !=
AFC_E_SUCCESS) {
qDebug() << "AFC2 client not available." << "Error:" << err;
} else {
result.afc2Client = afc2Client;
qDebug() << "AFC2 client created successfully.";
}
} catch (const std::exception &e) {
/* Fine! This only works on Jailbroken and AFC2 tweak installed
* devices */
}
pugi::xml_document infoXml;
get_device_info_xml(udid, 0, 0, infoXml, client, result.device);