mirror of
https://github.com/gryf/pygtktalog.git
synced 2025-12-17 19:40:21 +01:00
* Added exteranl image viewer.
* Added edit for descriptions and notes for files. * Added possibility for make thumbnail for any directory/file. * More improvements and bufixes.
This commit is contained in:
@@ -45,8 +45,11 @@ except ImportError:
|
||||
|
||||
from m_config import ConfigModel
|
||||
from m_details import DetailsModel
|
||||
from utils.thumbnail import Thumbnail
|
||||
from utils.img import Img
|
||||
try:
|
||||
from utils.thumbnail import Thumbnail
|
||||
from utils.img import Img
|
||||
except:
|
||||
pass
|
||||
from utils.parse_exif import ParseExif
|
||||
from utils.gthumb import GthumbCommentParser
|
||||
|
||||
@@ -131,7 +134,9 @@ class MainModel(ModelMT):
|
||||
{'id': str(10), 'name': "windows", 'size': 18, 'color': '#333'},
|
||||
]'''
|
||||
return
|
||||
|
||||
def add_image(self, image, id):
|
||||
"""add single image to file/directory"""
|
||||
sql = """insert into images(file_id, thumbnail, filename)
|
||||
values(?, null, null)"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
@@ -148,8 +153,72 @@ class MainModel(ModelMT):
|
||||
(ip.split(self.internal_dirname)[1][1:],
|
||||
tp.split(self.internal_dirname)[1][1:],
|
||||
res[0]))
|
||||
self.db_connection.commit()
|
||||
self.db_connection.commit()
|
||||
|
||||
def del_images(self, id):
|
||||
"""removes images and their thumbnails from selected file/dir"""
|
||||
# remove images
|
||||
sql = """select filename, thumbnail from images where file_id =?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
res = self.db_cursor.fetchall()
|
||||
if len(res) > 0:
|
||||
for fn in res:
|
||||
os.unlink(os.path.join(self.internal_dirname, fn[0]))
|
||||
os.unlink(os.path.join(self.internal_dirname, fn[1]))
|
||||
|
||||
# remove images records
|
||||
sql = """delete from images where file_id = ?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
self.db_connection.commit()
|
||||
|
||||
def delete_image(self, id):
|
||||
"""removes image on specified image id"""
|
||||
sql = """select filename, thumbnail from images where id=?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
res = self.db_cursor.fetchone()
|
||||
if res[0]:
|
||||
os.unlink(os.path.join(self.internal_dirname, res[0]))
|
||||
os.unlink(os.path.join(self.internal_dirname, res[1]))
|
||||
|
||||
if __debug__:
|
||||
print "m_main.py: delete_image(): removed images:"
|
||||
print res[0]
|
||||
print res[1]
|
||||
# remove images records
|
||||
sql = """delete from images where id = ?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
self.db_connection.commit()
|
||||
|
||||
def add_thumbnail(self, img_fn, id):
|
||||
"""generate and add thumbnail to selected file/dir"""
|
||||
if self.config.confd['thumbs']:
|
||||
self.del_thumbnail(id)
|
||||
p, e, ret_code = Thumbnail(img_fn,
|
||||
base=self.internal_dirname).save(id)
|
||||
if ret_code != -1:
|
||||
sql = """insert into thumbnails(file_id, filename) values (?, ?)"""
|
||||
self.db_cursor.execute(sql,
|
||||
(id,
|
||||
p.split(self.internal_dirname)[1][1:]))
|
||||
self.db_connection.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
def del_thumbnail(self, id):
|
||||
"""removes thumbnail from selected file/dir"""
|
||||
|
||||
# remove thumbnail files
|
||||
sql = """select filename from thumbnails where file_id=?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
res = self.db_cursor.fetchone()
|
||||
if res:
|
||||
os.unlink(os.path.join(self.internal_dirname, res[0]))
|
||||
|
||||
# remove thumbs records
|
||||
sql = """delete from thumbnails where file_id=?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
self.db_connection.commit()
|
||||
|
||||
def cleanup(self):
|
||||
self.__close_db_connection()
|
||||
if self.internal_dirname != None:
|
||||
@@ -202,7 +271,8 @@ class MainModel(ModelMT):
|
||||
os.chdir(self.internal_dirname)
|
||||
try:
|
||||
tar.extractall()
|
||||
print "m_main.py: extracted tarfile into", self.internal_dirname
|
||||
if __debug__:
|
||||
print "m_main.py: extracted tarfile into", self.internal_dirname
|
||||
except AttributeError:
|
||||
# python's 2.4 tarfile module lacks of method extractall()
|
||||
directories = []
|
||||
@@ -328,18 +398,24 @@ class MainModel(ModelMT):
|
||||
"""get file info from database"""
|
||||
retval = {}
|
||||
sql = """SELECT f.filename, f.date, f.size, f.type,
|
||||
t.filename, f.description
|
||||
t.filename, f.description, f.note
|
||||
FROM files f
|
||||
LEFT JOIN thumbnails t ON t.file_id = f.id
|
||||
WHERE f.id = ?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
set = self.db_cursor.fetchone()
|
||||
if set:
|
||||
string = "ID: %d\nFilename: %s\nDate: %s\nSize: %s\ntype: %s" % \
|
||||
(id, set[0], datetime.fromtimestamp(set[1]), set[2], set[3])
|
||||
retval['file_info'] = string
|
||||
retval['debug'] = {'id': id,
|
||||
'date': datetime.fromtimestamp(set[1]),
|
||||
'size': set[2], 'type': set[3]}
|
||||
|
||||
retval['filename'] = set[0]
|
||||
|
||||
if set[5]:
|
||||
retval['description'] = set[5]
|
||||
|
||||
if set[6]:
|
||||
retval['note'] = set[6]
|
||||
|
||||
if set[4]:
|
||||
retval['thumbnail'] = os.path.join(self.internal_dirname, set[4])
|
||||
@@ -370,8 +446,16 @@ class MainModel(ModelMT):
|
||||
myiter = self.exif_list.insert_before(None, None)
|
||||
self.exif_list.set_value(myiter, 0, self.EXIF_DICT[key])
|
||||
self.exif_list.set_value(myiter, 1, set[key])
|
||||
|
||||
retval['exif'] = True
|
||||
|
||||
# gthumb
|
||||
sql = """SELECT note, place, date from gthumb WHERE file_id = ?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
set = self.db_cursor.fetchone()
|
||||
|
||||
if set:
|
||||
retval['gthumb'] = {'note': set[0], 'place': set[1], 'date': set[2]}
|
||||
|
||||
return retval
|
||||
|
||||
def get_source(self, path):
|
||||
@@ -396,27 +480,10 @@ class MainModel(ModelMT):
|
||||
return None, None
|
||||
return res[0], res[1]
|
||||
|
||||
def delete_image(self, id):
|
||||
"""removes image on specified id"""
|
||||
sql = """select filename, thumbnail from images where id=?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
res = self.db_cursor.fetchone()
|
||||
if res[0]:
|
||||
os.unlink(os.path.join(self.internal_dirname, res[0]))
|
||||
os.unlink(os.path.join(self.internal_dirname, res[1]))
|
||||
|
||||
if __debug__:
|
||||
print "m_main.py: delete_image(): removed images:"
|
||||
print res[0]
|
||||
print res[1]
|
||||
# remove images records
|
||||
sql = """delete from images where id = ?"""
|
||||
self.db_cursor.execute(sql, (id,))
|
||||
self.db_connection.commit()
|
||||
|
||||
def delete(self, root_id, db_cursor=None, db_connection=None):
|
||||
"""Remove subtree from main tree, remove tags from database
|
||||
remove all possible data, like thumbnails"""
|
||||
remove all possible data, like thumbnails, images, gthumb info, exif
|
||||
etc"""
|
||||
|
||||
fids = []
|
||||
|
||||
@@ -429,9 +496,7 @@ class MainModel(ModelMT):
|
||||
sql = """select parent_id from files where id = ?"""
|
||||
db_cursor.execute(sql, (root_id,))
|
||||
res = db_cursor.fetchone()
|
||||
if res:
|
||||
parent_id = res[0]
|
||||
|
||||
parent_id = res[0]
|
||||
|
||||
def get_children(fid):
|
||||
fids.append(fid)
|
||||
@@ -456,13 +521,9 @@ class MainModel(ModelMT):
|
||||
sql = """delete from tags_files where file_id = ?"""
|
||||
db_cursor.executemany(sql, generator())
|
||||
|
||||
arg = self.__list_to_string(fids)
|
||||
|
||||
# remove thumbnails
|
||||
arg =''
|
||||
for c in fids:
|
||||
if len(arg) > 0:
|
||||
arg+=", %d" % c
|
||||
else:
|
||||
arg = "%d" % c
|
||||
sql = """select filename from thumbnails where file_id in (%s)""" % arg
|
||||
db_cursor.execute(sql)
|
||||
res = db_cursor.fetchall()
|
||||
@@ -477,6 +538,7 @@ class MainModel(ModelMT):
|
||||
if len(res) > 0:
|
||||
for fn in res:
|
||||
os.unlink(os.path.join(self.internal_dirname, fn[0]))
|
||||
os.unlink(os.path.join(self.internal_dirname, fn[1]))
|
||||
|
||||
# remove thumbs records
|
||||
sql = """delete from thumbnails where file_id = ?"""
|
||||
@@ -486,6 +548,10 @@ class MainModel(ModelMT):
|
||||
sql = """delete from images where file_id = ?"""
|
||||
db_cursor.executemany(sql, generator())
|
||||
|
||||
# remove gthumb info
|
||||
sql = """delete from gthumb where file_id = ?"""
|
||||
db_cursor.executemany(sql, generator())
|
||||
|
||||
# correct parent direcotry sizes
|
||||
# get size and parent of deleting object
|
||||
while parent_id:
|
||||
@@ -500,8 +566,6 @@ class MainModel(ModelMT):
|
||||
from files where parent_id=?) where id=?"""
|
||||
db_cursor.execute(sql, (parent_id, parent_id))
|
||||
|
||||
|
||||
|
||||
sql = """select parent_id from files where id = ? and parent_id!=id"""
|
||||
db_cursor.execute(sql, (parent_id,))
|
||||
res = db_cursor.fetchone()
|
||||
@@ -590,9 +654,15 @@ class MainModel(ModelMT):
|
||||
self.db_cursor.execute(sql, (img_id,))
|
||||
res = self.db_cursor.fetchone()
|
||||
if res:
|
||||
return res[0]
|
||||
return os.path.join(self.internal_dirname, res[0])
|
||||
return None
|
||||
|
||||
|
||||
def update_desc_and_note(self, id, desc='', note=''):
|
||||
"""update note and description"""
|
||||
sql = """UPDATE files SET description=?, note=? WHERE id=?"""
|
||||
self.db_cursor.execute(sql, (desc, note, id))
|
||||
return
|
||||
|
||||
# private class functions
|
||||
def __bytes_to_human(self, integer):
|
||||
if integer <= 0 or integer < 1024:
|
||||
@@ -729,6 +799,7 @@ class MainModel(ModelMT):
|
||||
date datetime);""")
|
||||
self.db_cursor.execute("insert into files values(1, 1, 'root', null, 0, 0, 0, 0, null, null);")
|
||||
self.db_cursor.execute("insert into groups values(1, 'default', 'black');")
|
||||
self.db_connection.commit()
|
||||
|
||||
def __scan(self):
|
||||
"""scan content of the given path"""
|
||||
@@ -952,7 +1023,7 @@ class MainModel(ModelMT):
|
||||
cmnts['place'],
|
||||
cmnts['date']
|
||||
))
|
||||
if cmnts['keywords']:
|
||||
if cmnts.has_key('keywords'):
|
||||
# TODO: add gthumb keywords to tags and group 'gthumb'
|
||||
pass
|
||||
|
||||
@@ -997,7 +1068,9 @@ class MainModel(ModelMT):
|
||||
if self.currentid:
|
||||
if __debug__:
|
||||
print "m_main.py: __scan() removing old branch"
|
||||
self.statusmsg = "Removing old branch..."
|
||||
self.delete(self.currentid, db_cursor, db_connection)
|
||||
|
||||
self.currentid = None
|
||||
else:
|
||||
print "new directory/cd"
|
||||
@@ -1120,4 +1193,12 @@ class MainModel(ModelMT):
|
||||
else:
|
||||
return txt
|
||||
|
||||
def __list_to_string(self, array):
|
||||
arg =''
|
||||
for c in array:
|
||||
if len(arg) > 0:
|
||||
arg+=", %d" % c
|
||||
else:
|
||||
arg = "%d" % c
|
||||
return arg
|
||||
pass # end of class
|
||||
|
||||
Reference in New Issue
Block a user