예제 #1
0
    def add_menu_device(self, stream_type, files, cast_label, submenu, device,
                        is_short_list):
        if (is_short_list or not device):
            device_config_name = None
            cast_submenu = submenu
            playlist_allowed = self.get_playlist_allowed(stream_type)
        else:
            device_config_name = device['friendlyName']
            cast_submenu = FileManager.Menu()
            name_item = FileManager.MenuItem(name='CastToTVMenu::CastFile',
                                             label=device_config_name)
            name_item.set_submenu(cast_submenu)
            submenu.append_item(name_item)
            playlist_allowed = False
            receiver_type = self.ext_settings.get_string('receiver-type')
            if receiver_type == 'chromecast' or receiver_type == 'playercast':
                if device_config_name == self.ext_settings.get_string(
                        receiver_type + '-name'):
                    playlist_allowed = self.get_playlist_allowed(stream_type)

        cast_item = FileManager.MenuItem(name='CastToTVMenu::CastFile',
                                         label=_(cast_label))
        cast_item.connect('activate', self.cast_files_cb, files, stream_type,
                          device_config_name)
        cast_submenu.append_item(cast_item)

        if playlist_allowed:
            playlist_item = FileManager.MenuItem(
                name='CastToTVMenu::AddToPlaylist', label=_("Add to Playlist"))
            playlist_item.connect('activate', self.add_to_playlist_cb, files,
                                  stream_type)
            cast_submenu.append_item(playlist_item)

        if stream_type == 'VIDEO':
            transcode_item = FileManager.MenuItem(
                name='CastTranscodeMenu::Transcode', label=_("Transcode"))
            transcode_submenu = FileManager.Menu()
            transcode_item.set_submenu(transcode_submenu)

            video_only_item = FileManager.MenuItem(
                name='CastTranscodeMenu::Video', label=_("Video"))
            video_only_item.connect('activate', self.transcode_video_cb, files,
                                    stream_type, False, device_config_name)
            transcode_submenu.append_item(video_only_item)

            audio_only_item = FileManager.MenuItem(
                name='CastTranscodeMenu::Audio', label=_("Audio"))
            audio_only_item.connect('activate', self.transcode_audio_cb, files,
                                    stream_type, device_config_name)
            transcode_submenu.append_item(audio_only_item)

            video_audio_item = FileManager.MenuItem(
                name='CastTranscodeMenu::Video+Audio',
                label=_("Video + Audio"))
            video_audio_item.connect('activate', self.transcode_video_cb,
                                     files, stream_type, True,
                                     device_config_name)
            transcode_submenu.append_item(video_audio_item)

            cast_submenu.append_item(transcode_item)
