The scroll position doesn't restore when navigating back to the
search page from the detail page. That will be interesting.
Change-Id: I5a008cdd6d1c83a4b8031d14ee26cfd9e383d73d
This improves the performance of the piggy animation by doing it in hardware
and eliminating a layout pass on every frame.
Change-Id: I02cf8b521af60af0e61f70c7f732f97074bdcdc1
Still left to do: update the nav in response to selection changes,
implement nav items, drag and drop.
Change-Id: I3f7cd0b8bdccd11a5816dce2bc214e60f844a130
The effect you were seeing was a difference between hardware and
software compositing paths.
Chrome was promoting the content area to a hardware-accelerated
layer during animation, but dropping it back to software after the
animation was complete. There were little animations for the
checkmarks that were causing us to flip in and out of hardware mode
as you moused around.
Solution: force us to stay in hardware mode the entire time the
nav is open (translate: scale3d() is a well-known way to do this).
Bonus: the scaled text rendering looks better in hardware mode.
BUG: https://code.google.com/p/camlistore/issues/detail?id=284
Change-Id: I62f6c86d1ae12ba043f34c0659633bb5195dc50c
I meant to do this in Camlistore commit cc562aff, but that one only
updated to 1389e13 (Jan 23, 2013).
I was confused because the version of third_party/closure/updatelibrary.go
that was checked in prior to cc562aff did not correspond to the version of
Closure that was checked in. So when I ran updatelibrary.go, I got changes
and didn't realize I had to change updatelibrary.go too.
Change-Id: I3ba43a540a62caedbf7570a6d55382bd39a426dc
As far as I know, the code never uses the third level.
This reduces a particularly bad example of https://code.google.com/p/camlistore/issues/detail?id=319 from returning 1.8MB of data to a svelte 1.2MB.
Change-Id: Ibfe4ca3f1b175cd316f6f603950991c1a2fc8577
More secondary preimage resistance. Also better docs and less vague and less promoted Android
UI.
Feedback from Adam Langley, but likely misinterpreted.
Change-Id: I3bf1029b6fc07c0b8dab2af44926aa87b0d4cbad
We were observing UI jank, which ended up being due to GC. Even with chunking
and very small chunk sizes, it was hard to reliably get 30fps on my macbook.
Moving to a worker completely solves the problem. We stay at 60fps the entire
time the hashing is taking place, no matter how many files/how large, etc.
Also, switch to using Closure's crypto support, which has been added since
the upload code was originally written, since it hassupport for incremental
hashing, javascript typed arrays, and other niceties.
Change-Id: I018d6839b2cf037b8d6b03e1a0ea7164bc5a782d
a search result..
When you are paging, typically only one request is done, for the big
image. However, if you reach the end of the current search session,
more results are loaded.
The URL updates during paging, and if you navigate to this URL fresh
the search will be performed first.
Change-Id: Ia2b9bbb4a2eb41a3a75971d0dc1ff4f3d93b4acf
The detail view now loads with only two HTTP requests: one for the
piggy, and one for the big image. No other resources are loaded,
even the blob descriptions, because they are cached by SearchSession,
which is shared between the search ui and the detail ui.
Likewise, when you go back to the search results page, no additional
requests are done.
Also:
- When you press back on detail page, scroll position is now usually
restored (if you refresh between index and detail, it still won't
restore).
- Detail page live updates! It came for free with using SearchSession.
Change-Id: I58ada7bdd30afc2644860fbda6167fc5ce865b0d
This will also be used by the detail page to facilitate fast
flipping and live udpates.
Also fixed the thing where we discard the websocket responses and
re-query for all updates except the very first one.
Change-Id: Iac196670db967f1d41b20ce30641118ede61f3c2
Changed some keys to be consistent with the server config, and removed
some others.
We're now using jsonconfig to get the keys and validate the config.
Removed some unused funcs/methods, moved some global vars as members of a client.
Also, having two possible defaults for the secret keyring
(.config/camlistore/identity-secring.gpg and .gnupg/secring.gpg)
was annoying and confusing imho, so I removed the latter.
http://camlistore.org/issue/259
Change-Id: Icf79fa8822b62b5d91843698861dd19cb553607a
And quiet noisy logging on normal write failures.
We can now stress test the thumbnail generation by setting
CAMLI_DISABLE_THUMB_CACHE=1 which will make all the thumbnails in the
browsers be unique, and not write them to cache on the server.
Then, when we're happy with the thumbnails, we just increment the
thumbnailVersion string and that busts all the browser- and
server-side caches.
Change-Id: I3cda8e85ab8b1b0b2c9113f6dff613dfbf736028
I'm sure there's still lots of refinement that needs to be done here, but this
seems like a good checkpoint.
Change-Id: Ida808464c0cc40c84f7f79c016d3c6a148d50a32
Apply the patch, load the UI, then run ./bin/devcam put -filenodes -permanode doc.
Server reliably hangs for me.
Change-Id: I4057d4575515d1298ab83e58059b669a6f2bdacb
A rendering bug in Chrome was causing some of the checkmarks to
wobble a bit on hover. This works around the issue.
Change-Id: I22ea0117075c8de13507d257ef0d1437f30e20df
Realized there was a way more elegant way to implement infinite
scroll. Now it is general to any kind of query (though not yet
to any kind of sorting, as there isn't support for continuing with
arbitrary sorts server-side).
Change-Id: I98dc627e1292524ddd8af8960c134f49ac41f337
If the JavaScript UI is open and the query you're looking at changes
due to new data arriving, the server should push the update search
results to you live, without needing to poll.
Change-Id: I00faf7737f9a459de39b21fb5226a8000feeee2b
The new package sorted/kvtest provides a generic KeyValue test for all
implementations. Memory, SQLite, and kvfile now use it.
This speeds up the index slurping start-up of my personal Camlistore
server from 30 seconds (when it was doing 17,000+ queries in small
windows) to now just 5 seconds. That 5 seconds can be improved yet
further.
Change-Id: Idd55ba9ccd3ed12a26868a41db1af676aff7b67b
Goal is to iterate faster (notably: for slurping the index to the in-memory
corpus on start-up), by doing fewer copies and generating less garbage.
Change-Id: I054b0de2b994eb1f2356aa8587a466bafeb6cf82
Will eventually be plumbed through lots of APIs, especially those requiring or benefiting from
cancelation notification and/or those needing access to the HTTP context (e.g. App Engine).
Change-Id: I591496725d620126e09d49eb07cade7707c7fc64
In the future this might be more configurable (e.g. mysql or sqlite or whatever, or different
paths). But this works for now.
Change-Id: I85853e6bfdd9063fc2eba5922b138d5552b730a9
Previous TODO entry was:
-- Get rid of QueueCreator entirely. Plan:
-- sync handler still has a source and dest (one pair) but
instead of calling CreateQueue on the source, it instead
has an index.Storage (configured via a RequiredObject
so it can be a kvfile, leveldb, mysql, postgres etc)
-- make all the index.Storage types be instantiable
from a jsonconfig Object, perhaps with constructors keyed
on a "type" field.
-- make sync handler support blobserver.Receiver (or StatReceiver)
like indexes, so it can receive blobs. but all it needs to
do to acknowledge the ReceiveBlob is write and flush to its
index.Storage. the syncing is async by default. (otherwise callers
could just use "replica" if they wanted sync replication).
But maybe for ease of configuration switching, we could also
support a sync mode. when it needs to replicate a blob,
it uses the source.
-- future option: sync mirror to an alternate path on ReceiveBlob
that can delete. e.g. you're uploading to s3 and google,
but don't want to upload to both at once, so you use the localdisk
as a buffer to spread out your upstream bandwidth.
-- end result: no more hardlinks or queue creator.
Change-Id: I6244fc4f3a655f08470ae3160502659399f468ed
Also, remove note about bref support from search instructions since
apparently that isn't supported yet.
Change-Id: I1ccbb8be44aa62ae7191aef913c7a226fd90a775
* Increase default image size a few settings
* Increase gutter between items
* Remove extraneous padding and whitepsace
* Remove unneeded gigantic heading
* Move build version into statusbar
* Change algorithm for fitting rows -- instead of preferring to clip
edges of image, instead prefer to adjust height of rows. I find it
looks more interesting visually when the widths of the images vary
more.
* Replace folder and file icon with something better looking
* Swap order of + and - buttons in toolbar, they were backward from
what is typical
Change-Id: Idfe85a813926c2c9eea774a86046df62ecacd45c
To select an item, click the checkmark that overlays on rollover.
To navigate, just click anywhere else on the item.
Also move selection from additive by default rather than exclusive.
Change-Id: I47e6ca1942fe1fdaaf615f6ab0e0a547f1a51735
Also:
* Make the entire BlobItemController a drop target for new files,
except for when over a set, then the set is the target.
* Minor visual refinements to highlight states during dragging.
* Fix bugs/flicker in dragdrop code.
* Fix bug where there is an empty button in toolbar before the first
item is selected.
Change-Id: I3c40a476395c885477e1316e6ff168399640e347
Move up a layer to the HTTP. Also, start to remove ContextWrapper
stuff. We've done it differently for App Engine instead, and will do
it differently yet moving forward.
Also add blobserver.Receive and use it in most places, moving checksum
verification up a layer.
Bunch of other cleanup and TODO fixing too.
Much simpler and cleaner.
Change-Id: I12e56c5d4e53bfcf82bdd8fb0b6d57c248ff605c
of enumerating Drive files, needs to be fixed once Drive supports
range queries. Allows you to sync to /sto-googledrive/, but not from.
Change-Id: I6ac5ef02c5f51a6abdab5c207a3a5693c6bb8581
-fail early when new config has sqlite but no sqlite installed
-hint at the server config doc url
-added windows with mysql section in the server config doc
-fixed typo in mongo indexer option
Change-Id: I4266eb6e34a55901e6af90a32eb1411fb5c37688
-dev-appengine populates the default sourceRoot.
-app.yaml filters out the go files from the static
resources
-the UI handler warns that sourceRoot is required
Change-Id: I816456a882ff4b0573bc8962cce85139d8a0f611
-added status handler to the config
-made pkg/jsonconfig/eval.go use the relative path
for the config file, since appengine does not like
absolute paths.
Change-Id: If9d275e308ae60e15ecd9c831e22fa6301de0be6
This fixes some bugs where we don't relayout when items are added
to BlobItemContainer for various reasons.
Change-Id: Ie434acc12e660af438b93d2dabd41f3d75fb7493
The add button still looks poo, but that will be a separate change.
Change-Id: Iea5fd53f7f4eabfc8c2ed45c043fcbd661b68077
Screenshots: http://imgur.com/JARUznn,tsv6dgU
-osutil: PollParent to monitor parent process.
-camlistored: option to kill itself if it has been orphaned.
Change-Id: I87193254d55847e46134439ecd1b04f71718d083
This seems to fix https://code.google.com/p/camlistore/issues/detail?id=183.
I could not find the code that is actually causing scrolling to occur ... I am
guessing something in Closure somewhere.
However, I also couldn't think of any reason for this component to be
focusable, and this doesn't seem to break anything that I can see.
Change-Id: Iaf64555ee175c774a218bb32d9bb4f97f46cc636
Dropping anywhere on the container is now disabled.
One can either drop on the CreateItem (which results
in the same as dropping on the container was), or
drop on a collection thumbnail, which will not only
create the permanodes but add them to the collection
on the fly.
Change-Id: Ia4d761b2be25822a561c94c397dded02853e5b77
misc.CountingReader moves into readerutil.
pkg/atomics is folded into pkg/types.
pkg/test/testdep is folded into pkg/test, with better name/docs.
Old cruft from pkg/webserver is deleted.
Change-Id: I3f72d8b29804254ef944995fb085837c878f79f5
This changes allows to always dynamically serve deps.js, generated
either from the local files, or from the embedded resources.
ui.go and publish.go now make use of it.
http://camlistore.org/issue/151
Change-Id: I129895b2c65a0726c1239bdd7387c62e90649a9d
1) Everything in ui/ except for js-notes.txt was removed.
2) mv newui/* ui/
3) modified pkg/server/ui.go to make it all work
4) modified Makefile to generate server/camlistored/ui/deps.js
5) regenerated all the zembeds
6) Some fixes to attempt to make it (re-)work on appengine:
-removed the Go1.1 check
-added pkg/osutil/restart_stub.go (for restarting a process)
7) The closure handler now redirects to the online files when
the closure library is not on disk, because we do not embed
the required closure js files.
Change-Id: Id1bcf007550cafb7188ba2674352e8f3bd07fb8c
We're only showing build version for now.
Next step would be status handler.
See http://camlistore.org/issue/111
Change-Id: I9e0792abe9ffed8139d38478d186b6e75f99de7e
This CL proposes 4 changes:
1) When making the embeds, any .html files in newui is rewwritten
on the fly so that the resulting embed uses all.js instead of
individual .js files. all.js is the only javascript file embedded
for newui.
2) Various bugs and paths in the newui/*.js files were fixed so that
everything works when using all.js
3) pkg/server/ui.go was modified so that all features from ui should
now have an equivalent in newui, that is served through ui/new/.
In a next step, we can move back everything from newui/ into ui/ and
completely get rid of the old ui.
4) The published gallery now uses closure too.
In another next step, we should probably work on serving its static
part directly from an .html file or (include it in the zembed somehow?)
instead of generating it at every request. Or at least cache it?
This commit includes the zembeds in newui, except for zembed_all.js.go
since it is large and it would take a lot of space in the git history
everytime we change it.
The plan is to roll-sum it into chunks to address that problem.
Change-Id: I381d8ddf3a2bbe37e3c4b1c4bf423f16beffaaf4
This change also introduces the "bref:" prefix search,
to search a permanode by blobref (mainly to then
set that permanode as the current collection).
Change-Id: I9a8e6663dc6e6aff599c6740936b770cd5c54b4a
This change adds 2 buttons to the toolbar.
1) setAsCollecButton_ is enabled only when a single item
(which has no content) is selected. When clicked, the button
sets that item as the currently selected collection/set
(BlobItemContainer.currentCollec_).
2) checkedItemsAddToSetButton_ is enabled when
currentCollec_ is set and some items are selected. When
clicked, it adds the selected item(s) to the current collection.
Change-Id: Ib8dcfa308b03b114e54612cd790e4b24e60a9d53
A new client configuration parameter, "trustedCerts" (list of strings)
is introduced. A certificate fingerprint is defined as the 10 digits
prefix of the sha1 of the whole certificate (in ASN1. DER form).
trustedCerts should contain the list of fingerprints of the
certificates we trust. If not empty, the server's certificate
is checked against that list, instead of using the full x509 validation
on it.
-added a dial function and tls configuration, which check if we're using
SSL, and if we're in "trustedCerts" mode.
pkg/client/client.go
pkg/client/config.go
-moved android specific hacks from camput to the client layer, so that
the dial and tls config could reuse/access them. Also allows future
reuse for other commands, such as camget.
pkg/client/android.go
-adapted camput to the above changes:
cmd/camput/android.go
cmd/camput/camput.go
cmd/camput/files.go
-server prints a hint when it generates the self-signed:
pkg/misc/misc.go
server/camlistored/camlistored.go
-camliactivity:
clients/android/res/xml/preferences.xml
clients/android/src/org/camlistore/Preferences.java
clients/android/src/org/camlistore/SettingsActivity.java
clients/android/src/org/camlistore/UploadService.java
clients/android/src/org/camlistore/UploadThread.java
http://camlistore.org/issue/131
Change-Id: I6be20161549a69aafc8eb7b9e96e9351dc1c5b09