Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions client/dive-common/components/ControlsContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default defineComponent({
setup(_, { emit }) {
const handler = useHandler();
const currentView = ref('Detections');
const ticks = ref([0.25, 0.5, 0.75, 1.0, 2.0, 4.0, 8.0]);
const ticks = ref([0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 7.0, 8.0]);
const cameraStore = useCameraStore();
const multiCam = ref(cameraStore.camMap.value.size > 1);
const selectedCamera = useSelectedCamera();
Expand Down Expand Up @@ -319,7 +319,6 @@ export default defineComponent({
open-on-hover
close-delay="500"
open-delay="250"
rounded="pill"
>
<template #activator="{ on }">
<v-icon
Expand All @@ -328,7 +327,7 @@ export default defineComponent({
> {{ volume === 0 ? 'mdi-volume-off' : 'mdi-volume-medium' }}
</v-icon>
</template>
<v-card style="overflow:hidden; width:30px">
<v-card style="overflow:hidden; width:60px;">
<v-slider
:value="volume"
min="0"
Expand All @@ -337,6 +336,10 @@ export default defineComponent({
vertical
@change="setVolume"
/>
<v-row dense align="center">
<b class="ma-auto">{{ volume * 100 }}%</b>
</v-row>

</v-card>
</v-menu>
</span>
Expand Down Expand Up @@ -366,20 +369,22 @@ export default defineComponent({
</v-icon>
</v-badge>
</template>
<v-card style="overflow:hidden; width:90px;">
<v-card style="overflow:hidden; width:60px;">
<v-slider
:value="ticks.indexOf(speed)"
min="0"
max="6"
:max="ticks.length - 1"
step="1"
:tick-labels="ticks"
ticks="always"
:tick-size="4"
style="font-size:0.75em;"
vertical
@change="setSpeed(ticks[$event])"
hide-details
@input="setSpeed(ticks[$event])"
/>

<v-row dense align="center">
<b class="ma-auto">{{ speed }}x</b>
</v-row>
</v-card>
</v-menu>
</span>
Expand Down
3 changes: 2 additions & 1 deletion client/platform/desktop/frontend/components/Recent.vue
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,15 @@ export default defineComponent({
importing.value = true;
await request(async () => {
const conversionArgs = await api.finalizeImport(args);
api.convert(conversionArgs);
pendingImportPayload.value = null; // close dialog
if (conversionArgs.mediaList.length === 0) {
router.push({
name: 'viewer',
params: { id: conversionArgs.meta.id },
});
} else {
// Queue conversion job
api.convert(conversionArgs);
// Display new data and await transcoding to complete
const recentsMeta = await api.loadMetadata(conversionArgs.meta.id);
setRecents(recentsMeta);
Expand Down
8 changes: 7 additions & 1 deletion client/src/components/annotators/ImageAnnotator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,13 @@ export default defineComponent({

if (local.imgs.length) {
const imgInternal = cacheFrame(0);
imgInternal.onloadPromise.then(() => {
imgInternal.onloadPromise.then(async () => {
try {
await imgInternal.image.decode();
} catch (error) {
emit('large-image-warning', true);
return;
}
initializeViewer(imgInternal.image.naturalWidth, imgInternal.image.naturalHeight);
const quadFeatureLayer = geoViewer.value.createLayer('feature', {
features: ['quad'],
Expand Down
2 changes: 1 addition & 1 deletion client/src/components/annotators/LargeImageAnnotator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ export default defineComponent({
resp2.tileWidth,
resp2.tileHeight,
);
local.nextLayer = geoViewer.value.createLayer('osm', newParams.layer);
local.nextLayer = geoViewer.value.createLayer('osm', { ...localParams, ...newParams.layer });
local.nextLayer._options.maxLevel = newParams.layer.maxLevel;
local.nextLayer._options.tileWidth = newParams.layer.tileWidth;
local.nextLayer._options.tileHeight = newParams.layer.tileWidth;
Expand Down
7 changes: 7 additions & 0 deletions server/dive_server/crud_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -719,3 +719,10 @@ def convert_large_image(
newjob.job[constants.JOBCONST_PRIVATE_QUEUE] = job_is_private
newjob.job[constants.JOBCONST_DATASET_ID] = dsFolder["_id"]
Job().save(newjob.job)
Notification().createNotification(
type='job_status',
data=newjob.job,
user=user,
expires=datetime.now() + timedelta(seconds=30),
)

24 changes: 21 additions & 3 deletions server/dive_tasks/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import zipfile

from GPUtil import getGPUs
from girder_client import GirderClient
from girder_client import GirderClient, HttpError
from girder_worker.app import app
from girder_worker.task import Task
from girder_worker.utils import JobManager, JobStatus
Expand Down Expand Up @@ -648,7 +648,7 @@ def convert_images(self: Task, folderId, user_id: str, user_login: str):
command = ["ffmpeg", "-i", str(item_path), str(new_item_path)]
utils.stream_subprocess(self, context, manager, {'args': command})
gc.uploadFileToFolder(folderId, new_item_path)
gc.delete(f"item/{item['_id']}")
gc.delete(f"item/{str(item['_id'])}")

gc.addMetadataToFolder(
str(folderId),
Expand Down Expand Up @@ -677,7 +677,25 @@ def convert_large_images(self: Task, folderId, user_id: str, user_login: str):
]
for item in items_to_convert:
# Assumes 1 file per item
gc.post(f'/item/{item["_id"]}/tiles')
try:
# Does it already have tiles?
gc.get(f'item/{item["_id"]}/tiles')
manager.write(f'Skipping {item["name"]}, already a large image\n')
continue
except HttpError as e:
# Safely parse JSON if possible
message = ""
try:
message = e.response.json().get("message", "")
except Exception:
pass # non-JSON response, leave message empty
# This is the Girder message when no large image exists
if e.status == 400 and message == "No large image file in this item.":
manager.write(f'Converting {item["name"]} to large image\n')
gc.post(f'item/{item["_id"]}/tiles')
else:
# Re-raise unexpected errors to fail the job
raise
gc.addMetadataToFolder(
str(folderId),
{"type": constants.LargeImageType}, # mark the parent folder as able to annotate.
Expand Down
Loading