Mercurial > minori
annotate src/gui/widgets/poster.cc @ 412:05aed03e0111
poster: silence warnings under newer Qt
this is a better impl anyway
| author | Paper <paper@tflc.us> |
|---|---|
| date | Sat, 25 Jul 2026 14:33:03 -0400 |
| parents | 5912dafc6e28 |
| children |
| rev | line source |
|---|---|
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
1 #include "gui/widgets/poster.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
2 #include "core/anime_db.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
3 #include "core/http.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
4 #include "core/session.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
5 #include "core/strings.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
6 #include "gui/widgets/clickable_label.h" |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
7 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
8 #include <QByteArray> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
9 #include <QDebug> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
10 #include <QDesktopServices> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
11 #include <QFrame> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
12 #include <QHBoxLayout> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
13 #include <QLabel> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
14 #include <QMessageBox> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
15 #include <QPixmap> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
16 #include <QThread> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
17 #include <QUrl> |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
18 |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
19 #include <iostream> |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
20 |
| 378 | 21 GetPosterThread::GetPosterThread(QObject *parent) : QThread(parent) |
| 22 { | |
| 23 } | |
| 24 | |
| 25 void GetPosterThread::SetId(int id) | |
| 26 { | |
| 27 id_ = id; | |
| 28 } | |
| 29 | |
| 30 void GetPosterThread::run() | |
| 31 { | |
| 32 /* this sucks cuz we can't really STOP the thread easily | |
| 33 * without making it fully finish */ | |
| 34 QImage img = Anime::db.GetAnimePoster(id_); | |
| 35 | |
| 36 emit Finished(img); | |
| 37 } | |
| 38 | |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
39 Poster::Poster(QWidget *parent) : QFrame(parent) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
40 { |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
41 QHBoxLayout *layout = new QHBoxLayout(this); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
42 layout->setContentsMargins(1, 1, 1, 1); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
43 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
44 setCursor(Qt::PointingHandCursor); |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
45 setFixedSize(150, 225); // FIXME need to kill this |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
46 setFrameShape(QFrame::Box); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
47 setFrameShadow(QFrame::Plain); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
48 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
49 label_.setAlignment(Qt::AlignCenter); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
50 layout->addWidget(&label_); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
51 |
| 378 | 52 get_thread_ = new GetPosterThread(nullptr); |
| 53 connect(get_thread_, &GetPosterThread::Finished, this, &Poster::ImageDownloadFinished); | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
54 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
55 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
56 Poster::Poster(const Anime::Anime &anime, QWidget *parent) : Poster(parent) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
57 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
58 SetAnime(anime); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
59 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
60 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
61 Poster::~Poster() |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
62 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
63 /* schedule deletion of the thread */ |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
64 get_thread_->deleteLater(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
65 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
66 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
67 void Poster::DownloadPoster() |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
68 { |
| 378 | 69 /* ;-; */ |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
70 get_thread_->wait(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
71 |
| 378 | 72 get_thread_->SetId(id_); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
73 get_thread_->start(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
74 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
75 |
|
412
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
76 void Poster::OpenServiceUrl(void) |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
77 { |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
78 QDesktopServices::openUrl(service_url_); |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
79 } |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
80 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
81 void Poster::SetAnime(const Anime::Anime &anime) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
82 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
83 label_.clear(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
84 |
| 378 | 85 id_ = anime.GetId(); |
| 86 | |
| 87 if (isVisible()) { | |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
88 DownloadPoster(); |
| 378 | 89 } else { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
90 need_refresh_ = true; |
| 378 | 91 } |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
92 |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
93 std::optional<std::string> url = anime.GetServiceUrl(session.config.service); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
94 |
|
412
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
95 service_url_ = (url) ? Strings::ToQString(url.value()) : ""; |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
96 |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
97 SetClickable(clickable_); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
98 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
99 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
100 void Poster::showEvent(QShowEvent *event) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
101 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
102 if (need_refresh_) { |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
103 DownloadPoster(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
104 need_refresh_ = false; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
105 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
106 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
107 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
108 void Poster::SetClickable(bool enabled) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
109 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
110 clickable_ = enabled; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
111 |
|
412
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
112 /* This is safe if the connection does not exist, it's a no-op. |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
113 * |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
114 * This will remove any connections we've already made so we always |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
115 * only have one ... */ |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
116 disconnect(&label_, &ClickableLabel::clicked, this, &Poster::OpenServiceUrl); |
|
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
117 |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
118 if (clickable_ && !service_url_.isEmpty()) { |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
119 setCursor(Qt::PointingHandCursor); |
|
412
05aed03e0111
poster: silence warnings under newer Qt
Paper <paper@tflc.us>
parents:
378
diff
changeset
|
120 connect(&label_, &ClickableLabel::clicked, this, &Poster::OpenServiceUrl); |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
121 } else { |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
122 setCursor(Qt::ArrowCursor); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
123 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
124 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
125 |
| 378 | 126 void Poster::ImageDownloadFinished(const QImage &img) |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
127 { |
| 378 | 128 img_ = img; |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
129 RenderToLabel(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
130 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
131 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
132 void Poster::RenderToLabel() |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
133 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
134 const QPixmap pixmap = QPixmap::fromImage(img_); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
135 if (pixmap.isNull()) |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
136 return; |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
137 label_.setPixmap(pixmap.scaled(label_.size(), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation)); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
138 } |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
139 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
140 bool Poster::hasHeightForWidth(void) const |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
141 { |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
142 return true; |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
143 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
144 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
145 int Poster::heightForWidth(int w) const |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
146 { |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
147 return static_cast<int>(static_cast<double>(w) * 225 / 150); |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
148 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
149 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
150 void Poster::resizeEvent(QResizeEvent *) |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
151 { |
|
301
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
152 RenderToLabel(); |
|
b1f625b0227c
*: convert all files CRLF -> LF
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
153 } |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
154 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
155 QSize Poster::minimumSizeHint() const |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
156 { |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
157 return QSize(120, heightForWidth(120)); |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
158 } |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
159 |
|
370
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
160 QSize Poster::sizeHint() const |
|
ea3a74ed2ef9
*: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents:
348
diff
changeset
|
161 { |
|
348
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
162 return QSize(150, heightForWidth(150)); |
|
6b0768158dcd
text: redesign almost every widget
Paper <paper@paper.us.eu.org>
parents:
301
diff
changeset
|
163 } |