예제 #2
0
    def create_menu_item(self, stream_type, files):
        cast_label = "Cast Selected File"

        if len(files) > 1:
            cast_label += "s"

        menu_label = self.get_menu_name()

        if not menu_label:
            return None

        top_menuitem = FileManager.MenuItem(
            name='CastToTVMenu::CastMenu',
            label=menu_label
        )

        submenu = FileManager.Menu()
        top_menuitem.set_submenu(submenu)

        sub_menuitem_1 = FileManager.MenuItem(
            name='CastToTVMenu::CastFile', label=_(cast_label)
        )
        sub_menuitem_1.connect(
            'activate', self.cast_files_cb, files, stream_type, False
        )
        submenu.append_item(sub_menuitem_1)

        if stream_type == 'VIDEO':
            sub_menuitem_2 = FileManager.MenuItem(
                name='CastTranscodeMenu::Transcode', label=_("Transcode")
            )
            submenu_2 = FileManager.Menu()
            sub_menuitem_2.set_submenu(submenu_2)

            sub_sub_menuitem_1 = FileManager.MenuItem(
                name='CastTranscodeMenu::Video', label=_("Video")
            )
            sub_sub_menuitem_1.connect(
                'activate', self.transcode_files_cb, files, stream_type, False
            )
            submenu_2.append_item(sub_sub_menuitem_1)

            sub_sub_menuitem_3 = FileManager.MenuItem(
                name='CastTranscodeMenu::Video+Audio', label=_("Video + Audio")
            )
            sub_sub_menuitem_3.connect(
                'activate', self.transcode_files_cb, files, stream_type, True
            )
            submenu_2.append_item(sub_sub_menuitem_3)

            submenu.append_item(sub_menuitem_2)

        return top_menuitem
    def get_file_items(self, window, files):

        """Ensure there are reachable devices"""
        try:
            devices = self.get_reachable_devices()
        except Exception as e:
            raise Exception("Error while getting reachable devices")

        """if there is no reacheable devices don't show this on context menu"""
        if not devices:
            return

        """Ensure that user only select files"""
        for file in files:
            if file.get_uri_scheme() != 'file' or file.is_directory() and os.path.isfile(file):
                return

        self.setup_gettext()
        """If user only select file(s) create menu and sub menu"""
        menu = Nemo.MenuItem(name='KdeConnectSendExtension::KDEConnect_Send',
                             label=_('KDEConnect - Send To'),
                             tip=_('send file(s) with kdeconnect'),
                             icon='kdeconnect')

        sub_menu = Nemo.Menu()

        menu.set_submenu(sub_menu)

        for device in devices:
            item = Nemo.MenuItem(name="KDEConnectSendExtension::Send_File_To",
                                 label=device["name"])
            item.connect('activate', self.menu_activate_cb, files, device["id"], device["name"])
            sub_menu.append_item(item)

        return menu,
    def get_file_items(self, window, files):
        if len(files) != 1:
            return

        nfile = files[0]

        if nfile.is_directory():
            return

        if nfile.get_mime_type().split("/")[0] != "image":
            return

        menu = FileManager.MenuItem(name="SearchByImageExtension::Engines",
                                    label="Search by image")

        submenu = FileManager.Menu()
        menu.set_submenu(submenu)
        for engine in SEARCH_URLS.keys():
            item = FileManager.MenuItem(
                name=f"SearchByImageExtension::{engine}",
                label=f"Search image on {engine}",
                tip=f"Use {engine} reverse image search on {nfile.get_name()}",
            )
            item.connect("activate", self._search_image, nfile, engine)
            submenu.append_item(item)

        return (menu, )
    def get_file_items(self, window, files):
        if len(files) != 1: #Only allow for a single folder selection
            return

        folder = files[0]
        if not folder.is_directory(): #Only allow on folders
            return

        #Get the full system path of the selected folder
        folder_uri = urllib.parse.unquote(folder.get_uri()[7:]) if PYTHON3 else urllib.unquote(folder.get_uri()[7:])
        folder_name = os.path.basename(os.path.normpath(folder_uri))

        #Prevents recursion issues
        if folder_name == META_DIR:
            return

        top_menuitem = Nemo.MenuItem(name='NemoRcloneSyncProvider::Sync',
                                     label='Sync',
                                     tip='Perform an rclone sync of this folder to a remote',
                                     icon='network-transmit-receive') #possible icons = "add", "network-transmit-receive"

        submenu = Nemo.Menu()
        top_menuitem.set_submenu(submenu)

        #Was the same folder opened again?
        #Prevents the metadata file from being read multiple times
        if folder_uri != self.last_dir:
            self.meta_object_cache = self.read_meta_file(folder_uri) #Get the sync metadata (if any) for this folder
            self.last_dir = folder_uri
        
        if "places" in self.meta_object_cache:
            places = self.meta_object_cache["places"]
            for p in places:
                #Create a new menu item for every remote path
                if ("label" in p) and ("path" in p):
                    sub_menuitem = Nemo.MenuItem(name=PLUGIN_NAME + "::Place-" + p["label"],
                                     label=p["label"],
                                     tip='Sync to this remote directory',
                                     icon='folder')

                    sub_menuitem.connect('activate', self.on_sync_requested, window, str(folder_uri), str(p["path"]), self.meta_object_cache["first_sync"])

                    submenu.append_item(sub_menuitem)

        #Append a separator
        sum_menuitem_separator = Nemo.MenuItem.new_separator(PLUGIN_NAME + "::Other_separator")
        submenu.append_item(sum_menuitem_separator)

        #Append the "other" option to the menu
        sub_menuitem = Nemo.MenuItem(name=PLUGIN_NAME + "::Other",
                                     label='Other...',
                                     tip='Choose a destination directory not listed here',
                                     icon='folder-saved-search')
        sub_menuitem.connect('activate', self.on_menu_other_activated, window, folder_uri)
        submenu.append_item(sub_menuitem)

        return top_menuitem,
