Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F140287
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
24 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/src/contents/ui/EventView.qml b/src/contents/ui/EventView.qml
index dc75d98..8a3d46c 100644
--- a/src/contents/ui/EventView.qml
+++ b/src/contents/ui/EventView.qml
@@ -1,186 +1,208 @@
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import Qt.labs.qmlmodels 1.0
import org.kde.kirigami 2.13 as Kirigami
import 'event-types' as Types
Item {
id: eventView
property var event
property var sender
property var stateKeyUser
property var messageType: getMessageType(event)
property var iconSize: Kirigami.Units.iconSizes.large
property var senderNameSize: Kirigami.Units.gridUnit * 1.2
height: loader.item.implicitHeight
+ anchors.left: parent.left
+ anchors.right: parent.right
//padding: Kirigami.Units.largeSpacing
Component {
id: textEV
Types.Text {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: emoteEV
Types.Emote {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: noticeEV
Types.Notice {
event: eventView.event
sender: eventView.sender
}
}
Component {
id: stateEV
Types.State {
event: eventView.event
sender: eventView.sender
stateKeyUser: eventView.stateKeyUser
}
}
Component {
id: imageEV
Types.Image {
event: eventView.event
sender: eventView.sender
}
}
+ Component {
+ id: fileEV
+ Types.File {
+ event: eventView.event
+ sender: eventView.sender
+ }
+ }
+
+ Component {
+ id: videoEV
+ Types.Video {
+ event: eventView.event
+ sender: eventView.sender
+ }
+ }
+
+ Component {
+ id: audioEV
+ Types.Audio {
+ event: eventView.event
+ sender: eventView.sender
+ }
+ }
+
Component {
id: unknownEV
Label {
text: 'unknown event'
}
}
+ /* ColumnLayout { */
+ /* id: layout */
+ /* anchors.left: eventView.left */
+ /* anchors.right: eventView.right */
+ /* } */
+
Loader {
sourceComponent: getSource(messageType)
id: loader
+ /* onLoaded: { */
+ /* item.parent = layout; */
+ /* } */
+ anchors.left: eventView.left
+ anchors.right: eventView.right
}
+
function getSource(t) {
switch (t) {
case 'text':
return textEV;
case 'emote':
return emoteEV;
case 'notice':
return noticeEV;
case 'state':
return stateEV;
case 'image':
return imageEV;
+ case 'file':
+ return fileEV;
+
+ case 'video':
+ return videoEV;
+
+ case 'audio':
+ return audioEV;
+
default:
return unknownEV;
}
}
- /* DelegateChooser { */
- /* id: inner */
- /* role: 'messageType' */
- /* DelegateChoice { */
- /* roleValue: 'text' */
- /* Types.Simple { */
- /* event: eventView.event */
- /* sender: eventView.sender */
- /* } */
- /* } */
- /* DelegateChoice { */
- /* roleValue: 'unknown' */
- /* Label { */
- /* text: 'unknown event' */
- /* } */
- /* } */
- /* DelegateChoice { */
- /* roleValue: '' */
- /* Label { */
- /* text: '???' */
- /* } */
- /* } */
-
- /* } */
-
function getMessageType(e) {
if (e.isState) {
return 'state';
}
switch (e.type) {
case 'm.room.message':
switch (e.content.msgtype) {
case 'm.text':
console.log('msg type=text');
return 'text';
case 'm.emote':
return 'emote';
case 'm.notice':
return 'notice';
case 'm.image':
return 'image';
case 'm.file':
return 'file';
case 'm.audio':
return 'audio';
case 'm.video':
return 'video';
case 'm.location':
return 'location';
default:
console.log('msg type=unknown');
return 'unknown';
}
default:
console.log('msg type=unknown');
return 'unknown';
}
}
}
diff --git a/src/contents/ui/RoomTimelineView.qml b/src/contents/ui/RoomTimelineView.qml
index 2a68c03..f588473 100644
--- a/src/contents/ui/RoomTimelineView.qml
+++ b/src/contents/ui/RoomTimelineView.qml
@@ -1,74 +1,75 @@
/*
* Copyright (C) 2020 Tusooa Zhu <tusooa@vista.aero>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
ListView {
id: roomTimelineView
property var timeline
property var eventIds: timeline.eventIds
property string selectedEventId
spacing: Kirigami.Units.largeSpacing
- width: parent.width
- Layout.fillHeight: true
+ //width: parent.width
+ //Layout.fillHeight: true
+ anchors.fill: parent
model: timeline.count
- Layout.minimumHeight: childrenRect.height
+ //Layout.minimumHeight: childrenRect.height
currentIndex: -1
//currentIndex: eventIds.indexOf(selectedEventId)
//onModelChanged: currentIndex = Qt.binding(function() { return eventIds.indexOf(selectedEventId) })
delegate: EventView {
event: timeline.at(index)
sender: room.member(event.sender)
stateKeyUser: event.stateKey ? room.member(event.stateKey) : {}
}
/* Kirigami.BasicListItem { */
/* property var item: timeline.at(index) */
/* //onClicked: roomTimelineView.selectedEventId = item.eventId */
/* onClicked: {} */
/* checkable: false */
/* checked: false */
/* //onClicked: print("clicked room %1".arg(index)) */
/* //checkable: true */
/* //checked: roomTimelineView.selectedEventId == item.eventId */
/* //autoExclusive: true */
/* Label { */
/* text: i18n("Message from %1 of type %2: %3", item.sender, item.type, item.content) */
/* } */
/* /\* actions: [ */
/* Kirigami.Action { */
/* text: i18n("Set as favourite") */
/* iconName: "non-starred-symbolic" */
/* onTriggered: showPassiveNotification(i18n("Set %1 as favourite", item.name)) */
/* } */
/* ]*\/ */
/* } */
}
diff --git a/src/contents/ui/event-types/Image.qml b/src/contents/ui/event-types/Audio.qml
similarity index 70%
copy from src/contents/ui/event-types/Image.qml
copy to src/contents/ui/event-types/Audio.qml
index 5f922af..6ec18fa 100644
--- a/src/contents/ui/event-types/Image.qml
+++ b/src/contents/ui/event-types/Audio.qml
@@ -1,47 +1,60 @@
-
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
+import QtMultimedia 5.15
+
import org.kde.kirigami 2.13 as Kirigami
import '..' as Kazv
Simple {
id: upper
property var gender: 'neutral'
property var body: event.content.body
property var mxcUri: event.content.url
- property var imageUri: matrixSdk.mxcUriToHttp(mxcUri)
+ property var audioUri: matrixSdk.mxcUriToHttp(mxcUri)
Kazv.Bubble {
ColumnLayout {
Label {
- text: l10n.get('event-message-image-sent', { gender, body })
+ text: l10n.get('event-message-audio-sent', { gender, body })
}
- Image {
- source: imageUri
+ Audio {
+ id: audio
+ source: audioUri
+ autoLoad: false
+ autoPlay: false
+ }
+ Label {
+ text: l10n.get('event-message-audio-play-action')
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ audio.play()
+ }
+ }
}
}
}
}
diff --git a/src/contents/ui/event-types/Image.qml b/src/contents/ui/event-types/File.qml
similarity index 86%
copy from src/contents/ui/event-types/Image.qml
copy to src/contents/ui/event-types/File.qml
index 5f922af..99d444e 100644
--- a/src/contents/ui/event-types/Image.qml
+++ b/src/contents/ui/event-types/File.qml
@@ -1,47 +1,46 @@
-
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
import '..' as Kazv
Simple {
id: upper
property var gender: 'neutral'
property var body: event.content.body
property var mxcUri: event.content.url
- property var imageUri: matrixSdk.mxcUriToHttp(mxcUri)
+ property var fileUri: matrixSdk.mxcUriToHttp(mxcUri)
Kazv.Bubble {
ColumnLayout {
Label {
- text: l10n.get('event-message-image-sent', { gender, body })
+ text: l10n.get('event-message-file-sent', { gender, body })
}
- Image {
- source: imageUri
+ Label {
+ text: fileUri
}
}
}
}
diff --git a/src/contents/ui/event-types/Image.qml b/src/contents/ui/event-types/Image.qml
index 5f922af..0cc5935 100644
--- a/src/contents/ui/event-types/Image.qml
+++ b/src/contents/ui/event-types/Image.qml
@@ -1,47 +1,51 @@
-
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import org.kde.kirigami 2.13 as Kirigami
import '..' as Kazv
Simple {
id: upper
property var gender: 'neutral'
property var body: event.content.body
property var mxcUri: event.content.url
property var imageUri: matrixSdk.mxcUriToHttp(mxcUri)
Kazv.Bubble {
ColumnLayout {
+ id: layout
Label {
text: l10n.get('event-message-image-sent', { gender, body })
}
Image {
+ id: image
source: imageUri
+ Layout.maximumWidth: layout.width
+ Layout.preferredHeight: implicitHeight / implicitWidth * width
+ fillMode: Image.PreserveAspectFit
}
}
}
}
diff --git a/src/contents/ui/event-types/Image.qml b/src/contents/ui/event-types/Video.qml
similarity index 74%
copy from src/contents/ui/event-types/Image.qml
copy to src/contents/ui/event-types/Video.qml
index 5f922af..0aa6e52 100644
--- a/src/contents/ui/event-types/Image.qml
+++ b/src/contents/ui/event-types/Video.qml
@@ -1,47 +1,58 @@
-
/*
* Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
*
* This file is part of kazv.
*
* kazv is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* kazv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with kazv. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick 2.2
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
+import QtMultimedia 5.15
+
import org.kde.kirigami 2.13 as Kirigami
import '..' as Kazv
Simple {
id: upper
property var gender: 'neutral'
property var body: event.content.body
property var mxcUri: event.content.url
- property var imageUri: matrixSdk.mxcUriToHttp(mxcUri)
+ property var videoUri: matrixSdk.mxcUriToHttp(mxcUri)
Kazv.Bubble {
ColumnLayout {
Label {
- text: l10n.get('event-message-image-sent', { gender, body })
+ text: l10n.get('event-message-video-sent', { gender, body })
}
- Image {
- source: imageUri
+ Video {
+ id: video
+ source: videoUri
+ autoLoad: false
+ autoPlay: false
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ video.play()
+ }
+ }
}
}
}
}
diff --git a/src/l10n/cmn-Hans/100-ui.ftl b/src/l10n/cmn-Hans/100-ui.ftl
index a8c062a..5b9e2e3 100644
--- a/src/l10n/cmn-Hans/100-ui.ftl
+++ b/src/l10n/cmn-Hans/100-ui.ftl
@@ -1,73 +1,77 @@
### Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
###
### This file is part of kazv.
###
### kazv is free software: you can redistribute it and/or modify
### it under the terms of the GNU Affero General Public License as
### published by the Free Software Foundation, either version 3 of the
### License, or (at your option) any later version.
###
### kazv is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU Affero General Public License for more details.
###
### You should have received a copy of the GNU Affero General Public License
### along with kazv. If not, see <https://www.gnu.org/licenses/>.
app-title = { -kt-app-name }
global-drawer-title = { -kt-app-name }
global-drawer-action-switch-account = 切换账号
global-drawer-action-hard-logout = 登出
empty-room-page-title = 没有选中房间
empty-room-page-description = 当前没有选中的房间。
login-page-title = 登录
login-page-userid-prompt = 用户 id:
login-page-userid-input-placeholder = 例如: @foo:example.org
login-page-password-prompt = 密码:
login-page-login-button = 登录
login-page-close-button = 关闭
login-page-existing-sessions-prompt = 从已有会话中选一个:
login-page-alternative-password-login-prompt = 或者用用户 id 和密码启动新会话:
login-page-restore-session-button = 恢复会话
main-page-title = { -kt-app-name } - { $userId }
main-page-recent-tab-title = 最近
main-page-people-tab-title = 人们
main-page-rooms-tab-title = 房间
room-list-view-room-item-title = { $name } ({ $roomId })
room-list-view-room-item-fav-action = 设为最爱
room-list-view-room-item-fav-action-notification = 把 { $name } 设为了最爱
send-message-box-input-placeholder = 在此输入您的讯息...
## 状态事件
## 通用参数:
## gender = 发送者的性别(male/female/neutral)
## stateKeyUser = state key 用户的名字
## stateKeyUserGender = state key 用户的性别
member-state-joined-room = 加入了房间。
member-state-changed-name-and-avatar = 修改了名字和头像。
member-state-changed-name = 修改了名字。
member-state-changed-avatar = 修改了头像。
member-state-invited = 把 { $stateKeyUser } 邀请到了本房间。
member-state-left = 离开了房间。
member-state-kicked = 踢出了 { $stateKeyUser }。
member-state-banned = 封禁了 { $stateKeyUser }。
member-state-unbanned = 解封了 { $stateKeyUser }。
state-room-created = 创建了房间。
state-room-name-changed = 把房间名字改成了 { $newName }。
state-room-topic-changed = 把房间话题改成了 { $newTopic }。
state-room-avatar-changed = 修改了房间头像。
state-room-pinned-events-changed = 修改了房间的置顶讯息。
state-room-alias-changed = 修改了房间的别名。
state-room-join-rules-changed = 修改了房间的加入规则。
state-room-power-levels-changed = 修改了房间的权限。
state-room-encryption-activated = 对本房间启用了加密。
event-message-image-sent = 发送了图片「{ $body }」。
+event-message-file-sent = 发送了文件「{ $body }」。
+event-message-video-sent = 发送了视频「{ $body }」。
+event-message-audio-sent = 发送了音频「{ $body }」。
+event-message-audio-play-audio = 播放音频
diff --git a/src/l10n/en/100-ui.ftl b/src/l10n/en/100-ui.ftl
index 47528b3..faa4f47 100644
--- a/src/l10n/en/100-ui.ftl
+++ b/src/l10n/en/100-ui.ftl
@@ -1,85 +1,89 @@
### Copyright (C) 2020-2021 Tusooa Zhu <tusooa@kazv.moe>
###
### This file is part of kazv.
###
### kazv is free software: you can redistribute it and/or modify
### it under the terms of the GNU Affero General Public License as
### published by the Free Software Foundation, either version 3 of the
### License, or (at your option) any later version.
###
### kazv is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU Affero General Public License for more details.
###
### You should have received a copy of the GNU Affero General Public License
### along with kazv. If not, see <https://www.gnu.org/licenses/>.
app-title = { -kt-app-name }
global-drawer-title = { -kt-app-name }
global-drawer-action-switch-account = Switch account
global-drawer-action-hard-logout = Logout
empty-room-page-title = No rooms selected
empty-room-page-description = There is no room selected now.
login-page-title = Log in
login-page-userid-prompt = User id:
login-page-userid-input-placeholder = E.g.: @foo:example.org
login-page-password-prompt = Password:
login-page-login-button = Log in
login-page-close-button = Close
login-page-existing-sessions-prompt = Choose from one of the existing sessions:
login-page-alternative-password-login-prompt = Or start a new session with user id and password:
login-page-restore-session-button = Restore session
main-page-title = { -kt-app-name } - { $userId }
main-page-recent-tab-title = Recent
main-page-people-tab-title = People
main-page-rooms-tab-title = Rooms
room-list-view-room-item-title = { $name } ({ $roomId })
room-list-view-room-item-fav-action = Set as favourite
room-list-view-room-item-fav-action-notification = Set { $name } as favourite
send-message-box-input-placeholder = Type your message here...
## State events
## Common parameters:
## gender = gender of the sender (male/female/neutral)
## stateKeyUser = name of the state key user
## stateKeyUserGender = gender of the state key user
member-state-joined-room = joined the room.
member-state-changed-name-and-avatar = changed { $gender ->
[male] his
[female] her
*[neutral] their
} name and avatar.
member-state-changed-name = changed { $gender ->
[male] his
[female] her
*[neutral] their
} name.
member-state-changed-avatar = changed { $gender ->
[male] his
[female] her
*[neutral] their
} avatar.
member-state-invited = invited { $stateKeyUser } to the room.
member-state-left = left the room.
member-state-kicked = kicked { $stateKeyUser }.
member-state-banned = banned { $stateKeyUser }.
member-state-unbanned = unbanned { $stateKeyUser }.
state-room-created = created the room.
state-room-name-changed = changed the name of the room to { $newName }.
state-room-topic-changed = changed the topic of the room to { $newTopic }.
state-room-avatar-changed = changed the avatar of the room.
state-room-pinned-events-changed = changed the pinned events of the room.
state-room-alias-changed = changed the aliases of the room.
state-room-join-rules-changed = changed join rules of the room.
state-room-power-levels-changed = changed power levels of the room.
state-room-encryption-activated = enabled encryption for this room.
event-message-image-sent = sent an image "{ $body }".
+event-message-file-sent = sent a file "{ $body }".
+event-message-video-sent = sent a video "{ $body }".
+event-message-audio-sent = sent an audio "{ $body }".
+event-message-audio-play-audio = Play audio
diff --git a/src/resources.qrc b/src/resources.qrc
index 8cf13b5..19c8593 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -1,29 +1,32 @@
<RCC>
<qresource prefix="/">
<file alias="main.qml">contents/ui/main.qml</file>
<file alias="LoginPage.qml">contents/ui/LoginPage.qml</file>
<file alias="MainPage.qml">contents/ui/MainPage.qml</file>
<file alias="TabView.qml">contents/ui/TabView.qml</file>
<file alias="Tab.qml">contents/ui/Tab.qml</file>
<file alias="RoomListView.qml">contents/ui/RoomListView.qml</file>
<file alias="RoomPage.qml">contents/ui/RoomPage.qml</file>
<file alias="RoomTimelineView.qml">contents/ui/RoomTimelineView.qml</file>
<file alias="SendMessageBox.qml">contents/ui/SendMessageBox.qml</file>
<file alias="EventView.qml">contents/ui/EventView.qml</file>
<file alias="Bubble.qml">contents/ui/Bubble.qml</file>
<file alias="event-types/Simple.qml">contents/ui/event-types/Simple.qml</file>
<file alias="event-types/Text.qml">contents/ui/event-types/Text.qml</file>
<file alias="event-types/Emote.qml">contents/ui/event-types/Emote.qml</file>
<file alias="event-types/Notice.qml">contents/ui/event-types/Notice.qml</file>
<file alias="event-types/State.qml">contents/ui/event-types/State.qml</file>
<file alias="event-types/TextTemplate.qml">contents/ui/event-types/TextTemplate.qml</file>
<file alias="event-types/Image.qml">contents/ui/event-types/Image.qml</file>
+ <file alias="event-types/File.qml">contents/ui/event-types/File.qml</file>
+ <file alias="event-types/Video.qml">contents/ui/event-types/Video.qml</file>
+ <file alias="event-types/Audio.qml">contents/ui/event-types/Audio.qml</file>
<file alias="l10n.js">js/l10n.js</file>
<file alias="fluent-bundle.js">js/transformed-libs/fluent-bundle.js</file>
<file alias="fluent-sequence.js">js/transformed-libs/fluent-sequence.js</file>
<file alias="fluent-langneg.js">js/transformed-libs/fluent-langneg.js</file>
<file alias="bundled-deps.js">js/transformed-libs/bundled-deps.js</file>
<file alias="global-this.js">js/global-this.js</file>
</qresource>
</RCC>
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Jan 19, 4:42 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
55329
Default Alt Text
(24 KB)
Attached To
Mode
rK kazv
Attached
Detach File
Event Timeline
Log In to Comment