1
0
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:
2008-04-14 13:29:50 +00:00
parent 371f702f9d
commit 3fd3b2ec19
8 changed files with 400 additions and 162 deletions

View File

@@ -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