This change makes gce/create.go generate a self-signed certificate
with the hostname from the -hostname argument and upload it to GCS
before creating a new camlistore instance.
It also makes camlistored use baseURL to figure out the hostname
when generating its self-signed certificate.
Change-Id: I64f85853dab34a7ce95e5d5997e58f2e5da43496
SearchSession::isComplete() could sometimes return the wrong answer.
Nulling out the continuation is needed to make loadMoreResults()
idempotent. So had to add more state to SearchSession specifically
for tracking completeness.
Change-Id: Ic2a90c73f3a764f358476cffa6d498ea53103421
To be able to use it (ATM only in low-level config, by specifying
metaIndex with the stores/queues/caches).
Change-Id: I7743ebffb90f59b83124063f8f488a9b80c869ca
Currently disabled but can be tested via the DEBUG_TAGS flag in index.js. Potential enhancements are documented in tags_control.js. This patch
removes one piece of unused code.
Change-Id: I751fca63fbc93c209628f03a3f3aa6e87d01e309
We were waiting to show the container aspect until the child search session
returned. This meant that we temporarily showed the permanode aspect then
swapped to the container aspect shortly thereafter (because the container
aspect is higher priority).
The right solution to this is to change the search protocol so that clients
can know how many children a permanode has without getting the entire list
of them. But for now, it just so happens that search returns the entire
list, so we can use that instead.
Change-Id: Iaf93f689e965a1dc9ef73d834d46c57026c100cd
When there is a server error, the piggy becomes sad and periodically
shakes his head. When you expand the piggy menu you see one or more
entries explaining why he is sad.
Change-Id: If1e28dbf02c9befaa46b62838cb704220f719bc6
Otherwise, we end up showing a stupid empty contents view for every
tweet, foursquare checkin, etc.
This has the downside that when you remove the last item from a
set, the contents view goes away.
Change-Id: If5f53a713aaff63d9fb294b675a5e55ca452eff1
Before we did not show the search aspect when the results were empty.
This was intended for the case where you're looking at an image or
something that doesn't have children.
But it had the side effect of meaning that we didn't show the search
aspect for empty sets, or empty search results, which isn't right
because you still want users to be able add items to empty sets.
Change-Id: Iad187b38317a5adcefbfd06f92047c03c5815583
Instead of /ui/?b=<hash>, /ui/?p=<hash>, /ui/?d=<hash>, etc...,
it's now just: /ui/<hash>
This makes constructing links easier, because you don't have to
know whether a blob is also a permanode, or a directory, or
whatever.
Change-Id: I771fa1b1699b9009269c7eee632e7e8fd5335331
Also add support for piggy menu items that are just links. Links are
nice because you can right-click 'em and so on.
Change-Id: I0cfb4ba6f58141ee396916925793a06033457028
Touch devices still deliver 'mouseover' events, so you can't rely
on that. Anyway, on things like the Chromebook pixel there is a
mouse and a touchscreen. So it just has to work for both modes
simultaneously.
Change-Id: Ia63f159d5c7edd319a56cf1f79d65d799a71367c
Part of Camlistore deploy to GCE easily. Will use paths like /gcs/bucket/foo or /gce-meta/attr for some
things previously-assumed to only be stored on the OS filesystem.
Change-Id: I2ed6cf5759c4d277f4e89a33a0fcfeee8bcbbf82
Something fancier would be better, but without this change they'd get
rendered as single images, which would be confusing.
Change-Id: Icd08eb1716ae1f3bebe2f064388cac822a0a4e63
Context: http://camlistore.org/issue/479
This patch allows camlistored to wait for all the apps to be serving,
before printing its own listening address.
Change-Id: I4035b115a03ef6a2a43177b83b5b65ebc50a2188
A camliPath can now have a file blob as a target (instead of a
permanode). And when we render these camliPath members as links, since
it can happen that these members haven't been described, we can't know
in advance whether to link them as permanodes or as blobs, so we
always default to permanode. Therefore, it can now legitimately happen
that we end up on the permanode page, while the blobRef is actually
one of a non permanode.
This patch tries to cope with that situation in a bit nicer way.
Context: http://camlistore.org/issue/470
Change-Id: Ic3b728541e164a6e6056d8f275a1d7e76b41e043
-removed redundant "gallery" feature (since container aspect does it)
-> allowed to get rid of blob_item_container dependency.
-removed the whole resolvedMetaData business. If one wants to derive
properties (such as the title) from children blobs/permanodes, just
create a new BlobItem for that child and get the properties with
methods on that child.
-> makes for clearer code, and easier to prevent null errors.
-started making use of search session
Change-Id: Ic706c96e1c05ad5489ab4b14ed21e315a557a8a8
It would be better to support real URLs for these, but I need to
figure out how routing those should work first.
So for now this is maybe less annoying.
Change-Id: I1992d23cb0f94b509f73db23a542b56ca5df7531
Implemented bulk tagging operations via single command 'tag'. Add, Delete, Set, and Clear modes are available (add, del, set, clear). Help on command usage is supplied via -help argument.
basic usage: tag <mode> (args)
tag add 1,2,3
tag del 1,2
tag set 1
tag clear
tag -help
Caveats:
Client will attempt to add/remove tags regardless if the selected permanode contains those values. So it will add a tag multiple times and attempt to delete a tag that is not set.
Change-Id: Ib5c8ccc3d74e49701629c37397de478b95db4fd6
Reorganizes common OAuth2 things into importer/oa2_importers.go
Rewrites CallbackURLParameters to return url.Values.
A controversial workaround for nil context has been left out,
and this may cause panic and will need a proper fix.
Change-Id: I0789f4732412aa559078ec2c6b6797925ab8cd05
Works but only lightly tested.
Could use lots of refactoring with code common with twitter.
Needs a test too.
Change-Id: I07f72d29acbc0226aeeedba0afe0bf7eeeac5ad3
http://imgur.com/Re14XKc,6fYHJqp,39nnQiT#0
Camlistore is built around the idea that every object is a blob,
but blobs can also self-describe themselves as more than a blob.
For example, some blobs are also files, or images, or sets, or
permanodes, or movies, or foursquare checkins. Etc.
Here is an idea for the detail page that reflects that underlying
reality of Camlistore.
Each blob has a single canonical URL in the web UI for its detail
page. Currently this is /?p=<...>, but should ideally be just
/<blobref>.
Within the web UI, many "aspects" register interest in providing
views on blobs. Each time the user navigates to a detail page,
each aspects gets to say whether it can provide a useful view on
the blob.
Aspects are currently rendered (crappily) as tabs along the bottom
of the UI. I'm not sure how they should actually be rendered, this
is temporary.
This patch includes the following aspects:
- image (the old image detail)
- permanode (the old old permanode page)
- blob (the old old blob page)
Change-Id: Idb3cdbb203799a5d9c113d1b37b67a2724040085
BlobItemDemoContent is a demo node type, useful for giving talks and showing
how a custom renderer can be invoked just by making a permanode, setting
its "camliNodeType" attribute to "camlistore.org:demo", and then changing its
background color with the "color" property or text with the "title" property.
Change-Id: Ib592471b785fde5750754bde3aa71eb8e2c10f3b
Currently there are two renderers: image and generic (for the
file/folder icons). But it should be easy to add new types now.
Change-Id: Ib1b348cad614e4e8ff6e61fb6e41538678916588
1) Removed exec call to gpg, because it automatically looks in .gnupg/,
which we don't use anymore as a default.
2) Now taking into account global --secret-keyring flag.
This flag is now in osutil.
3) New or modified funcs in osutil
4) Made sure --gpgkey works too.
5) Cleaned up error messages and hints.
Context: http://camlistore.org/issue/364http://camlistore.org/issue/368
Change-Id: I2e51032ed0597da656db100d72f5588b37308e1a
Related changes:
Split docker-related test-helper functions from pkg/sorted/mongo.
These helper functions are now also used in the pkg/blobserver/mongo
tests too.
Also fixed a typo in a comment in pkg/blob/fetcher.go and a missing variable in
debug output in pkg/blobserver/storagetest/storagetest.go
Addresses http://camlistore.org/issue/127
Change-Id: I8b6f57f9ced066d6f83788fdcc87be6619c65c3c
Conflicts:
pkg/blob/fetcher.go
Imports all images from all albums, and puts each image in its album.
Each album is linked under "Picasa (<username>)".
Tries to skip already imported files (check based on album/filename).
See Issue #391.
Change-Id: If00751671a429891c05bbe41f59c1421b2ff2de8
Keep track of missing dependencies both in memory and in the index's
underlying sorted.KeyValue. When we see a dependent blob arrive, see
if we can reindex things.
Fixes camlistore.org/issue/102
Change-Id: I3d8cfc463e4b8c9d158be8f9656e772839b093b9
StreamingFetcher is now just Fetcher, and its FetchStreaming is now
just Fetch.
SeekFetcher is gone. Blobs are max 16 MB anyway, so we can slurp to
memory when needed. The main thing that cared about SeekFetcher
was the GET handler, ServeBlobref, because http.ServeContent needed
one for range requests. That's rewritten in an earlier commit, using
the FakeSeeker from another earlier commit.
Lot of code got simpler as a result.
Change-Id: Ib819413e48a8f9b8d97f596d0fbf771dab211f11
Items can be selected and effectively hidden from a UI point of view.
For now, since only the selected permanode is marked as deleted, and
GC is not yet implemented, no content is actually deleted. This is
really more like hiding the content permanently without deleting it.
Change-Id: I6ebc228905e3612503f153ff3bbb44ba24a43d09
Creates new page @ /ui/mobile.html for generating a QR code that
embeds configuration data for setting up mobile clients.
Imports code.google.com/p/rsc/{gf256,qr} version:
parent: 149:a3cbaf2339c4 tip
This addresses the server and web components of
https://camlistore.org/issue/372
Change-Id: If9239dd138707080afd7dedb5770d04893cbf0ba
This was caused by a bug in Chrome: wheel events stop firing when source
element is removed from DOM. Workaround: leave element in DOM for awhile.
On the upside, React makes this clean to implement. No need to keep state
to remember to remove the dangling element. It automatically gets removed
when it is no longer the last element to receive the wheel event!
Change-Id: I1b9372bfd1edcfb532f6825d99044a314048c3b4
This improves the performance of Promise construction, which
improves the performance of dropping large numbers of files onto
the UI at once.
There is still more we could do to improve dropping large numbers
of files (probably we should implement a work queue and not try
to start uploading them all in parallel), but this is a quick
solution and probably helps other parts of the code as well.
Change-Id: I398ba8d6776b38b1a61a22598099c52dc2130469
There is still a lot of work to do on mobile, but this makes it
slightly better. Increases the default scale to something sane.
Fix the bug where we don't layout using entire width.
window.outerWidth is somehow completely busted on mobile.
Change-Id: Id574d6ee14ba59f6e835725d378f228796ff7ccf
Was caused by incorrectly building child component props in
willReceiveProps() before new props are actually set.
Simplified code to always rebuild child component props in render().
Removed overly-clever code that was trying to filter out some
prop updates. We don't send spurious prop updates in any case that
I can think of.
Change-Id: Ie067b2d667517c24524863eac62baef0178608cb
The web UI was implying 'folderness' by looking for certain claims against
permanodes. This won't allow us to represent empty dynamic folders, which seems
wrong.
Thus I've changed it to just represent all pemanodes as folders. In the future,
if there are more specific types of permanodes, we can handle that.
Change-Id: I73523634114c61f33705a88a4147e13ad60c59d6
1) We don't need the isMounted() check anymore because we're not poking at the DOM.
2) Detail() now needs a history param.
Change-Id: I420e3211fde40673e3123a2b18460d0d12f32a70
Was basically caused by layout<->scrollbar interaction loop. Fix was to
calculate size of scrollbar and take it into account during layout.
At the same time, I decided to clean up the code and put the search results
scrollbar actually within BlobItemContainer, rather than having
BlobItemContainer reach up and change scroll styles of document.
This necessitated getting rid of some of the clever transform origin
stuff I was doing before, but it is less needed now.
Change-Id: I8641d87d8e593336aed48acef8b31680a52d7e6c
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