~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/apps/fileservice/listing.py

  • Committer: mattgiuca
  • Date: 2008-01-12 15:32:54 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:200
fileservice.listing: Now returns a nicer date format for mtime_nice.
    Applies an intuitive algorithm to make the date even shorter,
    (eg. "today" or "3 days ago") and returns this as mtime_short.
util.js: Fixed path_join if the first path is empty. (Was incorrectly adding
    a leading slash).
    Added optional "title" arguments to dom_make_text_elem and
    dom_make_link_elem.
browser.js: Displays mtime_short in the file table instead of mtime_nice
    (it was always too long). Displays the full date as a tooltip.
    Auto-navigates to the user's home directory if accessed from the root.
    (This may be a temporary measure, but it was giving a mean error before).
    Various code makes use of util's new optional "title" arguments.
dispatch.html: Writes a new JavaScript variable, "username", so JavaScript
    code knows which user is logged in.
    Cleaned up JS variables repr (previously they did bad escapes in some
    cases).

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
# Make a Subversion client object
111
111
svnclient = pysvn.Client()
112
112
 
 
113
# For time calculations
 
114
seconds_per_day = 86400 # 60 * 60 * 24
 
115
if time.daylight:
 
116
    timezone_offset = time.altzone
 
117
else:
 
118
    timezone_offset = time.timezone
 
119
 
113
120
# Mime types
114
121
# application/json is the "best" content type but is not good for
115
122
# debugging because Firefox just tries to download it
179
186
        # unversioned.
180
187
        mtime = os.path.getmtime(path)
181
188
        listing["."] = {"isdir" : True,
182
 
            "mtime" : mtime, "mtime_nice" : time.ctime(mtime)}
 
189
            "mtime" : mtime, "mtime_nice" : make_date_nice(mtime),
 
190
            "mtime_short" : make_date_nice_short(mtime)}
183
191
 
184
192
    # Listing is a nested object inside the top-level JSON.
185
193
    listing = {"listing" : listing}
211
219
            type = conf.mimetypes.default_mimetype
212
220
        d["type"] = type
213
221
    d["mtime"] = file_stat.st_mtime
214
 
    d["mtime_nice"] = time.ctime(file_stat.st_mtime)
 
222
    d["mtime_nice"] = make_date_nice(file_stat.st_mtime)
 
223
    d["mtime_short"] = make_date_nice_short(file_stat.st_mtime)
215
224
    return d
216
225
 
217
226
def PysvnStatus_to_fileinfo(path, status):
247
256
                type = conf.mimetypes.default_mimetype
248
257
            d["type"] = type
249
258
        d["mtime"] = file_stat.st_mtime
250
 
        d["mtime_nice"] = time.ctime(file_stat.st_mtime)
 
259
        d["mtime_nice"] = make_date_nice(file_stat.st_mtime)
 
260
        d["mtime_short"] = make_date_nice_short(file_stat.st_mtime)
251
261
    except OSError:
252
262
        # Here if, eg, the file is missing.
253
263
        # Can't get any more information so just return d
254
264
        pass
255
265
    return filename, d
 
266
 
 
267
def make_date_nice(seconds_since_epoch):
 
268
    """Given a number of seconds elapsed since the epoch,
 
269
    generates a string representing the date/time in human-readable form.
 
270
    "ddd mmm dd, yyyy h:m a"
 
271
    """
 
272
    #return time.ctime(seconds_since_epoch)
 
273
    return time.strftime("%a %b %d, %Y %I:%M %p",
 
274
        time.localtime(seconds_since_epoch))
 
275
 
 
276
def make_date_nice_short(seconds_since_epoch):
 
277
    """Given a number of seconds elapsed since the epoch,
 
278
    generates a string representing the date in human-readable form.
 
279
    Does not include the time.
 
280
    This function generates a very compact representation."""
 
281
    # Use a "naturalisation" algorithm.
 
282
    days_ago = (int(time.time() - timezone_offset) / seconds_per_day
 
283
        - int(seconds_since_epoch - timezone_offset) / seconds_per_day)
 
284
    if days_ago <= 5:
 
285
        # Dates today or yesterday, return "today" or "yesterday".
 
286
        if days_ago == 0:
 
287
            return "Today"
 
288
        elif days_ago == 1:
 
289
            return "Yesterday"
 
290
        else:
 
291
            return str(days_ago) + " days ago"
 
292
        # Dates in the last 5 days, return "n days ago".
 
293
    # Other dates, return a short date format.
 
294
    # If within the same year, omit the year (mmm dd)
 
295
    if time.localtime(seconds_since_epoch).tm_year==time.localtime().tm_year:
 
296
        return time.strftime("%b %d", time.localtime(seconds_since_epoch))
 
297
    # Else, include the year (mmm dd, yyyy)
 
298
    else:
 
299
        return time.strftime("%b %d, %Y", time.localtime(seconds_since_epoch))