mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-21 20:45:51 +03:00
overlayIcons: First version of the nautilus overlay python module
This commit is contained in:
parent
abf0f90a13
commit
14a5ff6747
1 changed files with 83 additions and 0 deletions
83
shell_integration/nautilus/ownCloud.py
Normal file
83
shell_integration/nautilus/ownCloud.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
import os
|
||||
import urllib
|
||||
import socket
|
||||
|
||||
from gi.repository import GObject, Nautilus
|
||||
|
||||
class ownCloudExtension(GObject.GObject, Nautilus.ColumnProvider, Nautilus.InfoProvider):
|
||||
|
||||
nautilusVFSFile_table = {}
|
||||
|
||||
def __init__(self):
|
||||
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
self.sock.connect("/home/kf/.local/share/data/ownCloud/socket")
|
||||
self.sock.settimeout(15)
|
||||
|
||||
GObject.io_add_watch(self.sock, GObject.IO_IN, self.handle_notify)
|
||||
|
||||
def sendCommand(self, cmd):
|
||||
self.sock.send(cmd)
|
||||
|
||||
def find_item_for_file( self, path ):
|
||||
return self.nautilusVFSFile_table[path]
|
||||
|
||||
def callback_update_file( self, path ):
|
||||
print "Got an update callback for " + path
|
||||
|
||||
def askForOverlay(self, file):
|
||||
if os.path.isdir(file):
|
||||
folderStatus = self.sendCommand("RETRIEVE_FOLDER_STATUS:"+file+"\n");
|
||||
|
||||
if os.path.isfile(file):
|
||||
fileStatus = self.sendCommand("RETRIEVE_FILE_STATUS:"+file+"\n");
|
||||
|
||||
# Handles a single line of server respoonse and sets the emblem
|
||||
def handle_server_response(self, l):
|
||||
Emblems = { 'NOP': '',
|
||||
'NEED_SYNC':'view-refresh',
|
||||
'OK': 'dialog-ok' }
|
||||
|
||||
parts = l.split(':')
|
||||
if len(parts) > 2:
|
||||
if parts[0] == 'STATUS':
|
||||
emblem = Emblems[parts[1]]
|
||||
elif parts[0] == 'BROADCAST':
|
||||
emblem = Emblems[parts[1]]
|
||||
else:
|
||||
print "We got unknown status " + parts[0]
|
||||
|
||||
if emblem:
|
||||
item = self.nautilusVFSFile_table[parts[2]]
|
||||
if item:
|
||||
item.set_emblem(emblem)
|
||||
|
||||
# notify is the raw answer from the socket
|
||||
def handle_notify(self, source, condition):
|
||||
print "T "
|
||||
data = source.recv(1024)
|
||||
if len(data) > 0:
|
||||
for l in data.split('\n'):
|
||||
self.handle_server_response( l )
|
||||
|
||||
return True # run again
|
||||
|
||||
def get_local_path(self, path):
|
||||
return path.replace("file://", "")
|
||||
|
||||
def get_columns(self):
|
||||
return Nautilus.Column(name="NautilusPython::share_state_column",
|
||||
attribute="share_state",
|
||||
label="Share State",
|
||||
description="The ownCloud Share State"),
|
||||
|
||||
def update_file_info(self, item):
|
||||
if item.get_uri_scheme() != 'file':
|
||||
return
|
||||
|
||||
filename = urllib.unquote(item.get_uri()[7:])
|
||||
|
||||
self.nautilusVFSFile_table[filename] = item
|
||||
|
||||
print "XXX " + filename
|
||||
item.add_string_attribute('share_state', "share state")
|
||||
self.askForOverlay(filename)
|
Loading…
Reference in a new issue