예제 #6
0
    def create_menu_item(self, stream_type, files):
        cast_label = "Cast Selected File"
        if len(files) > 1:
            cast_label += "s"

        connected_devices = None
        cast_devices = []
        parsed_devices = []
        receiver_type = self.ext_settings.get_string('receiver-type')

        if not self.ws_data or not self.ws_data['isPlaying']:
            if receiver_type == 'playercast':
                connected_devices = self.get_soup_data('playercasts')
                for friendly_name in connected_devices:
                    full_name = (friendly_name.replace(' ',
                                                       '')).lower() + '.local'
                    device = {"name": full_name, "friendlyName": friendly_name}
                    parsed_devices.append(device)
            if (receiver_type == 'chromecast'
                    or receiver_type == 'playercast'):
                cast_devices = json.loads(
                    self.ext_settings.get_string(receiver_type + '-devices'))
                for device in cast_devices:
                    if ((device['name'].endswith('.local') or device['ip']) and
                        (not connected_devices
                         or device['friendlyName'] not in connected_devices)):
                        parsed_devices.append(device)

        if len(parsed_devices) > 1:
            menu_label = self.get_menu_name(False)
        else:
            menu_label = self.get_menu_name(True)

        if not menu_label:
            return None

        top_menuitem = FileManager.MenuItem(name='CastToTVMenu::CastMenu',
                                            label=menu_label)
        submenu = FileManager.Menu()
        top_menuitem.set_submenu(submenu)

        if len(parsed_devices) > 1:
            for device in parsed_devices:
                self.add_menu_device(stream_type, files, cast_label, submenu,
                                     device, False)
        else:
            self.add_menu_device(stream_type, files, cast_label, submenu, None,
                                 True)

        return top_menuitem
예제 #7
0
    def get_background_items(self, window, file):
        submenu = Nemo.Menu()
        submenu.append_item(
            Nemo.MenuItem(name='ExampleMenuProvider::Bar2',
                          label='Bar2',
                          tip='',
                          icon=''))

        menuitem = Nemo.MenuItem(name='ExampleMenuProvider::Foo2',
                                 label='Foo2',
                                 tip='',
                                 icon='')
        menuitem.set_submenu(submenu)

        return menuitem,
예제 #8
0
    def get_file_items(self, window, files):
        top_menuitem = Nemo.MenuItem(name='ExampleMenuProvider::Foo',
                                     label='Foo',
                                     tip='',
                                     icon='')

        submenu = Nemo.Menu()
        top_menuitem.set_submenu(submenu)

        sub_menuitem = Nemo.MenuItem(name='ExampleMenuProvider::Bar',
                                     label='Bar',
                                     tip='',
                                     icon='')
        submenu.append_item(sub_menuitem)

        return top_menuitem,
    def get_file_items(self, window, files):
        """Ensure there are reachable devices"""
        try:
            devices = self.get_reachable_devices()
        except Exception as e:
            raise Exception("Error while getting reachable devices")
        """if there is no reacheable devices don't show this on context menu"""
        if len(devices) == 0:
            return
        """Ensure that user only select files"""
        for file in files:
            if file.get_uri_scheme() != 'file' or file.is_directory():
                return

        self.setup_gettext()
        """If user only select file(s) create menu and sub menu"""
        menu = Nemo.MenuItem(name='SendViaExtension::SendViaKDEConnect',
                             label=_('KDEConnect Send To'),
                             tip=_('send file(s) with kdeconnect'),
                             icon='kdeconnect')

        sub_menu = Nemo.Menu()

        menu.set_submenu(sub_menu)

        for deviceId, deviceName in devices.items():
            item = Nemo.MenuItem(name='SendViaExtension::SendFileTo' +
                                 deviceId,
                                 label=deviceName)
            item.connect('activate', self.send_files, files, deviceId,
                         deviceName)
            sub_menu.append_item(item)

        if len(devices) > 1:
            item = Nemo.MenuItem(
                name='SendViaExtension::SendFileToMultipleDevices',
                label='Multiple Devices')
            item.connect('activate', self.send_to_multiple_devices, files)

            sub_menu.append_item(item)

        return menu,
