#include "DADialog.h"
#include "DAAgent.h"
#include "DAMain.h"
#include <xpc/private.h>
#include <os/log.h>
static void __DADialogShow( CFMutableArrayRef diskinfoarray, _DAAgentAction action )
{
xpc_object_t message;
message = xpc_dictionary_create( NULL, NULL, 0 );
if ( message )
{
xpc_connection_t connection;
connection = xpc_connection_create_mach_service( _kDAAgentName, NULL, 0 );
if ( connection )
{
xpc_dictionary_set_uint64( message, _kDAAgentActionKey, action );
xpc_object_t array = xpc_array_create( NULL, 0 );
int count;
CFIndex index;
count = CFArrayGetCount( diskinfoarray );
for ( index = 0; index < count; index++ )
{
xpc_object_t dict = xpc_dictionary_create( NULL, NULL, 0 );
CFDataRef serialization = CFArrayGetValueAtIndex( diskinfoarray, index );
xpc_dictionary_set_data( dict, _kDAAgentDiskKey, CFDataGetBytePtr( serialization ), CFDataGetLength( serialization ) );
xpc_array_append_value(array, dict);
xpc_release(dict);
}
CFArrayRemoveAllValues( diskinfoarray );
xpc_dictionary_set_value(message, _kDAAgentDiskKey, array);
xpc_release(array);
xpc_connection_set_event_handler( connection, ^( xpc_object_t object ) { } );
xpc_connection_set_target_uid( connection, gDAConsoleUserUID );
xpc_connection_resume( connection );
xpc_connection_send_message( connection, message );
xpc_release( connection );
}
xpc_release( message );
}
}
void DADialogShowDeviceRemoval( CFMutableArrayRef diskinfoarray )
{
__DADialogShow( diskinfoarray, _kDAAgentActionShowDeviceRemoval );
}
void DADialogShowDeviceUnreadable( DADiskRef disk )
{
CFMutableArrayRef diskInfoArray = CFArrayCreateMutable( kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks );
CFDataRef serialization = DADiskGetSerialization( disk );
CFArrayAppendValue( diskInfoArray, serialization );
__DADialogShow( diskInfoArray, _kDAAgentActionShowDeviceUnreadable );
CFRelease( diskInfoArray );
}
void DADialogShowDeviceUnrepairable( DADiskRef disk )
{
CFMutableArrayRef diskInfoArray = CFArrayCreateMutable( kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks );
CFDataRef serialization = DADiskGetSerialization( disk );
CFArrayAppendValue( diskInfoArray, serialization );
__DADialogShow( diskInfoArray, _kDAAgentActionShowDeviceUnrepairable );
CFRelease( diskInfoArray );
}