Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to only share an image or video with a share extension

I want my extension support text, url, video and 10 images.

I have configured plist as below: enter image description here

This work fine but I want my extension does not support image and video at the same time.

I understand that I'll most probably have to build a "SUBQUERY(..)" statement. My predicate like this:

SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,(
     NOT ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
           AND ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie")
     ) AND (
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text")
).@count < 10
).@count == 1

But it doesn't work for me. How do I use in this case. Thanks for any help!

like image 736
Buvaty Avatar asked Nov 08 '22 23:11

Buvaty


2 Answers

You can use Parth Adroja's answer for sharing images or videos based on a particular count. In my particular case, the extension was supposed to share either 4 images or 1 video and they were mutually exclusive.

Here is what I did.

  1. The first subquery selects images of type jpeg or png up to 4 counts and checks whether the count of video(s) selected is zero.
  2. Adding a OR condition to the first subquery, we now check if only 1 video is selected and no image is selected.
  3. Adding a third sub query to support text and web urls.
<key>NSExtensionActivationRule</key>
<string>
    SUBQUERY (
      extensionItems,
      $extensionItem,
      (
        SUBQUERY (
          $extensionItem.attachments,
          $attachment,
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg" ||
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
        ).@count &lt;= 4
        AND
        SUBQUERY (
          $extensionItem.attachments,
          $attachment,
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
        ).@count == 0
      )
      OR
      (
        SUBQUERY (
          $extensionItem.attachments,
          $attachment,
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg" ||
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
        ).@count == 0
        AND
        SUBQUERY (
          $extensionItem.attachments,
          $attachment,
          ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
        ).@count == 1
      )
      OR
      (
        SUBQUERY (
         $extensionItem.attachments,
         $attachment,
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text" OR
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" OR
           ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" OR
        ).@count == 1
      )
    ).@count &gt;= 1
</string>

like image 71
Midhun Darvin Avatar answered Nov 14 '22 23:11

Midhun Darvin


Here's one I just used for myself. This only allows 1 item, either any video type or any image type. I modified an example from apple's documentation.

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" ||
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
    ).@count == 1
).@count == 1

For easy of use copying directly into the plist:

SUBQUERY (extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie" ).@count == 1).@count == 1
like image 44
dsringari Avatar answered Nov 14 '22 23:11

dsringari