Skip to content

Commit e91d8c0

Browse files
author
zlsl
committed
up
1 parent 681a724 commit e91d8c0

File tree

204 files changed

+198964
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

204 files changed

+198964
-2
lines changed

.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
COMPOSE_PROJECT_NAME=flibusta

Flibusta.Net/.gitkeep

Whitespace-only changes.

FlibustaSQL/.gitkeep

Whitespace-only changes.

FlibustaSQL/psql/.gitkeep

Whitespace-only changes.

LICENSE

Lines changed: 339 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,27 @@
1-
# flibusta
2-
Фронтенд для архивов Флибусты
1+
# Docker-контейнер для локальной копии Флибусты.
2+
3+
Отображение книг, поиск по заголовкам, сборникам, авторам, жанрам. Открываются в браузере форматы fb2, docx, rtf, mobi, epub, txt, html. Для fb2 сохраняется позиция чтения.
4+
5+
Возможность создания "книжных полок" для избранных книг, авторов и сборников.
6+
7+
Встроенный сервис OPDS для читалок.
8+
9+
|![x](blob/x1.png)|![x](blob/x2.png)|![x](blob/x3.png)|![x](blob/x4.png)|
10+
|---|---|---|---|
11+
## Установка:
12+
13+
1. Установить сервисы docker для вашего сервера.
14+
2. Разместить файлы проекта в каталог на сервере.
15+
3. Для выполнения обновления необходимо разместить фалы дампа Флибусты (*.sql) в каталог FlibustaSQL.
16+
4. Файлы архивов Флибусты (*.zip) необходимо размещать в каталоге Flibusta.Net.
17+
5. Чтобы отображались фото авторов и обложек для форматов, отличных от FB2, необходимо разместить в каталоге FlibustaSQL файлы архивов lib.a.attached.zip и lib.b.attached.zip соответственно.
18+
6. Выполнить docker-compose build
19+
7. Выполнить docker-compose up -d
20+
8. Локальный портал будет доступен на порту 27100. Доступен также OPDS каталог: /opds/
21+
9. Выполнить "Обновление базы" через пункт меню "Сервис"
22+
23+
Каталоги FlibustaSQL, cache и их подкаталоги должны иметь права на запись для контейнера. Скрипты в каталоге /application/tools/ должны иметь права на выполнение.
24+
25+
Для обновления базы с новыми файлами выполнить пункты 3, 4, 5, 9
26+
27+

application/djvu.php

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
<?PHP
2+
// $Id$
3+
// $Author$
4+
5+
// Class: FreeMED.Djvu
6+
//
7+
// Wrapper class to handle Djvu documents.
8+
//
9+
class Djvu {
10+
11+
var $filename;
12+
13+
// Constructor: Djvu
14+
//
15+
// Parameters:
16+
//
17+
// $filename - Filename of source DjVu file.
18+
//
19+
function Djvu ( $filename ) {
20+
$this->filename = $filename;
21+
if (!file_exists($filename)) { die ("Djvu: file does not exist \"$filename\""); }
22+
} // end constructor
23+
24+
// Method: NumberOfPages
25+
//
26+
// Returns:
27+
//
28+
// Number of pages in the current Djvu document.
29+
//
30+
function NumberOfPages ( ) {
31+
$filename = $this->filename;
32+
33+
// Get basic info dump from file
34+
$info = `djvudump "$filename" | grep "Document directory"`;
35+
36+
// If no info, one page
37+
if (empty($info)) { return 1; }
38+
39+
// Split down to page number
40+
$_h1 = explode(", ", $info);
41+
$_h2 = explode(" ", trim($_h1[1]));
42+
43+
// Return next to last segment
44+
return $_h2[count($_h2)-2];
45+
} // end method NumberOfPages
46+
47+
// Method: GetPage
48+
//
49+
// Get page image
50+
//
51+
// Parameters:
52+
//
53+
// $page - Page number to return
54+
//
55+
// $contents - (optional) Boolean, return the contents instead of the
56+
// filename. Defaults to false.
57+
//
58+
// $force_ps - (optional) Boolean, force no JPEG conversion. Defaults
59+
// to false.
60+
//
61+
// $force_rotate - (optional) Boolean, force 90 degree rotation
62+
//
63+
// Returns:
64+
//
65+
// Either JPEG image of file in string or name of temporary file.
66+
//
67+
function GetPage ( $page, $contents = false, $force_ps = false, $force_rotation = true ) {
68+
$filename = $this->filename;
69+
70+
$s = $size."x".$size;
71+
72+
$_t = tempnam('/tmp', 'fmdjvu');
73+
$rotate = $force_rotation ? " -rotate 90 " : "";
74+
if ($force_ps) {
75+
// No conversion ...
76+
$t = $_t.'.ps';
77+
$temp = `djvups -page=$page "$filename" | /usr/bin/convert - ${rotate} "$t"`;
78+
} else {
79+
// Force convert to JPEG
80+
$t = $_t.'.jpg';
81+
$temp = `djvups -page=$page "$filename" | /usr/bin/convert - ${rotate} "$t"`;
82+
}
83+
84+
if ($contents) {
85+
ob_start();
86+
readfile($t);
87+
$c = ob_get_contents();
88+
ob_end_clean();
89+
90+
unlink ($_t);
91+
unlink ($t);
92+
93+
return $c;
94+
} else {
95+
unlink ($_t);
96+
return $t;
97+
}
98+
} // end method GetPage
99+
100+
// Method: GetPageThumbnail
101+
//
102+
// Get textual content of a page thumbnail.
103+
//
104+
// Parameters:
105+
//
106+
// $page - Page number
107+
//
108+
// $size - (optional) Maximum dimension of thumbnail. Defaults to 300 (px).
109+
//
110+
// Returns:
111+
//
112+
// String containing JPEG thumbnail of specified page.
113+
//
114+
function GetPageThumbnail ( $page, $size=300 ) {
115+
$filename = $this->filename;
116+
117+
$s = $size."x".$size;
118+
119+
$_t = tempnam('/tmp', 'fmdjvu');
120+
$t = $_t.'.jpg';
121+
$temp = `djvups -page=$page "$filename" | convert - -scale $s "$t"`;
122+
$temp = `djvups -page=$page "$filename" | convert - "$t"`;
123+
ob_start();
124+
readfile($t);
125+
$contents = ob_get_contents();
126+
ob_end_clean();
127+
128+
unlink ($_t);
129+
unlink ($t);
130+
131+
return $contents;
132+
} // end method GetPageThumbnail
133+
134+
// Method: StoredChunks
135+
//
136+
// Get list of chunks contained in the parent DjVu file.
137+
//
138+
// Returns:
139+
//
140+
// Array of chunk names.
141+
//
142+
function StoredChunks ( ) {
143+
$filename = $this->filename;
144+
145+
$raw = `djvm -l "$filename"`;
146+
147+
// deal by line
148+
$lines = explode("\n", $raw);
149+
150+
foreach ($lines as $__garbage => $line) {
151+
if (eregi('PAGE #', $line)) {
152+
// Split out contents ....
153+
$_h1 = explode('#', $line);
154+
$_h2 = explode(' ', trim($_h1[1]));
155+
156+
$pages[] = trim($_h2[count($_h2) - 1]);
157+
}
158+
}
159+
return $pages;
160+
} // end method StoredChunks
161+
162+
} // end class Djvu
163+

0 commit comments

Comments
 (0)