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)
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,
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
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,
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,
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
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,)
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,
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,
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