Author: solomax
Date: Fri Feb 7 05:39:03 2014
New Revision: 1565538
URL: http://svn.apache.org/r1565538
Log:
[OPENMEETINGS-921] auto update is added to the sizes;
fix is merged into the trunk
Added:
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dto/file/RecordingContainerData.java
Modified:
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
Modified:
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
(original)
+++
openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
Fri Feb 7 05:39:03 2014
@@ -18,9 +18,14 @@
*/
package org.apache.openmeetings.db.dao.record;
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import java.io.File;
import java.util.Date;
import java.util.List;
@@ -34,7 +39,6 @@ import org.apache.openmeetings.db.dto.fi
import org.apache.openmeetings.db.dto.file.RecordingObject;
import org.apache.openmeetings.db.entity.record.FlvRecording;
import org.apache.openmeetings.db.entity.user.Organisation_Users;
-import org.apache.openmeetings.util.OmFileHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -570,8 +574,7 @@ public class FlvRecordingDao {
long homeFileSize = 0;
for (FlvRecording homeFlvRecording : homeFlvRecordings)
{
- homeFileSize += this
-
.getSizeOfDirectoryAndSubs(homeFlvRecording);
+ homeFileSize +=
getRecordingSize(homeFlvRecording);
}
containerData.setUserHomeSize(homeFileSize);
@@ -584,8 +587,7 @@ public class FlvRecordingDao {
List<FlvRecording>publicFlvRecordings =
getFlvRecordingRootByPublic(ou.getOrganisation().getOrganisation_id());
//get sizes
for (FlvRecording publicFlvRecording :
publicFlvRecordings) {
- publicFileSize += this
-
.getSizeOfDirectoryAndSubs(publicFlvRecording);
+ publicFileSize +=
getRecordingSize(publicFlvRecording);
}
}
containerData.setPublicFileSize(publicFileSize);
@@ -597,43 +599,27 @@ public class FlvRecordingDao {
return null;
}
- private long getSizeOfDirectoryAndSubs(FlvRecording rec) {
- try {
- long fileSize = 0;
-
- if (rec.getFileHash() != null) {
- File tFile = new
File(OmFileHelper.getStreamsHibernateDir(), rec.getFileHash());
- if (tFile.exists()) {
- fileSize += tFile.length();
- }
- }
-
- if (rec.getAlternateDownload() != null) {
- File dFile = new
File(OmFileHelper.getStreamsHibernateDir(), rec.getAlternateDownload());
- if (dFile.exists()) {
- fileSize += dFile.length();
- }
- }
- if (rec.getPreviewImage() != null) {
- File iFile = new
File(OmFileHelper.getStreamsHibernateDir(), rec.getPreviewImage());
- if (iFile.exists()) {
- fileSize += iFile.length();
- }
- }
-
- List<FlvRecording> flvRecordings =
getFlvRecordingByParent(
- rec.getFlvRecordingId());
+ private long getRecordingSize(FlvRecording r) {
+ long size = 0;
- for (FlvRecording flvRecording : flvRecordings) {
- fileSize +=
getSizeOfDirectoryAndSubs(flvRecording);
- }
-
- return fileSize;
-
- } catch (Exception err) {
- log.error("[getSizeOfDirectoryAndSubs] ", err);
+ if (isRecordingExists(r.getFileHash())) {
+ size += getRecording(r.getFileHash()).length();
+ }
+ if (isRecordingExists(r.getAlternateDownload())) {
+ size += getRecording(r.getAlternateDownload()).length();
+ }
+ if (isRecordingExists(r.getPreviewImage())) {
+ size += getRecording(r.getPreviewImage()).length();
}
- return 0;
+ if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+ size += getMp4Recording(r.getFileHash()).length();
+ }
+ if (isRecordingExists(r.getFileHash() + OGG_EXTENSION)) {
+ size += getOggRecording(r.getFileHash()).length();
+ }
+ for (FlvRecording flvRecording :
getFlvRecordingByParent(r.getFlvRecordingId())) {
+ size += getRecordingSize(flvRecording);
+ }
+ return size;
}
-
}
Modified:
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
(original)
+++
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
Fri Feb 7 05:39:03 2014
@@ -38,12 +38,10 @@
<tr>
<td><wicket:ommessage
key="923"/></td>
<td><span
wicket:id="homeSize"></span></td>
- <td>Mb</td>
</tr>
<tr>
<td><wicket:ommessage
key="924"/></td>
<td><span
wicket:id="publicSize"></span></td>
- <td>Mb</td>
</tr>
</table>
</div>
Modified:
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
(original)
+++
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
Fri Feb 7 05:39:03 2014
@@ -19,6 +19,7 @@
package org.apache.openmeetings.web.user.record;
import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
import static org.apache.openmeetings.web.app.Application.getBean;
import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -41,6 +42,7 @@ import org.apache.openmeetings.web.commo
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
import
org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
@@ -51,7 +53,7 @@ import org.apache.wicket.markup.repeater
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.time.Duration;
public class RecordingsPanel extends UserPanel {
private static final long serialVersionUID = 1321258690447136958L;
@@ -60,11 +62,11 @@ public class RecordingsPanel extends Use
private final VideoInfo info = new VideoInfo("info");
private final RecordingTree myTree;
private final IModel<FlvRecording> rm = new
CompoundPropertyModel<FlvRecording>(new FlvRecording());
+ private final IModel<String> homeSize = Model.of((String)null);
+ private final IModel<String> publicSize = Model.of((String)null);
private final RecordingErrorsDialog errorsDialog = new
RecordingErrorsDialog("errors", Model.of((FlvRecording)null));
private RecordingTree selected;
- private RecordingContainerData recordingContainerData =
getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
-
public RecordingsPanel(String id) {
super(id);
rm.getObject().setFlvRecordingId(-3);
@@ -126,11 +128,28 @@ public class RecordingsPanel extends Use
.add(new RecordingTree("publicrecordings", new
PublicRecordingTreeProvider()))
.setOutputMarkupId(true)
);
- add(new Label("homeSize", new
PropertyModel<RecordingContainerData>(recordingContainerData,
"userHomeSize"))); //new Label("homeSize", "")
- add(new Label("publicSize", new
PropertyModel<RecordingContainerData>(recordingContainerData,
"publicFileSize")));
+ updateSizes();
+ final Label homeSizeLbl = new Label("homeSize", homeSize);
+ final Label publicSizeLbl = new Label("publicSize", publicSize);
+ add(homeSizeLbl.setOutputMarkupId(true),
publicSizeLbl.setOutputMarkupId(true));
+ add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
+ private static final long serialVersionUID = 1L;
+
+ protected void onPostProcessTarget(AjaxRequestTarget
target) {
+ updateSizes();
+ target.add(homeSizeLbl, publicSizeLbl);
+ }
+ });
add(video, info, errorsDialog);
}
+ private void updateSizes() {
+ RecordingContainerData sizeData =
getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
+ if (sizeData != null) {
+
homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
+
publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
+ }
+ }
//FIXME need to be generalized to use as Room files explorer
class RecordingTree extends DefaultNestedTree<FlvRecording> {
private static final long serialVersionUID =
2527395034256868022L;
Modified:
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
(original)
+++
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
Fri Feb 7 05:39:03 2014
@@ -18,6 +18,12 @@
*/
package org.apache.openmeetings.db.dao.record;
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import java.util.Date;
@@ -28,10 +34,14 @@ import javax.persistence.NoResultExcepti
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.RecordingContainerData;
import org.apache.openmeetings.db.dto.file.RecordingObject;
import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
@@ -40,9 +50,13 @@ import org.springframework.transaction.a
*/
@Transactional
public class FlvRecordingDao {
+
private static final Logger log =
Red5LoggerFactory.getLogger(FlvRecordingDao.class, webAppRootKey);
+
@PersistenceContext
private EntityManager em;
+ @Autowired
+ private UserDao userDao;
public FlvRecording get(Long flvRecordingId) {
try {
@@ -550,5 +564,62 @@ public class FlvRecordingDao {
log.error("[moveFile]: ", ex2);
}
}
+
+ public RecordingContainerData getRecordingContainerData(long userId) {
+ try {
+ RecordingContainerData containerData = new
RecordingContainerData();
+
+ // User Home Recordings
+ List<FlvRecording> homeFlvRecordings =
getFlvRecordingRootByOwner(userId);
+ long homeFileSize = 0;
+
+ for (FlvRecording homeFlvRecording : homeFlvRecordings)
{
+ homeFileSize +=
getRecordingSize(homeFlvRecording);
+ }
+
+ containerData.setUserHomeSize(homeFileSize);
+
+ // Public Recordings
+ long publicFileSize = 0;
+
+ //get all organizations the user can view
+ for (Organisation_Users ou :
userDao.get(userId).getOrganisation_users()) {
+ List<FlvRecording>publicFlvRecordings =
getFlvRecordingRootByPublic(ou.getOrganisation().getOrganisation_id());
+ //get sizes
+ for (FlvRecording publicFlvRecording :
publicFlvRecordings) {
+ publicFileSize +=
getRecordingSize(publicFlvRecording);
+ }
+ }
+ containerData.setPublicFileSize(publicFileSize);
+
+ return containerData;
+ } catch (Exception ex2) {
+ log.error("[getRecordingContainerData]: ", ex2);
+ }
+ return null;
+ }
+
+ private long getRecordingSize(FlvRecording r) {
+ long size = 0;
+ if (isRecordingExists(r.getFileHash())) {
+ size += getRecording(r.getFileHash()).length();
+ }
+ if (isRecordingExists(r.getAlternateDownload())) {
+ size += getRecording(r.getAlternateDownload()).length();
+ }
+ if (isRecordingExists(r.getPreviewImage())) {
+ size += getRecording(r.getPreviewImage()).length();
+ }
+ if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+ size += getMp4Recording(r.getFileHash()).length();
+ }
+ if (isRecordingExists(r.getFileHash() + OGG_EXTENSION)) {
+ size += getOggRecording(r.getFileHash()).length();
+ }
+ for (FlvRecording flvRecording :
getFlvRecordingByParent(r.getFlvRecordingId())) {
+ size += getRecordingSize(flvRecording);
+ }
+ return size;
+ }
}
Added:
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dto/file/RecordingContainerData.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dto/file/RecordingContainerData.java?rev=1565538&view=auto
==============================================================================
---
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dto/file/RecordingContainerData.java
(added)
+++
openmeetings/trunk/singlewebapp/src/db/java/org/apache/openmeetings/db/dto/file/RecordingContainerData.java
Fri Feb 7 05:39:03 2014
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+import java.io.Serializable;
+
+public class RecordingContainerData implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7211000652612571746L;
+
+ private long userHomeSize;
+ private long publicFileSize;
+
+ public long getUserHomeSize() {
+ return userHomeSize;
+ }
+ public void setUserHomeSize(long userHomeSize) {
+ this.userHomeSize = userHomeSize;
+ }
+ public long getPublicFileSize() {
+ return publicFileSize;
+ }
+ public void setPublicFileSize(long publicFileSize) {
+ this.publicFileSize = publicFileSize;
+ }
+
+}
Modified:
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
(original)
+++
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
Fri Feb 7 05:39:03 2014
@@ -38,12 +38,10 @@
<tr>
<td><wicket:ommessage
key="923"/></td>
<td><span
wicket:id="homeSize"></span></td>
- <td>Mb</td>
</tr>
<tr>
<td><wicket:ommessage
key="924"/></td>
<td><span
wicket:id="publicSize"></span></td>
- <td>Mb</td>
</tr>
</table>
</div>
Modified:
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1565538&r1=1565537&r2=1565538&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
(original)
+++
openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
Fri Feb 7 05:39:03 2014
@@ -19,6 +19,7 @@
package org.apache.openmeetings.web.user.record;
import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
import static org.apache.openmeetings.web.app.Application.getBean;
import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -31,6 +32,7 @@ import java.util.List;
import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.RecordingContainerData;
import org.apache.openmeetings.db.entity.record.FlvRecording;
import org.apache.openmeetings.db.entity.user.Organisation_Users;
import org.apache.openmeetings.web.app.WebSession;
@@ -40,6 +42,7 @@ import org.apache.openmeetings.web.commo
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
import
org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
@@ -50,6 +53,7 @@ import org.apache.wicket.markup.repeater
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
public class RecordingsPanel extends UserPanel {
private static final long serialVersionUID = 1321258690447136958L;
@@ -58,9 +62,11 @@ public class RecordingsPanel extends Use
private final VideoInfo info = new VideoInfo("info");
private final RecordingTree myTree;
private final IModel<FlvRecording> rm = new
CompoundPropertyModel<FlvRecording>(new FlvRecording());
+ private final IModel<String> homeSize = Model.of((String)null);
+ private final IModel<String> publicSize = Model.of((String)null);
private final RecordingErrorsDialog errorsDialog = new
RecordingErrorsDialog("errors", Model.of((FlvRecording)null));
private RecordingTree selected;
-
+
public RecordingsPanel(String id) {
super(id);
rm.getObject().setFlvRecordingId(-3);
@@ -122,11 +128,28 @@ public class RecordingsPanel extends Use
.add(new RecordingTree("publicrecordings", new
PublicRecordingTreeProvider()))
.setOutputMarkupId(true)
);
- add(new Label("homeSize", ""));
- add(new Label("publicSize", ""));
+ updateSizes();
+ final Label homeSizeLbl = new Label("homeSize", homeSize);
+ final Label publicSizeLbl = new Label("publicSize", publicSize);
+ add(homeSizeLbl.setOutputMarkupId(true),
publicSizeLbl.setOutputMarkupId(true));
+ add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
+ private static final long serialVersionUID = 1L;
+
+ protected void onPostProcessTarget(AjaxRequestTarget
target) {
+ updateSizes();
+ target.add(homeSizeLbl, publicSizeLbl);
+ }
+ });
add(video, info, errorsDialog);
}
+ private void updateSizes() {
+ RecordingContainerData sizeData =
getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
+ if (sizeData != null) {
+
homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
+
publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
+ }
+ }
//FIXME need to be generalized to use as Room files explorer
class RecordingTree extends DefaultNestedTree<FlvRecording> {
private static final long serialVersionUID =
2527395034256868022L;