--- /dev/null
+<!DOCTYPE html PUBLIC "html">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <link rel="stylesheet" type="text/css" href="tizen.css" media="screen">
+ <script type="text/javascript" src="snippet.js"></script><title>Account API</title>
+ </head>
+ <body id="page-content" onload="prettyPrint()">
+ <div class="api" id="::ServiceAdaptorClient">
+ <div class="supported-platforms"><img class="mobile-mandatory emulator" title="Mandatory, Supported by Tizen Mobile emulator" src="mw_icon.png"></div>
+ <div class="title"><h1>Service Adaptor Client API</h1></div>
+ <div class="brief">
+ The Service Adaptor Client API provides developer with common interfaces like using local service to communicate with remote storage systems.
+ Service Adaptor Client provides functions kind of Authorization, Storage ones.
+ </div>
+ <div class="description">
+ <p>
+ The basic concepts are:
+ </p>
+ <ul>
+ <li>
+ <b>Authorization plugin</b> will allow the Tizen Device users to authorize (login)
+ into 3rd party clouds or other systems. After authorize user will be able to perform
+ operation on the Tizen
+ Device to manage 3rd party storage systems files via Storage Plugin. </li>
+ <li>
+ <b>Storage plugin</b> will allow the Tizen Device users (after authorization using Authorization plugin) to see and manage
+ files stored on 3rd party storage clouds (or other storages) transparently like local files. Users will be allowed to download files from storage
+ to Tizen Device, edit these files, remove them or upload files from Tizen Device to 3rd party storages. </li>
+ </ul>
+ <p>
+ For more information about how to use Service Adaptor Client API, see <a href="../../../../../org.tizen.guides/html/web/tizen/social/service_adaptor_client_n.htm">Service Adaptor Client Guide</a>.
+ </p>
+ </div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <h2>Table of Contents</h2>
+ <ul class="toc">
+ <li>1. <a href="#typedefs-section">Type Definitions</a><ul class="toc"><li>1.1. <a href="#ServiceErrorCodes">Service Error Codes</a>
+ </li></ul>
+ </li>
+ <li>2. <a href="#interfaces-section">Interfaces</a><ul class="toc">
+ <li>2.1. <a href="#AccountManagerObject">AccountManagerObject</a>
+ </li>
+ </ul>
+ </li>
+ <li>3. <a href="#full-webidl">Full WebIDL</a>
+ </li>
+ </ul>
+ <hr>
+ <div class="typedefs" id="typedefs-section">
+ <h2>1. Global Type Definitions</h2>
+ <div class="typedef" id="ServiceErrorCodes">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceErrorCode"></a>
+ <h3>1.1 Service Error Codes</h3>
+ <div class="brief">
+ Specify error codes returned by API functionality.
+ </div>
+ <pre class="webidl prettyprint"> enum service_adaptor_error_e {"SERVICE_ADAPTOR_ERROR_NONE", "SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED",
+ "SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER", "SERVICE_ADAPTOR_ERROR_TIMED_OUT", "SERVICE_ADAPTOR_ERROR_NO_DATA",
+ "SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED", "SERVICE_ADAPTOR_ERROR_UNKNOWN", "SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE",
+ "SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED", "SERVICE_ADAPTOR_ERROR_NOT_AUTHORIZED", "SERVICE_ADAPTOR_ERROR_INVALID_STATE"
+ }; </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <ul>
+ <li>
+ SERVICE_ADAPTOR_ERROR_NONE - Success </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED - Service plugin does not support API </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER - The parameter is invalid </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_TIMED_OUT - API time out </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_NO_DATA - There is no data available </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED - Permission denied </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_UNKNOWN - Unknown error </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE - IPC Connection unstabled </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED - The error occured from Plugin, See detail from <font style="background-color: red">service_adaptor_get_last_result()</font> and Plugin SPEC </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_NOT_AUTHORIZED - Need Autholization </li>
+ <li>
+ SERVICE_ADAPTOR_ERROR_INVALID_STATE - The handle state is invalid for processing API </li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="interfaces" id="interfaces-section">
+ <h2>2. Service Adaptor API</h2>
+ <div class="brief">
+ The Service Adaptor API provides functions to manage service adaptor handle and creation of service plugin
+ </div>
+ <div class="interface" id="ServiceAdaptorAPI">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorTypesDefinition"></a>
+ <h3>2.1. Service Adaptor API Types Definition</h3>
+ <div class="interface" id ="ServiceAdaptorAPIServiceAdaptorHandle">
+ <h4>2.1.2 Service Adaptor Handle</h4>
+ <div class="brief">
+ The handle for connection and managing plugin handle of Service Adaptor. <br>
+ <font style="background-color: red">The handle can be created by service_adaptor_create(). <br>
+ When a handle is no longer needed, use service_adaptor_destroy() </font>
+
+ </div>
+ <pre class="webidl prettyprint"> typedef struct _service_adaptor_s* service_adaptor_h </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ </div>
+ <div class="interface" id ="ServiceAdaptorAPIServiceAdaptorPluginCB">
+ <h4>2.1.1 Service Adaptor Plugin Callback</h4>
+ <div class="brief">
+ Callback for <font style="background-color: red">service_adaptor_foreach_plugin()</font> API
+ </div>
+ <pre class="webidl prettyprint"> typedef bool(* service_adaptor_plugin_cb) (char *plugin_uri, int service_mask, void *user_data) </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin_uri</span>:
+ The service plugin's unique uri, this value be set by plugin
+ </li>
+ <li class="param">
+ <span class="name">service_mask</span>:
+ Masked value for installed service plugins, this value can be masked multiple enum (<font style="background-color: red">service_plugin_service_type_e</font>)
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from <font style="background-color: red">service_adaptor_foreach_plugin() </font>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="methods">
+ <h3>2.2 Methods</h3>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_create">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_create"></a>
+ <code><b><span class="methodName">service_adaptor_create</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Create Service Adaptor.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_create(service_adaptor_h *service_adaptor);
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Create Service Adaptor handle. The Service Adaptor is needed to use other functionality in this API.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">service_adaptor</span>:
+ Handle for new Service Adaptor.
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ service_adaptor must be released memory using <font style="background-color: red">service_adaptor_destroy()</font>, when a program no longer needs any function of Service Adaptor
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_adaptor_h service_adaptor = NULL;
+service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ret = service_adaptor_create(&service_adaptor);
+
+if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+{
+ some_operations();
+ service_adaptor_destroy(service_adaptor);
+}
+else
+{
+ log_error("Creating Service Adaptor failed", ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_destroy">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_destroy"></a>
+ <code><b><span class="methodName">service_adaptor_create</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Destroy Service Adaptor.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_destroy(service_adaptor_h service_adaptor);
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Destroy Service Adaptor. It must called after a program no longer needs any function of Service Adaptor.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">service_adaptor</span>:
+ Handle to Service Adaptor.
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ service_adaptor must be issued by <font style="background-color: red">service_adaptor_create() </font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_adaptor_h service_adaptor = NULL;
+service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ret = service_adaptor_create(&service_adaptor);
+
+if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+{
+ some_operations();
+ service_adaptor_destroy(service_adaptor);
+}
+else
+{
+ log_error("Creating Service Adaptor failed", ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_foreach_plugin">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_foreach_plugin"></a>
+ <code><b><span class="methodName">service_adaptor_foreach_plugin</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Foreach the list of plugins.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_foreach_plugin(service_adaptor_h service_adaptor, service_adaptor_plugin_cb callback, void * user_data);
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Foreach the list of plugins. This function will call callback function for all installed plugins.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">service_adaptor</span>:
+ The handle of Service Adaptor
+ </li>
+ <li class="param">
+ <span class="name">callback</span>:
+ The callback for foreach plugin
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data to callback
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no available plugins
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ service_adaptor must be issued by <font style="background-color: red">service_adaptor_create()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool plugin_cb(char *plugin_uri, int service_mask, void *user_data)
+{
+ do_something_with_plugin(plugin_uri, service_mask);
+ return true;
+}
+
+void process_plugins(service_adaptor_h service_adaptor)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_adaptor_foreach_plugin(service_adaptor, plugin_cb, NULL);
+
+ switch(ret)
+ {
+ case SERVICE_ADAPTOR_ERROR_NONE: return;
+ case SERVICE_ADAPTOR_ERROR_NO_DATA: log_error("There is no installed plugin"); break;
+ default: log_error("Unknown error", ret);
+ }
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_query_plugin_by_file">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_query_plugin_by_file"></a>
+ <code><b><span class="methodName">service_adaptor_query_plugin_by_file</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Retrieve an plugin URI with local file path.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_query_plugin_by_file(service_adaptor_h service_adaptor, const char *file_path, char **plugin_uri)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ For specific files that is located in cloud but be shown to such as local files (that is operated by Unified Storage System with Service Adaptor),
+ this API can find which plugin is used for that file (showing to likes local file). Please reference details to description for Unified Storage System.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">service_adaptor</span>:
+ The handle of Service Adaptor
+ </li>
+ <li class="param">
+ <span class="name">file_path</span>:
+ The local file path
+ </li>
+ <li class="param">
+ <span class="name">plugin_uri</span>:
+ The specfic string for use plugin, this values are set by plugin
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no data (also returned if given file is just local (not storage) file)
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ plugin_uri must be released using free()
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ service_adaptor must be issued by <font style="background-color: red">service_adaptor_create()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void process_files(service_adaptor_h service_adaptor, const char *file)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ char *plugin_uri = NULL;
+
+ ret = service_adaptor_query_plugin_by_file(service_adaptor, file, &plugin_uri);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ if (0 == strcmp("org.tizen.plugin.my_plugin", plugin_uri))
+ {
+ view_file(file);
+ }
+ else
+ {
+ log_warrning("File is not managed by my_plugin");
+ }
+ }
+ else
+ {
+ log_error("Error occurred", ret);
+ }
+ free(plugin_uri);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_get_last_error_message">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_get_last_error_message"></a>
+ <code><b><span class="methodName">service_adaptor_get_last_error_message</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets service specific last result error message.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_get_last_error_message(char **message)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ This function retrieves the last error code that be issued from plugin.
+ When if API function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, gets using this function.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">message</span>:
+ The error message that is defined service plugin SPEC
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no error message
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ message must be released using free()
+ Thread safe functions
+ The result string's detail specification is defined service plugin or provider.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ret = do_some_operations_on_plugin();
+
+if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+{
+ return;
+}
+else if (SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED == ret)
+{
+ char *message = NULL;
+ if (SERVICE_ADAPTOR_ERROR_NONE == service_adaptor_get_last_error_message(&message);
+ {
+ show_plugin_message(message);
+ free(message);
+ }
+}
+else
+{
+ log_error("Unknown error", ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_get_last_result">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServiceAdaptorAPI::service_adaptor_get_last_result"></a>
+ <code><b><span class="methodName">service_adaptor_get_last_result</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets service specific last result.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_get_last_result(int *err)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ This function retrieves the last error code that be issued from plugin.
+ When if API function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, gets using this function.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">err</span>:
+ The error number that is defined service plugin SPEC
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no error message
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ Thread safe functions
+ The result number's detail specification is defined service plugin or provider.
+ The detail error message can be got using <font style="background-color: red">service_adaptor_get_last_error_message()</font>
+
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ret = do_some_operations_on_plugin();
+
+if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+{
+ return;
+}
+else if (SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED == ret)
+{
+ int err_msg = 0;
+ if (SERVICE_ADAPTOR_ERROR_NONE == service_adaptor_get_last_result(&err_msg);
+ {
+ handle_plugin_error(err_msg);
+ }
+}
+else
+{
+ log_error("Unknown error", ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ </div>
+
+ <h2>3. Service Plugin API</h2>
+ <div class="brief">
+ The Service Plugin API provides functions to manage the plugin set’s property and state.
+ </div>
+ <div class="interface" id="ServicePluginAPI">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginTypesDefinition"></a>
+ <h3>3.1. Service Plugin API Types Definition</h3>
+ <div class="interface" id ="ServicePluginAPIServicePluginHandle">
+ <h4>3.1.1 Service Plugin Handle</h4>
+ <div class="brief">
+ The Plugn handle for Service Adaptor. <br>
+ The handle can be created by <font style="background-color: red">service_adaptor_create_plugin()</font><br>
+ When a handle is no longer needed, use <font style="background-color: red">service_plugin_destroy()</font>
+ </div>
+ <pre class="webidl prettyprint"> struct _service_plugin_s* service_plugin_h </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ </div>
+ <div class="interface" id ="ServicePluginAPIServicePluginServiceType">
+ <h4>3.1.2 Service Plugin Service Type</h4>
+ <div class="brief">
+ Type of service in plugin.
+ </div>
+ <pre class="webidl prettyprint"> enum service_plugin_service_type_e {"SERVICE_PLUGIN_SERVICE_AUTH", "SERVICE_PLUGIN_SERVICE_STORAGE"}; </pre>
+ <div class="description">
+ <ul>
+ <li>
+ SERVICE_PLUGIN_SERVICE_AUTH - Auth service type flag </li>
+ <li>
+ SERVICE_PLUGIN_SERVICE_STORAGE - Storage service type flag </li>
+ </ul>
+ </div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ </div>
+ <div class="interface" id ="ServicePluginAPIServicePluginMacros">
+ <h4>3.1.3 Service Plugin API Macros</h4>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::SERVICE_PLUGIN_PROPERTY_APP_KEY">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::SERVICE_PLUGIN_PROPERTY_APP_KEY"></a>
+ <code><b><span class="methodName">SERVICE_PLUGIN_PROPERTY_APP_KEY</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Definition for the service_plugin property Application Key
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">#define SERVICE_PLUGIN_PROPERTY_APP_KEY "http://tizen.org/service-adaptor/plugin/property/app_key"
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Definition for the service_plugin property: The application id be issued from service provider for 3<sup>rd</sup> party developer
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::SERVICE_PLUGIN_PROPERTY_APP_SECRET">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::SERVICE_PLUGIN_PROPERTY_APP_SECRET"></a>
+ <code><b><span class="methodName">SERVICE_PLUGIN_PROPERTY_APP_SECRET</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Definition for the service_plugin property Application Secret
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">#define SERVICE_PLUGIN_PROPERTY_APP_SECRET "http://tizen.org/service-adaptor/plugin/property/app_secret"
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Definition for the service_plugin property: The application password be issued from service provider for 3<sup>rd</sup> party developer
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::SERVICE_PLUGIN_PROPERTY_USER_ID">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::SERVICE_PLUGIN_PROPERTY_USER_ID"></a>
+ <code><b><span class="methodName">SERVICE_PLUGIN_PROPERTY_USER_ID</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Definition for the service_plugin property User ID
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">#define SERVICE_PLUGIN_PROPERTY_APP_SECRET "http://tizen.org/service-adaptor/plugin/property/app_secret"
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Definition for the service_plugin property: The user id for using specific service provider for 3<sup>rd</sup> party developer
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ </dd>
+ </dl>
+ </div>
+ </div>
+ <div class="methods">
+ <h3>3.2 Methods</h3>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_adaptor_create_plugin">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_adaptor_create_plugin"></a>
+ <code><b><span class="methodName">service_adaptor_create_plugin</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Create service plugin handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_adaptor_create_plugin(service_adaptor_h service_adaptor, const char *plugin_uri, service_plugin_h *plugin);
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Create service plugin handle using plugin_uri
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">service_adaptor</span>:
+ The handle of Service Adaptor
+ </li>
+ <li class="param">
+ <span class="name">plugin_uri</span>:
+ The specific string for use plugin, this values are set by plugin
+ </li>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs.
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ plugin must be released memory using <font style="background-color: red">service_plugin_destroy()</font> when you no longer needs plugin's
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_adaptor_h service_adaptor = NULL;
+service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ret = service_adaptor_create(&service_adaptor);
+
+if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+{
+ service_plugin_h plugin = NULL;
+ const char *plugin_uri = "org.tizen.plugin.my_plugin";
+
+ ret = service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ do_something();
+ service_plugin_destroy(plugin);
+ }
+ else
+ {
+ log_error("Creating plugin failed", ret);
+ }
+ service_adaptor_destroy(service_adaptor);
+}
+else
+{
+ log_error("Creating Service Adaptor failed", ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_add_property">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_add_property"></a>
+ <code><b><span class="methodName">service_plugin_add_property </span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Add Plugin Property.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_add_property(service_plugin_h plugin, const char *key, const char *value)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Add Plugin Property.
+ The plguin property is used for plugin's basic or optional requirement. <br>
+ This value is not used in Adaptor layer, but it can be uesd to important Key for plugin with service provider.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">key</span>:
+ The key of plugin property defined in <font style="background-color: red">3.1.3 Service Plugin API Macros</font>
+ </li>
+ <li class="param">
+ <span class="name">value</span>:
+ The value of plugin property that matched key
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ Some kind of property key(Not mandatory) is defined in this API (That is named to SERVICE_PLUGIN_PROPERTY_XXX) <br>
+ If the key already exists in the property its current value is replaced with the new value . <br>
+ plugin must be released memory using <font style="background-color: red">service_plugin_destroy()</font> when you no longer needs plugin's API
+
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void create_plugin(service_adaptor_h service_adaptor)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ service_plugin_h plugin = NULL;
+ const char *plugin_uri = "org.tizen.plugin.my_plugin";
+
+ ret = service_adaptor_create_plugin(service_adaptor, plugin_uri, &plugin);
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ service_plugin_add_property(plugin, SERVICE_PLUGIN_PROPERTY_USER_ID, "The King");
+ do_something();
+ service_plugin_destroy(plugin);
+ }
+ else
+ {
+ log_error("Creating plugin failed", ret);
+ }
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_get_property">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_get_property"></a>
+ <code><b><span class="methodName">service_plugin_get_property </span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets Plugin Property.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_get_property(service_plugin_h plugin, const char *key, char **value)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Add Plugin Property.
+ The plguin property is used for plugin's basic or optional requirement. <br>
+ This value is not used in Adaptor layer, but it can be uesd to important Key for plugin with service provider.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">key</span>:
+ The key of plugin property defined in <font style="background-color: red">3.1.3 Service Plugin API Macros</font>
+ </li>
+ <li class="param">
+ <span class="name">value</span>:
+ The value of plugin property that matched key
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no property
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ Some kind of property key(Not mandatory) is defined in this API (That is named to SERVICE_PLUGIN_PROPERTY_XXX) <br>
+ value must be released using free()
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool check_plugin(service_plugin_h service_plugin)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ char *value = NULL;
+
+ ret = service_plugin_get_property(plugin, SERVICE_PLUGIN_PROPERTY_USER_ID, &value);
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ bool retVal = check_user(value);
+
+ free(value);
+ return retVal;
+ }
+ else
+ {
+ log_error("Creating plugin failed", ret);
+ }
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_remove_property">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_remove_property"></a>
+ <code><b><span class="methodName">service_plugin_remove_property</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Remove Plugin Property
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_remove_property(service_plugin_h plugin, const char *key)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Remove property that has been added before from plugin.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">key</span>:
+ The key of plugin property defined in <font style="background-color: red">3.1.3 Service Plugin API Macros</font>
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ Some kind of property key (not mandatory) is defined in this API (That is named to SERVICE_PLUGIN_PROPERTY_XXX)
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ The function property already set by <font style="background-color: red">service_adaptor_set_plugin_property()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool reset_plugin(service_plugin_h service_plugin)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_plugin_remove_property(plugin, SERVICE_PLUGIN_PROPERTY_USER_ID);
+ return (SERVICE_ADAPTOR_ERROR_NONE == ret);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_start">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_start"></a>
+ <code><b><span class="methodName">service_plugin_start</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Requests start initialization for service plugin.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_start (service_plugin_h plugin, int service_mask)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Requests start initialization for service plugin. After start is done plugin is operational and plugin functionality can be used.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">service_mask</span>:
+ The flag for use service plugins, this flag can be masked multiple enum (<font style="background-color: red">service_plugin_service_type_e</font>)
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER</span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_AUTHORIZED</span>
+ Need authorization
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT</span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ service_mask must be input using 'bit or' operation with <font style="background-color: red">service_plugin_service_type_e</font>
+ - for example,<br>
+ int service_mask |= SERVIE_PLUGIN_SERVICE_AUTH;<br>
+ service_mask |= SERVICE_PLUGIN_SERVICE_STORAGE; <br>
+ int ret = service_plugin_start(m_plugin , service_mask ); <br>
+ If a program needs to stop plugin manually, use <font style="background-color: red">service_plugin_stop()</font>.
+ But in <font style="background-color: red">service_plugin_destroy()</font>, automatically stop service plugin
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_plugin_h service_plugin = NULL;
+
+create_service_plugin(&service_plugin);
+add_properties_to_plugin(service_plugin);
+
+int mask = SERVIE_PLUGIN_SERVICE_AUTH;
+
+service_plugin_start(service_plugin, mask);
+do_something();
+
+service_plugin_destroy(service_plugin);
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_stop">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_stop"></a>
+ <code><b><span class="methodName">service_plugin_stop</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Requests stop manually for service plugin.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_stop(service_plugin_h plugin)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Requests stop manually for service plugin. This operation could be perform e.g. to change plugin state and start it again.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER</span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT</span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN</span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If a program needs to stop plugin manually, use this function.
+ But in <font style="background-color: red">service_plugin_destroy()</font>, automatically stop service plugin
+ plugin must be released memory using <font style="background-color: red">service_plugin_destroy()</font> when you no longer needs plugin's API
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_plugin_h service_plugin = NULL;
+
+create_service_plugin(&service_plugin);
+add_properties_to_plugin(service_plugin);
+
+int mask = SERVIE_PLUGIN_SERVICE_AUTH;
+
+service_plugin_start(service_plugin, mask);
+
+do_something();
+
+service_plugin_stop(service_plugin);
+service_plugin_change_to_annother_user_id(service_plugin);
+service_plugin_start(service_plugin, mask);
+
+do_something(); //do the same with another user id
+
+service_plugin_destroy(service_plugin);
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_plugin_destroy">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_plugin_destroy"></a>
+ <code><b><span class="methodName">service_plugin_destroy</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Stop and destroy Service Plugin.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_plugin_destroy(service_plugin_h plugin)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <p>
+ Requests stop (if not already stopped) and destroy Service Plugin.<br>
+ It must called after a program no longer needs APIs of specific plugin.
+ </p>
+ </div>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin</span>:
+ The handle for use Plugin APIs
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER</span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN</span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Precondition</span></p>
+ plugin must be issued by <font style="background-color: red">service_adaptor_create_plugin()</font>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">service_plugin_h service_plugin = NULL;
+
+create_service_plugin(&service_plugin);
+add_properties_to_plugin(service_plugin);
+
+int mask = SERVIE_PLUGIN_SERVICE_AUTH;
+
+service_plugin_start(service_plugin, mask);
+do_something();
+
+service_plugin_destroy(service_plugin);
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ </div>
+
+ <h2>4. Storage API</h2>
+ <div class="brief">
+ Storage API provide functions for access and managing storage service.
+ </div>
+ <div class="interface" id="StorageAPI">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::StorageTypesDefinition"></a>
+ <h3>4.1. Storage API Types Definition</h3>
+ <div class="interface" id ="StorageAPIFileCallback">
+
+ <h4>4.1.1 Service storage file</h4>
+ <div class="brief">
+ The handle of file or directory in storage.
+ </div>
+ <pre class="webidl prettyprint"> struct _service_storage_file_s* service_storage_file_h</pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+
+ <h4>4.1.2 Service storage file list</h4>
+ <div class="brief">
+ The list handle of file or directory in storage.
+ </div>
+ <pre class="webidl prettyprint"> struct _service_storage_file_list_s* service_storage_file_list_h</pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+
+ <h4>4.1.3 Service storage task</h4>
+ <div class="brief">
+ The handle of async task for storage service.
+ </div>
+ <pre class="webidl prettyprint"> struct _service_storage_task_s* service_storage_task_h</pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+
+ <h4>4.1.4 Service storage task state</h4>
+ <div class="brief">
+ The handle of async task for storage service.
+ </div>
+ <pre class="webidl prettyprint"> enum service_storage_task_state_e={"SERVICE_STORAGE_TASK_IN_PROGRESS", "SERVICE_STORAGE_TASK_COMPLETED",
+ "SERVICE_STORAGE_TASK_CANCELED", "SERVICE_STORAGE_TASK_FAILED"};
+ </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="description">
+ <ul>
+ <li>
+ SERVICE_STORAGE_TASK_IN_PROGRESS - The task is progressing </li>
+ <li>
+ SERVICE_STORAGE_TASK_COMPLETED - The task was completed </li>
+ <li>
+ SERVICE_STORAGE_TASK_CANCELED - The task was canceled </li>
+ <li>
+ SERVICE_STORAGE_TASK_FAILED - The task was failed </li>
+
+ </ul>
+ </div>
+
+ <h4>4.1.5 Service storage file callback</h4>
+ <div class="brief">
+ Callback for <font style="background-color: red">service_storage_file_list_foreach_file()</font> API
+ </div>
+ <pre class="webidl prettyprint"> typedef bool(*service_storage_file_cb)(service_storage_file_h file, void *user_data) </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The handle of file
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from <font style="background-color: red">service_storage_file_list_foreach_file()</font>
+ </li>
+ </ul>
+ </div>
+
+ <h4>4.1.6 Service storage file list callback</h4>
+ <div class="brief">
+ Callback for <font style="background-color: red">service_storage_get_file_list()</font> API
+ </div>
+ <pre class="webidl prettyprint"> void(* service_storage_file_list_cb)(int result, service_storage_file_list_h list, void *user_data) </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">result</span>:
+ Result code for <font style="background-color: red">service_storage_get_file_list() (see service_adaptor_error_e)</font>
+ <p><span class="return">Possible value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no files
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT </span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED </span>
+ Failed in Plugin internal. <br>
+ Error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result() and service_adaptor_get_last_error_message()</font> method. <br>
+ Error codes and messages are described in Service Plugin.
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN</span>
+ Unknown error
+ </li>
+ </ul>
+ </li>
+ <li class="param">
+ <span class="name">list</span>:
+ The handle of file list
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from <font style="background-color: red">service_storage_get_file_list()</font>
+ </li>
+ </ul>
+ </div>
+
+ <h4>4.1.7 Service storage result callback</h4>
+ <div class="brief">
+ Callback for getting async storage operation result.
+ </div>
+ <pre class="webidl prettyprint"> void(* service_storage_result_cb)(int result, void *user_data) </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">result</span>:
+ Result code for storage async operation <font style="background-color: red">(see service_adaptor_error_e)</font>
+ <p><span class="return">Possible value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no files
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT </span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED </span>
+ Failed in Plugin internal. <br>
+ Error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result() and service_adaptor_get_last_error_message()</font> method. <br>
+ Error codes and messages are described in Service Plugin.
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN</span>
+ Unknown error
+ </li>
+ </ul>
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from request function
+ </li>
+ </ul>
+ </div>
+
+ <h4>4.1.8 Service storage task progress callback</h4>
+ <div class="brief">
+ Callback for progress of storage task
+ </div>
+ <pre class="webidl prettyprint"> void(* service_storage_task_progress_cb)(unsigned long long progress, unsigned long long total, void *user_data) </pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">progress</span>:
+ The progressed amount of storage task
+ </li>
+ <li class="param">
+ <span class="name">total</span>:
+ The total amount of storage task
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from <font style="background-color: red">service_storage_set_task_progress_cb()</font>
+ </li>
+ </ul>
+ </div>
+
+ <h4>4.1.9 Service storage task state callback</h4>
+ <div class="brief">
+ Callback for changing state of storage task.
+ </div>
+ <pre class="webidl prettyprint"> void(* service_storage_task_state_cb)(service_storage_task_state_e state, void *user_data)</pre>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">state</span>:
+ The state of storage task
+ </li>
+ <li class="param">
+ <span class="name">user_data</span>:
+ Passed data from <font style="background-color: red">service_storage_set_task_state_changed_cb()</font>
+ </li>
+ </ul>
+ </div>
+
+
+
+ </div>
+ </div>
+
+ <div class="methods">
+ <h3>4.2 Methods</h3>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_cancel_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_cancel_task"></a>
+ <code><b><span class="methodName">service_storage_cancel_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Cancels storage task, asynchronously.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_cancel_task(service_storage_task_h task);
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task</span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED</span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ task must be released memory using <font style="background-color: red">service_storage_destroy_task()</font> when the task no longer run <br>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ Error codes and messages are described in Service Plugin.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void cancel_task(service_storage_task_h task)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_cancel_task(task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ service_storage_destroy_task(task);
+ }
+ else
+ {
+ log_error("Cannot cancel task", ret);
+ }
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_create_download_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_create_download_task"></a>
+ <code><b><span class="methodName">service_storage_create_download_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Creates storage task for download file from storage.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_create_download_task(service_plugin_h plugin, const char *storage_path, const char *download_path, service_storage_task_h *task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span></p>
+ <ul>
+ <li> http://tizen.org/privilege/mediastorage
+ </li>
+ <li> http://tizen.org/privilege/externalstorage
+ </li>
+ </ul>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin </span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">storage_path </span>:
+ The source file path in storage (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">download_path </span>:
+ The source file path in storage (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">task</span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED </span>
+ Permission denied
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_STATE </span>
+ The handle's state is invalid
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no files
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT</span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED</span>
+ Not supported API in this plugin
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED</span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ task must be released memory using service_storage_destroy_task() when the task no longer run <br>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+ const char *storage_path = "/my_file.txt";
+ const char *download_path = "/";
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_create_download_task(plugin, storage_path, download_path, task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ ret = service_storage_start_task(task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ return true;
+ }
+ else
+ {
+ log_error("Cannot start task", ret);
+ service_storage_destroy_task(task);
+ }
+ }
+ else
+ {
+ log_error("Cannot create task", ret);
+ }
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_create_download_thumbnail_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_create_download_thumbnail_task"></a>
+ <code><b><span class="methodName">service_storage_create_download_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Creates storage task for download thumbnail from storage.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_create_download_thumbnail_task(service_plugin_h plugin, const char *storage_path, const char *download_path, int thumbnail_size, service_storage_task_h *task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span></p>
+ <ul>
+ <li> http://tizen.org/privilege/mediastorage
+ </li>
+ <li> http://tizen.org/privilege/externalstorage
+ </li>
+ </ul>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin </span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">storage_path </span>:
+ The source file path in storage (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">download_path </span>:
+ The source file path in storage (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">thumbnail_size</span>:
+ The size level of thumbnail, the level is defined service plugin SPEC
+ </li>
+ <li class="param">
+ <span class="name">task</span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED </span>
+ Permission denied
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_STATE </span>
+ The handle's state is invalid
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no files
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT</span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED</span>
+ Not supported API in this plugin
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED</span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If thumbnail_size is 0 , gets default size thumbnail, the default size must be defined plugin SPEC <br>
+ If thumbnail_size is -1 , gets minimum size thumbnail be supported plugin <br>
+ If thumbnail_size is -2 , gets maximum size thumbnail be supported plugin <br>
+ task must be released memory using <font style="background-color: red">service_storage_destroy_task()</font> when the task no longer run <br>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool download_thumbnail(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+ const char *storage_path = "/my_file.png";
+ const char *download_path = "/.thumbnails/";
+ int size = -1;
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_create_download_task(plugin, storage_path, download_path, size, task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ ret = service_storage_start_task(task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ return true;
+ }
+ else
+ {
+ log_error("Cannot start task", ret);
+ service_storage_destroy_task(task);
+ }
+ }
+ else
+ {
+ log_error("Cannot create task", ret);
+ }
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_create_upload_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_create_upload_task"></a>
+ <code><b><span class="methodName">service_storage_create_upload_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Creates storage task for upload file to storage
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_create_upload_task(service_plugin_h plugin, const char *file_path, const char *upload_path, service_storage_task_h *task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span></p>
+ <ul>
+ <li> http://tizen.org/privilege/mediastorage
+ </li>
+ <li> http://tizen.org/privilege/externalstorage
+ </li>
+ </ul>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin </span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">file_path </span>:
+ The upload file path in local (Logical path)
+ </li>
+ <li class="param">
+ <span class="name">upload_path </span>:
+ The upload target path in storage (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">task</span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED </span>
+ Permission denied
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_STATE </span>
+ The handle's state is invalid
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no files
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_TIMED_OUT</span>
+ Timed out
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED</span>
+ Not supported API in this plugin
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED</span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ task must be released memory using <font style="background-color: red">service_storage_destroy_task()</font> when the task no longer run <br>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool upload(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+ const char *upload_path = "/my_file.png";
+ const char *upload_path = "/";
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_create_upload_task (plugin, upload_path, upload_path, task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ ret = service_storage_start_task(task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ return true;
+ }
+ else
+ {
+ log_error("Cannot start task", ret);
+ service_storage_destroy_task(task);
+ }
+ }
+ else
+ {
+ log_error("Cannot create task", ret);
+ }
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_destroy_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_destroy_task"></a>
+ <code><b><span class="methodName">service_storage_destroy_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Destroys storage task.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_destroy_task(service_storage_task_h task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task</span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED</span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool upload(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+ const char *upload_path = "/my_file.png";
+ const char *upload_path = "/";
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_create_upload_task (plugin, upload_path, upload_path, task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ ret = service_storage_start_task(task);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ return true;
+ }
+ else
+ {
+ log_error("Cannot start task", ret);
+ service_storage_destroy_task(task);
+ }
+ }
+ else
+ {
+ log_error("Cannot create task", ret);
+ }
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_clone">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_clone"></a>
+ <code><b><span class="methodName">service_storage_file_clone</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Clones the file handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_clone(service_storage_file_h src_file, service_storage_file_h *dst_file)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">src_file</span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">dst_file</span>:
+ The destination handle
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ file must be released memory using <font style="background-color: red">service_storage_file_destroy()</font> when you no longer needs this handle
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool storage_file_cb(service_storage_file_h file, void *user_data)
+{
+ bool isDir = false;
+ service_storage_file_is_dir(file, &isDir);
+ if (!isDir)
+ {
+ service_storage_file_h copy = NULL;
+ service_storage_file_clone(file, ©);
+ do_something(copy);
+ service_storage_file_destroy(copy);
+ }
+ return true;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_destroy">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_destroy"></a>
+ <code><b><span class="methodName">service_storage_file_destroy</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Clones the file handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_destroy(service_storage_file_h file)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The handle of file or directory in storage
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool storage_file_cb(service_storage_file_h file, void *user_data)
+{
+ bool isDir = false;
+ service_storage_file_is_dir(file, &isDir);
+ if (!isDir)
+ {
+ service_storage_file_h copy = NULL;
+ service_storage_file_clone(file, ©);
+ do_something(copy);
+ service_storage_file_destroy(copy);
+ }
+ return true;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_get_logical_path">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_get_logical_path"></a>
+ <code><b><span class="methodName">service_storage_file_get_logical_path</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets logical path from file handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_get_logical_path(service_storage_file_h file, char **path)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">path</span>:
+ The logical path of file
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no data
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ path must be released with free() function
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool get_file_path(service_storage_file_h file, char **path)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ char *_path = NULL;
+
+ ret = service_storage_file_get_logical_path(file, &_path);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ *path = _path;
+ return true;
+ }
+ else
+ {
+ log_error("Cannot get logical path", ret);
+ }
+
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_get_physical_path">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_get_physical_path"></a>
+ <code><b><span class="methodName">service_storage_file_get_physical_path</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets physical path from file handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_get_physical_path(service_storage_file_h file, char **path)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">path</span>:
+ The physical path of file
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no data
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ path must be released with free() function
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool get_file_physical_path(service_storage_file_h file, char **path)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ char *_path = NULL;
+
+ ret = service_storage_file_get_physical_path(file, &_path);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ *path = _path;
+ return true;
+ }
+ else
+ {
+ log_error("Cannot get logical path", ret);
+ }
+
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_get_size">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_get_size"></a>
+ <code><b><span class="methodName">service_storage_file_get_size</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets size of a file.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_get_size(service_storage_file_h file, unsigned long long *size)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">size</span>:
+ The size of file (byte)
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool get_file_size(service_storage_file_h file, unsigned long long **size)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ unsigned long long _size = -1;
+
+ ret = service_storage_file_get_size(file, &_size);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ *size = _size;
+ return true;
+ }
+ else
+ {
+ log_error("Cannot get file size", ret);
+ }
+
+ return false;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_is_dir">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_is_dir"></a>
+ <code><b><span class="methodName">service_storage_file_is_dir</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets information if file handle is directory or not.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_is_dir(service_storage_file_h file, bool *is_dir)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">file</span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">is_dir</span>:
+ true on directory, false on file
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool storage_file_cb(service_storage_file_h file, void *user_data)
+{
+ bool isDir = false;
+
+ service_storage_file_is_dir(file, &isDir);
+
+
+ if (!isDir)
+ {
+ do_some_file_operations(file);
+ }
+
+ return true;
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_list_clone">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_list_clone"></a>
+ <code><b><span class="methodName">service_storage_file_list_clone</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Clones the file list handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_list_clone(service_storage_file_list_h src_list, service_storage_file_list_h *dst_list)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">src_list </span>:
+ The source handle
+ </li>
+ <li class="param">
+ <span class="name">dst_list </span>:
+ The destination handle
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ file must be released memory using <font style="background-color: red">service_storage_file_list_destroy()</font> when you no longer needs this handle
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void file_list_cb(int result, service_storage_file_list_h list, void *user_data)
+{
+ if(SERVICE_ADAPTOR_ERROR_NONE != result)
+ {
+ log_error("Cannot get file list", ret);
+ return;
+ }
+
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ service_storage_file_list_h list_copy = NULL:
+
+ ret = service_storage_file_list_clone(list, &list_copy);
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ process_files(list);
+ process_files_second_iteration(list_copy);
+
+ service_storage_file_list_destroy(list_copy);
+ }
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_list_destroy">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_list_destroy"></a>
+ <code><b><span class="methodName">service_storage_file_list_destroy</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Destroys the file list handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_list_destroy(service_storage_file_list_h list)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">list </span>:
+ The file list handle
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ It must be used for cloned file list handle
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void file_list_cb(int result, service_storage_file_list_h list, void *user_data)
+{
+ if(SERVICE_ADAPTOR_ERROR_NONE != result)
+ {
+ log_error("Cannot get file list", ret);
+ return;
+ }
+
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+ service_storage_file_list_h list_copy = NULL:
+
+ ret = service_storage_file_list_clone(list, &list_copy);
+ if (SERVICE_ADAPTOR_ERROR_NONE == ret)
+ {
+ process_files(list);
+ process_files_second_iteration(list_copy);
+
+ service_storage_file_list_destroy(list_copy);
+ }
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_list_foreach_file">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_list_foreach_file"></a>
+ <code><b><span class="methodName">service_storage_file_list_foreach_file</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Foreach All of the file from file list.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_list_foreach_file(service_storage_file_list_h list, service_storage_file_cb callback, void *user_data)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">list </span>:
+ The file list handle
+ </li>
+ <li class="param">
+ <span class="name">callback </span>:
+ The callback for foreach file
+ </li>
+ <li class="param">
+ <span class="name">user_data </span>:
+ Passed data to callback
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NO_DATA </span>
+ There is no file
+ </li>
+ </ul>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool storage_file_cb(service_storage_file_h file, void *user_data)
+{
+ bool isDir = false;
+ service_storage_file_is_dir(file, &isDir);
+ if (!isDir)
+ {
+ service_storage_file_h copy = NULL;
+ service_storage_file_clone(file, ©);
+ do_something(copy);
+ service_storage_file_destroy(copy);
+ }
+ return true;
+}
+
+void process_file_list(service_storage_file_list_h list)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_file_list_foreach_file(list, storage_file_cb, NULL);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE != ret)
+ {
+ log_error("Foreach operation failed", ret);
+ }
+}
+
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_file_list_get_length">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_file_list_get_length"></a>
+ <code><b><span class="methodName">service_storage_file_list_get_length</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets length of the file list handle.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_file_list_get_length(service_storage_file_list_h list, int *length)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">list </span>:
+ The file list handle
+ </li>
+ <li class="param">
+ <span class="name">length </span>:
+ The length of the file list handle
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">bool storage_file_cb(service_storage_file_h file, void *user_data)
+{
+ int length;
+ service_storage_file_list_get_length(file, &length);
+ if (length <= 0)
+ {
+ log_warrning("Empty file", file);
+ }
+ else
+ {
+ process_file(file);
+ }
+
+ return true;
+}
+
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_get_file_list">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_get_file_list"></a>
+ <code><b><span class="methodName">service_storage_get_file_list</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Gets file list from storage, asynchronously.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_get_file_list(service_plugin_h plugin, const char *dir_path, service_storage_file_list_cb callback, void *user_data)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin </span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">dir_path </span>:
+ The dir path (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">callback </span>:
+ The callback for getting file list
+ </li>
+ <li class="param">
+ <span class="name">user_data </span>:
+ The user data to be passed to the callback function
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED </span>
+ Permission denied
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_STATE </span>
+ The handle's state is invalid
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE </span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED </span>
+ Not supported API in this plugin
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ For the dir_path , "/" means root path.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void file_list_cb(int result, service_storage_file_list_h list, void *user_data)
+{
+ if(SERVICE_ADAPTOR_ERROR_NONE != result)
+ {
+ log_error("Cannot get file list", ret);
+ return;
+ }
+
+ process_files_list(list);
+}
+
+void process_directory(service_plugin_h plugin, const char *dir_path)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_get_file_list(plugin, dir_path, file_list_cb, NULL);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE != ret)
+ {
+ log_error("Cannot process direcory", ret);
+ }
+}
+
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_remove">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_remove"></a>
+ <code><b><span class="methodName">service_storage_remove</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Removes file or directory in storage.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_remove(service_plugin_h plugin, const char *remove_path, service_storage_result_cb callback, void *user_data)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">plugin </span>:
+ The handle for use Plugin APIs
+ </li>
+ <li class="param">
+ <span class="name">remove_path </span>:
+ The target file or directory for remove (Physical path)
+ </li>
+ <li class="param">
+ <span class="name">callback </span>:
+ The callback for getting file list
+ </li>
+ <li class="param">
+ <span class="name">user_data </span>:
+ The user data to be passed to the callback function
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PERMISSION_DENIED </span>
+ Permission denied
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_STATE </span>
+ The handle's state is invalid
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NOT_SUPPORTED </span>
+ Not supported API in this plugin
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ Error codes and messages are described in Service Plugin.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void file_list_cb(int result, service_storage_file_list_h list, void *user_data)
+{
+ if(SERVICE_ADAPTOR_ERROR_NONE != result)
+ {
+ log_error("Cannot get file list", ret);
+ return;
+ }
+
+ process_files_list(list);
+}
+
+void process_directory(service_plugin_h plugin, const char *dir_path)
+{
+ service_adaptor_error_e ret = SERVICE_ADAPTOR_ERROR_UNKNOWN;
+
+ ret = service_storage_get_file_list(plugin, dir_path, file_list_cb, NULL);
+
+ if (SERVICE_ADAPTOR_ERROR_NONE != ret)
+ {
+ log_error("Cannot process direcory", ret);
+ }
+}
+
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_set_task_progress_cb">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_set_task_progress_cb"></a>
+ <code><b><span class="methodName">service_storage_set_task_progress_cb</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Sets a callback function to be invoked when progress of the task running
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_set_task_progress_cb(service_storage_task_h task, service_storage_task_progress_cb callback, void *user_data)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task </span>:
+ The handle of storage task
+ </li>
+ <li class="param">
+ <span class="name">callback </span>:
+ The callback function to register
+ </li>
+ <li class="param">
+ <span class="name">user_data </span>:
+ The user data to be passed to the callback function
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED </span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ Error codes and messages are described in Service Plugin.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void task_progress_cb(unsigned long long progress, unsigned long long total, void *user_data)
+{
+ if (progress < total)
+ {
+ update_progress_bar(progress);
+ }
+ else
+ {
+ close_progress_bar();
+ }
+}
+
+void create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+
+ create_download_task(task);
+ set_task_properties(task);
+
+ service_storage_set_task_progress_cb(task, task_progress_cb, NULL);
+
+ start_task(task);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_set_task_state_changed_cb">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_set_task_state_changed_cb"></a>
+ <code><b><span class="methodName">service_storage_set_task_state_changed_cb</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Sets a callback function to be invoked when change of the task running state
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_set_task_state_changed_cb(service_storage_task_h task, service_storage_task_state_cb callback, void *user_data)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task </span>:
+ The handle of storage task
+ </li>
+ <li class="param">
+ <span class="name">callback </span>:
+ The callback function to register
+ </li>
+ <li class="param">
+ <span class="name">user_data </span>:
+ The user data to be passed to the callback function
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED </span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ Error codes and messages are described in Service Plugin.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void task_state_cb(service_storage_task_state_e state, void *user_data)
+{
+ if (SERVICE_STORAGE_TASK_COMPLETED == state)
+ {
+ ending_task_process();
+ }
+}
+
+void create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+
+ create_download_task(task);
+ set_task_properties(task);
+
+ service_storage_set_task_progress_cb(task, task_progress_cb, NULL);
+ service_storage_set_task_state_changed_cb(task, task_state_cb, NULL);
+
+ start_task(task);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_start_task">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_start_task"></a>
+ <code><b><span class="methodName">service_storage_start_task</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Starts storage task, asynchronously.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_start_task(service_storage_task_h task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task </span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_IPC_UNSTABLE</span>
+ IPC failed with Service Adaptor Daemon
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED </span>
+ Failed in Plugin internal
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_UNKNOWN </span>
+ Unknown error
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ If the function returns SERVICE_ADAPTOR_ERROR_PLUGIN_FAILED, error code and error message can be obtained using
+ <font style="background-color: red">service_adaptor_get_last_result()and service_adaptor_get_last_error_message() method. </font> <br>
+ Error codes and messages are described in Service Plugin.
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+
+ create_download_task(task);
+ set_task_properties(task);
+ set_task_callbacks(task);
+
+ service_storage_start_task(task);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_unset_task_progress_cb">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_unset_task_progress_cb"></a>
+ <code><b><span class="methodName">service_storage_unset_task_progress_cb</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Unsets the progress callback function.
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_unset_task_progress_cb(service_storage_task_h task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task </span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ This function must be called before starting task (see <font style="background-color: red">service_storage_start_task()</font>)
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void set_state_cb_in_task(service_storage_task_h task)
+{
+ service_storage_unset_task_progress_cb(task);
+ service_storage_set_task_progress_cb(task, task_progress_cb2, NULL);
+}
+
+void create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+
+ create_download_task(task);
+ set_task_properties(task);
+ set_progress_cb_in_task(task);
+
+ start_task(task);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="method" id="::ServiceAdaptorClient::service_storage_unset_task_state_changed_cb">
+ <a class="backward-compatibility-anchor" name="::ServiceAdaptorClient::ServicePluginAPI::service_storage_unset_task_state_changed_cb"></a>
+ <code><b><span class="methodName">service_storage_unset_task_state_changed_cb</span></b></code>
+ </dt>
+ <dd>
+ <div class="brief">
+ Unsets the state changed callback function
+ </div>
+ <div class="synopsis"><pre class="signature prettyprint">int service_storage_unset_task_state_changed_cb(service_storage_task_h task)
+ </pre></div>
+ <p><span class="version">
+ Since: </span>
+ 2.4
+ </p>
+ <p><span class="privilegelevel">
+ Privilege level: </span>
+ Public
+ </p>
+ <div class="parameters">
+ <p><span class="param">Parameters:</span></p>
+ <ul>
+ <li class="param">
+ <span class="name">task </span>:
+ The handle of storage task
+ </li>
+ </ul>
+ </div>
+ <div class="returntype">
+ <p><span class="return">Return value:</span></p>
+ <ul>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_NONE</span>
+ Successful
+ </li>
+ <li class="returntypes">
+ <span class="name">SERVICE_ADAPTOR_ERROR_INVALID_PARAMETER </span>
+ Invalid parameter
+ </li>
+ </ul>
+ </div>
+ <div class="exception">
+ <p><span class="name">Remarks</span></p>
+ This function must be called before starting task (see <font style="background-color: red">service_storage_start_task()</font>)
+ </div>
+ <div class="example">
+ <span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">void set_state_cb_in_task(service_storage_task_h task)
+{
+ service_storage_unset_task_progress_cb(task);
+ service_storage_set_task_state_changed_cb(task, task_state_cb, NULL);
+}
+
+void create_task(service_plugin_h plugin)
+{
+ service_storage_task_h task = NULL;
+
+ create_download_task(task);
+ set_task_properties(task);
+ set_state_cb_in_task(task);
+
+ start_task(task);
+}
+ </pre>
+ </div>
+ </dd>
+ </dl>
+
+
+ </div>
+
+
+ </div>
+ </div>
+ <div id="page-footer">
+ <div class="copyright" align="center">
+ Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>. <br>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.
+ </div>
+ <script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-25976949-1']);
+ _gaq.push(['_setDomainName', 'tizen.org']);
+ _gaq.push(['_trackPageview']);
+
+ (function () {
+ var ga = document.createElement('script');
+ ga.type = 'text/javascript';
+ ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+ </div>
+ </body>
+</html>