예제 #10
0
파일: mtg-nemo.py 프로젝트: witoreel/Mtg
class MtgActions(GObject.GObject, Nemo.MenuProvider):

    def __init__(self):
        try:
            factory = Gtk.IconFactory()
            pixbuf = GdkPixbuf.Pixbuf.new_from_file(ICONPATH)
            iconset = Gtk.IconSet.new_from_pixbuf(pixbuf)
            factory.add("mtg", iconset)
            factory.add_default()
        except: pass

    #def run(self, menu, element_1, element_2):
    #    """Runs the Meld Comparison of selected files/folders"""
    #    subprocess.call("meld %s %s &" % (element_1, element_2), shell=True)

    def meld_save(self, menu, element):
		call(['gedit', ' ', '&'])

    def get_file_items(self, window, sel_items):
        """Adds the 'Add To Audacious Playlist' menu item to the Nemo right-click menu,
           connects its 'activate' signal to the 'run' method passing the list of selected Audio items"""
		call(['gedit', ' ', '&'])
        num_paths = len(sel_items)
        if num_paths == 0: return
        uri_raw = sel_items[0].get_uri()
        if len(uri_raw) < 7: return
        element_1 = urllib.unquote(uri_raw[7:])
         
        top_menuitem = Nemo.MenuItem(name='Mtg::actions',
                                         label=_('MTG Manage'),
                                         tip=_('Tools for managing your MTG Collection'),
                                         icon='mtg')
        submenu = Nemo.Menu()
        top_menuitem.set_submenu(submenu)
        sub_menuitem_save = Nemo.MenuItem(name='Mtg::download_price',
                                              label=_('Reload prices'),
                                              tip=_('Download and show selected cards prices.'),
                                              icon='prices')
        sub_menuitem_save.connect('activate', self.meld_save, element_1)
        submenu.append_item(sub_menuitem_save)
        return top_menuitem
예제 #11
0
    def get_file_items(self, window, files):
        """Return a list of select files to be sent"""

        # Only accept regular files
        for uri in files:
            if uri.get_uri_scheme() != 'file' or uri.is_directory():
                return ()

        # Enumerate capable devices
        devices = []

        for name, action_group in self.devices.values():
            if action_group.get_action_enabled('shareFile'):
                devices.append([name, action_group])

        # No capable devices; don't show menu entry
        if not devices:
            return ()

        # Context Menu Item
        menu = FileManager.MenuItem(
            name='GSConnectShareExtension::Devices',
            label=_('Send To Mobile Device')
        )

        # Context Submenu
        submenu = FileManager.Menu()
        menu.set_submenu(submenu)

        # Context Submenu Items
        for name, action_group in devices:
            item = FileManager.MenuItem(
                name='GSConnectShareExtension::Device' + name,
                label=name
            )

            item.connect('activate', self.send_files, files, action_group)

            submenu.append_item(item)

        return (menu,)
