From 8caf92943bf285971b75e56f4dc611bc3c040cd6 Mon Sep 17 00:00:00 2001
From: Martin Langhoff <martin@laptop.org>
Date: Fri, 4 Dec 2009 17:22:25 +0000
Subject: [PATCH 1/4] Removable disk: Save metadata and preview dlo#9657
---
src/jarabe/journal/model.py | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py
index 1b4e236..7814fe6 100644
a
|
b
|
import os |
19 | 19 | from datetime import datetime |
20 | 20 | import time |
21 | 21 | import shutil |
| 22 | import tempfile |
22 | 23 | from stat import S_IFMT, S_IFDIR, S_IFREG |
23 | 24 | import traceback |
24 | 25 | import re |
… |
… |
import gobject |
27 | 28 | import dbus |
28 | 29 | import gconf |
29 | 30 | import gio |
| 31 | import json |
30 | 32 | |
31 | 33 | from sugar import dispatch |
32 | 34 | from sugar import mime |
… |
… |
def write(metadata, file_path='', update_mtime=True): |
503 | 505 | |
504 | 506 | destination_path = os.path.join(metadata['mountpoint'], file_name) |
505 | 507 | shutil.copy(file_path, destination_path) |
506 | | object_id = destination_path |
507 | 508 | |
| 509 | # issue our metadata massage on a copy |
| 510 | md = metadata.copy() |
| 511 | del md['mountpoint'] |
| 512 | |
| 513 | # if we ever write to places other than the root |
| 514 | # keep in mind that the metadata file must be in the |
| 515 | # same directory as the data file. |
| 516 | md_path = os.path.join(metadata['mountpoint'], |
| 517 | '.'+file_name+'.metadata') |
| 518 | |
| 519 | preview = md['preview'] |
| 520 | preview_fname = '.'+file_name+'.preview' |
| 521 | preview_path = os.path.join(metadata['mountpoint'], preview_fname) |
| 522 | md['preview'] = preview_fname |
| 523 | |
| 524 | # Write metadata atomically (on FSs that support it) |
| 525 | (fh, fn) = tempfile.mkstemp(dir=metadata['mountpoint']) |
| 526 | os.write(fh, json.dumps(md)) |
| 527 | os.close(fh) |
| 528 | os.rename(fn, md_path) |
| 529 | |
| 530 | # Write preview atomically |
| 531 | (fh, fn) = tempfile.mkstemp(dir=metadata['mountpoint']) |
| 532 | os.write(fh, preview) |
| 533 | os.close(fh) |
| 534 | os.rename(fn, preview_path) |
| 535 | |
| 536 | object_id = destination_path |
508 | 537 | return object_id |
509 | 538 | |
510 | 539 | def _get_file_name(title, mime_type): |