Completed
Push — id3-metadata-objects ( 33018f...0cc3db )
by Daniel
07:46
created

FrameFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
ccs 0
cts 3
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * This file is part of the Metadata project.
4
 *
5
 * @author Daniel Schröder <[email protected]>
6
 */
7
8
namespace GravityMedia\Metadata\ID3v2;
9
10
use GravityMedia\Metadata\ID3v2\Filter\CharsetFilter;
11
use GravityMedia\Metadata\ID3v2\Frame\CommentFrame;
12
use GravityMedia\Metadata\ID3v2\Frame\PictureFrame;
13
use GravityMedia\Metadata\ID3v2\Frame\TextFrame;
14
use GravityMedia\Metadata\ID3v2\Reader\LanguageTextFrameReader;
15
use GravityMedia\Metadata\ID3v2\Reader\PictureFrameReader;
16
use GravityMedia\Metadata\ID3v2\Reader\TextFrameReader;
17
use GravityMedia\Stream\Stream;
18
19
/**
20
 * ID3v2 frame factory class.
21
 *
22
 * @package GravityMedia\Metadata
23
 */
24
class FrameFactory
25
{
26
    /**
27
     * @var CharsetFilter
28
     */
29
    private $charsetFilter;
30
31
    /**
32
     * Create ID3v2 frame factory object.
33
     */
34
    public function __construct()
35
    {
36
        $this->charsetFilter = new CharsetFilter();
37
    }
38
39
    /**
40
     * Create frame.
41
     *
42
     * @param Stream $stream
43
     * @param string $name
44
     *
45
     * @return Frame
46
     */
47
    public function createFrame(Stream $stream, $name)
48
    {
49
        if ('UFID' === $name) {
50
            $frame = new Frame();
51
            $frame->setName($name);
52
53
            // TODO: Read unique file identifier.
54
55
            return $frame;
56
        }
57
58
        if ('T' === substr($name, 0, 1)) {
59
            $frame = $this->createTextFrame($stream, $name);
60
61
            if ('TXXX' === $name) {
0 ignored issues
show
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
62
                // TODO: Read user defined text frame.
63
            }
64
65
            return $frame;
66
        }
67
68
        if ('W' === substr($name, 0, 1)) {
69
            $frame = new Frame();
70
            $frame->setName($name);
71
72
            // TODO: Read URL link frame.
73
74
            if ('WXXX' === $name) {
0 ignored issues
show
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
75
                // TODO: Read user defined URL link frame.
76
            }
77
78
            return $frame;
79
        }
80
81
        if ('APIC' === $name) {
82
            return $this->createPictureFrame($stream, $name);
83
        }
84
85
        if ('COMM' === $name) {
86
            return $this->createCommentFrame($stream, $name);
87
        }
88
89
        $frame = new Frame();
90
        $frame->setName($name);
91
92
        return $frame;
93
    }
94
95
    /**
96
     * Create text frame.
97
     *
98
     * @param Stream $stream
99
     * @param string $name
100
     *
101
     * @return TextFrame
102
     */
103
    public function createTextFrame(Stream $stream, $name)
104
    {
105
        $reader = new TextFrameReader($stream);
106
107
        $text = $this->charsetFilter->decode($reader->getText(), $reader->getEncoding());
108
109
        $frame = new TextFrame();
110
        $frame->setName($name);
111
        $frame->setTexts(explode("\x00", rtrim($text, "\x00")));
112
113
        return $frame;
114
    }
115
116
    /**
117
     * Create picture frame.
118
     *
119
     * @param Stream $stream
120
     * @param string $name
121
     *
122
     * @return PictureFrame
123
     */
124
    public function createPictureFrame(Stream $stream, $name)
125
    {
126
        $reader = new PictureFrameReader($stream);
127
128
        $frame = new PictureFrame();
129
        $frame->setName($name);
130
        $frame->setMimeType($reader->getMimeType());
131
        $frame->setType($reader->getType());
132
        $frame->setDescription($this->charsetFilter->decode($reader->getDescription(), $reader->getEncoding()));
133
        $frame->setData($reader->getData());
134
135
        return $frame;
136
    }
137
138
    /**
139
     * Create comment frame
140
     *
141
     * @param Stream $stream
142
     * @param string $name
143
     *
144
     * @return CommentFrame
145
     */
146
    public function createCommentFrame(Stream $stream, $name)
147
    {
148
        $reader = new LanguageTextFrameReader($stream);
149
150
        $text = $this->charsetFilter->decode($reader->getText(), $reader->getEncoding());
151
        $texts = explode("\x00", rtrim($text, "\x00"));
152
        $description = array_shift($texts);
153
154
        $frame = new CommentFrame();
155
        $frame->setName($name);
156
        $frame->setLanguage($reader->getLanguage());
157
        $frame->setDescription($description);
158
        $frame->setTexts($texts);
159
160
        return $frame;
161
    }
162
}
163