예제 #12
0
    def get_file_items(self, window, files):
        if len(files) != 1:
            return

        item = files[0]
        uri = item.get_uri()

        if uri == self.cloud_folder_uri:
            return
        if not self.valid_uri(uri):
            return

        full_path = self.uri_to_full_path(uri)
        uri = self.uri_to_path(uri)

        top_menuitem = Nemo.MenuItem.new('MEOCloudMenuProvider::MEOCloud',
                                         'MEO Cloud', '', '')

        submenu = Nemo.Menu()
        top_menuitem.set_submenu(submenu)

        link_menuitem = Nemo.MenuItem.new('MEOCloudMenuProvider::Copy',
                                          _('Copy Link'), '', '')
        link_menuitem.connect("activate", lambda w: self.share_link(uri))
        submenu.append_item(link_menuitem)

        if not os.path.isfile(full_path):
            share_menuitem = Nemo.MenuItem.new('MEOCloudMenuProvider::Share',
                                               _('Share Folder'), '', '')
            share_menuitem.connect("activate",
                                   lambda w: self.share_folder(uri))
            submenu.append_item(share_menuitem)

        browser_menuitem = Nemo.MenuItem.new('MEOCloudMenuProvider::Browser',
                                             _('Open in Browser'), '', '')
        browser_menuitem.connect("activate",
                                 lambda w: self.open_in_browser(uri))
        submenu.append_item(browser_menuitem)

        return top_menuitem,
예제 #13
0
 def attach_submenu(self, menu_node, submenu_list):
     submenu = Nemo.Menu()
     menu_node.set_submenu(submenu)
     [submenu.append_item(item) for item in submenu_list]
 def get_file_items(self, window, files):
     """ Tell nemo whether and when to show the menu """
     if len(files) != 1:
         return
     myfile = files[0]
     isfile = self.is_valid_file(myfile)
     isdrive = self.is_valid_drive(myfile)
     if not isfile and not isdrive:
         return
     menu = Nemo.Menu()
     submenu = Nemo.MenuItem(
         name='Nemo::truecrypt',
         label=gettext.dgettext('truecrypt-helper', 'VeraCrypt-Container'),
         tip=gettext.dgettext('truecrypt-helper',
                              'Treat this file as a veracrypt container'),
         icon='truecrypt')
     submenu.set_submenu(menu)
     if isfile:
         item1 = Nemo.MenuItem(
             name='Nemo::open_with_truecrypt',
             label=gettext.dgettext('truecrypt-helper', 'Open'),
             tip=gettext.dgettext(
                 'truecrypt-helper',
                 'Tries to open the file as a VeraCrypt container'))
         item1.connect('activate', self.open_activate_cb, myfile)
         item2 = Nemo.MenuItem(
             name='Nemo::check_truecrypt',
             label=gettext.dgettext('truecrypt-helper', 'Check'),
             tip=gettext.dgettext('truecrypt-helper',
                                  'Checks the container filesystem'))
         item2.connect('activate', self.check_activate_cb, myfile)
         menu.append_item(item1)
         menu.append_item(item2)
     elif isdrive:
         item1 = Nemo.MenuItem(
             name='Nemo::tc_unmount',
             label=gettext.dgettext('truecrypt-helper', 'Unmount'),
             tip=gettext.dgettext(
                 'truecrypt-helper',
                 'Unmounts the selected TrueCrypt/VeraCrypt Container'))
         item1.connect('activate', self.close_activate_cb, myfile)
         item2 = Nemo.MenuItem(
             name='Nemo::force_unmount',
             label=gettext.dgettext('truecrypt-helper', 'Force-Unmount'),
             tip=gettext.dgettext(
                 'truecrypt-helper',
                 'Forcibly Unmounts the selected TrueCrypt/VeraCrypt Container'
             ))
         item2.connect('activate', self.force_close_activate_cb, myfile)
         menu.append_item(item1)
         menu.append_item(item2)
     if myfile.get_uri_scheme() == "file":
         item = Nemo.MenuItem(
             name='Nemo::wipe_free_space',
             label=gettext.dgettext('truecrypt-helper', 'Wipe free space'),
             tip=gettext.dgettext(
                 'truecrypt-helper',
                 'Overwrites free space on the current location'))
         item.connect('activate', self.wipe_activate_cb, myfile)
         return item, submenu,
     else:
         return submenu,
예제 #15
0
 def get_file_items(self, window, sel_items):
     """Adds the 'Replace in Filenames' menu item to the File Manager
     right-click menu, connects its 'activate' signal to the 'run' method
     passing the selected Directory/File"""
     if tools.all_files_are_pdf(sel_items):
         top_menuitem = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-pdf-tools',
             label=_('Pdf Tools'),
             tip=_('Tools to manipulate pdf files'),
             icon='Gtk-find-and-replace')
         #
         submenu = FileManager.Menu()
         top_menuitem.set_submenu(submenu)
         sub_menus = []
         items = [
             ('01', _('Rotate and flip'), _('rotate_and_flip pdf files'),
              'rotate'),
             ('02', _('Watermark'), _('Watermark pdffiles'), 'watermark'),
             ('03', _('Textmark'), _('Textmark pdf files'), 'textmark'),
             ('04', _('Paginate'), _('Paginate pdf files'), 'paginate'),
             ('05', _('Rotate pages'),
              _('Rotate pages of the document files'), 'rotate pages'),
             ('06', _('Remove pages'),
              _('Remove pages of the document files'), 'remove pages'),
             ('07', _('Extract pages'),
              _('Extract pages of the document files'), 'extract pages'),
             ('08', _('Join pdf files'),
              _('Join pdf files in one document'), 'join'),
             ('09', _('Split pdf files'),
              _('Split a pdf in several documents'), 'split'),
             ('10', _('Combine pdf pages'),
              _('Combine pdf pages in one page'), 'combine'),
             ('11', _('Reduce pdf size'), _('Reduce pdf size'), 'reduce'),
             ('12', _('Resize pdf pages'), _('Resize pdf pages'), 'resize'),
             ('13', _('Convert pdf to png'),
              _('Convert pdf file to png image'), 'convert2png'),
         ]
         for item in items:
             sub_menuitem = FileManager.MenuItem(
                 name='PdfToolsMenuProvider::Gtk-pdf-tools-' + item[0],
                 label=item[1],
                 tip=item[2])
             sub_menuitem.connect('activate', self.doit, item[3], sel_items)
             submenu.append_item(sub_menuitem)
         #
         sub_menuitem_98 = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-None', label=SEPARATOR)
         submenu.append_item(sub_menuitem_98)
         #
         sub_menuitem_99 = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-pdf-tools-99',
             label=_('About'),
             tip=_('About'),
             icon='Gtk-find-and-replace')
         sub_menuitem_99.connect('activate', self.about)
         submenu.append_item(sub_menuitem_99)
         #
         return top_menuitem,
     elif tools.all_files_are_images(sel_items):
         top_menuitem = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-pdf-tools',
             label=_('Pdf Tools'),
             tip=_('Tools to manipulate pdf files'),
             icon='Gtk-find-and-replace')
         submenu = FileManager.Menu()
         top_menuitem.set_submenu(submenu)
         sub_menus = []
         items = [('51', _('Convert to pdf'), _('Convert images to pdf'),
                   'convert2pdf')]
         for item in items:
             sub_menuitem = FileManager.MenuItem(
                 name='PdfToolsMenuProvider::Gtk-pdf-tools-' + item[0],
                 label=item[1],
                 tip=item[2])
             sub_menuitem.connect('activate', self.doit, item[3], sel_items)
             submenu.append_item(sub_menuitem)
         #
         sub_menuitem_98 = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-None', label=SEPARATOR)
         submenu.append_item(sub_menuitem_98)
         #
         sub_menuitem_99 = FileManager.MenuItem(
             name='PdfToolsMenuProvider::Gtk-pdf-tools-99',
             label=_('About'),
             tip=_('About'),
             icon='Gtk-find-and-replace')
         sub_menuitem_99.connect('activate', self.about)
         submenu.append_item(sub_menuitem_99)
         #
         return top_menuitem,
     return